From 1dfcca7b9c40e4d9e7da36f551dc735300aadacf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 19 Mar 2023 22:22:14 +0900
Subject: [PATCH 01/99] build(#10336): init

---
 packages/frontend/.storybook/.gitignore       |    5 +
 packages/frontend/.storybook/generate.tsx     |  135 +
 packages/frontend/.storybook/main.ts          |   17 +
 packages/frontend/.storybook/preload-theme.ts |   23 +
 .../frontend/.storybook/preview-head.html     |    3 +
 packages/frontend/.storybook/preview.ts       |   14 +
 packages/frontend/package.json                |   13 +
 .../src/components/MkAbuseReport.stories.ts   |   13 +
 .../components/MkAbuseReportWindow.stories.ts |   13 +
 .../src/components/MkAchievements.stories.ts  |   13 +
 .../src/components/MkAnalogClock.stories.ts   |   13 +
 .../frontend/src/components/MkAsUi.stories.ts |   13 +
 .../src/components/MkAutocomplete.stories.ts  |   13 +
 .../src/components/MkAvatars.stories.ts       |   13 +
 .../src/components/MkButton.stories.ts        |   13 +
 .../src/components/MkCaptcha.stories.ts       |   13 +
 .../MkChannelFollowButton.stories.ts          |   13 +
 .../components/MkChannelPreview.stories.ts    |   13 +
 .../src/components/MkChart.stories.ts         |   13 +
 .../src/components/MkChartLegend.stories.ts   |   13 +
 .../src/components/MkChartTooltip.stories.ts  |   13 +
 .../src/components/MkCheckbox.stories.ts      |   13 +
 .../src/components/MkClickerGame.stories.ts   |   13 +
 .../src/components/MkClipPreview.stories.ts   |   13 +
 .../src/components/MkCode.core.stories.ts     |   13 +
 .../frontend/src/components/MkCode.stories.ts |   13 +
 .../src/components/MkContainer.stories.ts     |   13 +
 .../src/components/MkContextMenu.stories.ts   |   13 +
 .../src/components/MkCropperDialog.stories.ts |   13 +
 .../src/components/MkCwButton.stories.ts      |   13 +
 .../components/MkDateSeparatedList.stories.ts |   13 +
 .../src/components/MkDialog.stories.ts        |   13 +
 .../src/components/MkDigitalClock.stories.ts  |   13 +
 .../src/components/MkDonation.stories.ts      |   13 +
 .../src/components/MkDrive.file.stories.ts    |   13 +
 .../src/components/MkDrive.folder.stories.ts  |   13 +
 .../components/MkDrive.navFolder.stories.ts   |   13 +
 .../src/components/MkDrive.stories.ts         |   13 +
 .../MkDriveFileThumbnail.stories.ts           |   13 +
 .../components/MkDriveSelectDialog.stories.ts |   13 +
 .../src/components/MkDriveWindow.stories.ts   |   13 +
 .../MkEmojiPicker.section.stories.ts          |   13 +
 .../src/components/MkEmojiPicker.stories.ts   |   13 +
 .../components/MkEmojiPickerDialog.stories.ts |   13 +
 .../components/MkEmojiPickerWindow.stories.ts |   13 +
 .../components/MkFeaturedPhotos.stories.ts    |   13 +
 .../MkFileCaptionEditWindow.stories.ts        |   13 +
 .../components/MkFileListForAdmin.stories.ts  |   13 +
 .../src/components/MkFlashPreview.stories.ts  |   13 +
 .../components/MkFoldableSection.stories.ts   |   13 +
 .../src/components/MkFolder.stories.ts        |   13 +
 .../src/components/MkFollowButton.stories.ts  |   13 +
 .../components/MkForgotPassword.stories.ts    |   13 +
 .../src/components/MkFormDialog.stories.ts    |   13 +
 .../MkGalleryPostPreview.stories.ts           |   13 +
 .../src/components/MkGoogle.stories.ts        |   13 +
 .../src/components/MkHeatmap.stories.ts       |   13 +
 .../src/components/MkImageViewer.stories.ts   |   13 +
 .../components/MkImgWithBlurhash.stories.ts   |   13 +
 .../frontend/src/components/MkInfo.stories.ts |   13 +
 .../src/components/MkInput.stories.ts         |   13 +
 .../components/MkInstanceCardMini.stories.ts  |   13 +
 .../src/components/MkInstanceStats.stories.ts |   13 +
 .../components/MkInstanceTicker.stories.ts    |   13 +
 .../src/components/MkKeyValue.stories.ts      |   13 +
 .../src/components/MkLaunchPad.stories.ts     |   13 +
 .../frontend/src/components/MkLink.stories.ts |   13 +
 .../src/components/MkMarquee.stories.ts       |   13 +
 .../src/components/MkMediaBanner.stories.ts   |   13 +
 .../src/components/MkMediaImage.stories.ts    |   13 +
 .../src/components/MkMediaList.stories.ts     |   13 +
 .../src/components/MkMediaVideo.stories.ts    |   13 +
 .../src/components/MkMention.stories.ts       |   13 +
 .../src/components/MkMenu.child.stories.ts    |   13 +
 .../frontend/src/components/MkMenu.stories.ts |   13 +
 .../src/components/MkMiniChart.stories.ts     |   13 +
 .../src/components/MkModal.stories.ts         |   13 +
 .../components/MkModalPageWindow.stories.ts   |   13 +
 .../src/components/MkModalWindow.stories.ts   |   13 +
 .../frontend/src/components/MkNote.stories.ts |   13 +
 .../src/components/MkNoteDetailed.stories.ts  |   13 +
 .../src/components/MkNoteHeader.stories.ts    |   13 +
 .../src/components/MkNotePreview.stories.ts   |   13 +
 .../src/components/MkNoteSimple.stories.ts    |   13 +
 .../src/components/MkNoteSub.stories.ts       |   13 +
 .../src/components/MkNotes.stories.ts         |   13 +
 .../src/components/MkNotification.stories.ts  |   13 +
 .../MkNotificationSettingWindow.stories.ts    |   13 +
 .../src/components/MkNotifications.stories.ts |   13 +
 .../src/components/MkNumber.stories.ts        |   13 +
 .../src/components/MkNumberDiff.stories.ts    |   13 +
 .../src/components/MkObjectView.stories.ts    |   13 +
 .../components/MkObjectView.value.stories.ts  |   13 +
 .../frontend/src/components/MkOmit.stories.ts |   13 +
 .../src/components/MkPagePreview.stories.ts   |   13 +
 .../src/components/MkPageWindow.stories.ts    |   13 +
 .../src/components/MkPagination.stories.ts    |   13 +
 .../src/components/MkPlusOneEffect.stories.ts |   13 +
 .../frontend/src/components/MkPoll.stories.ts |   13 +
 .../src/components/MkPollEditor.stories.ts    |   13 +
 .../src/components/MkPopupMenu.stories.ts     |   13 +
 .../src/components/MkPostForm.stories.ts      |   13 +
 .../components/MkPostFormAttaches.stories.ts  |   13 +
 .../components/MkPostFormDialog.stories.ts    |   13 +
 .../MkPushNotificationAllowButton.stories.ts  |   13 +
 .../src/components/MkRadio.stories.ts         |   13 +
 .../src/components/MkRadios.stories.ts        |   13 +
 .../src/components/MkRange.stories.ts         |   13 +
 .../MkReactedUsersDialog.stories.ts           |   13 +
 .../components/MkReactionEffect.stories.ts    |   13 +
 .../src/components/MkReactionIcon.stories.ts  |   13 +
 .../components/MkReactionTooltip.stories.ts   |   13 +
 .../MkReactionsViewer.details.stories.ts      |   13 +
 .../MkReactionsViewer.reaction.stories.ts     |   13 +
 .../components/MkReactionsViewer.stories.ts   |   13 +
 .../src/components/MkRemoteCaution.stories.ts |   13 +
 .../components/MkRetentionHeatmap.stories.ts  |   13 +
 .../src/components/MkRippleEffect.stories.ts  |   13 +
 .../src/components/MkRolePreview.stories.ts   |   13 +
 .../src/components/MkSample.stories.ts        |   13 +
 .../src/components/MkSelect.stories.ts        |   13 +
 .../src/components/MkSignin.stories.ts        |   13 +
 .../src/components/MkSigninDialog.stories.ts  |   13 +
 .../src/components/MkSignup.stories.ts        |   13 +
 .../src/components/MkSignupDialog.stories.ts  |   13 +
 .../src/components/MkSparkle.stories.ts       |   13 +
 .../components/MkSubNoteContent.stories.ts    |   13 +
 .../src/components/MkSuperMenu.stories.ts     |   13 +
 .../src/components/MkSwitch.stories.ts        |   13 +
 .../frontend/src/components/MkTab.stories.ts  |   13 +
 .../src/components/MkTagCloud.stories.ts      |   13 +
 .../src/components/MkTextarea.stories.ts      |   13 +
 .../src/components/MkTimeline.stories.ts      |   13 +
 .../src/components/MkToast.stories.ts         |   13 +
 .../MkTokenGenerateWindow.stories.ts          |   13 +
 .../src/components/MkTooltip.stories.ts       |   13 +
 .../src/components/MkUpdated.stories.ts       |   13 +
 .../src/components/MkUrlPreview.stories.ts    |   13 +
 .../components/MkUrlPreviewPopup.stories.ts   |   13 +
 .../src/components/MkUserCardMini.stories.ts  |   13 +
 .../src/components/MkUserInfo.stories.ts      |   13 +
 .../src/components/MkUserList.stories.ts      |   13 +
 .../MkUserOnlineIndicator.stories.ts          |   13 +
 .../src/components/MkUserPopup.stories.ts     |   13 +
 .../components/MkUserSelectDialog.stories.ts  |   13 +
 .../src/components/MkUsersTooltip.stories.ts  |   13 +
 .../components/MkVisibilityPicker.stories.ts  |   13 +
 .../src/components/MkWaitingDialog.stories.ts |   13 +
 .../src/components/MkWidgets.stories.ts       |   13 +
 .../src/components/MkWindow.stories.ts        |   13 +
 .../src/components/MkYoutubePlayer.stories.ts |   13 +
 .../src/components/form/link.stories.ts       |   13 +
 .../src/components/form/section.stories.ts    |   13 +
 .../src/components/form/slot.stories.ts       |   13 +
 .../src/components/form/split.stories.ts      |   13 +
 .../src/components/form/suspense.stories.ts   |   13 +
 .../src/components/global/MkA.stories.ts      |   13 +
 .../src/components/global/MkAcct.stories.ts   |   13 +
 .../src/components/global/MkAd.stories.ts     |   13 +
 .../src/components/global/MkAvatar.stories.ts |   13 +
 .../global/MkCustomEmoji.stories.ts           |   13 +
 .../components/global/MkEllipsis.stories.ts   |   13 +
 .../src/components/global/MkEmoji.stories.ts  |   13 +
 .../src/components/global/MkError.stories.ts  |   13 +
 .../components/global/MkLoading.stories.ts    |   13 +
 .../MkMisskeyFlavoredMarkdown.stories.ts      |   13 +
 .../components/global/MkPageHeader.stories.ts |   13 +
 .../global/MkPageHeader.tabs.stories.ts       |   13 +
 .../src/components/global/MkSpacer.stories.ts |   13 +
 .../global/MkStickyContainer.stories.ts       |   13 +
 .../src/components/global/MkTime.stories.ts   |   13 +
 .../src/components/global/MkUrl.stories.ts    |   13 +
 .../components/global/MkUserName.stories.ts   |   13 +
 .../components/global/RouterView.stories.ts   |   13 +
 .../src/components/page/page.block.stories.ts |   13 +
 .../components/page/page.button.stories.ts    |   13 +
 .../components/page/page.canvas.stories.ts    |   13 +
 .../components/page/page.counter.stories.ts   |   13 +
 .../src/components/page/page.if.stories.ts    |   13 +
 .../src/components/page/page.image.stories.ts |   13 +
 .../src/components/page/page.note.stories.ts  |   13 +
 .../page/page.number-input.stories.ts         |   13 +
 .../src/components/page/page.post.stories.ts  |   13 +
 .../page/page.radio-button.stories.ts         |   13 +
 .../components/page/page.section.stories.ts   |   13 +
 .../src/components/page/page.stories.ts       |   13 +
 .../components/page/page.switch.stories.ts    |   13 +
 .../page/page.text-input.stories.ts           |   13 +
 .../src/components/page/page.text.stories.ts  |   13 +
 .../page/page.textarea-input.stories.ts       |   13 +
 .../components/page/page.textarea.stories.ts  |   13 +
 .../frontend/src/pages/_empty_.stories.ts     |   13 +
 .../frontend/src/pages/_error_.stories.ts     |   13 +
 .../frontend/src/pages/_loading_.stories.ts   |   13 +
 .../src/pages/about-misskey.stories.ts        |   13 +
 .../src/pages/about.emojis.stories.ts         |   13 +
 .../src/pages/about.federation.stories.ts     |   13 +
 packages/frontend/src/pages/about.stories.ts  |   13 +
 .../src/pages/achievements.stories.ts         |   13 +
 .../frontend/src/pages/admin-file.stories.ts  |   13 +
 .../pages/admin/RolesEditorFormula.stories.ts |   13 +
 .../src/pages/admin/_header_.stories.ts       |   13 +
 .../src/pages/admin/abuses.stories.ts         |   13 +
 .../frontend/src/pages/admin/ads.stories.ts   |   13 +
 .../src/pages/admin/announcements.stories.ts  |   13 +
 .../src/pages/admin/bot-protection.stories.ts |   13 +
 .../src/pages/admin/database.stories.ts       |   13 +
 .../src/pages/admin/email-settings.stories.ts |   13 +
 .../src/pages/admin/federation.stories.ts     |   13 +
 .../frontend/src/pages/admin/files.stories.ts |   13 +
 .../frontend/src/pages/admin/index.stories.ts |   13 +
 .../src/pages/admin/instance-block.stories.ts |   13 +
 .../src/pages/admin/moderation.stories.ts     |   13 +
 .../src/pages/admin/object-storage.stories.ts |   13 +
 .../src/pages/admin/other-settings.stories.ts |   13 +
 .../admin/overview.active-users.stories.ts    |   13 +
 .../admin/overview.ap-requests.stories.ts     |   13 +
 .../admin/overview.federation.stories.ts      |   13 +
 .../pages/admin/overview.heatmap.stories.ts   |   13 +
 .../pages/admin/overview.instances.stories.ts |   13 +
 .../admin/overview.moderators.stories.ts      |   13 +
 .../src/pages/admin/overview.pie.stories.ts   |   13 +
 .../admin/overview.queue.chart.stories.ts     |   13 +
 .../src/pages/admin/overview.queue.stories.ts |   13 +
 .../pages/admin/overview.retention.stories.ts |   13 +
 .../src/pages/admin/overview.stats.stories.ts |   13 +
 .../src/pages/admin/overview.stories.ts       |   13 +
 .../src/pages/admin/overview.users.stories.ts |   13 +
 .../src/pages/admin/proxy-account.stories.ts  |   13 +
 .../pages/admin/queue.chart.chart.stories.ts  |   13 +
 .../src/pages/admin/queue.chart.stories.ts    |   13 +
 .../frontend/src/pages/admin/queue.stories.ts |   13 +
 .../src/pages/admin/relays.stories.ts         |   13 +
 .../src/pages/admin/roles.edit.stories.ts     |   13 +
 .../src/pages/admin/roles.editor.stories.ts   |   13 +
 .../src/pages/admin/roles.role.stories.ts     |   13 +
 .../frontend/src/pages/admin/roles.stories.ts |   13 +
 .../src/pages/admin/security.stories.ts       |   13 +
 .../src/pages/admin/settings.stories.ts       |   13 +
 .../frontend/src/pages/admin/users.stories.ts |   13 +
 packages/frontend/src/pages/ads.stories.ts    |   13 +
 .../src/pages/announcements.stories.ts        |   13 +
 .../src/pages/antenna-timeline.stories.ts     |   13 +
 .../frontend/src/pages/api-console.stories.ts |   13 +
 .../frontend/src/pages/auth.form.stories.ts   |   13 +
 packages/frontend/src/pages/auth.stories.ts   |   13 +
 .../src/pages/channel-editor.stories.ts       |   13 +
 .../frontend/src/pages/channel.stories.ts     |   13 +
 .../frontend/src/pages/channels.stories.ts    |   13 +
 .../frontend/src/pages/clicker.stories.ts     |   13 +
 packages/frontend/src/pages/clip.stories.ts   |   13 +
 .../pages/custom-emojis-manager.stories.ts    |   13 +
 packages/frontend/src/pages/drive.stories.ts  |   13 +
 .../src/pages/emoji-edit-dialog.stories.ts    |   13 +
 .../src/pages/emojis.emoji.stories.ts         |   13 +
 .../src/pages/explore.featured.stories.ts     |   13 +
 .../src/pages/explore.roles.stories.ts        |   13 +
 .../frontend/src/pages/explore.stories.ts     |   13 +
 .../src/pages/explore.users.stories.ts        |   13 +
 .../frontend/src/pages/favorites.stories.ts   |   13 +
 .../src/pages/flash/flash-edit.stories.ts     |   13 +
 .../src/pages/flash/flash-index.stories.ts    |   13 +
 .../frontend/src/pages/flash/flash.stories.ts |   13 +
 .../src/pages/follow-requests.stories.ts      |   13 +
 packages/frontend/src/pages/follow.stories.ts |   13 +
 .../src/pages/gallery/edit.stories.ts         |   13 +
 .../src/pages/gallery/index.stories.ts        |   13 +
 .../src/pages/gallery/post.stories.ts         |   13 +
 .../src/pages/instance-info.stories.ts        |   13 +
 packages/frontend/src/pages/miauth.stories.ts |   13 +
 .../src/pages/my-antennas/create.stories.ts   |   13 +
 .../src/pages/my-antennas/edit.stories.ts     |   13 +
 .../src/pages/my-antennas/editor.stories.ts   |   13 +
 .../src/pages/my-antennas/index.stories.ts    |   13 +
 .../src/pages/my-clips/index.stories.ts       |   13 +
 .../src/pages/my-lists/index.stories.ts       |   13 +
 .../src/pages/my-lists/list.stories.ts        |   13 +
 .../frontend/src/pages/not-found.stories.ts   |   13 +
 packages/frontend/src/pages/note.stories.ts   |   13 +
 .../src/pages/notifications.stories.ts        |   13 +
 .../els/page-editor.el.image.stories.ts       |   13 +
 .../els/page-editor.el.note.stories.ts        |   13 +
 .../els/page-editor.el.section.stories.ts     |   13 +
 .../els/page-editor.el.text.stories.ts        |   13 +
 .../page-editor/page-editor.blocks.stories.ts |   13 +
 .../page-editor.container.stories.ts          |   13 +
 .../pages/page-editor/page-editor.stories.ts  |   13 +
 packages/frontend/src/pages/page.stories.ts   |   13 +
 packages/frontend/src/pages/pages.stories.ts  |   13 +
 .../frontend/src/pages/preview.stories.ts     |   13 +
 .../src/pages/registry.keys.stories.ts        |   13 +
 .../frontend/src/pages/registry.stories.ts    |   13 +
 .../src/pages/registry.value.stories.ts       |   13 +
 .../src/pages/reset-password.stories.ts       |   13 +
 packages/frontend/src/pages/role.stories.ts   |   13 +
 .../frontend/src/pages/scratchpad.stories.ts  |   13 +
 packages/frontend/src/pages/search.stories.ts |   13 +
 .../pages/settings/2fa.qrdialog.stories.ts    |   13 +
 .../src/pages/settings/2fa.stories.ts         |   13 +
 .../pages/settings/account-info.stories.ts    |   13 +
 .../src/pages/settings/accounts.stories.ts    |   13 +
 .../src/pages/settings/api.stories.ts         |   13 +
 .../src/pages/settings/apps.stories.ts        |   13 +
 .../src/pages/settings/custom-css.stories.ts  |   13 +
 .../src/pages/settings/deck.stories.ts        |   13 +
 .../pages/settings/delete-account.stories.ts  |   13 +
 .../src/pages/settings/drive.stories.ts       |   13 +
 .../src/pages/settings/email.stories.ts       |   13 +
 .../src/pages/settings/general.stories.ts     |   13 +
 .../pages/settings/import-export.stories.ts   |   13 +
 .../src/pages/settings/index.stories.ts       |   13 +
 .../pages/settings/instance-mute.stories.ts   |   13 +
 .../src/pages/settings/mute-block.stories.ts  |   13 +
 .../src/pages/settings/navbar.stories.ts      |   13 +
 .../pages/settings/notifications.stories.ts   |   13 +
 .../src/pages/settings/other.stories.ts       |   13 +
 .../pages/settings/plugin.install.stories.ts  |   13 +
 .../src/pages/settings/plugin.stories.ts      |   13 +
 .../settings/preferences-backups.stories.ts   |   13 +
 .../src/pages/settings/privacy.stories.ts     |   13 +
 .../src/pages/settings/profile.stories.ts     |   13 +
 .../src/pages/settings/reaction.stories.ts    |   13 +
 .../src/pages/settings/roles.stories.ts       |   13 +
 .../src/pages/settings/security.stories.ts    |   13 +
 .../pages/settings/sounds.sound.stories.ts    |   13 +
 .../src/pages/settings/sounds.stories.ts      |   13 +
 .../settings/statusbar.statusbar.stories.ts   |   13 +
 .../src/pages/settings/statusbar.stories.ts   |   13 +
 .../pages/settings/theme.install.stories.ts   |   13 +
 .../pages/settings/theme.manage.stories.ts    |   13 +
 .../src/pages/settings/theme.stories.ts       |   13 +
 .../pages/settings/webhook.edit.stories.ts    |   13 +
 .../src/pages/settings/webhook.new.stories.ts |   13 +
 .../src/pages/settings/webhook.stories.ts     |   13 +
 .../src/pages/settings/word-mute.stories.ts   |   13 +
 packages/frontend/src/pages/share.stories.ts  |   13 +
 .../src/pages/signup-complete.stories.ts      |   13 +
 packages/frontend/src/pages/tag.stories.ts    |   13 +
 .../src/pages/theme-editor.stories.ts         |   13 +
 .../frontend/src/pages/timeline.stories.ts    |   13 +
 .../src/pages/timeline.tutorial.stories.ts    |   13 +
 .../frontend/src/pages/user-info.stories.ts   |   13 +
 .../src/pages/user-list-timeline.stories.ts   |   13 +
 .../frontend/src/pages/user-tag.stories.ts    |   13 +
 .../src/pages/user/achievements.stories.ts    |   13 +
 .../pages/user/activity.following.stories.ts  |   13 +
 .../pages/user/activity.heatmap.stories.ts    |   13 +
 .../src/pages/user/activity.notes.stories.ts  |   13 +
 .../src/pages/user/activity.pv.stories.ts     |   13 +
 .../src/pages/user/activity.stories.ts        |   13 +
 .../frontend/src/pages/user/clips.stories.ts  |   13 +
 .../src/pages/user/follow-list.stories.ts     |   13 +
 .../src/pages/user/followers.stories.ts       |   13 +
 .../src/pages/user/following.stories.ts       |   13 +
 .../src/pages/user/gallery.stories.ts         |   13 +
 .../frontend/src/pages/user/home.stories.ts   |   13 +
 .../src/pages/user/index.activity.stories.ts  |   13 +
 .../src/pages/user/index.photos.stories.ts    |   13 +
 .../frontend/src/pages/user/index.stories.ts  |   13 +
 .../src/pages/user/index.timeline.stories.ts  |   13 +
 .../frontend/src/pages/user/pages.stories.ts  |   13 +
 .../src/pages/user/reactions.stories.ts       |   13 +
 .../src/pages/welcome.entrance.a.stories.ts   |   13 +
 .../src/pages/welcome.entrance.b.stories.ts   |   13 +
 .../src/pages/welcome.entrance.c.stories.ts   |   13 +
 .../src/pages/welcome.setup.stories.ts        |   13 +
 .../frontend/src/pages/welcome.stories.ts     |   13 +
 .../src/pages/welcome.timeline.stories.ts     |   13 +
 .../src/ui/_common_/common.stories.ts         |   13 +
 .../ui/_common_/navbar-for-mobile.stories.ts  |   13 +
 .../src/ui/_common_/navbar.stories.ts         |   13 +
 .../src/ui/_common_/notification.stories.ts   |   13 +
 .../_common_/statusbar-federation.stories.ts  |   13 +
 .../src/ui/_common_/statusbar-rss.stories.ts  |   13 +
 .../_common_/statusbar-user-list.stories.ts   |   13 +
 .../src/ui/_common_/statusbars.stories.ts     |   13 +
 .../ui/_common_/stream-indicator.stories.ts   |   13 +
 .../src/ui/_common_/upload.stories.ts         |   13 +
 .../frontend/src/ui/classic.header.stories.ts |   13 +
 .../src/ui/classic.sidebar.stories.ts         |   13 +
 packages/frontend/src/ui/classic.stories.ts   |   13 +
 packages/frontend/src/ui/deck.stories.ts      |   13 +
 .../src/ui/deck/antenna-column.stories.ts     |   13 +
 .../src/ui/deck/channel-column.stories.ts     |   13 +
 .../src/ui/deck/column-core.stories.ts        |   13 +
 .../frontend/src/ui/deck/column.stories.ts    |   13 +
 .../src/ui/deck/direct-column.stories.ts      |   13 +
 .../src/ui/deck/list-column.stories.ts        |   13 +
 .../src/ui/deck/main-column.stories.ts        |   13 +
 .../src/ui/deck/mentions-column.stories.ts    |   13 +
 .../ui/deck/notifications-column.stories.ts   |   13 +
 .../frontend/src/ui/deck/tl-column.stories.ts |   13 +
 .../src/ui/deck/widgets-column.stories.ts     |   13 +
 packages/frontend/src/ui/universal.stories.ts |   13 +
 .../src/ui/universal.widgets.stories.ts       |   13 +
 packages/frontend/src/ui/visitor.stories.ts   |   13 +
 packages/frontend/src/ui/visitor/a.stories.ts |   13 +
 packages/frontend/src/ui/visitor/b.stories.ts |   13 +
 .../frontend/src/ui/visitor/header.stories.ts |   13 +
 .../frontend/src/ui/visitor/kanban.stories.ts |   13 +
 packages/frontend/src/ui/zen.stories.ts       |   13 +
 .../WidgetActivity.calendar.stories.ts        |   13 +
 .../widgets/WidgetActivity.chart.stories.ts   |   13 +
 .../src/widgets/WidgetActivity.stories.ts     |   13 +
 .../src/widgets/WidgetAichan.stories.ts       |   13 +
 .../src/widgets/WidgetAiscript.stories.ts     |   13 +
 .../src/widgets/WidgetAiscriptApp.stories.ts  |   13 +
 .../src/widgets/WidgetButton.stories.ts       |   13 +
 .../src/widgets/WidgetCalendar.stories.ts     |   13 +
 .../src/widgets/WidgetClicker.stories.ts      |   13 +
 .../src/widgets/WidgetClock.stories.ts        |   13 +
 .../src/widgets/WidgetDigitalClock.stories.ts |   13 +
 .../src/widgets/WidgetFederation.stories.ts   |   13 +
 .../widgets/WidgetInstanceCloud.stories.ts    |   13 +
 .../src/widgets/WidgetInstanceInfo.stories.ts |   13 +
 .../src/widgets/WidgetJobQueue.stories.ts     |   13 +
 .../src/widgets/WidgetMemo.stories.ts         |   13 +
 .../widgets/WidgetNotifications.stories.ts    |   13 +
 .../src/widgets/WidgetOnlineUsers.stories.ts  |   13 +
 .../src/widgets/WidgetPhotos.stories.ts       |   13 +
 .../src/widgets/WidgetPostForm.stories.ts     |   13 +
 .../src/widgets/WidgetProfile.stories.ts      |   13 +
 .../frontend/src/widgets/WidgetRss.stories.ts |   13 +
 .../src/widgets/WidgetRssTicker.stories.ts    |   13 +
 .../src/widgets/WidgetSlideshow.stories.ts    |   13 +
 .../src/widgets/WidgetTimeline.stories.ts     |   13 +
 .../src/widgets/WidgetTrends.stories.ts       |   13 +
 .../src/widgets/WidgetUnixClock.stories.ts    |   13 +
 .../src/widgets/WidgetUserList.stories.ts     |   13 +
 .../widgets/server-metric/cpu-mem.stories.ts  |   13 +
 .../src/widgets/server-metric/cpu.stories.ts  |   13 +
 .../src/widgets/server-metric/disk.stories.ts |   13 +
 .../widgets/server-metric/index.stories.ts    |   13 +
 .../src/widgets/server-metric/mem.stories.ts  |   13 +
 .../src/widgets/server-metric/net.stories.ts  |   13 +
 .../src/widgets/server-metric/pie.stories.ts  |   13 +
 pnpm-lock.yaml                                | 4662 ++++++++++++++++-
 437 files changed, 10295 insertions(+), 154 deletions(-)
 create mode 100644 packages/frontend/.storybook/.gitignore
 create mode 100644 packages/frontend/.storybook/generate.tsx
 create mode 100644 packages/frontend/.storybook/main.ts
 create mode 100644 packages/frontend/.storybook/preload-theme.ts
 create mode 100644 packages/frontend/.storybook/preview-head.html
 create mode 100644 packages/frontend/.storybook/preview.ts
 create mode 100644 packages/frontend/src/components/MkAbuseReport.stories.ts
 create mode 100644 packages/frontend/src/components/MkAbuseReportWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkAchievements.stories.ts
 create mode 100644 packages/frontend/src/components/MkAnalogClock.stories.ts
 create mode 100644 packages/frontend/src/components/MkAsUi.stories.ts
 create mode 100644 packages/frontend/src/components/MkAutocomplete.stories.ts
 create mode 100644 packages/frontend/src/components/MkAvatars.stories.ts
 create mode 100644 packages/frontend/src/components/MkButton.stories.ts
 create mode 100644 packages/frontend/src/components/MkCaptcha.stories.ts
 create mode 100644 packages/frontend/src/components/MkChannelFollowButton.stories.ts
 create mode 100644 packages/frontend/src/components/MkChannelPreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkChart.stories.ts
 create mode 100644 packages/frontend/src/components/MkChartLegend.stories.ts
 create mode 100644 packages/frontend/src/components/MkChartTooltip.stories.ts
 create mode 100644 packages/frontend/src/components/MkCheckbox.stories.ts
 create mode 100644 packages/frontend/src/components/MkClickerGame.stories.ts
 create mode 100644 packages/frontend/src/components/MkClipPreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkCode.core.stories.ts
 create mode 100644 packages/frontend/src/components/MkCode.stories.ts
 create mode 100644 packages/frontend/src/components/MkContainer.stories.ts
 create mode 100644 packages/frontend/src/components/MkContextMenu.stories.ts
 create mode 100644 packages/frontend/src/components/MkCropperDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkCwButton.stories.ts
 create mode 100644 packages/frontend/src/components/MkDateSeparatedList.stories.ts
 create mode 100644 packages/frontend/src/components/MkDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkDigitalClock.stories.ts
 create mode 100644 packages/frontend/src/components/MkDonation.stories.ts
 create mode 100644 packages/frontend/src/components/MkDrive.file.stories.ts
 create mode 100644 packages/frontend/src/components/MkDrive.folder.stories.ts
 create mode 100644 packages/frontend/src/components/MkDrive.navFolder.stories.ts
 create mode 100644 packages/frontend/src/components/MkDrive.stories.ts
 create mode 100644 packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
 create mode 100644 packages/frontend/src/components/MkDriveSelectDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkDriveWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkEmojiPicker.section.stories.ts
 create mode 100644 packages/frontend/src/components/MkEmojiPicker.stories.ts
 create mode 100644 packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkFeaturedPhotos.stories.ts
 create mode 100644 packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkFileListForAdmin.stories.ts
 create mode 100644 packages/frontend/src/components/MkFlashPreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkFoldableSection.stories.ts
 create mode 100644 packages/frontend/src/components/MkFolder.stories.ts
 create mode 100644 packages/frontend/src/components/MkFollowButton.stories.ts
 create mode 100644 packages/frontend/src/components/MkForgotPassword.stories.ts
 create mode 100644 packages/frontend/src/components/MkFormDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkGalleryPostPreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkGoogle.stories.ts
 create mode 100644 packages/frontend/src/components/MkHeatmap.stories.ts
 create mode 100644 packages/frontend/src/components/MkImageViewer.stories.ts
 create mode 100644 packages/frontend/src/components/MkImgWithBlurhash.stories.ts
 create mode 100644 packages/frontend/src/components/MkInfo.stories.ts
 create mode 100644 packages/frontend/src/components/MkInput.stories.ts
 create mode 100644 packages/frontend/src/components/MkInstanceCardMini.stories.ts
 create mode 100644 packages/frontend/src/components/MkInstanceStats.stories.ts
 create mode 100644 packages/frontend/src/components/MkInstanceTicker.stories.ts
 create mode 100644 packages/frontend/src/components/MkKeyValue.stories.ts
 create mode 100644 packages/frontend/src/components/MkLaunchPad.stories.ts
 create mode 100644 packages/frontend/src/components/MkLink.stories.ts
 create mode 100644 packages/frontend/src/components/MkMarquee.stories.ts
 create mode 100644 packages/frontend/src/components/MkMediaBanner.stories.ts
 create mode 100644 packages/frontend/src/components/MkMediaImage.stories.ts
 create mode 100644 packages/frontend/src/components/MkMediaList.stories.ts
 create mode 100644 packages/frontend/src/components/MkMediaVideo.stories.ts
 create mode 100644 packages/frontend/src/components/MkMention.stories.ts
 create mode 100644 packages/frontend/src/components/MkMenu.child.stories.ts
 create mode 100644 packages/frontend/src/components/MkMenu.stories.ts
 create mode 100644 packages/frontend/src/components/MkMiniChart.stories.ts
 create mode 100644 packages/frontend/src/components/MkModal.stories.ts
 create mode 100644 packages/frontend/src/components/MkModalPageWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkModalWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkNote.stories.ts
 create mode 100644 packages/frontend/src/components/MkNoteDetailed.stories.ts
 create mode 100644 packages/frontend/src/components/MkNoteHeader.stories.ts
 create mode 100644 packages/frontend/src/components/MkNotePreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkNoteSimple.stories.ts
 create mode 100644 packages/frontend/src/components/MkNoteSub.stories.ts
 create mode 100644 packages/frontend/src/components/MkNotes.stories.ts
 create mode 100644 packages/frontend/src/components/MkNotification.stories.ts
 create mode 100644 packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkNotifications.stories.ts
 create mode 100644 packages/frontend/src/components/MkNumber.stories.ts
 create mode 100644 packages/frontend/src/components/MkNumberDiff.stories.ts
 create mode 100644 packages/frontend/src/components/MkObjectView.stories.ts
 create mode 100644 packages/frontend/src/components/MkObjectView.value.stories.ts
 create mode 100644 packages/frontend/src/components/MkOmit.stories.ts
 create mode 100644 packages/frontend/src/components/MkPagePreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkPageWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkPagination.stories.ts
 create mode 100644 packages/frontend/src/components/MkPlusOneEffect.stories.ts
 create mode 100644 packages/frontend/src/components/MkPoll.stories.ts
 create mode 100644 packages/frontend/src/components/MkPollEditor.stories.ts
 create mode 100644 packages/frontend/src/components/MkPopupMenu.stories.ts
 create mode 100644 packages/frontend/src/components/MkPostForm.stories.ts
 create mode 100644 packages/frontend/src/components/MkPostFormAttaches.stories.ts
 create mode 100644 packages/frontend/src/components/MkPostFormDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
 create mode 100644 packages/frontend/src/components/MkRadio.stories.ts
 create mode 100644 packages/frontend/src/components/MkRadios.stories.ts
 create mode 100644 packages/frontend/src/components/MkRange.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactedUsersDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionEffect.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionIcon.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionTooltip.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionsViewer.details.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
 create mode 100644 packages/frontend/src/components/MkReactionsViewer.stories.ts
 create mode 100644 packages/frontend/src/components/MkRemoteCaution.stories.ts
 create mode 100644 packages/frontend/src/components/MkRetentionHeatmap.stories.ts
 create mode 100644 packages/frontend/src/components/MkRippleEffect.stories.ts
 create mode 100644 packages/frontend/src/components/MkRolePreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkSample.stories.ts
 create mode 100644 packages/frontend/src/components/MkSelect.stories.ts
 create mode 100644 packages/frontend/src/components/MkSignin.stories.ts
 create mode 100644 packages/frontend/src/components/MkSigninDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkSignup.stories.ts
 create mode 100644 packages/frontend/src/components/MkSignupDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkSparkle.stories.ts
 create mode 100644 packages/frontend/src/components/MkSubNoteContent.stories.ts
 create mode 100644 packages/frontend/src/components/MkSuperMenu.stories.ts
 create mode 100644 packages/frontend/src/components/MkSwitch.stories.ts
 create mode 100644 packages/frontend/src/components/MkTab.stories.ts
 create mode 100644 packages/frontend/src/components/MkTagCloud.stories.ts
 create mode 100644 packages/frontend/src/components/MkTextarea.stories.ts
 create mode 100644 packages/frontend/src/components/MkTimeline.stories.ts
 create mode 100644 packages/frontend/src/components/MkToast.stories.ts
 create mode 100644 packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkTooltip.stories.ts
 create mode 100644 packages/frontend/src/components/MkUpdated.stories.ts
 create mode 100644 packages/frontend/src/components/MkUrlPreview.stories.ts
 create mode 100644 packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserCardMini.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserInfo.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserList.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserPopup.stories.ts
 create mode 100644 packages/frontend/src/components/MkUserSelectDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkUsersTooltip.stories.ts
 create mode 100644 packages/frontend/src/components/MkVisibilityPicker.stories.ts
 create mode 100644 packages/frontend/src/components/MkWaitingDialog.stories.ts
 create mode 100644 packages/frontend/src/components/MkWidgets.stories.ts
 create mode 100644 packages/frontend/src/components/MkWindow.stories.ts
 create mode 100644 packages/frontend/src/components/MkYoutubePlayer.stories.ts
 create mode 100644 packages/frontend/src/components/form/link.stories.ts
 create mode 100644 packages/frontend/src/components/form/section.stories.ts
 create mode 100644 packages/frontend/src/components/form/slot.stories.ts
 create mode 100644 packages/frontend/src/components/form/split.stories.ts
 create mode 100644 packages/frontend/src/components/form/suspense.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkA.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkAcct.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkAd.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkAvatar.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkCustomEmoji.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkEllipsis.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkEmoji.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkError.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkLoading.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkSpacer.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkStickyContainer.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkTime.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkUrl.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkUserName.stories.ts
 create mode 100644 packages/frontend/src/components/global/RouterView.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.block.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.button.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.canvas.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.counter.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.if.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.image.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.note.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.number-input.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.post.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.radio-button.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.section.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.switch.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.text-input.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.text.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.textarea-input.stories.ts
 create mode 100644 packages/frontend/src/components/page/page.textarea.stories.ts
 create mode 100644 packages/frontend/src/pages/_empty_.stories.ts
 create mode 100644 packages/frontend/src/pages/_error_.stories.ts
 create mode 100644 packages/frontend/src/pages/_loading_.stories.ts
 create mode 100644 packages/frontend/src/pages/about-misskey.stories.ts
 create mode 100644 packages/frontend/src/pages/about.emojis.stories.ts
 create mode 100644 packages/frontend/src/pages/about.federation.stories.ts
 create mode 100644 packages/frontend/src/pages/about.stories.ts
 create mode 100644 packages/frontend/src/pages/achievements.stories.ts
 create mode 100644 packages/frontend/src/pages/admin-file.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/_header_.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/abuses.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/ads.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/announcements.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/bot-protection.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/database.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/email-settings.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/federation.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/files.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/index.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/instance-block.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/moderation.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/object-storage.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/other-settings.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.active-users.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.federation.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.heatmap.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.instances.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.moderators.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.pie.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.queue.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.retention.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.stats.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/overview.users.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/proxy-account.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/queue.chart.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/queue.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/relays.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/roles.edit.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/roles.editor.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/roles.role.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/roles.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/security.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/settings.stories.ts
 create mode 100644 packages/frontend/src/pages/admin/users.stories.ts
 create mode 100644 packages/frontend/src/pages/ads.stories.ts
 create mode 100644 packages/frontend/src/pages/announcements.stories.ts
 create mode 100644 packages/frontend/src/pages/antenna-timeline.stories.ts
 create mode 100644 packages/frontend/src/pages/api-console.stories.ts
 create mode 100644 packages/frontend/src/pages/auth.form.stories.ts
 create mode 100644 packages/frontend/src/pages/auth.stories.ts
 create mode 100644 packages/frontend/src/pages/channel-editor.stories.ts
 create mode 100644 packages/frontend/src/pages/channel.stories.ts
 create mode 100644 packages/frontend/src/pages/channels.stories.ts
 create mode 100644 packages/frontend/src/pages/clicker.stories.ts
 create mode 100644 packages/frontend/src/pages/clip.stories.ts
 create mode 100644 packages/frontend/src/pages/custom-emojis-manager.stories.ts
 create mode 100644 packages/frontend/src/pages/drive.stories.ts
 create mode 100644 packages/frontend/src/pages/emoji-edit-dialog.stories.ts
 create mode 100644 packages/frontend/src/pages/emojis.emoji.stories.ts
 create mode 100644 packages/frontend/src/pages/explore.featured.stories.ts
 create mode 100644 packages/frontend/src/pages/explore.roles.stories.ts
 create mode 100644 packages/frontend/src/pages/explore.stories.ts
 create mode 100644 packages/frontend/src/pages/explore.users.stories.ts
 create mode 100644 packages/frontend/src/pages/favorites.stories.ts
 create mode 100644 packages/frontend/src/pages/flash/flash-edit.stories.ts
 create mode 100644 packages/frontend/src/pages/flash/flash-index.stories.ts
 create mode 100644 packages/frontend/src/pages/flash/flash.stories.ts
 create mode 100644 packages/frontend/src/pages/follow-requests.stories.ts
 create mode 100644 packages/frontend/src/pages/follow.stories.ts
 create mode 100644 packages/frontend/src/pages/gallery/edit.stories.ts
 create mode 100644 packages/frontend/src/pages/gallery/index.stories.ts
 create mode 100644 packages/frontend/src/pages/gallery/post.stories.ts
 create mode 100644 packages/frontend/src/pages/instance-info.stories.ts
 create mode 100644 packages/frontend/src/pages/miauth.stories.ts
 create mode 100644 packages/frontend/src/pages/my-antennas/create.stories.ts
 create mode 100644 packages/frontend/src/pages/my-antennas/edit.stories.ts
 create mode 100644 packages/frontend/src/pages/my-antennas/editor.stories.ts
 create mode 100644 packages/frontend/src/pages/my-antennas/index.stories.ts
 create mode 100644 packages/frontend/src/pages/my-clips/index.stories.ts
 create mode 100644 packages/frontend/src/pages/my-lists/index.stories.ts
 create mode 100644 packages/frontend/src/pages/my-lists/list.stories.ts
 create mode 100644 packages/frontend/src/pages/not-found.stories.ts
 create mode 100644 packages/frontend/src/pages/note.stories.ts
 create mode 100644 packages/frontend/src/pages/notifications.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
 create mode 100644 packages/frontend/src/pages/page-editor/page-editor.stories.ts
 create mode 100644 packages/frontend/src/pages/page.stories.ts
 create mode 100644 packages/frontend/src/pages/pages.stories.ts
 create mode 100644 packages/frontend/src/pages/preview.stories.ts
 create mode 100644 packages/frontend/src/pages/registry.keys.stories.ts
 create mode 100644 packages/frontend/src/pages/registry.stories.ts
 create mode 100644 packages/frontend/src/pages/registry.value.stories.ts
 create mode 100644 packages/frontend/src/pages/reset-password.stories.ts
 create mode 100644 packages/frontend/src/pages/role.stories.ts
 create mode 100644 packages/frontend/src/pages/scratchpad.stories.ts
 create mode 100644 packages/frontend/src/pages/search.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/2fa.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/account-info.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/accounts.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/api.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/apps.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/custom-css.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/deck.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/delete-account.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/drive.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/email.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/general.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/import-export.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/index.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/instance-mute.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/mute-block.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/navbar.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/notifications.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/other.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/plugin.install.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/plugin.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/preferences-backups.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/privacy.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/profile.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/reaction.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/roles.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/security.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/sounds.sound.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/sounds.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/statusbar.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/theme.install.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/theme.manage.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/theme.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/webhook.edit.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/webhook.new.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/webhook.stories.ts
 create mode 100644 packages/frontend/src/pages/settings/word-mute.stories.ts
 create mode 100644 packages/frontend/src/pages/share.stories.ts
 create mode 100644 packages/frontend/src/pages/signup-complete.stories.ts
 create mode 100644 packages/frontend/src/pages/tag.stories.ts
 create mode 100644 packages/frontend/src/pages/theme-editor.stories.ts
 create mode 100644 packages/frontend/src/pages/timeline.stories.ts
 create mode 100644 packages/frontend/src/pages/timeline.tutorial.stories.ts
 create mode 100644 packages/frontend/src/pages/user-info.stories.ts
 create mode 100644 packages/frontend/src/pages/user-list-timeline.stories.ts
 create mode 100644 packages/frontend/src/pages/user-tag.stories.ts
 create mode 100644 packages/frontend/src/pages/user/achievements.stories.ts
 create mode 100644 packages/frontend/src/pages/user/activity.following.stories.ts
 create mode 100644 packages/frontend/src/pages/user/activity.heatmap.stories.ts
 create mode 100644 packages/frontend/src/pages/user/activity.notes.stories.ts
 create mode 100644 packages/frontend/src/pages/user/activity.pv.stories.ts
 create mode 100644 packages/frontend/src/pages/user/activity.stories.ts
 create mode 100644 packages/frontend/src/pages/user/clips.stories.ts
 create mode 100644 packages/frontend/src/pages/user/follow-list.stories.ts
 create mode 100644 packages/frontend/src/pages/user/followers.stories.ts
 create mode 100644 packages/frontend/src/pages/user/following.stories.ts
 create mode 100644 packages/frontend/src/pages/user/gallery.stories.ts
 create mode 100644 packages/frontend/src/pages/user/home.stories.ts
 create mode 100644 packages/frontend/src/pages/user/index.activity.stories.ts
 create mode 100644 packages/frontend/src/pages/user/index.photos.stories.ts
 create mode 100644 packages/frontend/src/pages/user/index.stories.ts
 create mode 100644 packages/frontend/src/pages/user/index.timeline.stories.ts
 create mode 100644 packages/frontend/src/pages/user/pages.stories.ts
 create mode 100644 packages/frontend/src/pages/user/reactions.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.entrance.a.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.entrance.b.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.entrance.c.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.setup.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.stories.ts
 create mode 100644 packages/frontend/src/pages/welcome.timeline.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/common.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/navbar.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/notification.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/statusbars.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/stream-indicator.stories.ts
 create mode 100644 packages/frontend/src/ui/_common_/upload.stories.ts
 create mode 100644 packages/frontend/src/ui/classic.header.stories.ts
 create mode 100644 packages/frontend/src/ui/classic.sidebar.stories.ts
 create mode 100644 packages/frontend/src/ui/classic.stories.ts
 create mode 100644 packages/frontend/src/ui/deck.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/antenna-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/channel-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/column-core.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/direct-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/list-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/main-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/mentions-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/notifications-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/tl-column.stories.ts
 create mode 100644 packages/frontend/src/ui/deck/widgets-column.stories.ts
 create mode 100644 packages/frontend/src/ui/universal.stories.ts
 create mode 100644 packages/frontend/src/ui/universal.widgets.stories.ts
 create mode 100644 packages/frontend/src/ui/visitor.stories.ts
 create mode 100644 packages/frontend/src/ui/visitor/a.stories.ts
 create mode 100644 packages/frontend/src/ui/visitor/b.stories.ts
 create mode 100644 packages/frontend/src/ui/visitor/header.stories.ts
 create mode 100644 packages/frontend/src/ui/visitor/kanban.stories.ts
 create mode 100644 packages/frontend/src/ui/zen.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetActivity.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetAichan.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetAiscript.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetButton.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetCalendar.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetClicker.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetClock.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetFederation.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetJobQueue.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetMemo.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetNotifications.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetPhotos.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetPostForm.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetProfile.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetRss.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetRssTicker.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetSlideshow.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetTimeline.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetTrends.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetUnixClock.stories.ts
 create mode 100644 packages/frontend/src/widgets/WidgetUserList.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/cpu.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/disk.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/index.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/mem.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/net.stories.ts
 create mode 100644 packages/frontend/src/widgets/server-metric/pie.stories.ts

diff --git a/packages/frontend/.storybook/.gitignore b/packages/frontend/.storybook/.gitignore
new file mode 100644
index 0000000000..456dd1c29f
--- /dev/null
+++ b/packages/frontend/.storybook/.gitignore
@@ -0,0 +1,5 @@
+# (cd .; pnpm tsc --jsx react --jsxFactory h ./generate.tsx && node ./generate.js)
+/generate.js
+# (cd .; pnpm tsc ./preload-theme.ts && node ./preload-theme.js)
+/preload-theme.js
+/theme.ts
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
new file mode 100644
index 0000000000..e2bf4791c1
--- /dev/null
+++ b/packages/frontend/.storybook/generate.tsx
@@ -0,0 +1,135 @@
+import * as fs from 'node:fs/promises';
+import { basename, dirname, join } from 'node:path/posix';
+import { promisify } from 'node:util';
+import { generate } from 'astring';
+import type * as estree from 'estree';
+import * as glob from 'glob';
+import { format } from 'prettier';
+
+function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>): T {
+	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
+	return Object.assign(props, { type }) as T;
+}
+
+function toStories(component: string, location: string): string {
+	const literal = (
+		<literal value={join(location, component).slice(4, -4)} />
+	) as unknown as estree.Literal;
+	const identifier = (
+		<identifier name={component.slice(0, -4).replace(/[-.]|^(?=\d)/g, '_')} />
+	) as unknown as estree.Identifier;
+	const program = (
+		<program
+			body={[
+				<import-declaration
+					source={<literal value="@storybook/vue3" />}
+					specifiers={[
+						<import-specifier
+							local={<identifier name="Meta" />}
+							imported={<identifier name="Meta" />}
+						/>,
+						<import-specifier
+							local={<identifier name="Story" />}
+							imported={<identifier name="Story" />}
+						/>,
+					]}
+				/>,
+				<import-declaration
+					source={<literal value={`./${component}`} />}
+					specifiers={[
+						<import-default-specifier
+							local={identifier}
+							imported={identifier}
+						/>,
+					]}
+				/>,
+				<variable-declaration
+					kind="const"
+					declarations={[
+						<variable-declarator
+							id={<identifier name="meta" />}
+							init={
+								<object-expression
+									properties={[
+										<property
+											key={<identifier name="title" />}
+											value={literal}
+											kind="init"
+										/>,
+										<property
+											key={<identifier name="component" />}
+											value={identifier}
+											kind="init"
+										/>,
+									]}
+								/>
+							}
+						/>,
+					]}
+				/>,
+				<export-named-declaration
+					declaration={
+						<variable-declaration
+							kind="const"
+							declarations={[
+								<variable-declarator
+									id={<identifier name="Default" />}
+									init={
+										<object-expression
+											properties={[
+												<property
+													key={<identifier name="components" />}
+													value={
+														<object-expression
+															properties={[
+																<property
+																	key={identifier}
+																	value={identifier}
+																	kind="init"
+																	shorthand
+																/>,
+															]}
+														/>
+													}
+													kind="init"
+												/>,
+												<property
+													key={<identifier name="template" />}
+													value={<literal value={`<${component.slice(0, -4)} />`} />}
+													kind="init"
+												/>,
+											]}
+										/>
+									}
+								/>,
+							]}
+						/>
+					}
+				/>,
+				<export-default-declaration
+					declaration={<identifier name="meta" />}
+				/>,
+			]}
+		/>
+	) as unknown as estree.Program;
+	return format(
+		generate(program),
+		{
+			parser: 'babel-ts',
+			singleQuote: true,
+			useTabs: true,
+		}
+	);
+}
+
+promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then((components) => Promise.all(
+	components.map((component) => {
+		const stories = component.replace(/\.vue$/, '.stories.ts');
+		fs.stat(stories).then(
+			() => {},
+			() => {
+				fs.writeFile(stories, toStories(basename(component), dirname(component)));
+			}
+		);
+	})
+));
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
new file mode 100644
index 0000000000..b18956ee45
--- /dev/null
+++ b/packages/frontend/.storybook/main.ts
@@ -0,0 +1,17 @@
+import type { StorybookConfig } from '@storybook/vue3-vite';
+const config: StorybookConfig = {
+	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
+	addons: [
+		'@storybook/addon-links',
+		'@storybook/addon-essentials',
+		'@storybook/addon-interactions',
+	],
+	framework: {
+		name: '@storybook/vue3-vite',
+		options: {},
+	},
+	docs: {
+		autodocs: 'tag',
+	},
+};
+export default config;
diff --git a/packages/frontend/.storybook/preload-theme.ts b/packages/frontend/.storybook/preload-theme.ts
new file mode 100644
index 0000000000..22e128a5c4
--- /dev/null
+++ b/packages/frontend/.storybook/preload-theme.ts
@@ -0,0 +1,23 @@
+import { readFile, writeFile } from 'node:fs/promises';
+import { resolve } from 'node:path';
+import * as JSON5 from 'json5';
+
+Promise.all([
+	readFile(resolve(__dirname, '../src/themes/_light.json5'), 'utf8'),
+	readFile(resolve(__dirname, '../src/themes/l-light.json5'), 'utf8'),
+]).then((sources) => {
+	const base = JSON5.parse(sources[0]);
+	const theme = JSON5.parse(sources[1]);
+	writeFile(
+		resolve(__dirname, './theme.ts'),
+		`export default ${JSON.stringify(
+			Object.assign(theme, {
+				base: undefined,
+				props: Object.assign(base.props, theme.props),
+			}),
+			undefined,
+			2,
+		)} as const;`,
+		'utf8'
+	);
+});
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
new file mode 100644
index 0000000000..e551040105
--- /dev/null
+++ b/packages/frontend/.storybook/preview-head.html
@@ -0,0 +1,3 @@
+<script>
+  window.global = window;
+</script>
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
new file mode 100644
index 0000000000..78d408499f
--- /dev/null
+++ b/packages/frontend/.storybook/preview.ts
@@ -0,0 +1,14 @@
+import type { Preview } from '@storybook/vue3';
+import { applyTheme } from '../src/scripts/theme';
+import theme from './theme';
+import '../src/style.scss';
+
+applyTheme(theme);
+
+const preview = {
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies Preview;
+
+export default preview;
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 54404c8c53..0a7e6b50bb 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -72,8 +72,16 @@
 		"vuedraggable": "next"
 	},
 	"devDependencies": {
+		"@storybook/addon-essentials": "^7.0.0-rc.4",
+		"@storybook/addon-interactions": "^7.0.0-rc.4",
+		"@storybook/addon-links": "^7.0.0-rc.4",
+		"@storybook/blocks": "^7.0.0-rc.4",
+		"@storybook/testing-library": "^0.0.14-next.1",
+		"@storybook/vue3": "^7.0.0-rc.4",
+		"@storybook/vue3-vite": "^7.0.0-rc.4",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
+		"@types/estree": "^1.0.0",
 		"@types/gulp": "4.0.10",
 		"@types/gulp-rename": "2.0.1",
 		"@types/matter-js": "0.18.2",
@@ -90,13 +98,18 @@
 		"@typescript-eslint/parser": "5.54.1",
 		"@vitest/coverage-c8": "^0.29.2",
 		"@vue/runtime-core": "3.2.47",
+		"astring": "^1.8.4",
 		"cross-env": "7.0.3",
 		"cypress": "12.7.0",
 		"eslint": "8.35.0",
 		"eslint-plugin-import": "2.27.5",
 		"eslint-plugin-vue": "9.9.0",
 		"happy-dom": "8.9.0",
+		"prettier": "^2.8.4",
+		"react": "^18.2.0",
+		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
+		"storybook": "^7.0.0-rc.4",
 		"summaly": "github:misskey-dev/summaly",
 		"vitest": "^0.29.2",
 		"vitest-fetch-mock": "^0.2.2",
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
new file mode 100644
index 0000000000..5c2c40b4b3
--- /dev/null
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAbuseReport from './MkAbuseReport.vue';
+const meta = {
+	title: 'components/MkAbuseReport',
+	component: MkAbuseReport,
+};
+export const Default = {
+	components: {
+		MkAbuseReport,
+	},
+	template: '<MkAbuseReport />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
new file mode 100644
index 0000000000..9ef749487d
--- /dev/null
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAbuseReportWindow from './MkAbuseReportWindow.vue';
+const meta = {
+	title: 'components/MkAbuseReportWindow',
+	component: MkAbuseReportWindow,
+};
+export const Default = {
+	components: {
+		MkAbuseReportWindow,
+	},
+	template: '<MkAbuseReportWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
new file mode 100644
index 0000000000..b08f80620f
--- /dev/null
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAchievements from './MkAchievements.vue';
+const meta = {
+	title: 'components/MkAchievements',
+	component: MkAchievements,
+};
+export const Default = {
+	components: {
+		MkAchievements,
+	},
+	template: '<MkAchievements />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
new file mode 100644
index 0000000000..1f7d6f13b5
--- /dev/null
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAnalogClock from './MkAnalogClock.vue';
+const meta = {
+	title: 'components/MkAnalogClock',
+	component: MkAnalogClock,
+};
+export const Default = {
+	components: {
+		MkAnalogClock,
+	},
+	template: '<MkAnalogClock />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
new file mode 100644
index 0000000000..c65e6e7a6a
--- /dev/null
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAsUi from './MkAsUi.vue';
+const meta = {
+	title: 'components/MkAsUi',
+	component: MkAsUi,
+};
+export const Default = {
+	components: {
+		MkAsUi,
+	},
+	template: '<MkAsUi />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
new file mode 100644
index 0000000000..d185d9c4b5
--- /dev/null
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAutocomplete from './MkAutocomplete.vue';
+const meta = {
+	title: 'components/MkAutocomplete',
+	component: MkAutocomplete,
+};
+export const Default = {
+	components: {
+		MkAutocomplete,
+	},
+	template: '<MkAutocomplete />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
new file mode 100644
index 0000000000..245da15bbb
--- /dev/null
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAvatars from './MkAvatars.vue';
+const meta = {
+	title: 'components/MkAvatars',
+	component: MkAvatars,
+};
+export const Default = {
+	components: {
+		MkAvatars,
+	},
+	template: '<MkAvatars />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
new file mode 100644
index 0000000000..d443279fee
--- /dev/null
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkButton from './MkButton.vue';
+const meta = {
+	title: 'components/MkButton',
+	component: MkButton,
+};
+export const Default = {
+	components: {
+		MkButton,
+	},
+	template: '<MkButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
new file mode 100644
index 0000000000..95581133e0
--- /dev/null
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCaptcha from './MkCaptcha.vue';
+const meta = {
+	title: 'components/MkCaptcha',
+	component: MkCaptcha,
+};
+export const Default = {
+	components: {
+		MkCaptcha,
+	},
+	template: '<MkCaptcha />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
new file mode 100644
index 0000000000..8e6db84cc0
--- /dev/null
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkChannelFollowButton from './MkChannelFollowButton.vue';
+const meta = {
+	title: 'components/MkChannelFollowButton',
+	component: MkChannelFollowButton,
+};
+export const Default = {
+	components: {
+		MkChannelFollowButton,
+	},
+	template: '<MkChannelFollowButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
new file mode 100644
index 0000000000..992b2c4ca6
--- /dev/null
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkChannelPreview from './MkChannelPreview.vue';
+const meta = {
+	title: 'components/MkChannelPreview',
+	component: MkChannelPreview,
+};
+export const Default = {
+	components: {
+		MkChannelPreview,
+	},
+	template: '<MkChannelPreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
new file mode 100644
index 0000000000..4beab4df20
--- /dev/null
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkChart from './MkChart.vue';
+const meta = {
+	title: 'components/MkChart',
+	component: MkChart,
+};
+export const Default = {
+	components: {
+		MkChart,
+	},
+	template: '<MkChart />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
new file mode 100644
index 0000000000..adabbb9a78
--- /dev/null
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkChartLegend from './MkChartLegend.vue';
+const meta = {
+	title: 'components/MkChartLegend',
+	component: MkChartLegend,
+};
+export const Default = {
+	components: {
+		MkChartLegend,
+	},
+	template: '<MkChartLegend />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
new file mode 100644
index 0000000000..668aeb017d
--- /dev/null
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkChartTooltip from './MkChartTooltip.vue';
+const meta = {
+	title: 'components/MkChartTooltip',
+	component: MkChartTooltip,
+};
+export const Default = {
+	components: {
+		MkChartTooltip,
+	},
+	template: '<MkChartTooltip />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
new file mode 100644
index 0000000000..e936d1a01b
--- /dev/null
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCheckbox from './MkCheckbox.vue';
+const meta = {
+	title: 'components/MkCheckbox',
+	component: MkCheckbox,
+};
+export const Default = {
+	components: {
+		MkCheckbox,
+	},
+	template: '<MkCheckbox />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
new file mode 100644
index 0000000000..600b27ea14
--- /dev/null
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkClickerGame from './MkClickerGame.vue';
+const meta = {
+	title: 'components/MkClickerGame',
+	component: MkClickerGame,
+};
+export const Default = {
+	components: {
+		MkClickerGame,
+	},
+	template: '<MkClickerGame />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
new file mode 100644
index 0000000000..991ff5b59b
--- /dev/null
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkClipPreview from './MkClipPreview.vue';
+const meta = {
+	title: 'components/MkClipPreview',
+	component: MkClipPreview,
+};
+export const Default = {
+	components: {
+		MkClipPreview,
+	},
+	template: '<MkClipPreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
new file mode 100644
index 0000000000..7019a4fdaf
--- /dev/null
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCode_core from './MkCode.core.vue';
+const meta = {
+	title: 'components/MkCode.core',
+	component: MkCode_core,
+};
+export const Default = {
+	components: {
+		MkCode_core,
+	},
+	template: '<MkCode.core />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
new file mode 100644
index 0000000000..0009ca436c
--- /dev/null
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCode from './MkCode.vue';
+const meta = {
+	title: 'components/MkCode',
+	component: MkCode,
+};
+export const Default = {
+	components: {
+		MkCode,
+	},
+	template: '<MkCode />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
new file mode 100644
index 0000000000..fab6b7aa24
--- /dev/null
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkContainer from './MkContainer.vue';
+const meta = {
+	title: 'components/MkContainer',
+	component: MkContainer,
+};
+export const Default = {
+	components: {
+		MkContainer,
+	},
+	template: '<MkContainer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
new file mode 100644
index 0000000000..e9a8f2c6a1
--- /dev/null
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkContextMenu from './MkContextMenu.vue';
+const meta = {
+	title: 'components/MkContextMenu',
+	component: MkContextMenu,
+};
+export const Default = {
+	components: {
+		MkContextMenu,
+	},
+	template: '<MkContextMenu />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
new file mode 100644
index 0000000000..92be1b425f
--- /dev/null
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCropperDialog from './MkCropperDialog.vue';
+const meta = {
+	title: 'components/MkCropperDialog',
+	component: MkCropperDialog,
+};
+export const Default = {
+	components: {
+		MkCropperDialog,
+	},
+	template: '<MkCropperDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
new file mode 100644
index 0000000000..f19288dd19
--- /dev/null
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCwButton from './MkCwButton.vue';
+const meta = {
+	title: 'components/MkCwButton',
+	component: MkCwButton,
+};
+export const Default = {
+	components: {
+		MkCwButton,
+	},
+	template: '<MkCwButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
new file mode 100644
index 0000000000..e4c00df5e1
--- /dev/null
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDateSeparatedList from './MkDateSeparatedList.vue';
+const meta = {
+	title: 'components/MkDateSeparatedList',
+	component: MkDateSeparatedList,
+};
+export const Default = {
+	components: {
+		MkDateSeparatedList,
+	},
+	template: '<MkDateSeparatedList />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
new file mode 100644
index 0000000000..3debe6214c
--- /dev/null
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDialog from './MkDialog.vue';
+const meta = {
+	title: 'components/MkDialog',
+	component: MkDialog,
+};
+export const Default = {
+	components: {
+		MkDialog,
+	},
+	template: '<MkDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
new file mode 100644
index 0000000000..3b6b6f839b
--- /dev/null
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDigitalClock from './MkDigitalClock.vue';
+const meta = {
+	title: 'components/MkDigitalClock',
+	component: MkDigitalClock,
+};
+export const Default = {
+	components: {
+		MkDigitalClock,
+	},
+	template: '<MkDigitalClock />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
new file mode 100644
index 0000000000..258f675ebd
--- /dev/null
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDonation from './MkDonation.vue';
+const meta = {
+	title: 'components/MkDonation',
+	component: MkDonation,
+};
+export const Default = {
+	components: {
+		MkDonation,
+	},
+	template: '<MkDonation />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
new file mode 100644
index 0000000000..e5752b898e
--- /dev/null
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDrive_file from './MkDrive.file.vue';
+const meta = {
+	title: 'components/MkDrive.file',
+	component: MkDrive_file,
+};
+export const Default = {
+	components: {
+		MkDrive_file,
+	},
+	template: '<MkDrive.file />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
new file mode 100644
index 0000000000..cf39fa2e62
--- /dev/null
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDrive_folder from './MkDrive.folder.vue';
+const meta = {
+	title: 'components/MkDrive.folder',
+	component: MkDrive_folder,
+};
+export const Default = {
+	components: {
+		MkDrive_folder,
+	},
+	template: '<MkDrive.folder />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
new file mode 100644
index 0000000000..5b36fba351
--- /dev/null
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDrive_navFolder from './MkDrive.navFolder.vue';
+const meta = {
+	title: 'components/MkDrive.navFolder',
+	component: MkDrive_navFolder,
+};
+export const Default = {
+	components: {
+		MkDrive_navFolder,
+	},
+	template: '<MkDrive.navFolder />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
new file mode 100644
index 0000000000..19c3f6445b
--- /dev/null
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDrive from './MkDrive.vue';
+const meta = {
+	title: 'components/MkDrive',
+	component: MkDrive,
+};
+export const Default = {
+	components: {
+		MkDrive,
+	},
+	template: '<MkDrive />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
new file mode 100644
index 0000000000..ca135cf417
--- /dev/null
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue';
+const meta = {
+	title: 'components/MkDriveFileThumbnail',
+	component: MkDriveFileThumbnail,
+};
+export const Default = {
+	components: {
+		MkDriveFileThumbnail,
+	},
+	template: '<MkDriveFileThumbnail />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
new file mode 100644
index 0000000000..00f7f3e062
--- /dev/null
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDriveSelectDialog from './MkDriveSelectDialog.vue';
+const meta = {
+	title: 'components/MkDriveSelectDialog',
+	component: MkDriveSelectDialog,
+};
+export const Default = {
+	components: {
+		MkDriveSelectDialog,
+	},
+	template: '<MkDriveSelectDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
new file mode 100644
index 0000000000..2b20a75e45
--- /dev/null
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkDriveWindow from './MkDriveWindow.vue';
+const meta = {
+	title: 'components/MkDriveWindow',
+	component: MkDriveWindow,
+};
+export const Default = {
+	components: {
+		MkDriveWindow,
+	},
+	template: '<MkDriveWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
new file mode 100644
index 0000000000..af0210109d
--- /dev/null
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEmojiPicker_section from './MkEmojiPicker.section.vue';
+const meta = {
+	title: 'components/MkEmojiPicker.section',
+	component: MkEmojiPicker_section,
+};
+export const Default = {
+	components: {
+		MkEmojiPicker_section,
+	},
+	template: '<MkEmojiPicker.section />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
new file mode 100644
index 0000000000..b8816b5425
--- /dev/null
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEmojiPicker from './MkEmojiPicker.vue';
+const meta = {
+	title: 'components/MkEmojiPicker',
+	component: MkEmojiPicker,
+};
+export const Default = {
+	components: {
+		MkEmojiPicker,
+	},
+	template: '<MkEmojiPicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
new file mode 100644
index 0000000000..ae3ab4cfa7
--- /dev/null
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEmojiPickerDialog from './MkEmojiPickerDialog.vue';
+const meta = {
+	title: 'components/MkEmojiPickerDialog',
+	component: MkEmojiPickerDialog,
+};
+export const Default = {
+	components: {
+		MkEmojiPickerDialog,
+	},
+	template: '<MkEmojiPickerDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
new file mode 100644
index 0000000000..985dec8bd1
--- /dev/null
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEmojiPickerWindow from './MkEmojiPickerWindow.vue';
+const meta = {
+	title: 'components/MkEmojiPickerWindow',
+	component: MkEmojiPickerWindow,
+};
+export const Default = {
+	components: {
+		MkEmojiPickerWindow,
+	},
+	template: '<MkEmojiPickerWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
new file mode 100644
index 0000000000..7c9bd67748
--- /dev/null
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFeaturedPhotos from './MkFeaturedPhotos.vue';
+const meta = {
+	title: 'components/MkFeaturedPhotos',
+	component: MkFeaturedPhotos,
+};
+export const Default = {
+	components: {
+		MkFeaturedPhotos,
+	},
+	template: '<MkFeaturedPhotos />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
new file mode 100644
index 0000000000..d0c9e4e2df
--- /dev/null
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFileCaptionEditWindow from './MkFileCaptionEditWindow.vue';
+const meta = {
+	title: 'components/MkFileCaptionEditWindow',
+	component: MkFileCaptionEditWindow,
+};
+export const Default = {
+	components: {
+		MkFileCaptionEditWindow,
+	},
+	template: '<MkFileCaptionEditWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
new file mode 100644
index 0000000000..b437ae4d4f
--- /dev/null
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFileListForAdmin from './MkFileListForAdmin.vue';
+const meta = {
+	title: 'components/MkFileListForAdmin',
+	component: MkFileListForAdmin,
+};
+export const Default = {
+	components: {
+		MkFileListForAdmin,
+	},
+	template: '<MkFileListForAdmin />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
new file mode 100644
index 0000000000..eb7d911067
--- /dev/null
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFlashPreview from './MkFlashPreview.vue';
+const meta = {
+	title: 'components/MkFlashPreview',
+	component: MkFlashPreview,
+};
+export const Default = {
+	components: {
+		MkFlashPreview,
+	},
+	template: '<MkFlashPreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
new file mode 100644
index 0000000000..b9c85f4e82
--- /dev/null
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFoldableSection from './MkFoldableSection.vue';
+const meta = {
+	title: 'components/MkFoldableSection',
+	component: MkFoldableSection,
+};
+export const Default = {
+	components: {
+		MkFoldableSection,
+	},
+	template: '<MkFoldableSection />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
new file mode 100644
index 0000000000..dbde9dc034
--- /dev/null
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFolder from './MkFolder.vue';
+const meta = {
+	title: 'components/MkFolder',
+	component: MkFolder,
+};
+export const Default = {
+	components: {
+		MkFolder,
+	},
+	template: '<MkFolder />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
new file mode 100644
index 0000000000..ff5b976be6
--- /dev/null
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFollowButton from './MkFollowButton.vue';
+const meta = {
+	title: 'components/MkFollowButton',
+	component: MkFollowButton,
+};
+export const Default = {
+	components: {
+		MkFollowButton,
+	},
+	template: '<MkFollowButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
new file mode 100644
index 0000000000..38f813dfb6
--- /dev/null
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkForgotPassword from './MkForgotPassword.vue';
+const meta = {
+	title: 'components/MkForgotPassword',
+	component: MkForgotPassword,
+};
+export const Default = {
+	components: {
+		MkForgotPassword,
+	},
+	template: '<MkForgotPassword />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
new file mode 100644
index 0000000000..cf6afa03dd
--- /dev/null
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkFormDialog from './MkFormDialog.vue';
+const meta = {
+	title: 'components/MkFormDialog',
+	component: MkFormDialog,
+};
+export const Default = {
+	components: {
+		MkFormDialog,
+	},
+	template: '<MkFormDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
new file mode 100644
index 0000000000..9e94b456ee
--- /dev/null
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkGalleryPostPreview from './MkGalleryPostPreview.vue';
+const meta = {
+	title: 'components/MkGalleryPostPreview',
+	component: MkGalleryPostPreview,
+};
+export const Default = {
+	components: {
+		MkGalleryPostPreview,
+	},
+	template: '<MkGalleryPostPreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
new file mode 100644
index 0000000000..bb9651dc0c
--- /dev/null
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkGoogle from './MkGoogle.vue';
+const meta = {
+	title: 'components/MkGoogle',
+	component: MkGoogle,
+};
+export const Default = {
+	components: {
+		MkGoogle,
+	},
+	template: '<MkGoogle />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
new file mode 100644
index 0000000000..97b8ef607a
--- /dev/null
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkHeatmap from './MkHeatmap.vue';
+const meta = {
+	title: 'components/MkHeatmap',
+	component: MkHeatmap,
+};
+export const Default = {
+	components: {
+		MkHeatmap,
+	},
+	template: '<MkHeatmap />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
new file mode 100644
index 0000000000..8878c61745
--- /dev/null
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkImageViewer from './MkImageViewer.vue';
+const meta = {
+	title: 'components/MkImageViewer',
+	component: MkImageViewer,
+};
+export const Default = {
+	components: {
+		MkImageViewer,
+	},
+	template: '<MkImageViewer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
new file mode 100644
index 0000000000..fa69366b87
--- /dev/null
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkImgWithBlurhash from './MkImgWithBlurhash.vue';
+const meta = {
+	title: 'components/MkImgWithBlurhash',
+	component: MkImgWithBlurhash,
+};
+export const Default = {
+	components: {
+		MkImgWithBlurhash,
+	},
+	template: '<MkImgWithBlurhash />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
new file mode 100644
index 0000000000..97e887cf62
--- /dev/null
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkInfo from './MkInfo.vue';
+const meta = {
+	title: 'components/MkInfo',
+	component: MkInfo,
+};
+export const Default = {
+	components: {
+		MkInfo,
+	},
+	template: '<MkInfo />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
new file mode 100644
index 0000000000..97b1fe999c
--- /dev/null
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkInput from './MkInput.vue';
+const meta = {
+	title: 'components/MkInput',
+	component: MkInput,
+};
+export const Default = {
+	components: {
+		MkInput,
+	},
+	template: '<MkInput />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
new file mode 100644
index 0000000000..1902de6f38
--- /dev/null
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkInstanceCardMini from './MkInstanceCardMini.vue';
+const meta = {
+	title: 'components/MkInstanceCardMini',
+	component: MkInstanceCardMini,
+};
+export const Default = {
+	components: {
+		MkInstanceCardMini,
+	},
+	template: '<MkInstanceCardMini />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
new file mode 100644
index 0000000000..e8a9aed27f
--- /dev/null
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkInstanceStats from './MkInstanceStats.vue';
+const meta = {
+	title: 'components/MkInstanceStats',
+	component: MkInstanceStats,
+};
+export const Default = {
+	components: {
+		MkInstanceStats,
+	},
+	template: '<MkInstanceStats />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
new file mode 100644
index 0000000000..04e5d02e3b
--- /dev/null
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkInstanceTicker from './MkInstanceTicker.vue';
+const meta = {
+	title: 'components/MkInstanceTicker',
+	component: MkInstanceTicker,
+};
+export const Default = {
+	components: {
+		MkInstanceTicker,
+	},
+	template: '<MkInstanceTicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
new file mode 100644
index 0000000000..253f827796
--- /dev/null
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkKeyValue from './MkKeyValue.vue';
+const meta = {
+	title: 'components/MkKeyValue',
+	component: MkKeyValue,
+};
+export const Default = {
+	components: {
+		MkKeyValue,
+	},
+	template: '<MkKeyValue />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
new file mode 100644
index 0000000000..0f5289c49d
--- /dev/null
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkLaunchPad from './MkLaunchPad.vue';
+const meta = {
+	title: 'components/MkLaunchPad',
+	component: MkLaunchPad,
+};
+export const Default = {
+	components: {
+		MkLaunchPad,
+	},
+	template: '<MkLaunchPad />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
new file mode 100644
index 0000000000..a4904d3879
--- /dev/null
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkLink from './MkLink.vue';
+const meta = {
+	title: 'components/MkLink',
+	component: MkLink,
+};
+export const Default = {
+	components: {
+		MkLink,
+	},
+	template: '<MkLink />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
new file mode 100644
index 0000000000..f8b8751abc
--- /dev/null
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMarquee from './MkMarquee.vue';
+const meta = {
+	title: 'components/MkMarquee',
+	component: MkMarquee,
+};
+export const Default = {
+	components: {
+		MkMarquee,
+	},
+	template: '<MkMarquee />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
new file mode 100644
index 0000000000..2a74b32e29
--- /dev/null
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMediaBanner from './MkMediaBanner.vue';
+const meta = {
+	title: 'components/MkMediaBanner',
+	component: MkMediaBanner,
+};
+export const Default = {
+	components: {
+		MkMediaBanner,
+	},
+	template: '<MkMediaBanner />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
new file mode 100644
index 0000000000..9c2f7aec0e
--- /dev/null
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMediaImage from './MkMediaImage.vue';
+const meta = {
+	title: 'components/MkMediaImage',
+	component: MkMediaImage,
+};
+export const Default = {
+	components: {
+		MkMediaImage,
+	},
+	template: '<MkMediaImage />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
new file mode 100644
index 0000000000..1267b8a5f1
--- /dev/null
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMediaList from './MkMediaList.vue';
+const meta = {
+	title: 'components/MkMediaList',
+	component: MkMediaList,
+};
+export const Default = {
+	components: {
+		MkMediaList,
+	},
+	template: '<MkMediaList />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
new file mode 100644
index 0000000000..61e883942b
--- /dev/null
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMediaVideo from './MkMediaVideo.vue';
+const meta = {
+	title: 'components/MkMediaVideo',
+	component: MkMediaVideo,
+};
+export const Default = {
+	components: {
+		MkMediaVideo,
+	},
+	template: '<MkMediaVideo />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
new file mode 100644
index 0000000000..76f3d602d6
--- /dev/null
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMention from './MkMention.vue';
+const meta = {
+	title: 'components/MkMention',
+	component: MkMention,
+};
+export const Default = {
+	components: {
+		MkMention,
+	},
+	template: '<MkMention />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
new file mode 100644
index 0000000000..05e3b94a88
--- /dev/null
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMenu_child from './MkMenu.child.vue';
+const meta = {
+	title: 'components/MkMenu.child',
+	component: MkMenu_child,
+};
+export const Default = {
+	components: {
+		MkMenu_child,
+	},
+	template: '<MkMenu.child />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
new file mode 100644
index 0000000000..2992ad88a0
--- /dev/null
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMenu from './MkMenu.vue';
+const meta = {
+	title: 'components/MkMenu',
+	component: MkMenu,
+};
+export const Default = {
+	components: {
+		MkMenu,
+	},
+	template: '<MkMenu />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
new file mode 100644
index 0000000000..7a4294cffe
--- /dev/null
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMiniChart from './MkMiniChart.vue';
+const meta = {
+	title: 'components/MkMiniChart',
+	component: MkMiniChart,
+};
+export const Default = {
+	components: {
+		MkMiniChart,
+	},
+	template: '<MkMiniChart />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
new file mode 100644
index 0000000000..a2bbc83be3
--- /dev/null
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkModal from './MkModal.vue';
+const meta = {
+	title: 'components/MkModal',
+	component: MkModal,
+};
+export const Default = {
+	components: {
+		MkModal,
+	},
+	template: '<MkModal />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
new file mode 100644
index 0000000000..168d674089
--- /dev/null
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkModalPageWindow from './MkModalPageWindow.vue';
+const meta = {
+	title: 'components/MkModalPageWindow',
+	component: MkModalPageWindow,
+};
+export const Default = {
+	components: {
+		MkModalPageWindow,
+	},
+	template: '<MkModalPageWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
new file mode 100644
index 0000000000..b06b079581
--- /dev/null
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkModalWindow from './MkModalWindow.vue';
+const meta = {
+	title: 'components/MkModalWindow',
+	component: MkModalWindow,
+};
+export const Default = {
+	components: {
+		MkModalWindow,
+	},
+	template: '<MkModalWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
new file mode 100644
index 0000000000..454e6a943b
--- /dev/null
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNote from './MkNote.vue';
+const meta = {
+	title: 'components/MkNote',
+	component: MkNote,
+};
+export const Default = {
+	components: {
+		MkNote,
+	},
+	template: '<MkNote />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
new file mode 100644
index 0000000000..a3efc0afab
--- /dev/null
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNoteDetailed from './MkNoteDetailed.vue';
+const meta = {
+	title: 'components/MkNoteDetailed',
+	component: MkNoteDetailed,
+};
+export const Default = {
+	components: {
+		MkNoteDetailed,
+	},
+	template: '<MkNoteDetailed />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
new file mode 100644
index 0000000000..1310d3c1b1
--- /dev/null
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNoteHeader from './MkNoteHeader.vue';
+const meta = {
+	title: 'components/MkNoteHeader',
+	component: MkNoteHeader,
+};
+export const Default = {
+	components: {
+		MkNoteHeader,
+	},
+	template: '<MkNoteHeader />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
new file mode 100644
index 0000000000..8aa2cc80bf
--- /dev/null
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNotePreview from './MkNotePreview.vue';
+const meta = {
+	title: 'components/MkNotePreview',
+	component: MkNotePreview,
+};
+export const Default = {
+	components: {
+		MkNotePreview,
+	},
+	template: '<MkNotePreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
new file mode 100644
index 0000000000..8745fd0f87
--- /dev/null
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNoteSimple from './MkNoteSimple.vue';
+const meta = {
+	title: 'components/MkNoteSimple',
+	component: MkNoteSimple,
+};
+export const Default = {
+	components: {
+		MkNoteSimple,
+	},
+	template: '<MkNoteSimple />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
new file mode 100644
index 0000000000..817c099361
--- /dev/null
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNoteSub from './MkNoteSub.vue';
+const meta = {
+	title: 'components/MkNoteSub',
+	component: MkNoteSub,
+};
+export const Default = {
+	components: {
+		MkNoteSub,
+	},
+	template: '<MkNoteSub />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
new file mode 100644
index 0000000000..e110cebcfa
--- /dev/null
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNotes from './MkNotes.vue';
+const meta = {
+	title: 'components/MkNotes',
+	component: MkNotes,
+};
+export const Default = {
+	components: {
+		MkNotes,
+	},
+	template: '<MkNotes />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
new file mode 100644
index 0000000000..c17add5224
--- /dev/null
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNotification from './MkNotification.vue';
+const meta = {
+	title: 'components/MkNotification',
+	component: MkNotification,
+};
+export const Default = {
+	components: {
+		MkNotification,
+	},
+	template: '<MkNotification />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
new file mode 100644
index 0000000000..cc4caa5644
--- /dev/null
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNotificationSettingWindow from './MkNotificationSettingWindow.vue';
+const meta = {
+	title: 'components/MkNotificationSettingWindow',
+	component: MkNotificationSettingWindow,
+};
+export const Default = {
+	components: {
+		MkNotificationSettingWindow,
+	},
+	template: '<MkNotificationSettingWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
new file mode 100644
index 0000000000..8f71efcb1e
--- /dev/null
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNotifications from './MkNotifications.vue';
+const meta = {
+	title: 'components/MkNotifications',
+	component: MkNotifications,
+};
+export const Default = {
+	components: {
+		MkNotifications,
+	},
+	template: '<MkNotifications />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
new file mode 100644
index 0000000000..b75362ec9b
--- /dev/null
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNumber from './MkNumber.vue';
+const meta = {
+	title: 'components/MkNumber',
+	component: MkNumber,
+};
+export const Default = {
+	components: {
+		MkNumber,
+	},
+	template: '<MkNumber />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
new file mode 100644
index 0000000000..4f0bc96629
--- /dev/null
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkNumberDiff from './MkNumberDiff.vue';
+const meta = {
+	title: 'components/MkNumberDiff',
+	component: MkNumberDiff,
+};
+export const Default = {
+	components: {
+		MkNumberDiff,
+	},
+	template: '<MkNumberDiff />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
new file mode 100644
index 0000000000..e9bbd23c2a
--- /dev/null
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkObjectView from './MkObjectView.vue';
+const meta = {
+	title: 'components/MkObjectView',
+	component: MkObjectView,
+};
+export const Default = {
+	components: {
+		MkObjectView,
+	},
+	template: '<MkObjectView />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
new file mode 100644
index 0000000000..919b796be1
--- /dev/null
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkObjectView_value from './MkObjectView.value.vue';
+const meta = {
+	title: 'components/MkObjectView.value',
+	component: MkObjectView_value,
+};
+export const Default = {
+	components: {
+		MkObjectView_value,
+	},
+	template: '<MkObjectView.value />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
new file mode 100644
index 0000000000..23bd48ebe5
--- /dev/null
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkOmit from './MkOmit.vue';
+const meta = {
+	title: 'components/MkOmit',
+	component: MkOmit,
+};
+export const Default = {
+	components: {
+		MkOmit,
+	},
+	template: '<MkOmit />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
new file mode 100644
index 0000000000..515a533579
--- /dev/null
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPagePreview from './MkPagePreview.vue';
+const meta = {
+	title: 'components/MkPagePreview',
+	component: MkPagePreview,
+};
+export const Default = {
+	components: {
+		MkPagePreview,
+	},
+	template: '<MkPagePreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
new file mode 100644
index 0000000000..1a26e60723
--- /dev/null
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPageWindow from './MkPageWindow.vue';
+const meta = {
+	title: 'components/MkPageWindow',
+	component: MkPageWindow,
+};
+export const Default = {
+	components: {
+		MkPageWindow,
+	},
+	template: '<MkPageWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
new file mode 100644
index 0000000000..78bba2f326
--- /dev/null
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPagination from './MkPagination.vue';
+const meta = {
+	title: 'components/MkPagination',
+	component: MkPagination,
+};
+export const Default = {
+	components: {
+		MkPagination,
+	},
+	template: '<MkPagination />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
new file mode 100644
index 0000000000..50f51b60ba
--- /dev/null
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPlusOneEffect from './MkPlusOneEffect.vue';
+const meta = {
+	title: 'components/MkPlusOneEffect',
+	component: MkPlusOneEffect,
+};
+export const Default = {
+	components: {
+		MkPlusOneEffect,
+	},
+	template: '<MkPlusOneEffect />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
new file mode 100644
index 0000000000..ba92e47b8b
--- /dev/null
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPoll from './MkPoll.vue';
+const meta = {
+	title: 'components/MkPoll',
+	component: MkPoll,
+};
+export const Default = {
+	components: {
+		MkPoll,
+	},
+	template: '<MkPoll />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
new file mode 100644
index 0000000000..d8480091ca
--- /dev/null
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPollEditor from './MkPollEditor.vue';
+const meta = {
+	title: 'components/MkPollEditor',
+	component: MkPollEditor,
+};
+export const Default = {
+	components: {
+		MkPollEditor,
+	},
+	template: '<MkPollEditor />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
new file mode 100644
index 0000000000..f590af56c3
--- /dev/null
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPopupMenu from './MkPopupMenu.vue';
+const meta = {
+	title: 'components/MkPopupMenu',
+	component: MkPopupMenu,
+};
+export const Default = {
+	components: {
+		MkPopupMenu,
+	},
+	template: '<MkPopupMenu />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
new file mode 100644
index 0000000000..b84b466570
--- /dev/null
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPostForm from './MkPostForm.vue';
+const meta = {
+	title: 'components/MkPostForm',
+	component: MkPostForm,
+};
+export const Default = {
+	components: {
+		MkPostForm,
+	},
+	template: '<MkPostForm />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
new file mode 100644
index 0000000000..7298001704
--- /dev/null
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPostFormAttaches from './MkPostFormAttaches.vue';
+const meta = {
+	title: 'components/MkPostFormAttaches',
+	component: MkPostFormAttaches,
+};
+export const Default = {
+	components: {
+		MkPostFormAttaches,
+	},
+	template: '<MkPostFormAttaches />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
new file mode 100644
index 0000000000..c84017c6a8
--- /dev/null
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPostFormDialog from './MkPostFormDialog.vue';
+const meta = {
+	title: 'components/MkPostFormDialog',
+	component: MkPostFormDialog,
+};
+export const Default = {
+	components: {
+		MkPostFormDialog,
+	},
+	template: '<MkPostFormDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
new file mode 100644
index 0000000000..d32b273909
--- /dev/null
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPushNotificationAllowButton from './MkPushNotificationAllowButton.vue';
+const meta = {
+	title: 'components/MkPushNotificationAllowButton',
+	component: MkPushNotificationAllowButton,
+};
+export const Default = {
+	components: {
+		MkPushNotificationAllowButton,
+	},
+	template: '<MkPushNotificationAllowButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
new file mode 100644
index 0000000000..0f03abbc13
--- /dev/null
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRadio from './MkRadio.vue';
+const meta = {
+	title: 'components/MkRadio',
+	component: MkRadio,
+};
+export const Default = {
+	components: {
+		MkRadio,
+	},
+	template: '<MkRadio />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
new file mode 100644
index 0000000000..24c12e9868
--- /dev/null
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRadios from './MkRadios.vue';
+const meta = {
+	title: 'components/MkRadios',
+	component: MkRadios,
+};
+export const Default = {
+	components: {
+		MkRadios,
+	},
+	template: '<MkRadios />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
new file mode 100644
index 0000000000..f8efe8354e
--- /dev/null
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRange from './MkRange.vue';
+const meta = {
+	title: 'components/MkRange',
+	component: MkRange,
+};
+export const Default = {
+	components: {
+		MkRange,
+	},
+	template: '<MkRange />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
new file mode 100644
index 0000000000..1e54032350
--- /dev/null
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactedUsersDialog from './MkReactedUsersDialog.vue';
+const meta = {
+	title: 'components/MkReactedUsersDialog',
+	component: MkReactedUsersDialog,
+};
+export const Default = {
+	components: {
+		MkReactedUsersDialog,
+	},
+	template: '<MkReactedUsersDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
new file mode 100644
index 0000000000..71fc56768f
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionEffect from './MkReactionEffect.vue';
+const meta = {
+	title: 'components/MkReactionEffect',
+	component: MkReactionEffect,
+};
+export const Default = {
+	components: {
+		MkReactionEffect,
+	},
+	template: '<MkReactionEffect />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
new file mode 100644
index 0000000000..37c196887a
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionIcon from './MkReactionIcon.vue';
+const meta = {
+	title: 'components/MkReactionIcon',
+	component: MkReactionIcon,
+};
+export const Default = {
+	components: {
+		MkReactionIcon,
+	},
+	template: '<MkReactionIcon />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
new file mode 100644
index 0000000000..a6ea560100
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionTooltip from './MkReactionTooltip.vue';
+const meta = {
+	title: 'components/MkReactionTooltip',
+	component: MkReactionTooltip,
+};
+export const Default = {
+	components: {
+		MkReactionTooltip,
+	},
+	template: '<MkReactionTooltip />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
new file mode 100644
index 0000000000..f8bf55a7cd
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionsViewer_details from './MkReactionsViewer.details.vue';
+const meta = {
+	title: 'components/MkReactionsViewer.details',
+	component: MkReactionsViewer_details,
+};
+export const Default = {
+	components: {
+		MkReactionsViewer_details,
+	},
+	template: '<MkReactionsViewer.details />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
new file mode 100644
index 0000000000..f044f6a8be
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionsViewer_reaction from './MkReactionsViewer.reaction.vue';
+const meta = {
+	title: 'components/MkReactionsViewer.reaction',
+	component: MkReactionsViewer_reaction,
+};
+export const Default = {
+	components: {
+		MkReactionsViewer_reaction,
+	},
+	template: '<MkReactionsViewer.reaction />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
new file mode 100644
index 0000000000..7b9e18baf3
--- /dev/null
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkReactionsViewer from './MkReactionsViewer.vue';
+const meta = {
+	title: 'components/MkReactionsViewer',
+	component: MkReactionsViewer,
+};
+export const Default = {
+	components: {
+		MkReactionsViewer,
+	},
+	template: '<MkReactionsViewer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
new file mode 100644
index 0000000000..ce5f9069cc
--- /dev/null
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRemoteCaution from './MkRemoteCaution.vue';
+const meta = {
+	title: 'components/MkRemoteCaution',
+	component: MkRemoteCaution,
+};
+export const Default = {
+	components: {
+		MkRemoteCaution,
+	},
+	template: '<MkRemoteCaution />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
new file mode 100644
index 0000000000..bf977d05b2
--- /dev/null
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRetentionHeatmap from './MkRetentionHeatmap.vue';
+const meta = {
+	title: 'components/MkRetentionHeatmap',
+	component: MkRetentionHeatmap,
+};
+export const Default = {
+	components: {
+		MkRetentionHeatmap,
+	},
+	template: '<MkRetentionHeatmap />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
new file mode 100644
index 0000000000..9ee6ed6d10
--- /dev/null
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRippleEffect from './MkRippleEffect.vue';
+const meta = {
+	title: 'components/MkRippleEffect',
+	component: MkRippleEffect,
+};
+export const Default = {
+	components: {
+		MkRippleEffect,
+	},
+	template: '<MkRippleEffect />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
new file mode 100644
index 0000000000..3a6670f87a
--- /dev/null
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkRolePreview from './MkRolePreview.vue';
+const meta = {
+	title: 'components/MkRolePreview',
+	component: MkRolePreview,
+};
+export const Default = {
+	components: {
+		MkRolePreview,
+	},
+	template: '<MkRolePreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
new file mode 100644
index 0000000000..8e5b119933
--- /dev/null
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSample from './MkSample.vue';
+const meta = {
+	title: 'components/MkSample',
+	component: MkSample,
+};
+export const Default = {
+	components: {
+		MkSample,
+	},
+	template: '<MkSample />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
new file mode 100644
index 0000000000..0348e89191
--- /dev/null
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSelect from './MkSelect.vue';
+const meta = {
+	title: 'components/MkSelect',
+	component: MkSelect,
+};
+export const Default = {
+	components: {
+		MkSelect,
+	},
+	template: '<MkSelect />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
new file mode 100644
index 0000000000..cfc4a6f4e4
--- /dev/null
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSignin from './MkSignin.vue';
+const meta = {
+	title: 'components/MkSignin',
+	component: MkSignin,
+};
+export const Default = {
+	components: {
+		MkSignin,
+	},
+	template: '<MkSignin />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
new file mode 100644
index 0000000000..bde8242599
--- /dev/null
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSigninDialog from './MkSigninDialog.vue';
+const meta = {
+	title: 'components/MkSigninDialog',
+	component: MkSigninDialog,
+};
+export const Default = {
+	components: {
+		MkSigninDialog,
+	},
+	template: '<MkSigninDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
new file mode 100644
index 0000000000..4b620670b3
--- /dev/null
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSignup from './MkSignup.vue';
+const meta = {
+	title: 'components/MkSignup',
+	component: MkSignup,
+};
+export const Default = {
+	components: {
+		MkSignup,
+	},
+	template: '<MkSignup />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
new file mode 100644
index 0000000000..e07a1cd385
--- /dev/null
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSignupDialog from './MkSignupDialog.vue';
+const meta = {
+	title: 'components/MkSignupDialog',
+	component: MkSignupDialog,
+};
+export const Default = {
+	components: {
+		MkSignupDialog,
+	},
+	template: '<MkSignupDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
new file mode 100644
index 0000000000..289707e19a
--- /dev/null
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSparkle from './MkSparkle.vue';
+const meta = {
+	title: 'components/MkSparkle',
+	component: MkSparkle,
+};
+export const Default = {
+	components: {
+		MkSparkle,
+	},
+	template: '<MkSparkle />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
new file mode 100644
index 0000000000..f50b50023a
--- /dev/null
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSubNoteContent from './MkSubNoteContent.vue';
+const meta = {
+	title: 'components/MkSubNoteContent',
+	component: MkSubNoteContent,
+};
+export const Default = {
+	components: {
+		MkSubNoteContent,
+	},
+	template: '<MkSubNoteContent />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
new file mode 100644
index 0000000000..624fb96584
--- /dev/null
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSuperMenu from './MkSuperMenu.vue';
+const meta = {
+	title: 'components/MkSuperMenu',
+	component: MkSuperMenu,
+};
+export const Default = {
+	components: {
+		MkSuperMenu,
+	},
+	template: '<MkSuperMenu />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
new file mode 100644
index 0000000000..ace45f7783
--- /dev/null
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSwitch from './MkSwitch.vue';
+const meta = {
+	title: 'components/MkSwitch',
+	component: MkSwitch,
+};
+export const Default = {
+	components: {
+		MkSwitch,
+	},
+	template: '<MkSwitch />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
new file mode 100644
index 0000000000..c819252291
--- /dev/null
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTab from './MkTab.vue';
+const meta = {
+	title: 'components/MkTab',
+	component: MkTab,
+};
+export const Default = {
+	components: {
+		MkTab,
+	},
+	template: '<MkTab />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
new file mode 100644
index 0000000000..dd6f06716e
--- /dev/null
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTagCloud from './MkTagCloud.vue';
+const meta = {
+	title: 'components/MkTagCloud',
+	component: MkTagCloud,
+};
+export const Default = {
+	components: {
+		MkTagCloud,
+	},
+	template: '<MkTagCloud />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
new file mode 100644
index 0000000000..e6f5d0f996
--- /dev/null
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTextarea from './MkTextarea.vue';
+const meta = {
+	title: 'components/MkTextarea',
+	component: MkTextarea,
+};
+export const Default = {
+	components: {
+		MkTextarea,
+	},
+	template: '<MkTextarea />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
new file mode 100644
index 0000000000..7a43f42afa
--- /dev/null
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTimeline from './MkTimeline.vue';
+const meta = {
+	title: 'components/MkTimeline',
+	component: MkTimeline,
+};
+export const Default = {
+	components: {
+		MkTimeline,
+	},
+	template: '<MkTimeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
new file mode 100644
index 0000000000..967e3aff24
--- /dev/null
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkToast from './MkToast.vue';
+const meta = {
+	title: 'components/MkToast',
+	component: MkToast,
+};
+export const Default = {
+	components: {
+		MkToast,
+	},
+	template: '<MkToast />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
new file mode 100644
index 0000000000..f4cd049d9d
--- /dev/null
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTokenGenerateWindow from './MkTokenGenerateWindow.vue';
+const meta = {
+	title: 'components/MkTokenGenerateWindow',
+	component: MkTokenGenerateWindow,
+};
+export const Default = {
+	components: {
+		MkTokenGenerateWindow,
+	},
+	template: '<MkTokenGenerateWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
new file mode 100644
index 0000000000..eaa64a424e
--- /dev/null
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTooltip from './MkTooltip.vue';
+const meta = {
+	title: 'components/MkTooltip',
+	component: MkTooltip,
+};
+export const Default = {
+	components: {
+		MkTooltip,
+	},
+	template: '<MkTooltip />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
new file mode 100644
index 0000000000..a6b37f5fd5
--- /dev/null
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUpdated from './MkUpdated.vue';
+const meta = {
+	title: 'components/MkUpdated',
+	component: MkUpdated,
+};
+export const Default = {
+	components: {
+		MkUpdated,
+	},
+	template: '<MkUpdated />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
new file mode 100644
index 0000000000..3b3c97ba60
--- /dev/null
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUrlPreview from './MkUrlPreview.vue';
+const meta = {
+	title: 'components/MkUrlPreview',
+	component: MkUrlPreview,
+};
+export const Default = {
+	components: {
+		MkUrlPreview,
+	},
+	template: '<MkUrlPreview />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
new file mode 100644
index 0000000000..b71c814d25
--- /dev/null
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUrlPreviewPopup from './MkUrlPreviewPopup.vue';
+const meta = {
+	title: 'components/MkUrlPreviewPopup',
+	component: MkUrlPreviewPopup,
+};
+export const Default = {
+	components: {
+		MkUrlPreviewPopup,
+	},
+	template: '<MkUrlPreviewPopup />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
new file mode 100644
index 0000000000..9fd800237d
--- /dev/null
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserCardMini from './MkUserCardMini.vue';
+const meta = {
+	title: 'components/MkUserCardMini',
+	component: MkUserCardMini,
+};
+export const Default = {
+	components: {
+		MkUserCardMini,
+	},
+	template: '<MkUserCardMini />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
new file mode 100644
index 0000000000..c12d66cd91
--- /dev/null
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserInfo from './MkUserInfo.vue';
+const meta = {
+	title: 'components/MkUserInfo',
+	component: MkUserInfo,
+};
+export const Default = {
+	components: {
+		MkUserInfo,
+	},
+	template: '<MkUserInfo />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
new file mode 100644
index 0000000000..d507ddf2b6
--- /dev/null
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserList from './MkUserList.vue';
+const meta = {
+	title: 'components/MkUserList',
+	component: MkUserList,
+};
+export const Default = {
+	components: {
+		MkUserList,
+	},
+	template: '<MkUserList />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
new file mode 100644
index 0000000000..12e94851f9
--- /dev/null
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserOnlineIndicator from './MkUserOnlineIndicator.vue';
+const meta = {
+	title: 'components/MkUserOnlineIndicator',
+	component: MkUserOnlineIndicator,
+};
+export const Default = {
+	components: {
+		MkUserOnlineIndicator,
+	},
+	template: '<MkUserOnlineIndicator />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
new file mode 100644
index 0000000000..43058847dc
--- /dev/null
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserPopup from './MkUserPopup.vue';
+const meta = {
+	title: 'components/MkUserPopup',
+	component: MkUserPopup,
+};
+export const Default = {
+	components: {
+		MkUserPopup,
+	},
+	template: '<MkUserPopup />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
new file mode 100644
index 0000000000..48ebf287a9
--- /dev/null
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserSelectDialog from './MkUserSelectDialog.vue';
+const meta = {
+	title: 'components/MkUserSelectDialog',
+	component: MkUserSelectDialog,
+};
+export const Default = {
+	components: {
+		MkUserSelectDialog,
+	},
+	template: '<MkUserSelectDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
new file mode 100644
index 0000000000..368e76f910
--- /dev/null
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUsersTooltip from './MkUsersTooltip.vue';
+const meta = {
+	title: 'components/MkUsersTooltip',
+	component: MkUsersTooltip,
+};
+export const Default = {
+	components: {
+		MkUsersTooltip,
+	},
+	template: '<MkUsersTooltip />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
new file mode 100644
index 0000000000..202df158c6
--- /dev/null
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkVisibilityPicker from './MkVisibilityPicker.vue';
+const meta = {
+	title: 'components/MkVisibilityPicker',
+	component: MkVisibilityPicker,
+};
+export const Default = {
+	components: {
+		MkVisibilityPicker,
+	},
+	template: '<MkVisibilityPicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
new file mode 100644
index 0000000000..9f9f0b804a
--- /dev/null
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkWaitingDialog from './MkWaitingDialog.vue';
+const meta = {
+	title: 'components/MkWaitingDialog',
+	component: MkWaitingDialog,
+};
+export const Default = {
+	components: {
+		MkWaitingDialog,
+	},
+	template: '<MkWaitingDialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
new file mode 100644
index 0000000000..f5019284aa
--- /dev/null
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkWidgets from './MkWidgets.vue';
+const meta = {
+	title: 'components/MkWidgets',
+	component: MkWidgets,
+};
+export const Default = {
+	components: {
+		MkWidgets,
+	},
+	template: '<MkWidgets />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
new file mode 100644
index 0000000000..31b5347c9e
--- /dev/null
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkWindow from './MkWindow.vue';
+const meta = {
+	title: 'components/MkWindow',
+	component: MkWindow,
+};
+export const Default = {
+	components: {
+		MkWindow,
+	},
+	template: '<MkWindow />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/MkYoutubePlayer.stories.ts b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
new file mode 100644
index 0000000000..92b68ad5ef
--- /dev/null
+++ b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkYoutubePlayer from './MkYoutubePlayer.vue';
+const meta = {
+	title: 'components/MkYoutubePlayer',
+	component: MkYoutubePlayer,
+};
+export const Default = {
+	components: {
+		MkYoutubePlayer,
+	},
+	template: '<MkYoutubePlayer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
new file mode 100644
index 0000000000..836dd53aba
--- /dev/null
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import link from './link.vue';
+const meta = {
+	title: 'components/form/link',
+	component: link,
+};
+export const Default = {
+	components: {
+		link,
+	},
+	template: '<link />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
new file mode 100644
index 0000000000..3f0939c359
--- /dev/null
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import section from './section.vue';
+const meta = {
+	title: 'components/form/section',
+	component: section,
+};
+export const Default = {
+	components: {
+		section,
+	},
+	template: '<section />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
new file mode 100644
index 0000000000..9587fb2f4e
--- /dev/null
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import slot from './slot.vue';
+const meta = {
+	title: 'components/form/slot',
+	component: slot,
+};
+export const Default = {
+	components: {
+		slot,
+	},
+	template: '<slot />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
new file mode 100644
index 0000000000..ac5c2008c5
--- /dev/null
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import split from './split.vue';
+const meta = {
+	title: 'components/form/split',
+	component: split,
+};
+export const Default = {
+	components: {
+		split,
+	},
+	template: '<split />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
new file mode 100644
index 0000000000..ba54e90151
--- /dev/null
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import suspense from './suspense.vue';
+const meta = {
+	title: 'components/form/suspense',
+	component: suspense,
+};
+export const Default = {
+	components: {
+		suspense,
+	},
+	template: '<suspense />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
new file mode 100644
index 0000000000..a676fce531
--- /dev/null
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkA from './MkA.vue';
+const meta = {
+	title: 'components/global/MkA',
+	component: MkA,
+};
+export const Default = {
+	components: {
+		MkA,
+	},
+	template: '<MkA />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
new file mode 100644
index 0000000000..6f4647832f
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAcct from './MkAcct.vue';
+const meta = {
+	title: 'components/global/MkAcct',
+	component: MkAcct,
+};
+export const Default = {
+	components: {
+		MkAcct,
+	},
+	template: '<MkAcct />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
new file mode 100644
index 0000000000..f835bf5eea
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAd from './MkAd.vue';
+const meta = {
+	title: 'components/global/MkAd',
+	component: MkAd,
+};
+export const Default = {
+	components: {
+		MkAd,
+	},
+	template: '<MkAd />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
new file mode 100644
index 0000000000..6a74176b11
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkAvatar from './MkAvatar.vue';
+const meta = {
+	title: 'components/global/MkAvatar',
+	component: MkAvatar,
+};
+export const Default = {
+	components: {
+		MkAvatar,
+	},
+	template: '<MkAvatar />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
new file mode 100644
index 0000000000..e594b035ae
--- /dev/null
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkCustomEmoji from './MkCustomEmoji.vue';
+const meta = {
+	title: 'components/global/MkCustomEmoji',
+	component: MkCustomEmoji,
+};
+export const Default = {
+	components: {
+		MkCustomEmoji,
+	},
+	template: '<MkCustomEmoji />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
new file mode 100644
index 0000000000..fe3a2a826b
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEllipsis from './MkEllipsis.vue';
+const meta = {
+	title: 'components/global/MkEllipsis',
+	component: MkEllipsis,
+};
+export const Default = {
+	components: {
+		MkEllipsis,
+	},
+	template: '<MkEllipsis />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
new file mode 100644
index 0000000000..ffac466d1f
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkEmoji from './MkEmoji.vue';
+const meta = {
+	title: 'components/global/MkEmoji',
+	component: MkEmoji,
+};
+export const Default = {
+	components: {
+		MkEmoji,
+	},
+	template: '<MkEmoji />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
new file mode 100644
index 0000000000..86e9f77cf2
--- /dev/null
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkError from './MkError.vue';
+const meta = {
+	title: 'components/global/MkError',
+	component: MkError,
+};
+export const Default = {
+	components: {
+		MkError,
+	},
+	template: '<MkError />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
new file mode 100644
index 0000000000..bf6d9de636
--- /dev/null
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkLoading from './MkLoading.vue';
+const meta = {
+	title: 'components/global/MkLoading',
+	component: MkLoading,
+};
+export const Default = {
+	components: {
+		MkLoading,
+	},
+	template: '<MkLoading />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
new file mode 100644
index 0000000000..bf8006e7c5
--- /dev/null
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+const meta = {
+	title: 'components/global/MkMisskeyFlavoredMarkdown',
+	component: MkMisskeyFlavoredMarkdown,
+};
+export const Default = {
+	components: {
+		MkMisskeyFlavoredMarkdown,
+	},
+	template: '<MkMisskeyFlavoredMarkdown />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
new file mode 100644
index 0000000000..3add69771e
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPageHeader from './MkPageHeader.vue';
+const meta = {
+	title: 'components/global/MkPageHeader',
+	component: MkPageHeader,
+};
+export const Default = {
+	components: {
+		MkPageHeader,
+	},
+	template: '<MkPageHeader />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
new file mode 100644
index 0000000000..bcd2eddc66
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
+const meta = {
+	title: 'components/global/MkPageHeader.tabs',
+	component: MkPageHeader_tabs,
+};
+export const Default = {
+	components: {
+		MkPageHeader_tabs,
+	},
+	template: '<MkPageHeader.tabs />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
new file mode 100644
index 0000000000..cb9f893e38
--- /dev/null
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkSpacer from './MkSpacer.vue';
+const meta = {
+	title: 'components/global/MkSpacer',
+	component: MkSpacer,
+};
+export const Default = {
+	components: {
+		MkSpacer,
+	},
+	template: '<MkSpacer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
new file mode 100644
index 0000000000..aca35e0d21
--- /dev/null
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkStickyContainer from './MkStickyContainer.vue';
+const meta = {
+	title: 'components/global/MkStickyContainer',
+	component: MkStickyContainer,
+};
+export const Default = {
+	components: {
+		MkStickyContainer,
+	},
+	template: '<MkStickyContainer />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
new file mode 100644
index 0000000000..196df61db4
--- /dev/null
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkTime from './MkTime.vue';
+const meta = {
+	title: 'components/global/MkTime',
+	component: MkTime,
+};
+export const Default = {
+	components: {
+		MkTime,
+	},
+	template: '<MkTime />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
new file mode 100644
index 0000000000..7e3ba56ee1
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUrl from './MkUrl.vue';
+const meta = {
+	title: 'components/global/MkUrl',
+	component: MkUrl,
+};
+export const Default = {
+	components: {
+		MkUrl,
+	},
+	template: '<MkUrl />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
new file mode 100644
index 0000000000..1a0b7912cb
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import MkUserName from './MkUserName.vue';
+const meta = {
+	title: 'components/global/MkUserName',
+	component: MkUserName,
+};
+export const Default = {
+	components: {
+		MkUserName,
+	},
+	template: '<MkUserName />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
new file mode 100644
index 0000000000..c4ab83c017
--- /dev/null
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import RouterView from './RouterView.vue';
+const meta = {
+	title: 'components/global/RouterView',
+	component: RouterView,
+};
+export const Default = {
+	components: {
+		RouterView,
+	},
+	template: '<RouterView />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
new file mode 100644
index 0000000000..3e4b9cba6a
--- /dev/null
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_block from './page.block.vue';
+const meta = {
+	title: 'components/page/page.block',
+	component: page_block,
+};
+export const Default = {
+	components: {
+		page_block,
+	},
+	template: '<page.block />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
new file mode 100644
index 0000000000..35140be3f8
--- /dev/null
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_button from './page.button.vue';
+const meta = {
+	title: 'components/page/page.button',
+	component: page_button,
+};
+export const Default = {
+	components: {
+		page_button,
+	},
+	template: '<page.button />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
new file mode 100644
index 0000000000..7a0350b247
--- /dev/null
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_canvas from './page.canvas.vue';
+const meta = {
+	title: 'components/page/page.canvas',
+	component: page_canvas,
+};
+export const Default = {
+	components: {
+		page_canvas,
+	},
+	template: '<page.canvas />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
new file mode 100644
index 0000000000..22289bb079
--- /dev/null
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_counter from './page.counter.vue';
+const meta = {
+	title: 'components/page/page.counter',
+	component: page_counter,
+};
+export const Default = {
+	components: {
+		page_counter,
+	},
+	template: '<page.counter />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
new file mode 100644
index 0000000000..c286b9b100
--- /dev/null
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_if from './page.if.vue';
+const meta = {
+	title: 'components/page/page.if',
+	component: page_if,
+};
+export const Default = {
+	components: {
+		page_if,
+	},
+	template: '<page.if />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
new file mode 100644
index 0000000000..76c5f448fc
--- /dev/null
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_image from './page.image.vue';
+const meta = {
+	title: 'components/page/page.image',
+	component: page_image,
+};
+export const Default = {
+	components: {
+		page_image,
+	},
+	template: '<page.image />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
new file mode 100644
index 0000000000..7cd6253e11
--- /dev/null
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_note from './page.note.vue';
+const meta = {
+	title: 'components/page/page.note',
+	component: page_note,
+};
+export const Default = {
+	components: {
+		page_note,
+	},
+	template: '<page.note />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
new file mode 100644
index 0000000000..f114ea4f64
--- /dev/null
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_number_input from './page.number-input.vue';
+const meta = {
+	title: 'components/page/page.number-input',
+	component: page_number_input,
+};
+export const Default = {
+	components: {
+		page_number_input,
+	},
+	template: '<page.number-input />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
new file mode 100644
index 0000000000..f3320c8e06
--- /dev/null
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_post from './page.post.vue';
+const meta = {
+	title: 'components/page/page.post',
+	component: page_post,
+};
+export const Default = {
+	components: {
+		page_post,
+	},
+	template: '<page.post />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
new file mode 100644
index 0000000000..860cd5eb13
--- /dev/null
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_radio_button from './page.radio-button.vue';
+const meta = {
+	title: 'components/page/page.radio-button',
+	component: page_radio_button,
+};
+export const Default = {
+	components: {
+		page_radio_button,
+	},
+	template: '<page.radio-button />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
new file mode 100644
index 0000000000..992b9d5a42
--- /dev/null
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_section from './page.section.vue';
+const meta = {
+	title: 'components/page/page.section',
+	component: page_section,
+};
+export const Default = {
+	components: {
+		page_section,
+	},
+	template: '<page.section />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
new file mode 100644
index 0000000000..a7264f4bee
--- /dev/null
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page from './page.vue';
+const meta = {
+	title: 'components/page/page',
+	component: page,
+};
+export const Default = {
+	components: {
+		page,
+	},
+	template: '<page />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
new file mode 100644
index 0000000000..d90c74d761
--- /dev/null
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_switch from './page.switch.vue';
+const meta = {
+	title: 'components/page/page.switch',
+	component: page_switch,
+};
+export const Default = {
+	components: {
+		page_switch,
+	},
+	template: '<page.switch />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
new file mode 100644
index 0000000000..897c6ea2fd
--- /dev/null
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_text_input from './page.text-input.vue';
+const meta = {
+	title: 'components/page/page.text-input',
+	component: page_text_input,
+};
+export const Default = {
+	components: {
+		page_text_input,
+	},
+	template: '<page.text-input />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
new file mode 100644
index 0000000000..cb88a35983
--- /dev/null
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_text from './page.text.vue';
+const meta = {
+	title: 'components/page/page.text',
+	component: page_text,
+};
+export const Default = {
+	components: {
+		page_text,
+	},
+	template: '<page.text />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
new file mode 100644
index 0000000000..0dcef76a40
--- /dev/null
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_textarea_input from './page.textarea-input.vue';
+const meta = {
+	title: 'components/page/page.textarea-input',
+	component: page_textarea_input,
+};
+export const Default = {
+	components: {
+		page_textarea_input,
+	},
+	template: '<page.textarea-input />',
+};
+export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
new file mode 100644
index 0000000000..148c48df02
--- /dev/null
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_textarea from './page.textarea.vue';
+const meta = {
+	title: 'components/page/page.textarea',
+	component: page_textarea,
+};
+export const Default = {
+	components: {
+		page_textarea,
+	},
+	template: '<page.textarea />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
new file mode 100644
index 0000000000..0d004b65e1
--- /dev/null
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _empty_ from './_empty_.vue';
+const meta = {
+	title: 'pages/_empty_',
+	component: _empty_,
+};
+export const Default = {
+	components: {
+		_empty_,
+	},
+	template: '<_empty_ />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
new file mode 100644
index 0000000000..d3af6637ce
--- /dev/null
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _error_ from './_error_.vue';
+const meta = {
+	title: 'pages/_error_',
+	component: _error_,
+};
+export const Default = {
+	components: {
+		_error_,
+	},
+	template: '<_error_ />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
new file mode 100644
index 0000000000..4349f3b44f
--- /dev/null
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _loading_ from './_loading_.vue';
+const meta = {
+	title: 'pages/_loading_',
+	component: _loading_,
+};
+export const Default = {
+	components: {
+		_loading_,
+	},
+	template: '<_loading_ />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
new file mode 100644
index 0000000000..b37c88e75b
--- /dev/null
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import about_misskey from './about-misskey.vue';
+const meta = {
+	title: 'pages/about-misskey',
+	component: about_misskey,
+};
+export const Default = {
+	components: {
+		about_misskey,
+	},
+	template: '<about-misskey />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
new file mode 100644
index 0000000000..f5c0504864
--- /dev/null
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import about_emojis from './about.emojis.vue';
+const meta = {
+	title: 'pages/about.emojis',
+	component: about_emojis,
+};
+export const Default = {
+	components: {
+		about_emojis,
+	},
+	template: '<about.emojis />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
new file mode 100644
index 0000000000..697beb6a28
--- /dev/null
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import about_federation from './about.federation.vue';
+const meta = {
+	title: 'pages/about.federation',
+	component: about_federation,
+};
+export const Default = {
+	components: {
+		about_federation,
+	},
+	template: '<about.federation />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
new file mode 100644
index 0000000000..4150c3a134
--- /dev/null
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import about from './about.vue';
+const meta = {
+	title: 'pages/about',
+	component: about,
+};
+export const Default = {
+	components: {
+		about,
+	},
+	template: '<about />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
new file mode 100644
index 0000000000..f0b1b14dcd
--- /dev/null
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import achievements from './achievements.vue';
+const meta = {
+	title: 'pages/achievements',
+	component: achievements,
+};
+export const Default = {
+	components: {
+		achievements,
+	},
+	template: '<achievements />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
new file mode 100644
index 0000000000..8403abb5d4
--- /dev/null
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import admin_file from './admin-file.vue';
+const meta = {
+	title: 'pages/admin-file',
+	component: admin_file,
+};
+export const Default = {
+	components: {
+		admin_file,
+	},
+	template: '<admin-file />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
new file mode 100644
index 0000000000..16682c2f91
--- /dev/null
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import RolesEditorFormula from './RolesEditorFormula.vue';
+const meta = {
+	title: 'pages/admin/RolesEditorFormula',
+	component: RolesEditorFormula,
+};
+export const Default = {
+	components: {
+		RolesEditorFormula,
+	},
+	template: '<RolesEditorFormula />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
new file mode 100644
index 0000000000..c03039c692
--- /dev/null
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _header_ from './_header_.vue';
+const meta = {
+	title: 'pages/admin/_header_',
+	component: _header_,
+};
+export const Default = {
+	components: {
+		_header_,
+	},
+	template: '<_header_ />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
new file mode 100644
index 0000000000..619ef42bfd
--- /dev/null
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import abuses from './abuses.vue';
+const meta = {
+	title: 'pages/admin/abuses',
+	component: abuses,
+};
+export const Default = {
+	components: {
+		abuses,
+	},
+	template: '<abuses />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
new file mode 100644
index 0000000000..49b11f8934
--- /dev/null
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import ads from './ads.vue';
+const meta = {
+	title: 'pages/admin/ads',
+	component: ads,
+};
+export const Default = {
+	components: {
+		ads,
+	},
+	template: '<ads />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
new file mode 100644
index 0000000000..0f990a152f
--- /dev/null
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import announcements from './announcements.vue';
+const meta = {
+	title: 'pages/admin/announcements',
+	component: announcements,
+};
+export const Default = {
+	components: {
+		announcements,
+	},
+	template: '<announcements />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
new file mode 100644
index 0000000000..5c02a7060c
--- /dev/null
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import bot_protection from './bot-protection.vue';
+const meta = {
+	title: 'pages/admin/bot-protection',
+	component: bot_protection,
+};
+export const Default = {
+	components: {
+		bot_protection,
+	},
+	template: '<bot-protection />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
new file mode 100644
index 0000000000..7bddb16207
--- /dev/null
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import database from './database.vue';
+const meta = {
+	title: 'pages/admin/database',
+	component: database,
+};
+export const Default = {
+	components: {
+		database,
+	},
+	template: '<database />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
new file mode 100644
index 0000000000..c89b2e4671
--- /dev/null
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import email_settings from './email-settings.vue';
+const meta = {
+	title: 'pages/admin/email-settings',
+	component: email_settings,
+};
+export const Default = {
+	components: {
+		email_settings,
+	},
+	template: '<email-settings />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
new file mode 100644
index 0000000000..dfa783cf8f
--- /dev/null
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import federation from './federation.vue';
+const meta = {
+	title: 'pages/admin/federation',
+	component: federation,
+};
+export const Default = {
+	components: {
+		federation,
+	},
+	template: '<federation />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
new file mode 100644
index 0000000000..86c7b9633a
--- /dev/null
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import files from './files.vue';
+const meta = {
+	title: 'pages/admin/files',
+	component: files,
+};
+export const Default = {
+	components: {
+		files,
+	},
+	template: '<files />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
new file mode 100644
index 0000000000..04b0cbac65
--- /dev/null
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/admin/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
new file mode 100644
index 0000000000..4051f02919
--- /dev/null
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import instance_block from './instance-block.vue';
+const meta = {
+	title: 'pages/admin/instance-block',
+	component: instance_block,
+};
+export const Default = {
+	components: {
+		instance_block,
+	},
+	template: '<instance-block />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
new file mode 100644
index 0000000000..48c5c3a45e
--- /dev/null
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import moderation from './moderation.vue';
+const meta = {
+	title: 'pages/admin/moderation',
+	component: moderation,
+};
+export const Default = {
+	components: {
+		moderation,
+	},
+	template: '<moderation />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
new file mode 100644
index 0000000000..c85f0a3b28
--- /dev/null
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import object_storage from './object-storage.vue';
+const meta = {
+	title: 'pages/admin/object-storage',
+	component: object_storage,
+};
+export const Default = {
+	components: {
+		object_storage,
+	},
+	template: '<object-storage />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
new file mode 100644
index 0000000000..44f4fb2e7a
--- /dev/null
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import other_settings from './other-settings.vue';
+const meta = {
+	title: 'pages/admin/other-settings',
+	component: other_settings,
+};
+export const Default = {
+	components: {
+		other_settings,
+	},
+	template: '<other-settings />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
new file mode 100644
index 0000000000..e8921b87be
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_active_users from './overview.active-users.vue';
+const meta = {
+	title: 'pages/admin/overview.active-users',
+	component: overview_active_users,
+};
+export const Default = {
+	components: {
+		overview_active_users,
+	},
+	template: '<overview.active-users />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
new file mode 100644
index 0000000000..a5749b5229
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_ap_requests from './overview.ap-requests.vue';
+const meta = {
+	title: 'pages/admin/overview.ap-requests',
+	component: overview_ap_requests,
+};
+export const Default = {
+	components: {
+		overview_ap_requests,
+	},
+	template: '<overview.ap-requests />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
new file mode 100644
index 0000000000..f41761150f
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_federation from './overview.federation.vue';
+const meta = {
+	title: 'pages/admin/overview.federation',
+	component: overview_federation,
+};
+export const Default = {
+	components: {
+		overview_federation,
+	},
+	template: '<overview.federation />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
new file mode 100644
index 0000000000..51f0ce2348
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_heatmap from './overview.heatmap.vue';
+const meta = {
+	title: 'pages/admin/overview.heatmap',
+	component: overview_heatmap,
+};
+export const Default = {
+	components: {
+		overview_heatmap,
+	},
+	template: '<overview.heatmap />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
new file mode 100644
index 0000000000..410c3350bb
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_instances from './overview.instances.vue';
+const meta = {
+	title: 'pages/admin/overview.instances',
+	component: overview_instances,
+};
+export const Default = {
+	components: {
+		overview_instances,
+	},
+	template: '<overview.instances />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
new file mode 100644
index 0000000000..2998373fe0
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_moderators from './overview.moderators.vue';
+const meta = {
+	title: 'pages/admin/overview.moderators',
+	component: overview_moderators,
+};
+export const Default = {
+	components: {
+		overview_moderators,
+	},
+	template: '<overview.moderators />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
new file mode 100644
index 0000000000..94571e9c7f
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_pie from './overview.pie.vue';
+const meta = {
+	title: 'pages/admin/overview.pie',
+	component: overview_pie,
+};
+export const Default = {
+	components: {
+		overview_pie,
+	},
+	template: '<overview.pie />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
new file mode 100644
index 0000000000..31e1f728be
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_queue_chart from './overview.queue.chart.vue';
+const meta = {
+	title: 'pages/admin/overview.queue.chart',
+	component: overview_queue_chart,
+};
+export const Default = {
+	components: {
+		overview_queue_chart,
+	},
+	template: '<overview.queue.chart />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
new file mode 100644
index 0000000000..21c4d204ba
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_queue from './overview.queue.vue';
+const meta = {
+	title: 'pages/admin/overview.queue',
+	component: overview_queue,
+};
+export const Default = {
+	components: {
+		overview_queue,
+	},
+	template: '<overview.queue />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
new file mode 100644
index 0000000000..5200769a1c
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_retention from './overview.retention.vue';
+const meta = {
+	title: 'pages/admin/overview.retention',
+	component: overview_retention,
+};
+export const Default = {
+	components: {
+		overview_retention,
+	},
+	template: '<overview.retention />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
new file mode 100644
index 0000000000..3113e5043b
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_stats from './overview.stats.vue';
+const meta = {
+	title: 'pages/admin/overview.stats',
+	component: overview_stats,
+};
+export const Default = {
+	components: {
+		overview_stats,
+	},
+	template: '<overview.stats />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
new file mode 100644
index 0000000000..de78d77c20
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview from './overview.vue';
+const meta = {
+	title: 'pages/admin/overview',
+	component: overview,
+};
+export const Default = {
+	components: {
+		overview,
+	},
+	template: '<overview />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
new file mode 100644
index 0000000000..4f43cf79d2
--- /dev/null
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import overview_users from './overview.users.vue';
+const meta = {
+	title: 'pages/admin/overview.users',
+	component: overview_users,
+};
+export const Default = {
+	components: {
+		overview_users,
+	},
+	template: '<overview.users />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
new file mode 100644
index 0000000000..71edbea071
--- /dev/null
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import proxy_account from './proxy-account.vue';
+const meta = {
+	title: 'pages/admin/proxy-account',
+	component: proxy_account,
+};
+export const Default = {
+	components: {
+		proxy_account,
+	},
+	template: '<proxy-account />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
new file mode 100644
index 0000000000..691f032689
--- /dev/null
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import queue_chart_chart from './queue.chart.chart.vue';
+const meta = {
+	title: 'pages/admin/queue.chart.chart',
+	component: queue_chart_chart,
+};
+export const Default = {
+	components: {
+		queue_chart_chart,
+	},
+	template: '<queue.chart.chart />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
new file mode 100644
index 0000000000..d9c71790ea
--- /dev/null
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import queue_chart from './queue.chart.vue';
+const meta = {
+	title: 'pages/admin/queue.chart',
+	component: queue_chart,
+};
+export const Default = {
+	components: {
+		queue_chart,
+	},
+	template: '<queue.chart />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
new file mode 100644
index 0000000000..7dd0ac7998
--- /dev/null
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import queue from './queue.vue';
+const meta = {
+	title: 'pages/admin/queue',
+	component: queue,
+};
+export const Default = {
+	components: {
+		queue,
+	},
+	template: '<queue />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
new file mode 100644
index 0000000000..2d73938323
--- /dev/null
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import relays from './relays.vue';
+const meta = {
+	title: 'pages/admin/relays',
+	component: relays,
+};
+export const Default = {
+	components: {
+		relays,
+	},
+	template: '<relays />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
new file mode 100644
index 0000000000..e562a223d5
--- /dev/null
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import roles_edit from './roles.edit.vue';
+const meta = {
+	title: 'pages/admin/roles.edit',
+	component: roles_edit,
+};
+export const Default = {
+	components: {
+		roles_edit,
+	},
+	template: '<roles.edit />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
new file mode 100644
index 0000000000..4a3ed50157
--- /dev/null
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import roles_editor from './roles.editor.vue';
+const meta = {
+	title: 'pages/admin/roles.editor',
+	component: roles_editor,
+};
+export const Default = {
+	components: {
+		roles_editor,
+	},
+	template: '<roles.editor />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
new file mode 100644
index 0000000000..b2a28736b7
--- /dev/null
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import roles_role from './roles.role.vue';
+const meta = {
+	title: 'pages/admin/roles.role',
+	component: roles_role,
+};
+export const Default = {
+	components: {
+		roles_role,
+	},
+	template: '<roles.role />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
new file mode 100644
index 0000000000..c2ec83cc71
--- /dev/null
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import roles from './roles.vue';
+const meta = {
+	title: 'pages/admin/roles',
+	component: roles,
+};
+export const Default = {
+	components: {
+		roles,
+	},
+	template: '<roles />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
new file mode 100644
index 0000000000..be28e11f15
--- /dev/null
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import security from './security.vue';
+const meta = {
+	title: 'pages/admin/security',
+	component: security,
+};
+export const Default = {
+	components: {
+		security,
+	},
+	template: '<security />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
new file mode 100644
index 0000000000..1bba4ca65c
--- /dev/null
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import settings from './settings.vue';
+const meta = {
+	title: 'pages/admin/settings',
+	component: settings,
+};
+export const Default = {
+	components: {
+		settings,
+	},
+	template: '<settings />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
new file mode 100644
index 0000000000..05949c87a8
--- /dev/null
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import users from './users.vue';
+const meta = {
+	title: 'pages/admin/users',
+	component: users,
+};
+export const Default = {
+	components: {
+		users,
+	},
+	template: '<users />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
new file mode 100644
index 0000000000..48891ca33e
--- /dev/null
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import ads from './ads.vue';
+const meta = {
+	title: 'pages/ads',
+	component: ads,
+};
+export const Default = {
+	components: {
+		ads,
+	},
+	template: '<ads />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
new file mode 100644
index 0000000000..526d9ef0a3
--- /dev/null
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import announcements from './announcements.vue';
+const meta = {
+	title: 'pages/announcements',
+	component: announcements,
+};
+export const Default = {
+	components: {
+		announcements,
+	},
+	template: '<announcements />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
new file mode 100644
index 0000000000..39fba9b1bc
--- /dev/null
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import antenna_timeline from './antenna-timeline.vue';
+const meta = {
+	title: 'pages/antenna-timeline',
+	component: antenna_timeline,
+};
+export const Default = {
+	components: {
+		antenna_timeline,
+	},
+	template: '<antenna-timeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
new file mode 100644
index 0000000000..adb6440050
--- /dev/null
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import api_console from './api-console.vue';
+const meta = {
+	title: 'pages/api-console',
+	component: api_console,
+};
+export const Default = {
+	components: {
+		api_console,
+	},
+	template: '<api-console />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
new file mode 100644
index 0000000000..19134f4539
--- /dev/null
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import auth_form from './auth.form.vue';
+const meta = {
+	title: 'pages/auth.form',
+	component: auth_form,
+};
+export const Default = {
+	components: {
+		auth_form,
+	},
+	template: '<auth.form />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
new file mode 100644
index 0000000000..2b78a38939
--- /dev/null
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import auth from './auth.vue';
+const meta = {
+	title: 'pages/auth',
+	component: auth,
+};
+export const Default = {
+	components: {
+		auth,
+	},
+	template: '<auth />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
new file mode 100644
index 0000000000..4df2f4c0f1
--- /dev/null
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import channel_editor from './channel-editor.vue';
+const meta = {
+	title: 'pages/channel-editor',
+	component: channel_editor,
+};
+export const Default = {
+	components: {
+		channel_editor,
+	},
+	template: '<channel-editor />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
new file mode 100644
index 0000000000..ba65e2c0ac
--- /dev/null
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import channel from './channel.vue';
+const meta = {
+	title: 'pages/channel',
+	component: channel,
+};
+export const Default = {
+	components: {
+		channel,
+	},
+	template: '<channel />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
new file mode 100644
index 0000000000..cb77506fc2
--- /dev/null
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import channels from './channels.vue';
+const meta = {
+	title: 'pages/channels',
+	component: channels,
+};
+export const Default = {
+	components: {
+		channels,
+	},
+	template: '<channels />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
new file mode 100644
index 0000000000..cbcd6bbd2d
--- /dev/null
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import clicker from './clicker.vue';
+const meta = {
+	title: 'pages/clicker',
+	component: clicker,
+};
+export const Default = {
+	components: {
+		clicker,
+	},
+	template: '<clicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
new file mode 100644
index 0000000000..d5532bd879
--- /dev/null
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import clip from './clip.vue';
+const meta = {
+	title: 'pages/clip',
+	component: clip,
+};
+export const Default = {
+	components: {
+		clip,
+	},
+	template: '<clip />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
new file mode 100644
index 0000000000..89017a590b
--- /dev/null
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import custom_emojis_manager from './custom-emojis-manager.vue';
+const meta = {
+	title: 'pages/custom-emojis-manager',
+	component: custom_emojis_manager,
+};
+export const Default = {
+	components: {
+		custom_emojis_manager,
+	},
+	template: '<custom-emojis-manager />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
new file mode 100644
index 0000000000..67f7392c39
--- /dev/null
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import drive from './drive.vue';
+const meta = {
+	title: 'pages/drive',
+	component: drive,
+};
+export const Default = {
+	components: {
+		drive,
+	},
+	template: '<drive />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
new file mode 100644
index 0000000000..8dae3f3f56
--- /dev/null
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import emoji_edit_dialog from './emoji-edit-dialog.vue';
+const meta = {
+	title: 'pages/emoji-edit-dialog',
+	component: emoji_edit_dialog,
+};
+export const Default = {
+	components: {
+		emoji_edit_dialog,
+	},
+	template: '<emoji-edit-dialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
new file mode 100644
index 0000000000..bd3644d079
--- /dev/null
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import emojis_emoji from './emojis.emoji.vue';
+const meta = {
+	title: 'pages/emojis.emoji',
+	component: emojis_emoji,
+};
+export const Default = {
+	components: {
+		emojis_emoji,
+	},
+	template: '<emojis.emoji />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
new file mode 100644
index 0000000000..4626c861df
--- /dev/null
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import explore_featured from './explore.featured.vue';
+const meta = {
+	title: 'pages/explore.featured',
+	component: explore_featured,
+};
+export const Default = {
+	components: {
+		explore_featured,
+	},
+	template: '<explore.featured />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
new file mode 100644
index 0000000000..e00f33b935
--- /dev/null
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import explore_roles from './explore.roles.vue';
+const meta = {
+	title: 'pages/explore.roles',
+	component: explore_roles,
+};
+export const Default = {
+	components: {
+		explore_roles,
+	},
+	template: '<explore.roles />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
new file mode 100644
index 0000000000..b90e609246
--- /dev/null
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import explore from './explore.vue';
+const meta = {
+	title: 'pages/explore',
+	component: explore,
+};
+export const Default = {
+	components: {
+		explore,
+	},
+	template: '<explore />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
new file mode 100644
index 0000000000..75b5457092
--- /dev/null
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import explore_users from './explore.users.vue';
+const meta = {
+	title: 'pages/explore.users',
+	component: explore_users,
+};
+export const Default = {
+	components: {
+		explore_users,
+	},
+	template: '<explore.users />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
new file mode 100644
index 0000000000..102fc0f142
--- /dev/null
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import favorites from './favorites.vue';
+const meta = {
+	title: 'pages/favorites',
+	component: favorites,
+};
+export const Default = {
+	components: {
+		favorites,
+	},
+	template: '<favorites />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
new file mode 100644
index 0000000000..60449be06e
--- /dev/null
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import flash_edit from './flash-edit.vue';
+const meta = {
+	title: 'pages/flash/flash-edit',
+	component: flash_edit,
+};
+export const Default = {
+	components: {
+		flash_edit,
+	},
+	template: '<flash-edit />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
new file mode 100644
index 0000000000..0ac5152247
--- /dev/null
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import flash_index from './flash-index.vue';
+const meta = {
+	title: 'pages/flash/flash-index',
+	component: flash_index,
+};
+export const Default = {
+	components: {
+		flash_index,
+	},
+	template: '<flash-index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
new file mode 100644
index 0000000000..0b4090aa58
--- /dev/null
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import flash from './flash.vue';
+const meta = {
+	title: 'pages/flash/flash',
+	component: flash,
+};
+export const Default = {
+	components: {
+		flash,
+	},
+	template: '<flash />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
new file mode 100644
index 0000000000..3d88533133
--- /dev/null
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import follow_requests from './follow-requests.vue';
+const meta = {
+	title: 'pages/follow-requests',
+	component: follow_requests,
+};
+export const Default = {
+	components: {
+		follow_requests,
+	},
+	template: '<follow-requests />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
new file mode 100644
index 0000000000..c669570b7e
--- /dev/null
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import follow from './follow.vue';
+const meta = {
+	title: 'pages/follow',
+	component: follow,
+};
+export const Default = {
+	components: {
+		follow,
+	},
+	template: '<follow />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
new file mode 100644
index 0000000000..a7730e833a
--- /dev/null
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import edit from './edit.vue';
+const meta = {
+	title: 'pages/gallery/edit',
+	component: edit,
+};
+export const Default = {
+	components: {
+		edit,
+	},
+	template: '<edit />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
new file mode 100644
index 0000000000..c90f66f3e3
--- /dev/null
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/gallery/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
new file mode 100644
index 0000000000..2828dbba97
--- /dev/null
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import post from './post.vue';
+const meta = {
+	title: 'pages/gallery/post',
+	component: post,
+};
+export const Default = {
+	components: {
+		post,
+	},
+	template: '<post />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
new file mode 100644
index 0000000000..82f9806560
--- /dev/null
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import instance_info from './instance-info.vue';
+const meta = {
+	title: 'pages/instance-info',
+	component: instance_info,
+};
+export const Default = {
+	components: {
+		instance_info,
+	},
+	template: '<instance-info />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
new file mode 100644
index 0000000000..e31d43a38b
--- /dev/null
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import miauth from './miauth.vue';
+const meta = {
+	title: 'pages/miauth',
+	component: miauth,
+};
+export const Default = {
+	components: {
+		miauth,
+	},
+	template: '<miauth />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
new file mode 100644
index 0000000000..58ebf35d83
--- /dev/null
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import create from './create.vue';
+const meta = {
+	title: 'pages/my-antennas/create',
+	component: create,
+};
+export const Default = {
+	components: {
+		create,
+	},
+	template: '<create />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
new file mode 100644
index 0000000000..05631ad895
--- /dev/null
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import edit from './edit.vue';
+const meta = {
+	title: 'pages/my-antennas/edit',
+	component: edit,
+};
+export const Default = {
+	components: {
+		edit,
+	},
+	template: '<edit />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
new file mode 100644
index 0000000000..5ffcc6a3d2
--- /dev/null
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import editor from './editor.vue';
+const meta = {
+	title: 'pages/my-antennas/editor',
+	component: editor,
+};
+export const Default = {
+	components: {
+		editor,
+	},
+	template: '<editor />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
new file mode 100644
index 0000000000..0d3579c802
--- /dev/null
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/my-antennas/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
new file mode 100644
index 0000000000..848ff2ed74
--- /dev/null
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/my-clips/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
new file mode 100644
index 0000000000..417cf3979b
--- /dev/null
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/my-lists/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
new file mode 100644
index 0000000000..b961d35834
--- /dev/null
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import list from './list.vue';
+const meta = {
+	title: 'pages/my-lists/list',
+	component: list,
+};
+export const Default = {
+	components: {
+		list,
+	},
+	template: '<list />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
new file mode 100644
index 0000000000..5c8a643694
--- /dev/null
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import not_found from './not-found.vue';
+const meta = {
+	title: 'pages/not-found',
+	component: not_found,
+};
+export const Default = {
+	components: {
+		not_found,
+	},
+	template: '<not-found />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
new file mode 100644
index 0000000000..6e32a55946
--- /dev/null
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import note from './note.vue';
+const meta = {
+	title: 'pages/note',
+	component: note,
+};
+export const Default = {
+	components: {
+		note,
+	},
+	template: '<note />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
new file mode 100644
index 0000000000..b406e08fe0
--- /dev/null
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import notifications from './notifications.vue';
+const meta = {
+	title: 'pages/notifications',
+	component: notifications,
+};
+export const Default = {
+	components: {
+		notifications,
+	},
+	template: '<notifications />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
new file mode 100644
index 0000000000..1f62bdc2ce
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_el_image from './page-editor.el.image.vue';
+const meta = {
+	title: 'pages/page-editor/els/page-editor.el.image',
+	component: page_editor_el_image,
+};
+export const Default = {
+	components: {
+		page_editor_el_image,
+	},
+	template: '<page-editor.el.image />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
new file mode 100644
index 0000000000..363bc343be
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_el_note from './page-editor.el.note.vue';
+const meta = {
+	title: 'pages/page-editor/els/page-editor.el.note',
+	component: page_editor_el_note,
+};
+export const Default = {
+	components: {
+		page_editor_el_note,
+	},
+	template: '<page-editor.el.note />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
new file mode 100644
index 0000000000..77bd89228a
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_el_section from './page-editor.el.section.vue';
+const meta = {
+	title: 'pages/page-editor/els/page-editor.el.section',
+	component: page_editor_el_section,
+};
+export const Default = {
+	components: {
+		page_editor_el_section,
+	},
+	template: '<page-editor.el.section />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
new file mode 100644
index 0000000000..ec795bf13c
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_el_text from './page-editor.el.text.vue';
+const meta = {
+	title: 'pages/page-editor/els/page-editor.el.text',
+	component: page_editor_el_text,
+};
+export const Default = {
+	components: {
+		page_editor_el_text,
+	},
+	template: '<page-editor.el.text />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
new file mode 100644
index 0000000000..9bc66bfa36
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_blocks from './page-editor.blocks.vue';
+const meta = {
+	title: 'pages/page-editor/page-editor.blocks',
+	component: page_editor_blocks,
+};
+export const Default = {
+	components: {
+		page_editor_blocks,
+	},
+	template: '<page-editor.blocks />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
new file mode 100644
index 0000000000..32a0ca5026
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor_container from './page-editor.container.vue';
+const meta = {
+	title: 'pages/page-editor/page-editor.container',
+	component: page_editor_container,
+};
+export const Default = {
+	components: {
+		page_editor_container,
+	},
+	template: '<page-editor.container />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
new file mode 100644
index 0000000000..facfd7ba2a
--- /dev/null
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page_editor from './page-editor.vue';
+const meta = {
+	title: 'pages/page-editor/page-editor',
+	component: page_editor,
+};
+export const Default = {
+	components: {
+		page_editor,
+	},
+	template: '<page-editor />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
new file mode 100644
index 0000000000..b2d9e5a821
--- /dev/null
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import page from './page.vue';
+const meta = {
+	title: 'pages/page',
+	component: page,
+};
+export const Default = {
+	components: {
+		page,
+	},
+	template: '<page />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
new file mode 100644
index 0000000000..0b540f5c20
--- /dev/null
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import pages from './pages.vue';
+const meta = {
+	title: 'pages/pages',
+	component: pages,
+};
+export const Default = {
+	components: {
+		pages,
+	},
+	template: '<pages />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
new file mode 100644
index 0000000000..57e3d29a1f
--- /dev/null
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import preview from './preview.vue';
+const meta = {
+	title: 'pages/preview',
+	component: preview,
+};
+export const Default = {
+	components: {
+		preview,
+	},
+	template: '<preview />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
new file mode 100644
index 0000000000..14097653dc
--- /dev/null
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import registry_keys from './registry.keys.vue';
+const meta = {
+	title: 'pages/registry.keys',
+	component: registry_keys,
+};
+export const Default = {
+	components: {
+		registry_keys,
+	},
+	template: '<registry.keys />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
new file mode 100644
index 0000000000..09e2193ad7
--- /dev/null
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import registry from './registry.vue';
+const meta = {
+	title: 'pages/registry',
+	component: registry,
+};
+export const Default = {
+	components: {
+		registry,
+	},
+	template: '<registry />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
new file mode 100644
index 0000000000..6d5b3c4bb5
--- /dev/null
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import registry_value from './registry.value.vue';
+const meta = {
+	title: 'pages/registry.value',
+	component: registry_value,
+};
+export const Default = {
+	components: {
+		registry_value,
+	},
+	template: '<registry.value />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
new file mode 100644
index 0000000000..a5cd75de4a
--- /dev/null
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import reset_password from './reset-password.vue';
+const meta = {
+	title: 'pages/reset-password',
+	component: reset_password,
+};
+export const Default = {
+	components: {
+		reset_password,
+	},
+	template: '<reset-password />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
new file mode 100644
index 0000000000..4c116a5240
--- /dev/null
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import role from './role.vue';
+const meta = {
+	title: 'pages/role',
+	component: role,
+};
+export const Default = {
+	components: {
+		role,
+	},
+	template: '<role />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
new file mode 100644
index 0000000000..28a03c0180
--- /dev/null
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import scratchpad from './scratchpad.vue';
+const meta = {
+	title: 'pages/scratchpad',
+	component: scratchpad,
+};
+export const Default = {
+	components: {
+		scratchpad,
+	},
+	template: '<scratchpad />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
new file mode 100644
index 0000000000..01e77fb543
--- /dev/null
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import search from './search.vue';
+const meta = {
+	title: 'pages/search',
+	component: search,
+};
+export const Default = {
+	components: {
+		search,
+	},
+	template: '<search />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
new file mode 100644
index 0000000000..0e37c0bcb2
--- /dev/null
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _2fa_qrdialog from './2fa.qrdialog.vue';
+const meta = {
+	title: 'pages/settings/2fa.qrdialog',
+	component: _2fa_qrdialog,
+};
+export const Default = {
+	components: {
+		_2fa_qrdialog,
+	},
+	template: '<2fa.qrdialog />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
new file mode 100644
index 0000000000..583dddd6d9
--- /dev/null
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import _2fa from './2fa.vue';
+const meta = {
+	title: 'pages/settings/2fa',
+	component: _2fa,
+};
+export const Default = {
+	components: {
+		_2fa,
+	},
+	template: '<2fa />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
new file mode 100644
index 0000000000..87abcbc836
--- /dev/null
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import account_info from './account-info.vue';
+const meta = {
+	title: 'pages/settings/account-info',
+	component: account_info,
+};
+export const Default = {
+	components: {
+		account_info,
+	},
+	template: '<account-info />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
new file mode 100644
index 0000000000..e48f7885ae
--- /dev/null
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import accounts from './accounts.vue';
+const meta = {
+	title: 'pages/settings/accounts',
+	component: accounts,
+};
+export const Default = {
+	components: {
+		accounts,
+	},
+	template: '<accounts />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
new file mode 100644
index 0000000000..c9469cf898
--- /dev/null
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import api from './api.vue';
+const meta = {
+	title: 'pages/settings/api',
+	component: api,
+};
+export const Default = {
+	components: {
+		api,
+	},
+	template: '<api />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
new file mode 100644
index 0000000000..7b14e4fc19
--- /dev/null
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import apps from './apps.vue';
+const meta = {
+	title: 'pages/settings/apps',
+	component: apps,
+};
+export const Default = {
+	components: {
+		apps,
+	},
+	template: '<apps />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
new file mode 100644
index 0000000000..6feb108af4
--- /dev/null
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import custom_css from './custom-css.vue';
+const meta = {
+	title: 'pages/settings/custom-css',
+	component: custom_css,
+};
+export const Default = {
+	components: {
+		custom_css,
+	},
+	template: '<custom-css />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
new file mode 100644
index 0000000000..d030d01bdb
--- /dev/null
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import deck from './deck.vue';
+const meta = {
+	title: 'pages/settings/deck',
+	component: deck,
+};
+export const Default = {
+	components: {
+		deck,
+	},
+	template: '<deck />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
new file mode 100644
index 0000000000..330c2ef631
--- /dev/null
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import delete_account from './delete-account.vue';
+const meta = {
+	title: 'pages/settings/delete-account',
+	component: delete_account,
+};
+export const Default = {
+	components: {
+		delete_account,
+	},
+	template: '<delete-account />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
new file mode 100644
index 0000000000..c9ab0b484e
--- /dev/null
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import drive from './drive.vue';
+const meta = {
+	title: 'pages/settings/drive',
+	component: drive,
+};
+export const Default = {
+	components: {
+		drive,
+	},
+	template: '<drive />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
new file mode 100644
index 0000000000..24c490aa40
--- /dev/null
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import email from './email.vue';
+const meta = {
+	title: 'pages/settings/email',
+	component: email,
+};
+export const Default = {
+	components: {
+		email,
+	},
+	template: '<email />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
new file mode 100644
index 0000000000..1a07b8bf51
--- /dev/null
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import general from './general.vue';
+const meta = {
+	title: 'pages/settings/general',
+	component: general,
+};
+export const Default = {
+	components: {
+		general,
+	},
+	template: '<general />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
new file mode 100644
index 0000000000..c8a2715d20
--- /dev/null
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import import_export from './import-export.vue';
+const meta = {
+	title: 'pages/settings/import-export',
+	component: import_export,
+};
+export const Default = {
+	components: {
+		import_export,
+	},
+	template: '<import-export />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
new file mode 100644
index 0000000000..73d7cdbbb4
--- /dev/null
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/settings/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
new file mode 100644
index 0000000000..4d8d007948
--- /dev/null
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import instance_mute from './instance-mute.vue';
+const meta = {
+	title: 'pages/settings/instance-mute',
+	component: instance_mute,
+};
+export const Default = {
+	components: {
+		instance_mute,
+	},
+	template: '<instance-mute />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
new file mode 100644
index 0000000000..4f5fae2517
--- /dev/null
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import mute_block from './mute-block.vue';
+const meta = {
+	title: 'pages/settings/mute-block',
+	component: mute_block,
+};
+export const Default = {
+	components: {
+		mute_block,
+	},
+	template: '<mute-block />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
new file mode 100644
index 0000000000..dc3ff66f8a
--- /dev/null
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import navbar from './navbar.vue';
+const meta = {
+	title: 'pages/settings/navbar',
+	component: navbar,
+};
+export const Default = {
+	components: {
+		navbar,
+	},
+	template: '<navbar />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
new file mode 100644
index 0000000000..95c82da4ce
--- /dev/null
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import notifications from './notifications.vue';
+const meta = {
+	title: 'pages/settings/notifications',
+	component: notifications,
+};
+export const Default = {
+	components: {
+		notifications,
+	},
+	template: '<notifications />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
new file mode 100644
index 0000000000..dd71d857ac
--- /dev/null
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import other from './other.vue';
+const meta = {
+	title: 'pages/settings/other',
+	component: other,
+};
+export const Default = {
+	components: {
+		other,
+	},
+	template: '<other />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
new file mode 100644
index 0000000000..3d477a3b64
--- /dev/null
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import plugin_install from './plugin.install.vue';
+const meta = {
+	title: 'pages/settings/plugin.install',
+	component: plugin_install,
+};
+export const Default = {
+	components: {
+		plugin_install,
+	},
+	template: '<plugin.install />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
new file mode 100644
index 0000000000..b6e6dbe27c
--- /dev/null
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import plugin from './plugin.vue';
+const meta = {
+	title: 'pages/settings/plugin',
+	component: plugin,
+};
+export const Default = {
+	components: {
+		plugin,
+	},
+	template: '<plugin />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
new file mode 100644
index 0000000000..724e0f0041
--- /dev/null
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import preferences_backups from './preferences-backups.vue';
+const meta = {
+	title: 'pages/settings/preferences-backups',
+	component: preferences_backups,
+};
+export const Default = {
+	components: {
+		preferences_backups,
+	},
+	template: '<preferences-backups />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
new file mode 100644
index 0000000000..69e08eef78
--- /dev/null
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import privacy from './privacy.vue';
+const meta = {
+	title: 'pages/settings/privacy',
+	component: privacy,
+};
+export const Default = {
+	components: {
+		privacy,
+	},
+	template: '<privacy />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
new file mode 100644
index 0000000000..96d5c54dcd
--- /dev/null
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import profile from './profile.vue';
+const meta = {
+	title: 'pages/settings/profile',
+	component: profile,
+};
+export const Default = {
+	components: {
+		profile,
+	},
+	template: '<profile />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
new file mode 100644
index 0000000000..48ef720ed1
--- /dev/null
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import reaction from './reaction.vue';
+const meta = {
+	title: 'pages/settings/reaction',
+	component: reaction,
+};
+export const Default = {
+	components: {
+		reaction,
+	},
+	template: '<reaction />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
new file mode 100644
index 0000000000..5b4e577aba
--- /dev/null
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import roles from './roles.vue';
+const meta = {
+	title: 'pages/settings/roles',
+	component: roles,
+};
+export const Default = {
+	components: {
+		roles,
+	},
+	template: '<roles />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
new file mode 100644
index 0000000000..7d8aa18708
--- /dev/null
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import security from './security.vue';
+const meta = {
+	title: 'pages/settings/security',
+	component: security,
+};
+export const Default = {
+	components: {
+		security,
+	},
+	template: '<security />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
new file mode 100644
index 0000000000..1e47a2c37c
--- /dev/null
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import sounds_sound from './sounds.sound.vue';
+const meta = {
+	title: 'pages/settings/sounds.sound',
+	component: sounds_sound,
+};
+export const Default = {
+	components: {
+		sounds_sound,
+	},
+	template: '<sounds.sound />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
new file mode 100644
index 0000000000..1be4c325ca
--- /dev/null
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import sounds from './sounds.vue';
+const meta = {
+	title: 'pages/settings/sounds',
+	component: sounds,
+};
+export const Default = {
+	components: {
+		sounds,
+	},
+	template: '<sounds />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
new file mode 100644
index 0000000000..0f9e159fee
--- /dev/null
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbar_statusbar from './statusbar.statusbar.vue';
+const meta = {
+	title: 'pages/settings/statusbar.statusbar',
+	component: statusbar_statusbar,
+};
+export const Default = {
+	components: {
+		statusbar_statusbar,
+	},
+	template: '<statusbar.statusbar />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
new file mode 100644
index 0000000000..40b8a468e0
--- /dev/null
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbar from './statusbar.vue';
+const meta = {
+	title: 'pages/settings/statusbar',
+	component: statusbar,
+};
+export const Default = {
+	components: {
+		statusbar,
+	},
+	template: '<statusbar />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
new file mode 100644
index 0000000000..8762c63536
--- /dev/null
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import theme_install from './theme.install.vue';
+const meta = {
+	title: 'pages/settings/theme.install',
+	component: theme_install,
+};
+export const Default = {
+	components: {
+		theme_install,
+	},
+	template: '<theme.install />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
new file mode 100644
index 0000000000..65659036ab
--- /dev/null
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import theme_manage from './theme.manage.vue';
+const meta = {
+	title: 'pages/settings/theme.manage',
+	component: theme_manage,
+};
+export const Default = {
+	components: {
+		theme_manage,
+	},
+	template: '<theme.manage />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
new file mode 100644
index 0000000000..9a8e9a9dd0
--- /dev/null
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import theme from './theme.vue';
+const meta = {
+	title: 'pages/settings/theme',
+	component: theme,
+};
+export const Default = {
+	components: {
+		theme,
+	},
+	template: '<theme />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
new file mode 100644
index 0000000000..0d584b77d2
--- /dev/null
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import webhook_edit from './webhook.edit.vue';
+const meta = {
+	title: 'pages/settings/webhook.edit',
+	component: webhook_edit,
+};
+export const Default = {
+	components: {
+		webhook_edit,
+	},
+	template: '<webhook.edit />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
new file mode 100644
index 0000000000..483e64cbfa
--- /dev/null
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import webhook_new from './webhook.new.vue';
+const meta = {
+	title: 'pages/settings/webhook.new',
+	component: webhook_new,
+};
+export const Default = {
+	components: {
+		webhook_new,
+	},
+	template: '<webhook.new />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
new file mode 100644
index 0000000000..644b50985a
--- /dev/null
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import webhook from './webhook.vue';
+const meta = {
+	title: 'pages/settings/webhook',
+	component: webhook,
+};
+export const Default = {
+	components: {
+		webhook,
+	},
+	template: '<webhook />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
new file mode 100644
index 0000000000..26fc2edd94
--- /dev/null
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import word_mute from './word-mute.vue';
+const meta = {
+	title: 'pages/settings/word-mute',
+	component: word_mute,
+};
+export const Default = {
+	components: {
+		word_mute,
+	},
+	template: '<word-mute />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
new file mode 100644
index 0000000000..529d1373c1
--- /dev/null
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import share from './share.vue';
+const meta = {
+	title: 'pages/share',
+	component: share,
+};
+export const Default = {
+	components: {
+		share,
+	},
+	template: '<share />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
new file mode 100644
index 0000000000..2af4fa8801
--- /dev/null
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import signup_complete from './signup-complete.vue';
+const meta = {
+	title: 'pages/signup-complete',
+	component: signup_complete,
+};
+export const Default = {
+	components: {
+		signup_complete,
+	},
+	template: '<signup-complete />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
new file mode 100644
index 0000000000..6ea6912ae0
--- /dev/null
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import tag from './tag.vue';
+const meta = {
+	title: 'pages/tag',
+	component: tag,
+};
+export const Default = {
+	components: {
+		tag,
+	},
+	template: '<tag />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
new file mode 100644
index 0000000000..9f71a22d21
--- /dev/null
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import theme_editor from './theme-editor.vue';
+const meta = {
+	title: 'pages/theme-editor',
+	component: theme_editor,
+};
+export const Default = {
+	components: {
+		theme_editor,
+	},
+	template: '<theme-editor />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
new file mode 100644
index 0000000000..2bef61f61d
--- /dev/null
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import timeline from './timeline.vue';
+const meta = {
+	title: 'pages/timeline',
+	component: timeline,
+};
+export const Default = {
+	components: {
+		timeline,
+	},
+	template: '<timeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
new file mode 100644
index 0000000000..7c8f5caaaf
--- /dev/null
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import timeline_tutorial from './timeline.tutorial.vue';
+const meta = {
+	title: 'pages/timeline.tutorial',
+	component: timeline_tutorial,
+};
+export const Default = {
+	components: {
+		timeline_tutorial,
+	},
+	template: '<timeline.tutorial />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
new file mode 100644
index 0000000000..79c6ecd18d
--- /dev/null
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import user_info from './user-info.vue';
+const meta = {
+	title: 'pages/user-info',
+	component: user_info,
+};
+export const Default = {
+	components: {
+		user_info,
+	},
+	template: '<user-info />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
new file mode 100644
index 0000000000..89cc0f6978
--- /dev/null
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import user_list_timeline from './user-list-timeline.vue';
+const meta = {
+	title: 'pages/user-list-timeline',
+	component: user_list_timeline,
+};
+export const Default = {
+	components: {
+		user_list_timeline,
+	},
+	template: '<user-list-timeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
new file mode 100644
index 0000000000..4aa1cb2e89
--- /dev/null
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import user_tag from './user-tag.vue';
+const meta = {
+	title: 'pages/user-tag',
+	component: user_tag,
+};
+export const Default = {
+	components: {
+		user_tag,
+	},
+	template: '<user-tag />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
new file mode 100644
index 0000000000..796a7e7bd2
--- /dev/null
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import achievements from './achievements.vue';
+const meta = {
+	title: 'pages/user/achievements',
+	component: achievements,
+};
+export const Default = {
+	components: {
+		achievements,
+	},
+	template: '<achievements />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
new file mode 100644
index 0000000000..ee472fd466
--- /dev/null
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import activity_following from './activity.following.vue';
+const meta = {
+	title: 'pages/user/activity.following',
+	component: activity_following,
+};
+export const Default = {
+	components: {
+		activity_following,
+	},
+	template: '<activity.following />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
new file mode 100644
index 0000000000..13ffbe9b57
--- /dev/null
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import activity_heatmap from './activity.heatmap.vue';
+const meta = {
+	title: 'pages/user/activity.heatmap',
+	component: activity_heatmap,
+};
+export const Default = {
+	components: {
+		activity_heatmap,
+	},
+	template: '<activity.heatmap />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
new file mode 100644
index 0000000000..5a4dde42e5
--- /dev/null
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import activity_notes from './activity.notes.vue';
+const meta = {
+	title: 'pages/user/activity.notes',
+	component: activity_notes,
+};
+export const Default = {
+	components: {
+		activity_notes,
+	},
+	template: '<activity.notes />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
new file mode 100644
index 0000000000..c74d62ce2b
--- /dev/null
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import activity_pv from './activity.pv.vue';
+const meta = {
+	title: 'pages/user/activity.pv',
+	component: activity_pv,
+};
+export const Default = {
+	components: {
+		activity_pv,
+	},
+	template: '<activity.pv />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
new file mode 100644
index 0000000000..e457e406c7
--- /dev/null
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import activity from './activity.vue';
+const meta = {
+	title: 'pages/user/activity',
+	component: activity,
+};
+export const Default = {
+	components: {
+		activity,
+	},
+	template: '<activity />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
new file mode 100644
index 0000000000..78cc1d08e2
--- /dev/null
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import clips from './clips.vue';
+const meta = {
+	title: 'pages/user/clips',
+	component: clips,
+};
+export const Default = {
+	components: {
+		clips,
+	},
+	template: '<clips />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
new file mode 100644
index 0000000000..48cfbe9cad
--- /dev/null
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import follow_list from './follow-list.vue';
+const meta = {
+	title: 'pages/user/follow-list',
+	component: follow_list,
+};
+export const Default = {
+	components: {
+		follow_list,
+	},
+	template: '<follow-list />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
new file mode 100644
index 0000000000..2e320bcf54
--- /dev/null
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import followers from './followers.vue';
+const meta = {
+	title: 'pages/user/followers',
+	component: followers,
+};
+export const Default = {
+	components: {
+		followers,
+	},
+	template: '<followers />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
new file mode 100644
index 0000000000..28cc1a5a9b
--- /dev/null
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import following from './following.vue';
+const meta = {
+	title: 'pages/user/following',
+	component: following,
+};
+export const Default = {
+	components: {
+		following,
+	},
+	template: '<following />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
new file mode 100644
index 0000000000..a245283b62
--- /dev/null
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import gallery from './gallery.vue';
+const meta = {
+	title: 'pages/user/gallery',
+	component: gallery,
+};
+export const Default = {
+	components: {
+		gallery,
+	},
+	template: '<gallery />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
new file mode 100644
index 0000000000..b960a69230
--- /dev/null
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import home from './home.vue';
+const meta = {
+	title: 'pages/user/home',
+	component: home,
+};
+export const Default = {
+	components: {
+		home,
+	},
+	template: '<home />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
new file mode 100644
index 0000000000..7426040d5b
--- /dev/null
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index_activity from './index.activity.vue';
+const meta = {
+	title: 'pages/user/index.activity',
+	component: index_activity,
+};
+export const Default = {
+	components: {
+		index_activity,
+	},
+	template: '<index.activity />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
new file mode 100644
index 0000000000..26debd437d
--- /dev/null
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index_photos from './index.photos.vue';
+const meta = {
+	title: 'pages/user/index.photos',
+	component: index_photos,
+};
+export const Default = {
+	components: {
+		index_photos,
+	},
+	template: '<index.photos />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
new file mode 100644
index 0000000000..e08cb6d6c0
--- /dev/null
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'pages/user/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
new file mode 100644
index 0000000000..580f98f183
--- /dev/null
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index_timeline from './index.timeline.vue';
+const meta = {
+	title: 'pages/user/index.timeline',
+	component: index_timeline,
+};
+export const Default = {
+	components: {
+		index_timeline,
+	},
+	template: '<index.timeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
new file mode 100644
index 0000000000..68bc0f6475
--- /dev/null
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import pages from './pages.vue';
+const meta = {
+	title: 'pages/user/pages',
+	component: pages,
+};
+export const Default = {
+	components: {
+		pages,
+	},
+	template: '<pages />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
new file mode 100644
index 0000000000..0528e98b58
--- /dev/null
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import reactions from './reactions.vue';
+const meta = {
+	title: 'pages/user/reactions',
+	component: reactions,
+};
+export const Default = {
+	components: {
+		reactions,
+	},
+	template: '<reactions />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
new file mode 100644
index 0000000000..41b134bba6
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome_entrance_a from './welcome.entrance.a.vue';
+const meta = {
+	title: 'pages/welcome.entrance.a',
+	component: welcome_entrance_a,
+};
+export const Default = {
+	components: {
+		welcome_entrance_a,
+	},
+	template: '<welcome.entrance.a />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
new file mode 100644
index 0000000000..9a8fbe5420
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome_entrance_b from './welcome.entrance.b.vue';
+const meta = {
+	title: 'pages/welcome.entrance.b',
+	component: welcome_entrance_b,
+};
+export const Default = {
+	components: {
+		welcome_entrance_b,
+	},
+	template: '<welcome.entrance.b />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
new file mode 100644
index 0000000000..fb54919cd6
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome_entrance_c from './welcome.entrance.c.vue';
+const meta = {
+	title: 'pages/welcome.entrance.c',
+	component: welcome_entrance_c,
+};
+export const Default = {
+	components: {
+		welcome_entrance_c,
+	},
+	template: '<welcome.entrance.c />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
new file mode 100644
index 0000000000..5e50f1670c
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome_setup from './welcome.setup.vue';
+const meta = {
+	title: 'pages/welcome.setup',
+	component: welcome_setup,
+};
+export const Default = {
+	components: {
+		welcome_setup,
+	},
+	template: '<welcome.setup />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
new file mode 100644
index 0000000000..3001f95705
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome from './welcome.vue';
+const meta = {
+	title: 'pages/welcome',
+	component: welcome,
+};
+export const Default = {
+	components: {
+		welcome,
+	},
+	template: '<welcome />',
+};
+export default meta;
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
new file mode 100644
index 0000000000..b9ec527a7b
--- /dev/null
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import welcome_timeline from './welcome.timeline.vue';
+const meta = {
+	title: 'pages/welcome.timeline',
+	component: welcome_timeline,
+};
+export const Default = {
+	components: {
+		welcome_timeline,
+	},
+	template: '<welcome.timeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
new file mode 100644
index 0000000000..97d91f978c
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import common from './common.vue';
+const meta = {
+	title: 'ui/_common_/common',
+	component: common,
+};
+export const Default = {
+	components: {
+		common,
+	},
+	template: '<common />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
new file mode 100644
index 0000000000..722b1fb7b4
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import navbar_for_mobile from './navbar-for-mobile.vue';
+const meta = {
+	title: 'ui/_common_/navbar-for-mobile',
+	component: navbar_for_mobile,
+};
+export const Default = {
+	components: {
+		navbar_for_mobile,
+	},
+	template: '<navbar-for-mobile />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
new file mode 100644
index 0000000000..a04c1831e5
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import navbar from './navbar.vue';
+const meta = {
+	title: 'ui/_common_/navbar',
+	component: navbar,
+};
+export const Default = {
+	components: {
+		navbar,
+	},
+	template: '<navbar />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
new file mode 100644
index 0000000000..f77b1786b9
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import notification from './notification.vue';
+const meta = {
+	title: 'ui/_common_/notification',
+	component: notification,
+};
+export const Default = {
+	components: {
+		notification,
+	},
+	template: '<notification />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
new file mode 100644
index 0000000000..c918bcf0a3
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbar_federation from './statusbar-federation.vue';
+const meta = {
+	title: 'ui/_common_/statusbar-federation',
+	component: statusbar_federation,
+};
+export const Default = {
+	components: {
+		statusbar_federation,
+	},
+	template: '<statusbar-federation />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
new file mode 100644
index 0000000000..5366e645e7
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbar_rss from './statusbar-rss.vue';
+const meta = {
+	title: 'ui/_common_/statusbar-rss',
+	component: statusbar_rss,
+};
+export const Default = {
+	components: {
+		statusbar_rss,
+	},
+	template: '<statusbar-rss />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
new file mode 100644
index 0000000000..e3fe7370d1
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbar_user_list from './statusbar-user-list.vue';
+const meta = {
+	title: 'ui/_common_/statusbar-user-list',
+	component: statusbar_user_list,
+};
+export const Default = {
+	components: {
+		statusbar_user_list,
+	},
+	template: '<statusbar-user-list />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
new file mode 100644
index 0000000000..8a0e0f21c1
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import statusbars from './statusbars.vue';
+const meta = {
+	title: 'ui/_common_/statusbars',
+	component: statusbars,
+};
+export const Default = {
+	components: {
+		statusbars,
+	},
+	template: '<statusbars />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
new file mode 100644
index 0000000000..e1dec78486
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import stream_indicator from './stream-indicator.vue';
+const meta = {
+	title: 'ui/_common_/stream-indicator',
+	component: stream_indicator,
+};
+export const Default = {
+	components: {
+		stream_indicator,
+	},
+	template: '<stream-indicator />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
new file mode 100644
index 0000000000..351a918cfa
--- /dev/null
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import upload from './upload.vue';
+const meta = {
+	title: 'ui/_common_/upload',
+	component: upload,
+};
+export const Default = {
+	components: {
+		upload,
+	},
+	template: '<upload />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
new file mode 100644
index 0000000000..7e3e6f9006
--- /dev/null
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import classic_header from './classic.header.vue';
+const meta = {
+	title: 'ui/classic.header',
+	component: classic_header,
+};
+export const Default = {
+	components: {
+		classic_header,
+	},
+	template: '<classic.header />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
new file mode 100644
index 0000000000..479dfb7396
--- /dev/null
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import classic_sidebar from './classic.sidebar.vue';
+const meta = {
+	title: 'ui/classic.sidebar',
+	component: classic_sidebar,
+};
+export const Default = {
+	components: {
+		classic_sidebar,
+	},
+	template: '<classic.sidebar />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
new file mode 100644
index 0000000000..46de825774
--- /dev/null
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import classic from './classic.vue';
+const meta = {
+	title: 'ui/classic',
+	component: classic,
+};
+export const Default = {
+	components: {
+		classic,
+	},
+	template: '<classic />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
new file mode 100644
index 0000000000..f1444b4e89
--- /dev/null
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import deck from './deck.vue';
+const meta = {
+	title: 'ui/deck',
+	component: deck,
+};
+export const Default = {
+	components: {
+		deck,
+	},
+	template: '<deck />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
new file mode 100644
index 0000000000..02d469cd5e
--- /dev/null
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import antenna_column from './antenna-column.vue';
+const meta = {
+	title: 'ui/deck/antenna-column',
+	component: antenna_column,
+};
+export const Default = {
+	components: {
+		antenna_column,
+	},
+	template: '<antenna-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
new file mode 100644
index 0000000000..8cef29f1d7
--- /dev/null
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import channel_column from './channel-column.vue';
+const meta = {
+	title: 'ui/deck/channel-column',
+	component: channel_column,
+};
+export const Default = {
+	components: {
+		channel_column,
+	},
+	template: '<channel-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
new file mode 100644
index 0000000000..f374d8adaf
--- /dev/null
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import column_core from './column-core.vue';
+const meta = {
+	title: 'ui/deck/column-core',
+	component: column_core,
+};
+export const Default = {
+	components: {
+		column_core,
+	},
+	template: '<column-core />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
new file mode 100644
index 0000000000..1903485402
--- /dev/null
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import column from './column.vue';
+const meta = {
+	title: 'ui/deck/column',
+	component: column,
+};
+export const Default = {
+	components: {
+		column,
+	},
+	template: '<column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
new file mode 100644
index 0000000000..b90fdef443
--- /dev/null
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import direct_column from './direct-column.vue';
+const meta = {
+	title: 'ui/deck/direct-column',
+	component: direct_column,
+};
+export const Default = {
+	components: {
+		direct_column,
+	},
+	template: '<direct-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
new file mode 100644
index 0000000000..f8874cae80
--- /dev/null
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import list_column from './list-column.vue';
+const meta = {
+	title: 'ui/deck/list-column',
+	component: list_column,
+};
+export const Default = {
+	components: {
+		list_column,
+	},
+	template: '<list-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
new file mode 100644
index 0000000000..0667fd8bfc
--- /dev/null
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import main_column from './main-column.vue';
+const meta = {
+	title: 'ui/deck/main-column',
+	component: main_column,
+};
+export const Default = {
+	components: {
+		main_column,
+	},
+	template: '<main-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
new file mode 100644
index 0000000000..3b44a28323
--- /dev/null
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import mentions_column from './mentions-column.vue';
+const meta = {
+	title: 'ui/deck/mentions-column',
+	component: mentions_column,
+};
+export const Default = {
+	components: {
+		mentions_column,
+	},
+	template: '<mentions-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
new file mode 100644
index 0000000000..07bb499e97
--- /dev/null
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import notifications_column from './notifications-column.vue';
+const meta = {
+	title: 'ui/deck/notifications-column',
+	component: notifications_column,
+};
+export const Default = {
+	components: {
+		notifications_column,
+	},
+	template: '<notifications-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
new file mode 100644
index 0000000000..44a03581e1
--- /dev/null
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import tl_column from './tl-column.vue';
+const meta = {
+	title: 'ui/deck/tl-column',
+	component: tl_column,
+};
+export const Default = {
+	components: {
+		tl_column,
+	},
+	template: '<tl-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
new file mode 100644
index 0000000000..8848e1fe5f
--- /dev/null
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import widgets_column from './widgets-column.vue';
+const meta = {
+	title: 'ui/deck/widgets-column',
+	component: widgets_column,
+};
+export const Default = {
+	components: {
+		widgets_column,
+	},
+	template: '<widgets-column />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
new file mode 100644
index 0000000000..6f9174c8af
--- /dev/null
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import universal from './universal.vue';
+const meta = {
+	title: 'ui/universal',
+	component: universal,
+};
+export const Default = {
+	components: {
+		universal,
+	},
+	template: '<universal />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
new file mode 100644
index 0000000000..4c024e5362
--- /dev/null
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import universal_widgets from './universal.widgets.vue';
+const meta = {
+	title: 'ui/universal.widgets',
+	component: universal_widgets,
+};
+export const Default = {
+	components: {
+		universal_widgets,
+	},
+	template: '<universal.widgets />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
new file mode 100644
index 0000000000..25fcdc2da8
--- /dev/null
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import visitor from './visitor.vue';
+const meta = {
+	title: 'ui/visitor',
+	component: visitor,
+};
+export const Default = {
+	components: {
+		visitor,
+	},
+	template: '<visitor />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
new file mode 100644
index 0000000000..0990441976
--- /dev/null
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import a from './a.vue';
+const meta = {
+	title: 'ui/visitor/a',
+	component: a,
+};
+export const Default = {
+	components: {
+		a,
+	},
+	template: '<a />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
new file mode 100644
index 0000000000..ff65dc0962
--- /dev/null
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import b from './b.vue';
+const meta = {
+	title: 'ui/visitor/b',
+	component: b,
+};
+export const Default = {
+	components: {
+		b,
+	},
+	template: '<b />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
new file mode 100644
index 0000000000..c233767351
--- /dev/null
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import header from './header.vue';
+const meta = {
+	title: 'ui/visitor/header',
+	component: header,
+};
+export const Default = {
+	components: {
+		header,
+	},
+	template: '<header />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
new file mode 100644
index 0000000000..d2e1b6a108
--- /dev/null
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import kanban from './kanban.vue';
+const meta = {
+	title: 'ui/visitor/kanban',
+	component: kanban,
+};
+export const Default = {
+	components: {
+		kanban,
+	},
+	template: '<kanban />',
+};
+export default meta;
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
new file mode 100644
index 0000000000..c3652b6bbb
--- /dev/null
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import zen from './zen.vue';
+const meta = {
+	title: 'ui/zen',
+	component: zen,
+};
+export const Default = {
+	components: {
+		zen,
+	},
+	template: '<zen />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
new file mode 100644
index 0000000000..fc25eab6d8
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetActivity_calendar from './WidgetActivity.calendar.vue';
+const meta = {
+	title: 'widgets/WidgetActivity.calendar',
+	component: WidgetActivity_calendar,
+};
+export const Default = {
+	components: {
+		WidgetActivity_calendar,
+	},
+	template: '<WidgetActivity.calendar />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
new file mode 100644
index 0000000000..2923613159
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetActivity_chart from './WidgetActivity.chart.vue';
+const meta = {
+	title: 'widgets/WidgetActivity.chart',
+	component: WidgetActivity_chart,
+};
+export const Default = {
+	components: {
+		WidgetActivity_chart,
+	},
+	template: '<WidgetActivity.chart />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
new file mode 100644
index 0000000000..b52fafab7b
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetActivity from './WidgetActivity.vue';
+const meta = {
+	title: 'widgets/WidgetActivity',
+	component: WidgetActivity,
+};
+export const Default = {
+	components: {
+		WidgetActivity,
+	},
+	template: '<WidgetActivity />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
new file mode 100644
index 0000000000..e7fc604865
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetAichan from './WidgetAichan.vue';
+const meta = {
+	title: 'widgets/WidgetAichan',
+	component: WidgetAichan,
+};
+export const Default = {
+	components: {
+		WidgetAichan,
+	},
+	template: '<WidgetAichan />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
new file mode 100644
index 0000000000..765e181f1b
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetAiscript from './WidgetAiscript.vue';
+const meta = {
+	title: 'widgets/WidgetAiscript',
+	component: WidgetAiscript,
+};
+export const Default = {
+	components: {
+		WidgetAiscript,
+	},
+	template: '<WidgetAiscript />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
new file mode 100644
index 0000000000..ecabb3ed4a
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetAiscriptApp from './WidgetAiscriptApp.vue';
+const meta = {
+	title: 'widgets/WidgetAiscriptApp',
+	component: WidgetAiscriptApp,
+};
+export const Default = {
+	components: {
+		WidgetAiscriptApp,
+	},
+	template: '<WidgetAiscriptApp />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
new file mode 100644
index 0000000000..c5ee3f9c66
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetButton from './WidgetButton.vue';
+const meta = {
+	title: 'widgets/WidgetButton',
+	component: WidgetButton,
+};
+export const Default = {
+	components: {
+		WidgetButton,
+	},
+	template: '<WidgetButton />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
new file mode 100644
index 0000000000..fa5e31cd26
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetCalendar from './WidgetCalendar.vue';
+const meta = {
+	title: 'widgets/WidgetCalendar',
+	component: WidgetCalendar,
+};
+export const Default = {
+	components: {
+		WidgetCalendar,
+	},
+	template: '<WidgetCalendar />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
new file mode 100644
index 0000000000..0f1622c691
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetClicker from './WidgetClicker.vue';
+const meta = {
+	title: 'widgets/WidgetClicker',
+	component: WidgetClicker,
+};
+export const Default = {
+	components: {
+		WidgetClicker,
+	},
+	template: '<WidgetClicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
new file mode 100644
index 0000000000..8dad29b5da
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetClock from './WidgetClock.vue';
+const meta = {
+	title: 'widgets/WidgetClock',
+	component: WidgetClock,
+};
+export const Default = {
+	components: {
+		WidgetClock,
+	},
+	template: '<WidgetClock />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
new file mode 100644
index 0000000000..1af1a5b511
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetDigitalClock from './WidgetDigitalClock.vue';
+const meta = {
+	title: 'widgets/WidgetDigitalClock',
+	component: WidgetDigitalClock,
+};
+export const Default = {
+	components: {
+		WidgetDigitalClock,
+	},
+	template: '<WidgetDigitalClock />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
new file mode 100644
index 0000000000..20cbfa93b7
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetFederation from './WidgetFederation.vue';
+const meta = {
+	title: 'widgets/WidgetFederation',
+	component: WidgetFederation,
+};
+export const Default = {
+	components: {
+		WidgetFederation,
+	},
+	template: '<WidgetFederation />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
new file mode 100644
index 0000000000..1e9acb7154
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetInstanceCloud from './WidgetInstanceCloud.vue';
+const meta = {
+	title: 'widgets/WidgetInstanceCloud',
+	component: WidgetInstanceCloud,
+};
+export const Default = {
+	components: {
+		WidgetInstanceCloud,
+	},
+	template: '<WidgetInstanceCloud />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
new file mode 100644
index 0000000000..e74d5f34e7
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetInstanceInfo from './WidgetInstanceInfo.vue';
+const meta = {
+	title: 'widgets/WidgetInstanceInfo',
+	component: WidgetInstanceInfo,
+};
+export const Default = {
+	components: {
+		WidgetInstanceInfo,
+	},
+	template: '<WidgetInstanceInfo />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
new file mode 100644
index 0000000000..256cf692ec
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetJobQueue from './WidgetJobQueue.vue';
+const meta = {
+	title: 'widgets/WidgetJobQueue',
+	component: WidgetJobQueue,
+};
+export const Default = {
+	components: {
+		WidgetJobQueue,
+	},
+	template: '<WidgetJobQueue />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
new file mode 100644
index 0000000000..bfe331ef19
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetMemo from './WidgetMemo.vue';
+const meta = {
+	title: 'widgets/WidgetMemo',
+	component: WidgetMemo,
+};
+export const Default = {
+	components: {
+		WidgetMemo,
+	},
+	template: '<WidgetMemo />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
new file mode 100644
index 0000000000..0399cbe361
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetNotifications from './WidgetNotifications.vue';
+const meta = {
+	title: 'widgets/WidgetNotifications',
+	component: WidgetNotifications,
+};
+export const Default = {
+	components: {
+		WidgetNotifications,
+	},
+	template: '<WidgetNotifications />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
new file mode 100644
index 0000000000..c7c8c53c25
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetOnlineUsers from './WidgetOnlineUsers.vue';
+const meta = {
+	title: 'widgets/WidgetOnlineUsers',
+	component: WidgetOnlineUsers,
+};
+export const Default = {
+	components: {
+		WidgetOnlineUsers,
+	},
+	template: '<WidgetOnlineUsers />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
new file mode 100644
index 0000000000..137a1bb807
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetPhotos from './WidgetPhotos.vue';
+const meta = {
+	title: 'widgets/WidgetPhotos',
+	component: WidgetPhotos,
+};
+export const Default = {
+	components: {
+		WidgetPhotos,
+	},
+	template: '<WidgetPhotos />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
new file mode 100644
index 0000000000..867902ec28
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetPostForm from './WidgetPostForm.vue';
+const meta = {
+	title: 'widgets/WidgetPostForm',
+	component: WidgetPostForm,
+};
+export const Default = {
+	components: {
+		WidgetPostForm,
+	},
+	template: '<WidgetPostForm />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
new file mode 100644
index 0000000000..b7391eaaa7
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetProfile from './WidgetProfile.vue';
+const meta = {
+	title: 'widgets/WidgetProfile',
+	component: WidgetProfile,
+};
+export const Default = {
+	components: {
+		WidgetProfile,
+	},
+	template: '<WidgetProfile />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
new file mode 100644
index 0000000000..79fed6d7c7
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetRss from './WidgetRss.vue';
+const meta = {
+	title: 'widgets/WidgetRss',
+	component: WidgetRss,
+};
+export const Default = {
+	components: {
+		WidgetRss,
+	},
+	template: '<WidgetRss />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
new file mode 100644
index 0000000000..27acb1b62d
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetRssTicker from './WidgetRssTicker.vue';
+const meta = {
+	title: 'widgets/WidgetRssTicker',
+	component: WidgetRssTicker,
+};
+export const Default = {
+	components: {
+		WidgetRssTicker,
+	},
+	template: '<WidgetRssTicker />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
new file mode 100644
index 0000000000..d138fd8d6b
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetSlideshow from './WidgetSlideshow.vue';
+const meta = {
+	title: 'widgets/WidgetSlideshow',
+	component: WidgetSlideshow,
+};
+export const Default = {
+	components: {
+		WidgetSlideshow,
+	},
+	template: '<WidgetSlideshow />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
new file mode 100644
index 0000000000..5124035e04
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetTimeline from './WidgetTimeline.vue';
+const meta = {
+	title: 'widgets/WidgetTimeline',
+	component: WidgetTimeline,
+};
+export const Default = {
+	components: {
+		WidgetTimeline,
+	},
+	template: '<WidgetTimeline />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
new file mode 100644
index 0000000000..a75e76e98e
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetTrends from './WidgetTrends.vue';
+const meta = {
+	title: 'widgets/WidgetTrends',
+	component: WidgetTrends,
+};
+export const Default = {
+	components: {
+		WidgetTrends,
+	},
+	template: '<WidgetTrends />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
new file mode 100644
index 0000000000..d6d05a6740
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetUnixClock from './WidgetUnixClock.vue';
+const meta = {
+	title: 'widgets/WidgetUnixClock',
+	component: WidgetUnixClock,
+};
+export const Default = {
+	components: {
+		WidgetUnixClock,
+	},
+	template: '<WidgetUnixClock />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
new file mode 100644
index 0000000000..8621060cda
--- /dev/null
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import WidgetUserList from './WidgetUserList.vue';
+const meta = {
+	title: 'widgets/WidgetUserList',
+	component: WidgetUserList,
+};
+export const Default = {
+	components: {
+		WidgetUserList,
+	},
+	template: '<WidgetUserList />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
new file mode 100644
index 0000000000..8150e38a0a
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import cpu_mem from './cpu-mem.vue';
+const meta = {
+	title: 'widgets/server-metric/cpu-mem',
+	component: cpu_mem,
+};
+export const Default = {
+	components: {
+		cpu_mem,
+	},
+	template: '<cpu-mem />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
new file mode 100644
index 0000000000..1afd2ce8e6
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import cpu from './cpu.vue';
+const meta = {
+	title: 'widgets/server-metric/cpu',
+	component: cpu,
+};
+export const Default = {
+	components: {
+		cpu,
+	},
+	template: '<cpu />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
new file mode 100644
index 0000000000..53042da755
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import disk from './disk.vue';
+const meta = {
+	title: 'widgets/server-metric/disk',
+	component: disk,
+};
+export const Default = {
+	components: {
+		disk,
+	},
+	template: '<disk />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
new file mode 100644
index 0000000000..28a0565f20
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import index from './index.vue';
+const meta = {
+	title: 'widgets/server-metric/index',
+	component: index,
+};
+export const Default = {
+	components: {
+		index,
+	},
+	template: '<index />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
new file mode 100644
index 0000000000..968b042fc0
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import mem from './mem.vue';
+const meta = {
+	title: 'widgets/server-metric/mem',
+	component: mem,
+};
+export const Default = {
+	components: {
+		mem,
+	},
+	template: '<mem />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
new file mode 100644
index 0000000000..e10b4b2baf
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import net from './net.vue';
+const meta = {
+	title: 'widgets/server-metric/net',
+	component: net,
+};
+export const Default = {
+	components: {
+		net,
+	},
+	template: '<net />',
+};
+export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
new file mode 100644
index 0000000000..eeab11e9f7
--- /dev/null
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -0,0 +1,13 @@
+import { Meta, Story } from '@storybook/vue3';
+import pie from './pie.vue';
+const meta = {
+	title: 'widgets/server-metric/pie',
+	component: pie,
+};
+export const Default = {
+	components: {
+		pie,
+	},
+	template: '<pie />',
+};
+export default meta;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f56f77dc97..98b347b7fa 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -398,10 +398,18 @@ importers:
       '@rollup/plugin-alias': 4.0.3
       '@rollup/plugin-json': 6.0.0
       '@rollup/pluginutils': 5.0.2
+      '@storybook/addon-essentials': ^7.0.0-rc.4
+      '@storybook/addon-interactions': ^7.0.0-rc.4
+      '@storybook/addon-links': ^7.0.0-rc.4
+      '@storybook/blocks': ^7.0.0-rc.4
+      '@storybook/testing-library': ^0.0.14-next.1
+      '@storybook/vue3': ^7.0.0-rc.4
+      '@storybook/vue3-vite': ^7.0.0-rc.4
       '@syuilo/aiscript': 0.13.1
       '@tabler/icons-webfont': 2.10.0
       '@testing-library/vue': ^6.6.1
       '@types/escape-regexp': 0.0.1
+      '@types/estree': ^1.0.0
       '@types/gulp': 4.0.10
       '@types/gulp-rename': 2.0.1
       '@types/matter-js': 0.18.2
@@ -420,6 +428,7 @@ importers:
       '@vitest/coverage-c8': ^0.29.2
       '@vue/compiler-sfc': 3.2.47
       '@vue/runtime-core': 3.2.47
+      astring: ^1.8.4
       autobind-decorator: 2.4.0
       autosize: 5.0.2
       blurhash: 2.0.5
@@ -451,9 +460,12 @@ importers:
       mfm-js: 0.23.3
       misskey-js: 0.0.15
       photoswipe: 5.3.6
+      prettier: ^2.8.4
       prismjs: 1.29.0
       punycode: 2.3.0
       querystring: 0.2.1
+      react: ^18.2.0
+      react-dom: ^18.2.0
       rndstr: 1.0.0
       rollup: 3.19.0
       s-age: 1.1.2
@@ -461,6 +473,7 @@ importers:
       sass: 1.58.3
       seedrandom: 3.0.5
       start-server-and-test: 2.0.0
+      storybook: ^7.0.0-rc.4
       strict-event-emitter-types: 2.0.0
       summaly: github:misskey-dev/summaly
       syuilo-password-strength: 0.0.1
@@ -544,8 +557,16 @@ importers:
       vue-prism-editor: 2.0.0-alpha.2_vue@3.2.47
       vuedraggable: 4.1.0_vue@3.2.47
     devDependencies:
+      '@storybook/addon-essentials': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-interactions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-links': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/testing-library': 0.0.14-next.1
+      '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
+      '@storybook/vue3-vite': 7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae
       '@testing-library/vue': 6.6.1_a2ihsjreowava2sm4iorpgwkom
       '@types/escape-regexp': 0.0.1
+      '@types/estree': 1.0.0
       '@types/gulp': 4.0.10
       '@types/gulp-rename': 2.0.1
       '@types/matter-js': 0.18.2
@@ -562,13 +583,18 @@ importers:
       '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
       '@vitest/coverage-c8': 0.29.2_vitest@0.29.2
       '@vue/runtime-core': 3.2.47
+      astring: 1.8.4
       cross-env: 7.0.3
       cypress: 12.7.0
       eslint: 8.35.0
       eslint-plugin-import: 2.27.5_uyiasnnzcqrxqkfvjklwnmwcha
       eslint-plugin-vue: 9.9.0_eslint@8.35.0
       happy-dom: 8.9.0
+      prettier: 2.8.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
       start-server-and-test: 2.0.0
+      storybook: 7.0.0-rc.4
       summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
       vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
       vitest-fetch-mock: 0.2.2_vitest@0.29.2
@@ -606,6 +632,13 @@ packages:
       '@jridgewell/trace-mapping': 0.3.17
     dev: true
 
+  /@aw-web-design/x-default-browser/1.4.88:
+    resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==}
+    hasBin: true
+    dependencies:
+      default-browser-id: 3.0.0
+    dev: true
+
   /@babel/code-frame/7.18.6:
     resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
     engines: {node: '>=6.9.0'}
@@ -641,15 +674,63 @@ packages:
       - supports-color
     dev: true
 
+  /@babel/core/7.21.3:
+    resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@ampproject/remapping': 2.2.0
+      '@babel/code-frame': 7.18.6
+      '@babel/generator': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helpers': 7.21.0
+      '@babel/parser': 7.21.3
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      convert-source-map: 1.9.0
+      debug: 4.3.4
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/generator/7.20.7:
     resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
       '@jridgewell/gen-mapping': 0.3.2
       jsesc: 2.5.2
     dev: true
 
+  /@babel/generator/7.21.3:
+    resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+      '@jridgewell/gen-mapping': 0.3.2
+      '@jridgewell/trace-mapping': 0.3.17
+      jsesc: 2.5.2
+    dev: true
+
+  /@babel/helper-annotate-as-pure/7.18.6:
+    resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
+    resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-explode-assignable-expression': 7.18.6
+      '@babel/types': 7.21.3
+    dev: true
+
   /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12:
     resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
     engines: {node: '>=6.9.0'}
@@ -664,31 +745,159 @@ packages:
       semver: 6.3.0
     dev: true
 
+  /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-validator-option': 7.18.6
+      browserslist: 4.21.4
+      lru-cache: 5.1.1
+      semver: 6.3.0
+    dev: true
+
+  /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-member-expression-to-functions': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/helper-split-export-declaration': 7.18.6
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-member-expression-to-functions': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/helper-split-export-declaration': 7.18.6
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      regexpu-core: 5.3.2
+    dev: true
+
+  /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      regexpu-core: 5.3.2
+    dev: true
+
+  /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
+    peerDependencies:
+      '@babel/core': ^7.4.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      debug: 4.3.4
+      lodash.debounce: 4.0.8
+      resolve: 1.22.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
+    peerDependencies:
+      '@babel/core': ^7.4.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      debug: 4.3.4
+      lodash.debounce: 4.0.8
+      resolve: 1.22.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/helper-environment-visitor/7.18.9:
     resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
     engines: {node: '>=6.9.0'}
     dev: true
 
+  /@babel/helper-explode-assignable-expression/7.18.6:
+    resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
   /@babel/helper-function-name/7.19.0:
     resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-function-name/7.21.0:
+    resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-hoist-variables/7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-member-expression-to-functions/7.21.0:
+    resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-module-imports/7.18.6:
     resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-module-transforms/7.20.11:
@@ -701,29 +910,103 @@ packages:
       '@babel/helper-split-export-declaration': 7.18.6
       '@babel/helper-validator-identifier': 7.19.1
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
 
+  /@babel/helper-module-transforms/7.21.2:
+    resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-simple-access': 7.20.2
+      '@babel/helper-split-export-declaration': 7.18.6
+      '@babel/helper-validator-identifier': 7.19.1
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-optimise-call-expression/7.18.6:
+    resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
   /@babel/helper-plugin-utils/7.20.2:
     resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
     engines: {node: '>=6.9.0'}
     dev: true
 
+  /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-wrap-function': 7.20.5
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-wrap-function': 7.20.5
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-replace-supers/7.20.7:
+    resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-member-expression-to-functions': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/helper-simple-access/7.20.2:
     resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-skip-transparent-expression-wrappers/7.20.0:
+    resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-split-export-declaration/7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-string-parser/7.19.4:
@@ -739,13 +1022,41 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
+  /@babel/helper-validator-option/7.21.0:
+    resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-wrap-function/7.20.5:
+    resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-function-name': 7.21.0
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/helpers/7.20.7:
     resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helpers/7.21.0:
+    resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -766,6 +1077,425 @@ packages:
     dependencies:
       '@babel/types': 7.20.7
 
+  /@babel/parser/7.21.3:
+    resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/types': 7.21.3
+
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.13.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.13.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.12.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.12.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.20.12
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
+    dev: true
+
+  /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12:
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
     peerDependencies:
@@ -775,6 +1505,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3:
+    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
     peerDependencies:
@@ -793,6 +1532,101 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3:
+    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12:
+    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12:
     resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
     peerDependencies:
@@ -811,6 +1645,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12:
     resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
     engines: {node: '>=6.9.0'}
@@ -830,6 +1673,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3:
+    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
     peerDependencies:
@@ -839,6 +1691,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12:
     resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
     peerDependencies:
@@ -848,6 +1709,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3:
+    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
     peerDependencies:
@@ -857,6 +1727,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
     peerDependencies:
@@ -866,6 +1745,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
     peerDependencies:
@@ -875,6 +1763,35 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12:
+    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12:
     resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
     engines: {node: '>=6.9.0'}
@@ -885,6 +1802,16 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12:
     resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
     engines: {node: '>=6.9.0'}
@@ -895,6 +1822,1010 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-classes/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-split-export-declaration': 7.18.6
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-split-export-declaration': 7.18.6
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/template': 7.20.7
+    dev: true
+
+  /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/template': 7.20.7
+    dev: true
+
+  /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12
+    dev: true
+
+  /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12:
+    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.3:
+    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-simple-access': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-simple-access': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12:
+    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-hoist-variables': 7.18.6
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-identifier': 7.19.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.3:
+    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-hoist-variables': 7.18.6
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-identifier': 7.19.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12:
+    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12:
+    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      regenerator-transform: 0.15.1
+    dev: true
+
+  /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      regenerator-transform: 0.15.1
+    dev: true
+
+  /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12:
+    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+    dev: true
+
+  /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.3:
+    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+    dev: true
+
+  /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12:
+    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3:
+    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12:
+    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3:
+    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/preset-env/7.20.2_@babel+core@7.20.12:
+    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.20.12
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.18.6
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12
+      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12
+      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12
+      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12
+      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12
+      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12
+      '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12
+      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12
+      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12
+      '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12
+      '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12
+      '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12
+      '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12
+      '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12
+      '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12
+      '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12
+      '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/preset-modules': 0.1.5_@babel+core@7.20.12
+      '@babel/types': 7.20.7
+      babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12
+      babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12
+      babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12
+      core-js-compat: 3.29.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/preset-env/7.20.2_@babel+core@7.21.3:
+    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.18.6
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3
+      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.3
+      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.3
+      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.3
+      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3
+      '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.3
+      '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.3
+      '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3
+      '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.3
+      '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.3
+      '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.3
+      '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.3
+      '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/preset-modules': 0.1.5_@babel+core@7.21.3
+      '@babel/types': 7.20.7
+      babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3
+      babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3
+      babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3
+      core-js-compat: 3.29.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/preset-flow/7.18.6_@babel+core@7.20.12:
+    resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.18.6
+      '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.20.12
+    dev: true
+
+  /@babel/preset-modules/0.1.5_@babel+core@7.20.12:
+    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12
+      '@babel/types': 7.21.3
+      esutils: 2.0.3
+    dev: true
+
+  /@babel/preset-modules/0.1.5_@babel+core@7.21.3:
+    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/types': 7.21.3
+      esutils: 2.0.3
+    dev: true
+
+  /@babel/preset-typescript/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/register/7.21.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      clone-deep: 4.0.1
+      find-cache-dir: 2.1.0
+      make-dir: 2.1.0
+      pirates: 4.0.5
+      source-map-support: 0.5.21
+    dev: true
+
+  /@babel/regjsgen/0.8.0:
+    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+    dev: true
+
   /@babel/runtime/7.20.7:
     resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==}
     engines: {node: '>=6.9.0'}
@@ -906,8 +2837,8 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.18.6
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/traverse/7.20.12:
@@ -915,13 +2846,31 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.20.7
+      '@babel/generator': 7.21.3
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-function-name': 7.19.0
       '@babel/helper-hoist-variables': 7.18.6
       '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
+      debug: 4.3.4
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/traverse/7.21.3:
+    resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.18.6
+      '@babel/generator': 7.21.3
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-hoist-variables': 7.18.6
+      '@babel/helper-split-export-declaration': 7.18.6
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       debug: 4.3.4
       globals: 11.12.0
     transitivePeerDependencies:
@@ -936,6 +2885,14 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
+  /@babel/types/7.21.3:
+    resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.19.4
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
   /@bcoe/v8-coverage/0.2.3:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: true
@@ -1118,6 +3075,19 @@ packages:
       universalify: 0.1.2
     dev: false
 
+  /@discoveryjs/json-ext/0.5.7:
+    resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+    engines: {node: '>=10.0.0'}
+    dev: true
+
+  /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@18.2.0:
+    resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==}
+    peerDependencies:
+      react: '>=16.8.0'
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /@esbuild/android-arm/0.16.17:
     resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
     engines: {node: '>=12'}
@@ -1333,6 +3303,10 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
+  /@fal-works/esbuild-plugin-global-externals/2.1.2:
+    resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
+    dev: true
+
   /@fastify/accept-negotiator/1.0.0:
     resolution: {integrity: sha512-4R/N2KfYeld7A5LGkai+iUFMahXcxxYbDp+XS2B1yuL3cdmZLJ9TlCnNzT3q5xFTqsYm0GPpinLUwfSwjcVjyA==}
     engines: {node: '>=14'}
@@ -1708,7 +3682,7 @@ packages:
     resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/types': 29.5.0
       '@jridgewell/trace-mapping': 0.3.17
       babel-plugin-istanbul: 6.1.1
@@ -1790,6 +3764,10 @@ packages:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
 
+  /@juggle/resize-observer/3.4.0:
+    resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+    dev: true
+
   /@kurkle/color/0.3.2:
     resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
     dev: false
@@ -1822,6 +3800,16 @@ packages:
     dev: false
     optional: true
 
+  /@mdx-js/react/2.3.0_react@18.2.0:
+    resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
+    peerDependencies:
+      react: '>=16'
+    dependencies:
+      '@types/mdx': 2.0.3
+      '@types/react': 18.0.28
+      react: 18.2.0
+    dev: true
+
   /@mole-inc/bin-wrapper/8.0.1:
     resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -1878,6 +3866,14 @@ packages:
     requiresBuild: true
     optional: true
 
+  /@ndelangen/get-tarball/3.0.7:
+    resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==}
+    dependencies:
+      gunzip-maybe: 1.4.2
+      pump: 3.0.0
+      tar-fs: 2.1.1
+    dev: true
+
   /@nestjs/common/9.3.9_mnr6j2del53muneqly5h4y27ai:
     resolution: {integrity: sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==}
     peerDependencies:
@@ -2153,6 +4149,869 @@ packages:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
 
+  /@storybook/addon-actions/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-PaiZYDd8dVtaqyOr0kFlBbzpXMVKL4saDwa1gNf1nGSP1yxeS5Iulah4aD8pevpO6MXxJrFWcwhg5295viK3HQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      dequal: 2.0.3
+      lodash: 4.17.21
+      polished: 4.2.2
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      react-inspector: 6.0.1_react@18.2.0
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      uuid-browser: 3.1.0
+    dev: true
+
+  /@storybook/addon-backgrounds/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-zq52R+SIFJtHLNuEnnNQAhSMMvFKHv+n4/UET4tBFB/B76GvWxLuHjfb0T8Yi7aTDAGR3XqBVU+xrjM96aIWqw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-controls/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-MwsBIiK5Af1TCWscEjmzWAuthcSHZLZMjv+fSxCUY7GBIyUcvq9/jSPW8qsC/zbxqAsMoHEwG4rbr7P+p/74ew==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      lodash: 4.17.21
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-docs/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-GlxzAoi3SR9vpc0PJE5EIratQ0O5OgVRJx032xawA+93gTFLL/qqK4UkcN4KJ4FIoRIQHMQ6PNbONvQR2NCEiQ==}
+    peerDependencies:
+      '@storybook/mdx1-csf': '>=1.0.0-0'
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      '@storybook/mdx1-csf':
+        optional: true
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12
+      '@jest/transform': 29.5.0
+      '@mdx-js/react': 2.3.0_react@18.2.0
+      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/csf-plugin': 7.0.0-rc.4
+      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/postinstall': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/react-dom-shim': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      fs-extra: 11.1.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      remark-external-links: 8.0.0
+      remark-slug: 6.1.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-essentials/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-KCVo/x4Ayi8qo0pev0wnLr+z69EH6Ohfx3VuYGMLw5KxYrvqs9qlemKNqiG2u8eZs5iEef9GYfax90uvPPNuEQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/addon-actions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-backgrounds': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-controls': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-docs': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-highlight': 7.0.0-rc.4
+      '@storybook/addon-measure': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-outline': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-toolbars': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-viewport': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - '@storybook/mdx1-csf'
+      - supports-color
+    dev: true
+
+  /@storybook/addon-highlight/7.0.0-rc.4:
+    resolution: {integrity: sha512-Yh9L0Jwr40gpe8yr5bhTge+kxcf2Jev6uf1Un+t6z3MPMDbBaV3cCnnbE03lEuB973Om94Br1ADgfK6n2WHhwQ==}
+    dependencies:
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.4
+    dev: true
+
+  /@storybook/addon-interactions/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-3kuOAIfuAHbrlaqd60u72aJp+RqZoGUJwBxujqac2gVu4kwr2MbTk/Z2/h76WgiRnMcm1VYubkqyi1wKhrkAcg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/instrumenter': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      jest-mock: 27.5.1
+      polished: 4.2.2
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-links/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-jhi2DolZ1YAzuAqqz4aH1IglDcYDDO17LExcVSezIT+5FEndg6pxqkiU4FKstecsM4ItXc0LT2jzg9WEGJYBzQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/router': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-measure/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-mud2eCpyEquq0gncfdCe9S+6pRNUkrpxcedsphtDHDMIDDxzpRMo48isbdYuA5wiwwpHHXZ1DAll1h/ghrN9jg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/addon-outline/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-ru7RtvwaS7TlkbISVM0lFIc9RwD9tBucS7oVLi2R3Fc/II/48ByMEynS8v7knrTF9ElfYan5M0PeHEzhAzDgdQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-toolbars/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-FjDFk0K/KHzXHOEezSJyayYoVPcisfItppqt7xOOEG5E4igwIM6PB2t/1FNjdOe77atplVwPAqEB4amnNyVI6Q==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/addon-viewport/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-yc48Ve2tZAc8OSivb+elMVdj/5TTDvOPl41jJMKPxjdmxVV0959Gp/xcvyTOOHV+7voDePmDB7I1TOrO1XEqEA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      memoizerific: 1.11.3
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/blocks/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-sG3VMGqri2sf1ye4rV6phdyTV3vqfL6jxh2RZJ3H1XrdezaVwQVQcdqdxJDgqBJ+/i7N5kFqByUG+WCTV2cSmA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/docs-tools': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      '@types/lodash': 4.14.191
+      color-convert: 2.0.1
+      dequal: 2.0.3
+      lodash: 4.17.21
+      markdown-to-jsx: 7.2.0_react@18.2.0
+      memoizerific: 1.11.3
+      polished: 4.2.2
+      react: 18.2.0
+      react-colorful: 5.6.1_biqbaboplfbrettd7655fr4n2y
+      react-dom: 18.2.0_react@18.2.0
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/builder-manager/7.0.0-rc.4:
+    resolution: {integrity: sha512-n9Dphfddll8VqtYOr/zZP3ojJgYV7yWriKtRL+MMnq8qvwENKqvWR56aK5vZNQ3PVFxm3JpWs5/FsORgev943g==}
+    dependencies:
+      '@fal-works/esbuild-plugin-global-externals': 2.1.2
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/manager': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@types/ejs': 3.1.2
+      '@types/find-cache-dir': 3.2.1
+      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15_esbuild@0.16.17
+      browser-assert: 1.2.1
+      ejs: 3.1.8
+      esbuild: 0.16.17
+      esbuild-plugin-alias: 0.2.1
+      express: 4.18.2
+      find-cache-dir: 3.3.2
+      fs-extra: 11.1.0
+      process: 0.11.10
+      slash: 3.0.0
+      util: 0.12.5
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/builder-vite/7.0.0-rc.4_vwvfc4ezh6jlf6pa67auy3eulu:
+    resolution: {integrity: sha512-Acj3WAQ5+p1XgiTfPUCQ4NkI8yZrSAKHaHinxb2TFMoV4xcp+Hkr6WFRRPI1sMtxLmAx8svcEjloyZSsudP1Eg==}
+    peerDependencies:
+      '@preact/preset-vite': '*'
+      '@storybook/mdx1-csf': '>=1.0.0-next.1'
+      typescript: '>= 4.3.x'
+      vite: ^3.0.0 || ^4.0.0
+      vite-plugin-glimmerx: '*'
+    peerDependenciesMeta:
+      '@preact/preset-vite':
+        optional: true
+      '@storybook/mdx1-csf':
+        optional: true
+      typescript:
+        optional: true
+      vite-plugin-glimmerx:
+        optional: true
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.4
+      '@storybook/channel-websocket': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/csf-plugin': 7.0.0-rc.4
+      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/preview': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      browser-assert: 1.2.1
+      es-module-lexer: 0.9.3
+      express: 4.18.2
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2_glob@8.1.0
+      magic-string: 0.27.0
+      rollup: 3.19.0
+      slash: 3.0.0
+      typescript: 4.9.5
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/channel-postmessage/7.0.0-rc.4:
+    resolution: {integrity: sha512-ZWuwZfYfwpvCx+WgoTEweFmQ6cb4B3HUT6eNcFMeXgMRw1q9roa8CDCCw+4TJ2jDkvUrdkYTHYmcgn0QpAxpAg==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      qs: 6.10.4
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channel-websocket/7.0.0-rc.4:
+    resolution: {integrity: sha512-N4lHRx7dAC+y0dtYeopeXRPUsHrjNz1WnUB0qUyZ5p6bUvcJq7McV9aCFBbp+M0nzx+l4IppX9QuRIId0eR7sA==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channels/7.0.0-rc.4:
+    resolution: {integrity: sha512-N4jQPVsT+Qd3dYRFKL2jN1Ik1XXYxCO2e6hoxir55VvAd5WCCnwNWmglEWRoIMNwmJQAbyFRCxbYzAKctsqaVw==}
+    dev: true
+
+  /@storybook/cli/7.0.0-rc.4:
+    resolution: {integrity: sha512-T4GCpvJvPUqDgpYdb7DLeYbc3E5OZigLNRQfSQIrQ8yQ4gtJmG18GNqzUIuMkVQRUjwr67ZqMi7ui+3PSEucvA==}
+    hasBin: true
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/preset-env': 7.20.2_@babel+core@7.20.12
+      '@ndelangen/get-tarball': 3.0.7
+      '@storybook/codemod': 7.0.0-rc.4
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/core-server': 7.0.0-rc.4
+      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/telemetry': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      '@types/semver': 7.3.13
+      boxen: 5.1.2
+      chalk: 4.1.2
+      commander: 6.2.1
+      cross-spawn: 7.0.3
+      detect-indent: 6.1.0
+      envinfo: 7.8.1
+      execa: 5.1.1
+      express: 4.18.2
+      find-up: 5.0.0
+      fs-extra: 11.1.0
+      get-npm-tarball-url: 2.0.3
+      get-port: 5.1.1
+      giget: 1.1.2
+      globby: 11.1.0
+      jscodeshift: 0.14.0_@babel+preset-env@7.20.2
+      leven: 3.1.0
+      prettier: 2.8.4
+      prompts: 2.4.2
+      puppeteer-core: 2.1.1
+      read-pkg-up: 7.0.1
+      semver: 7.3.8
+      shelljs: 0.8.5
+      simple-update-notifier: 1.1.0
+      strip-json-comments: 3.1.1
+      tempy: 1.0.1
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /@storybook/client-logger/7.0.0-rc.4:
+    resolution: {integrity: sha512-z5w2odssAavqSPtkX0kjPwCpvSYNGDnC3pqKw0nHrZ4fb59SKdjdcoCbcUntDa0kAid9g29CT+eNTtPcci8/XA==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/codemod/7.0.0-rc.4:
+    resolution: {integrity: sha512-PGoHnQfOrpRCXwaOsPoszfvzxERAm9bR4nxfF5pOUnsXYRrI4hPqZRpgw3kDRXTl43mSA+eI7fkGg4y9GeTElw==}
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
+      '@babel/types': 7.21.3
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      cross-spawn: 7.0.3
+      globby: 11.1.0
+      jscodeshift: 0.14.0_@babel+preset-env@7.20.2
+      lodash: 4.17.21
+      prettier: 2.8.4
+      recast: 0.23.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/components/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-UpjRmEeIZZ1YA1qhWF2Ngybd0Pxk3XIqHsKLAXUnJatjKUa+FYXaqSb5DqsQ+OQhRXM01dqeBdzOnCFm/jWCWg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/core-client/7.0.0-rc.4:
+    resolution: {integrity: sha512-Np5QTcyKtiTczuM/5Ad3dC47n7xoSoonzh1wYWp747QGkzRfh1XCQ1sbALxCY8lB/4rnFsnehHQCoQsjreWelg==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+    dev: true
+
+  /@storybook/core-common/7.0.0-rc.4:
+    resolution: {integrity: sha512-cvJgs23iHmD24u5sjb3a5n5oCRzwx0BzI7v0mt+Lfc6r2gyXgw2Hf4tM5DchNKba0GEjvPU/ERuOWnXUETGqSw==}
+    dependencies:
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      '@types/node': 16.18.16
+      '@types/pretty-hrtime': 1.0.1
+      chalk: 4.1.2
+      esbuild: 0.16.17
+      esbuild-register: 3.4.2_esbuild@0.16.17
+      file-system-cache: 2.0.2
+      find-up: 5.0.0
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2_glob@8.1.0
+      handlebars: 4.7.7
+      lazy-universal-dotenv: 4.0.0
+      picomatch: 2.3.1
+      pkg-dir: 5.0.0
+      pretty-hrtime: 1.0.3
+      resolve-from: 5.0.0
+      slash: 3.0.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/core-events/7.0.0-rc.4:
+    resolution: {integrity: sha512-OgEhQSaOMcSx0y5tjGg5Mscyyk9BayhqiJeuDK3kVZfKtFO3LErwhV4TrNjuDnYFfwUgiPa2ikTAB6K6JAn6yg==}
+    dev: true
+
+  /@storybook/core-server/7.0.0-rc.4:
+    resolution: {integrity: sha512-IgVy57+W43W7duhfMDXaCS7rFp8A9SfhAQSFSycD3RPP1ontnNUquOygV6AHOz04rs2NZtMNlYW6RHiwVcmSJA==}
+    dependencies:
+      '@aw-web-design/x-default-browser': 1.4.88
+      '@discoveryjs/json-ext': 0.5.7
+      '@storybook/builder-manager': 7.0.0-rc.4
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/docs-mdx': 0.0.1-next.6
+      '@storybook/global': 5.0.0
+      '@storybook/manager': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/telemetry': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      '@types/detect-port': 1.3.2
+      '@types/node': 16.18.16
+      '@types/node-fetch': 2.6.2
+      '@types/pretty-hrtime': 1.0.1
+      '@types/semver': 7.3.13
+      better-opn: 2.1.1
+      boxen: 5.1.2
+      chalk: 4.1.2
+      cli-table3: 0.6.3
+      compression: 1.7.4
+      detect-port: 1.5.1
+      express: 4.18.2
+      fs-extra: 11.1.0
+      globby: 11.1.0
+      ip: 2.0.0
+      lodash: 4.17.21
+      node-fetch: 2.6.7
+      open: 8.4.2
+      pretty-hrtime: 1.0.3
+      prompts: 2.4.2
+      read-pkg-up: 7.0.1
+      semver: 7.3.8
+      serve-favicon: 2.5.0
+      slash: 3.0.0
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+      watchpack: 2.4.0
+      ws: 8.12.1
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /@storybook/csf-plugin/7.0.0-rc.4:
+    resolution: {integrity: sha512-VotA5oREPC+YYEXj7RvdAsHaMySo3DRy1/eYdO+WQvj4PusxvdAEpdo5/CYEVQW7+5p4+zxt6YjL52Ar/bkdvA==}
+    dependencies:
+      '@storybook/csf-tools': 7.0.0-rc.4
+      unplugin: 0.10.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/csf-tools/7.0.0-rc.4:
+    resolution: {integrity: sha512-swMulWdpSObtcfDo3flmry50oLAPbGLn0YBU+tJhhxerng5RVDy5MPG0A5ZKd6hD1jvyTA1pkhbwzCrklbNhSw==}
+    dependencies:
+      '@babel/generator': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/types': 7.0.0-rc.4
+      fs-extra: 11.1.0
+      recast: 0.23.1
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/csf/0.0.2-next.10:
+    resolution: {integrity: sha512-m2PFgBP/xRIF85VrDhvesn9ktaD2pN3VUjvMqkAL/cINp/3qXsCyI81uw7N5VEOkQAbWrY2FcydnvEPDEdE8fA==}
+    dependencies:
+      type-fest: 2.19.0
+    dev: true
+
+  /@storybook/docs-mdx/0.0.1-next.6:
+    resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
+    dev: true
+
+  /@storybook/docs-tools/7.0.0-rc.4:
+    resolution: {integrity: sha512-x5wUPc9b4YfVfroqV9nUhRcavdM6AVChWZIKYHxGAbx82rA7YBXwDuA6GD7JdXtzjzvh2IPQHzLFu4jnAAHMkQ==}
+    dependencies:
+      '@babel/core': 7.20.12
+      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      '@types/doctrine': 0.0.3
+      doctrine: 3.0.0
+      lodash: 4.17.21
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/global/5.0.0:
+    resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+    dev: true
+
+  /@storybook/instrumenter/7.0.0-rc.4:
+    resolution: {integrity: sha512-6/k+cUFsDCJnnXsPGZ03qB11F8ND1G4UQtIs2pn8yWR8mo7EaDnugFLFAhjtYRaLAhg4hKhVspJcXGf/R+gxnQ==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.4
+    dev: true
+
+  /@storybook/manager-api/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-0yT6zgalv8ZockGfzQML9vnOlDHKmNBjNFouVDgUMMQ2KiwdJOUG8IUqZoUtxqMO+nceIk4eTqUKK/QUqdUZVg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.4
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/manager/7.0.0-rc.4:
+    resolution: {integrity: sha512-prLxXsCevw5ghWKvS7uAYdMOJ2Cr7jxE4Z1h9OSpVVombiUaU9iFPpNCsfY40VNVi9WuEHSTWH7QV/g453nGiw==}
+    dev: true
+
+  /@storybook/mdx2-csf/1.0.0-next.6:
+    resolution: {integrity: sha512-m6plojocU/rmrqWd26yvm8D+oHZPZ6PtSSFmZIgpNDEPVmc8s4fBD6LXOAB5MiPI5f8KLUr2HVhOMZ97o5pDTw==}
+    dev: true
+
+  /@storybook/node-logger/7.0.0-rc.4:
+    resolution: {integrity: sha512-ogzs+X9ZsCk8+R5NPZhO3DCZQEUKLhfDcOLlJnYVMKbNR9L6EwXsTaE2RQZYaANIhEt2FK3vH0iihVysaEfOuQ==}
+    dependencies:
+      '@types/npmlog': 4.1.4
+      chalk: 4.1.2
+      npmlog: 5.0.1
+      pretty-hrtime: 1.0.3
+    dev: true
+
+  /@storybook/postinstall/7.0.0-rc.4:
+    resolution: {integrity: sha512-SzLUnhl2GOzV0rvyTx1eOYRQ+bR3uXWbRXCroP+m2PFqNvXHh3lvEHM1XCxdxMDtY/VRQyEuRfirKizkSaGf3Q==}
+    dev: true
+
+  /@storybook/preview-api/7.0.0-rc.4:
+    resolution: {integrity: sha512-J4PMV+UlWDqzV2Cj6PfxkUZ8315m3Mcbx1JPjKFcIGJ3HaK0mXye1brBMPG7gefjx9239QVw6w0zmw9ahLWmVw==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.4
+      '@storybook/channels': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0-rc.4
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.10.4
+      slash: 3.0.0
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/preview/7.0.0-rc.4:
+    resolution: {integrity: sha512-JFncdC74tPwN6uGpSm4HwhV/FW6VqHHlLLcvpudpgngb7CZ6udkT9XAEW90JeViXNUM4tPn00HRc/adguZwCTA==}
+    dev: true
+
+  /@storybook/react-dom-shim/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-KWFdCBCdtO+p+HcO4evgUjAid+k2HfHAoBOQsaQ1vJTjHBWJLGFinpRdkAqzZp+p+KQzKIPgXeYAPZlqo5hSzw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/router/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-J/7/NTFjBndHDN7a5bQWpkczOJUxRKVbqW4ggNh9di9Z9wb4IuQlz572eo4bM/kWfRPo0zR/tgBT8F/zVWd6JA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      memoizerific: 1.11.3
+      qs: 6.10.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/telemetry/7.0.0-rc.4:
+    resolution: {integrity: sha512-+bxoxJd3P2Yph7wMK5HrSW9NiHNpCIse02KTN1/HCjI9/tyAdv5pyWp9t4ElzD8eefu9dgqdSbiWkT8PIxuf0Q==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/core-common': 7.0.0-rc.4
+      chalk: 4.1.2
+      detect-package-manager: 2.0.1
+      fetch-retry: 5.0.4
+      fs-extra: 11.1.0
+      isomorphic-unfetch: 3.1.0
+      nanoid: 3.3.4
+      read-pkg-up: 7.0.1
+    transitivePeerDependencies:
+      - encoding
+      - supports-color
+    dev: true
+
+  /@storybook/testing-library/0.0.14-next.1:
+    resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/instrumenter': 7.0.0-rc.4
+      '@testing-library/dom': 8.20.0
+      '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/theming/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-Bmg2M3ifuZANr2dWUU8Wf1I/aBrp4qIJod3A8YgjFUm6QFUa5wStq0Aue6T5KocKRLbZbQpfmwhnob1PoGjoog==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
+      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/types/7.0.0-rc.4:
+    resolution: {integrity: sha512-Zu9weYGeKrnaWgVk2vtPU/MpUp6EtM27ehqJVK3x0I/sa8/MXCc411ErblALLVrMX6KhFjUFU98gHlvo8ietIA==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.4
+      '@types/babel__core': 7.1.20
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/vue3-vite/7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae:
+    resolution: {integrity: sha512-QqvQfJoK6mgaGBD64cqrqJmATPFKbTlPOe8yX2PNpvEvYH85R9Jq/hwk02Kc4ZVhYnBH4t7lGaSaZYtnwogH7w==}
+    engines: {node: ^14.18 || >=16}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      vite: ^3.0.0 || ^4.0.0
+    dependencies:
+      '@storybook/builder-vite': 7.0.0-rc.4_vwvfc4ezh6jlf6pa67auy3eulu
+      '@storybook/core-server': 7.0.0-rc.4
+      '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
+      '@vitejs/plugin-vue': 4.0.0_vite@4.1.4+vue@3.2.47
+      magic-string: 0.27.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vue-docgen-api: 4.64.1_vue@3.2.47
+    transitivePeerDependencies:
+      - '@preact/preset-vite'
+      - '@storybook/mdx1-csf'
+      - bufferutil
+      - encoding
+      - supports-color
+      - typescript
+      - utf-8-validate
+      - vite-plugin-glimmerx
+      - vue
+    dev: true
+
+  /@storybook/vue3/7.0.0-rc.4_vue@3.2.47:
+    resolution: {integrity: sha512-zn4WACjUGTTlNn2W5Y+2Gcdey1hgqy+XUbE233XRN8ompOFUK01udF6Fx9lo0UJ5HxBjTZsMYx3KoovtaY5TDg==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      vue: ^3.0.0
+    dependencies:
+      '@storybook/core-client': 7.0.0-rc.4
+      '@storybook/docs-tools': 7.0.0-rc.4
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/types': 7.0.0-rc.4
+      ts-dedent: 2.2.0
+      type-fest: 2.19.0
+      vue: 3.2.47
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@swc/cli/0.1.62_2u6773zfichz7q5gjuzddfwg7q:
     resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
     engines: {node: '>= 12.13'}
@@ -2456,6 +5315,16 @@ packages:
       pretty-format: 27.5.1
     dev: true
 
+  /@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm:
+    resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==}
+    engines: {node: '>=10', npm: '>=6'}
+    peerDependencies:
+      '@testing-library/dom': '>=7.21.4'
+    dependencies:
+      '@babel/runtime': 7.20.7
+      '@testing-library/dom': 8.20.0
+    dev: true
+
   /@testing-library/vue/6.6.1_a2ihsjreowava2sm4iorpgwkom:
     resolution: {integrity: sha512-vpyBPrHzKTwEGS7ehUC8/IXgnqTBEMk6jd52Gouf51arG2jUorPhmkbsxUwJOyxz6L0gj2ZcmWnznG1OJcTCDQ==}
     engines: {node: '>=12'}
@@ -2498,8 +5367,8 @@ packages:
   /@types/babel__core/7.1.20:
     resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       '@types/babel__generator': 7.6.4
       '@types/babel__template': 7.4.1
       '@types/babel__traverse': 7.18.3
@@ -2508,26 +5377,33 @@ packages:
   /@types/babel__generator/7.6.4:
     resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/babel__template/7.4.1:
     resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/babel__traverse/7.18.3:
     resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/bcryptjs/2.4.2:
     resolution: {integrity: sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==}
     dev: true
 
+  /@types/body-parser/1.19.2:
+    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+    dependencies:
+      '@types/connect': 3.4.35
+      '@types/node': 18.15.0
+    dev: true
+
   /@types/bull/4.10.0:
     resolution: {integrity: sha512-RkYW8K2H3J76HT6twmHYbzJ0GtLDDotpLP9ah9gtiA7zfF6peBH1l5fEiK0oeIZ3/642M7Jcb9sPmor8Vf4w6g==}
     dependencies:
@@ -2571,25 +5447,63 @@ packages:
     resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==}
     dev: true
 
+  /@types/connect/3.4.35:
+    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
+    dependencies:
+      '@types/node': 18.15.0
+    dev: true
+
   /@types/content-disposition/0.5.5:
     resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
     dev: true
 
+  /@types/detect-port/1.3.2:
+    resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==}
+    dev: true
+
   /@types/disposable-email-domains/1.0.2:
     resolution: {integrity: sha512-SDKwyYTjk3y5aZBxxc38yRecpJPjsqn57STz1bNxYYlv4k11bBe7QB8w4llXDTmQXKT1mFvgGmJv+8Zdu3YmJw==}
     dev: false
 
+  /@types/doctrine/0.0.3:
+    resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==}
+    dev: true
+
+  /@types/ejs/3.1.2:
+    resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==}
+    dev: true
+
   /@types/escape-regexp/0.0.1:
     resolution: {integrity: sha512-ogj/ZTIdeFkiuxDwawYuZSIgC6suFGgBeZPr6Xs5lHEcvIXTjXGtH+/n8f1XhZhespaUwJ5LIGRICPji972FLw==}
     dev: true
 
   /@types/estree/1.0.0:
     resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
-    dev: false
 
   /@types/expect/1.20.4:
     resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==}
 
+  /@types/express-serve-static-core/4.17.33:
+    resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
+    dependencies:
+      '@types/node': 18.15.0
+      '@types/qs': 6.9.7
+      '@types/range-parser': 1.2.4
+    dev: true
+
+  /@types/express/4.17.17:
+    resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
+    dependencies:
+      '@types/body-parser': 1.19.2
+      '@types/express-serve-static-core': 4.17.33
+      '@types/qs': 6.9.7
+      '@types/serve-static': 1.15.1
+    dev: true
+
+  /@types/find-cache-dir/3.2.1:
+    resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==}
+    dev: true
+
   /@types/fluent-ffmpeg/2.1.21:
     resolution: {integrity: sha512-+n3dy/Tegt6n+YwGZUiGq6i8Jrnt8+MoyPiW1L6J5EWUl7GSt18a/VyReecfCsvTTNBXNMIKOMHDstiQM8nJLA==}
     dependencies:
@@ -2704,6 +5618,10 @@ packages:
       '@types/node': 18.15.0
     dev: false
 
+  /@types/lodash/4.14.191:
+    resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
+    dev: true
+
   /@types/long/4.0.2:
     resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
     dev: false
@@ -2712,10 +5630,18 @@ packages:
     resolution: {integrity: sha512-W9UC9DOPNBRTUocqqPZmzX3cbHmlZBI9jLn6SuxZz0n5QrPk382Ig3hbBWHqYU8TRUmTCJJhuanXeyMTavF7Mg==}
     dev: true
 
+  /@types/mdx/2.0.3:
+    resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
+    dev: true
+
   /@types/mime-types/2.1.1:
     resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==}
     dev: true
 
+  /@types/mime/3.0.1:
+    resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
+    dev: true
+
   /@types/minimatch/5.1.2:
     resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
     dev: true
@@ -2725,7 +5651,6 @@ packages:
     dependencies:
       '@types/node': 18.15.0
       form-data: 3.0.1
-    dev: false
 
   /@types/node-fetch/3.0.3:
     resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==}
@@ -2737,6 +5662,10 @@ packages:
     resolution: {integrity: sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==}
     dev: true
 
+  /@types/node/16.18.16:
+    resolution: {integrity: sha512-ZOzvDRWp8dCVBmgnkIqYCArgdFOO9YzocZp8Ra25N/RStKiWvMOXHMz+GjSeVNe5TstaTmTWPucGJkDw0XXJWA==}
+    dev: true
+
   /@types/node/18.11.18:
     resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
 
@@ -2749,6 +5678,14 @@ packages:
       '@types/node': 18.15.0
     dev: true
 
+  /@types/normalize-package-data/2.4.1:
+    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+    dev: true
+
+  /@types/npmlog/4.1.4:
+    resolution: {integrity: sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==}
+    dev: true
+
   /@types/oauth/0.9.1:
     resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==}
     dependencies:
@@ -2775,6 +5712,14 @@ packages:
     resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==}
     dev: true
 
+  /@types/pretty-hrtime/1.0.1:
+    resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==}
+    dev: true
+
+  /@types/prop-types/15.7.5:
+    resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+    dev: true
+
   /@types/pug/2.0.6:
     resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
     dev: true
@@ -2789,14 +5734,30 @@ packages:
       '@types/node': 18.15.0
     dev: true
 
+  /@types/qs/6.9.7:
+    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
+    dev: true
+
   /@types/random-seed/0.3.3:
     resolution: {integrity: sha512-kHsCbIRHNXJo6EN5W8EA5b4i1hdT6jaZke5crBPLUcLqaLdZ0QBq8QVMbafHzhjFF83Cl9qlee2dChD18d/kPg==}
     dev: true
 
+  /@types/range-parser/1.2.4:
+    resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
+    dev: true
+
   /@types/ratelimiter/3.4.4:
     resolution: {integrity: sha512-GSMb93iSA8KKFDgVL2Wzs/kqrHMJcU8xhLdwI5omoACcj7K18SacklLtY1C4G02HC5drd6GygtsIaGbfxJSe0g==}
     dev: true
 
+  /@types/react/18.0.28:
+    resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
+    dependencies:
+      '@types/prop-types': 15.7.5
+      '@types/scheduler': 0.16.2
+      csstype: 3.1.1
+    dev: true
+
   /@types/redis/4.0.11:
     resolution: {integrity: sha512-bI+gth8La8Wg/QCR1+V1fhrL9+LZUSWfcqpOj2Kc80ZQ4ffbdL173vQd5wovmoV9i071FU9oP2g6etLuEwb6Rg==}
     dependencies:
@@ -2819,6 +5780,10 @@ packages:
       htmlparser2: 8.0.1
     dev: true
 
+  /@types/scheduler/0.16.2:
+    resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
+    dev: true
+
   /@types/seedrandom/2.4.30:
     resolution: {integrity: sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==}
     dev: false
@@ -2831,6 +5796,13 @@ packages:
     resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
     dev: true
 
+  /@types/serve-static/1.15.1:
+    resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
+    dependencies:
+      '@types/mime': 3.0.1
+      '@types/node': 18.15.0
+    dev: true
+
   /@types/serviceworker/0.0.62:
     resolution: {integrity: sha512-DVoelQjcHaPshqyg0duirwuuaZ/teG4E3QGiQXbzso8akd12VRtgGYCao8viRFXHVLJOlo/Elh1nfbMsRQJXVA==}
     dev: true
@@ -2885,6 +5857,10 @@ packages:
       async-done: 1.3.2
     dev: true
 
+  /@types/unist/2.0.6:
+    resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
+    dev: true
+
   /@types/unzipper/0.10.5:
     resolution: {integrity: sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==}
     dependencies:
@@ -3162,7 +6138,6 @@ packages:
     dependencies:
       vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
       vue: 3.2.47
-    dev: false
 
   /@vitest/coverage-c8/0.29.2_vitest@0.29.2:
     resolution: {integrity: sha512-NmD3WirQCeQjjKfHu4iEq18DVOBFbLn9TKVdMpyi5YW2EtnS+K22/WE+9/wRrepOhyeTxuEFgxUVkCAE1GhbnQ==}
@@ -3343,6 +6318,16 @@ packages:
     resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==}
     dev: false
 
+  /@yarnpkg/esbuild-plugin-pnp/3.0.0-rc.15_esbuild@0.16.17:
+    resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
+    engines: {node: '>=14.15.0'}
+    peerDependencies:
+      esbuild: '>=0.10.0'
+    dependencies:
+      esbuild: 0.16.17
+      tslib: 2.5.0
+    dev: true
+
   /abab/2.0.6:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     dev: false
@@ -3367,7 +6352,6 @@ packages:
     dependencies:
       mime-types: 2.1.35
       negotiator: 0.6.3
-    dev: false
 
   /acorn-globals/7.0.1:
     resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
@@ -3392,18 +6376,23 @@ packages:
     resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
     engines: {node: '>=0.4.0'}
     hasBin: true
-    dev: false
 
   /acorn/8.8.1:
     resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
     engines: {node: '>=0.4.0'}
     hasBin: true
+    dev: false
 
   /acorn/8.8.2:
     resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
+  /address/1.2.2:
+    resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
+    engines: {node: '>= 10.0.0'}
+    dev: true
+
   /adm-zip/0.5.10:
     resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==}
     engines: {node: '>=6.0'}
@@ -3418,6 +6407,11 @@ packages:
     dev: false
     optional: true
 
+  /agent-base/5.1.1:
+    resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==}
+    engines: {node: '>= 6.0.0'}
+    dev: true
+
   /agent-base/6.0.2:
     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
     engines: {node: '>= 6.0.0'}
@@ -3425,7 +6419,6 @@ packages:
       debug: 4.3.4
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
   /agentkeepalive/4.2.1:
     resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==}
@@ -3477,6 +6470,12 @@ packages:
     resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==}
     dev: false
 
+  /ansi-align/3.0.1:
+    resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+    dependencies:
+      string-width: 4.2.3
+    dev: true
+
   /ansi-colors/1.1.0:
     resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
     engines: {node: '>=0.10.0'}
@@ -3570,6 +6569,10 @@ packages:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
+  /app-root-dir/1.0.2:
+    resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==}
+    dev: true
+
   /app-root-path/3.1.0:
     resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==}
     engines: {node: '>= 6.0.0'}
@@ -3584,7 +6587,6 @@ packages:
 
   /aproba/2.0.0:
     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-    dev: false
 
   /arch/2.2.0:
     resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
@@ -3628,8 +6630,6 @@ packages:
     dependencies:
       delegates: 1.0.0
       readable-stream: 3.6.0
-    dev: false
-    optional: true
 
   /are-we-there-yet/3.0.1:
     resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
@@ -3691,6 +6691,10 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /array-flatten/1.1.1:
+    resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+    dev: true
+
   /array-includes/3.1.6:
     resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
     engines: {node: '>= 0.4'}
@@ -3762,7 +6766,6 @@ packages:
 
   /asap/2.0.6:
     resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
-    dev: false
 
   /asn1.js/5.4.1:
     resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
@@ -3780,12 +6783,20 @@ packages:
 
   /assert-never/1.2.1:
     resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
-    dev: false
 
   /assert-plus/1.0.0:
     resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
     engines: {node: '>=0.8'}
 
+  /assert/2.0.0:
+    resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
+    dependencies:
+      es6-object-assign: 1.1.0
+      is-nan: 1.3.2
+      object-is: 1.1.5
+      util: 0.12.5
+    dev: true
+
   /assertion-error/1.1.0:
     resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
     dev: true
@@ -3795,11 +6806,37 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /ast-types/0.14.2:
+    resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
+  /ast-types/0.15.2:
+    resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
+  /ast-types/0.16.1:
+    resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
   /astral-regex/2.0.0:
     resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
     engines: {node: '>=8'}
     dev: true
 
+  /astring/1.8.4:
+    resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==}
+    hasBin: true
+    dev: true
+
   /async-done/1.3.2:
     resolution: {integrity: sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==}
     engines: {node: '>= 0.10'}
@@ -3809,6 +6846,10 @@ packages:
       process-nextick-args: 2.0.1
       stream-exhaust: 1.0.2
 
+  /async-limiter/1.0.1:
+    resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
+    dev: true
+
   /async-settle/1.0.0:
     resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==}
     engines: {node: '>= 0.10'}
@@ -3902,7 +6943,7 @@ packages:
   /axios/0.24.0:
     resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==}
     dependencies:
-      follow-redirects: 1.15.2_debug@4.3.4
+      follow-redirects: 1.15.2
     transitivePeerDependencies:
       - debug
     dev: false
@@ -3916,6 +6957,14 @@ packages:
       - debug
     dev: true
 
+  /babel-core/7.0.0-bridge.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+    dev: true
+
   /babel-jest/29.5.0_@babel+core@7.20.12:
     resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3957,6 +7006,78 @@ packages:
       '@types/babel__traverse': 7.18.3
     dev: true
 
+  /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12:
+    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.20.12
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12:
+    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
+      core-js-compat: 3.29.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+      core-js-compat: 3.29.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12:
+    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3:
+    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12:
     resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
     peerDependencies:
@@ -3992,8 +7113,7 @@ packages:
     resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/types': 7.20.7
-    dev: false
+      '@babel/types': 7.21.3
 
   /bach/1.2.0:
     resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==}
@@ -4042,10 +7162,16 @@ packages:
     resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
     dev: false
 
+  /better-opn/2.1.1:
+    resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==}
+    engines: {node: '>8.0.0'}
+    dependencies:
+      open: 7.4.2
+    dev: true
+
   /big-integer/1.6.51:
     resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
     engines: {node: '>=0.6'}
-    dev: false
 
   /bin-check/4.1.0:
     resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
@@ -4094,7 +7220,6 @@ packages:
       buffer: 5.7.1
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: false
 
   /blob-util/2.0.2:
     resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
@@ -4116,9 +7241,50 @@ packages:
     resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
     dev: false
 
+  /body-parser/1.20.1:
+    resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
+    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+    dependencies:
+      bytes: 3.1.2
+      content-type: 1.0.5
+      debug: 2.6.9
+      depd: 2.0.0
+      destroy: 1.2.0
+      http-errors: 2.0.0
+      iconv-lite: 0.4.24
+      on-finished: 2.4.1
+      qs: 6.11.0
+      raw-body: 2.5.1
+      type-is: 1.6.18
+      unpipe: 1.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /boolbase/1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
+  /boxen/5.1.2:
+    resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-align: 3.0.1
+      camelcase: 6.3.0
+      chalk: 4.1.2
+      cli-boxes: 2.2.1
+      string-width: 4.2.3
+      type-fest: 0.20.2
+      widest-line: 3.1.0
+      wrap-ansi: 7.0.0
+    dev: true
+
+  /bplist-parser/0.2.0:
+    resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+    engines: {node: '>= 5.10.0'}
+    dependencies:
+      big-integer: 1.6.51
+    dev: true
+
   /brace-expansion/1.1.11:
     resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
     dependencies:
@@ -4164,6 +7330,16 @@ packages:
       unload: 2.4.1
     dev: false
 
+  /browser-assert/1.2.1:
+    resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
+    dev: true
+
+  /browserify-zlib/0.1.4:
+    resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
+    dependencies:
+      pako: 0.2.9
+    dev: true
+
   /browserslist/1.7.7:
     resolution: {integrity: sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==}
     deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
@@ -4184,6 +7360,17 @@ packages:
       update-browserslist-db: 1.0.10_browserslist@4.21.4
     dev: true
 
+  /browserslist/4.21.5:
+    resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: 1.0.30001468
+      electron-to-chromium: 1.4.284
+      node-releases: 2.0.8
+      update-browserslist-db: 1.0.10_browserslist@4.21.5
+    dev: true
+
   /bser/2.1.1:
     resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
     dependencies:
@@ -4271,6 +7458,16 @@ packages:
       streamsearch: 1.1.0
     dev: false
 
+  /bytes/3.0.0:
+    resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
+  /bytes/3.1.2:
+    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /c8/7.13.0:
     resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==}
     engines: {node: '>=10.12.0'}
@@ -4422,6 +7619,10 @@ packages:
     resolution: {integrity: sha512-jUo8svymO8+Mkj3qbUbVjR8zv8LUGpGkUM/jKvc9SO2BvjCI980dp9fQbf/dyLs6RascPzgR4nhAKFA4OHeSaA==}
     dev: true
 
+  /caniuse-lite/1.0.30001468:
+    resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==}
+    dev: true
+
   /canonicalize/1.0.8:
     resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==}
     dev: false
@@ -4505,7 +7706,6 @@ packages:
     resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
     dependencies:
       is-regex: 1.1.4
-    dev: false
 
   /chart.js/4.2.1:
     resolution: {integrity: sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==}
@@ -4596,12 +7796,10 @@ packages:
 
   /chownr/1.1.4:
     resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-    dev: false
 
   /chownr/2.0.0:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
     engines: {node: '>=10'}
-    dev: false
 
   /ci-info/3.7.1:
     resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
@@ -4633,6 +7831,11 @@ packages:
     resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
     engines: {node: '>=6'}
 
+  /cli-boxes/2.2.1:
+    resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
+    engines: {node: '>=6'}
+    dev: true
+
   /cli-cursor/3.1.0:
     resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
     engines: {node: '>=8'}
@@ -4713,6 +7916,15 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /clone-deep/4.0.1:
+    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      is-plain-object: 2.0.4
+      kind-of: 6.0.3
+      shallow-clone: 3.0.1
+    dev: true
+
   /clone-response/1.0.3:
     resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
     dependencies:
@@ -4820,7 +8032,6 @@ packages:
 
   /color-support/1.1.3:
     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
-    dev: false
 
   /color/0.11.4:
     resolution: {integrity: sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==}
@@ -4869,6 +8080,11 @@ packages:
     engines: {node: '>= 6'}
     dev: true
 
+  /commander/6.2.1:
+    resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+    engines: {node: '>= 6'}
+    dev: true
+
   /commander/7.2.0:
     resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
     engines: {node: '>= 10'}
@@ -4884,6 +8100,10 @@ packages:
     engines: {node: '>=4.0.0'}
     dev: true
 
+  /commondir/1.0.1:
+    resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+    dev: true
+
   /compare-versions/5.0.1:
     resolution: {integrity: sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==}
     dev: false
@@ -4902,6 +8122,28 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
+  /compressible/2.0.18:
+    resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+    engines: {node: '>= 0.6'}
+    dependencies:
+      mime-db: 1.52.0
+    dev: true
+
+  /compression/1.7.4:
+    resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      accepts: 1.3.8
+      bytes: 3.0.0
+      compressible: 2.0.18
+      debug: 2.6.9
+      on-headers: 1.0.2
+      safe-buffer: 5.1.2
+      vary: 1.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /concat-map/0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
@@ -4913,7 +8155,6 @@ packages:
       inherits: 2.0.4
       readable-stream: 2.3.7
       typedarray: 0.0.6
-    dev: false
 
   /config-chain/1.1.13:
     resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
@@ -4928,21 +8169,23 @@ packages:
 
   /console-control-strings/1.1.0:
     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-    dev: false
 
   /constantinople/4.0.1:
     resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
-    dev: false
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
 
   /content-disposition/0.5.4:
     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
     engines: {node: '>= 0.6'}
     dependencies:
       safe-buffer: 5.2.1
-    dev: false
+
+  /content-type/1.0.5:
+    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+    engines: {node: '>= 0.6'}
+    dev: true
 
   /convert-source-map/1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
@@ -4951,10 +8194,13 @@ packages:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
     dev: true
 
+  /cookie-signature/1.0.6:
+    resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+    dev: true
+
   /cookie/0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
-    dev: false
 
   /copy-descriptor/0.1.1:
     resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
@@ -4968,6 +8214,12 @@ packages:
       is-plain-object: 5.0.0
     dev: false
 
+  /core-js-compat/3.29.1:
+    resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==}
+    dependencies:
+      browserslist: 4.21.5
+    dev: true
+
   /core-js/3.27.1:
     resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==}
     requiresBuild: true
@@ -4978,7 +8230,6 @@ packages:
 
   /core-util-is/1.0.3:
     resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-    dev: false
 
   /crc-32/1.2.2:
     resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
@@ -5037,6 +8288,11 @@ packages:
       shebang-command: 2.0.0
       which: 2.0.2
 
+  /crypto-random-string/2.0.0:
+    resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+    engines: {node: '>=8'}
+    dev: true
+
   /css-color-names/0.0.4:
     resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==}
     dev: false
@@ -5127,7 +8383,6 @@ packages:
 
   /csstype/3.1.1:
     resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
-    dev: false
 
   /custom-event-polyfill/1.0.7:
     resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
@@ -5241,7 +8496,6 @@ packages:
         optional: true
     dependencies:
       ms: 2.0.0
-    dev: false
 
   /debug/3.2.7:
     resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -5385,6 +8639,14 @@ packages:
     resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
     engines: {node: '>=0.10.0'}
 
+  /default-browser-id/3.0.0:
+    resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+    engines: {node: '>=12'}
+    dependencies:
+      bplist-parser: 0.2.0
+      untildify: 4.0.0
+    dev: true
+
   /default-compare/1.0.0:
     resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==}
     engines: {node: '>=0.10.0'}
@@ -5401,6 +8663,11 @@ packages:
     resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
     engines: {node: '>=10'}
 
+  /define-lazy-prop/2.0.0:
+    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+    engines: {node: '>=8'}
+    dev: true
+
   /define-properties/1.1.4:
     resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
     engines: {node: '>= 0.4'}
@@ -5434,13 +8701,30 @@ packages:
     resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
     dev: false
 
+  /defu/6.1.2:
+    resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
+    dev: true
+
+  /del/6.1.1:
+    resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
+    engines: {node: '>=10'}
+    dependencies:
+      globby: 11.1.0
+      graceful-fs: 4.2.10
+      is-glob: 4.0.3
+      is-path-cwd: 2.2.0
+      is-path-inside: 3.0.3
+      p-map: 4.0.0
+      rimraf: 3.0.2
+      slash: 3.0.0
+    dev: true
+
   /delayed-stream/1.0.0:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
 
   /delegates/1.0.0:
     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-    dev: false
 
   /denque/1.5.1:
     resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==}
@@ -5459,13 +8743,27 @@ packages:
   /depd/2.0.0:
     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
     engines: {node: '>= 0.8'}
-    dev: false
+
+  /dequal/2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /destroy/1.2.0:
+    resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+    dev: true
 
   /detect-file/1.0.0:
     resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /detect-indent/6.1.0:
+    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+    engines: {node: '>=8'}
+    dev: true
+
   /detect-libc/2.0.1:
     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
     engines: {node: '>=8'}
@@ -5476,6 +8774,23 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /detect-package-manager/2.0.1:
+    resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==}
+    engines: {node: '>=12'}
+    dependencies:
+      execa: 5.1.1
+    dev: true
+
+  /detect-port/1.5.1:
+    resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==}
+    hasBin: true
+    dependencies:
+      address: 1.2.2
+      debug: 4.3.4
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /diff-sequences/29.4.3:
     resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -5516,7 +8831,6 @@ packages:
 
   /doctypes/1.1.0:
     resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==}
-    dev: false
 
   /dom-accessibility-api/0.5.16:
     resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
@@ -5552,10 +8866,14 @@ packages:
       domelementtype: 2.3.0
       domhandler: 5.0.3
 
+  /dotenv-expand/10.0.0:
+    resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
+    engines: {node: '>=12'}
+    dev: true
+
   /dotenv/16.0.3:
     resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
     engines: {node: '>=12'}
-    dev: false
 
   /duplexer/0.1.2:
     resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
@@ -5574,7 +8892,6 @@ packages:
       inherits: 2.0.4
       readable-stream: 2.3.7
       stream-shift: 1.0.1
-    dev: false
 
   /each-props/1.3.2:
     resolution: {integrity: sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==}
@@ -5609,13 +8926,16 @@ packages:
       sigmund: 1.0.1
     dev: true
 
+  /ee-first/1.1.1:
+    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+    dev: true
+
   /ejs/3.1.8:
     resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
     engines: {node: '>=0.10.0'}
     hasBin: true
     dependencies:
       jake: 10.8.5
-    dev: false
 
   /electron-to-chromium/1.4.284:
     resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
@@ -5636,6 +8956,11 @@ packages:
     resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
     dev: false
 
+  /encodeurl/1.0.2:
+    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /encoding/0.1.13:
     resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
     requiresBuild: true
@@ -5669,6 +8994,12 @@ packages:
     engines: {node: '>=6'}
     dev: false
 
+  /envinfo/7.8.1:
+    resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
   /err-code/2.0.3:
     resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
     dev: false
@@ -5722,6 +9053,10 @@ packages:
       stop-iteration-iterator: 1.0.0
     dev: true
 
+  /es-module-lexer/0.9.3:
+    resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
+    dev: true
+
   /es-shim-unscopables/1.0.0:
     resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
     dependencies:
@@ -5755,6 +9090,10 @@ packages:
       es6-symbol: 3.1.3
     dev: false
 
+  /es6-object-assign/1.1.0:
+    resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
+    dev: true
+
   /es6-promise/4.2.8:
     resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
     dev: false
@@ -5927,6 +9266,21 @@ packages:
     dev: false
     optional: true
 
+  /esbuild-plugin-alias/0.2.1:
+    resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==}
+    dev: true
+
+  /esbuild-register/3.4.2_esbuild@0.16.17:
+    resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==}
+    peerDependencies:
+      esbuild: '>=0.12 <1'
+    dependencies:
+      debug: 4.3.4
+      esbuild: 0.16.17
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /esbuild-sunos-64/0.14.42:
     resolution: {integrity: sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==}
     engines: {node: '>=12'}
@@ -6025,7 +9379,6 @@ packages:
 
   /escape-html/1.0.3:
     resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-    dev: false
 
   /escape-regexp/0.0.1:
     resolution: {integrity: sha512-jVgdsYRa7RKxTT6MKNC3gdT+BF0Gfhpel19+HMRZJC2L0PufB0XOBuXBoXj29NKHwuktnAXd1Z1lyiH/8vOTpw==}
@@ -6411,6 +9764,11 @@ packages:
     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
     engines: {node: '>=0.10.0'}
 
+  /etag/1.8.1:
+    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /event-stream/3.3.4:
     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
     dependencies:
@@ -6567,6 +9925,45 @@ packages:
       jest-util: 29.5.0
     dev: true
 
+  /express/4.18.2:
+    resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
+    engines: {node: '>= 0.10.0'}
+    dependencies:
+      accepts: 1.3.8
+      array-flatten: 1.1.1
+      body-parser: 1.20.1
+      content-disposition: 0.5.4
+      content-type: 1.0.5
+      cookie: 0.5.0
+      cookie-signature: 1.0.6
+      debug: 2.6.9
+      depd: 2.0.0
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      finalhandler: 1.2.0
+      fresh: 0.5.2
+      http-errors: 2.0.0
+      merge-descriptors: 1.0.1
+      methods: 1.1.2
+      on-finished: 2.4.1
+      parseurl: 1.3.3
+      path-to-regexp: 0.1.7
+      proxy-addr: 2.0.7
+      qs: 6.11.0
+      range-parser: 1.2.1
+      safe-buffer: 5.2.1
+      send: 0.18.0
+      serve-static: 1.15.0
+      setprototypeof: 1.2.0
+      statuses: 2.0.1
+      type-is: 1.6.18
+      utils-merge: 1.0.1
+      vary: 1.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /ext-list/2.2.2:
     resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
     engines: {node: '>=0.10.0'}
@@ -6622,6 +10019,18 @@ packages:
       - supports-color
     dev: false
 
+  /extract-zip/1.7.0:
+    resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==}
+    hasBin: true
+    dependencies:
+      concat-stream: 1.6.2
+      debug: 2.6.9
+      mkdirp: 0.5.6
+      yauzl: 2.10.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /extract-zip/2.0.1_supports-color@8.1.1:
     resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
     engines: {node: '>= 10.17.0'}
@@ -6774,6 +10183,10 @@ packages:
       node-domexception: 1.0.0
       web-streams-polyfill: 3.2.1
 
+  /fetch-retry/5.0.4:
+    resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==}
+    dev: true
+
   /figures/3.2.0:
     resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
     engines: {node: '>=8'}
@@ -6788,6 +10201,13 @@ packages:
       flat-cache: 3.0.4
     dev: true
 
+  /file-system-cache/2.0.2:
+    resolution: {integrity: sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA==}
+    dependencies:
+      fs-extra: 11.1.0
+      ramda: 0.28.0
+    dev: true
+
   /file-type/17.1.6:
     resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -6810,7 +10230,6 @@ packages:
     resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
     dependencies:
       minimatch: 5.1.2
-    dev: false
 
   /filename-reserved-regex/3.0.0:
     resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
@@ -6842,6 +10261,39 @@ packages:
     dependencies:
       to-regex-range: 5.0.1
 
+  /finalhandler/1.2.0:
+    resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      debug: 2.6.9
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      on-finished: 2.4.1
+      parseurl: 1.3.3
+      statuses: 2.0.1
+      unpipe: 1.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /find-cache-dir/2.1.0:
+    resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      commondir: 1.0.1
+      make-dir: 2.1.0
+      pkg-dir: 3.0.0
+    dev: true
+
+  /find-cache-dir/3.3.2:
+    resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
+    engines: {node: '>=8'}
+    dependencies:
+      commondir: 1.0.1
+      make-dir: 3.1.0
+      pkg-dir: 4.2.0
+    dev: true
+
   /find-my-way/7.4.0:
     resolution: {integrity: sha512-JFT7eURLU5FumlZ3VBGnveId82cZz7UR7OUu+THQJOwdQXxmS/g8v0KLoFhv97HreycOrmAbqjXD/4VG2j0uMQ==}
     engines: {node: '>=14'}
@@ -6859,6 +10311,13 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
+  /find-up/3.0.0:
+    resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+    engines: {node: '>=6'}
+    dependencies:
+      locate-path: 3.0.0
+    dev: true
+
   /find-up/4.1.0:
     resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
     engines: {node: '>=8'}
@@ -6937,6 +10396,11 @@ packages:
     resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==}
     dev: false
 
+  /flow-parser/0.202.0:
+    resolution: {integrity: sha512-ZiXxSIXK3zPmY3zrzCofFonM2T+/3Jz5QZKJyPVtUERQEJUnYkXBQ+0H3FzyqiyJs+VXqb/UNU6/K6sziVYdxw==}
+    engines: {node: '>=0.4.0'}
+    dev: true
+
   /fluent-ffmpeg/2.1.2:
     resolution: {integrity: sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==}
     engines: {node: '>=0.8.0'}
@@ -6952,6 +10416,16 @@ packages:
       readable-stream: 2.3.7
     dev: false
 
+  /follow-redirects/1.15.2:
+    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
+    engines: {node: '>=4.0'}
+    peerDependencies:
+      debug: '*'
+    peerDependenciesMeta:
+      debug:
+        optional: true
+    dev: false
+
   /follow-redirects/1.15.2_debug@4.3.4:
     resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
     engines: {node: '>=4.0'}
@@ -6962,6 +10436,7 @@ packages:
         optional: true
     dependencies:
       debug: 4.3.4
+    dev: true
 
   /for-each/0.3.3:
     resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -7010,7 +10485,6 @@ packages:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       mime-types: 2.1.35
-    dev: false
 
   /form-data/4.0.0:
     resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
@@ -7029,7 +10503,6 @@ packages:
   /forwarded/0.2.0:
     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
     engines: {node: '>= 0.6'}
-    dev: false
 
   /fragment-cache/0.2.1:
     resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
@@ -7038,13 +10511,26 @@ packages:
       map-cache: 0.2.2
     dev: false
 
+  /fresh/0.5.2:
+    resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /from/0.1.7:
     resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
     dev: true
 
   /fs-constants/1.0.0:
     resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-    dev: false
+
+  /fs-extra/11.1.0:
+    resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
+    engines: {node: '>=14.14'}
+    dependencies:
+      graceful-fs: 4.2.10
+      jsonfile: 6.1.0
+      universalify: 2.0.0
+    dev: true
 
   /fs-extra/8.1.0:
     resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
@@ -7077,7 +10563,6 @@ packages:
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
-    dev: false
 
   /fs-mkdirp-stream/1.0.0:
     resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
@@ -7137,8 +10622,6 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wide-align: 1.1.5
-    dev: false
-    optional: true
 
   /gauge/4.0.4:
     resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
@@ -7190,6 +10673,11 @@ packages:
       has: 1.0.3
       has-symbols: 1.0.3
 
+  /get-npm-tarball-url/2.0.3:
+    resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==}
+    engines: {node: '>=12.17'}
+    dev: true
+
   /get-package-type/0.1.0:
     resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
     engines: {node: '>=8.0.0'}
@@ -7261,10 +10749,29 @@ packages:
       readable-stream: 1.1.14
     dev: false
 
+  /giget/1.1.2:
+    resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
+    hasBin: true
+    dependencies:
+      colorette: 2.0.19
+      defu: 6.1.2
+      https-proxy-agent: 5.0.1
+      mri: 1.2.0
+      node-fetch-native: 1.0.2
+      pathe: 1.1.0
+      tar: 6.1.13
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /github-from-package/0.0.0:
     resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
     dev: false
 
+  /github-slugger/1.5.0:
+    resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
+    dev: true
+
   /glob-parent/3.1.0:
     resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
     dependencies:
@@ -7285,6 +10792,16 @@ packages:
       is-glob: 4.0.3
     dev: true
 
+  /glob-promise/6.0.2_glob@8.1.0:
+    resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      glob: ^8.0.3
+    dependencies:
+      '@types/glob': 8.0.1
+      glob: 8.1.0
+    dev: true
+
   /glob-stream/6.1.0:
     resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
     engines: {node: '>= 0.10'}
@@ -7301,6 +10818,10 @@ packages:
       unique-stream: 2.3.1
     dev: false
 
+  /glob-to-regexp/0.4.1:
+    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+    dev: true
+
   /glob-watcher/5.0.5:
     resolution: {integrity: sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==}
     engines: {node: '>= 0.10'}
@@ -7528,11 +11049,36 @@ packages:
       glogg: 1.0.2
     dev: false
 
+  /gunzip-maybe/1.4.2:
+    resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
+    hasBin: true
+    dependencies:
+      browserify-zlib: 0.1.4
+      is-deflate: 1.0.0
+      is-gzip: 1.0.0
+      peek-stream: 1.1.3
+      pumpify: 1.5.1
+      through2: 2.0.5
+    dev: true
+
   /hammerjs/2.0.8:
     resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
     engines: {node: '>=0.8.0'}
     dev: false
 
+  /handlebars/4.7.7:
+    resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
+    engines: {node: '>=0.4.7'}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.7
+      neo-async: 2.6.2
+      source-map: 0.6.1
+      wordwrap: 1.0.0
+    optionalDependencies:
+      uglify-js: 3.17.4
+    dev: true
+
   /happy-dom/8.9.0:
     resolution: {integrity: sha512-JZwJuGdR7ko8L61136YzmrLv7LgTh5b8XaEM3P709mLjyQuXJ3zHTDXvUtBBahRjGlcYW0zGjIiEWizoTUGKfA==}
     dependencies:
@@ -7601,7 +11147,6 @@ packages:
 
   /has-unicode/2.0.1:
     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-    dev: false
 
   /has-value/0.3.1:
     resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
@@ -7640,6 +11185,10 @@ packages:
     dependencies:
       function-bind: 1.1.1
 
+  /hash-sum/2.0.0:
+    resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
+    dev: true
+
   /hashlru/2.3.0:
     resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==}
     dev: false
@@ -7666,7 +11215,6 @@ packages:
 
   /hosted-git-info/2.8.9:
     resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
-    dev: false
 
   /hpagent/1.2.0:
     resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==}
@@ -7711,7 +11259,6 @@ packages:
       setprototypeof: 1.2.0
       statuses: 2.0.1
       toidentifier: 1.0.1
-    dev: false
 
   /http-proxy-agent/5.0.0:
     resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
@@ -7775,6 +11322,16 @@ packages:
     dev: false
     optional: true
 
+  /https-proxy-agent/4.0.0:
+    resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==}
+    engines: {node: '>= 6.0.0'}
+    dependencies:
+      agent-base: 5.1.1
+      debug: 4.3.4
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /https-proxy-agent/5.0.1:
     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
     engines: {node: '>= 6'}
@@ -7783,7 +11340,6 @@ packages:
       debug: 4.3.4
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
   /human-signals/1.1.1:
     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
@@ -7810,7 +11366,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       safer-buffer: 2.1.2
-    dev: false
 
   /iconv-lite/0.6.3:
     resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
@@ -7908,7 +11463,6 @@ packages:
   /interpret/1.4.0:
     resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
     engines: {node: '>= 0.10'}
-    dev: false
 
   /invert-kv/1.0.0:
     resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
@@ -7981,12 +11535,10 @@ packages:
 
   /ip/2.0.0:
     resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
-    dev: false
 
   /ipaddr.js/1.9.1:
     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
     engines: {node: '>= 0.10'}
-    dev: false
 
   /ipaddr.js/2.0.1:
     resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==}
@@ -7997,6 +11549,11 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /is-absolute-url/3.0.3:
+    resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
+    engines: {node: '>=8'}
+    dev: true
+
   /is-absolute/1.0.0:
     resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
     engines: {node: '>=0.10.0'}
@@ -8102,6 +11659,10 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
+  /is-deflate/1.0.0:
+    resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
+    dev: true
+
   /is-descriptor/0.1.6:
     resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
     engines: {node: '>=0.10.0'}
@@ -8120,12 +11681,17 @@ packages:
       kind-of: 6.0.3
     dev: false
 
+  /is-docker/2.2.1:
+    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+    engines: {node: '>=8'}
+    hasBin: true
+    dev: true
+
   /is-expression/4.0.0:
     resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==}
     dependencies:
       acorn: 7.4.1
       object-assign: 4.1.1
-    dev: false
 
   /is-extendable/0.1.1:
     resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
@@ -8173,7 +11739,6 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       has-tostringtag: 1.0.0
-    dev: false
 
   /is-glob/3.1.0:
     resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
@@ -8188,6 +11753,11 @@ packages:
     dependencies:
       is-extglob: 2.1.1
 
+  /is-gzip/1.0.0:
+    resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /is-installed-globally/0.4.0:
     resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
     engines: {node: '>=10'}
@@ -8210,6 +11780,14 @@ packages:
     resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
     dev: true
 
+  /is-nan/1.3.2:
+    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.2
+      define-properties: 1.1.4
+    dev: true
+
   /is-negated-glob/1.0.0:
     resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
     engines: {node: '>=0.10.0'}
@@ -8243,6 +11821,11 @@ packages:
     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
     engines: {node: '>=0.12.0'}
 
+  /is-path-cwd/2.2.0:
+    resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
+    engines: {node: '>=6'}
+    dev: true
+
   /is-path-inside/3.0.3:
     resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
     engines: {node: '>=8'}
@@ -8258,7 +11841,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       isobject: 3.0.1
-    dev: false
 
   /is-plain-object/5.0.0:
     resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
@@ -8271,7 +11853,6 @@ packages:
 
   /is-promise/2.2.2:
     resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
-    dev: false
 
   /is-regex/1.1.4:
     resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
@@ -8395,13 +11976,19 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /is-wsl/2.2.0:
+    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+    engines: {node: '>=8'}
+    dependencies:
+      is-docker: 2.2.1
+    dev: true
+
   /isarray/0.0.1:
     resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
     dev: false
 
   /isarray/1.0.0:
     resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-    dev: false
 
   /isarray/2.0.5:
     resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -8420,7 +12007,15 @@ packages:
   /isobject/3.0.1:
     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
     engines: {node: '>=0.10.0'}
-    dev: false
+
+  /isomorphic-unfetch/3.1.0:
+    resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
+    dependencies:
+      node-fetch: 2.6.7
+      unfetch: 4.2.0
+    transitivePeerDependencies:
+      - encoding
+    dev: true
 
   /isstream/0.1.2:
     resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
@@ -8434,8 +12029,8 @@ packages:
     resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
     engines: {node: '>=8'}
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/parser': 7.20.7
+      '@babel/core': 7.21.3
+      '@babel/parser': 7.21.3
       '@istanbuljs/schema': 0.1.3
       istanbul-lib-coverage: 3.2.0
       semver: 6.3.0
@@ -8493,7 +12088,6 @@ packages:
       chalk: 4.1.2
       filelist: 1.0.4
       minimatch: 3.1.2
-    dev: false
 
   /jest-changed-files/29.5.0:
     resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
@@ -8725,6 +12319,14 @@ packages:
       stack-utils: 2.0.6
     dev: true
 
+  /jest-mock/27.5.1:
+    resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==}
+    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+    dependencies:
+      '@jest/types': 27.5.1
+      '@types/node': 18.15.0
+    dev: true
+
   /jest-mock/29.5.0:
     resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -8978,7 +12580,6 @@ packages:
 
   /js-stringify/1.0.2:
     resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
-    dev: false
 
   /js-tokens/4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -9016,6 +12617,36 @@ packages:
     resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==}
     engines: {node: '>=0.1.90'}
 
+  /jscodeshift/0.14.0_@babel+preset-env@7.20.2:
+    resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
+    hasBin: true
+    peerDependencies:
+      '@babel/preset-env': ^7.1.6
+    dependencies:
+      '@babel/core': 7.20.12
+      '@babel/parser': 7.20.7
+      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
+      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12
+      '@babel/preset-env': 7.20.2_@babel+core@7.20.12
+      '@babel/preset-flow': 7.18.6_@babel+core@7.20.12
+      '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12
+      '@babel/register': 7.21.0_@babel+core@7.20.12
+      babel-core: 7.0.0-bridge.0_@babel+core@7.20.12
+      chalk: 4.1.2
+      flow-parser: 0.202.0
+      graceful-fs: 4.2.10
+      micromatch: 4.0.5
+      neo-async: 2.6.2
+      node-dir: 0.1.17
+      recast: 0.21.5
+      temp: 0.8.4
+      write-file-atomic: 2.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /jsdom/21.1.0:
     resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==}
     engines: {node: '>=14'}
@@ -9057,6 +12688,11 @@ packages:
       - utf-8-validate
     dev: false
 
+  /jsesc/0.5.0:
+    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+    hasBin: true
+    dev: true
+
   /jsesc/2.5.2:
     resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
     engines: {node: '>=4'}
@@ -9167,7 +12803,6 @@ packages:
     dependencies:
       is-promise: 2.2.2
       promise: 7.3.1
-    dev: false
 
   /just-debounce/1.1.0:
     resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==}
@@ -9215,7 +12850,6 @@ packages:
   /kind-of/6.0.3:
     resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /kleur/3.0.3:
     resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
@@ -9255,6 +12889,15 @@ packages:
     engines: {node: '> 0.8'}
     dev: true
 
+  /lazy-universal-dotenv/4.0.0:
+    resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==}
+    engines: {node: '>=14.0.0'}
+    dependencies:
+      app-root-dir: 1.0.2
+      dotenv: 16.0.3
+      dotenv-expand: 10.0.0
+    dev: true
+
   /lazystream/1.0.1:
     resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
     engines: {node: '>= 0.6.3'}
@@ -9369,6 +13012,14 @@ packages:
     engines: {node: '>=14'}
     dev: true
 
+  /locate-path/3.0.0:
+    resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+    engines: {node: '>=6'}
+    dependencies:
+      p-locate: 3.0.0
+      path-exists: 3.0.0
+    dev: true
+
   /locate-path/5.0.0:
     resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
     engines: {node: '>=8'}
@@ -9382,6 +13033,10 @@ packages:
       p-locate: 5.0.0
     dev: true
 
+  /lodash.debounce/4.0.8:
+    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+    dev: true
+
   /lodash.defaults/4.2.0:
     resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
 
@@ -9444,6 +13099,13 @@ packages:
     resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
     dev: false
 
+  /loose-envify/1.4.0:
+    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+    hasBin: true
+    dependencies:
+      js-tokens: 4.0.0
+    dev: true
+
   /loupe/2.3.6:
     resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
     dependencies:
@@ -9482,6 +13144,11 @@ packages:
     engines: {node: '>=12'}
     dev: false
 
+  /lru-cache/8.0.4:
+    resolution: {integrity: sha512-E9FF6+Oc/uFLqZCuZwRKUzgFt5Raih6LfxknOSAVTjNkrCZkBf7DQCwJxZQgd9l4eHjIJDGR+E+1QKD1RhThPw==}
+    engines: {node: '>=16.14'}
+    dev: true
+
   /luxon/3.2.1:
     resolution: {integrity: sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==}
     engines: {node: '>=12'}
@@ -9496,10 +13163,25 @@ packages:
     dependencies:
       sourcemap-codec: 1.4.8
 
+  /magic-string/0.27.0:
+    resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+    engines: {node: '>=12'}
+    dependencies:
+      '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
+
   /mailcheck/1.1.1:
     resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
     dev: false
 
+  /make-dir/2.1.0:
+    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+    engines: {node: '>=6'}
+    dependencies:
+      pify: 4.0.1
+      semver: 5.7.1
+    dev: true
+
   /make-dir/3.1.0:
     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
     engines: {node: '>=8'}
@@ -9549,6 +13231,10 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /map-or-similar/1.5.0:
+    resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
+    dev: true
+
   /map-stream/0.1.0:
     resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
     dev: true
@@ -9560,6 +13246,15 @@ packages:
       object-visit: 1.0.1
     dev: false
 
+  /markdown-to-jsx/7.2.0_react@18.2.0:
+    resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==}
+    engines: {node: '>= 10'}
+    peerDependencies:
+      react: '>= 0.14.0'
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /matchdep/2.0.0:
     resolution: {integrity: sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==}
     engines: {node: '>= 0.10.0'}
@@ -9580,6 +13275,31 @@ packages:
     resolution: {integrity: sha512-v2huwvQGOHTGOkMqtHd2hercCG3f6QAObTisPPHg8TZqq2lz7eIY/5i/5YUV8Ibf3mEioFEmwibcPUF2/fnKKQ==}
     dev: false
 
+  /mdast-util-definitions/4.0.0:
+    resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
+    dependencies:
+      unist-util-visit: 2.0.3
+    dev: true
+
+  /mdast-util-to-string/1.1.0:
+    resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
+    dev: true
+
+  /media-typer/0.3.0:
+    resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
+  /memoizerific/1.11.3:
+    resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
+    dependencies:
+      map-or-similar: 1.5.0
+    dev: true
+
+  /merge-descriptors/1.0.1:
+    resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+    dev: true
+
   /merge-stream/2.0.0:
     resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
 
@@ -9587,6 +13307,11 @@ packages:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
 
+  /methods/1.1.2:
+    resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /mfm-js/0.23.3:
     resolution: {integrity: sha512-o8scYmbey6rMUmWAlT3k3ntt6khaCLdxlmHhAWV5wTTMj2OK1atQvZfRUq0SIVm1Jig08qlZg/ps71xUqrScNA==}
     dependencies:
@@ -9631,6 +13356,18 @@ packages:
     dependencies:
       mime-db: 1.52.0
 
+  /mime/1.6.0:
+    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
+  /mime/2.6.0:
+    resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+    engines: {node: '>=4.0.0'}
+    hasBin: true
+    dev: true
+
   /mime/3.0.0:
     resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
     engines: {node: '>=10.0.0'}
@@ -9735,14 +13472,12 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       yallist: 4.0.0
-    dev: false
 
   /minipass/4.0.0:
     resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==}
     engines: {node: '>=8'}
     dependencies:
       yallist: 4.0.0
-    dev: false
 
   /minizlib/1.3.3:
     resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==}
@@ -9757,7 +13492,6 @@ packages:
     dependencies:
       minipass: 3.3.6
       yallist: 4.0.0
-    dev: false
 
   /misskey-js/0.0.15:
     resolution: {integrity: sha512-sCfQcPooD5Tfe/5pDr5JojAthhGot+hlidw67tj+7+AtZO5He3kBhsjJydY0vru6w3RFM5mzYR6SYISSBR/1WQ==}
@@ -9777,18 +13511,16 @@ packages:
 
   /mkdirp-classic/0.5.3:
     resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-    dev: false
 
   /mkdirp/0.5.6:
     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
     dependencies:
       minimist: 1.2.7
-    dev: false
 
   /mkdirp/1.0.4:
     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
     engines: {node: '>=10'}
-    dev: false
+    hasBin: true
 
   /mlly/1.1.1:
     resolution: {integrity: sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==}
@@ -9805,9 +13537,17 @@ packages:
       obliterator: 2.0.4
     dev: false
 
+  /mri/1.2.0:
+    resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+    engines: {node: '>=4'}
+    dev: true
+
   /ms/2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-    dev: false
+
+  /ms/2.1.1:
+    resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
+    dev: true
 
   /ms/2.1.2:
     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -9946,7 +13686,10 @@ packages:
   /negotiator/0.6.3:
     resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
     engines: {node: '>= 0.6'}
-    dev: false
+
+  /neo-async/2.6.2:
+    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+    dev: true
 
   /nested-property/4.0.0:
     resolution: {integrity: sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==}
@@ -9976,10 +13719,21 @@ packages:
     engines: {node: '>=v0.6.5'}
     dev: false
 
+  /node-dir/0.1.17:
+    resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==}
+    engines: {node: '>= 0.10.5'}
+    dependencies:
+      minimatch: 3.1.2
+    dev: true
+
   /node-domexception/1.0.0:
     resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
     engines: {node: '>=10.5.0'}
 
+  /node-fetch-native/1.0.2:
+    resolution: {integrity: sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ==}
+    dev: true
+
   /node-fetch/2.6.7:
     resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
     engines: {node: 4.x || >=6.0.0}
@@ -10065,7 +13819,6 @@ packages:
       resolve: 1.22.1
       semver: 5.7.1
       validate-npm-package-license: 3.0.4
-    dev: false
 
   /normalize-path/2.1.1:
     resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
@@ -10136,8 +13889,6 @@ packages:
       console-control-strings: 1.1.0
       gauge: 3.0.2
       set-blocking: 2.0.0
-    dev: false
-    optional: true
 
   /npmlog/6.0.2:
     resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
@@ -10191,7 +13942,6 @@ packages:
   /object-assign/4.1.1:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /object-copy/0.1.0:
     resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
@@ -10292,6 +14042,18 @@ packages:
     resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
     dev: false
 
+  /on-finished/2.4.1:
+    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      ee-first: 1.1.1
+    dev: true
+
+  /on-headers/1.0.2:
+    resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /once/1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
     dependencies:
@@ -10310,6 +14072,23 @@ packages:
       mimic-fn: 4.0.0
     dev: true
 
+  /open/7.4.2:
+    resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
+    engines: {node: '>=8'}
+    dependencies:
+      is-docker: 2.2.1
+      is-wsl: 2.2.0
+    dev: true
+
+  /open/8.4.2:
+    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+    engines: {node: '>=12'}
+    dependencies:
+      define-lazy-prop: 2.0.0
+      is-docker: 2.2.1
+      is-wsl: 2.2.0
+    dev: true
+
   /opentype.js/0.4.11:
     resolution: {integrity: sha512-GthxucX/6aftfLdeU5Ho7o7zmQcC8uVtqdcelVq12X++ndxwBZG8Xb5rFEKT7nEcWDD2P1x+TNuJ70jtj1Mbpw==}
     dev: false
@@ -10405,6 +14184,13 @@ packages:
       yocto-queue: 1.0.0
     dev: true
 
+  /p-locate/3.0.0:
+    resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      p-limit: 2.3.0
+    dev: true
+
   /p-locate/4.1.0:
     resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
     engines: {node: '>=8'}
@@ -10452,6 +14238,10 @@ packages:
     resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==}
     dev: false
 
+  /pako/0.2.9:
+    resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
+    dev: true
+
   /parent-module/1.0.1:
     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
     engines: {node: '>=6'}
@@ -10530,6 +14320,11 @@ packages:
     dependencies:
       entities: 4.4.0
 
+  /parseurl/1.3.3:
+    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /pascalcase/0.1.1:
     resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
     engines: {node: '>=0.10.0'}
@@ -10546,6 +14341,11 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
+  /path-exists/3.0.0:
+    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+    engines: {node: '>=4'}
+    dev: true
+
   /path-exists/4.0.0:
     resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
     engines: {node: '>=8'}
@@ -10583,6 +14383,10 @@ packages:
       path-root-regex: 0.1.2
     dev: false
 
+  /path-to-regexp/0.1.7:
+    resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+    dev: true
+
   /path-to-regexp/3.2.0:
     resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==}
     dev: false
@@ -10619,6 +14423,14 @@ packages:
     engines: {node: '>=14.16'}
     dev: false
 
+  /peek-stream/1.1.3:
+    resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==}
+    dependencies:
+      buffer-from: 1.1.2
+      duplexify: 3.7.1
+      through2: 2.0.5
+    dev: true
+
   /pend/1.2.0:
     resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
     dev: true
@@ -10700,6 +14512,11 @@ packages:
     resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
     engines: {node: '>=0.10.0'}
 
+  /pify/4.0.1:
+    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+    engines: {node: '>=6'}
+    dev: true
+
   /pinkie-promise/2.0.1:
     resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
     engines: {node: '>=0.10.0'}
@@ -10745,6 +14562,13 @@ packages:
     engines: {node: '>= 6'}
     dev: true
 
+  /pkg-dir/3.0.0:
+    resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
+    engines: {node: '>=6'}
+    dependencies:
+      find-up: 3.0.0
+    dev: true
+
   /pkg-dir/4.2.0:
     resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
     engines: {node: '>=8'}
@@ -10752,6 +14576,13 @@ packages:
       find-up: 4.1.0
     dev: true
 
+  /pkg-dir/5.0.0:
+    resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
+    engines: {node: '>=10'}
+    dependencies:
+      find-up: 5.0.0
+    dev: true
+
   /pkg-types/1.0.2:
     resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
     dependencies:
@@ -10791,6 +14622,13 @@ packages:
     engines: {node: '>=10.13.0'}
     dev: false
 
+  /polished/4.2.2:
+    resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      '@babel/runtime': 7.20.7
+    dev: true
+
   /posix-character-classes/0.1.1:
     resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
     engines: {node: '>=0.10.0'}
@@ -11074,6 +14912,12 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /prettier/2.8.4:
+    resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==}
+    engines: {node: '>=10.13.0'}
+    hasBin: true
+    dev: true
+
   /pretty-bytes/5.6.0:
     resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
     engines: {node: '>=6'}
@@ -11109,7 +14953,6 @@ packages:
   /pretty-hrtime/1.0.3:
     resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
     engines: {node: '>= 0.8'}
-    dev: false
 
   /prismjs/1.29.0:
     resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
@@ -11154,13 +14997,10 @@ packages:
   /process/0.11.10:
     resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
     engines: {node: '>= 0.6.0'}
-    dev: false
 
   /progress/2.0.3:
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     engines: {node: '>=0.4.0'}
-    dev: false
-    optional: true
 
   /promise-inflight/1.0.1:
     resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
@@ -11187,7 +15027,6 @@ packages:
     resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
     dependencies:
       asap: 2.0.6
-    dev: false
 
   /prompts/2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
@@ -11197,6 +15036,14 @@ packages:
       sisteransi: 1.0.5
     dev: true
 
+  /prop-types/15.8.1:
+    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react-is: 16.13.1
+    dev: true
+
   /proto-list/1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
     dev: true
@@ -11207,7 +15054,6 @@ packages:
     dependencies:
       forwarded: 0.2.0
       ipaddr.js: 1.9.1
-    dev: false
 
   /proxy-from-env/1.0.0:
     resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
@@ -11233,7 +15079,6 @@ packages:
       constantinople: 4.0.1
       js-stringify: 1.0.2
       pug-runtime: 3.0.1
-    dev: false
 
   /pug-code-gen/3.0.2:
     resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==}
@@ -11246,11 +15091,9 @@ packages:
       pug-runtime: 3.0.1
       void-elements: 3.1.0
       with: 7.0.2
-    dev: false
 
   /pug-error/2.0.0:
     resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==}
-    dev: false
 
   /pug-filters/4.0.0:
     resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==}
@@ -11260,7 +15103,6 @@ packages:
       pug-error: 2.0.0
       pug-walk: 2.0.0
       resolve: 1.22.1
-    dev: false
 
   /pug-lexer/5.0.1:
     resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==}
@@ -11268,42 +15110,35 @@ packages:
       character-parser: 2.2.0
       is-expression: 4.0.0
       pug-error: 2.0.0
-    dev: false
 
   /pug-linker/4.0.0:
     resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==}
     dependencies:
       pug-error: 2.0.0
       pug-walk: 2.0.0
-    dev: false
 
   /pug-load/3.0.0:
     resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==}
     dependencies:
       object-assign: 4.1.1
       pug-walk: 2.0.0
-    dev: false
 
   /pug-parser/6.0.0:
     resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==}
     dependencies:
       pug-error: 2.0.0
       token-stream: 1.0.0
-    dev: false
 
   /pug-runtime/3.0.1:
     resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==}
-    dev: false
 
   /pug-strip-comments/2.0.0:
     resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==}
     dependencies:
       pug-error: 2.0.0
-    dev: false
 
   /pug-walk/2.0.0:
     resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==}
-    dev: false
 
   /pug/3.0.2:
     resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==}
@@ -11316,14 +15151,12 @@ packages:
       pug-parser: 6.0.0
       pug-runtime: 3.0.1
       pug-strip-comments: 2.0.0
-    dev: false
 
   /pump/2.0.1:
     resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
-    dev: false
 
   /pump/3.0.0:
     resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
@@ -11337,7 +15170,6 @@ packages:
       duplexify: 3.7.1
       inherits: 2.0.4
       pump: 2.0.1
-    dev: false
 
   /punycode/1.3.2:
     resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==}
@@ -11347,6 +15179,26 @@ packages:
     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
     engines: {node: '>=6'}
 
+  /puppeteer-core/2.1.1:
+    resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==}
+    engines: {node: '>=8.16.0'}
+    dependencies:
+      '@types/mime-types': 2.1.1
+      debug: 4.3.4
+      extract-zip: 1.7.0
+      https-proxy-agent: 4.0.0
+      mime: 2.6.0
+      mime-types: 2.1.35
+      progress: 2.0.3
+      proxy-from-env: 1.0.0
+      rimraf: 2.7.1
+      ws: 6.2.2
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+    dev: true
+
   /pure-rand/6.0.0:
     resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==}
     dev: true
@@ -11382,6 +15234,13 @@ packages:
       side-channel: 1.0.4
     dev: true
 
+  /qs/6.11.0:
+    resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+    engines: {node: '>=0.6'}
+    dependencies:
+      side-channel: 1.0.4
+    dev: true
+
   /qs/6.5.3:
     resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
     engines: {node: '>=0.6'}
@@ -11424,6 +15283,10 @@ packages:
     resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
     engines: {node: '>=10'}
 
+  /ramda/0.28.0:
+    resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==}
+    dev: true
+
   /random-seed/0.3.0:
     resolution: {integrity: sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==}
     engines: {node: '>= 0.6.0'}
@@ -11431,6 +15294,11 @@ packages:
       json-stringify-safe: 5.0.1
     dev: false
 
+  /range-parser/1.2.1:
+    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /rangestr/0.0.1:
     resolution: {integrity: sha512-9CRCUX/w4+fNMzlYgA8GeJz7BZwBPwaGm3FhAm9Hi50k8wNy2CyiJQa8awygWJay87uVVCV0/FwbLcD6+/A9KQ==}
     dev: false
@@ -11443,6 +15311,16 @@ packages:
     resolution: {integrity: sha512-5FJbRW/Jkkdk29ksedAfWFkQkhbUrMx3QJGwMKAypeIiQf4yrLW+gtPKZiaWt4zPrtw1uGufOjGO7UGM6VllsQ==}
     dev: false
 
+  /raw-body/2.5.1:
+    resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      bytes: 3.1.2
+      http-errors: 2.0.0
+      iconv-lite: 0.4.24
+      unpipe: 1.0.0
+    dev: true
+
   /rc/1.2.8:
     resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
     dependencies:
@@ -11471,6 +15349,38 @@ packages:
       - supports-color
     dev: false
 
+  /react-colorful/5.6.1_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
+    peerDependencies:
+      react: '>=16.8.0'
+      react-dom: '>=16.8.0'
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /react-dom/18.2.0_react@18.2.0:
+    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+    peerDependencies:
+      react: ^18.2.0
+    dependencies:
+      loose-envify: 1.4.0
+      react: 18.2.0
+      scheduler: 0.23.0
+    dev: true
+
+  /react-inspector/6.0.1_react@18.2.0:
+    resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==}
+    peerDependencies:
+      react: ^16.8.4 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+    dev: true
+
+  /react-is/16.13.1:
+    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+    dev: true
+
   /react-is/17.0.2:
     resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
     dev: true
@@ -11479,6 +15389,13 @@ packages:
     resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
     dev: true
 
+  /react/18.2.0:
+    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: true
+
   /read-pkg-up/1.0.1:
     resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
     engines: {node: '>=0.10.0'}
@@ -11487,6 +15404,15 @@ packages:
       read-pkg: 1.1.0
     dev: false
 
+  /read-pkg-up/7.0.1:
+    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+    engines: {node: '>=8'}
+    dependencies:
+      find-up: 4.1.0
+      read-pkg: 5.2.0
+      type-fest: 0.8.1
+    dev: true
+
   /read-pkg/1.1.0:
     resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
     engines: {node: '>=0.10.0'}
@@ -11496,6 +15422,16 @@ packages:
       path-type: 1.1.0
     dev: false
 
+  /read-pkg/5.2.0:
+    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+    engines: {node: '>=8'}
+    dependencies:
+      '@types/normalize-package-data': 2.4.1
+      normalize-package-data: 2.5.0
+      parse-json: 5.2.0
+      type-fest: 0.6.0
+    dev: true
+
   /readable-stream/1.1.14:
     resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
     dependencies:
@@ -11515,7 +15451,6 @@ packages:
       safe-buffer: 5.1.2
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
-    dev: false
 
   /readable-stream/3.6.0:
     resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
@@ -11524,7 +15459,6 @@ packages:
       inherits: 2.0.4
       string_decoder: 1.3.0
       util-deprecate: 1.0.2
-    dev: false
 
   /readable-stream/4.3.0:
     resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==}
@@ -11560,12 +15494,43 @@ packages:
     engines: {node: '>= 12.13.0'}
     dev: false
 
+  /recast/0.21.5:
+    resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==}
+    engines: {node: '>= 4'}
+    dependencies:
+      ast-types: 0.15.2
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
+  /recast/0.22.0:
+    resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==}
+    engines: {node: '>= 4'}
+    dependencies:
+      assert: 2.0.0
+      ast-types: 0.15.2
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
+  /recast/0.23.1:
+    resolution: {integrity: sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==}
+    engines: {node: '>= 4'}
+    dependencies:
+      assert: 2.0.0
+      ast-types: 0.16.1
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
   /rechoir/0.6.2:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}
     dependencies:
       resolve: 1.22.1
-    dev: false
 
   /reconnecting-websocket/4.4.0:
     resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==}
@@ -11625,9 +15590,26 @@ packages:
     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
     dev: false
 
+  /regenerate-unicode-properties/10.1.0:
+    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      regenerate: 1.4.2
+    dev: true
+
+  /regenerate/1.4.2:
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+    dev: true
+
   /regenerator-runtime/0.13.11:
     resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
 
+  /regenerator-transform/0.15.1:
+    resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
+    dependencies:
+      '@babel/runtime': 7.20.7
+    dev: true
+
   /regex-not/1.0.2:
     resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
     engines: {node: '>=0.10.0'}
@@ -11650,6 +15632,43 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /regexpu-core/5.3.2:
+    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      '@babel/regjsgen': 0.8.0
+      regenerate: 1.4.2
+      regenerate-unicode-properties: 10.1.0
+      regjsparser: 0.9.1
+      unicode-match-property-ecmascript: 2.0.0
+      unicode-match-property-value-ecmascript: 2.1.0
+    dev: true
+
+  /regjsparser/0.9.1:
+    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+    hasBin: true
+    dependencies:
+      jsesc: 0.5.0
+    dev: true
+
+  /remark-external-links/8.0.0:
+    resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==}
+    dependencies:
+      extend: 3.0.2
+      is-absolute-url: 3.0.3
+      mdast-util-definitions: 4.0.0
+      space-separated-tokens: 1.1.5
+      unist-util-visit: 2.0.3
+    dev: true
+
+  /remark-slug/6.1.0:
+    resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==}
+    dependencies:
+      github-slugger: 1.5.0
+      mdast-util-to-string: 1.1.0
+      unist-util-visit: 2.0.3
+    dev: true
+
   /remove-bom-buffer/3.0.0:
     resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
     engines: {node: '>=0.10.0'}
@@ -11857,11 +15876,18 @@ packages:
   /rfdc/1.3.0:
     resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
 
-  /rimraf/2.7.1:
-    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
+  /rimraf/2.6.3:
+    resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+    dev: true
+
+  /rimraf/2.7.1:
+    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
+    hasBin: true
     dependencies:
       glob: 7.2.3
-    dev: false
 
   /rimraf/3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
@@ -11908,9 +15934,12 @@ packages:
     resolution: {integrity: sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==}
     dev: false
 
+  /safe-buffer/5.1.1:
+    resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==}
+    dev: true
+
   /safe-buffer/5.1.2:
     resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-    dev: false
 
   /safe-buffer/5.2.1:
     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -11977,6 +16006,12 @@ packages:
       xmlchars: 2.2.0
     dev: false
 
+  /scheduler/0.23.0:
+    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: true
+
   /secure-json-parse/2.7.0:
     resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
     dev: false
@@ -12016,15 +16051,63 @@ packages:
     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
     hasBin: true
 
+  /semver/7.0.0:
+    resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
+    hasBin: true
+    dev: true
+
   /semver/7.3.8:
     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
     engines: {node: '>=10'}
     dependencies:
       lru-cache: 6.0.0
 
+  /send/0.18.0:
+    resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      debug: 2.6.9
+      depd: 2.0.0
+      destroy: 1.2.0
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      fresh: 0.5.2
+      http-errors: 2.0.0
+      mime: 1.6.0
+      ms: 2.1.3
+      on-finished: 2.4.1
+      range-parser: 1.2.1
+      statuses: 2.0.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /serve-favicon/2.5.0:
+    resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      etag: 1.8.1
+      fresh: 0.5.2
+      ms: 2.1.1
+      parseurl: 1.3.3
+      safe-buffer: 5.1.1
+    dev: true
+
+  /serve-static/1.15.0:
+    resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      parseurl: 1.3.3
+      send: 0.18.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /set-blocking/2.0.0:
     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-    dev: false
 
   /set-cookie-parser/2.5.1:
     resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
@@ -12046,7 +16129,6 @@ packages:
 
   /setprototypeof/1.2.0:
     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-    dev: false
 
   /sha.js/2.4.11:
     resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
@@ -12055,6 +16137,13 @@ packages:
       safe-buffer: 5.2.1
     dev: false
 
+  /shallow-clone/3.0.1:
+    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+    engines: {node: '>=8'}
+    dependencies:
+      kind-of: 6.0.3
+    dev: true
+
   /sharp/0.31.3:
     resolution: {integrity: sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==}
     engines: {node: '>=14.15.0'}
@@ -12092,6 +16181,16 @@ packages:
     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
     engines: {node: '>=8'}
 
+  /shelljs/0.8.5:
+    resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+      interpret: 1.4.0
+      rechoir: 0.6.2
+    dev: true
+
   /side-channel/1.0.4:
     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
     dependencies:
@@ -12129,6 +16228,13 @@ packages:
       is-arrayish: 0.3.2
     dev: false
 
+  /simple-update-notifier/1.1.0:
+    resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      semver: 7.0.0
+    dev: true
+
   /sisteransi/1.0.5:
     resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
     dev: true
@@ -12274,7 +16380,6 @@ packages:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
-    dev: false
 
   /source-map-url/0.4.1:
     resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
@@ -12297,6 +16402,10 @@ packages:
   /sourcemap-codec/1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
 
+  /space-separated-tokens/1.1.5:
+    resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+    dev: true
+
   /sparkles/1.0.1:
     resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
     engines: {node: '>= 0.10'}
@@ -12307,22 +16416,18 @@ packages:
     dependencies:
       spdx-expression-parse: 3.0.1
       spdx-license-ids: 3.0.12
-    dev: false
 
   /spdx-exceptions/2.3.0:
     resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
-    dev: false
 
   /spdx-expression-parse/3.0.1:
     resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
     dependencies:
       spdx-exceptions: 2.3.0
       spdx-license-ids: 3.0.12
-    dev: false
 
   /spdx-license-ids/3.0.12:
     resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
-    dev: false
 
   /split-string/3.1.0:
     resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
@@ -12416,7 +16521,6 @@ packages:
   /statuses/2.0.1:
     resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
     engines: {node: '>= 0.8'}
-    dev: false
 
   /std-env/3.3.2:
     resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
@@ -12429,6 +16533,22 @@ packages:
       internal-slot: 1.0.5
     dev: true
 
+  /store2/2.14.2:
+    resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
+    dev: true
+
+  /storybook/7.0.0-rc.4:
+    resolution: {integrity: sha512-Hj06cdZe55hBGfbMwOpI8a5Mj/Dn8njNpcrgPIFcq6fHTU24MGrJP+e15+yo+NLmpJ+6tdsCByd9V6XQ7+r4ew==}
+    hasBin: true
+    dependencies:
+      '@storybook/cli': 7.0.0-rc.4
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
   /stream-combiner/0.0.4:
     resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
     dependencies:
@@ -12448,7 +16568,6 @@ packages:
 
   /stream-shift/1.0.1:
     resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
-    dev: false
 
   /stream-wormhole/1.1.0:
     resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==}
@@ -12527,13 +16646,11 @@ packages:
     resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
     dependencies:
       safe-buffer: 5.1.2
-    dev: false
 
   /string_decoder/1.3.0:
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
     dependencies:
       safe-buffer: 5.2.1
-    dev: false
 
   /stringz/2.1.0:
     resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==}
@@ -12684,6 +16801,10 @@ packages:
     resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
     dev: false
 
+  /synchronous-promise/2.0.17:
+    resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==}
+    dev: true
+
   /systeminformation/5.17.12:
     resolution: {integrity: sha512-I3pfMW2vue53u+X08BNxaJieaHkRoMMKjWetY9lbYJeWFaeWPO6P4FkNc4XOCX8F9vbQ0HqQ25RJoz3U/B7liw==}
     engines: {node: '>=8.0.0'}
@@ -12702,7 +16823,6 @@ packages:
       mkdirp-classic: 0.5.3
       pump: 3.0.0
       tar-stream: 2.2.0
-    dev: false
 
   /tar-stream/2.2.0:
     resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
@@ -12713,7 +16833,6 @@ packages:
       fs-constants: 1.0.0
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: false
 
   /tar/4.4.19:
     resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==}
@@ -12739,7 +16858,35 @@ packages:
       minizlib: 2.1.2
       mkdirp: 1.0.4
       yallist: 4.0.0
-    dev: false
+
+  /telejson/7.0.4:
+    resolution: {integrity: sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA==}
+    dependencies:
+      memoizerific: 1.11.3
+    dev: true
+
+  /temp-dir/2.0.0:
+    resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /temp/0.8.4:
+    resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      rimraf: 2.6.3
+    dev: true
+
+  /tempy/1.0.1:
+    resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==}
+    engines: {node: '>=10'}
+    dependencies:
+      del: 6.1.1
+      is-stream: 2.0.1
+      temp-dir: 2.0.0
+      type-fest: 0.16.0
+      unique-string: 2.0.0
+    dev: true
 
   /terser/5.16.1:
     resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==}
@@ -12828,7 +16975,6 @@ packages:
     dependencies:
       readable-stream: 2.3.7
       xtend: 4.0.2
-    dev: false
 
   /through2/4.0.2:
     resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
@@ -12931,11 +17077,9 @@ packages:
   /toidentifier/1.0.1:
     resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
     engines: {node: '>=0.6'}
-    dev: false
 
   /token-stream/1.0.0:
     resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
-    dev: false
 
   /token-types/5.0.1:
     resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==}
@@ -12986,6 +17130,15 @@ packages:
       escape-string-regexp: 5.0.0
     dev: false
 
+  /ts-dedent/2.2.0:
+    resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+    engines: {node: '>=6.10'}
+    dev: true
+
+  /ts-map/1.0.3:
+    resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==}
+    dev: true
+
   /tsc-alias/1.8.3:
     resolution: {integrity: sha512-/9JARcmXBrEqSuLjdSOqxY7/xI/AnvmBi4CU9/Ba2oX6Oq8vnd0OGSQTk+PIwqWJ5ZxskV0X/x15yzxCNTHU+g==}
     hasBin: true
@@ -13025,7 +17178,6 @@ packages:
 
   /tslib/2.5.0:
     resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
-    dev: false
 
   /tsutils/3.21.0_typescript@4.9.5:
     resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@@ -13067,6 +17219,11 @@ packages:
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     engines: {node: '>=4'}
 
+  /type-fest/0.16.0:
+    resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
+    engines: {node: '>=10'}
+    dev: true
+
   /type-fest/0.20.2:
     resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
     engines: {node: '>=10'}
@@ -13077,6 +17234,29 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /type-fest/0.6.0:
+    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /type-fest/0.8.1:
+    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /type-fest/2.19.0:
+    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+    engines: {node: '>=12.20'}
+    dev: true
+
+  /type-is/1.6.18:
+    resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+    engines: {node: '>= 0.6'}
+    dependencies:
+      media-typer: 0.3.0
+      mime-types: 2.1.35
+    dev: true
+
   /type/1.2.0:
     resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
     dev: false
@@ -13093,7 +17273,6 @@ packages:
 
   /typedarray/0.0.6:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
-    dev: false
 
   /typeorm/0.3.11_ioredis@4.28.5+pg@8.10.0:
     resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
@@ -13184,6 +17363,14 @@ packages:
     resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
     dev: true
 
+  /uglify-js/3.17.4:
+    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+    engines: {node: '>=0.8.0'}
+    hasBin: true
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /uid/2.0.1:
     resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==}
     engines: {node: '>=8'}
@@ -13237,6 +17424,33 @@ packages:
       busboy: 1.6.0
     dev: false
 
+  /unfetch/4.2.0:
+    resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==}
+    dev: true
+
+  /unicode-canonical-property-names-ecmascript/2.0.0:
+    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-match-property-ecmascript/2.0.0:
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      unicode-canonical-property-names-ecmascript: 2.0.0
+      unicode-property-aliases-ecmascript: 2.1.0
+    dev: true
+
+  /unicode-match-property-value-ecmascript/2.1.0:
+    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-property-aliases-ecmascript/2.1.0:
+    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+    engines: {node: '>=4'}
+    dev: true
+
   /union-value/1.0.1:
     resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
     engines: {node: '>=0.10.0'}
@@ -13276,6 +17490,32 @@ packages:
       through2-filter: 3.0.0
     dev: false
 
+  /unique-string/2.0.0:
+    resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+    engines: {node: '>=8'}
+    dependencies:
+      crypto-random-string: 2.0.0
+    dev: true
+
+  /unist-util-is/4.1.0:
+    resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
+    dev: true
+
+  /unist-util-visit-parents/3.1.1:
+    resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 4.1.0
+    dev: true
+
+  /unist-util-visit/2.0.3:
+    resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 4.1.0
+      unist-util-visit-parents: 3.1.1
+    dev: true
+
   /universalify/0.1.2:
     resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
     engines: {node: '>= 4.0.0'}
@@ -13295,6 +17535,20 @@ packages:
     resolution: {integrity: sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==}
     dev: false
 
+  /unpipe/1.0.0:
+    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
+  /unplugin/0.10.2:
+    resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==}
+    dependencies:
+      acorn: 8.8.2
+      chokidar: 3.5.3
+      webpack-sources: 3.2.3
+      webpack-virtual-modules: 0.4.6
+    dev: true
+
   /unset-value/1.0.0:
     resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
     engines: {node: '>=0.10.0'}
@@ -13334,6 +17588,17 @@ packages:
       picocolors: 1.0.0
     dev: true
 
+  /update-browserslist-db/1.0.10_browserslist@4.21.5:
+    resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
+    hasBin: true
+    peerDependencies:
+      browserslist: '>= 4.21.0'
+    dependencies:
+      browserslist: 4.21.5
+      escalade: 3.1.1
+      picocolors: 1.0.0
+    dev: true
+
   /uri-js/4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
     dependencies:
@@ -13365,6 +17630,17 @@ packages:
     resolution: {integrity: sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==}
     dev: false
 
+  /use-resize-observer/9.1.0_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==}
+    peerDependencies:
+      react: 16.8.0 - 18
+      react-dom: 16.8.0 - 18
+    dependencies:
+      '@juggle/resize-observer': 3.4.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
   /use/3.1.1:
     resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
     engines: {node: '>=0.10.0'}
@@ -13389,7 +17665,15 @@ packages:
       is-generator-function: 1.0.10
       is-typed-array: 1.1.10
       which-typed-array: 1.1.9
-    dev: false
+
+  /utils-merge/1.0.1:
+    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+    engines: {node: '>= 0.4.0'}
+    dev: true
+
+  /uuid-browser/3.1.0:
+    resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==}
+    dev: true
 
   /uuid/3.4.0:
     resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
@@ -13430,7 +17714,6 @@ packages:
     dependencies:
       spdx-correct: 3.1.1
       spdx-expression-parse: 3.0.1
-    dev: false
 
   /value-or-function/3.0.0:
     resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==}
@@ -13444,7 +17727,6 @@ packages:
   /vary/1.1.2:
     resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
     engines: {node: '>= 0.8'}
-    dev: false
 
   /vendors/1.0.4:
     resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==}
@@ -13608,7 +17890,7 @@ packages:
       '@vitest/runner': 0.29.2
       '@vitest/spy': 0.29.2
       '@vitest/utils': 0.29.2
-      acorn: 8.8.1
+      acorn: 8.8.2
       acorn-walk: 8.2.0
       cac: 6.7.14
       chai: 4.3.7
@@ -13638,7 +17920,24 @@ packages:
   /void-elements/3.1.0:
     resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
     engines: {node: '>=0.10.0'}
-    dev: false
+
+  /vue-docgen-api/4.64.1_vue@3.2.47:
+    resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==}
+    dependencies:
+      '@babel/parser': 7.20.7
+      '@babel/types': 7.20.7
+      '@vue/compiler-dom': 3.2.47
+      '@vue/compiler-sfc': 3.2.47
+      ast-types: 0.14.2
+      hash-sum: 2.0.0
+      lru-cache: 8.0.4
+      pug: 3.0.2
+      recast: 0.22.0
+      ts-map: 1.0.3
+      vue-inbrowser-compiler-independent-utils: 4.64.1_vue@3.2.47
+    transitivePeerDependencies:
+      - vue
+    dev: true
 
   /vue-eslint-parser/9.1.0_eslint@8.35.0:
     resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
@@ -13658,6 +17957,14 @@ packages:
       - supports-color
     dev: true
 
+  /vue-inbrowser-compiler-independent-utils/4.64.1_vue@3.2.47:
+    resolution: {integrity: sha512-Hn32n07XZ8j9W8+fmOXPQL+i+W2e/8i6mkH4Ju3H6nR0+cfvmWM95GhczYi5B27+Y8JlCKgAo04IUiYce4mKAw==}
+    peerDependencies:
+      vue: '>=2'
+    dependencies:
+      vue: 3.2.47
+    dev: true
+
   /vue-plyr/7.0.0:
     resolution: {integrity: sha512-NvbO/ZzV1IxlBQQbQlon5Sk8hKuGAj3k4k0XVdi7gM4oSqu8mZMhJ3WM3FfAtNfV790jbLnb8P3dHYqaBqIv6g==}
     dependencies:
@@ -13744,6 +18051,14 @@ packages:
       makeerror: 1.0.12
     dev: true
 
+  /watchpack/2.4.0:
+    resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.10
+    dev: true
+
   /web-push/3.5.0:
     resolution: {integrity: sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==}
     engines: {node: '>= 6'}
@@ -13769,6 +18084,15 @@ packages:
     resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
     engines: {node: '>=12'}
 
+  /webpack-sources/3.2.3:
+    resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+    engines: {node: '>=10.13.0'}
+    dev: true
+
+  /webpack-virtual-modules/0.4.6:
+    resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==}
+    dev: true
+
   /websocket/1.0.34:
     resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==}
     engines: {node: '>=4.0.0'}
@@ -13877,22 +18201,31 @@ packages:
     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
     dependencies:
       string-width: 4.2.3
-    dev: false
+
+  /widest-line/3.1.0:
+    resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
+    engines: {node: '>=8'}
+    dependencies:
+      string-width: 4.2.3
+    dev: true
 
   /with/7.0.2:
     resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       assert-never: 1.2.1
       babel-walk: 3.0.0-canary-5
-    dev: false
 
   /word-wrap/1.2.3:
     resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
     engines: {node: '>=0.10.0'}
 
+  /wordwrap/1.0.0:
+    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+    dev: true
+
   /wrap-ansi/2.1.0:
     resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
     engines: {node: '>=0.10.0'}
@@ -13920,6 +18253,14 @@ packages:
   /wrappy/1.0.2:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 
+  /write-file-atomic/2.4.3:
+    resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+    dependencies:
+      graceful-fs: 4.2.10
+      imurmurhash: 0.1.4
+      signal-exit: 3.0.7
+    dev: true
+
   /write-file-atomic/4.0.2:
     resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -13928,6 +18269,20 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
+  /ws/6.2.2:
+    resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==}
+    peerDependencies:
+      bufferutil: ^4.0.1
+      utf-8-validate: ^5.0.2
+    peerDependenciesMeta:
+      bufferutil:
+        optional: true
+      utf-8-validate:
+        optional: true
+    dependencies:
+      async-limiter: 1.0.1
+    dev: true
+
   /ws/8.12.1:
     resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}
     engines: {node: '>=10.0.0'}
@@ -13939,7 +18294,6 @@ packages:
         optional: true
       utf-8-validate:
         optional: true
-    dev: false
 
   /xev/3.0.2:
     resolution: {integrity: sha512-8kxuH95iMXzHZj+fwqfA4UrPcYOy6bGIgfWzo9Ji23JoEc30ge/Z++Ubkiuy8c0+M64nXmmxrmJ7C8wnuBhluw==}

From 91e0e498eb890b8c550a7acfba8ccf410f0fe215 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 19 Mar 2023 22:31:18 +0900
Subject: [PATCH 02/99] fix(#10336): invalid name conversion

---
 packages/frontend/.storybook/generate.tsx                       | 2 +-
 packages/frontend/src/components/MkCode.core.stories.ts         | 2 +-
 packages/frontend/src/components/MkDrive.file.stories.ts        | 2 +-
 packages/frontend/src/components/MkDrive.folder.stories.ts      | 2 +-
 packages/frontend/src/components/MkDrive.navFolder.stories.ts   | 2 +-
 .../frontend/src/components/MkEmojiPicker.section.stories.ts    | 2 +-
 packages/frontend/src/components/MkMenu.child.stories.ts        | 2 +-
 packages/frontend/src/components/MkObjectView.value.stories.ts  | 2 +-
 .../src/components/MkReactionsViewer.details.stories.ts         | 2 +-
 .../src/components/MkReactionsViewer.reaction.stories.ts        | 2 +-
 .../frontend/src/components/global/MkPageHeader.tabs.stories.ts | 2 +-
 packages/frontend/src/components/page/page.block.stories.ts     | 2 +-
 packages/frontend/src/components/page/page.button.stories.ts    | 2 +-
 packages/frontend/src/components/page/page.canvas.stories.ts    | 2 +-
 packages/frontend/src/components/page/page.counter.stories.ts   | 2 +-
 packages/frontend/src/components/page/page.if.stories.ts        | 2 +-
 packages/frontend/src/components/page/page.image.stories.ts     | 2 +-
 packages/frontend/src/components/page/page.note.stories.ts      | 2 +-
 .../frontend/src/components/page/page.number-input.stories.ts   | 2 +-
 packages/frontend/src/components/page/page.post.stories.ts      | 2 +-
 .../frontend/src/components/page/page.radio-button.stories.ts   | 2 +-
 packages/frontend/src/components/page/page.section.stories.ts   | 2 +-
 packages/frontend/src/components/page/page.switch.stories.ts    | 2 +-
 .../frontend/src/components/page/page.text-input.stories.ts     | 2 +-
 packages/frontend/src/components/page/page.text.stories.ts      | 2 +-
 .../frontend/src/components/page/page.textarea-input.stories.ts | 2 +-
 packages/frontend/src/components/page/page.textarea.stories.ts  | 2 +-
 packages/frontend/src/pages/about-misskey.stories.ts            | 2 +-
 packages/frontend/src/pages/about.emojis.stories.ts             | 2 +-
 packages/frontend/src/pages/about.federation.stories.ts         | 2 +-
 packages/frontend/src/pages/admin-file.stories.ts               | 2 +-
 packages/frontend/src/pages/admin/bot-protection.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/email-settings.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/instance-block.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/object-storage.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/other-settings.stories.ts     | 2 +-
 .../frontend/src/pages/admin/overview.active-users.stories.ts   | 2 +-
 .../frontend/src/pages/admin/overview.ap-requests.stories.ts    | 2 +-
 .../frontend/src/pages/admin/overview.federation.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/overview.heatmap.stories.ts   | 2 +-
 packages/frontend/src/pages/admin/overview.instances.stories.ts | 2 +-
 .../frontend/src/pages/admin/overview.moderators.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/overview.pie.stories.ts       | 2 +-
 .../frontend/src/pages/admin/overview.queue.chart.stories.ts    | 2 +-
 packages/frontend/src/pages/admin/overview.queue.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/overview.retention.stories.ts | 2 +-
 packages/frontend/src/pages/admin/overview.stats.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/overview.users.stories.ts     | 2 +-
 packages/frontend/src/pages/admin/proxy-account.stories.ts      | 2 +-
 packages/frontend/src/pages/admin/queue.chart.chart.stories.ts  | 2 +-
 packages/frontend/src/pages/admin/queue.chart.stories.ts        | 2 +-
 packages/frontend/src/pages/admin/roles.edit.stories.ts         | 2 +-
 packages/frontend/src/pages/admin/roles.editor.stories.ts       | 2 +-
 packages/frontend/src/pages/admin/roles.role.stories.ts         | 2 +-
 packages/frontend/src/pages/antenna-timeline.stories.ts         | 2 +-
 packages/frontend/src/pages/api-console.stories.ts              | 2 +-
 packages/frontend/src/pages/auth.form.stories.ts                | 2 +-
 packages/frontend/src/pages/channel-editor.stories.ts           | 2 +-
 packages/frontend/src/pages/custom-emojis-manager.stories.ts    | 2 +-
 packages/frontend/src/pages/emoji-edit-dialog.stories.ts        | 2 +-
 packages/frontend/src/pages/emojis.emoji.stories.ts             | 2 +-
 packages/frontend/src/pages/explore.featured.stories.ts         | 2 +-
 packages/frontend/src/pages/explore.roles.stories.ts            | 2 +-
 packages/frontend/src/pages/explore.users.stories.ts            | 2 +-
 packages/frontend/src/pages/flash/flash-edit.stories.ts         | 2 +-
 packages/frontend/src/pages/flash/flash-index.stories.ts        | 2 +-
 packages/frontend/src/pages/follow-requests.stories.ts          | 2 +-
 packages/frontend/src/pages/instance-info.stories.ts            | 2 +-
 packages/frontend/src/pages/not-found.stories.ts                | 2 +-
 .../src/pages/page-editor/els/page-editor.el.image.stories.ts   | 2 +-
 .../src/pages/page-editor/els/page-editor.el.note.stories.ts    | 2 +-
 .../src/pages/page-editor/els/page-editor.el.section.stories.ts | 2 +-
 .../src/pages/page-editor/els/page-editor.el.text.stories.ts    | 2 +-
 .../src/pages/page-editor/page-editor.blocks.stories.ts         | 2 +-
 .../src/pages/page-editor/page-editor.container.stories.ts      | 2 +-
 packages/frontend/src/pages/page-editor/page-editor.stories.ts  | 2 +-
 packages/frontend/src/pages/registry.keys.stories.ts            | 2 +-
 packages/frontend/src/pages/registry.value.stories.ts           | 2 +-
 packages/frontend/src/pages/reset-password.stories.ts           | 2 +-
 packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts    | 2 +-
 packages/frontend/src/pages/settings/2fa.stories.ts             | 2 +-
 packages/frontend/src/pages/settings/account-info.stories.ts    | 2 +-
 packages/frontend/src/pages/settings/custom-css.stories.ts      | 2 +-
 packages/frontend/src/pages/settings/delete-account.stories.ts  | 2 +-
 packages/frontend/src/pages/settings/import-export.stories.ts   | 2 +-
 packages/frontend/src/pages/settings/instance-mute.stories.ts   | 2 +-
 packages/frontend/src/pages/settings/mute-block.stories.ts      | 2 +-
 packages/frontend/src/pages/settings/plugin.install.stories.ts  | 2 +-
 .../frontend/src/pages/settings/preferences-backups.stories.ts  | 2 +-
 packages/frontend/src/pages/settings/sounds.sound.stories.ts    | 2 +-
 .../frontend/src/pages/settings/statusbar.statusbar.stories.ts  | 2 +-
 packages/frontend/src/pages/settings/theme.install.stories.ts   | 2 +-
 packages/frontend/src/pages/settings/theme.manage.stories.ts    | 2 +-
 packages/frontend/src/pages/settings/webhook.edit.stories.ts    | 2 +-
 packages/frontend/src/pages/settings/webhook.new.stories.ts     | 2 +-
 packages/frontend/src/pages/settings/word-mute.stories.ts       | 2 +-
 packages/frontend/src/pages/signup-complete.stories.ts          | 2 +-
 packages/frontend/src/pages/theme-editor.stories.ts             | 2 +-
 packages/frontend/src/pages/timeline.tutorial.stories.ts        | 2 +-
 packages/frontend/src/pages/user-info.stories.ts                | 2 +-
 packages/frontend/src/pages/user-list-timeline.stories.ts       | 2 +-
 packages/frontend/src/pages/user-tag.stories.ts                 | 2 +-
 packages/frontend/src/pages/user/activity.following.stories.ts  | 2 +-
 packages/frontend/src/pages/user/activity.heatmap.stories.ts    | 2 +-
 packages/frontend/src/pages/user/activity.notes.stories.ts      | 2 +-
 packages/frontend/src/pages/user/activity.pv.stories.ts         | 2 +-
 packages/frontend/src/pages/user/follow-list.stories.ts         | 2 +-
 packages/frontend/src/pages/user/index.activity.stories.ts      | 2 +-
 packages/frontend/src/pages/user/index.photos.stories.ts        | 2 +-
 packages/frontend/src/pages/user/index.timeline.stories.ts      | 2 +-
 packages/frontend/src/pages/welcome.entrance.a.stories.ts       | 2 +-
 packages/frontend/src/pages/welcome.entrance.b.stories.ts       | 2 +-
 packages/frontend/src/pages/welcome.entrance.c.stories.ts       | 2 +-
 packages/frontend/src/pages/welcome.setup.stories.ts            | 2 +-
 packages/frontend/src/pages/welcome.timeline.stories.ts         | 2 +-
 packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts  | 2 +-
 .../frontend/src/ui/_common_/statusbar-federation.stories.ts    | 2 +-
 packages/frontend/src/ui/_common_/statusbar-rss.stories.ts      | 2 +-
 .../frontend/src/ui/_common_/statusbar-user-list.stories.ts     | 2 +-
 packages/frontend/src/ui/_common_/stream-indicator.stories.ts   | 2 +-
 packages/frontend/src/ui/classic.header.stories.ts              | 2 +-
 packages/frontend/src/ui/classic.sidebar.stories.ts             | 2 +-
 packages/frontend/src/ui/deck/antenna-column.stories.ts         | 2 +-
 packages/frontend/src/ui/deck/channel-column.stories.ts         | 2 +-
 packages/frontend/src/ui/deck/column-core.stories.ts            | 2 +-
 packages/frontend/src/ui/deck/direct-column.stories.ts          | 2 +-
 packages/frontend/src/ui/deck/list-column.stories.ts            | 2 +-
 packages/frontend/src/ui/deck/main-column.stories.ts            | 2 +-
 packages/frontend/src/ui/deck/mentions-column.stories.ts        | 2 +-
 packages/frontend/src/ui/deck/notifications-column.stories.ts   | 2 +-
 packages/frontend/src/ui/deck/tl-column.stories.ts              | 2 +-
 packages/frontend/src/ui/deck/widgets-column.stories.ts         | 2 +-
 packages/frontend/src/ui/universal.widgets.stories.ts           | 2 +-
 .../frontend/src/widgets/WidgetActivity.calendar.stories.ts     | 2 +-
 packages/frontend/src/widgets/WidgetActivity.chart.stories.ts   | 2 +-
 packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts  | 2 +-
 136 files changed, 136 insertions(+), 136 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index e2bf4791c1..189e611f72 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -95,7 +95,7 @@ function toStories(component: string, location: string): string {
 												/>,
 												<property
 													key={<identifier name="template" />}
-													value={<literal value={`<${component.slice(0, -4)} />`} />}
+													value={<literal value={`<${identifier.name} />`} />}
 													kind="init"
 												/>,
 											]}
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index 7019a4fdaf..c6a55fe8c3 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkCode_core,
 	},
-	template: '<MkCode.core />',
+	template: '<MkCode_core />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index e5752b898e..0942b1d7d4 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkDrive_file,
 	},
-	template: '<MkDrive.file />',
+	template: '<MkDrive_file />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index cf39fa2e62..5565b08651 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkDrive_folder,
 	},
-	template: '<MkDrive.folder />',
+	template: '<MkDrive_folder />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index 5b36fba351..4c489f7298 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkDrive_navFolder,
 	},
-	template: '<MkDrive.navFolder />',
+	template: '<MkDrive_navFolder />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index af0210109d..6b8fb815ab 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkEmojiPicker_section,
 	},
-	template: '<MkEmojiPicker.section />',
+	template: '<MkEmojiPicker_section />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index 05e3b94a88..079fbee3e2 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkMenu_child,
 	},
-	template: '<MkMenu.child />',
+	template: '<MkMenu_child />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index 919b796be1..58a9e96a44 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkObjectView_value,
 	},
-	template: '<MkObjectView.value />',
+	template: '<MkObjectView_value />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index f8bf55a7cd..3bab02b864 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkReactionsViewer_details,
 	},
-	template: '<MkReactionsViewer.details />',
+	template: '<MkReactionsViewer_details />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index f044f6a8be..917c5459ad 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkReactionsViewer_reaction,
 	},
-	template: '<MkReactionsViewer.reaction />',
+	template: '<MkReactionsViewer_reaction />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index bcd2eddc66..8f3af87802 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		MkPageHeader_tabs,
 	},
-	template: '<MkPageHeader.tabs />',
+	template: '<MkPageHeader_tabs />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index 3e4b9cba6a..9e434e066c 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_block,
 	},
-	template: '<page.block />',
+	template: '<page_block />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 35140be3f8..0d536d7502 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_button,
 	},
-	template: '<page.button />',
+	template: '<page_button />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index 7a0350b247..1a79be9bd0 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_canvas,
 	},
-	template: '<page.canvas />',
+	template: '<page_canvas />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index 22289bb079..5e808012f3 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_counter,
 	},
-	template: '<page.counter />',
+	template: '<page_counter />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index c286b9b100..a44906903b 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_if,
 	},
-	template: '<page.if />',
+	template: '<page_if />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index 76c5f448fc..68bd435e1c 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_image,
 	},
-	template: '<page.image />',
+	template: '<page_image />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 7cd6253e11..00c036fad1 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_note,
 	},
-	template: '<page.note />',
+	template: '<page_note />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index f114ea4f64..cd04c9c7ac 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_number_input,
 	},
-	template: '<page.number-input />',
+	template: '<page_number_input />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index f3320c8e06..89bb72e178 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_post,
 	},
-	template: '<page.post />',
+	template: '<page_post />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 860cd5eb13..59dd32357e 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_radio_button,
 	},
-	template: '<page.radio-button />',
+	template: '<page_radio_button />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index 992b9d5a42..e31b612db6 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_section,
 	},
-	template: '<page.section />',
+	template: '<page_section />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index d90c74d761..05f5b14947 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_switch,
 	},
-	template: '<page.switch />',
+	template: '<page_switch />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index 897c6ea2fd..2e063ed14c 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_text_input,
 	},
-	template: '<page.text-input />',
+	template: '<page_text_input />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index cb88a35983..6eabcb3da8 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_text,
 	},
-	template: '<page.text />',
+	template: '<page_text />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index 0dcef76a40..3c392ed6fe 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_textarea_input,
 	},
-	template: '<page.textarea-input />',
+	template: '<page_textarea_input />',
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index 148c48df02..a09b134031 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_textarea,
 	},
-	template: '<page.textarea />',
+	template: '<page_textarea />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index b37c88e75b..4cf759246c 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		about_misskey,
 	},
-	template: '<about-misskey />',
+	template: '<about_misskey />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index f5c0504864..88cae1d4de 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		about_emojis,
 	},
-	template: '<about.emojis />',
+	template: '<about_emojis />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index 697beb6a28..75875ce589 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		about_federation,
 	},
-	template: '<about.federation />',
+	template: '<about_federation />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index 8403abb5d4..3a59d5ba7b 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		admin_file,
 	},
-	template: '<admin-file />',
+	template: '<admin_file />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index 5c02a7060c..d5369f1fa4 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		bot_protection,
 	},
-	template: '<bot-protection />',
+	template: '<bot_protection />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index c89b2e4671..ad094e5140 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		email_settings,
 	},
-	template: '<email-settings />',
+	template: '<email_settings />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index 4051f02919..5186eb4dfc 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		instance_block,
 	},
-	template: '<instance-block />',
+	template: '<instance_block />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index c85f0a3b28..ab971197e9 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		object_storage,
 	},
-	template: '<object-storage />',
+	template: '<object_storage />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index 44f4fb2e7a..20c422c58a 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		other_settings,
 	},
-	template: '<other-settings />',
+	template: '<other_settings />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index e8921b87be..ac1628f3d2 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_active_users,
 	},
-	template: '<overview.active-users />',
+	template: '<overview_active_users />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index a5749b5229..ed74ab698e 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_ap_requests,
 	},
-	template: '<overview.ap-requests />',
+	template: '<overview_ap_requests />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index f41761150f..e3c6d7d64b 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_federation,
 	},
-	template: '<overview.federation />',
+	template: '<overview_federation />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index 51f0ce2348..106f78fb28 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_heatmap,
 	},
-	template: '<overview.heatmap />',
+	template: '<overview_heatmap />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index 410c3350bb..77830053dd 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_instances,
 	},
-	template: '<overview.instances />',
+	template: '<overview_instances />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index 2998373fe0..973b8e4a07 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_moderators,
 	},
-	template: '<overview.moderators />',
+	template: '<overview_moderators />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index 94571e9c7f..20dcddea66 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_pie,
 	},
-	template: '<overview.pie />',
+	template: '<overview_pie />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index 31e1f728be..322588f294 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_queue_chart,
 	},
-	template: '<overview.queue.chart />',
+	template: '<overview_queue_chart />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index 21c4d204ba..4906cef135 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_queue,
 	},
-	template: '<overview.queue />',
+	template: '<overview_queue />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index 5200769a1c..74157b991c 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_retention,
 	},
-	template: '<overview.retention />',
+	template: '<overview_retention />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 3113e5043b..4042b7ae90 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_stats,
 	},
-	template: '<overview.stats />',
+	template: '<overview_stats />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 4f43cf79d2..05fb8e1318 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		overview_users,
 	},
-	template: '<overview.users />',
+	template: '<overview_users />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 71edbea071..00a645b0ec 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		proxy_account,
 	},
-	template: '<proxy-account />',
+	template: '<proxy_account />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 691f032689..0a853bd7f5 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		queue_chart_chart,
 	},
-	template: '<queue.chart.chart />',
+	template: '<queue_chart_chart />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index d9c71790ea..e1523a1cab 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		queue_chart,
 	},
-	template: '<queue.chart />',
+	template: '<queue_chart />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index e562a223d5..7a17ea360e 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		roles_edit,
 	},
-	template: '<roles.edit />',
+	template: '<roles_edit />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index 4a3ed50157..fdba287e01 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		roles_editor,
 	},
-	template: '<roles.editor />',
+	template: '<roles_editor />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index b2a28736b7..6be5d3261d 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		roles_role,
 	},
-	template: '<roles.role />',
+	template: '<roles_role />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index 39fba9b1bc..31e417bb25 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		antenna_timeline,
 	},
-	template: '<antenna-timeline />',
+	template: '<antenna_timeline />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index adb6440050..bf0fdc8120 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		api_console,
 	},
-	template: '<api-console />',
+	template: '<api_console />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 19134f4539..041ad69a92 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		auth_form,
 	},
-	template: '<auth.form />',
+	template: '<auth_form />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index 4df2f4c0f1..7e383b18b3 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		channel_editor,
 	},
-	template: '<channel-editor />',
+	template: '<channel_editor />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 89017a590b..3b78a49aa7 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		custom_emojis_manager,
 	},
-	template: '<custom-emojis-manager />',
+	template: '<custom_emojis_manager />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index 8dae3f3f56..d56a698269 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		emoji_edit_dialog,
 	},
-	template: '<emoji-edit-dialog />',
+	template: '<emoji_edit_dialog />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index bd3644d079..54fa1569b6 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		emojis_emoji,
 	},
-	template: '<emojis.emoji />',
+	template: '<emojis_emoji />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index 4626c861df..1c44df5703 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		explore_featured,
 	},
-	template: '<explore.featured />',
+	template: '<explore_featured />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index e00f33b935..0039f0f6ce 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		explore_roles,
 	},
-	template: '<explore.roles />',
+	template: '<explore_roles />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index 75b5457092..c50ff656e7 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		explore_users,
 	},
-	template: '<explore.users />',
+	template: '<explore_users />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index 60449be06e..eabf25fb74 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		flash_edit,
 	},
-	template: '<flash-edit />',
+	template: '<flash_edit />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 0ac5152247..93cfd5ce79 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		flash_index,
 	},
-	template: '<flash-index />',
+	template: '<flash_index />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index 3d88533133..c7def2cbdf 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		follow_requests,
 	},
-	template: '<follow-requests />',
+	template: '<follow_requests />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index 82f9806560..43ccada6bf 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		instance_info,
 	},
-	template: '<instance-info />',
+	template: '<instance_info />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index 5c8a643694..a7f237b530 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		not_found,
 	},
-	template: '<not-found />',
+	template: '<not_found />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 1f62bdc2ce..420dbf528a 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_el_image,
 	},
-	template: '<page-editor.el.image />',
+	template: '<page_editor_el_image />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 363bc343be..7a5f6fc3f7 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_el_note,
 	},
-	template: '<page-editor.el.note />',
+	template: '<page_editor_el_note />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index 77bd89228a..51be8d07d6 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_el_section,
 	},
-	template: '<page-editor.el.section />',
+	template: '<page_editor_el_section />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index ec795bf13c..b6dc3a76e4 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_el_text,
 	},
-	template: '<page-editor.el.text />',
+	template: '<page_editor_el_text />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index 9bc66bfa36..ddfc0a3f45 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_blocks,
 	},
-	template: '<page-editor.blocks />',
+	template: '<page_editor_blocks />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 32a0ca5026..35aeb5747c 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor_container,
 	},
-	template: '<page-editor.container />',
+	template: '<page_editor_container />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index facfd7ba2a..be9c62c03c 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		page_editor,
 	},
-	template: '<page-editor />',
+	template: '<page_editor />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 14097653dc..436de31edf 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		registry_keys,
 	},
-	template: '<registry.keys />',
+	template: '<registry_keys />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index 6d5b3c4bb5..667ddab8d4 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		registry_value,
 	},
-	template: '<registry.value />',
+	template: '<registry_value />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index a5cd75de4a..cc8fd62bc7 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		reset_password,
 	},
-	template: '<reset-password />',
+	template: '<reset_password />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index 0e37c0bcb2..2d7f50c1bd 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		_2fa_qrdialog,
 	},
-	template: '<2fa.qrdialog />',
+	template: '<_2fa_qrdialog />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 583dddd6d9..5543b40262 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		_2fa,
 	},
-	template: '<2fa />',
+	template: '<_2fa />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index 87abcbc836..79b43f9efb 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		account_info,
 	},
-	template: '<account-info />',
+	template: '<account_info />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index 6feb108af4..60f876ecd4 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		custom_css,
 	},
-	template: '<custom-css />',
+	template: '<custom_css />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index 330c2ef631..5f56fb7689 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		delete_account,
 	},
-	template: '<delete-account />',
+	template: '<delete_account />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index c8a2715d20..75ad8eb1bd 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		import_export,
 	},
-	template: '<import-export />',
+	template: '<import_export />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index 4d8d007948..c0ef252ccd 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		instance_mute,
 	},
-	template: '<instance-mute />',
+	template: '<instance_mute />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index 4f5fae2517..9001b89604 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		mute_block,
 	},
-	template: '<mute-block />',
+	template: '<mute_block />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index 3d477a3b64..851bc85a8b 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		plugin_install,
 	},
-	template: '<plugin.install />',
+	template: '<plugin_install />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 724e0f0041..69921e6e8e 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		preferences_backups,
 	},
-	template: '<preferences-backups />',
+	template: '<preferences_backups />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index 1e47a2c37c..4302450ff9 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		sounds_sound,
 	},
-	template: '<sounds.sound />',
+	template: '<sounds_sound />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 0f9e159fee..83e18810cc 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		statusbar_statusbar,
 	},
-	template: '<statusbar.statusbar />',
+	template: '<statusbar_statusbar />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index 8762c63536..0fc3e81fc6 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		theme_install,
 	},
-	template: '<theme.install />',
+	template: '<theme_install />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index 65659036ab..ea163f7c37 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		theme_manage,
 	},
-	template: '<theme.manage />',
+	template: '<theme_manage />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index 0d584b77d2..932d9f4b73 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		webhook_edit,
 	},
-	template: '<webhook.edit />',
+	template: '<webhook_edit />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index 483e64cbfa..bbd081c58f 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		webhook_new,
 	},
-	template: '<webhook.new />',
+	template: '<webhook_new />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index 26fc2edd94..0fd4012c9c 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		word_mute,
 	},
-	template: '<word-mute />',
+	template: '<word_mute />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index 2af4fa8801..32b1aaa25c 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		signup_complete,
 	},
-	template: '<signup-complete />',
+	template: '<signup_complete />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index 9f71a22d21..a506382368 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		theme_editor,
 	},
-	template: '<theme-editor />',
+	template: '<theme_editor />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index 7c8f5caaaf..97f2bcfe43 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		timeline_tutorial,
 	},
-	template: '<timeline.tutorial />',
+	template: '<timeline_tutorial />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index 79c6ecd18d..e4c45fcfee 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		user_info,
 	},
-	template: '<user-info />',
+	template: '<user_info />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index 89cc0f6978..9750e3ef7d 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		user_list_timeline,
 	},
-	template: '<user-list-timeline />',
+	template: '<user_list_timeline />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 4aa1cb2e89..9054c27c37 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		user_tag,
 	},
-	template: '<user-tag />',
+	template: '<user_tag />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index ee472fd466..ce54eae0d6 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		activity_following,
 	},
-	template: '<activity.following />',
+	template: '<activity_following />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 13ffbe9b57..42609d780b 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		activity_heatmap,
 	},
-	template: '<activity.heatmap />',
+	template: '<activity_heatmap />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index 5a4dde42e5..7e36c3e090 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		activity_notes,
 	},
-	template: '<activity.notes />',
+	template: '<activity_notes />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index c74d62ce2b..c28ff429f4 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		activity_pv,
 	},
-	template: '<activity.pv />',
+	template: '<activity_pv />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index 48cfbe9cad..3f915228fe 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		follow_list,
 	},
-	template: '<follow-list />',
+	template: '<follow_list />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index 7426040d5b..8739405b1d 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		index_activity,
 	},
-	template: '<index.activity />',
+	template: '<index_activity />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index 26debd437d..1457d03ca5 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		index_photos,
 	},
-	template: '<index.photos />',
+	template: '<index_photos />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index 580f98f183..e22b0ba9dd 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		index_timeline,
 	},
-	template: '<index.timeline />',
+	template: '<index_timeline />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index 41b134bba6..81a558152c 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		welcome_entrance_a,
 	},
-	template: '<welcome.entrance.a />',
+	template: '<welcome_entrance_a />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index 9a8fbe5420..ce78d27580 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		welcome_entrance_b,
 	},
-	template: '<welcome.entrance.b />',
+	template: '<welcome_entrance_b />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index fb54919cd6..c9574fbd22 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		welcome_entrance_c,
 	},
-	template: '<welcome.entrance.c />',
+	template: '<welcome_entrance_c />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index 5e50f1670c..d47ceee59f 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		welcome_setup,
 	},
-	template: '<welcome.setup />',
+	template: '<welcome_setup />',
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index b9ec527a7b..f7bc3c5772 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		welcome_timeline,
 	},
-	template: '<welcome.timeline />',
+	template: '<welcome_timeline />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index 722b1fb7b4..b3e3e54ebe 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		navbar_for_mobile,
 	},
-	template: '<navbar-for-mobile />',
+	template: '<navbar_for_mobile />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index c918bcf0a3..c23271862b 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		statusbar_federation,
 	},
-	template: '<statusbar-federation />',
+	template: '<statusbar_federation />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index 5366e645e7..bc6e39c7ba 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		statusbar_rss,
 	},
-	template: '<statusbar-rss />',
+	template: '<statusbar_rss />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index e3fe7370d1..c051f20e15 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		statusbar_user_list,
 	},
-	template: '<statusbar-user-list />',
+	template: '<statusbar_user_list />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index e1dec78486..f1461098cd 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		stream_indicator,
 	},
-	template: '<stream-indicator />',
+	template: '<stream_indicator />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index 7e3e6f9006..899bcb27c0 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		classic_header,
 	},
-	template: '<classic.header />',
+	template: '<classic_header />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index 479dfb7396..c4a231b895 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		classic_sidebar,
 	},
-	template: '<classic.sidebar />',
+	template: '<classic_sidebar />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index 02d469cd5e..b26c68a78d 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		antenna_column,
 	},
-	template: '<antenna-column />',
+	template: '<antenna_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index 8cef29f1d7..5c0074a8f3 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		channel_column,
 	},
-	template: '<channel-column />',
+	template: '<channel_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index f374d8adaf..09fe6da4c9 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		column_core,
 	},
-	template: '<column-core />',
+	template: '<column_core />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index b90fdef443..6566a55ead 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		direct_column,
 	},
-	template: '<direct-column />',
+	template: '<direct_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index f8874cae80..5edbb759e1 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		list_column,
 	},
-	template: '<list-column />',
+	template: '<list_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index 0667fd8bfc..19eb912fb5 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		main_column,
 	},
-	template: '<main-column />',
+	template: '<main_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index 3b44a28323..5f5db72f0c 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		mentions_column,
 	},
-	template: '<mentions-column />',
+	template: '<mentions_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index 07bb499e97..10c3c67dac 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		notifications_column,
 	},
-	template: '<notifications-column />',
+	template: '<notifications_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index 44a03581e1..b4167ea4b7 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		tl_column,
 	},
-	template: '<tl-column />',
+	template: '<tl_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index 8848e1fe5f..1b04f81ced 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		widgets_column,
 	},
-	template: '<widgets-column />',
+	template: '<widgets_column />',
 };
 export default meta;
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index 4c024e5362..fc8062d5cd 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		universal_widgets,
 	},
-	template: '<universal.widgets />',
+	template: '<universal_widgets />',
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index fc25eab6d8..5509f1261b 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		WidgetActivity_calendar,
 	},
-	template: '<WidgetActivity.calendar />',
+	template: '<WidgetActivity_calendar />',
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index 2923613159..f9739b636d 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		WidgetActivity_chart,
 	},
-	template: '<WidgetActivity.chart />',
+	template: '<WidgetActivity_chart />',
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 8150e38a0a..67906eaece 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -8,6 +8,6 @@ export const Default = {
 	components: {
 		cpu_mem,
 	},
-	template: '<cpu-mem />',
+	template: '<cpu_mem />',
 };
 export default meta;

From 0dcb99df193a687457dde5dfa471fb5d735451d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 14:56:34 +0900
Subject: [PATCH 03/99] build(#10336): load locales and vite config

---
 packages/frontend/.gitignore                  |  1 +
 packages/frontend/.storybook/.gitignore       |  3 ++
 packages/frontend/.storybook/generate.tsx     | 28 +++++++++++++++----
 packages/frontend/.storybook/main.ts          | 17 +++++++++--
 .../frontend/.storybook/preload-locale.ts     |  9 ++++++
 packages/frontend/.storybook/preview.ts       | 18 ++++++++++--
 .../src/components/MkAbuseReport.stories.ts   |  3 ++
 .../components/MkAbuseReportWindow.stories.ts |  3 ++
 .../src/components/MkAchievements.stories.ts  |  3 ++
 .../src/components/MkAnalogClock.stories.ts   |  3 ++
 .../frontend/src/components/MkAsUi.stories.ts |  3 ++
 .../src/components/MkAutocomplete.stories.ts  |  3 ++
 .../src/components/MkAvatars.stories.ts       |  3 ++
 .../src/components/MkButton.stories.ts        |  3 ++
 .../src/components/MkCaptcha.stories.ts       |  3 ++
 .../MkChannelFollowButton.stories.ts          |  3 ++
 .../components/MkChannelPreview.stories.ts    |  3 ++
 .../src/components/MkChart.stories.ts         |  3 ++
 .../src/components/MkChartLegend.stories.ts   |  3 ++
 .../src/components/MkChartTooltip.stories.ts  |  3 ++
 .../src/components/MkCheckbox.stories.ts      |  3 ++
 .../src/components/MkClickerGame.stories.ts   |  3 ++
 .../src/components/MkClipPreview.stories.ts   |  3 ++
 .../src/components/MkCode.core.stories.ts     |  3 ++
 .../frontend/src/components/MkCode.stories.ts |  3 ++
 .../src/components/MkContainer.stories.ts     |  3 ++
 .../src/components/MkContextMenu.stories.ts   |  3 ++
 .../src/components/MkCropperDialog.stories.ts |  3 ++
 .../src/components/MkCwButton.stories.ts      |  3 ++
 .../components/MkDateSeparatedList.stories.ts |  3 ++
 .../src/components/MkDialog.stories.ts        |  3 ++
 .../src/components/MkDigitalClock.stories.ts  |  3 ++
 .../src/components/MkDonation.stories.ts      |  3 ++
 .../src/components/MkDrive.file.stories.ts    |  3 ++
 .../src/components/MkDrive.folder.stories.ts  |  3 ++
 .../components/MkDrive.navFolder.stories.ts   |  3 ++
 .../src/components/MkDrive.stories.ts         |  3 ++
 .../MkDriveFileThumbnail.stories.ts           |  3 ++
 .../components/MkDriveSelectDialog.stories.ts |  3 ++
 .../src/components/MkDriveWindow.stories.ts   |  3 ++
 .../MkEmojiPicker.section.stories.ts          |  3 ++
 .../src/components/MkEmojiPicker.stories.ts   |  3 ++
 .../components/MkEmojiPickerDialog.stories.ts |  3 ++
 .../components/MkEmojiPickerWindow.stories.ts |  3 ++
 .../components/MkFeaturedPhotos.stories.ts    |  3 ++
 .../MkFileCaptionEditWindow.stories.ts        |  3 ++
 .../components/MkFileListForAdmin.stories.ts  |  3 ++
 .../src/components/MkFlashPreview.stories.ts  |  3 ++
 .../components/MkFoldableSection.stories.ts   |  3 ++
 .../src/components/MkFolder.stories.ts        |  3 ++
 .../src/components/MkFollowButton.stories.ts  |  3 ++
 .../components/MkForgotPassword.stories.ts    |  3 ++
 .../src/components/MkFormDialog.stories.ts    |  3 ++
 .../MkGalleryPostPreview.stories.ts           |  3 ++
 .../src/components/MkGoogle.stories.ts        |  3 ++
 .../src/components/MkHeatmap.stories.ts       |  3 ++
 .../src/components/MkImageViewer.stories.ts   |  3 ++
 .../components/MkImgWithBlurhash.stories.ts   |  3 ++
 .../frontend/src/components/MkInfo.stories.ts |  3 ++
 .../src/components/MkInput.stories.ts         |  3 ++
 .../components/MkInstanceCardMini.stories.ts  |  3 ++
 .../src/components/MkInstanceStats.stories.ts |  3 ++
 .../components/MkInstanceTicker.stories.ts    |  3 ++
 .../src/components/MkKeyValue.stories.ts      |  3 ++
 .../src/components/MkLaunchPad.stories.ts     |  3 ++
 .../frontend/src/components/MkLink.stories.ts |  3 ++
 .../src/components/MkMarquee.stories.ts       |  3 ++
 .../src/components/MkMediaBanner.stories.ts   |  3 ++
 .../src/components/MkMediaImage.stories.ts    |  3 ++
 .../src/components/MkMediaList.stories.ts     |  3 ++
 .../src/components/MkMediaVideo.stories.ts    |  3 ++
 .../src/components/MkMention.stories.ts       |  3 ++
 .../src/components/MkMenu.child.stories.ts    |  3 ++
 .../frontend/src/components/MkMenu.stories.ts |  3 ++
 .../src/components/MkMiniChart.stories.ts     |  3 ++
 .../src/components/MkModal.stories.ts         |  3 ++
 .../components/MkModalPageWindow.stories.ts   |  3 ++
 .../src/components/MkModalWindow.stories.ts   |  3 ++
 .../frontend/src/components/MkNote.stories.ts |  3 ++
 .../src/components/MkNoteDetailed.stories.ts  |  3 ++
 .../src/components/MkNoteHeader.stories.ts    |  3 ++
 .../src/components/MkNotePreview.stories.ts   |  3 ++
 .../src/components/MkNoteSimple.stories.ts    |  3 ++
 .../src/components/MkNoteSub.stories.ts       |  3 ++
 .../src/components/MkNotes.stories.ts         |  3 ++
 .../src/components/MkNotification.stories.ts  |  3 ++
 .../MkNotificationSettingWindow.stories.ts    |  3 ++
 .../src/components/MkNotifications.stories.ts |  3 ++
 .../src/components/MkNumber.stories.ts        |  3 ++
 .../src/components/MkNumberDiff.stories.ts    |  3 ++
 .../src/components/MkObjectView.stories.ts    |  3 ++
 .../components/MkObjectView.value.stories.ts  |  3 ++
 .../frontend/src/components/MkOmit.stories.ts |  3 ++
 .../src/components/MkPagePreview.stories.ts   |  3 ++
 .../src/components/MkPageWindow.stories.ts    |  3 ++
 .../src/components/MkPagination.stories.ts    |  3 ++
 .../src/components/MkPlusOneEffect.stories.ts |  3 ++
 .../frontend/src/components/MkPoll.stories.ts |  3 ++
 .../src/components/MkPollEditor.stories.ts    |  3 ++
 .../src/components/MkPopupMenu.stories.ts     |  3 ++
 .../src/components/MkPostForm.stories.ts      |  3 ++
 .../components/MkPostFormAttaches.stories.ts  |  3 ++
 .../components/MkPostFormDialog.stories.ts    |  3 ++
 .../MkPushNotificationAllowButton.stories.ts  |  3 ++
 .../src/components/MkRadio.stories.ts         |  3 ++
 .../src/components/MkRadios.stories.ts        |  3 ++
 .../src/components/MkRange.stories.ts         |  3 ++
 .../MkReactedUsersDialog.stories.ts           |  3 ++
 .../components/MkReactionEffect.stories.ts    |  3 ++
 .../src/components/MkReactionIcon.stories.ts  |  3 ++
 .../components/MkReactionTooltip.stories.ts   |  3 ++
 .../MkReactionsViewer.details.stories.ts      |  3 ++
 .../MkReactionsViewer.reaction.stories.ts     |  3 ++
 .../components/MkReactionsViewer.stories.ts   |  3 ++
 .../src/components/MkRemoteCaution.stories.ts |  3 ++
 .../components/MkRetentionHeatmap.stories.ts  |  3 ++
 .../src/components/MkRippleEffect.stories.ts  |  3 ++
 .../src/components/MkRolePreview.stories.ts   |  3 ++
 .../src/components/MkSample.stories.ts        |  3 ++
 .../src/components/MkSelect.stories.ts        |  3 ++
 .../src/components/MkSignin.stories.ts        |  3 ++
 .../src/components/MkSigninDialog.stories.ts  |  3 ++
 .../src/components/MkSignup.stories.ts        |  3 ++
 .../src/components/MkSignupDialog.stories.ts  |  3 ++
 .../src/components/MkSparkle.stories.ts       |  3 ++
 .../components/MkSubNoteContent.stories.ts    |  3 ++
 .../src/components/MkSuperMenu.stories.ts     |  3 ++
 .../src/components/MkSwitch.stories.ts        |  3 ++
 .../frontend/src/components/MkTab.stories.ts  |  3 ++
 .../src/components/MkTagCloud.stories.ts      |  3 ++
 .../src/components/MkTextarea.stories.ts      |  3 ++
 .../src/components/MkTimeline.stories.ts      |  3 ++
 .../src/components/MkToast.stories.ts         |  3 ++
 .../MkTokenGenerateWindow.stories.ts          |  3 ++
 .../src/components/MkTooltip.stories.ts       |  3 ++
 .../src/components/MkUpdated.stories.ts       |  3 ++
 .../src/components/MkUrlPreview.stories.ts    |  3 ++
 .../components/MkUrlPreviewPopup.stories.ts   |  3 ++
 .../src/components/MkUserCardMini.stories.ts  |  3 ++
 .../src/components/MkUserInfo.stories.ts      |  3 ++
 .../src/components/MkUserList.stories.ts      |  3 ++
 .../MkUserOnlineIndicator.stories.ts          |  3 ++
 .../src/components/MkUserPopup.stories.ts     |  3 ++
 .../components/MkUserSelectDialog.stories.ts  |  3 ++
 .../src/components/MkUsersTooltip.stories.ts  |  3 ++
 .../components/MkVisibilityPicker.stories.ts  |  3 ++
 .../src/components/MkWaitingDialog.stories.ts |  3 ++
 .../src/components/MkWidgets.stories.ts       |  3 ++
 .../src/components/MkWindow.stories.ts        |  3 ++
 .../src/components/MkYoutubePlayer.stories.ts |  3 ++
 .../src/components/form/link.stories.ts       |  3 ++
 .../src/components/form/section.stories.ts    |  3 ++
 .../src/components/form/slot.stories.ts       |  3 ++
 .../src/components/form/split.stories.ts      |  3 ++
 .../src/components/form/suspense.stories.ts   |  3 ++
 .../src/components/global/MkA.stories.ts      |  3 ++
 .../src/components/global/MkAcct.stories.ts   |  3 ++
 .../src/components/global/MkAd.stories.ts     |  3 ++
 .../src/components/global/MkAvatar.stories.ts |  3 ++
 .../global/MkCustomEmoji.stories.ts           |  3 ++
 .../components/global/MkEllipsis.stories.ts   |  3 ++
 .../src/components/global/MkEmoji.stories.ts  |  3 ++
 .../src/components/global/MkError.stories.ts  |  3 ++
 .../components/global/MkLoading.stories.ts    |  3 ++
 .../MkMisskeyFlavoredMarkdown.stories.ts      |  3 ++
 .../components/global/MkPageHeader.stories.ts |  3 ++
 .../global/MkPageHeader.tabs.stories.ts       |  3 ++
 .../src/components/global/MkSpacer.stories.ts |  3 ++
 .../global/MkStickyContainer.stories.ts       |  3 ++
 .../src/components/global/MkTime.stories.ts   |  3 ++
 .../src/components/global/MkUrl.stories.ts    |  3 ++
 .../components/global/MkUserName.stories.ts   |  3 ++
 .../components/global/RouterView.stories.ts   |  3 ++
 .../src/components/page/page.block.stories.ts |  3 ++
 .../components/page/page.button.stories.ts    |  3 ++
 .../components/page/page.canvas.stories.ts    |  3 ++
 .../components/page/page.counter.stories.ts   |  3 ++
 .../src/components/page/page.if.stories.ts    |  3 ++
 .../src/components/page/page.image.stories.ts |  3 ++
 .../src/components/page/page.note.stories.ts  |  3 ++
 .../page/page.number-input.stories.ts         |  3 ++
 .../src/components/page/page.post.stories.ts  |  3 ++
 .../page/page.radio-button.stories.ts         |  3 ++
 .../components/page/page.section.stories.ts   |  3 ++
 .../src/components/page/page.stories.ts       |  3 ++
 .../components/page/page.switch.stories.ts    |  3 ++
 .../page/page.text-input.stories.ts           |  3 ++
 .../src/components/page/page.text.stories.ts  |  3 ++
 .../page/page.textarea-input.stories.ts       |  3 ++
 .../components/page/page.textarea.stories.ts  |  3 ++
 .../frontend/src/pages/_empty_.stories.ts     |  3 ++
 .../frontend/src/pages/_error_.stories.ts     |  3 ++
 .../frontend/src/pages/_loading_.stories.ts   |  3 ++
 .../src/pages/about-misskey.stories.ts        |  3 ++
 .../src/pages/about.emojis.stories.ts         |  3 ++
 .../src/pages/about.federation.stories.ts     |  3 ++
 packages/frontend/src/pages/about.stories.ts  |  3 ++
 .../src/pages/achievements.stories.ts         |  3 ++
 .../frontend/src/pages/admin-file.stories.ts  |  3 ++
 .../pages/admin/RolesEditorFormula.stories.ts |  3 ++
 .../src/pages/admin/_header_.stories.ts       |  3 ++
 .../src/pages/admin/abuses.stories.ts         |  3 ++
 .../frontend/src/pages/admin/ads.stories.ts   |  3 ++
 .../src/pages/admin/announcements.stories.ts  |  3 ++
 .../src/pages/admin/bot-protection.stories.ts |  3 ++
 .../src/pages/admin/database.stories.ts       |  3 ++
 .../src/pages/admin/email-settings.stories.ts |  3 ++
 .../src/pages/admin/federation.stories.ts     |  3 ++
 .../frontend/src/pages/admin/files.stories.ts |  3 ++
 .../frontend/src/pages/admin/index.stories.ts |  3 ++
 .../src/pages/admin/instance-block.stories.ts |  3 ++
 .../src/pages/admin/moderation.stories.ts     |  3 ++
 .../src/pages/admin/object-storage.stories.ts |  3 ++
 .../src/pages/admin/other-settings.stories.ts |  3 ++
 .../admin/overview.active-users.stories.ts    |  3 ++
 .../admin/overview.ap-requests.stories.ts     |  3 ++
 .../admin/overview.federation.stories.ts      |  3 ++
 .../pages/admin/overview.heatmap.stories.ts   |  3 ++
 .../pages/admin/overview.instances.stories.ts |  3 ++
 .../admin/overview.moderators.stories.ts      |  3 ++
 .../src/pages/admin/overview.pie.stories.ts   |  3 ++
 .../admin/overview.queue.chart.stories.ts     |  3 ++
 .../src/pages/admin/overview.queue.stories.ts |  3 ++
 .../pages/admin/overview.retention.stories.ts |  3 ++
 .../src/pages/admin/overview.stats.stories.ts |  3 ++
 .../src/pages/admin/overview.stories.ts       |  3 ++
 .../src/pages/admin/overview.users.stories.ts |  3 ++
 .../src/pages/admin/proxy-account.stories.ts  |  3 ++
 .../pages/admin/queue.chart.chart.stories.ts  |  3 ++
 .../src/pages/admin/queue.chart.stories.ts    |  3 ++
 .../frontend/src/pages/admin/queue.stories.ts |  3 ++
 .../src/pages/admin/relays.stories.ts         |  3 ++
 .../src/pages/admin/roles.edit.stories.ts     |  3 ++
 .../src/pages/admin/roles.editor.stories.ts   |  3 ++
 .../src/pages/admin/roles.role.stories.ts     |  3 ++
 .../frontend/src/pages/admin/roles.stories.ts |  3 ++
 .../src/pages/admin/security.stories.ts       |  3 ++
 .../src/pages/admin/settings.stories.ts       |  3 ++
 .../frontend/src/pages/admin/users.stories.ts |  3 ++
 packages/frontend/src/pages/ads.stories.ts    |  3 ++
 .../src/pages/announcements.stories.ts        |  3 ++
 .../src/pages/antenna-timeline.stories.ts     |  3 ++
 .../frontend/src/pages/api-console.stories.ts |  3 ++
 .../frontend/src/pages/auth.form.stories.ts   |  3 ++
 packages/frontend/src/pages/auth.stories.ts   |  3 ++
 .../src/pages/channel-editor.stories.ts       |  3 ++
 .../frontend/src/pages/channel.stories.ts     |  3 ++
 .../frontend/src/pages/channels.stories.ts    |  3 ++
 .../frontend/src/pages/clicker.stories.ts     |  3 ++
 packages/frontend/src/pages/clip.stories.ts   |  3 ++
 .../pages/custom-emojis-manager.stories.ts    |  3 ++
 packages/frontend/src/pages/drive.stories.ts  |  3 ++
 .../src/pages/emoji-edit-dialog.stories.ts    |  3 ++
 .../src/pages/emojis.emoji.stories.ts         |  3 ++
 .../src/pages/explore.featured.stories.ts     |  3 ++
 .../src/pages/explore.roles.stories.ts        |  3 ++
 .../frontend/src/pages/explore.stories.ts     |  3 ++
 .../src/pages/explore.users.stories.ts        |  3 ++
 .../frontend/src/pages/favorites.stories.ts   |  3 ++
 .../src/pages/flash/flash-edit.stories.ts     |  3 ++
 .../src/pages/flash/flash-index.stories.ts    |  3 ++
 .../frontend/src/pages/flash/flash.stories.ts |  3 ++
 .../src/pages/follow-requests.stories.ts      |  3 ++
 packages/frontend/src/pages/follow.stories.ts |  3 ++
 .../src/pages/gallery/edit.stories.ts         |  3 ++
 .../src/pages/gallery/index.stories.ts        |  3 ++
 .../src/pages/gallery/post.stories.ts         |  3 ++
 .../src/pages/instance-info.stories.ts        |  3 ++
 packages/frontend/src/pages/miauth.stories.ts |  3 ++
 .../src/pages/my-antennas/create.stories.ts   |  3 ++
 .../src/pages/my-antennas/edit.stories.ts     |  3 ++
 .../src/pages/my-antennas/editor.stories.ts   |  3 ++
 .../src/pages/my-antennas/index.stories.ts    |  3 ++
 .../src/pages/my-clips/index.stories.ts       |  3 ++
 .../src/pages/my-lists/index.stories.ts       |  3 ++
 .../src/pages/my-lists/list.stories.ts        |  3 ++
 .../frontend/src/pages/not-found.stories.ts   |  3 ++
 packages/frontend/src/pages/note.stories.ts   |  3 ++
 .../src/pages/notifications.stories.ts        |  3 ++
 .../els/page-editor.el.image.stories.ts       |  3 ++
 .../els/page-editor.el.note.stories.ts        |  3 ++
 .../els/page-editor.el.section.stories.ts     |  3 ++
 .../els/page-editor.el.text.stories.ts        |  3 ++
 .../page-editor/page-editor.blocks.stories.ts |  3 ++
 .../page-editor.container.stories.ts          |  3 ++
 .../pages/page-editor/page-editor.stories.ts  |  3 ++
 packages/frontend/src/pages/page.stories.ts   |  3 ++
 packages/frontend/src/pages/pages.stories.ts  |  3 ++
 .../frontend/src/pages/preview.stories.ts     |  3 ++
 .../src/pages/registry.keys.stories.ts        |  3 ++
 .../frontend/src/pages/registry.stories.ts    |  3 ++
 .../src/pages/registry.value.stories.ts       |  3 ++
 .../src/pages/reset-password.stories.ts       |  3 ++
 packages/frontend/src/pages/role.stories.ts   |  3 ++
 .../frontend/src/pages/scratchpad.stories.ts  |  3 ++
 packages/frontend/src/pages/search.stories.ts |  3 ++
 .../pages/settings/2fa.qrdialog.stories.ts    |  3 ++
 .../src/pages/settings/2fa.stories.ts         |  3 ++
 .../pages/settings/account-info.stories.ts    |  3 ++
 .../src/pages/settings/accounts.stories.ts    |  3 ++
 .../src/pages/settings/api.stories.ts         |  3 ++
 .../src/pages/settings/apps.stories.ts        |  3 ++
 .../src/pages/settings/custom-css.stories.ts  |  3 ++
 .../src/pages/settings/deck.stories.ts        |  3 ++
 .../pages/settings/delete-account.stories.ts  |  3 ++
 .../src/pages/settings/drive.stories.ts       |  3 ++
 .../src/pages/settings/email.stories.ts       |  3 ++
 .../src/pages/settings/general.stories.ts     |  3 ++
 .../pages/settings/import-export.stories.ts   |  3 ++
 .../src/pages/settings/index.stories.ts       |  3 ++
 .../pages/settings/instance-mute.stories.ts   |  3 ++
 .../src/pages/settings/mute-block.stories.ts  |  3 ++
 .../src/pages/settings/navbar.stories.ts      |  3 ++
 .../pages/settings/notifications.stories.ts   |  3 ++
 .../src/pages/settings/other.stories.ts       |  3 ++
 .../pages/settings/plugin.install.stories.ts  |  3 ++
 .../src/pages/settings/plugin.stories.ts      |  3 ++
 .../settings/preferences-backups.stories.ts   |  3 ++
 .../src/pages/settings/privacy.stories.ts     |  3 ++
 .../src/pages/settings/profile.stories.ts     |  3 ++
 .../src/pages/settings/reaction.stories.ts    |  3 ++
 .../src/pages/settings/roles.stories.ts       |  3 ++
 .../src/pages/settings/security.stories.ts    |  3 ++
 .../pages/settings/sounds.sound.stories.ts    |  3 ++
 .../src/pages/settings/sounds.stories.ts      |  3 ++
 .../settings/statusbar.statusbar.stories.ts   |  3 ++
 .../src/pages/settings/statusbar.stories.ts   |  3 ++
 .../pages/settings/theme.install.stories.ts   |  3 ++
 .../pages/settings/theme.manage.stories.ts    |  3 ++
 .../src/pages/settings/theme.stories.ts       |  3 ++
 .../pages/settings/webhook.edit.stories.ts    |  3 ++
 .../src/pages/settings/webhook.new.stories.ts |  3 ++
 .../src/pages/settings/webhook.stories.ts     |  3 ++
 .../src/pages/settings/word-mute.stories.ts   |  3 ++
 packages/frontend/src/pages/share.stories.ts  |  3 ++
 .../src/pages/signup-complete.stories.ts      |  3 ++
 packages/frontend/src/pages/tag.stories.ts    |  3 ++
 .../src/pages/theme-editor.stories.ts         |  3 ++
 .../frontend/src/pages/timeline.stories.ts    |  3 ++
 .../src/pages/timeline.tutorial.stories.ts    |  3 ++
 .../frontend/src/pages/user-info.stories.ts   |  3 ++
 .../src/pages/user-list-timeline.stories.ts   |  3 ++
 .../frontend/src/pages/user-tag.stories.ts    |  3 ++
 .../src/pages/user/achievements.stories.ts    |  3 ++
 .../pages/user/activity.following.stories.ts  |  3 ++
 .../src/pages/user/activity.following.vue     |  2 +-
 .../pages/user/activity.heatmap.stories.ts    |  3 ++
 .../src/pages/user/activity.notes.stories.ts  |  3 ++
 .../src/pages/user/activity.notes.vue         |  2 +-
 .../src/pages/user/activity.pv.stories.ts     |  3 ++
 .../frontend/src/pages/user/activity.pv.vue   |  2 +-
 .../src/pages/user/activity.stories.ts        |  3 ++
 .../frontend/src/pages/user/clips.stories.ts  |  3 ++
 .../src/pages/user/follow-list.stories.ts     |  3 ++
 .../src/pages/user/followers.stories.ts       |  3 ++
 .../src/pages/user/following.stories.ts       |  3 ++
 .../src/pages/user/gallery.stories.ts         |  3 ++
 .../frontend/src/pages/user/home.stories.ts   |  3 ++
 .../src/pages/user/index.activity.stories.ts  |  3 ++
 .../src/pages/user/index.photos.stories.ts    |  3 ++
 .../frontend/src/pages/user/index.stories.ts  |  3 ++
 .../src/pages/user/index.timeline.stories.ts  |  3 ++
 .../frontend/src/pages/user/pages.stories.ts  |  3 ++
 .../src/pages/user/reactions.stories.ts       |  3 ++
 .../src/pages/welcome.entrance.a.stories.ts   |  3 ++
 .../src/pages/welcome.entrance.b.stories.ts   |  3 ++
 .../src/pages/welcome.entrance.c.stories.ts   |  3 ++
 .../src/pages/welcome.setup.stories.ts        |  3 ++
 .../frontend/src/pages/welcome.stories.ts     |  3 ++
 .../src/pages/welcome.timeline.stories.ts     |  3 ++
 packages/frontend/src/scripts/achievements.ts |  2 ++
 packages/frontend/src/scripts/i18n.ts         |  1 +
 .../src/ui/_common_/common.stories.ts         |  3 ++
 .../ui/_common_/navbar-for-mobile.stories.ts  |  3 ++
 .../src/ui/_common_/navbar.stories.ts         |  3 ++
 .../src/ui/_common_/notification.stories.ts   |  3 ++
 .../_common_/statusbar-federation.stories.ts  |  3 ++
 .../src/ui/_common_/statusbar-rss.stories.ts  |  3 ++
 .../_common_/statusbar-user-list.stories.ts   |  3 ++
 .../src/ui/_common_/statusbars.stories.ts     |  3 ++
 .../ui/_common_/stream-indicator.stories.ts   |  3 ++
 .../src/ui/_common_/upload.stories.ts         |  3 ++
 .../frontend/src/ui/classic.header.stories.ts |  3 ++
 .../src/ui/classic.sidebar.stories.ts         |  3 ++
 packages/frontend/src/ui/classic.stories.ts   |  3 ++
 packages/frontend/src/ui/deck.stories.ts      |  3 ++
 .../src/ui/deck/antenna-column.stories.ts     |  3 ++
 .../src/ui/deck/channel-column.stories.ts     |  3 ++
 .../src/ui/deck/column-core.stories.ts        |  3 ++
 .../frontend/src/ui/deck/column.stories.ts    |  3 ++
 .../src/ui/deck/direct-column.stories.ts      |  3 ++
 .../src/ui/deck/list-column.stories.ts        |  3 ++
 .../src/ui/deck/main-column.stories.ts        |  3 ++
 .../src/ui/deck/mentions-column.stories.ts    |  3 ++
 .../ui/deck/notifications-column.stories.ts   |  3 ++
 .../frontend/src/ui/deck/tl-column.stories.ts |  3 ++
 .../src/ui/deck/widgets-column.stories.ts     |  3 ++
 packages/frontend/src/ui/universal.stories.ts |  3 ++
 .../src/ui/universal.widgets.stories.ts       |  3 ++
 packages/frontend/src/ui/visitor.stories.ts   |  3 ++
 packages/frontend/src/ui/visitor/a.stories.ts |  3 ++
 packages/frontend/src/ui/visitor/b.stories.ts |  3 ++
 .../frontend/src/ui/visitor/header.stories.ts |  3 ++
 .../frontend/src/ui/visitor/kanban.stories.ts |  3 ++
 packages/frontend/src/ui/zen.stories.ts       |  3 ++
 .../WidgetActivity.calendar.stories.ts        |  3 ++
 .../widgets/WidgetActivity.chart.stories.ts   |  3 ++
 .../src/widgets/WidgetActivity.stories.ts     |  3 ++
 .../src/widgets/WidgetAichan.stories.ts       |  3 ++
 .../src/widgets/WidgetAiscript.stories.ts     |  3 ++
 .../src/widgets/WidgetAiscriptApp.stories.ts  |  3 ++
 .../src/widgets/WidgetButton.stories.ts       |  3 ++
 .../src/widgets/WidgetCalendar.stories.ts     |  3 ++
 .../src/widgets/WidgetClicker.stories.ts      |  3 ++
 .../src/widgets/WidgetClock.stories.ts        |  3 ++
 .../src/widgets/WidgetDigitalClock.stories.ts |  3 ++
 .../src/widgets/WidgetFederation.stories.ts   |  3 ++
 .../widgets/WidgetInstanceCloud.stories.ts    |  3 ++
 .../src/widgets/WidgetInstanceInfo.stories.ts |  3 ++
 .../src/widgets/WidgetJobQueue.stories.ts     |  3 ++
 .../src/widgets/WidgetMemo.stories.ts         |  3 ++
 .../widgets/WidgetNotifications.stories.ts    |  3 ++
 .../src/widgets/WidgetOnlineUsers.stories.ts  |  3 ++
 .../src/widgets/WidgetPhotos.stories.ts       |  3 ++
 .../src/widgets/WidgetPostForm.stories.ts     |  3 ++
 .../src/widgets/WidgetProfile.stories.ts      |  3 ++
 .../frontend/src/widgets/WidgetRss.stories.ts |  3 ++
 .../src/widgets/WidgetRssTicker.stories.ts    |  3 ++
 .../src/widgets/WidgetSlideshow.stories.ts    |  3 ++
 .../src/widgets/WidgetTimeline.stories.ts     |  3 ++
 .../src/widgets/WidgetTrends.stories.ts       |  3 ++
 .../src/widgets/WidgetUnixClock.stories.ts    |  3 ++
 .../src/widgets/WidgetUserList.stories.ts     |  3 ++
 .../widgets/server-metric/cpu-mem.stories.ts  |  3 ++
 .../src/widgets/server-metric/cpu.stories.ts  |  3 ++
 .../src/widgets/server-metric/disk.stories.ts |  3 ++
 .../widgets/server-metric/index.stories.ts    |  3 ++
 .../src/widgets/server-metric/mem.stories.ts  |  3 ++
 .../src/widgets/server-metric/net.stories.ts  |  3 ++
 .../src/widgets/server-metric/pie.stories.ts  |  3 ++
 packages/frontend/vite.config.ts              |  8 ++++--
 441 files changed, 1365 insertions(+), 15 deletions(-)
 create mode 100644 packages/frontend/.gitignore
 create mode 100644 packages/frontend/.storybook/preload-locale.ts

diff --git a/packages/frontend/.gitignore b/packages/frontend/.gitignore
new file mode 100644
index 0000000000..1aa0ac14e8
--- /dev/null
+++ b/packages/frontend/.gitignore
@@ -0,0 +1 @@
+/storybook-static
diff --git a/packages/frontend/.storybook/.gitignore b/packages/frontend/.storybook/.gitignore
index 456dd1c29f..a516a23411 100644
--- a/packages/frontend/.storybook/.gitignore
+++ b/packages/frontend/.storybook/.gitignore
@@ -1,5 +1,8 @@
 # (cd .; pnpm tsc --jsx react --jsxFactory h ./generate.tsx && node ./generate.js)
 /generate.js
+# (cd .; pnpm tsc ./preload-locale.ts && node ./preload-locale.js)
+/preload-locale.js
+/locale.ts
 # (cd .; pnpm tsc ./preload-theme.ts && node ./preload-theme.js)
 /preload-theme.js
 /theme.ts
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 189e611f72..eaca304554 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -11,13 +11,26 @@ function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>):
 	return Object.assign(props, { type }) as T;
 }
 
-function toStories(component: string, location: string): string {
+function toStories(component: string): string {
+	const base = basename(component);
+	const dir = dirname(component);
 	const literal = (
-		<literal value={join(location, component).slice(4, -4)} />
+		<literal value={component.slice('src/'.length, -'.vue'.length)} />
 	) as unknown as estree.Literal;
 	const identifier = (
-		<identifier name={component.slice(0, -4).replace(/[-.]|^(?=\d)/g, '_')} />
+		<identifier name={base.slice(0, -'.vue'.length).replace(/[-.]|^(?=\d)/g, '_')} />
 	) as unknown as estree.Identifier;
+	const parameters = (
+		<object-expression
+			properties={[
+				<property
+					key={<identifier name="layout" />}
+					value={<literal value={`${dir}/`.startsWith('src/pages/') || base === 'MkAnalogClock.vue' ? 'fullscreen' : 'centered'} />}
+					kind="init"
+				/>
+			]}
+		/>
+	);
 	const program = (
 		<program
 			body={[
@@ -35,7 +48,7 @@ function toStories(component: string, location: string): string {
 					]}
 				/>,
 				<import-declaration
-					source={<literal value={`./${component}`} />}
+					source={<literal value={`./${base}`} />}
 					specifiers={[
 						<import-default-specifier
 							local={identifier}
@@ -98,6 +111,11 @@ function toStories(component: string, location: string): string {
 													value={<literal value={`<${identifier.name} />`} />}
 													kind="init"
 												/>,
+												<property
+													key={<identifier name="parameters" />}
+													value={parameters}
+													kind="init"
+												/>,
 											]}
 										/>
 									}
@@ -128,7 +146,7 @@ promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then((components)
 		fs.stat(stories).then(
 			() => {},
 			() => {
-				fs.writeFile(stories, toStories(basename(component), dirname(component)));
+				fs.writeFile(stories, toStories(component));
 			}
 		);
 	})
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index b18956ee45..9cd74de519 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,5 +1,7 @@
 import type { StorybookConfig } from '@storybook/vue3-vite';
-const config: StorybookConfig = {
+import { mergeConfig } from 'vite';
+import { getConfig } from '../vite.config';
+const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
 		'@storybook/addon-links',
@@ -13,5 +15,16 @@ const config: StorybookConfig = {
 	docs: {
 		autodocs: 'tag',
 	},
-};
+	core: {
+		disableTelemetry: true,
+	},
+	async viteFinal(config, options) {
+		const { plugins, build: { rollupOptions, ...build }, ...original } = getConfig();
+		const x = mergeConfig(config, {
+			...original,
+			build,
+		});
+		return x;
+	},
+} satisfies StorybookConfig;
 export default config;
diff --git a/packages/frontend/.storybook/preload-locale.ts b/packages/frontend/.storybook/preload-locale.ts
new file mode 100644
index 0000000000..a54164742a
--- /dev/null
+++ b/packages/frontend/.storybook/preload-locale.ts
@@ -0,0 +1,9 @@
+import { writeFile } from 'node:fs/promises';
+import { resolve } from 'node:path';
+import * as locales from '../../../locales';
+
+writeFile(
+	resolve(__dirname, 'locale.ts'),
+	`export default ${JSON.stringify(locales['ja-JP'], undefined, 2)} as const;`,
+	'utf8',
+)
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 78d408499f..40b6ea0fb0 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,9 +1,21 @@
-import type { Preview } from '@storybook/vue3';
-import { applyTheme } from '../src/scripts/theme';
+import { type Preview, setup } from '@storybook/vue3';
+import locale from './locale';
 import theme from './theme';
 import '../src/style.scss';
 
-applyTheme(theme);
+localStorage.setItem("locale", JSON.stringify(locale));
+Promise.all([
+	import('../src/components'),
+	import('../src/directives'),
+	import('../src/widgets'),
+	import('../src/scripts/theme').then(({ applyTheme }) => applyTheme(theme)),
+]).then(([{ default: components }, { default: directives }, { default: widgets }]) => {
+	setup((app) => {
+		components(app);
+		directives(app);
+		widgets(app);
+	});
+})
 
 const preview = {
 	parameters: {
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
index 5c2c40b4b3..4b02967692 100644
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAbuseReport,
 	},
 	template: '<MkAbuseReport />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
index 9ef749487d..e8f90339f1 100644
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAbuseReportWindow,
 	},
 	template: '<MkAbuseReportWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
index b08f80620f..a62fadc5cf 100644
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAchievements,
 	},
 	template: '<MkAchievements />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
index 1f7d6f13b5..7f3e51128e 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAnalogClock,
 	},
 	template: '<MkAnalogClock />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
index c65e6e7a6a..82bc3c05cc 100644
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAsUi,
 	},
 	template: '<MkAsUi />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
index d185d9c4b5..6a1be12e08 100644
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAutocomplete,
 	},
 	template: '<MkAutocomplete />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
index 245da15bbb..26b7fab544 100644
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAvatars,
 	},
 	template: '<MkAvatars />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index d443279fee..26ce51bcaf 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkButton,
 	},
 	template: '<MkButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index 95581133e0..23d8b56244 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCaptcha,
 	},
 	template: '<MkCaptcha />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
index 8e6db84cc0..6ce5d52d9c 100644
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkChannelFollowButton,
 	},
 	template: '<MkChannelFollowButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
index 992b2c4ca6..45f3808738 100644
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkChannelPreview,
 	},
 	template: '<MkChannelPreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
index 4beab4df20..cf607d7703 100644
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkChart,
 	},
 	template: '<MkChart />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
index adabbb9a78..8e6a449b59 100644
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkChartLegend,
 	},
 	template: '<MkChartLegend />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
index 668aeb017d..71095ce79e 100644
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkChartTooltip,
 	},
 	template: '<MkChartTooltip />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
index e936d1a01b..1aaa03ba0c 100644
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCheckbox,
 	},
 	template: '<MkCheckbox />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
index 600b27ea14..39dad4e676 100644
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkClickerGame,
 	},
 	template: '<MkClickerGame />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
index 991ff5b59b..b512c34e4a 100644
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkClipPreview,
 	},
 	template: '<MkClipPreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index c6a55fe8c3..dcc7d6f46d 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCode_core,
 	},
 	template: '<MkCode_core />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
index 0009ca436c..625d6f3d22 100644
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCode,
 	},
 	template: '<MkCode />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
index fab6b7aa24..73aa520ba4 100644
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkContainer,
 	},
 	template: '<MkContainer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
index e9a8f2c6a1..78885a57ae 100644
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkContextMenu,
 	},
 	template: '<MkContextMenu />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
index 92be1b425f..38c665d770 100644
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCropperDialog,
 	},
 	template: '<MkCropperDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
index f19288dd19..3545121190 100644
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCwButton,
 	},
 	template: '<MkCwButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
index e4c00df5e1..ea319c12eb 100644
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDateSeparatedList,
 	},
 	template: '<MkDateSeparatedList />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
index 3debe6214c..2996b180ba 100644
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDialog,
 	},
 	template: '<MkDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
index 3b6b6f839b..6a6299d5cb 100644
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDigitalClock,
 	},
 	template: '<MkDigitalClock />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
index 258f675ebd..afee626577 100644
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDonation,
 	},
 	template: '<MkDonation />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index 0942b1d7d4..0730b78a69 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDrive_file,
 	},
 	template: '<MkDrive_file />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index 5565b08651..4b5f5b9ac3 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDrive_folder,
 	},
 	template: '<MkDrive_folder />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index 4c489f7298..f38016e320 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDrive_navFolder,
 	},
 	template: '<MkDrive_navFolder />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
index 19c3f6445b..2d4afc95da 100644
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDrive,
 	},
 	template: '<MkDrive />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
index ca135cf417..4b3565cf2d 100644
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDriveFileThumbnail,
 	},
 	template: '<MkDriveFileThumbnail />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
index 00f7f3e062..0ac06ba2fe 100644
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDriveSelectDialog,
 	},
 	template: '<MkDriveSelectDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
index 2b20a75e45..44d46b19d7 100644
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkDriveWindow,
 	},
 	template: '<MkDriveWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index 6b8fb815ab..1a19f4fb3d 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEmojiPicker_section,
 	},
 	template: '<MkEmojiPicker_section />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
index b8816b5425..977be11bc7 100644
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEmojiPicker,
 	},
 	template: '<MkEmojiPicker />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
index ae3ab4cfa7..ec6972bac3 100644
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEmojiPickerDialog,
 	},
 	template: '<MkEmojiPickerDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
index 985dec8bd1..d3393d8f97 100644
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEmojiPickerWindow,
 	},
 	template: '<MkEmojiPickerWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
index 7c9bd67748..613723d08d 100644
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFeaturedPhotos,
 	},
 	template: '<MkFeaturedPhotos />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
index d0c9e4e2df..c86d7d1887 100644
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFileCaptionEditWindow,
 	},
 	template: '<MkFileCaptionEditWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
index b437ae4d4f..cd66908fc6 100644
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFileListForAdmin,
 	},
 	template: '<MkFileListForAdmin />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
index eb7d911067..ec23c2055e 100644
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFlashPreview,
 	},
 	template: '<MkFlashPreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
index b9c85f4e82..3760566e03 100644
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFoldableSection,
 	},
 	template: '<MkFoldableSection />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
index dbde9dc034..b873a6238c 100644
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFolder,
 	},
 	template: '<MkFolder />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
index ff5b976be6..51d7827dfc 100644
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFollowButton,
 	},
 	template: '<MkFollowButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
index 38f813dfb6..3f809e6906 100644
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkForgotPassword,
 	},
 	template: '<MkForgotPassword />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
index cf6afa03dd..45e1c6b20f 100644
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkFormDialog,
 	},
 	template: '<MkFormDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
index 9e94b456ee..89e4fe3080 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkGalleryPostPreview,
 	},
 	template: '<MkGalleryPostPreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
index bb9651dc0c..01f147cd0a 100644
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkGoogle,
 	},
 	template: '<MkGoogle />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
index 97b8ef607a..334cde91c7 100644
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkHeatmap,
 	},
 	template: '<MkHeatmap />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
index 8878c61745..c2be14dcda 100644
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkImageViewer,
 	},
 	template: '<MkImageViewer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
index fa69366b87..06c2062af2 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkImgWithBlurhash,
 	},
 	template: '<MkImgWithBlurhash />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
index 97e887cf62..d559660393 100644
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkInfo,
 	},
 	template: '<MkInfo />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
index 97b1fe999c..65d43322bb 100644
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkInput,
 	},
 	template: '<MkInput />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
index 1902de6f38..8bd0eb1b41 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkInstanceCardMini,
 	},
 	template: '<MkInstanceCardMini />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
index e8a9aed27f..ee5aec9810 100644
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkInstanceStats,
 	},
 	template: '<MkInstanceStats />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
index 04e5d02e3b..c8809ad876 100644
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkInstanceTicker,
 	},
 	template: '<MkInstanceTicker />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
index 253f827796..a69bd185ad 100644
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkKeyValue,
 	},
 	template: '<MkKeyValue />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
index 0f5289c49d..3c58063e39 100644
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkLaunchPad,
 	},
 	template: '<MkLaunchPad />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
index a4904d3879..5445eb8593 100644
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkLink,
 	},
 	template: '<MkLink />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
index f8b8751abc..14981dbd53 100644
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMarquee,
 	},
 	template: '<MkMarquee />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
index 2a74b32e29..90424768c9 100644
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMediaBanner,
 	},
 	template: '<MkMediaBanner />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
index 9c2f7aec0e..bc985ff171 100644
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMediaImage,
 	},
 	template: '<MkMediaImage />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
index 1267b8a5f1..0b38efe507 100644
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMediaList,
 	},
 	template: '<MkMediaList />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
index 61e883942b..7b25dcef02 100644
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMediaVideo,
 	},
 	template: '<MkMediaVideo />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
index 76f3d602d6..d03eeaf7e9 100644
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMention,
 	},
 	template: '<MkMention />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index 079fbee3e2..cec1d4c726 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMenu_child,
 	},
 	template: '<MkMenu_child />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
index 2992ad88a0..79f4714bc7 100644
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMenu,
 	},
 	template: '<MkMenu />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
index 7a4294cffe..18f37447cf 100644
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMiniChart,
 	},
 	template: '<MkMiniChart />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
index a2bbc83be3..d1c3977006 100644
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkModal,
 	},
 	template: '<MkModal />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
index 168d674089..c4c162f789 100644
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkModalPageWindow,
 	},
 	template: '<MkModalPageWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
index b06b079581..2212cd6a4d 100644
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkModalWindow,
 	},
 	template: '<MkModalWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
index 454e6a943b..d828d38446 100644
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNote,
 	},
 	template: '<MkNote />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
index a3efc0afab..b787ea37bd 100644
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNoteDetailed,
 	},
 	template: '<MkNoteDetailed />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
index 1310d3c1b1..af7c5b2704 100644
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNoteHeader,
 	},
 	template: '<MkNoteHeader />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
index 8aa2cc80bf..5feba941c1 100644
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNotePreview,
 	},
 	template: '<MkNotePreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
index 8745fd0f87..14fe3aea81 100644
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNoteSimple,
 	},
 	template: '<MkNoteSimple />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
index 817c099361..9d526ec98f 100644
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNoteSub,
 	},
 	template: '<MkNoteSub />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
index e110cebcfa..8c2a39d66a 100644
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNotes,
 	},
 	template: '<MkNotes />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
index c17add5224..13f5d751ad 100644
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNotification,
 	},
 	template: '<MkNotification />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
index cc4caa5644..adc6627f58 100644
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNotificationSettingWindow,
 	},
 	template: '<MkNotificationSettingWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
index 8f71efcb1e..b1f73956f0 100644
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNotifications,
 	},
 	template: '<MkNotifications />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
index b75362ec9b..9b9495ab8c 100644
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNumber,
 	},
 	template: '<MkNumber />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
index 4f0bc96629..9430fd1619 100644
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkNumberDiff,
 	},
 	template: '<MkNumberDiff />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
index e9bbd23c2a..d44e3ee699 100644
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkObjectView,
 	},
 	template: '<MkObjectView />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index 58a9e96a44..27bc7958ee 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkObjectView_value,
 	},
 	template: '<MkObjectView_value />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
index 23bd48ebe5..f2621961d9 100644
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkOmit,
 	},
 	template: '<MkOmit />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
index 515a533579..17cf7c4c3e 100644
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPagePreview,
 	},
 	template: '<MkPagePreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
index 1a26e60723..e71e348ae5 100644
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPageWindow,
 	},
 	template: '<MkPageWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
index 78bba2f326..9bebe36742 100644
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPagination,
 	},
 	template: '<MkPagination />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
index 50f51b60ba..a8a47b896c 100644
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPlusOneEffect,
 	},
 	template: '<MkPlusOneEffect />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
index ba92e47b8b..fea5821fed 100644
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPoll,
 	},
 	template: '<MkPoll />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
index d8480091ca..c332f1c809 100644
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPollEditor,
 	},
 	template: '<MkPollEditor />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
index f590af56c3..127227e1d0 100644
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPopupMenu,
 	},
 	template: '<MkPopupMenu />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
index b84b466570..b459222fc6 100644
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPostForm,
 	},
 	template: '<MkPostForm />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
index 7298001704..ea67d38e6e 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPostFormAttaches,
 	},
 	template: '<MkPostFormAttaches />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
index c84017c6a8..0683ce7708 100644
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPostFormDialog,
 	},
 	template: '<MkPostFormDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
index d32b273909..339cfc8ecc 100644
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPushNotificationAllowButton,
 	},
 	template: '<MkPushNotificationAllowButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
index 0f03abbc13..5f3a5ef25f 100644
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRadio,
 	},
 	template: '<MkRadio />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
index 24c12e9868..ac6e9f61e6 100644
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRadios,
 	},
 	template: '<MkRadios />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
index f8efe8354e..c46122334d 100644
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRange,
 	},
 	template: '<MkRange />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
index 1e54032350..395f951346 100644
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactedUsersDialog,
 	},
 	template: '<MkReactedUsersDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
index 71fc56768f..7b9ca42e25 100644
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionEffect,
 	},
 	template: '<MkReactionEffect />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
index 37c196887a..271eb3ed6a 100644
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionIcon,
 	},
 	template: '<MkReactionIcon />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
index a6ea560100..e4ca21352e 100644
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionTooltip,
 	},
 	template: '<MkReactionTooltip />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index 3bab02b864..449e035549 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionsViewer_details,
 	},
 	template: '<MkReactionsViewer_details />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index 917c5459ad..cbe9a98c7f 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionsViewer_reaction,
 	},
 	template: '<MkReactionsViewer_reaction />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
index 7b9e18baf3..33d1108825 100644
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkReactionsViewer,
 	},
 	template: '<MkReactionsViewer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
index ce5f9069cc..726a4f4db5 100644
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRemoteCaution,
 	},
 	template: '<MkRemoteCaution />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
index bf977d05b2..e348f2bd4b 100644
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRetentionHeatmap,
 	},
 	template: '<MkRetentionHeatmap />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
index 9ee6ed6d10..8b405f3e63 100644
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRippleEffect,
 	},
 	template: '<MkRippleEffect />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
index 3a6670f87a..84fa9ccf34 100644
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkRolePreview,
 	},
 	template: '<MkRolePreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
index 8e5b119933..dba9e304d8 100644
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSample,
 	},
 	template: '<MkSample />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
index 0348e89191..18d2a35844 100644
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSelect,
 	},
 	template: '<MkSelect />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
index cfc4a6f4e4..a50d15d869 100644
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSignin,
 	},
 	template: '<MkSignin />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
index bde8242599..1540c571a6 100644
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSigninDialog,
 	},
 	template: '<MkSigninDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
index 4b620670b3..a1b8c723ca 100644
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSignup,
 	},
 	template: '<MkSignup />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
index e07a1cd385..c0253a3cd8 100644
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSignupDialog,
 	},
 	template: '<MkSignupDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
index 289707e19a..f5d82ef610 100644
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSparkle,
 	},
 	template: '<MkSparkle />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
index f50b50023a..557775d419 100644
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSubNoteContent,
 	},
 	template: '<MkSubNoteContent />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
index 624fb96584..76ed607f95 100644
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSuperMenu,
 	},
 	template: '<MkSuperMenu />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
index ace45f7783..ff2d48416e 100644
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSwitch,
 	},
 	template: '<MkSwitch />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
index c819252291..b2e94c1a6e 100644
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTab,
 	},
 	template: '<MkTab />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
index dd6f06716e..5af917710e 100644
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTagCloud,
 	},
 	template: '<MkTagCloud />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
index e6f5d0f996..207aec2c2e 100644
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTextarea,
 	},
 	template: '<MkTextarea />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
index 7a43f42afa..3a1632417c 100644
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTimeline,
 	},
 	template: '<MkTimeline />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
index 967e3aff24..80b48109e7 100644
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkToast,
 	},
 	template: '<MkToast />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
index f4cd049d9d..74c6b73611 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTokenGenerateWindow,
 	},
 	template: '<MkTokenGenerateWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
index eaa64a424e..bcba8916db 100644
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTooltip,
 	},
 	template: '<MkTooltip />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
index a6b37f5fd5..9949a6621b 100644
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUpdated,
 	},
 	template: '<MkUpdated />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
index 3b3c97ba60..7f18283433 100644
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUrlPreview,
 	},
 	template: '<MkUrlPreview />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
index b71c814d25..6756b81bd5 100644
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUrlPreviewPopup,
 	},
 	template: '<MkUrlPreviewPopup />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
index 9fd800237d..467c8aa00c 100644
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserCardMini,
 	},
 	template: '<MkUserCardMini />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
index c12d66cd91..832fa8dac6 100644
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserInfo,
 	},
 	template: '<MkUserInfo />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
index d507ddf2b6..173f9a499d 100644
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserList,
 	},
 	template: '<MkUserList />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
index 12e94851f9..f18f9da5b7 100644
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserOnlineIndicator,
 	},
 	template: '<MkUserOnlineIndicator />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
index 43058847dc..14e8ef467d 100644
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserPopup,
 	},
 	template: '<MkUserPopup />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
index 48ebf287a9..9930169d51 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserSelectDialog,
 	},
 	template: '<MkUserSelectDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
index 368e76f910..2cc45df467 100644
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUsersTooltip,
 	},
 	template: '<MkUsersTooltip />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
index 202df158c6..a1b6bcea69 100644
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkVisibilityPicker,
 	},
 	template: '<MkVisibilityPicker />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
index 9f9f0b804a..ee5f956859 100644
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkWaitingDialog,
 	},
 	template: '<MkWaitingDialog />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
index f5019284aa..e5820efd48 100644
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkWidgets,
 	},
 	template: '<MkWidgets />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
index 31b5347c9e..d43e40330e 100644
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkWindow,
 	},
 	template: '<MkWindow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/MkYoutubePlayer.stories.ts b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
index 92b68ad5ef..a9f45e3e99 100644
--- a/packages/frontend/src/components/MkYoutubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkYoutubePlayer,
 	},
 	template: '<MkYoutubePlayer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index 836dd53aba..24f7edc372 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		link,
 	},
 	template: '<link />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index 3f0939c359..b8ab307e24 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		section,
 	},
 	template: '<section />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index 9587fb2f4e..dd1a16c403 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		slot,
 	},
 	template: '<slot />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index ac5c2008c5..39cbc0ba01 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		split,
 	},
 	template: '<split />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index ba54e90151..fad46e9c12 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		suspense,
 	},
 	template: '<suspense />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index a676fce531..5eb4a18c46 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkA,
 	},
 	template: '<MkA />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index 6f4647832f..6b8b55ec35 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAcct,
 	},
 	template: '<MkAcct />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index f835bf5eea..bb2d74b336 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAd,
 	},
 	template: '<MkAd />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 6a74176b11..bc1acd33f1 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkAvatar,
 	},
 	template: '<MkAvatar />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index e594b035ae..9abc14af1f 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkCustomEmoji,
 	},
 	template: '<MkCustomEmoji />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
index fe3a2a826b..09092f36d3 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEllipsis,
 	},
 	template: '<MkEllipsis />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index ffac466d1f..1679ae0b27 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkEmoji,
 	},
 	template: '<MkEmoji />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index 86e9f77cf2..0916b1860d 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkError,
 	},
 	template: '<MkError />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index bf6d9de636..752085f5fd 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkLoading,
 	},
 	template: '<MkLoading />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index bf8006e7c5..63e5342cce 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkMisskeyFlavoredMarkdown,
 	},
 	template: '<MkMisskeyFlavoredMarkdown />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
index 3add69771e..a2c6d8705c 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPageHeader,
 	},
 	template: '<MkPageHeader />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index 8f3af87802..b283a94398 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkPageHeader_tabs,
 	},
 	template: '<MkPageHeader_tabs />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
index cb9f893e38..2f15b02570 100644
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkSpacer,
 	},
 	template: '<MkSpacer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
index aca35e0d21..7e495a582f 100644
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkStickyContainer,
 	},
 	template: '<MkStickyContainer />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
index 196df61db4..efb6dee7a2 100644
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkTime,
 	},
 	template: '<MkTime />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
index 7e3ba56ee1..c72bf542e6 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUrl,
 	},
 	template: '<MkUrl />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
index 1a0b7912cb..211d8dac6b 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		MkUserName,
 	},
 	template: '<MkUserName />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
index c4ab83c017..acc2c32d3b 100644
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		RouterView,
 	},
 	template: '<RouterView />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index 9e434e066c..a08218da66 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_block,
 	},
 	template: '<page_block />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 0d536d7502..9ee10b737d 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_button,
 	},
 	template: '<page_button />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index 1a79be9bd0..7df6fd3644 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_canvas,
 	},
 	template: '<page_canvas />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index 5e808012f3..490c4d24b9 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_counter,
 	},
 	template: '<page_counter />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index a44906903b..cd840c9594 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_if,
 	},
 	template: '<page_if />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index 68bd435e1c..b7452a618d 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_image,
 	},
 	template: '<page_image />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 00c036fad1..5c5af5d58b 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_note,
 	},
 	template: '<page_note />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index cd04c9c7ac..9a7ad34316 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_number_input,
 	},
 	template: '<page_number_input />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index 89bb72e178..b98d930d14 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_post,
 	},
 	template: '<page_post />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 59dd32357e..9b519cdddf 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_radio_button,
 	},
 	template: '<page_radio_button />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index e31b612db6..0e28246cce 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_section,
 	},
 	template: '<page_section />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index a7264f4bee..cff97b18d0 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page,
 	},
 	template: '<page />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index 05f5b14947..84bfcf0d79 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_switch,
 	},
 	template: '<page_switch />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index 2e063ed14c..07ce018e23 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_text_input,
 	},
 	template: '<page_text_input />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index 6eabcb3da8..b1f3aacfba 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_text,
 	},
 	template: '<page_text />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index 3c392ed6fe..608327d188 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_textarea_input,
 	},
 	template: '<page_textarea_input />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index a09b134031..c793e78d28 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_textarea,
 	},
 	template: '<page_textarea />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
index 0d004b65e1..9975c4e042 100644
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_empty_,
 	},
 	template: '<_empty_ />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
index d3af6637ce..f3ac520dc6 100644
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_error_,
 	},
 	template: '<_error_ />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
index 4349f3b44f..9063c71b48 100644
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_loading_,
 	},
 	template: '<_loading_ />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index 4cf759246c..1898d460eb 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		about_misskey,
 	},
 	template: '<about_misskey />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index 88cae1d4de..dc2f36beae 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		about_emojis,
 	},
 	template: '<about_emojis />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index 75875ce589..63f997779c 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		about_federation,
 	},
 	template: '<about_federation />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index 4150c3a134..397a520610 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		about,
 	},
 	template: '<about />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index f0b1b14dcd..b07ce5846d 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		achievements,
 	},
 	template: '<achievements />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index 3a59d5ba7b..adbcee094d 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		admin_file,
 	},
 	template: '<admin_file />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
index 16682c2f91..e85173e574 100644
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		RolesEditorFormula,
 	},
 	template: '<RolesEditorFormula />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
index c03039c692..b803b74a19 100644
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_header_,
 	},
 	template: '<_header_ />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index 619ef42bfd..677292f157 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		abuses,
 	},
 	template: '<abuses />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 49b11f8934..973bbd4ccc 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		ads,
 	},
 	template: '<ads />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index 0f990a152f..add9a62c52 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		announcements,
 	},
 	template: '<announcements />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index d5369f1fa4..cc337ac51e 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		bot_protection,
 	},
 	template: '<bot_protection />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index 7bddb16207..1764c4a902 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		database,
 	},
 	template: '<database />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index ad094e5140..162b4b0816 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		email_settings,
 	},
 	template: '<email_settings />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index dfa783cf8f..a8b3f1b3f6 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		federation,
 	},
 	template: '<federation />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index 86c7b9633a..cb0746cf12 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		files,
 	},
 	template: '<files />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index 04b0cbac65..f2ac0b2878 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index 5186eb4dfc..0623c16ddb 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		instance_block,
 	},
 	template: '<instance_block />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index 48c5c3a45e..20d6d3bea2 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		moderation,
 	},
 	template: '<moderation />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index ab971197e9..9187d2ad6f 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		object_storage,
 	},
 	template: '<object_storage />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index 20c422c58a..f4385c4c33 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		other_settings,
 	},
 	template: '<other_settings />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index ac1628f3d2..877d4e0ddf 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_active_users,
 	},
 	template: '<overview_active_users />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index ed74ab698e..d952ce3df9 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_ap_requests,
 	},
 	template: '<overview_ap_requests />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index e3c6d7d64b..c0bcca0588 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_federation,
 	},
 	template: '<overview_federation />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index 106f78fb28..28fca24b45 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_heatmap,
 	},
 	template: '<overview_heatmap />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index 77830053dd..71cce61bc0 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_instances,
 	},
 	template: '<overview_instances />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index 973b8e4a07..d617cc9c3d 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_moderators,
 	},
 	template: '<overview_moderators />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index 20dcddea66..f73defee9f 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_pie,
 	},
 	template: '<overview_pie />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index 322588f294..cfcd04f3c4 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_queue_chart,
 	},
 	template: '<overview_queue_chart />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index 4906cef135..f30978121c 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_queue,
 	},
 	template: '<overview_queue />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index 74157b991c..b0bc4c72d1 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_retention,
 	},
 	template: '<overview_retention />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 4042b7ae90..5bcefe2fc8 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_stats,
 	},
 	template: '<overview_stats />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index de78d77c20..676acc1eaf 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview,
 	},
 	template: '<overview />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 05fb8e1318..4c61a00bf8 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		overview_users,
 	},
 	template: '<overview_users />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 00a645b0ec..6954a0f55f 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		proxy_account,
 	},
 	template: '<proxy_account />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 0a853bd7f5..13b63e7dba 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		queue_chart_chart,
 	},
 	template: '<queue_chart_chart />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index e1523a1cab..8e66f86144 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		queue_chart,
 	},
 	template: '<queue_chart />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index 7dd0ac7998..6d2c06b48a 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		queue,
 	},
 	template: '<queue />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index 2d73938323..c362cb7ca9 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		relays,
 	},
 	template: '<relays />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index 7a17ea360e..61fac49415 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		roles_edit,
 	},
 	template: '<roles_edit />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index fdba287e01..34dac9a051 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		roles_editor,
 	},
 	template: '<roles_editor />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index 6be5d3261d..ec112af033 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		roles_role,
 	},
 	template: '<roles_role />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index c2ec83cc71..c0d1fcd444 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		roles,
 	},
 	template: '<roles />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index be28e11f15..eacff65985 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		security,
 	},
 	template: '<security />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index 1bba4ca65c..c10325146c 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		settings,
 	},
 	template: '<settings />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index 05949c87a8..89769a35f9 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		users,
 	},
 	template: '<users />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index 48891ca33e..1fadb08a86 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		ads,
 	},
 	template: '<ads />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index 526d9ef0a3..b5c7081239 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		announcements,
 	},
 	template: '<announcements />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index 31e417bb25..142ddb7862 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		antenna_timeline,
 	},
 	template: '<antenna_timeline />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index bf0fdc8120..ab7032c885 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		api_console,
 	},
 	template: '<api_console />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 041ad69a92..27b302a7e1 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		auth_form,
 	},
 	template: '<auth_form />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index 2b78a38939..ed9715c21c 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		auth,
 	},
 	template: '<auth />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index 7e383b18b3..fadda3c391 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		channel_editor,
 	},
 	template: '<channel_editor />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index ba65e2c0ac..d11385411a 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		channel,
 	},
 	template: '<channel />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index cb77506fc2..d17a5ab5aa 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		channels,
 	},
 	template: '<channels />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index cbcd6bbd2d..90b554eac5 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		clicker,
 	},
 	template: '<clicker />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index d5532bd879..1435436350 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		clip,
 	},
 	template: '<clip />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 3b78a49aa7..3aa362b7d9 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		custom_emojis_manager,
 	},
 	template: '<custom_emojis_manager />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index 67f7392c39..199cbe10e7 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		drive,
 	},
 	template: '<drive />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index d56a698269..4ff245de16 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		emoji_edit_dialog,
 	},
 	template: '<emoji_edit_dialog />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index 54fa1569b6..e0a7d8c85d 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		emojis_emoji,
 	},
 	template: '<emojis_emoji />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index 1c44df5703..9482aa0a1b 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		explore_featured,
 	},
 	template: '<explore_featured />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index 0039f0f6ce..bcf5c0fdba 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		explore_roles,
 	},
 	template: '<explore_roles />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index b90e609246..b42265a8b8 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		explore,
 	},
 	template: '<explore />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index c50ff656e7..0b62e44584 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		explore_users,
 	},
 	template: '<explore_users />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 102fc0f142..959cd96336 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		favorites,
 	},
 	template: '<favorites />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index eabf25fb74..1eb559bd42 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		flash_edit,
 	},
 	template: '<flash_edit />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 93cfd5ce79..1d10f2f3fa 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		flash_index,
 	},
 	template: '<flash_index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index 0b4090aa58..b987a06b9c 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		flash,
 	},
 	template: '<flash />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index c7def2cbdf..5f94621069 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		follow_requests,
 	},
 	template: '<follow_requests />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index c669570b7e..73b487bc3a 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		follow,
 	},
 	template: '<follow />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index a7730e833a..80b8f4341c 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		edit,
 	},
 	template: '<edit />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index c90f66f3e3..a97c4f543d 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index 2828dbba97..a836bb0f8b 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		post,
 	},
 	template: '<post />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index 43ccada6bf..e4ce20788c 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		instance_info,
 	},
 	template: '<instance_info />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index e31d43a38b..b70ba39235 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		miauth,
 	},
 	template: '<miauth />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index 58ebf35d83..d71aa1206b 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		create,
 	},
 	template: '<create />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index 05631ad895..ebb9e54201 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		edit,
 	},
 	template: '<edit />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index 5ffcc6a3d2..1edb29e806 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		editor,
 	},
 	template: '<editor />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index 0d3579c802..65af62c76d 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index 848ff2ed74..4625509983 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index 417cf3979b..eae8dbeb63 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index b961d35834..05a306a3ff 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		list,
 	},
 	template: '<list />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index a7f237b530..1d84261fea 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		not_found,
 	},
 	template: '<not_found />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index 6e32a55946..e4703e3bb6 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		note,
 	},
 	template: '<note />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index b406e08fe0..2181b94eb8 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		notifications,
 	},
 	template: '<notifications />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 420dbf528a..4811d07edf 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_el_image,
 	},
 	template: '<page_editor_el_image />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 7a5f6fc3f7..0293c4ca46 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_el_note,
 	},
 	template: '<page_editor_el_note />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index 51be8d07d6..a0c062b670 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_el_section,
 	},
 	template: '<page_editor_el_section />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index b6dc3a76e4..46c8d3ddfe 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_el_text,
 	},
 	template: '<page_editor_el_text />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index ddfc0a3f45..965c615ba7 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_blocks,
 	},
 	template: '<page_editor_blocks />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 35aeb5747c..0d044d7f62 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor_container,
 	},
 	template: '<page_editor_container />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index be9c62c03c..e0d0f5b3d1 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page_editor,
 	},
 	template: '<page_editor />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index b2d9e5a821..08358f2baa 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		page,
 	},
 	template: '<page />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index 0b540f5c20..f6ac1d4562 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		pages,
 	},
 	template: '<pages />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index 57e3d29a1f..60cc026f6c 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		preview,
 	},
 	template: '<preview />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 436de31edf..1a1ec5216b 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		registry_keys,
 	},
 	template: '<registry_keys />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index 09e2193ad7..846d75cc8f 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		registry,
 	},
 	template: '<registry />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index 667ddab8d4..798c77d715 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		registry_value,
 	},
 	template: '<registry_value />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index cc8fd62bc7..6cab23af59 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		reset_password,
 	},
 	template: '<reset_password />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index 4c116a5240..2ec6bde652 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		role,
 	},
 	template: '<role />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index 28a03c0180..369df43de0 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		scratchpad,
 	},
 	template: '<scratchpad />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 01e77fb543..845abb92b5 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		search,
 	},
 	template: '<search />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index 2d7f50c1bd..cc5c3311fe 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_2fa_qrdialog,
 	},
 	template: '<_2fa_qrdialog />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 5543b40262..3b77f4cefe 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		_2fa,
 	},
 	template: '<_2fa />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index 79b43f9efb..ed43fd46ac 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		account_info,
 	},
 	template: '<account_info />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index e48f7885ae..4ffa1ae4cd 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		accounts,
 	},
 	template: '<accounts />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index c9469cf898..3695e9dfec 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		api,
 	},
 	template: '<api />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index 7b14e4fc19..e9820cd3e2 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		apps,
 	},
 	template: '<apps />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index 60f876ecd4..821ff4bf53 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		custom_css,
 	},
 	template: '<custom_css />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index d030d01bdb..7ee4159f87 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		deck,
 	},
 	template: '<deck />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index 5f56fb7689..d29068dadc 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		delete_account,
 	},
 	template: '<delete_account />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index c9ab0b484e..cf65d1819f 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		drive,
 	},
 	template: '<drive />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index 24c490aa40..1adeb96133 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		email,
 	},
 	template: '<email />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index 1a07b8bf51..579f509f27 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		general,
 	},
 	template: '<general />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index 75ad8eb1bd..967ed5459c 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		import_export,
 	},
 	template: '<import_export />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index 73d7cdbbb4..2d9a2ec86e 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index c0ef252ccd..a9195df21d 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		instance_mute,
 	},
 	template: '<instance_mute />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index 9001b89604..297ba1bdf8 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		mute_block,
 	},
 	template: '<mute_block />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index dc3ff66f8a..0d5427af52 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		navbar,
 	},
 	template: '<navbar />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index 95c82da4ce..2d896a5cd3 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		notifications,
 	},
 	template: '<notifications />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index dd71d857ac..4158413e98 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		other,
 	},
 	template: '<other />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index 851bc85a8b..aeee457f2b 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		plugin_install,
 	},
 	template: '<plugin_install />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index b6e6dbe27c..e5ab35cc06 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		plugin,
 	},
 	template: '<plugin />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 69921e6e8e..766dbd1401 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		preferences_backups,
 	},
 	template: '<preferences_backups />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index 69e08eef78..d86269e6d8 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		privacy,
 	},
 	template: '<privacy />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index 96d5c54dcd..b33bd355f8 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		profile,
 	},
 	template: '<profile />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index 48ef720ed1..331b6fedd2 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		reaction,
 	},
 	template: '<reaction />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index 5b4e577aba..7b6da5bae0 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		roles,
 	},
 	template: '<roles />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index 7d8aa18708..b8209f45d8 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		security,
 	},
 	template: '<security />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index 4302450ff9..dd9f6e8a9d 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		sounds_sound,
 	},
 	template: '<sounds_sound />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index 1be4c325ca..ed8a8c139f 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		sounds,
 	},
 	template: '<sounds />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 83e18810cc..05dbbae799 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbar_statusbar,
 	},
 	template: '<statusbar_statusbar />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 40b8a468e0..19be758d90 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbar,
 	},
 	template: '<statusbar />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index 0fc3e81fc6..55f8ffe3b4 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		theme_install,
 	},
 	template: '<theme_install />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index ea163f7c37..4a4e4dc6e1 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		theme_manage,
 	},
 	template: '<theme_manage />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index 9a8e9a9dd0..68093e90b3 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		theme,
 	},
 	template: '<theme />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index 932d9f4b73..67d2a4fd88 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		webhook_edit,
 	},
 	template: '<webhook_edit />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index bbd081c58f..fbc9e52c60 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		webhook_new,
 	},
 	template: '<webhook_new />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index 644b50985a..838e9390a4 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		webhook,
 	},
 	template: '<webhook />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index 0fd4012c9c..1faff2b693 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		word_mute,
 	},
 	template: '<word_mute />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index 529d1373c1..ff2365051a 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		share,
 	},
 	template: '<share />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index 32b1aaa25c..9349f62296 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		signup_complete,
 	},
 	template: '<signup_complete />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index 6ea6912ae0..7742ca1b13 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		tag,
 	},
 	template: '<tag />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index a506382368..300a3313dd 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		theme_editor,
 	},
 	template: '<theme_editor />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index 2bef61f61d..5de5a151be 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		timeline,
 	},
 	template: '<timeline />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index 97f2bcfe43..591039580f 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		timeline_tutorial,
 	},
 	template: '<timeline_tutorial />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index e4c45fcfee..21053a2208 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		user_info,
 	},
 	template: '<user_info />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index 9750e3ef7d..f951573f77 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		user_list_timeline,
 	},
 	template: '<user_list_timeline />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 9054c27c37..6757c4821d 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		user_tag,
 	},
 	template: '<user_tag />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index 796a7e7bd2..808fc7daa4 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		achievements,
 	},
 	template: '<achievements />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index ce54eae0d6..31183e5fcf 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		activity_following,
 	},
 	template: '<activity_following />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.vue b/packages/frontend/src/pages/user/activity.following.vue
index 54360024f3..25a1edaca9 100644
--- a/packages/frontend/src/pages/user/activity.following.vue
+++ b/packages/frontend/src/pages/user/activity.following.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 42609d780b..3421de0ece 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		activity_heatmap,
 	},
 	template: '<activity_heatmap />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index 7e36c3e090..abb31c270c 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		activity_notes,
 	},
 	template: '<activity_notes />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.vue b/packages/frontend/src/pages/user/activity.notes.vue
index 7dd02ad6d4..63e1c76e03 100644
--- a/packages/frontend/src/pages/user/activity.notes.vue
+++ b/packages/frontend/src/pages/user/activity.notes.vue
@@ -76,7 +76,7 @@ async function renderChart() {
 			borderRadius: 4,
 			barPercentage: 0.9,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index c28ff429f4..2fb5ac33ea 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		activity_pv,
 	},
 	template: '<activity_pv />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.pv.vue b/packages/frontend/src/pages/user/activity.pv.vue
index 6a7506e388..1be495f410 100644
--- a/packages/frontend/src/pages/user/activity.pv.vue
+++ b/packages/frontend/src/pages/user/activity.pv.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index e457e406c7..8984f08ed2 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		activity,
 	},
 	template: '<activity />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index 78cc1d08e2..6296395096 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		clips,
 	},
 	template: '<clips />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index 3f915228fe..1f02dc218b 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		follow_list,
 	},
 	template: '<follow_list />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index 2e320bcf54..af816cf536 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		followers,
 	},
 	template: '<followers />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index 28cc1a5a9b..49eda2b16d 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		following,
 	},
 	template: '<following />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index a245283b62..be6dc8fd10 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		gallery,
 	},
 	template: '<gallery />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index b960a69230..d829dd4475 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		home,
 	},
 	template: '<home />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index 8739405b1d..c5ccc22ee0 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index_activity,
 	},
 	template: '<index_activity />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index 1457d03ca5..b8a1aa9717 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index_photos,
 	},
 	template: '<index_photos />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index e08cb6d6c0..becab310e9 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index e22b0ba9dd..1bb327d7b8 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index_timeline,
 	},
 	template: '<index_timeline />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index 68bc0f6475..8f94478f46 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		pages,
 	},
 	template: '<pages />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index 0528e98b58..9c16da8886 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		reactions,
 	},
 	template: '<reactions />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index 81a558152c..390c763cfc 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome_entrance_a,
 	},
 	template: '<welcome_entrance_a />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index ce78d27580..5307088309 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome_entrance_b,
 	},
 	template: '<welcome_entrance_b />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index c9574fbd22..53a1a93d46 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome_entrance_c,
 	},
 	template: '<welcome_entrance_c />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index d47ceee59f..1e755e809c 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome_setup,
 	},
 	template: '<welcome_setup />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index 3001f95705..30c0f1ee2e 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome,
 	},
 	template: '<welcome />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index f7bc3c5772..7492893a0a 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		welcome_timeline,
 	},
 	template: '<welcome_timeline />',
+	parameters: {
+		layout: 'fullscreen',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index c77f8e12d3..c93e968594 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -443,11 +443,13 @@ export const ACHIEVEMENT_BADGES = {
 		bg: 'linear-gradient(0deg, rgb(144, 224, 255), rgb(255, 168, 252))',
 		frame: 'bronze',
 	},
+/*
 } as const satisfies Record<typeof ACHIEVEMENT_TYPES[number], {
 	img: string;
 	bg: string | null;
 	frame: 'bronze' | 'silver' | 'gold' | 'platinum';
 }>;
+ */ } as const;
 
 export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 
diff --git a/packages/frontend/src/scripts/i18n.ts b/packages/frontend/src/scripts/i18n.ts
index 54184386da..9235a67e2e 100644
--- a/packages/frontend/src/scripts/i18n.ts
+++ b/packages/frontend/src/scripts/i18n.ts
@@ -3,6 +3,7 @@ export class I18n<T extends Record<string, any>> {
 
 	constructor(locale: T) {
 		this.ts = locale;
+		console.log(this);
 
 		//#region BIND
 		this.t = this.t.bind(this);
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index 97d91f978c..ec37ad6650 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		common,
 	},
 	template: '<common />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index b3e3e54ebe..e06a66db70 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		navbar_for_mobile,
 	},
 	template: '<navbar_for_mobile />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index a04c1831e5..a8570942d7 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		navbar,
 	},
 	template: '<navbar />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index f77b1786b9..6463aaa0fb 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		notification,
 	},
 	template: '<notification />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index c23271862b..4930084fe1 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbar_federation,
 	},
 	template: '<statusbar_federation />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index bc6e39c7ba..0b3d8b8d1a 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbar_rss,
 	},
 	template: '<statusbar_rss />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index c051f20e15..1a803671f3 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbar_user_list,
 	},
 	template: '<statusbar_user_list />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index 8a0e0f21c1..05b955c546 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		statusbars,
 	},
 	template: '<statusbars />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index f1461098cd..f114dc0ffc 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		stream_indicator,
 	},
 	template: '<stream_indicator />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index 351a918cfa..4669ca5d1b 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		upload,
 	},
 	template: '<upload />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index 899bcb27c0..9082630c21 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		classic_header,
 	},
 	template: '<classic_header />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index c4a231b895..5e3f7eb986 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		classic_sidebar,
 	},
 	template: '<classic_sidebar />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index 46de825774..64601510aa 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		classic,
 	},
 	template: '<classic />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index f1444b4e89..fbd352ec15 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		deck,
 	},
 	template: '<deck />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index b26c68a78d..4965e4a3d8 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		antenna_column,
 	},
 	template: '<antenna_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index 5c0074a8f3..0290eb96de 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		channel_column,
 	},
 	template: '<channel_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index 09fe6da4c9..7d1262c8ac 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		column_core,
 	},
 	template: '<column_core />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index 1903485402..f53f74b793 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		column,
 	},
 	template: '<column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index 6566a55ead..34a721c955 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		direct_column,
 	},
 	template: '<direct_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index 5edbb759e1..2eac36177d 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		list_column,
 	},
 	template: '<list_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index 19eb912fb5..8d4c269d89 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		main_column,
 	},
 	template: '<main_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index 5f5db72f0c..88b20b8604 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		mentions_column,
 	},
 	template: '<mentions_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index 10c3c67dac..5467be1283 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		notifications_column,
 	},
 	template: '<notifications_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index b4167ea4b7..13093a2acd 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		tl_column,
 	},
 	template: '<tl_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index 1b04f81ced..c0dfb372fb 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		widgets_column,
 	},
 	template: '<widgets_column />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index 6f9174c8af..c46a4eeff3 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		universal,
 	},
 	template: '<universal />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index fc8062d5cd..590f6b1ca3 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		universal_widgets,
 	},
 	template: '<universal_widgets />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index 25fcdc2da8..81b1f51904 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		visitor,
 	},
 	template: '<visitor />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index 0990441976..e10d21c203 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		a,
 	},
 	template: '<a />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index ff65dc0962..586927134a 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		b,
 	},
 	template: '<b />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index c233767351..403f459789 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		header,
 	},
 	template: '<header />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index d2e1b6a108..57141ea077 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		kanban,
 	},
 	template: '<kanban />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index c3652b6bbb..08c0d42c00 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		zen,
 	},
 	template: '<zen />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index 5509f1261b..27feb2741c 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetActivity_calendar,
 	},
 	template: '<WidgetActivity_calendar />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index f9739b636d..0c009d6fdf 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetActivity_chart,
 	},
 	template: '<WidgetActivity_chart />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
index b52fafab7b..ea9270960c 100644
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetActivity,
 	},
 	template: '<WidgetActivity />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
index e7fc604865..0ad9b1d727 100644
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetAichan,
 	},
 	template: '<WidgetAichan />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
index 765e181f1b..651e14f9fc 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetAiscript,
 	},
 	template: '<WidgetAiscript />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
index ecabb3ed4a..0043d6fffe 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetAiscriptApp,
 	},
 	template: '<WidgetAiscriptApp />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
index c5ee3f9c66..c561651066 100644
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetButton,
 	},
 	template: '<WidgetButton />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
index fa5e31cd26..a626ff63b9 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetCalendar,
 	},
 	template: '<WidgetCalendar />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
index 0f1622c691..37bffbaf26 100644
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetClicker,
 	},
 	template: '<WidgetClicker />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
index 8dad29b5da..2ae8925a3e 100644
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetClock,
 	},
 	template: '<WidgetClock />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
index 1af1a5b511..0b812ee24b 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetDigitalClock,
 	},
 	template: '<WidgetDigitalClock />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
index 20cbfa93b7..9f88768c49 100644
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetFederation,
 	},
 	template: '<WidgetFederation />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
index 1e9acb7154..188ff80394 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetInstanceCloud,
 	},
 	template: '<WidgetInstanceCloud />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
index e74d5f34e7..555d77c6b7 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetInstanceInfo,
 	},
 	template: '<WidgetInstanceInfo />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
index 256cf692ec..54a7023942 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetJobQueue,
 	},
 	template: '<WidgetJobQueue />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
index bfe331ef19..cf1a1d2693 100644
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetMemo,
 	},
 	template: '<WidgetMemo />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
index 0399cbe361..e21c7f77c2 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetNotifications,
 	},
 	template: '<WidgetNotifications />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
index c7c8c53c25..9e4161b535 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetOnlineUsers,
 	},
 	template: '<WidgetOnlineUsers />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
index 137a1bb807..77c755a7a5 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetPhotos,
 	},
 	template: '<WidgetPhotos />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
index 867902ec28..2576a8b08d 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetPostForm,
 	},
 	template: '<WidgetPostForm />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
index b7391eaaa7..7654d805c8 100644
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetProfile,
 	},
 	template: '<WidgetProfile />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
index 79fed6d7c7..baae27167c 100644
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetRss,
 	},
 	template: '<WidgetRss />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
index 27acb1b62d..f70c23210f 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetRssTicker,
 	},
 	template: '<WidgetRssTicker />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
index d138fd8d6b..8671a34833 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetSlideshow,
 	},
 	template: '<WidgetSlideshow />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
index 5124035e04..e067689c28 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetTimeline,
 	},
 	template: '<WidgetTimeline />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
index a75e76e98e..96ee667bed 100644
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetTrends,
 	},
 	template: '<WidgetTrends />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
index d6d05a6740..1dd22e3a7e 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetUnixClock,
 	},
 	template: '<WidgetUnixClock />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
index 8621060cda..2435b9a5b4 100644
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		WidgetUserList,
 	},
 	template: '<WidgetUserList />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 67906eaece..9beb5e2940 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		cpu_mem,
 	},
 	template: '<cpu_mem />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index 1afd2ce8e6..a55dcad76e 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		cpu,
 	},
 	template: '<cpu />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index 53042da755..c63f3cd4a6 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		disk,
 	},
 	template: '<disk />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index 28a0565f20..ee29d8a540 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		index,
 	},
 	template: '<index />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index 968b042fc0..231f9459b4 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		mem,
 	},
 	template: '<mem />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index e10b4b2baf..f5fb098442 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		net,
 	},
 	template: '<net />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index eeab11e9f7..7e56a6a726 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -9,5 +9,8 @@ export const Default = {
 		pie,
 	},
 	template: '<pie />',
+	parameters: {
+		layout: 'centered',
+	},
 };
 export default meta;
diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts
index a90ee55268..ea0b4d85df 100644
--- a/packages/frontend/vite.config.ts
+++ b/packages/frontend/vite.config.ts
@@ -38,7 +38,7 @@ function toBase62(n: number): string {
 	return result;
 }
 
-export default defineConfig(({ command, mode }) => {
+export function getConfig() {
 	return {
 		base: '/vite/',
 
@@ -122,4 +122,8 @@ export default defineConfig(({ command, mode }) => {
 			},
 		},
 	};
-});
+}
+
+const config = defineConfig(({ command, mode }) => getConfig());
+
+export default config;

From a19c560e7bf04d088d3c64c7511caf96ca33f586 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 14:58:24 +0900
Subject: [PATCH 04/99] refactor(#10336): remove unused imports

---
 packages/frontend/.storybook/generate.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index eaca304554..b446d30fb1 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -1,5 +1,5 @@
 import * as fs from 'node:fs/promises';
-import { basename, dirname, join } from 'node:path/posix';
+import { basename, dirname } from 'node:path/posix';
 import { promisify } from 'node:util';
 import { generate } from 'astring';
 import type * as estree from 'estree';

From 6e21147ff62b0dd53fa3042f6a975536cf7f8d8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 16:13:07 +0900
Subject: [PATCH 05/99] build(#10336): separate definitions and generated codes

---
 packages/frontend/.storybook/generate.tsx     | 187 +++++++----
 packages/frontend/.storybook/manager.ts       |  12 +
 packages/frontend/.storybook/preview.ts       |  14 +-
 packages/frontend/package.json                |   4 +
 .../src/components/MkAbuseReport.stories.ts   |  11 +-
 .../components/MkAbuseReportWindow.stories.ts |  11 +-
 .../src/components/MkAchievements.stories.ts  |  11 +-
 .../src/components/MkAnalogClock.stories.ts   |  11 +-
 .../frontend/src/components/MkAsUi.stories.ts |  11 +-
 .../src/components/MkAutocomplete.stories.ts  |  11 +-
 .../src/components/MkAvatars.stories.ts       |  11 +-
 .../src/components/MkButton.stories.impl.ts   |  14 +
 .../src/components/MkButton.stories.ts        |  13 +-
 .../src/components/MkCaptcha.stories.ts       |  11 +-
 .../MkChannelFollowButton.stories.ts          |  11 +-
 .../components/MkChannelPreview.stories.ts    |  11 +-
 .../src/components/MkChart.stories.ts         |  11 +-
 .../src/components/MkChartLegend.stories.ts   |  11 +-
 .../src/components/MkChartTooltip.stories.ts  |  11 +-
 .../src/components/MkCheckbox.stories.ts      |  11 +-
 .../src/components/MkClickerGame.stories.ts   |  11 +-
 .../src/components/MkClipPreview.stories.ts   |  11 +-
 .../src/components/MkCode.core.stories.ts     |  11 +-
 .../frontend/src/components/MkCode.stories.ts |  11 +-
 .../src/components/MkContainer.stories.ts     |  11 +-
 .../src/components/MkContextMenu.stories.ts   |  11 +-
 .../src/components/MkCropperDialog.stories.ts |  11 +-
 .../src/components/MkCwButton.stories.ts      |  11 +-
 .../components/MkDateSeparatedList.stories.ts |  11 +-
 .../src/components/MkDialog.stories.ts        |  11 +-
 .../src/components/MkDigitalClock.stories.ts  |  11 +-
 .../src/components/MkDonation.stories.ts      |  11 +-
 .../src/components/MkDrive.file.stories.ts    |  11 +-
 .../src/components/MkDrive.folder.stories.ts  |  11 +-
 .../components/MkDrive.navFolder.stories.ts   |  11 +-
 .../src/components/MkDrive.stories.ts         |  11 +-
 .../MkDriveFileThumbnail.stories.ts           |  11 +-
 .../components/MkDriveSelectDialog.stories.ts |  11 +-
 .../src/components/MkDriveWindow.stories.ts   |  11 +-
 .../MkEmojiPicker.section.stories.ts          |  11 +-
 .../src/components/MkEmojiPicker.stories.ts   |  11 +-
 .../components/MkEmojiPickerDialog.stories.ts |  11 +-
 .../components/MkEmojiPickerWindow.stories.ts |  11 +-
 .../components/MkFeaturedPhotos.stories.ts    |  11 +-
 .../MkFileCaptionEditWindow.stories.ts        |  11 +-
 .../components/MkFileListForAdmin.stories.ts  |  11 +-
 .../src/components/MkFlashPreview.stories.ts  |  11 +-
 .../components/MkFoldableSection.stories.ts   |  11 +-
 .../src/components/MkFolder.stories.ts        |  11 +-
 .../src/components/MkFollowButton.stories.ts  |  11 +-
 .../components/MkForgotPassword.stories.ts    |  11 +-
 .../src/components/MkFormDialog.stories.ts    |  11 +-
 .../MkGalleryPostPreview.stories.ts           |  11 +-
 .../src/components/MkGoogle.stories.ts        |  11 +-
 .../src/components/MkHeatmap.stories.ts       |  11 +-
 .../src/components/MkImageViewer.stories.ts   |  11 +-
 .../components/MkImgWithBlurhash.stories.ts   |  11 +-
 .../frontend/src/components/MkInfo.stories.ts |  11 +-
 .../src/components/MkInput.stories.ts         |  11 +-
 .../components/MkInstanceCardMini.stories.ts  |  11 +-
 .../src/components/MkInstanceStats.stories.ts |  11 +-
 .../components/MkInstanceTicker.stories.ts    |  11 +-
 .../src/components/MkKeyValue.stories.ts      |  11 +-
 .../src/components/MkLaunchPad.stories.ts     |  11 +-
 .../frontend/src/components/MkLink.stories.ts |  11 +-
 .../src/components/MkMarquee.stories.ts       |  11 +-
 .../src/components/MkMediaBanner.stories.ts   |  11 +-
 .../src/components/MkMediaImage.stories.ts    |  11 +-
 .../src/components/MkMediaList.stories.ts     |  11 +-
 .../src/components/MkMediaVideo.stories.ts    |  11 +-
 .../src/components/MkMention.stories.ts       |  11 +-
 .../src/components/MkMenu.child.stories.ts    |  11 +-
 .../frontend/src/components/MkMenu.stories.ts |  11 +-
 .../src/components/MkMiniChart.stories.ts     |  11 +-
 .../src/components/MkModal.stories.ts         |  11 +-
 .../components/MkModalPageWindow.stories.ts   |  11 +-
 .../src/components/MkModalWindow.stories.ts   |  11 +-
 .../frontend/src/components/MkNote.stories.ts |  11 +-
 .../src/components/MkNoteDetailed.stories.ts  |  11 +-
 .../src/components/MkNoteHeader.stories.ts    |  11 +-
 .../src/components/MkNotePreview.stories.ts   |  11 +-
 .../src/components/MkNoteSimple.stories.ts    |  11 +-
 .../src/components/MkNoteSub.stories.ts       |  11 +-
 .../src/components/MkNotes.stories.ts         |  11 +-
 .../src/components/MkNotification.stories.ts  |  11 +-
 .../MkNotificationSettingWindow.stories.ts    |  11 +-
 .../src/components/MkNotifications.stories.ts |  11 +-
 .../src/components/MkNumber.stories.ts        |  11 +-
 .../src/components/MkNumberDiff.stories.ts    |  11 +-
 .../src/components/MkObjectView.stories.ts    |  11 +-
 .../components/MkObjectView.value.stories.ts  |  11 +-
 .../frontend/src/components/MkOmit.stories.ts |  11 +-
 .../src/components/MkPagePreview.stories.ts   |  11 +-
 .../src/components/MkPageWindow.stories.ts    |  11 +-
 .../src/components/MkPagination.stories.ts    |  11 +-
 .../src/components/MkPlusOneEffect.stories.ts |  11 +-
 .../frontend/src/components/MkPoll.stories.ts |  11 +-
 .../src/components/MkPollEditor.stories.ts    |  11 +-
 .../src/components/MkPopupMenu.stories.ts     |  11 +-
 .../src/components/MkPostForm.stories.ts      |  11 +-
 .../components/MkPostFormAttaches.stories.ts  |  11 +-
 .../components/MkPostFormDialog.stories.ts    |  11 +-
 .../MkPushNotificationAllowButton.stories.ts  |  11 +-
 .../src/components/MkRadio.stories.ts         |  11 +-
 .../src/components/MkRadios.stories.ts        |  11 +-
 .../src/components/MkRange.stories.ts         |  11 +-
 .../MkReactedUsersDialog.stories.ts           |  11 +-
 .../components/MkReactionEffect.stories.ts    |  11 +-
 .../src/components/MkReactionIcon.stories.ts  |  11 +-
 .../components/MkReactionTooltip.stories.ts   |  11 +-
 .../MkReactionsViewer.details.stories.ts      |  11 +-
 .../MkReactionsViewer.reaction.stories.ts     |  11 +-
 .../components/MkReactionsViewer.stories.ts   |  11 +-
 .../src/components/MkRemoteCaution.stories.ts |  11 +-
 .../components/MkRetentionHeatmap.stories.ts  |  11 +-
 .../src/components/MkRippleEffect.stories.ts  |  11 +-
 .../src/components/MkRolePreview.stories.ts   |  11 +-
 .../src/components/MkSample.stories.ts        |  11 +-
 .../src/components/MkSelect.stories.ts        |  11 +-
 .../src/components/MkSignin.stories.ts        |  11 +-
 .../src/components/MkSigninDialog.stories.ts  |  11 +-
 .../src/components/MkSignup.stories.ts        |  11 +-
 .../src/components/MkSignupDialog.stories.ts  |  11 +-
 .../src/components/MkSparkle.stories.ts       |  11 +-
 .../components/MkSubNoteContent.stories.ts    |  11 +-
 .../src/components/MkSuperMenu.stories.ts     |  11 +-
 .../src/components/MkSwitch.stories.ts        |  11 +-
 .../frontend/src/components/MkTab.stories.ts  |  11 +-
 .../src/components/MkTagCloud.stories.ts      |  11 +-
 .../src/components/MkTextarea.stories.ts      |  11 +-
 .../src/components/MkTimeline.stories.ts      |  11 +-
 .../src/components/MkToast.stories.ts         |  11 +-
 .../MkTokenGenerateWindow.stories.ts          |  11 +-
 .../src/components/MkTooltip.stories.ts       |  11 +-
 .../src/components/MkUpdated.stories.ts       |  11 +-
 .../src/components/MkUrlPreview.stories.ts    |  11 +-
 .../components/MkUrlPreviewPopup.stories.ts   |  11 +-
 .../src/components/MkUserCardMini.stories.ts  |  11 +-
 .../src/components/MkUserInfo.stories.ts      |  11 +-
 .../src/components/MkUserList.stories.ts      |  11 +-
 .../MkUserOnlineIndicator.stories.ts          |  11 +-
 .../src/components/MkUserPopup.stories.ts     |  11 +-
 .../components/MkUserSelectDialog.stories.ts  |  11 +-
 .../src/components/MkUsersTooltip.stories.ts  |  11 +-
 .../components/MkVisibilityPicker.stories.ts  |  11 +-
 .../src/components/MkWaitingDialog.stories.ts |  11 +-
 .../src/components/MkWidgets.stories.ts       |  11 +-
 .../src/components/MkWindow.stories.ts        |  11 +-
 .../src/components/MkYoutubePlayer.stories.ts |  11 +-
 .../src/components/form/link.stories.ts       |  11 +-
 .../src/components/form/section.stories.ts    |  11 +-
 .../src/components/form/slot.stories.ts       |  11 +-
 .../src/components/form/split.stories.ts      |  11 +-
 .../src/components/form/suspense.stories.ts   |  11 +-
 .../src/components/global/MkA.stories.ts      |  11 +-
 .../src/components/global/MkAcct.stories.ts   |  11 +-
 .../src/components/global/MkAd.stories.ts     |  11 +-
 .../src/components/global/MkAvatar.stories.ts |  11 +-
 .../global/MkCustomEmoji.stories.ts           |  11 +-
 .../components/global/MkEllipsis.stories.ts   |  11 +-
 .../src/components/global/MkEmoji.stories.ts  |  11 +-
 .../src/components/global/MkError.stories.ts  |  11 +-
 .../components/global/MkLoading.stories.ts    |  11 +-
 .../MkMisskeyFlavoredMarkdown.stories.ts      |  11 +-
 .../components/global/MkPageHeader.stories.ts |  11 +-
 .../global/MkPageHeader.tabs.stories.ts       |  11 +-
 .../src/components/global/MkSpacer.stories.ts |  11 +-
 .../global/MkStickyContainer.stories.ts       |  11 +-
 .../src/components/global/MkTime.stories.ts   |  11 +-
 .../src/components/global/MkUrl.stories.ts    |  11 +-
 .../components/global/MkUserName.stories.ts   |  11 +-
 .../components/global/RouterView.stories.ts   |  11 +-
 .../src/components/page/page.block.stories.ts |  11 +-
 .../components/page/page.button.stories.ts    |  11 +-
 .../components/page/page.canvas.stories.ts    |  11 +-
 .../components/page/page.counter.stories.ts   |  11 +-
 .../src/components/page/page.if.stories.ts    |  11 +-
 .../src/components/page/page.image.stories.ts |  11 +-
 .../src/components/page/page.note.stories.ts  |  11 +-
 .../page/page.number-input.stories.ts         |  11 +-
 .../src/components/page/page.post.stories.ts  |  11 +-
 .../page/page.radio-button.stories.ts         |  11 +-
 .../components/page/page.section.stories.ts   |  11 +-
 .../src/components/page/page.stories.ts       |  11 +-
 .../components/page/page.switch.stories.ts    |  11 +-
 .../page/page.text-input.stories.ts           |  11 +-
 .../src/components/page/page.text.stories.ts  |  11 +-
 .../page/page.textarea-input.stories.ts       |  11 +-
 .../components/page/page.textarea.stories.ts  |  11 +-
 .../frontend/src/pages/_empty_.stories.ts     |  11 +-
 .../frontend/src/pages/_error_.stories.ts     |  11 +-
 .../frontend/src/pages/_loading_.stories.ts   |  11 +-
 .../src/pages/about-misskey.stories.ts        |  11 +-
 .../src/pages/about.emojis.stories.ts         |  11 +-
 .../src/pages/about.federation.stories.ts     |  11 +-
 packages/frontend/src/pages/about.stories.ts  |  11 +-
 .../src/pages/achievements.stories.ts         |  11 +-
 .../frontend/src/pages/admin-file.stories.ts  |  11 +-
 .../pages/admin/RolesEditorFormula.stories.ts |  11 +-
 .../src/pages/admin/_header_.stories.ts       |  11 +-
 .../src/pages/admin/abuses.stories.ts         |  11 +-
 .../frontend/src/pages/admin/ads.stories.ts   |  11 +-
 .../src/pages/admin/announcements.stories.ts  |  11 +-
 .../src/pages/admin/bot-protection.stories.ts |  11 +-
 .../src/pages/admin/database.stories.ts       |  11 +-
 .../src/pages/admin/email-settings.stories.ts |  11 +-
 .../src/pages/admin/federation.stories.ts     |  11 +-
 .../frontend/src/pages/admin/files.stories.ts |  11 +-
 .../frontend/src/pages/admin/index.stories.ts |  11 +-
 .../src/pages/admin/instance-block.stories.ts |  11 +-
 .../src/pages/admin/moderation.stories.ts     |  11 +-
 .../src/pages/admin/object-storage.stories.ts |  11 +-
 .../src/pages/admin/other-settings.stories.ts |  11 +-
 .../admin/overview.active-users.stories.ts    |  11 +-
 .../admin/overview.ap-requests.stories.ts     |  11 +-
 .../admin/overview.federation.stories.ts      |  11 +-
 .../pages/admin/overview.heatmap.stories.ts   |  11 +-
 .../pages/admin/overview.instances.stories.ts |  11 +-
 .../admin/overview.moderators.stories.ts      |  11 +-
 .../src/pages/admin/overview.pie.stories.ts   |  11 +-
 .../admin/overview.queue.chart.stories.ts     |  11 +-
 .../src/pages/admin/overview.queue.stories.ts |  11 +-
 .../pages/admin/overview.retention.stories.ts |  11 +-
 .../src/pages/admin/overview.stats.stories.ts |  11 +-
 .../src/pages/admin/overview.stories.ts       |  11 +-
 .../src/pages/admin/overview.users.stories.ts |  11 +-
 .../src/pages/admin/proxy-account.stories.ts  |  11 +-
 .../pages/admin/queue.chart.chart.stories.ts  |  11 +-
 .../src/pages/admin/queue.chart.stories.ts    |  11 +-
 .../frontend/src/pages/admin/queue.stories.ts |  11 +-
 .../src/pages/admin/relays.stories.ts         |  11 +-
 .../src/pages/admin/roles.edit.stories.ts     |  11 +-
 .../src/pages/admin/roles.editor.stories.ts   |  11 +-
 .../src/pages/admin/roles.role.stories.ts     |  11 +-
 .../frontend/src/pages/admin/roles.stories.ts |  11 +-
 .../src/pages/admin/security.stories.ts       |  11 +-
 .../src/pages/admin/settings.stories.ts       |  11 +-
 .../frontend/src/pages/admin/users.stories.ts |  11 +-
 packages/frontend/src/pages/ads.stories.ts    |  11 +-
 .../src/pages/announcements.stories.ts        |  11 +-
 .../src/pages/antenna-timeline.stories.ts     |  11 +-
 .../frontend/src/pages/api-console.stories.ts |  11 +-
 .../frontend/src/pages/auth.form.stories.ts   |  11 +-
 packages/frontend/src/pages/auth.stories.ts   |  11 +-
 .../src/pages/channel-editor.stories.ts       |  11 +-
 .../frontend/src/pages/channel.stories.ts     |  11 +-
 .../frontend/src/pages/channels.stories.ts    |  11 +-
 .../frontend/src/pages/clicker.stories.ts     |  11 +-
 packages/frontend/src/pages/clip.stories.ts   |  11 +-
 .../pages/custom-emojis-manager.stories.ts    |  11 +-
 packages/frontend/src/pages/drive.stories.ts  |  11 +-
 .../src/pages/emoji-edit-dialog.stories.ts    |  11 +-
 .../src/pages/emojis.emoji.stories.ts         |  11 +-
 .../src/pages/explore.featured.stories.ts     |  11 +-
 .../src/pages/explore.roles.stories.ts        |  11 +-
 .../frontend/src/pages/explore.stories.ts     |  11 +-
 .../src/pages/explore.users.stories.ts        |  11 +-
 .../frontend/src/pages/favorites.stories.ts   |  11 +-
 .../src/pages/flash/flash-edit.stories.ts     |  11 +-
 .../src/pages/flash/flash-index.stories.ts    |  11 +-
 .../frontend/src/pages/flash/flash.stories.ts |  11 +-
 .../src/pages/follow-requests.stories.ts      |  11 +-
 packages/frontend/src/pages/follow.stories.ts |  11 +-
 .../src/pages/gallery/edit.stories.ts         |  11 +-
 .../src/pages/gallery/index.stories.ts        |  11 +-
 .../src/pages/gallery/post.stories.ts         |  11 +-
 .../src/pages/instance-info.stories.ts        |  11 +-
 packages/frontend/src/pages/miauth.stories.ts |  11 +-
 .../src/pages/my-antennas/create.stories.ts   |  11 +-
 .../src/pages/my-antennas/edit.stories.ts     |  11 +-
 .../src/pages/my-antennas/editor.stories.ts   |  11 +-
 .../src/pages/my-antennas/index.stories.ts    |  11 +-
 .../src/pages/my-clips/index.stories.ts       |  11 +-
 .../src/pages/my-lists/index.stories.ts       |  11 +-
 .../src/pages/my-lists/list.stories.ts        |  11 +-
 .../frontend/src/pages/not-found.stories.ts   |  11 +-
 packages/frontend/src/pages/note.stories.ts   |  11 +-
 .../src/pages/notifications.stories.ts        |  11 +-
 .../els/page-editor.el.image.stories.ts       |  11 +-
 .../els/page-editor.el.note.stories.ts        |  11 +-
 .../els/page-editor.el.section.stories.ts     |  11 +-
 .../els/page-editor.el.text.stories.ts        |  11 +-
 .../page-editor/page-editor.blocks.stories.ts |  11 +-
 .../page-editor.container.stories.ts          |  11 +-
 .../pages/page-editor/page-editor.stories.ts  |  11 +-
 packages/frontend/src/pages/page.stories.ts   |  11 +-
 packages/frontend/src/pages/pages.stories.ts  |  11 +-
 .../frontend/src/pages/preview.stories.ts     |  11 +-
 .../src/pages/registry.keys.stories.ts        |  11 +-
 .../frontend/src/pages/registry.stories.ts    |  11 +-
 .../src/pages/registry.value.stories.ts       |  11 +-
 .../src/pages/reset-password.stories.ts       |  11 +-
 packages/frontend/src/pages/role.stories.ts   |  11 +-
 .../frontend/src/pages/scratchpad.stories.ts  |  11 +-
 packages/frontend/src/pages/search.stories.ts |  11 +-
 .../pages/settings/2fa.qrdialog.stories.ts    |  11 +-
 .../src/pages/settings/2fa.stories.ts         |  11 +-
 .../pages/settings/account-info.stories.ts    |  11 +-
 .../src/pages/settings/accounts.stories.ts    |  11 +-
 .../src/pages/settings/api.stories.ts         |  11 +-
 .../src/pages/settings/apps.stories.ts        |  11 +-
 .../src/pages/settings/custom-css.stories.ts  |  11 +-
 .../src/pages/settings/deck.stories.ts        |  11 +-
 .../pages/settings/delete-account.stories.ts  |  11 +-
 .../src/pages/settings/drive.stories.ts       |  11 +-
 .../src/pages/settings/email.stories.ts       |  11 +-
 .../src/pages/settings/general.stories.ts     |  11 +-
 .../pages/settings/import-export.stories.ts   |  11 +-
 .../src/pages/settings/index.stories.ts       |  11 +-
 .../pages/settings/instance-mute.stories.ts   |  11 +-
 .../src/pages/settings/mute-block.stories.ts  |  11 +-
 .../src/pages/settings/navbar.stories.ts      |  11 +-
 .../pages/settings/notifications.stories.ts   |  11 +-
 .../src/pages/settings/other.stories.ts       |  11 +-
 .../pages/settings/plugin.install.stories.ts  |  11 +-
 .../src/pages/settings/plugin.stories.ts      |  11 +-
 .../settings/preferences-backups.stories.ts   |  11 +-
 .../src/pages/settings/privacy.stories.ts     |  11 +-
 .../src/pages/settings/profile.stories.ts     |  11 +-
 .../src/pages/settings/reaction.stories.ts    |  11 +-
 .../src/pages/settings/roles.stories.ts       |  11 +-
 .../src/pages/settings/security.stories.ts    |  11 +-
 .../pages/settings/sounds.sound.stories.ts    |  11 +-
 .../src/pages/settings/sounds.stories.ts      |  11 +-
 .../settings/statusbar.statusbar.stories.ts   |  11 +-
 .../src/pages/settings/statusbar.stories.ts   |  11 +-
 .../pages/settings/theme.install.stories.ts   |  11 +-
 .../pages/settings/theme.manage.stories.ts    |  11 +-
 .../src/pages/settings/theme.stories.ts       |  11 +-
 .../pages/settings/webhook.edit.stories.ts    |  11 +-
 .../src/pages/settings/webhook.new.stories.ts |  11 +-
 .../src/pages/settings/webhook.stories.ts     |  11 +-
 .../src/pages/settings/word-mute.stories.ts   |  11 +-
 packages/frontend/src/pages/share.stories.ts  |  11 +-
 .../src/pages/signup-complete.stories.ts      |  11 +-
 packages/frontend/src/pages/tag.stories.ts    |  11 +-
 .../src/pages/theme-editor.stories.ts         |  11 +-
 .../frontend/src/pages/timeline.stories.ts    |  11 +-
 .../src/pages/timeline.tutorial.stories.ts    |  11 +-
 .../frontend/src/pages/user-info.stories.ts   |  11 +-
 .../src/pages/user-list-timeline.stories.ts   |  11 +-
 .../frontend/src/pages/user-tag.stories.ts    |  11 +-
 .../src/pages/user/achievements.stories.ts    |  11 +-
 .../pages/user/activity.following.stories.ts  |  11 +-
 .../pages/user/activity.heatmap.stories.ts    |  11 +-
 .../src/pages/user/activity.notes.stories.ts  |  11 +-
 .../src/pages/user/activity.pv.stories.ts     |  11 +-
 .../src/pages/user/activity.stories.ts        |  11 +-
 .../frontend/src/pages/user/clips.stories.ts  |  11 +-
 .../src/pages/user/follow-list.stories.ts     |  11 +-
 .../src/pages/user/followers.stories.ts       |  11 +-
 .../src/pages/user/following.stories.ts       |  11 +-
 .../src/pages/user/gallery.stories.ts         |  11 +-
 .../frontend/src/pages/user/home.stories.ts   |  11 +-
 .../src/pages/user/index.activity.stories.ts  |  11 +-
 .../src/pages/user/index.photos.stories.ts    |  11 +-
 .../frontend/src/pages/user/index.stories.ts  |  11 +-
 .../src/pages/user/index.timeline.stories.ts  |  11 +-
 .../frontend/src/pages/user/pages.stories.ts  |  11 +-
 .../src/pages/user/reactions.stories.ts       |  11 +-
 .../src/pages/welcome.entrance.a.stories.ts   |  11 +-
 .../src/pages/welcome.entrance.b.stories.ts   |  11 +-
 .../src/pages/welcome.entrance.c.stories.ts   |  11 +-
 .../src/pages/welcome.setup.stories.ts        |  11 +-
 .../frontend/src/pages/welcome.stories.ts     |  11 +-
 .../src/pages/welcome.timeline.stories.ts     |  11 +-
 .../src/ui/_common_/common.stories.ts         |  11 +-
 .../ui/_common_/navbar-for-mobile.stories.ts  |  11 +-
 .../src/ui/_common_/navbar.stories.ts         |  11 +-
 .../src/ui/_common_/notification.stories.ts   |  11 +-
 .../_common_/statusbar-federation.stories.ts  |  11 +-
 .../src/ui/_common_/statusbar-rss.stories.ts  |  11 +-
 .../_common_/statusbar-user-list.stories.ts   |  11 +-
 .../src/ui/_common_/statusbars.stories.ts     |  11 +-
 .../ui/_common_/stream-indicator.stories.ts   |  11 +-
 .../src/ui/_common_/upload.stories.ts         |  11 +-
 .../frontend/src/ui/classic.header.stories.ts |  11 +-
 .../src/ui/classic.sidebar.stories.ts         |  11 +-
 packages/frontend/src/ui/classic.stories.ts   |  11 +-
 packages/frontend/src/ui/deck.stories.ts      |  11 +-
 .../src/ui/deck/antenna-column.stories.ts     |  11 +-
 .../src/ui/deck/channel-column.stories.ts     |  11 +-
 .../src/ui/deck/column-core.stories.ts        |  11 +-
 .../frontend/src/ui/deck/column.stories.ts    |  11 +-
 .../src/ui/deck/direct-column.stories.ts      |  11 +-
 .../src/ui/deck/list-column.stories.ts        |  11 +-
 .../src/ui/deck/main-column.stories.ts        |  11 +-
 .../src/ui/deck/mentions-column.stories.ts    |  11 +-
 .../ui/deck/notifications-column.stories.ts   |  11 +-
 .../frontend/src/ui/deck/tl-column.stories.ts |  11 +-
 .../src/ui/deck/widgets-column.stories.ts     |  11 +-
 packages/frontend/src/ui/universal.stories.ts |  11 +-
 .../src/ui/universal.widgets.stories.ts       |  11 +-
 packages/frontend/src/ui/visitor.stories.ts   |  11 +-
 packages/frontend/src/ui/visitor/a.stories.ts |  11 +-
 packages/frontend/src/ui/visitor/b.stories.ts |  11 +-
 .../frontend/src/ui/visitor/header.stories.ts |  11 +-
 .../frontend/src/ui/visitor/kanban.stories.ts |  11 +-
 packages/frontend/src/ui/zen.stories.ts       |  11 +-
 .../WidgetActivity.calendar.stories.ts        |  11 +-
 .../widgets/WidgetActivity.chart.stories.ts   |  11 +-
 .../src/widgets/WidgetActivity.stories.ts     |  11 +-
 .../src/widgets/WidgetAichan.stories.ts       |  11 +-
 .../src/widgets/WidgetAiscript.stories.ts     |  11 +-
 .../src/widgets/WidgetAiscriptApp.stories.ts  |  11 +-
 .../src/widgets/WidgetButton.stories.ts       |  11 +-
 .../src/widgets/WidgetCalendar.stories.ts     |  11 +-
 .../src/widgets/WidgetClicker.stories.ts      |  11 +-
 .../src/widgets/WidgetClock.stories.ts        |  11 +-
 .../src/widgets/WidgetDigitalClock.stories.ts |  11 +-
 .../src/widgets/WidgetFederation.stories.ts   |  11 +-
 .../widgets/WidgetInstanceCloud.stories.ts    |  11 +-
 .../src/widgets/WidgetInstanceInfo.stories.ts |  11 +-
 .../src/widgets/WidgetJobQueue.stories.ts     |  11 +-
 .../src/widgets/WidgetMemo.stories.ts         |  11 +-
 .../widgets/WidgetNotifications.stories.ts    |  11 +-
 .../src/widgets/WidgetOnlineUsers.stories.ts  |  11 +-
 .../src/widgets/WidgetPhotos.stories.ts       |  11 +-
 .../src/widgets/WidgetPostForm.stories.ts     |  11 +-
 .../src/widgets/WidgetProfile.stories.ts      |  11 +-
 .../frontend/src/widgets/WidgetRss.stories.ts |  11 +-
 .../src/widgets/WidgetRssTicker.stories.ts    |  11 +-
 .../src/widgets/WidgetSlideshow.stories.ts    |  11 +-
 .../src/widgets/WidgetTimeline.stories.ts     |  11 +-
 .../src/widgets/WidgetTrends.stories.ts       |  11 +-
 .../src/widgets/WidgetUnixClock.stories.ts    |  11 +-
 .../src/widgets/WidgetUserList.stories.ts     |  11 +-
 .../widgets/server-metric/cpu-mem.stories.ts  |  11 +-
 .../src/widgets/server-metric/cpu.stories.ts  |  11 +-
 .../src/widgets/server-metric/disk.stories.ts |  11 +-
 .../widgets/server-metric/index.stories.ts    |  11 +-
 .../src/widgets/server-metric/mem.stories.ts  |  11 +-
 .../src/widgets/server-metric/net.stories.ts  |  11 +-
 .../src/widgets/server-metric/pie.stories.ts  |  11 +-
 pnpm-lock.yaml                                | 296 ++++++++++++++++--
 435 files changed, 3887 insertions(+), 1361 deletions(-)
 create mode 100644 packages/frontend/.storybook/manager.ts
 create mode 100644 packages/frontend/src/components/MkButton.stories.impl.ts

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index b446d30fb1..cc39ef68e7 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -1,4 +1,5 @@
-import * as fs from 'node:fs/promises';
+import { existsSync, readFileSync } from 'node:fs';
+import { writeFile } from 'node:fs/promises';
 import { basename, dirname } from 'node:path/posix';
 import { promisify } from 'node:util';
 import { generate } from 'astring';
@@ -12,6 +13,10 @@ function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>):
 }
 
 function toStories(component: string): string {
+	const msw = `${component.slice(0, -'.vue'.length)}.msw`;
+	const implStories = `${component.slice(0, -'.vue'.length)}.stories.impl`;
+	const hasMsw = existsSync(`${msw}.ts`);
+	const hasImplStories = existsSync(`${implStories}.ts`);
 	const base = basename(component);
 	const dir = dirname(component);
 	const literal = (
@@ -27,7 +32,17 @@ function toStories(component: string): string {
 					key={<identifier name="layout" />}
 					value={<literal value={`${dir}/`.startsWith('src/pages/') || base === 'MkAnalogClock.vue' ? 'fullscreen' : 'centered'} />}
 					kind="init"
-				/>
+				/>,
+				...hasMsw
+					? [
+							<property
+								key={<identifier name="msw" />}
+								value={<identifier name="msw" />}
+								kind="init"
+								shorthand
+							/>,
+						]
+					: [],
 			]}
 		/>
 	);
@@ -47,6 +62,18 @@ function toStories(component: string): string {
 						/>,
 					]}
 				/>,
+				...hasMsw
+					? [
+							<import-declaration
+								source={<literal value={`./${basename(msw)}`} />}
+								specifiers={[
+									<import-namespace-specifier
+										local={<identifier name="msw" />}
+									/>,
+								]}
+							/>,
+						]
+					: [],
 				<import-declaration
 					source={<literal value={`./${base}`} />}
 					specifiers={[
@@ -80,50 +107,109 @@ function toStories(component: string): string {
 						/>,
 					]}
 				/>,
-				<export-named-declaration
-					declaration={
-						<variable-declaration
-							kind="const"
-							declarations={[
-								<variable-declarator
-									id={<identifier name="Default" />}
-									init={
-										<object-expression
-											properties={[
-												<property
-													key={<identifier name="components" />}
-													value={
-														<object-expression
-															properties={[
-																<property
-																	key={identifier}
-																	value={identifier}
-																	kind="init"
-																	shorthand
-																/>,
-															]}
-														/>
-													}
-													kind="init"
-												/>,
-												<property
-													key={<identifier name="template" />}
-													value={<literal value={`<${identifier.name} />`} />}
-													kind="init"
-												/>,
-												<property
-													key={<identifier name="parameters" />}
-													value={parameters}
-													kind="init"
-												/>,
-											]}
-										/>
-									}
-								/>,
-							]}
-						/>
-					}
-				/>,
+				...hasImplStories
+					? [
+						]
+					: [
+							<export-named-declaration
+								declaration={
+									<variable-declaration
+										kind="const"
+										declarations={[
+											<variable-declarator
+												id={<identifier name="Default" />}
+												init={
+													<object-expression
+														properties={[
+															<property
+																key={<identifier name="render" />}
+																value={
+																	<function-expression
+																		id={<identifier name="render" />}
+																		params={[
+																			<identifier name="args" />,
+																			<object-pattern
+																				properties={[
+																					<property
+																						key={<identifier name="argTypes" />}
+																						value={<identifier name="argTypes" />}
+																						kind="init"
+																						shorthand
+																					/>,
+																				]}
+																			/>,
+																		]}
+																		body={
+																			<block-statement
+																				body={[
+																					<return-statement
+																						argument={
+																							<object-expression
+																								properties={[
+																									<property
+																										key={<identifier name="components" />}
+																										value={
+																											<object-expression
+																												properties={[
+																													<property
+																														key={identifier}
+																														value={identifier}
+																														kind="init"
+																														shorthand
+																													/>,
+																												]}
+																											/>
+																										}
+																										kind="init"
+																									/>,
+																									<property
+																										key={<identifier name="props" />}
+																										value={
+																											<call-expression
+																												callee={
+																													<member-expression
+																														object={<identifier name="Object" />}
+																														property={<identifier name="keys" />}
+																													/>
+																												}
+																												arguments={[
+																													<identifier name="argTypes" />,
+																												]}
+																											/>
+																										}
+																										kind="init"
+																									/>,
+																									<property
+																										key={<identifier name="template" />}
+																										value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
+																										kind="init"
+																									/>,
+																								]}
+																							/>
+																						}
+																					/>,
+																				]}
+																			/>
+																		}
+																	/>
+																}
+																method
+																kind="init"
+															/>,
+															<property
+																key={<identifier name="parameters" />}
+																value={parameters}
+																kind="init"
+															/>,
+														]}
+													/>
+												}
+											/>,
+										]}
+									/>
+								}
+							/>,
+						],
 				<export-default-declaration
 					declaration={<identifier name="meta" />}
 				/>,
@@ -131,7 +217,7 @@ function toStories(component: string): string {
 		/>
 	) as unknown as estree.Program;
 	return format(
-		generate(program),
+		generate(program) + (hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
 		{
 			parser: 'babel-ts',
 			singleQuote: true,
@@ -143,11 +229,6 @@ function toStories(component: string): string {
 promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then((components) => Promise.all(
 	components.map((component) => {
 		const stories = component.replace(/\.vue$/, '.stories.ts');
-		fs.stat(stories).then(
-			() => {},
-			() => {
-				fs.writeFile(stories, toStories(component));
-			}
-		);
+		return writeFile(stories, toStories(component));
 	})
 ));
diff --git a/packages/frontend/.storybook/manager.ts b/packages/frontend/.storybook/manager.ts
new file mode 100644
index 0000000000..33213bffa9
--- /dev/null
+++ b/packages/frontend/.storybook/manager.ts
@@ -0,0 +1,12 @@
+import { addons } from '@storybook/manager-api';
+import { create } from '@storybook/theming/create';
+
+addons.setConfig({
+	theme: create({
+		base: 'dark',
+		brandTitle: 'Misskey Storybook',
+		brandUrl: 'https://misskey-hub.net',
+		brandImage: 'https://github.com/misskey-dev/assets/blob/main/misskey.svg?raw=true',
+		brandTarget: '_blank',
+	}),
+});
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 40b6ea0fb0..1e9bcca09f 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,8 +1,10 @@
 import { type Preview, setup } from '@storybook/vue3';
+import { initialize, mswDecorator } from 'msw-storybook-addon';
 import locale from './locale';
 import theme from './theme';
 import '../src/style.scss';
 
+initialize();
 localStorage.setItem("locale", JSON.stringify(locale));
 Promise.all([
 	import('../src/components'),
@@ -15,12 +17,22 @@ Promise.all([
 		directives(app);
 		widgets(app);
 	});
-})
+});
 
 const preview = {
+	decorators: [
+		mswDecorator,
+	],
 	parameters: {
 		layout: 'centered',
 	},
+	argTypes: {
+		default: {
+			control: {
+				type: 'text',
+			},
+		},
+	},
 } satisfies Preview;
 
 export default preview;
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 0a7e6b50bb..03f7e5d2bb 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -76,7 +76,9 @@
 		"@storybook/addon-interactions": "^7.0.0-rc.4",
 		"@storybook/addon-links": "^7.0.0-rc.4",
 		"@storybook/blocks": "^7.0.0-rc.4",
+		"@storybook/manager-api": "7.0.0-rc.4",
 		"@storybook/testing-library": "^0.0.14-next.1",
+		"@storybook/theming": "7.0.0-rc.4",
 		"@storybook/vue3": "^7.0.0-rc.4",
 		"@storybook/vue3-vite": "^7.0.0-rc.4",
 		"@testing-library/vue": "^6.6.1",
@@ -105,6 +107,8 @@
 		"eslint-plugin-import": "2.27.5",
 		"eslint-plugin-vue": "9.9.0",
 		"happy-dom": "8.9.0",
+		"msw": "^1.1.0",
+		"msw-storybook-addon": "^1.8.0",
 		"prettier": "^2.8.4",
 		"react": "^18.2.0",
 		"react-dom": "^18.2.0",
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
index 4b02967692..e3a87b80fd 100644
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAbuseReport,
 };
 export const Default = {
-	components: {
-		MkAbuseReport,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAbuseReport,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAbuseReport v-bind="$props" />',
+		};
 	},
-	template: '<MkAbuseReport />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
index e8f90339f1..47b0923e9a 100644
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAbuseReportWindow,
 };
 export const Default = {
-	components: {
-		MkAbuseReportWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAbuseReportWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAbuseReportWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkAbuseReportWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
index a62fadc5cf..9c0b1aec8d 100644
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAchievements,
 };
 export const Default = {
-	components: {
-		MkAchievements,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAchievements,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAchievements v-bind="$props" />',
+		};
 	},
-	template: '<MkAchievements />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
index 7f3e51128e..f81e997cfb 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAnalogClock,
 };
 export const Default = {
-	components: {
-		MkAnalogClock,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAnalogClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAnalogClock v-bind="$props" />',
+		};
 	},
-	template: '<MkAnalogClock />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
index 82bc3c05cc..7ad72bef43 100644
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAsUi,
 };
 export const Default = {
-	components: {
-		MkAsUi,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAsUi,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAsUi v-bind="$props" />',
+		};
 	},
-	template: '<MkAsUi />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
index 6a1be12e08..c6a0f6be63 100644
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAutocomplete,
 };
 export const Default = {
-	components: {
-		MkAutocomplete,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAutocomplete,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAutocomplete v-bind="$props" />',
+		};
 	},
-	template: '<MkAutocomplete />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
index 26b7fab544..bc2a82c842 100644
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAvatars,
 };
 export const Default = {
-	components: {
-		MkAvatars,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAvatars,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAvatars v-bind="$props" />',
+		};
 	},
-	template: '<MkAvatars />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
new file mode 100644
index 0000000000..5f73ca71bc
--- /dev/null
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -0,0 +1,14 @@
+export const Default = {
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkButton v-bind="$props">Text</MkButton>',
+		};
+	},
+	parameters: {
+		layout: 'centered',
+	},
+};
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index 26ce51bcaf..57dacb8f18 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -4,13 +4,18 @@ const meta = {
 	title: 'components/MkButton',
 	component: MkButton,
 };
+export default meta;
 export const Default = {
-	components: {
-		MkButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkButton v-bind="$props">Text</MkButton>',
+		};
 	},
-	template: '<MkButton />',
 	parameters: {
 		layout: 'centered',
 	},
 };
-export default meta;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index 23d8b56244..e58f36ccff 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCaptcha,
 };
 export const Default = {
-	components: {
-		MkCaptcha,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCaptcha,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCaptcha v-bind="$props" />',
+		};
 	},
-	template: '<MkCaptcha />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
index 6ce5d52d9c..889b9a7f09 100644
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkChannelFollowButton,
 };
 export const Default = {
-	components: {
-		MkChannelFollowButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkChannelFollowButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkChannelFollowButton v-bind="$props" />',
+		};
 	},
-	template: '<MkChannelFollowButton />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
index 45f3808738..a4537bee52 100644
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkChannelPreview,
 };
 export const Default = {
-	components: {
-		MkChannelPreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkChannelPreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkChannelPreview v-bind="$props" />',
+		};
 	},
-	template: '<MkChannelPreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
index cf607d7703..8d4b633edf 100644
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkChart,
 };
 export const Default = {
-	components: {
-		MkChart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkChart,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkChart v-bind="$props" />',
+		};
 	},
-	template: '<MkChart />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
index 8e6a449b59..fcc39a6a46 100644
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkChartLegend,
 };
 export const Default = {
-	components: {
-		MkChartLegend,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkChartLegend,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkChartLegend v-bind="$props" />',
+		};
 	},
-	template: '<MkChartLegend />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
index 71095ce79e..d0ab98b975 100644
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkChartTooltip,
 };
 export const Default = {
-	components: {
-		MkChartTooltip,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkChartTooltip,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkChartTooltip v-bind="$props" />',
+		};
 	},
-	template: '<MkChartTooltip />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
index 1aaa03ba0c..177b8a6402 100644
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCheckbox,
 };
 export const Default = {
-	components: {
-		MkCheckbox,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCheckbox,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCheckbox v-bind="$props" />',
+		};
 	},
-	template: '<MkCheckbox />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
index 39dad4e676..c56ec9bd1a 100644
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkClickerGame,
 };
 export const Default = {
-	components: {
-		MkClickerGame,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkClickerGame,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkClickerGame v-bind="$props" />',
+		};
 	},
-	template: '<MkClickerGame />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
index b512c34e4a..422d12fab1 100644
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkClipPreview,
 };
 export const Default = {
-	components: {
-		MkClipPreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkClipPreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkClipPreview v-bind="$props" />',
+		};
 	},
-	template: '<MkClipPreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index dcc7d6f46d..53b41eb0c9 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCode_core,
 };
 export const Default = {
-	components: {
-		MkCode_core,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCode_core,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCode_core v-bind="$props" />',
+		};
 	},
-	template: '<MkCode_core />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
index 625d6f3d22..1f6d4daff0 100644
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCode,
 };
 export const Default = {
-	components: {
-		MkCode,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCode,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCode v-bind="$props" />',
+		};
 	},
-	template: '<MkCode />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
index 73aa520ba4..cd07161ce9 100644
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkContainer,
 };
 export const Default = {
-	components: {
-		MkContainer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkContainer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkContainer v-bind="$props" />',
+		};
 	},
-	template: '<MkContainer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
index 78885a57ae..927e51c8a1 100644
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkContextMenu,
 };
 export const Default = {
-	components: {
-		MkContextMenu,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkContextMenu,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkContextMenu v-bind="$props" />',
+		};
 	},
-	template: '<MkContextMenu />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
index 38c665d770..3896c88404 100644
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCropperDialog,
 };
 export const Default = {
-	components: {
-		MkCropperDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCropperDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCropperDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkCropperDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
index 3545121190..1a7398a951 100644
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCwButton,
 };
 export const Default = {
-	components: {
-		MkCwButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCwButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCwButton v-bind="$props" />',
+		};
 	},
-	template: '<MkCwButton />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
index ea319c12eb..719734a08f 100644
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDateSeparatedList,
 };
 export const Default = {
-	components: {
-		MkDateSeparatedList,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDateSeparatedList,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDateSeparatedList v-bind="$props" />',
+		};
 	},
-	template: '<MkDateSeparatedList />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
index 2996b180ba..939cc9a571 100644
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDialog,
 };
 export const Default = {
-	components: {
-		MkDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
index 6a6299d5cb..86706bde1e 100644
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDigitalClock,
 };
 export const Default = {
-	components: {
-		MkDigitalClock,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDigitalClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDigitalClock v-bind="$props" />',
+		};
 	},
-	template: '<MkDigitalClock />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
index afee626577..ae57ad2502 100644
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDonation,
 };
 export const Default = {
-	components: {
-		MkDonation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDonation,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDonation v-bind="$props" />',
+		};
 	},
-	template: '<MkDonation />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index 0730b78a69..c873285b4f 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDrive_file,
 };
 export const Default = {
-	components: {
-		MkDrive_file,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDrive_file,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDrive_file v-bind="$props" />',
+		};
 	},
-	template: '<MkDrive_file />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index 4b5f5b9ac3..3d70a81bb4 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDrive_folder,
 };
 export const Default = {
-	components: {
-		MkDrive_folder,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDrive_folder,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDrive_folder v-bind="$props" />',
+		};
 	},
-	template: '<MkDrive_folder />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index f38016e320..1279d9eae1 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDrive_navFolder,
 };
 export const Default = {
-	components: {
-		MkDrive_navFolder,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDrive_navFolder,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDrive_navFolder v-bind="$props" />',
+		};
 	},
-	template: '<MkDrive_navFolder />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
index 2d4afc95da..f581ddabeb 100644
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDrive,
 };
 export const Default = {
-	components: {
-		MkDrive,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDrive,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDrive v-bind="$props" />',
+		};
 	},
-	template: '<MkDrive />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
index 4b3565cf2d..9e6e078c06 100644
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDriveFileThumbnail,
 };
 export const Default = {
-	components: {
-		MkDriveFileThumbnail,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDriveFileThumbnail,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDriveFileThumbnail v-bind="$props" />',
+		};
 	},
-	template: '<MkDriveFileThumbnail />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
index 0ac06ba2fe..39a7828b4f 100644
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDriveSelectDialog,
 };
 export const Default = {
-	components: {
-		MkDriveSelectDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDriveSelectDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDriveSelectDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkDriveSelectDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
index 44d46b19d7..29cdd5228e 100644
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkDriveWindow,
 };
 export const Default = {
-	components: {
-		MkDriveWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkDriveWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkDriveWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkDriveWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index 1a19f4fb3d..60ea8fac00 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEmojiPicker_section,
 };
 export const Default = {
-	components: {
-		MkEmojiPicker_section,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEmojiPicker_section,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEmojiPicker_section v-bind="$props" />',
+		};
 	},
-	template: '<MkEmojiPicker_section />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
index 977be11bc7..06b41d28d7 100644
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEmojiPicker,
 };
 export const Default = {
-	components: {
-		MkEmojiPicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEmojiPicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEmojiPicker v-bind="$props" />',
+		};
 	},
-	template: '<MkEmojiPicker />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
index ec6972bac3..56ab6ac013 100644
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEmojiPickerDialog,
 };
 export const Default = {
-	components: {
-		MkEmojiPickerDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEmojiPickerDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEmojiPickerDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkEmojiPickerDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
index d3393d8f97..470bacaf2c 100644
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEmojiPickerWindow,
 };
 export const Default = {
-	components: {
-		MkEmojiPickerWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEmojiPickerWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEmojiPickerWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkEmojiPickerWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
index 613723d08d..0da9787c9c 100644
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFeaturedPhotos,
 };
 export const Default = {
-	components: {
-		MkFeaturedPhotos,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFeaturedPhotos,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFeaturedPhotos v-bind="$props" />',
+		};
 	},
-	template: '<MkFeaturedPhotos />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
index c86d7d1887..2ade1eef49 100644
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFileCaptionEditWindow,
 };
 export const Default = {
-	components: {
-		MkFileCaptionEditWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFileCaptionEditWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFileCaptionEditWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkFileCaptionEditWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
index cd66908fc6..22386b84c2 100644
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFileListForAdmin,
 };
 export const Default = {
-	components: {
-		MkFileListForAdmin,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFileListForAdmin,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFileListForAdmin v-bind="$props" />',
+		};
 	},
-	template: '<MkFileListForAdmin />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
index ec23c2055e..b8d218ed70 100644
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFlashPreview,
 };
 export const Default = {
-	components: {
-		MkFlashPreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFlashPreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFlashPreview v-bind="$props" />',
+		};
 	},
-	template: '<MkFlashPreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
index 3760566e03..80d9ca8615 100644
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFoldableSection,
 };
 export const Default = {
-	components: {
-		MkFoldableSection,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFoldableSection,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFoldableSection v-bind="$props" />',
+		};
 	},
-	template: '<MkFoldableSection />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
index b873a6238c..7eb6a3b0e3 100644
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFolder,
 };
 export const Default = {
-	components: {
-		MkFolder,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFolder,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFolder v-bind="$props" />',
+		};
 	},
-	template: '<MkFolder />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
index 51d7827dfc..4e85afa014 100644
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFollowButton,
 };
 export const Default = {
-	components: {
-		MkFollowButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFollowButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFollowButton v-bind="$props" />',
+		};
 	},
-	template: '<MkFollowButton />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
index 3f809e6906..6dd724aa12 100644
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkForgotPassword,
 };
 export const Default = {
-	components: {
-		MkForgotPassword,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkForgotPassword,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkForgotPassword v-bind="$props" />',
+		};
 	},
-	template: '<MkForgotPassword />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
index 45e1c6b20f..6622424376 100644
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkFormDialog,
 };
 export const Default = {
-	components: {
-		MkFormDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkFormDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkFormDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkFormDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
index 89e4fe3080..18b0ab6ae1 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkGalleryPostPreview,
 };
 export const Default = {
-	components: {
-		MkGalleryPostPreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkGalleryPostPreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkGalleryPostPreview v-bind="$props" />',
+		};
 	},
-	template: '<MkGalleryPostPreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
index 01f147cd0a..660607038f 100644
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkGoogle,
 };
 export const Default = {
-	components: {
-		MkGoogle,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkGoogle,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkGoogle v-bind="$props" />',
+		};
 	},
-	template: '<MkGoogle />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
index 334cde91c7..1fdb8eb081 100644
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkHeatmap,
 };
 export const Default = {
-	components: {
-		MkHeatmap,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkHeatmap,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkHeatmap v-bind="$props" />',
+		};
 	},
-	template: '<MkHeatmap />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
index c2be14dcda..4f0ff7f437 100644
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkImageViewer,
 };
 export const Default = {
-	components: {
-		MkImageViewer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkImageViewer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkImageViewer v-bind="$props" />',
+		};
 	},
-	template: '<MkImageViewer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
index 06c2062af2..c00088d9b2 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkImgWithBlurhash,
 };
 export const Default = {
-	components: {
-		MkImgWithBlurhash,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkImgWithBlurhash,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkImgWithBlurhash v-bind="$props" />',
+		};
 	},
-	template: '<MkImgWithBlurhash />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
index d559660393..1e164d4278 100644
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkInfo,
 };
 export const Default = {
-	components: {
-		MkInfo,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkInfo,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkInfo v-bind="$props" />',
+		};
 	},
-	template: '<MkInfo />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
index 65d43322bb..199a5b5392 100644
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkInput,
 };
 export const Default = {
-	components: {
-		MkInput,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkInput,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkInput v-bind="$props" />',
+		};
 	},
-	template: '<MkInput />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
index 8bd0eb1b41..fcc9e8f2ee 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkInstanceCardMini,
 };
 export const Default = {
-	components: {
-		MkInstanceCardMini,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkInstanceCardMini,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkInstanceCardMini v-bind="$props" />',
+		};
 	},
-	template: '<MkInstanceCardMini />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
index ee5aec9810..74fa5359be 100644
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkInstanceStats,
 };
 export const Default = {
-	components: {
-		MkInstanceStats,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkInstanceStats,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkInstanceStats v-bind="$props" />',
+		};
 	},
-	template: '<MkInstanceStats />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
index c8809ad876..87eb49a7c7 100644
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkInstanceTicker,
 };
 export const Default = {
-	components: {
-		MkInstanceTicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkInstanceTicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkInstanceTicker v-bind="$props" />',
+		};
 	},
-	template: '<MkInstanceTicker />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
index a69bd185ad..83753e146c 100644
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkKeyValue,
 };
 export const Default = {
-	components: {
-		MkKeyValue,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkKeyValue,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkKeyValue v-bind="$props" />',
+		};
 	},
-	template: '<MkKeyValue />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
index 3c58063e39..02e239763d 100644
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkLaunchPad,
 };
 export const Default = {
-	components: {
-		MkLaunchPad,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkLaunchPad,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkLaunchPad v-bind="$props" />',
+		};
 	},
-	template: '<MkLaunchPad />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
index 5445eb8593..33baee8702 100644
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkLink,
 };
 export const Default = {
-	components: {
-		MkLink,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkLink,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkLink v-bind="$props" />',
+		};
 	},
-	template: '<MkLink />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
index 14981dbd53..9fec1d5a89 100644
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMarquee,
 };
 export const Default = {
-	components: {
-		MkMarquee,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMarquee,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMarquee v-bind="$props" />',
+		};
 	},
-	template: '<MkMarquee />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
index 90424768c9..dcf57f0cc8 100644
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMediaBanner,
 };
 export const Default = {
-	components: {
-		MkMediaBanner,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMediaBanner,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMediaBanner v-bind="$props" />',
+		};
 	},
-	template: '<MkMediaBanner />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
index bc985ff171..cb495872da 100644
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMediaImage,
 };
 export const Default = {
-	components: {
-		MkMediaImage,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMediaImage,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMediaImage v-bind="$props" />',
+		};
 	},
-	template: '<MkMediaImage />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
index 0b38efe507..87eb23dc89 100644
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMediaList,
 };
 export const Default = {
-	components: {
-		MkMediaList,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMediaList,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMediaList v-bind="$props" />',
+		};
 	},
-	template: '<MkMediaList />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
index 7b25dcef02..a39adebbe7 100644
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMediaVideo,
 };
 export const Default = {
-	components: {
-		MkMediaVideo,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMediaVideo,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMediaVideo v-bind="$props" />',
+		};
 	},
-	template: '<MkMediaVideo />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
index d03eeaf7e9..459633a07a 100644
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMention,
 };
 export const Default = {
-	components: {
-		MkMention,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMention,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMention v-bind="$props" />',
+		};
 	},
-	template: '<MkMention />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index cec1d4c726..114d710409 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMenu_child,
 };
 export const Default = {
-	components: {
-		MkMenu_child,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMenu_child,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMenu_child v-bind="$props" />',
+		};
 	},
-	template: '<MkMenu_child />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
index 79f4714bc7..9a293bcc9c 100644
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMenu,
 };
 export const Default = {
-	components: {
-		MkMenu,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMenu,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMenu v-bind="$props" />',
+		};
 	},
-	template: '<MkMenu />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
index 18f37447cf..f773bafe25 100644
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMiniChart,
 };
 export const Default = {
-	components: {
-		MkMiniChart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMiniChart,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMiniChart v-bind="$props" />',
+		};
 	},
-	template: '<MkMiniChart />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
index d1c3977006..84f40abc0d 100644
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkModal,
 };
 export const Default = {
-	components: {
-		MkModal,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkModal,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkModal v-bind="$props" />',
+		};
 	},
-	template: '<MkModal />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
index c4c162f789..3312818799 100644
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkModalPageWindow,
 };
 export const Default = {
-	components: {
-		MkModalPageWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkModalPageWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkModalPageWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkModalPageWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
index 2212cd6a4d..7e71ae0716 100644
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkModalWindow,
 };
 export const Default = {
-	components: {
-		MkModalWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkModalWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkModalWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkModalWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
index d828d38446..47dfafc763 100644
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNote,
 };
 export const Default = {
-	components: {
-		MkNote,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNote,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNote v-bind="$props" />',
+		};
 	},
-	template: '<MkNote />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
index b787ea37bd..3e106adfaa 100644
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNoteDetailed,
 };
 export const Default = {
-	components: {
-		MkNoteDetailed,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNoteDetailed,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNoteDetailed v-bind="$props" />',
+		};
 	},
-	template: '<MkNoteDetailed />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
index af7c5b2704..e49279ae58 100644
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNoteHeader,
 };
 export const Default = {
-	components: {
-		MkNoteHeader,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNoteHeader,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNoteHeader v-bind="$props" />',
+		};
 	},
-	template: '<MkNoteHeader />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
index 5feba941c1..d3074aacae 100644
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNotePreview,
 };
 export const Default = {
-	components: {
-		MkNotePreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNotePreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNotePreview v-bind="$props" />',
+		};
 	},
-	template: '<MkNotePreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
index 14fe3aea81..60676a0f85 100644
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNoteSimple,
 };
 export const Default = {
-	components: {
-		MkNoteSimple,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNoteSimple,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNoteSimple v-bind="$props" />',
+		};
 	},
-	template: '<MkNoteSimple />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
index 9d526ec98f..4e63f95701 100644
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNoteSub,
 };
 export const Default = {
-	components: {
-		MkNoteSub,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNoteSub,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNoteSub v-bind="$props" />',
+		};
 	},
-	template: '<MkNoteSub />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
index 8c2a39d66a..ee559a017b 100644
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNotes,
 };
 export const Default = {
-	components: {
-		MkNotes,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNotes,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNotes v-bind="$props" />',
+		};
 	},
-	template: '<MkNotes />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
index 13f5d751ad..7960900a8d 100644
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNotification,
 };
 export const Default = {
-	components: {
-		MkNotification,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNotification,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNotification v-bind="$props" />',
+		};
 	},
-	template: '<MkNotification />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
index adc6627f58..78dc44c8ad 100644
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNotificationSettingWindow,
 };
 export const Default = {
-	components: {
-		MkNotificationSettingWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNotificationSettingWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNotificationSettingWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkNotificationSettingWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
index b1f73956f0..e340422e1f 100644
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNotifications,
 };
 export const Default = {
-	components: {
-		MkNotifications,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNotifications,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNotifications v-bind="$props" />',
+		};
 	},
-	template: '<MkNotifications />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
index 9b9495ab8c..fc86c00250 100644
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNumber,
 };
 export const Default = {
-	components: {
-		MkNumber,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNumber,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNumber v-bind="$props" />',
+		};
 	},
-	template: '<MkNumber />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
index 9430fd1619..715bbb5439 100644
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkNumberDiff,
 };
 export const Default = {
-	components: {
-		MkNumberDiff,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkNumberDiff,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkNumberDiff v-bind="$props" />',
+		};
 	},
-	template: '<MkNumberDiff />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
index d44e3ee699..746dccc375 100644
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkObjectView,
 };
 export const Default = {
-	components: {
-		MkObjectView,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkObjectView,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkObjectView v-bind="$props" />',
+		};
 	},
-	template: '<MkObjectView />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index 27bc7958ee..8e18978376 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkObjectView_value,
 };
 export const Default = {
-	components: {
-		MkObjectView_value,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkObjectView_value,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkObjectView_value v-bind="$props" />',
+		};
 	},
-	template: '<MkObjectView_value />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
index f2621961d9..4d954fd236 100644
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkOmit,
 };
 export const Default = {
-	components: {
-		MkOmit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkOmit,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkOmit v-bind="$props" />',
+		};
 	},
-	template: '<MkOmit />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
index 17cf7c4c3e..dd96afa285 100644
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPagePreview,
 };
 export const Default = {
-	components: {
-		MkPagePreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPagePreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPagePreview v-bind="$props" />',
+		};
 	},
-	template: '<MkPagePreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
index e71e348ae5..f1c8b3b244 100644
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPageWindow,
 };
 export const Default = {
-	components: {
-		MkPageWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPageWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPageWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkPageWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
index 9bebe36742..3b89bb4b26 100644
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPagination,
 };
 export const Default = {
-	components: {
-		MkPagination,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPagination,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPagination v-bind="$props" />',
+		};
 	},
-	template: '<MkPagination />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
index a8a47b896c..10cf1f372d 100644
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPlusOneEffect,
 };
 export const Default = {
-	components: {
-		MkPlusOneEffect,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPlusOneEffect,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPlusOneEffect v-bind="$props" />',
+		};
 	},
-	template: '<MkPlusOneEffect />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
index fea5821fed..154c675119 100644
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPoll,
 };
 export const Default = {
-	components: {
-		MkPoll,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPoll,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPoll v-bind="$props" />',
+		};
 	},
-	template: '<MkPoll />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
index c332f1c809..09acb5f4ab 100644
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPollEditor,
 };
 export const Default = {
-	components: {
-		MkPollEditor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPollEditor,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPollEditor v-bind="$props" />',
+		};
 	},
-	template: '<MkPollEditor />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
index 127227e1d0..acb5b6939c 100644
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPopupMenu,
 };
 export const Default = {
-	components: {
-		MkPopupMenu,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPopupMenu,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPopupMenu v-bind="$props" />',
+		};
 	},
-	template: '<MkPopupMenu />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
index b459222fc6..da9b8947ba 100644
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPostForm,
 };
 export const Default = {
-	components: {
-		MkPostForm,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPostForm,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPostForm v-bind="$props" />',
+		};
 	},
-	template: '<MkPostForm />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
index ea67d38e6e..717385b1fa 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPostFormAttaches,
 };
 export const Default = {
-	components: {
-		MkPostFormAttaches,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPostFormAttaches,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPostFormAttaches v-bind="$props" />',
+		};
 	},
-	template: '<MkPostFormAttaches />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
index 0683ce7708..18a0f75ced 100644
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPostFormDialog,
 };
 export const Default = {
-	components: {
-		MkPostFormDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPostFormDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPostFormDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkPostFormDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
index 339cfc8ecc..20af967780 100644
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPushNotificationAllowButton,
 };
 export const Default = {
-	components: {
-		MkPushNotificationAllowButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPushNotificationAllowButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPushNotificationAllowButton v-bind="$props" />',
+		};
 	},
-	template: '<MkPushNotificationAllowButton />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
index 5f3a5ef25f..34037cd782 100644
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRadio,
 };
 export const Default = {
-	components: {
-		MkRadio,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRadio,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRadio v-bind="$props" />',
+		};
 	},
-	template: '<MkRadio />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
index ac6e9f61e6..0a12b130c9 100644
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRadios,
 };
 export const Default = {
-	components: {
-		MkRadios,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRadios,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRadios v-bind="$props" />',
+		};
 	},
-	template: '<MkRadios />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
index c46122334d..764f7ac5b7 100644
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRange,
 };
 export const Default = {
-	components: {
-		MkRange,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRange,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRange v-bind="$props" />',
+		};
 	},
-	template: '<MkRange />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
index 395f951346..bf470a833a 100644
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactedUsersDialog,
 };
 export const Default = {
-	components: {
-		MkReactedUsersDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactedUsersDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactedUsersDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkReactedUsersDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
index 7b9ca42e25..c0d5b4a154 100644
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionEffect,
 };
 export const Default = {
-	components: {
-		MkReactionEffect,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionEffect,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionEffect v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionEffect />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
index 271eb3ed6a..37e329f34a 100644
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionIcon,
 };
 export const Default = {
-	components: {
-		MkReactionIcon,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionIcon,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionIcon v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionIcon />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
index e4ca21352e..16e5fca1c4 100644
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionTooltip,
 };
 export const Default = {
-	components: {
-		MkReactionTooltip,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionTooltip,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionTooltip v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionTooltip />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index 449e035549..d373edf3c1 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionsViewer_details,
 };
 export const Default = {
-	components: {
-		MkReactionsViewer_details,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionsViewer_details,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionsViewer_details v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionsViewer_details />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index cbe9a98c7f..b56f13bb5c 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionsViewer_reaction,
 };
 export const Default = {
-	components: {
-		MkReactionsViewer_reaction,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionsViewer_reaction,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionsViewer_reaction v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionsViewer_reaction />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
index 33d1108825..18addf460d 100644
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkReactionsViewer,
 };
 export const Default = {
-	components: {
-		MkReactionsViewer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkReactionsViewer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkReactionsViewer v-bind="$props" />',
+		};
 	},
-	template: '<MkReactionsViewer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
index 726a4f4db5..4f4f8054a7 100644
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRemoteCaution,
 };
 export const Default = {
-	components: {
-		MkRemoteCaution,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRemoteCaution,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRemoteCaution v-bind="$props" />',
+		};
 	},
-	template: '<MkRemoteCaution />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
index e348f2bd4b..0eca578c36 100644
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRetentionHeatmap,
 };
 export const Default = {
-	components: {
-		MkRetentionHeatmap,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRetentionHeatmap,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRetentionHeatmap v-bind="$props" />',
+		};
 	},
-	template: '<MkRetentionHeatmap />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
index 8b405f3e63..4b054be436 100644
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRippleEffect,
 };
 export const Default = {
-	components: {
-		MkRippleEffect,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRippleEffect,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRippleEffect v-bind="$props" />',
+		};
 	},
-	template: '<MkRippleEffect />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
index 84fa9ccf34..f4306233cb 100644
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkRolePreview,
 };
 export const Default = {
-	components: {
-		MkRolePreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkRolePreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkRolePreview v-bind="$props" />',
+		};
 	},
-	template: '<MkRolePreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
index dba9e304d8..14cd69bd67 100644
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSample,
 };
 export const Default = {
-	components: {
-		MkSample,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSample,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSample v-bind="$props" />',
+		};
 	},
-	template: '<MkSample />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
index 18d2a35844..0e67a67238 100644
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSelect,
 };
 export const Default = {
-	components: {
-		MkSelect,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSelect,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSelect v-bind="$props" />',
+		};
 	},
-	template: '<MkSelect />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
index a50d15d869..32a52771df 100644
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSignin,
 };
 export const Default = {
-	components: {
-		MkSignin,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSignin,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSignin v-bind="$props" />',
+		};
 	},
-	template: '<MkSignin />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
index 1540c571a6..b05096452b 100644
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSigninDialog,
 };
 export const Default = {
-	components: {
-		MkSigninDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSigninDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSigninDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkSigninDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
index a1b8c723ca..665a5881e2 100644
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSignup,
 };
 export const Default = {
-	components: {
-		MkSignup,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSignup,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSignup v-bind="$props" />',
+		};
 	},
-	template: '<MkSignup />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
index c0253a3cd8..4e1316fed5 100644
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSignupDialog,
 };
 export const Default = {
-	components: {
-		MkSignupDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSignupDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSignupDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkSignupDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
index f5d82ef610..22dc8af7d2 100644
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSparkle,
 };
 export const Default = {
-	components: {
-		MkSparkle,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSparkle,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSparkle v-bind="$props" />',
+		};
 	},
-	template: '<MkSparkle />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
index 557775d419..d83aef1328 100644
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSubNoteContent,
 };
 export const Default = {
-	components: {
-		MkSubNoteContent,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSubNoteContent,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSubNoteContent v-bind="$props" />',
+		};
 	},
-	template: '<MkSubNoteContent />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
index 76ed607f95..8be6b5aa70 100644
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSuperMenu,
 };
 export const Default = {
-	components: {
-		MkSuperMenu,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSuperMenu,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSuperMenu v-bind="$props" />',
+		};
 	},
-	template: '<MkSuperMenu />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
index ff2d48416e..fae92c1726 100644
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSwitch,
 };
 export const Default = {
-	components: {
-		MkSwitch,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSwitch,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSwitch v-bind="$props" />',
+		};
 	},
-	template: '<MkSwitch />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
index b2e94c1a6e..035afa7f55 100644
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTab,
 };
 export const Default = {
-	components: {
-		MkTab,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTab,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTab v-bind="$props" />',
+		};
 	},
-	template: '<MkTab />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
index 5af917710e..cea976fd4b 100644
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTagCloud,
 };
 export const Default = {
-	components: {
-		MkTagCloud,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTagCloud,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTagCloud v-bind="$props" />',
+		};
 	},
-	template: '<MkTagCloud />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
index 207aec2c2e..0369b0978a 100644
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTextarea,
 };
 export const Default = {
-	components: {
-		MkTextarea,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTextarea,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTextarea v-bind="$props" />',
+		};
 	},
-	template: '<MkTextarea />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
index 3a1632417c..f778c7ea02 100644
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTimeline,
 };
 export const Default = {
-	components: {
-		MkTimeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTimeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTimeline v-bind="$props" />',
+		};
 	},
-	template: '<MkTimeline />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
index 80b48109e7..be078dec5b 100644
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkToast,
 };
 export const Default = {
-	components: {
-		MkToast,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkToast,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkToast v-bind="$props" />',
+		};
 	},
-	template: '<MkToast />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
index 74c6b73611..daec25cb83 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTokenGenerateWindow,
 };
 export const Default = {
-	components: {
-		MkTokenGenerateWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTokenGenerateWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTokenGenerateWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkTokenGenerateWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
index bcba8916db..474b49d263 100644
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTooltip,
 };
 export const Default = {
-	components: {
-		MkTooltip,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTooltip,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTooltip v-bind="$props" />',
+		};
 	},
-	template: '<MkTooltip />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
index 9949a6621b..b4388eb21f 100644
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUpdated,
 };
 export const Default = {
-	components: {
-		MkUpdated,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUpdated,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUpdated v-bind="$props" />',
+		};
 	},
-	template: '<MkUpdated />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
index 7f18283433..a7f230ef40 100644
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUrlPreview,
 };
 export const Default = {
-	components: {
-		MkUrlPreview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUrlPreview,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUrlPreview v-bind="$props" />',
+		};
 	},
-	template: '<MkUrlPreview />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
index 6756b81bd5..c55cbc04be 100644
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUrlPreviewPopup,
 };
 export const Default = {
-	components: {
-		MkUrlPreviewPopup,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUrlPreviewPopup,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUrlPreviewPopup v-bind="$props" />',
+		};
 	},
-	template: '<MkUrlPreviewPopup />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
index 467c8aa00c..ae2001abba 100644
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserCardMini,
 };
 export const Default = {
-	components: {
-		MkUserCardMini,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserCardMini,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserCardMini v-bind="$props" />',
+		};
 	},
-	template: '<MkUserCardMini />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
index 832fa8dac6..dddae8a572 100644
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserInfo,
 };
 export const Default = {
-	components: {
-		MkUserInfo,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserInfo,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserInfo v-bind="$props" />',
+		};
 	},
-	template: '<MkUserInfo />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
index 173f9a499d..f5269bfc82 100644
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserList,
 };
 export const Default = {
-	components: {
-		MkUserList,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserList,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserList v-bind="$props" />',
+		};
 	},
-	template: '<MkUserList />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
index f18f9da5b7..5132078e54 100644
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserOnlineIndicator,
 };
 export const Default = {
-	components: {
-		MkUserOnlineIndicator,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserOnlineIndicator,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserOnlineIndicator v-bind="$props" />',
+		};
 	},
-	template: '<MkUserOnlineIndicator />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
index 14e8ef467d..f83c41e2d0 100644
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserPopup,
 };
 export const Default = {
-	components: {
-		MkUserPopup,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserPopup,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserPopup v-bind="$props" />',
+		};
 	},
-	template: '<MkUserPopup />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
index 9930169d51..cb66bbacc4 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserSelectDialog,
 };
 export const Default = {
-	components: {
-		MkUserSelectDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserSelectDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserSelectDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkUserSelectDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
index 2cc45df467..7bb6c0b355 100644
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUsersTooltip,
 };
 export const Default = {
-	components: {
-		MkUsersTooltip,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUsersTooltip,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUsersTooltip v-bind="$props" />',
+		};
 	},
-	template: '<MkUsersTooltip />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
index a1b6bcea69..55522a1814 100644
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkVisibilityPicker,
 };
 export const Default = {
-	components: {
-		MkVisibilityPicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkVisibilityPicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkVisibilityPicker v-bind="$props" />',
+		};
 	},
-	template: '<MkVisibilityPicker />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
index ee5f956859..813a6b3993 100644
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkWaitingDialog,
 };
 export const Default = {
-	components: {
-		MkWaitingDialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkWaitingDialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkWaitingDialog v-bind="$props" />',
+		};
 	},
-	template: '<MkWaitingDialog />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
index e5820efd48..2500713503 100644
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkWidgets,
 };
 export const Default = {
-	components: {
-		MkWidgets,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkWidgets,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkWidgets v-bind="$props" />',
+		};
 	},
-	template: '<MkWidgets />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
index d43e40330e..f8e315b066 100644
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkWindow,
 };
 export const Default = {
-	components: {
-		MkWindow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkWindow,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkWindow v-bind="$props" />',
+		};
 	},
-	template: '<MkWindow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/MkYoutubePlayer.stories.ts b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
index a9f45e3e99..671c1303d1 100644
--- a/packages/frontend/src/components/MkYoutubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYoutubePlayer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkYoutubePlayer,
 };
 export const Default = {
-	components: {
-		MkYoutubePlayer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkYoutubePlayer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkYoutubePlayer v-bind="$props" />',
+		};
 	},
-	template: '<MkYoutubePlayer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index 24f7edc372..f132ccdea8 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: link,
 };
 export const Default = {
-	components: {
-		link,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				link,
+			},
+			props: Object.keys(argTypes),
+			template: '<link v-bind="$props" />',
+		};
 	},
-	template: '<link />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index b8ab307e24..5b779f54a4 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: section,
 };
 export const Default = {
-	components: {
-		section,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				section,
+			},
+			props: Object.keys(argTypes),
+			template: '<section v-bind="$props" />',
+		};
 	},
-	template: '<section />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index dd1a16c403..55cdf7d76a 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: slot,
 };
 export const Default = {
-	components: {
-		slot,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				slot,
+			},
+			props: Object.keys(argTypes),
+			template: '<slot v-bind="$props" />',
+		};
 	},
-	template: '<slot />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index 39cbc0ba01..73cc4f8e44 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: split,
 };
 export const Default = {
-	components: {
-		split,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				split,
+			},
+			props: Object.keys(argTypes),
+			template: '<split v-bind="$props" />',
+		};
 	},
-	template: '<split />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index fad46e9c12..10541fdb1c 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: suspense,
 };
 export const Default = {
-	components: {
-		suspense,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				suspense,
+			},
+			props: Object.keys(argTypes),
+			template: '<suspense v-bind="$props" />',
+		};
 	},
-	template: '<suspense />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index 5eb4a18c46..10dee397ff 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkA,
 };
 export const Default = {
-	components: {
-		MkA,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkA,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkA v-bind="$props" />',
+		};
 	},
-	template: '<MkA />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index 6b8b55ec35..a336156126 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAcct,
 };
 export const Default = {
-	components: {
-		MkAcct,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAcct,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAcct v-bind="$props" />',
+		};
 	},
-	template: '<MkAcct />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index bb2d74b336..8d4f3713e2 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAd,
 };
 export const Default = {
-	components: {
-		MkAd,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAd,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAd v-bind="$props" />',
+		};
 	},
-	template: '<MkAd />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index bc1acd33f1..8556ef08ab 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkAvatar,
 };
 export const Default = {
-	components: {
-		MkAvatar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAvatar,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAvatar v-bind="$props" />',
+		};
 	},
-	template: '<MkAvatar />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index 9abc14af1f..c1349c5808 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkCustomEmoji,
 };
 export const Default = {
-	components: {
-		MkCustomEmoji,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkCustomEmoji,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkCustomEmoji v-bind="$props" />',
+		};
 	},
-	template: '<MkCustomEmoji />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
index 09092f36d3..06a56a62c0 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEllipsis,
 };
 export const Default = {
-	components: {
-		MkEllipsis,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEllipsis,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEllipsis v-bind="$props" />',
+		};
 	},
-	template: '<MkEllipsis />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index 1679ae0b27..2dd4e23771 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkEmoji,
 };
 export const Default = {
-	components: {
-		MkEmoji,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkEmoji,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkEmoji v-bind="$props" />',
+		};
 	},
-	template: '<MkEmoji />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index 0916b1860d..2a8abb943b 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkError,
 };
 export const Default = {
-	components: {
-		MkError,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkError,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkError v-bind="$props" />',
+		};
 	},
-	template: '<MkError />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index 752085f5fd..78fbfa9f52 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkLoading,
 };
 export const Default = {
-	components: {
-		MkLoading,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkLoading,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkLoading v-bind="$props" />',
+		};
 	},
-	template: '<MkLoading />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 63e5342cce..8b7827bfc8 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkMisskeyFlavoredMarkdown,
 };
 export const Default = {
-	components: {
-		MkMisskeyFlavoredMarkdown,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkMisskeyFlavoredMarkdown,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkMisskeyFlavoredMarkdown v-bind="$props" />',
+		};
 	},
-	template: '<MkMisskeyFlavoredMarkdown />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
index a2c6d8705c..3921168824 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPageHeader,
 };
 export const Default = {
-	components: {
-		MkPageHeader,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPageHeader,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPageHeader v-bind="$props" />',
+		};
 	},
-	template: '<MkPageHeader />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index b283a94398..aaa12228f9 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkPageHeader_tabs,
 };
 export const Default = {
-	components: {
-		MkPageHeader_tabs,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkPageHeader_tabs,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkPageHeader_tabs v-bind="$props" />',
+		};
 	},
-	template: '<MkPageHeader_tabs />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
index 2f15b02570..5040c0b17f 100644
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkSpacer,
 };
 export const Default = {
-	components: {
-		MkSpacer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkSpacer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkSpacer v-bind="$props" />',
+		};
 	},
-	template: '<MkSpacer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
index 7e495a582f..0741f3f9bb 100644
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkStickyContainer,
 };
 export const Default = {
-	components: {
-		MkStickyContainer,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkStickyContainer,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkStickyContainer v-bind="$props" />',
+		};
 	},
-	template: '<MkStickyContainer />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
index efb6dee7a2..9df2fef695 100644
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkTime,
 };
 export const Default = {
-	components: {
-		MkTime,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkTime,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkTime v-bind="$props" />',
+		};
 	},
-	template: '<MkTime />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
index c72bf542e6..1f0e01f000 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUrl,
 };
 export const Default = {
-	components: {
-		MkUrl,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUrl,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUrl v-bind="$props" />',
+		};
 	},
-	template: '<MkUrl />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
index 211d8dac6b..b5df40dfeb 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: MkUserName,
 };
 export const Default = {
-	components: {
-		MkUserName,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkUserName,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkUserName v-bind="$props" />',
+		};
 	},
-	template: '<MkUserName />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
index acc2c32d3b..a0e76d9da1 100644
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: RouterView,
 };
 export const Default = {
-	components: {
-		RouterView,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				RouterView,
+			},
+			props: Object.keys(argTypes),
+			template: '<RouterView v-bind="$props" />',
+		};
 	},
-	template: '<RouterView />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index a08218da66..ba53f52505 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_block,
 };
 export const Default = {
-	components: {
-		page_block,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_block,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_block v-bind="$props" />',
+		};
 	},
-	template: '<page_block />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 9ee10b737d..4fd0b3a24f 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_button,
 };
 export const Default = {
-	components: {
-		page_button,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_button,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_button v-bind="$props" />',
+		};
 	},
-	template: '<page_button />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index 7df6fd3644..61880b3925 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_canvas,
 };
 export const Default = {
-	components: {
-		page_canvas,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_canvas,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_canvas v-bind="$props" />',
+		};
 	},
-	template: '<page_canvas />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index 490c4d24b9..c94cbbb687 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_counter,
 };
 export const Default = {
-	components: {
-		page_counter,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_counter,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_counter v-bind="$props" />',
+		};
 	},
-	template: '<page_counter />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index cd840c9594..ddc88377d6 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_if,
 };
 export const Default = {
-	components: {
-		page_if,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_if,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_if v-bind="$props" />',
+		};
 	},
-	template: '<page_if />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index b7452a618d..a21d6010d8 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_image,
 };
 export const Default = {
-	components: {
-		page_image,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_image,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_image v-bind="$props" />',
+		};
 	},
-	template: '<page_image />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 5c5af5d58b..0efb0220e9 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_note,
 };
 export const Default = {
-	components: {
-		page_note,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_note,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_note v-bind="$props" />',
+		};
 	},
-	template: '<page_note />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index 9a7ad34316..5fefcb9ee8 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_number_input,
 };
 export const Default = {
-	components: {
-		page_number_input,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_number_input,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_number_input v-bind="$props" />',
+		};
 	},
-	template: '<page_number_input />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index b98d930d14..d59e5a4702 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_post,
 };
 export const Default = {
-	components: {
-		page_post,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_post,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_post v-bind="$props" />',
+		};
 	},
-	template: '<page_post />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 9b519cdddf..9974b7636f 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_radio_button,
 };
 export const Default = {
-	components: {
-		page_radio_button,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_radio_button,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_radio_button v-bind="$props" />',
+		};
 	},
-	template: '<page_radio_button />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index 0e28246cce..754541927b 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_section,
 };
 export const Default = {
-	components: {
-		page_section,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_section,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_section v-bind="$props" />',
+		};
 	},
-	template: '<page_section />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index cff97b18d0..43271b6ca2 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page,
 };
 export const Default = {
-	components: {
-		page,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page,
+			},
+			props: Object.keys(argTypes),
+			template: '<page v-bind="$props" />',
+		};
 	},
-	template: '<page />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index 84bfcf0d79..7726586e77 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_switch,
 };
 export const Default = {
-	components: {
-		page_switch,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_switch,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_switch v-bind="$props" />',
+		};
 	},
-	template: '<page_switch />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index 07ce018e23..6f58f19bde 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_text_input,
 };
 export const Default = {
-	components: {
-		page_text_input,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_text_input,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_text_input v-bind="$props" />',
+		};
 	},
-	template: '<page_text_input />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index b1f3aacfba..924224577b 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_text,
 };
 export const Default = {
-	components: {
-		page_text,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_text,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_text v-bind="$props" />',
+		};
 	},
-	template: '<page_text />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index 608327d188..d14548a222 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_textarea_input,
 };
 export const Default = {
-	components: {
-		page_textarea_input,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_textarea_input,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_textarea_input v-bind="$props" />',
+		};
 	},
-	template: '<page_textarea_input />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index c793e78d28..13c4480ace 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_textarea,
 };
 export const Default = {
-	components: {
-		page_textarea,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_textarea,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_textarea v-bind="$props" />',
+		};
 	},
-	template: '<page_textarea />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
index 9975c4e042..3ca1df5861 100644
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _empty_,
 };
 export const Default = {
-	components: {
-		_empty_,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_empty_,
+			},
+			props: Object.keys(argTypes),
+			template: '<_empty_ v-bind="$props" />',
+		};
 	},
-	template: '<_empty_ />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
index f3ac520dc6..f198b63fc8 100644
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _error_,
 };
 export const Default = {
-	components: {
-		_error_,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_error_,
+			},
+			props: Object.keys(argTypes),
+			template: '<_error_ v-bind="$props" />',
+		};
 	},
-	template: '<_error_ />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
index 9063c71b48..f511634eb9 100644
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _loading_,
 };
 export const Default = {
-	components: {
-		_loading_,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_loading_,
+			},
+			props: Object.keys(argTypes),
+			template: '<_loading_ v-bind="$props" />',
+		};
 	},
-	template: '<_loading_ />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index 1898d460eb..3b8f3ad117 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: about_misskey,
 };
 export const Default = {
-	components: {
-		about_misskey,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				about_misskey,
+			},
+			props: Object.keys(argTypes),
+			template: '<about_misskey v-bind="$props" />',
+		};
 	},
-	template: '<about_misskey />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index dc2f36beae..e178271a84 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: about_emojis,
 };
 export const Default = {
-	components: {
-		about_emojis,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				about_emojis,
+			},
+			props: Object.keys(argTypes),
+			template: '<about_emojis v-bind="$props" />',
+		};
 	},
-	template: '<about_emojis />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index 63f997779c..a2c763aef7 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: about_federation,
 };
 export const Default = {
-	components: {
-		about_federation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				about_federation,
+			},
+			props: Object.keys(argTypes),
+			template: '<about_federation v-bind="$props" />',
+		};
 	},
-	template: '<about_federation />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index 397a520610..a36c99fc32 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: about,
 };
 export const Default = {
-	components: {
-		about,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				about,
+			},
+			props: Object.keys(argTypes),
+			template: '<about v-bind="$props" />',
+		};
 	},
-	template: '<about />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index b07ce5846d..b7959f8976 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: achievements,
 };
 export const Default = {
-	components: {
-		achievements,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				achievements,
+			},
+			props: Object.keys(argTypes),
+			template: '<achievements v-bind="$props" />',
+		};
 	},
-	template: '<achievements />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index adbcee094d..62ac20caf3 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: admin_file,
 };
 export const Default = {
-	components: {
-		admin_file,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				admin_file,
+			},
+			props: Object.keys(argTypes),
+			template: '<admin_file v-bind="$props" />',
+		};
 	},
-	template: '<admin_file />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
index e85173e574..5af3ccc657 100644
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: RolesEditorFormula,
 };
 export const Default = {
-	components: {
-		RolesEditorFormula,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				RolesEditorFormula,
+			},
+			props: Object.keys(argTypes),
+			template: '<RolesEditorFormula v-bind="$props" />',
+		};
 	},
-	template: '<RolesEditorFormula />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
index b803b74a19..3ae43e3fa6 100644
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _header_,
 };
 export const Default = {
-	components: {
-		_header_,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_header_,
+			},
+			props: Object.keys(argTypes),
+			template: '<_header_ v-bind="$props" />',
+		};
 	},
-	template: '<_header_ />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index 677292f157..ea3bbb4775 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: abuses,
 };
 export const Default = {
-	components: {
-		abuses,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				abuses,
+			},
+			props: Object.keys(argTypes),
+			template: '<abuses v-bind="$props" />',
+		};
 	},
-	template: '<abuses />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 973bbd4ccc..638c56656f 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: ads,
 };
 export const Default = {
-	components: {
-		ads,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				ads,
+			},
+			props: Object.keys(argTypes),
+			template: '<ads v-bind="$props" />',
+		};
 	},
-	template: '<ads />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index add9a62c52..ae064741fb 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: announcements,
 };
 export const Default = {
-	components: {
-		announcements,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				announcements,
+			},
+			props: Object.keys(argTypes),
+			template: '<announcements v-bind="$props" />',
+		};
 	},
-	template: '<announcements />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index cc337ac51e..7c8506b40e 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: bot_protection,
 };
 export const Default = {
-	components: {
-		bot_protection,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				bot_protection,
+			},
+			props: Object.keys(argTypes),
+			template: '<bot_protection v-bind="$props" />',
+		};
 	},
-	template: '<bot_protection />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index 1764c4a902..3a2ae56a40 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: database,
 };
 export const Default = {
-	components: {
-		database,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				database,
+			},
+			props: Object.keys(argTypes),
+			template: '<database v-bind="$props" />',
+		};
 	},
-	template: '<database />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index 162b4b0816..9b804ce4ac 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: email_settings,
 };
 export const Default = {
-	components: {
-		email_settings,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				email_settings,
+			},
+			props: Object.keys(argTypes),
+			template: '<email_settings v-bind="$props" />',
+		};
 	},
-	template: '<email_settings />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index a8b3f1b3f6..63bf5023dd 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: federation,
 };
 export const Default = {
-	components: {
-		federation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				federation,
+			},
+			props: Object.keys(argTypes),
+			template: '<federation v-bind="$props" />',
+		};
 	},
-	template: '<federation />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index cb0746cf12..6d5b00f3f1 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: files,
 };
 export const Default = {
-	components: {
-		files,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				files,
+			},
+			props: Object.keys(argTypes),
+			template: '<files v-bind="$props" />',
+		};
 	},
-	template: '<files />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index f2ac0b2878..54b89efc02 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index 0623c16ddb..c76509923f 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: instance_block,
 };
 export const Default = {
-	components: {
-		instance_block,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				instance_block,
+			},
+			props: Object.keys(argTypes),
+			template: '<instance_block v-bind="$props" />',
+		};
 	},
-	template: '<instance_block />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index 20d6d3bea2..c55aedadca 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: moderation,
 };
 export const Default = {
-	components: {
-		moderation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				moderation,
+			},
+			props: Object.keys(argTypes),
+			template: '<moderation v-bind="$props" />',
+		};
 	},
-	template: '<moderation />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index 9187d2ad6f..faa1f1948d 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: object_storage,
 };
 export const Default = {
-	components: {
-		object_storage,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				object_storage,
+			},
+			props: Object.keys(argTypes),
+			template: '<object_storage v-bind="$props" />',
+		};
 	},
-	template: '<object_storage />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index f4385c4c33..fc37c6072e 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: other_settings,
 };
 export const Default = {
-	components: {
-		other_settings,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				other_settings,
+			},
+			props: Object.keys(argTypes),
+			template: '<other_settings v-bind="$props" />',
+		};
 	},
-	template: '<other_settings />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index 877d4e0ddf..e7efca1a53 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_active_users,
 };
 export const Default = {
-	components: {
-		overview_active_users,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_active_users,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_active_users v-bind="$props" />',
+		};
 	},
-	template: '<overview_active_users />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index d952ce3df9..347065c396 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_ap_requests,
 };
 export const Default = {
-	components: {
-		overview_ap_requests,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_ap_requests,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_ap_requests v-bind="$props" />',
+		};
 	},
-	template: '<overview_ap_requests />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index c0bcca0588..61956f0249 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_federation,
 };
 export const Default = {
-	components: {
-		overview_federation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_federation,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_federation v-bind="$props" />',
+		};
 	},
-	template: '<overview_federation />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index 28fca24b45..872c883fe7 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_heatmap,
 };
 export const Default = {
-	components: {
-		overview_heatmap,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_heatmap,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_heatmap v-bind="$props" />',
+		};
 	},
-	template: '<overview_heatmap />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index 71cce61bc0..c6ca9f0855 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_instances,
 };
 export const Default = {
-	components: {
-		overview_instances,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_instances,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_instances v-bind="$props" />',
+		};
 	},
-	template: '<overview_instances />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index d617cc9c3d..a05c482eab 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_moderators,
 };
 export const Default = {
-	components: {
-		overview_moderators,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_moderators,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_moderators v-bind="$props" />',
+		};
 	},
-	template: '<overview_moderators />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index f73defee9f..3c9844e206 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_pie,
 };
 export const Default = {
-	components: {
-		overview_pie,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_pie,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_pie v-bind="$props" />',
+		};
 	},
-	template: '<overview_pie />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index cfcd04f3c4..848300fe07 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_queue_chart,
 };
 export const Default = {
-	components: {
-		overview_queue_chart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_queue_chart,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_queue_chart v-bind="$props" />',
+		};
 	},
-	template: '<overview_queue_chart />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index f30978121c..e3f4bfca52 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_queue,
 };
 export const Default = {
-	components: {
-		overview_queue,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_queue,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_queue v-bind="$props" />',
+		};
 	},
-	template: '<overview_queue />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index b0bc4c72d1..3e1c5a89bc 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_retention,
 };
 export const Default = {
-	components: {
-		overview_retention,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_retention,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_retention v-bind="$props" />',
+		};
 	},
-	template: '<overview_retention />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 5bcefe2fc8..0c368aaddc 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_stats,
 };
 export const Default = {
-	components: {
-		overview_stats,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_stats,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_stats v-bind="$props" />',
+		};
 	},
-	template: '<overview_stats />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index 676acc1eaf..de388bd48e 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview,
 };
 export const Default = {
-	components: {
-		overview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview v-bind="$props" />',
+		};
 	},
-	template: '<overview />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 4c61a00bf8..3846e67011 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: overview_users,
 };
 export const Default = {
-	components: {
-		overview_users,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				overview_users,
+			},
+			props: Object.keys(argTypes),
+			template: '<overview_users v-bind="$props" />',
+		};
 	},
-	template: '<overview_users />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 6954a0f55f..04fa3e1b68 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: proxy_account,
 };
 export const Default = {
-	components: {
-		proxy_account,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				proxy_account,
+			},
+			props: Object.keys(argTypes),
+			template: '<proxy_account v-bind="$props" />',
+		};
 	},
-	template: '<proxy_account />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 13b63e7dba..95a1f0a5e3 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: queue_chart_chart,
 };
 export const Default = {
-	components: {
-		queue_chart_chart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				queue_chart_chart,
+			},
+			props: Object.keys(argTypes),
+			template: '<queue_chart_chart v-bind="$props" />',
+		};
 	},
-	template: '<queue_chart_chart />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index 8e66f86144..48c9aba4b8 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: queue_chart,
 };
 export const Default = {
-	components: {
-		queue_chart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				queue_chart,
+			},
+			props: Object.keys(argTypes),
+			template: '<queue_chart v-bind="$props" />',
+		};
 	},
-	template: '<queue_chart />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index 6d2c06b48a..08a32d0402 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: queue,
 };
 export const Default = {
-	components: {
-		queue,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				queue,
+			},
+			props: Object.keys(argTypes),
+			template: '<queue v-bind="$props" />',
+		};
 	},
-	template: '<queue />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index c362cb7ca9..aabd4d2fcf 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: relays,
 };
 export const Default = {
-	components: {
-		relays,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				relays,
+			},
+			props: Object.keys(argTypes),
+			template: '<relays v-bind="$props" />',
+		};
 	},
-	template: '<relays />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index 61fac49415..148cad434b 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: roles_edit,
 };
 export const Default = {
-	components: {
-		roles_edit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				roles_edit,
+			},
+			props: Object.keys(argTypes),
+			template: '<roles_edit v-bind="$props" />',
+		};
 	},
-	template: '<roles_edit />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index 34dac9a051..91f0cd6656 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: roles_editor,
 };
 export const Default = {
-	components: {
-		roles_editor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				roles_editor,
+			},
+			props: Object.keys(argTypes),
+			template: '<roles_editor v-bind="$props" />',
+		};
 	},
-	template: '<roles_editor />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index ec112af033..4847b5d272 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: roles_role,
 };
 export const Default = {
-	components: {
-		roles_role,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				roles_role,
+			},
+			props: Object.keys(argTypes),
+			template: '<roles_role v-bind="$props" />',
+		};
 	},
-	template: '<roles_role />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index c0d1fcd444..1c6abb42be 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: roles,
 };
 export const Default = {
-	components: {
-		roles,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				roles,
+			},
+			props: Object.keys(argTypes),
+			template: '<roles v-bind="$props" />',
+		};
 	},
-	template: '<roles />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index eacff65985..8785d2caf9 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: security,
 };
 export const Default = {
-	components: {
-		security,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				security,
+			},
+			props: Object.keys(argTypes),
+			template: '<security v-bind="$props" />',
+		};
 	},
-	template: '<security />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index c10325146c..75a99d78ce 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: settings,
 };
 export const Default = {
-	components: {
-		settings,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				settings,
+			},
+			props: Object.keys(argTypes),
+			template: '<settings v-bind="$props" />',
+		};
 	},
-	template: '<settings />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index 89769a35f9..7d849fcece 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: users,
 };
 export const Default = {
-	components: {
-		users,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				users,
+			},
+			props: Object.keys(argTypes),
+			template: '<users v-bind="$props" />',
+		};
 	},
-	template: '<users />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index 1fadb08a86..c02055d8ea 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: ads,
 };
 export const Default = {
-	components: {
-		ads,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				ads,
+			},
+			props: Object.keys(argTypes),
+			template: '<ads v-bind="$props" />',
+		};
 	},
-	template: '<ads />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index b5c7081239..4835a4c327 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: announcements,
 };
 export const Default = {
-	components: {
-		announcements,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				announcements,
+			},
+			props: Object.keys(argTypes),
+			template: '<announcements v-bind="$props" />',
+		};
 	},
-	template: '<announcements />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index 142ddb7862..c16f408a53 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: antenna_timeline,
 };
 export const Default = {
-	components: {
-		antenna_timeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				antenna_timeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<antenna_timeline v-bind="$props" />',
+		};
 	},
-	template: '<antenna_timeline />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index ab7032c885..dda2502d5a 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: api_console,
 };
 export const Default = {
-	components: {
-		api_console,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				api_console,
+			},
+			props: Object.keys(argTypes),
+			template: '<api_console v-bind="$props" />',
+		};
 	},
-	template: '<api_console />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 27b302a7e1..6cdae41880 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: auth_form,
 };
 export const Default = {
-	components: {
-		auth_form,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				auth_form,
+			},
+			props: Object.keys(argTypes),
+			template: '<auth_form v-bind="$props" />',
+		};
 	},
-	template: '<auth_form />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index ed9715c21c..37f365581d 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: auth,
 };
 export const Default = {
-	components: {
-		auth,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				auth,
+			},
+			props: Object.keys(argTypes),
+			template: '<auth v-bind="$props" />',
+		};
 	},
-	template: '<auth />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index fadda3c391..9928ede95d 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: channel_editor,
 };
 export const Default = {
-	components: {
-		channel_editor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				channel_editor,
+			},
+			props: Object.keys(argTypes),
+			template: '<channel_editor v-bind="$props" />',
+		};
 	},
-	template: '<channel_editor />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index d11385411a..bcb5b82222 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: channel,
 };
 export const Default = {
-	components: {
-		channel,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				channel,
+			},
+			props: Object.keys(argTypes),
+			template: '<channel v-bind="$props" />',
+		};
 	},
-	template: '<channel />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index d17a5ab5aa..0e35ca4531 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: channels,
 };
 export const Default = {
-	components: {
-		channels,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				channels,
+			},
+			props: Object.keys(argTypes),
+			template: '<channels v-bind="$props" />',
+		};
 	},
-	template: '<channels />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index 90b554eac5..5ed6fc048d 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: clicker,
 };
 export const Default = {
-	components: {
-		clicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				clicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<clicker v-bind="$props" />',
+		};
 	},
-	template: '<clicker />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index 1435436350..c2e6f056f0 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: clip,
 };
 export const Default = {
-	components: {
-		clip,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				clip,
+			},
+			props: Object.keys(argTypes),
+			template: '<clip v-bind="$props" />',
+		};
 	},
-	template: '<clip />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 3aa362b7d9..44d87b4288 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: custom_emojis_manager,
 };
 export const Default = {
-	components: {
-		custom_emojis_manager,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				custom_emojis_manager,
+			},
+			props: Object.keys(argTypes),
+			template: '<custom_emojis_manager v-bind="$props" />',
+		};
 	},
-	template: '<custom_emojis_manager />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index 199cbe10e7..56c6ff72d9 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: drive,
 };
 export const Default = {
-	components: {
-		drive,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				drive,
+			},
+			props: Object.keys(argTypes),
+			template: '<drive v-bind="$props" />',
+		};
 	},
-	template: '<drive />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index 4ff245de16..e675bbe438 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: emoji_edit_dialog,
 };
 export const Default = {
-	components: {
-		emoji_edit_dialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				emoji_edit_dialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<emoji_edit_dialog v-bind="$props" />',
+		};
 	},
-	template: '<emoji_edit_dialog />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index e0a7d8c85d..bda94c9b9a 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: emojis_emoji,
 };
 export const Default = {
-	components: {
-		emojis_emoji,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				emojis_emoji,
+			},
+			props: Object.keys(argTypes),
+			template: '<emojis_emoji v-bind="$props" />',
+		};
 	},
-	template: '<emojis_emoji />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index 9482aa0a1b..b04eee4264 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: explore_featured,
 };
 export const Default = {
-	components: {
-		explore_featured,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				explore_featured,
+			},
+			props: Object.keys(argTypes),
+			template: '<explore_featured v-bind="$props" />',
+		};
 	},
-	template: '<explore_featured />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index bcf5c0fdba..44ff94c7ae 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: explore_roles,
 };
 export const Default = {
-	components: {
-		explore_roles,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				explore_roles,
+			},
+			props: Object.keys(argTypes),
+			template: '<explore_roles v-bind="$props" />',
+		};
 	},
-	template: '<explore_roles />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index b42265a8b8..5aa5efe566 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: explore,
 };
 export const Default = {
-	components: {
-		explore,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				explore,
+			},
+			props: Object.keys(argTypes),
+			template: '<explore v-bind="$props" />',
+		};
 	},
-	template: '<explore />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index 0b62e44584..4ce52c9886 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: explore_users,
 };
 export const Default = {
-	components: {
-		explore_users,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				explore_users,
+			},
+			props: Object.keys(argTypes),
+			template: '<explore_users v-bind="$props" />',
+		};
 	},
-	template: '<explore_users />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 959cd96336..76c1882195 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: favorites,
 };
 export const Default = {
-	components: {
-		favorites,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				favorites,
+			},
+			props: Object.keys(argTypes),
+			template: '<favorites v-bind="$props" />',
+		};
 	},
-	template: '<favorites />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index 1eb559bd42..27376858e0 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: flash_edit,
 };
 export const Default = {
-	components: {
-		flash_edit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				flash_edit,
+			},
+			props: Object.keys(argTypes),
+			template: '<flash_edit v-bind="$props" />',
+		};
 	},
-	template: '<flash_edit />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 1d10f2f3fa..327506577f 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: flash_index,
 };
 export const Default = {
-	components: {
-		flash_index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				flash_index,
+			},
+			props: Object.keys(argTypes),
+			template: '<flash_index v-bind="$props" />',
+		};
 	},
-	template: '<flash_index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index b987a06b9c..e0ff01a0b8 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: flash,
 };
 export const Default = {
-	components: {
-		flash,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				flash,
+			},
+			props: Object.keys(argTypes),
+			template: '<flash v-bind="$props" />',
+		};
 	},
-	template: '<flash />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index 5f94621069..8654604b6f 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: follow_requests,
 };
 export const Default = {
-	components: {
-		follow_requests,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				follow_requests,
+			},
+			props: Object.keys(argTypes),
+			template: '<follow_requests v-bind="$props" />',
+		};
 	},
-	template: '<follow_requests />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index 73b487bc3a..b9090d158b 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: follow,
 };
 export const Default = {
-	components: {
-		follow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				follow,
+			},
+			props: Object.keys(argTypes),
+			template: '<follow v-bind="$props" />',
+		};
 	},
-	template: '<follow />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index 80b8f4341c..6bf05086b6 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: edit,
 };
 export const Default = {
-	components: {
-		edit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				edit,
+			},
+			props: Object.keys(argTypes),
+			template: '<edit v-bind="$props" />',
+		};
 	},
-	template: '<edit />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index a97c4f543d..57d8be035a 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index a836bb0f8b..1bafccebde 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: post,
 };
 export const Default = {
-	components: {
-		post,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				post,
+			},
+			props: Object.keys(argTypes),
+			template: '<post v-bind="$props" />',
+		};
 	},
-	template: '<post />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index e4ce20788c..311a27a877 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: instance_info,
 };
 export const Default = {
-	components: {
-		instance_info,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				instance_info,
+			},
+			props: Object.keys(argTypes),
+			template: '<instance_info v-bind="$props" />',
+		};
 	},
-	template: '<instance_info />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index b70ba39235..b668f03cd0 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: miauth,
 };
 export const Default = {
-	components: {
-		miauth,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				miauth,
+			},
+			props: Object.keys(argTypes),
+			template: '<miauth v-bind="$props" />',
+		};
 	},
-	template: '<miauth />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index d71aa1206b..310cfe61f7 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: create,
 };
 export const Default = {
-	components: {
-		create,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				create,
+			},
+			props: Object.keys(argTypes),
+			template: '<create v-bind="$props" />',
+		};
 	},
-	template: '<create />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index ebb9e54201..51202b066e 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: edit,
 };
 export const Default = {
-	components: {
-		edit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				edit,
+			},
+			props: Object.keys(argTypes),
+			template: '<edit v-bind="$props" />',
+		};
 	},
-	template: '<edit />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index 1edb29e806..88a96edffb 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: editor,
 };
 export const Default = {
-	components: {
-		editor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				editor,
+			},
+			props: Object.keys(argTypes),
+			template: '<editor v-bind="$props" />',
+		};
 	},
-	template: '<editor />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index 65af62c76d..f0c356b49b 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index 4625509983..a84ba350bc 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index eae8dbeb63..ae76937e09 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index 05a306a3ff..7ed8f30097 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: list,
 };
 export const Default = {
-	components: {
-		list,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				list,
+			},
+			props: Object.keys(argTypes),
+			template: '<list v-bind="$props" />',
+		};
 	},
-	template: '<list />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index 1d84261fea..03c1b8103d 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: not_found,
 };
 export const Default = {
-	components: {
-		not_found,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				not_found,
+			},
+			props: Object.keys(argTypes),
+			template: '<not_found v-bind="$props" />',
+		};
 	},
-	template: '<not_found />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index e4703e3bb6..fc88632ce0 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: note,
 };
 export const Default = {
-	components: {
-		note,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				note,
+			},
+			props: Object.keys(argTypes),
+			template: '<note v-bind="$props" />',
+		};
 	},
-	template: '<note />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index 2181b94eb8..8a81613b09 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: notifications,
 };
 export const Default = {
-	components: {
-		notifications,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				notifications,
+			},
+			props: Object.keys(argTypes),
+			template: '<notifications v-bind="$props" />',
+		};
 	},
-	template: '<notifications />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 4811d07edf..94eeb054c6 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_el_image,
 };
 export const Default = {
-	components: {
-		page_editor_el_image,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_el_image,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_el_image v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_el_image />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 0293c4ca46..9b767672c5 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_el_note,
 };
 export const Default = {
-	components: {
-		page_editor_el_note,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_el_note,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_el_note v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_el_note />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index a0c062b670..f40039517a 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_el_section,
 };
 export const Default = {
-	components: {
-		page_editor_el_section,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_el_section,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_el_section v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_el_section />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index 46c8d3ddfe..6e4bc9bbd4 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_el_text,
 };
 export const Default = {
-	components: {
-		page_editor_el_text,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_el_text,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_el_text v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_el_text />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index 965c615ba7..e753a96028 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_blocks,
 };
 export const Default = {
-	components: {
-		page_editor_blocks,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_blocks,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_blocks v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_blocks />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 0d044d7f62..77a4836f3b 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor_container,
 };
 export const Default = {
-	components: {
-		page_editor_container,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor_container,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor_container v-bind="$props" />',
+		};
 	},
-	template: '<page_editor_container />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index e0d0f5b3d1..59c0989381 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page_editor,
 };
 export const Default = {
-	components: {
-		page_editor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page_editor,
+			},
+			props: Object.keys(argTypes),
+			template: '<page_editor v-bind="$props" />',
+		};
 	},
-	template: '<page_editor />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index 08358f2baa..910deaca49 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: page,
 };
 export const Default = {
-	components: {
-		page,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				page,
+			},
+			props: Object.keys(argTypes),
+			template: '<page v-bind="$props" />',
+		};
 	},
-	template: '<page />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index f6ac1d4562..2d8f53bda1 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: pages,
 };
 export const Default = {
-	components: {
-		pages,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				pages,
+			},
+			props: Object.keys(argTypes),
+			template: '<pages v-bind="$props" />',
+		};
 	},
-	template: '<pages />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index 60cc026f6c..6605c45876 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: preview,
 };
 export const Default = {
-	components: {
-		preview,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				preview,
+			},
+			props: Object.keys(argTypes),
+			template: '<preview v-bind="$props" />',
+		};
 	},
-	template: '<preview />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 1a1ec5216b..0d710acff3 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: registry_keys,
 };
 export const Default = {
-	components: {
-		registry_keys,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				registry_keys,
+			},
+			props: Object.keys(argTypes),
+			template: '<registry_keys v-bind="$props" />',
+		};
 	},
-	template: '<registry_keys />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index 846d75cc8f..776c153adc 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: registry,
 };
 export const Default = {
-	components: {
-		registry,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				registry,
+			},
+			props: Object.keys(argTypes),
+			template: '<registry v-bind="$props" />',
+		};
 	},
-	template: '<registry />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index 798c77d715..d90bc4edda 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: registry_value,
 };
 export const Default = {
-	components: {
-		registry_value,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				registry_value,
+			},
+			props: Object.keys(argTypes),
+			template: '<registry_value v-bind="$props" />',
+		};
 	},
-	template: '<registry_value />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index 6cab23af59..e478a2706e 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: reset_password,
 };
 export const Default = {
-	components: {
-		reset_password,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				reset_password,
+			},
+			props: Object.keys(argTypes),
+			template: '<reset_password v-bind="$props" />',
+		};
 	},
-	template: '<reset_password />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index 2ec6bde652..f1cfe66607 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: role,
 };
 export const Default = {
-	components: {
-		role,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				role,
+			},
+			props: Object.keys(argTypes),
+			template: '<role v-bind="$props" />',
+		};
 	},
-	template: '<role />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index 369df43de0..a5ea5b36e3 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: scratchpad,
 };
 export const Default = {
-	components: {
-		scratchpad,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				scratchpad,
+			},
+			props: Object.keys(argTypes),
+			template: '<scratchpad v-bind="$props" />',
+		};
 	},
-	template: '<scratchpad />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 845abb92b5..05d2603dfe 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: search,
 };
 export const Default = {
-	components: {
-		search,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				search,
+			},
+			props: Object.keys(argTypes),
+			template: '<search v-bind="$props" />',
+		};
 	},
-	template: '<search />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index cc5c3311fe..54d1d959b2 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _2fa_qrdialog,
 };
 export const Default = {
-	components: {
-		_2fa_qrdialog,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_2fa_qrdialog,
+			},
+			props: Object.keys(argTypes),
+			template: '<_2fa_qrdialog v-bind="$props" />',
+		};
 	},
-	template: '<_2fa_qrdialog />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 3b77f4cefe..9d6a887484 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: _2fa,
 };
 export const Default = {
-	components: {
-		_2fa,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				_2fa,
+			},
+			props: Object.keys(argTypes),
+			template: '<_2fa v-bind="$props" />',
+		};
 	},
-	template: '<_2fa />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index ed43fd46ac..0fb998b3e4 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: account_info,
 };
 export const Default = {
-	components: {
-		account_info,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				account_info,
+			},
+			props: Object.keys(argTypes),
+			template: '<account_info v-bind="$props" />',
+		};
 	},
-	template: '<account_info />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index 4ffa1ae4cd..9996274c78 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: accounts,
 };
 export const Default = {
-	components: {
-		accounts,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				accounts,
+			},
+			props: Object.keys(argTypes),
+			template: '<accounts v-bind="$props" />',
+		};
 	},
-	template: '<accounts />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index 3695e9dfec..bb3194c561 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: api,
 };
 export const Default = {
-	components: {
-		api,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				api,
+			},
+			props: Object.keys(argTypes),
+			template: '<api v-bind="$props" />',
+		};
 	},
-	template: '<api />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index e9820cd3e2..038848986b 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: apps,
 };
 export const Default = {
-	components: {
-		apps,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				apps,
+			},
+			props: Object.keys(argTypes),
+			template: '<apps v-bind="$props" />',
+		};
 	},
-	template: '<apps />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index 821ff4bf53..7b7cc913fc 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: custom_css,
 };
 export const Default = {
-	components: {
-		custom_css,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				custom_css,
+			},
+			props: Object.keys(argTypes),
+			template: '<custom_css v-bind="$props" />',
+		};
 	},
-	template: '<custom_css />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index 7ee4159f87..e6c51bc005 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: deck,
 };
 export const Default = {
-	components: {
-		deck,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				deck,
+			},
+			props: Object.keys(argTypes),
+			template: '<deck v-bind="$props" />',
+		};
 	},
-	template: '<deck />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index d29068dadc..4f5cf2c094 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: delete_account,
 };
 export const Default = {
-	components: {
-		delete_account,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				delete_account,
+			},
+			props: Object.keys(argTypes),
+			template: '<delete_account v-bind="$props" />',
+		};
 	},
-	template: '<delete_account />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index cf65d1819f..140615641c 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: drive,
 };
 export const Default = {
-	components: {
-		drive,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				drive,
+			},
+			props: Object.keys(argTypes),
+			template: '<drive v-bind="$props" />',
+		};
 	},
-	template: '<drive />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index 1adeb96133..043f23a484 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: email,
 };
 export const Default = {
-	components: {
-		email,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				email,
+			},
+			props: Object.keys(argTypes),
+			template: '<email v-bind="$props" />',
+		};
 	},
-	template: '<email />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index 579f509f27..09237cf350 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: general,
 };
 export const Default = {
-	components: {
-		general,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				general,
+			},
+			props: Object.keys(argTypes),
+			template: '<general v-bind="$props" />',
+		};
 	},
-	template: '<general />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index 967ed5459c..9d05bd5c25 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: import_export,
 };
 export const Default = {
-	components: {
-		import_export,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				import_export,
+			},
+			props: Object.keys(argTypes),
+			template: '<import_export v-bind="$props" />',
+		};
 	},
-	template: '<import_export />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index 2d9a2ec86e..6b5f9e0c3d 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index a9195df21d..fb333bb1d0 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: instance_mute,
 };
 export const Default = {
-	components: {
-		instance_mute,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				instance_mute,
+			},
+			props: Object.keys(argTypes),
+			template: '<instance_mute v-bind="$props" />',
+		};
 	},
-	template: '<instance_mute />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index 297ba1bdf8..fd84608d50 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: mute_block,
 };
 export const Default = {
-	components: {
-		mute_block,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				mute_block,
+			},
+			props: Object.keys(argTypes),
+			template: '<mute_block v-bind="$props" />',
+		};
 	},
-	template: '<mute_block />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index 0d5427af52..3fc2b9a867 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: navbar,
 };
 export const Default = {
-	components: {
-		navbar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				navbar,
+			},
+			props: Object.keys(argTypes),
+			template: '<navbar v-bind="$props" />',
+		};
 	},
-	template: '<navbar />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index 2d896a5cd3..0c19456852 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: notifications,
 };
 export const Default = {
-	components: {
-		notifications,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				notifications,
+			},
+			props: Object.keys(argTypes),
+			template: '<notifications v-bind="$props" />',
+		};
 	},
-	template: '<notifications />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index 4158413e98..83e7cce2b4 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: other,
 };
 export const Default = {
-	components: {
-		other,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				other,
+			},
+			props: Object.keys(argTypes),
+			template: '<other v-bind="$props" />',
+		};
 	},
-	template: '<other />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index aeee457f2b..bace922ca8 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: plugin_install,
 };
 export const Default = {
-	components: {
-		plugin_install,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				plugin_install,
+			},
+			props: Object.keys(argTypes),
+			template: '<plugin_install v-bind="$props" />',
+		};
 	},
-	template: '<plugin_install />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index e5ab35cc06..88e14e32de 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: plugin,
 };
 export const Default = {
-	components: {
-		plugin,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				plugin,
+			},
+			props: Object.keys(argTypes),
+			template: '<plugin v-bind="$props" />',
+		};
 	},
-	template: '<plugin />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 766dbd1401..812329857f 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: preferences_backups,
 };
 export const Default = {
-	components: {
-		preferences_backups,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				preferences_backups,
+			},
+			props: Object.keys(argTypes),
+			template: '<preferences_backups v-bind="$props" />',
+		};
 	},
-	template: '<preferences_backups />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index d86269e6d8..e2b2ab905b 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: privacy,
 };
 export const Default = {
-	components: {
-		privacy,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				privacy,
+			},
+			props: Object.keys(argTypes),
+			template: '<privacy v-bind="$props" />',
+		};
 	},
-	template: '<privacy />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index b33bd355f8..302a1a37b9 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: profile,
 };
 export const Default = {
-	components: {
-		profile,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				profile,
+			},
+			props: Object.keys(argTypes),
+			template: '<profile v-bind="$props" />',
+		};
 	},
-	template: '<profile />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index 331b6fedd2..7328d53bd7 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: reaction,
 };
 export const Default = {
-	components: {
-		reaction,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				reaction,
+			},
+			props: Object.keys(argTypes),
+			template: '<reaction v-bind="$props" />',
+		};
 	},
-	template: '<reaction />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index 7b6da5bae0..0cbf932ce5 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: roles,
 };
 export const Default = {
-	components: {
-		roles,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				roles,
+			},
+			props: Object.keys(argTypes),
+			template: '<roles v-bind="$props" />',
+		};
 	},
-	template: '<roles />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index b8209f45d8..7997beeca4 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: security,
 };
 export const Default = {
-	components: {
-		security,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				security,
+			},
+			props: Object.keys(argTypes),
+			template: '<security v-bind="$props" />',
+		};
 	},
-	template: '<security />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index dd9f6e8a9d..bb1d5fc873 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: sounds_sound,
 };
 export const Default = {
-	components: {
-		sounds_sound,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				sounds_sound,
+			},
+			props: Object.keys(argTypes),
+			template: '<sounds_sound v-bind="$props" />',
+		};
 	},
-	template: '<sounds_sound />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index ed8a8c139f..121f81ccab 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: sounds,
 };
 export const Default = {
-	components: {
-		sounds,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				sounds,
+			},
+			props: Object.keys(argTypes),
+			template: '<sounds v-bind="$props" />',
+		};
 	},
-	template: '<sounds />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 05dbbae799..77e6f04e08 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbar_statusbar,
 };
 export const Default = {
-	components: {
-		statusbar_statusbar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbar_statusbar,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbar_statusbar v-bind="$props" />',
+		};
 	},
-	template: '<statusbar_statusbar />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 19be758d90..75f6acc6fb 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbar,
 };
 export const Default = {
-	components: {
-		statusbar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbar,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbar v-bind="$props" />',
+		};
 	},
-	template: '<statusbar />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index 55f8ffe3b4..7aa772208e 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: theme_install,
 };
 export const Default = {
-	components: {
-		theme_install,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				theme_install,
+			},
+			props: Object.keys(argTypes),
+			template: '<theme_install v-bind="$props" />',
+		};
 	},
-	template: '<theme_install />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index 4a4e4dc6e1..42fe97c937 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: theme_manage,
 };
 export const Default = {
-	components: {
-		theme_manage,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				theme_manage,
+			},
+			props: Object.keys(argTypes),
+			template: '<theme_manage v-bind="$props" />',
+		};
 	},
-	template: '<theme_manage />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index 68093e90b3..93da070836 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: theme,
 };
 export const Default = {
-	components: {
-		theme,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				theme,
+			},
+			props: Object.keys(argTypes),
+			template: '<theme v-bind="$props" />',
+		};
 	},
-	template: '<theme />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index 67d2a4fd88..33952bb961 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: webhook_edit,
 };
 export const Default = {
-	components: {
-		webhook_edit,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				webhook_edit,
+			},
+			props: Object.keys(argTypes),
+			template: '<webhook_edit v-bind="$props" />',
+		};
 	},
-	template: '<webhook_edit />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index fbc9e52c60..4f94b9758e 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: webhook_new,
 };
 export const Default = {
-	components: {
-		webhook_new,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				webhook_new,
+			},
+			props: Object.keys(argTypes),
+			template: '<webhook_new v-bind="$props" />',
+		};
 	},
-	template: '<webhook_new />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index 838e9390a4..18e95e337b 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: webhook,
 };
 export const Default = {
-	components: {
-		webhook,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				webhook,
+			},
+			props: Object.keys(argTypes),
+			template: '<webhook v-bind="$props" />',
+		};
 	},
-	template: '<webhook />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index 1faff2b693..619143166b 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: word_mute,
 };
 export const Default = {
-	components: {
-		word_mute,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				word_mute,
+			},
+			props: Object.keys(argTypes),
+			template: '<word_mute v-bind="$props" />',
+		};
 	},
-	template: '<word_mute />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index ff2365051a..69a1127236 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: share,
 };
 export const Default = {
-	components: {
-		share,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				share,
+			},
+			props: Object.keys(argTypes),
+			template: '<share v-bind="$props" />',
+		};
 	},
-	template: '<share />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index 9349f62296..c34c3722d2 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: signup_complete,
 };
 export const Default = {
-	components: {
-		signup_complete,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				signup_complete,
+			},
+			props: Object.keys(argTypes),
+			template: '<signup_complete v-bind="$props" />',
+		};
 	},
-	template: '<signup_complete />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index 7742ca1b13..8e39a7161a 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: tag,
 };
 export const Default = {
-	components: {
-		tag,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				tag,
+			},
+			props: Object.keys(argTypes),
+			template: '<tag v-bind="$props" />',
+		};
 	},
-	template: '<tag />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index 300a3313dd..2ae21fef85 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: theme_editor,
 };
 export const Default = {
-	components: {
-		theme_editor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				theme_editor,
+			},
+			props: Object.keys(argTypes),
+			template: '<theme_editor v-bind="$props" />',
+		};
 	},
-	template: '<theme_editor />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index 5de5a151be..9acd55e1e3 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: timeline,
 };
 export const Default = {
-	components: {
-		timeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				timeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<timeline v-bind="$props" />',
+		};
 	},
-	template: '<timeline />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index 591039580f..0066d0d3d5 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: timeline_tutorial,
 };
 export const Default = {
-	components: {
-		timeline_tutorial,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				timeline_tutorial,
+			},
+			props: Object.keys(argTypes),
+			template: '<timeline_tutorial v-bind="$props" />',
+		};
 	},
-	template: '<timeline_tutorial />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index 21053a2208..821a2e6bf8 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: user_info,
 };
 export const Default = {
-	components: {
-		user_info,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				user_info,
+			},
+			props: Object.keys(argTypes),
+			template: '<user_info v-bind="$props" />',
+		};
 	},
-	template: '<user_info />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index f951573f77..16cde7e2fc 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: user_list_timeline,
 };
 export const Default = {
-	components: {
-		user_list_timeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				user_list_timeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<user_list_timeline v-bind="$props" />',
+		};
 	},
-	template: '<user_list_timeline />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 6757c4821d..1637eec0d3 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: user_tag,
 };
 export const Default = {
-	components: {
-		user_tag,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				user_tag,
+			},
+			props: Object.keys(argTypes),
+			template: '<user_tag v-bind="$props" />',
+		};
 	},
-	template: '<user_tag />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index 808fc7daa4..ade9caa091 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: achievements,
 };
 export const Default = {
-	components: {
-		achievements,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				achievements,
+			},
+			props: Object.keys(argTypes),
+			template: '<achievements v-bind="$props" />',
+		};
 	},
-	template: '<achievements />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index 31183e5fcf..8c1a19d1ae 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: activity_following,
 };
 export const Default = {
-	components: {
-		activity_following,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				activity_following,
+			},
+			props: Object.keys(argTypes),
+			template: '<activity_following v-bind="$props" />',
+		};
 	},
-	template: '<activity_following />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 3421de0ece..44e7c8bc55 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: activity_heatmap,
 };
 export const Default = {
-	components: {
-		activity_heatmap,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				activity_heatmap,
+			},
+			props: Object.keys(argTypes),
+			template: '<activity_heatmap v-bind="$props" />',
+		};
 	},
-	template: '<activity_heatmap />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index abb31c270c..d4c45a3031 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: activity_notes,
 };
 export const Default = {
-	components: {
-		activity_notes,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				activity_notes,
+			},
+			props: Object.keys(argTypes),
+			template: '<activity_notes v-bind="$props" />',
+		};
 	},
-	template: '<activity_notes />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index 2fb5ac33ea..9ceb716867 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: activity_pv,
 };
 export const Default = {
-	components: {
-		activity_pv,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				activity_pv,
+			},
+			props: Object.keys(argTypes),
+			template: '<activity_pv v-bind="$props" />',
+		};
 	},
-	template: '<activity_pv />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index 8984f08ed2..88e887b423 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: activity,
 };
 export const Default = {
-	components: {
-		activity,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				activity,
+			},
+			props: Object.keys(argTypes),
+			template: '<activity v-bind="$props" />',
+		};
 	},
-	template: '<activity />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index 6296395096..d4b2535e92 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: clips,
 };
 export const Default = {
-	components: {
-		clips,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				clips,
+			},
+			props: Object.keys(argTypes),
+			template: '<clips v-bind="$props" />',
+		};
 	},
-	template: '<clips />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index 1f02dc218b..171a1b4358 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: follow_list,
 };
 export const Default = {
-	components: {
-		follow_list,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				follow_list,
+			},
+			props: Object.keys(argTypes),
+			template: '<follow_list v-bind="$props" />',
+		};
 	},
-	template: '<follow_list />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index af816cf536..92385dc1e2 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: followers,
 };
 export const Default = {
-	components: {
-		followers,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				followers,
+			},
+			props: Object.keys(argTypes),
+			template: '<followers v-bind="$props" />',
+		};
 	},
-	template: '<followers />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index 49eda2b16d..98479f85b0 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: following,
 };
 export const Default = {
-	components: {
-		following,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				following,
+			},
+			props: Object.keys(argTypes),
+			template: '<following v-bind="$props" />',
+		};
 	},
-	template: '<following />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index be6dc8fd10..ad38c5c7b0 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: gallery,
 };
 export const Default = {
-	components: {
-		gallery,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				gallery,
+			},
+			props: Object.keys(argTypes),
+			template: '<gallery v-bind="$props" />',
+		};
 	},
-	template: '<gallery />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index d829dd4475..d300f35af7 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: home,
 };
 export const Default = {
-	components: {
-		home,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				home,
+			},
+			props: Object.keys(argTypes),
+			template: '<home v-bind="$props" />',
+		};
 	},
-	template: '<home />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index c5ccc22ee0..9758be90cc 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index_activity,
 };
 export const Default = {
-	components: {
-		index_activity,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index_activity,
+			},
+			props: Object.keys(argTypes),
+			template: '<index_activity v-bind="$props" />',
+		};
 	},
-	template: '<index_activity />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index b8a1aa9717..cf75985e74 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index_photos,
 };
 export const Default = {
-	components: {
-		index_photos,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index_photos,
+			},
+			props: Object.keys(argTypes),
+			template: '<index_photos v-bind="$props" />',
+		};
 	},
-	template: '<index_photos />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index becab310e9..ee8176e388 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index 1bb327d7b8..09dd96f00a 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index_timeline,
 };
 export const Default = {
-	components: {
-		index_timeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index_timeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<index_timeline v-bind="$props" />',
+		};
 	},
-	template: '<index_timeline />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index 8f94478f46..b0e19bd13b 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: pages,
 };
 export const Default = {
-	components: {
-		pages,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				pages,
+			},
+			props: Object.keys(argTypes),
+			template: '<pages v-bind="$props" />',
+		};
 	},
-	template: '<pages />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index 9c16da8886..40288b8ba5 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: reactions,
 };
 export const Default = {
-	components: {
-		reactions,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				reactions,
+			},
+			props: Object.keys(argTypes),
+			template: '<reactions v-bind="$props" />',
+		};
 	},
-	template: '<reactions />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index 390c763cfc..d9cfbc1788 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome_entrance_a,
 };
 export const Default = {
-	components: {
-		welcome_entrance_a,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome_entrance_a,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome_entrance_a v-bind="$props" />',
+		};
 	},
-	template: '<welcome_entrance_a />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index 5307088309..0850cfc14e 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome_entrance_b,
 };
 export const Default = {
-	components: {
-		welcome_entrance_b,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome_entrance_b,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome_entrance_b v-bind="$props" />',
+		};
 	},
-	template: '<welcome_entrance_b />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index 53a1a93d46..f125157a86 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome_entrance_c,
 };
 export const Default = {
-	components: {
-		welcome_entrance_c,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome_entrance_c,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome_entrance_c v-bind="$props" />',
+		};
 	},
-	template: '<welcome_entrance_c />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index 1e755e809c..5c5f7a1005 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome_setup,
 };
 export const Default = {
-	components: {
-		welcome_setup,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome_setup,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome_setup v-bind="$props" />',
+		};
 	},
-	template: '<welcome_setup />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index 30c0f1ee2e..a1a95e43fb 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome,
 };
 export const Default = {
-	components: {
-		welcome,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome v-bind="$props" />',
+		};
 	},
-	template: '<welcome />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index 7492893a0a..0dcaf112ff 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: welcome_timeline,
 };
 export const Default = {
-	components: {
-		welcome_timeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				welcome_timeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<welcome_timeline v-bind="$props" />',
+		};
 	},
-	template: '<welcome_timeline />',
 	parameters: {
 		layout: 'fullscreen',
 	},
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index ec37ad6650..e64c41be77 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: common,
 };
 export const Default = {
-	components: {
-		common,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				common,
+			},
+			props: Object.keys(argTypes),
+			template: '<common v-bind="$props" />',
+		};
 	},
-	template: '<common />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index e06a66db70..36658a6c3f 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: navbar_for_mobile,
 };
 export const Default = {
-	components: {
-		navbar_for_mobile,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				navbar_for_mobile,
+			},
+			props: Object.keys(argTypes),
+			template: '<navbar_for_mobile v-bind="$props" />',
+		};
 	},
-	template: '<navbar_for_mobile />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index a8570942d7..ceeb4f0158 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: navbar,
 };
 export const Default = {
-	components: {
-		navbar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				navbar,
+			},
+			props: Object.keys(argTypes),
+			template: '<navbar v-bind="$props" />',
+		};
 	},
-	template: '<navbar />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index 6463aaa0fb..d0175f87fb 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: notification,
 };
 export const Default = {
-	components: {
-		notification,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				notification,
+			},
+			props: Object.keys(argTypes),
+			template: '<notification v-bind="$props" />',
+		};
 	},
-	template: '<notification />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index 4930084fe1..68ace58336 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbar_federation,
 };
 export const Default = {
-	components: {
-		statusbar_federation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbar_federation,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbar_federation v-bind="$props" />',
+		};
 	},
-	template: '<statusbar_federation />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index 0b3d8b8d1a..86d16757f6 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbar_rss,
 };
 export const Default = {
-	components: {
-		statusbar_rss,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbar_rss,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbar_rss v-bind="$props" />',
+		};
 	},
-	template: '<statusbar_rss />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index 1a803671f3..e111143890 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbar_user_list,
 };
 export const Default = {
-	components: {
-		statusbar_user_list,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbar_user_list,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbar_user_list v-bind="$props" />',
+		};
 	},
-	template: '<statusbar_user_list />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index 05b955c546..57cbd826f8 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: statusbars,
 };
 export const Default = {
-	components: {
-		statusbars,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				statusbars,
+			},
+			props: Object.keys(argTypes),
+			template: '<statusbars v-bind="$props" />',
+		};
 	},
-	template: '<statusbars />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index f114dc0ffc..39cde128b9 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: stream_indicator,
 };
 export const Default = {
-	components: {
-		stream_indicator,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				stream_indicator,
+			},
+			props: Object.keys(argTypes),
+			template: '<stream_indicator v-bind="$props" />',
+		};
 	},
-	template: '<stream_indicator />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index 4669ca5d1b..e6d85f5392 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: upload,
 };
 export const Default = {
-	components: {
-		upload,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				upload,
+			},
+			props: Object.keys(argTypes),
+			template: '<upload v-bind="$props" />',
+		};
 	},
-	template: '<upload />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index 9082630c21..cc847e7126 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: classic_header,
 };
 export const Default = {
-	components: {
-		classic_header,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				classic_header,
+			},
+			props: Object.keys(argTypes),
+			template: '<classic_header v-bind="$props" />',
+		};
 	},
-	template: '<classic_header />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index 5e3f7eb986..741da3d146 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: classic_sidebar,
 };
 export const Default = {
-	components: {
-		classic_sidebar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				classic_sidebar,
+			},
+			props: Object.keys(argTypes),
+			template: '<classic_sidebar v-bind="$props" />',
+		};
 	},
-	template: '<classic_sidebar />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index 64601510aa..cd32251735 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: classic,
 };
 export const Default = {
-	components: {
-		classic,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				classic,
+			},
+			props: Object.keys(argTypes),
+			template: '<classic v-bind="$props" />',
+		};
 	},
-	template: '<classic />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index fbd352ec15..34bd26ace9 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: deck,
 };
 export const Default = {
-	components: {
-		deck,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				deck,
+			},
+			props: Object.keys(argTypes),
+			template: '<deck v-bind="$props" />',
+		};
 	},
-	template: '<deck />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index 4965e4a3d8..37f6bace9c 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: antenna_column,
 };
 export const Default = {
-	components: {
-		antenna_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				antenna_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<antenna_column v-bind="$props" />',
+		};
 	},
-	template: '<antenna_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index 0290eb96de..3a4a232d05 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: channel_column,
 };
 export const Default = {
-	components: {
-		channel_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				channel_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<channel_column v-bind="$props" />',
+		};
 	},
-	template: '<channel_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index 7d1262c8ac..14174bf723 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: column_core,
 };
 export const Default = {
-	components: {
-		column_core,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				column_core,
+			},
+			props: Object.keys(argTypes),
+			template: '<column_core v-bind="$props" />',
+		};
 	},
-	template: '<column_core />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index f53f74b793..7c3e7b69e0 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: column,
 };
 export const Default = {
-	components: {
-		column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				column,
+			},
+			props: Object.keys(argTypes),
+			template: '<column v-bind="$props" />',
+		};
 	},
-	template: '<column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index 34a721c955..a7ce6757ed 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: direct_column,
 };
 export const Default = {
-	components: {
-		direct_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				direct_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<direct_column v-bind="$props" />',
+		};
 	},
-	template: '<direct_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index 2eac36177d..7d2745f4a9 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: list_column,
 };
 export const Default = {
-	components: {
-		list_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				list_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<list_column v-bind="$props" />',
+		};
 	},
-	template: '<list_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index 8d4c269d89..60021a5d78 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: main_column,
 };
 export const Default = {
-	components: {
-		main_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				main_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<main_column v-bind="$props" />',
+		};
 	},
-	template: '<main_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index 88b20b8604..16e2b2e1d7 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: mentions_column,
 };
 export const Default = {
-	components: {
-		mentions_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				mentions_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<mentions_column v-bind="$props" />',
+		};
 	},
-	template: '<mentions_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index 5467be1283..06d18ef9b3 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: notifications_column,
 };
 export const Default = {
-	components: {
-		notifications_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				notifications_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<notifications_column v-bind="$props" />',
+		};
 	},
-	template: '<notifications_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index 13093a2acd..741464063d 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: tl_column,
 };
 export const Default = {
-	components: {
-		tl_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				tl_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<tl_column v-bind="$props" />',
+		};
 	},
-	template: '<tl_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index c0dfb372fb..27a392cf6e 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: widgets_column,
 };
 export const Default = {
-	components: {
-		widgets_column,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				widgets_column,
+			},
+			props: Object.keys(argTypes),
+			template: '<widgets_column v-bind="$props" />',
+		};
 	},
-	template: '<widgets_column />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index c46a4eeff3..d049fb3ae9 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: universal,
 };
 export const Default = {
-	components: {
-		universal,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				universal,
+			},
+			props: Object.keys(argTypes),
+			template: '<universal v-bind="$props" />',
+		};
 	},
-	template: '<universal />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index 590f6b1ca3..8c85bf27e0 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: universal_widgets,
 };
 export const Default = {
-	components: {
-		universal_widgets,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				universal_widgets,
+			},
+			props: Object.keys(argTypes),
+			template: '<universal_widgets v-bind="$props" />',
+		};
 	},
-	template: '<universal_widgets />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index 81b1f51904..5a725cb4b8 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: visitor,
 };
 export const Default = {
-	components: {
-		visitor,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				visitor,
+			},
+			props: Object.keys(argTypes),
+			template: '<visitor v-bind="$props" />',
+		};
 	},
-	template: '<visitor />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index e10d21c203..e430cd9743 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: a,
 };
 export const Default = {
-	components: {
-		a,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				a,
+			},
+			props: Object.keys(argTypes),
+			template: '<a v-bind="$props" />',
+		};
 	},
-	template: '<a />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index 586927134a..f329bae1a4 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: b,
 };
 export const Default = {
-	components: {
-		b,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				b,
+			},
+			props: Object.keys(argTypes),
+			template: '<b v-bind="$props" />',
+		};
 	},
-	template: '<b />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index 403f459789..2ecd08b220 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: header,
 };
 export const Default = {
-	components: {
-		header,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				header,
+			},
+			props: Object.keys(argTypes),
+			template: '<header v-bind="$props" />',
+		};
 	},
-	template: '<header />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index 57141ea077..4468ebc8a5 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: kanban,
 };
 export const Default = {
-	components: {
-		kanban,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				kanban,
+			},
+			props: Object.keys(argTypes),
+			template: '<kanban v-bind="$props" />',
+		};
 	},
-	template: '<kanban />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index 08c0d42c00..ff8c8bca9a 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: zen,
 };
 export const Default = {
-	components: {
-		zen,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				zen,
+			},
+			props: Object.keys(argTypes),
+			template: '<zen v-bind="$props" />',
+		};
 	},
-	template: '<zen />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index 27feb2741c..5f2d78036c 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetActivity_calendar,
 };
 export const Default = {
-	components: {
-		WidgetActivity_calendar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetActivity_calendar,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetActivity_calendar v-bind="$props" />',
+		};
 	},
-	template: '<WidgetActivity_calendar />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index 0c009d6fdf..3cecf4a68e 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetActivity_chart,
 };
 export const Default = {
-	components: {
-		WidgetActivity_chart,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetActivity_chart,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetActivity_chart v-bind="$props" />',
+		};
 	},
-	template: '<WidgetActivity_chart />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
index ea9270960c..01658db95d 100644
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetActivity,
 };
 export const Default = {
-	components: {
-		WidgetActivity,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetActivity,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetActivity v-bind="$props" />',
+		};
 	},
-	template: '<WidgetActivity />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
index 0ad9b1d727..b997f368a7 100644
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetAichan,
 };
 export const Default = {
-	components: {
-		WidgetAichan,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetAichan,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetAichan v-bind="$props" />',
+		};
 	},
-	template: '<WidgetAichan />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
index 651e14f9fc..f64cf77995 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetAiscript,
 };
 export const Default = {
-	components: {
-		WidgetAiscript,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetAiscript,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetAiscript v-bind="$props" />',
+		};
 	},
-	template: '<WidgetAiscript />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
index 0043d6fffe..892110bc25 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetAiscriptApp,
 };
 export const Default = {
-	components: {
-		WidgetAiscriptApp,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetAiscriptApp,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetAiscriptApp v-bind="$props" />',
+		};
 	},
-	template: '<WidgetAiscriptApp />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
index c561651066..3a07679d77 100644
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetButton,
 };
 export const Default = {
-	components: {
-		WidgetButton,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetButton,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetButton v-bind="$props" />',
+		};
 	},
-	template: '<WidgetButton />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
index a626ff63b9..ccb7c184b4 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetCalendar,
 };
 export const Default = {
-	components: {
-		WidgetCalendar,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetCalendar,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetCalendar v-bind="$props" />',
+		};
 	},
-	template: '<WidgetCalendar />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
index 37bffbaf26..ce6d40064b 100644
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetClicker,
 };
 export const Default = {
-	components: {
-		WidgetClicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetClicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetClicker v-bind="$props" />',
+		};
 	},
-	template: '<WidgetClicker />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
index 2ae8925a3e..0eb10f1f07 100644
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetClock,
 };
 export const Default = {
-	components: {
-		WidgetClock,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetClock v-bind="$props" />',
+		};
 	},
-	template: '<WidgetClock />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
index 0b812ee24b..e37c4108dc 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetDigitalClock,
 };
 export const Default = {
-	components: {
-		WidgetDigitalClock,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetDigitalClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetDigitalClock v-bind="$props" />',
+		};
 	},
-	template: '<WidgetDigitalClock />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
index 9f88768c49..549f71c6fd 100644
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetFederation,
 };
 export const Default = {
-	components: {
-		WidgetFederation,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetFederation,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetFederation v-bind="$props" />',
+		};
 	},
-	template: '<WidgetFederation />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
index 188ff80394..8458d842f5 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetInstanceCloud,
 };
 export const Default = {
-	components: {
-		WidgetInstanceCloud,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetInstanceCloud,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetInstanceCloud v-bind="$props" />',
+		};
 	},
-	template: '<WidgetInstanceCloud />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
index 555d77c6b7..6a6505a799 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetInstanceInfo,
 };
 export const Default = {
-	components: {
-		WidgetInstanceInfo,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetInstanceInfo,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetInstanceInfo v-bind="$props" />',
+		};
 	},
-	template: '<WidgetInstanceInfo />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
index 54a7023942..de7a7431c5 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetJobQueue,
 };
 export const Default = {
-	components: {
-		WidgetJobQueue,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetJobQueue,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetJobQueue v-bind="$props" />',
+		};
 	},
-	template: '<WidgetJobQueue />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
index cf1a1d2693..202529c8a5 100644
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetMemo,
 };
 export const Default = {
-	components: {
-		WidgetMemo,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetMemo,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetMemo v-bind="$props" />',
+		};
 	},
-	template: '<WidgetMemo />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
index e21c7f77c2..bf1f7aecae 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetNotifications,
 };
 export const Default = {
-	components: {
-		WidgetNotifications,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetNotifications,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetNotifications v-bind="$props" />',
+		};
 	},
-	template: '<WidgetNotifications />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
index 9e4161b535..fa7371a499 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetOnlineUsers,
 };
 export const Default = {
-	components: {
-		WidgetOnlineUsers,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetOnlineUsers,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetOnlineUsers v-bind="$props" />',
+		};
 	},
-	template: '<WidgetOnlineUsers />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
index 77c755a7a5..4e335e01c2 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetPhotos,
 };
 export const Default = {
-	components: {
-		WidgetPhotos,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetPhotos,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetPhotos v-bind="$props" />',
+		};
 	},
-	template: '<WidgetPhotos />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
index 2576a8b08d..5d03be5ce2 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetPostForm,
 };
 export const Default = {
-	components: {
-		WidgetPostForm,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetPostForm,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetPostForm v-bind="$props" />',
+		};
 	},
-	template: '<WidgetPostForm />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
index 7654d805c8..6b9b8b9adf 100644
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetProfile,
 };
 export const Default = {
-	components: {
-		WidgetProfile,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetProfile,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetProfile v-bind="$props" />',
+		};
 	},
-	template: '<WidgetProfile />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
index baae27167c..02bd406d4f 100644
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetRss,
 };
 export const Default = {
-	components: {
-		WidgetRss,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetRss,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetRss v-bind="$props" />',
+		};
 	},
-	template: '<WidgetRss />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
index f70c23210f..16d4a0855d 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetRssTicker,
 };
 export const Default = {
-	components: {
-		WidgetRssTicker,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetRssTicker,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetRssTicker v-bind="$props" />',
+		};
 	},
-	template: '<WidgetRssTicker />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
index 8671a34833..59394b70da 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetSlideshow,
 };
 export const Default = {
-	components: {
-		WidgetSlideshow,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetSlideshow,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetSlideshow v-bind="$props" />',
+		};
 	},
-	template: '<WidgetSlideshow />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
index e067689c28..7b00b73528 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetTimeline,
 };
 export const Default = {
-	components: {
-		WidgetTimeline,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetTimeline,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetTimeline v-bind="$props" />',
+		};
 	},
-	template: '<WidgetTimeline />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
index 96ee667bed..c1dca9039d 100644
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetTrends,
 };
 export const Default = {
-	components: {
-		WidgetTrends,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetTrends,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetTrends v-bind="$props" />',
+		};
 	},
-	template: '<WidgetTrends />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
index 1dd22e3a7e..3c388f3f42 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetUnixClock,
 };
 export const Default = {
-	components: {
-		WidgetUnixClock,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetUnixClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetUnixClock v-bind="$props" />',
+		};
 	},
-	template: '<WidgetUnixClock />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
index 2435b9a5b4..528f9d26cd 100644
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: WidgetUserList,
 };
 export const Default = {
-	components: {
-		WidgetUserList,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				WidgetUserList,
+			},
+			props: Object.keys(argTypes),
+			template: '<WidgetUserList v-bind="$props" />',
+		};
 	},
-	template: '<WidgetUserList />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 9beb5e2940..0c376fdf99 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: cpu_mem,
 };
 export const Default = {
-	components: {
-		cpu_mem,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				cpu_mem,
+			},
+			props: Object.keys(argTypes),
+			template: '<cpu_mem v-bind="$props" />',
+		};
 	},
-	template: '<cpu_mem />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index a55dcad76e..aefd4642b4 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: cpu,
 };
 export const Default = {
-	components: {
-		cpu,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				cpu,
+			},
+			props: Object.keys(argTypes),
+			template: '<cpu v-bind="$props" />',
+		};
 	},
-	template: '<cpu />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index c63f3cd4a6..3b97ad1a91 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: disk,
 };
 export const Default = {
-	components: {
-		disk,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				disk,
+			},
+			props: Object.keys(argTypes),
+			template: '<disk v-bind="$props" />',
+		};
 	},
-	template: '<disk />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index ee29d8a540..a982729b61 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: index,
 };
 export const Default = {
-	components: {
-		index,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				index,
+			},
+			props: Object.keys(argTypes),
+			template: '<index v-bind="$props" />',
+		};
 	},
-	template: '<index />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index 231f9459b4..acfa33634b 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: mem,
 };
 export const Default = {
-	components: {
-		mem,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				mem,
+			},
+			props: Object.keys(argTypes),
+			template: '<mem v-bind="$props" />',
+		};
 	},
-	template: '<mem />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index f5fb098442..3f231caf8c 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: net,
 };
 export const Default = {
-	components: {
-		net,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				net,
+			},
+			props: Object.keys(argTypes),
+			template: '<net v-bind="$props" />',
+		};
 	},
-	template: '<net />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index 7e56a6a726..32f8c898c0 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -5,10 +5,15 @@ const meta = {
 	component: pie,
 };
 export const Default = {
-	components: {
-		pie,
+	render(args, { argTypes }) {
+		return {
+			components: {
+				pie,
+			},
+			props: Object.keys(argTypes),
+			template: '<pie v-bind="$props" />',
+		};
 	},
-	template: '<pie />',
 	parameters: {
 		layout: 'centered',
 	},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 98b347b7fa..b1b170a5ea 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -402,7 +402,9 @@ importers:
       '@storybook/addon-interactions': ^7.0.0-rc.4
       '@storybook/addon-links': ^7.0.0-rc.4
       '@storybook/blocks': ^7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.4
       '@storybook/testing-library': ^0.0.14-next.1
+      '@storybook/theming': 7.0.0-rc.4
       '@storybook/vue3': ^7.0.0-rc.4
       '@storybook/vue3-vite': ^7.0.0-rc.4
       '@syuilo/aiscript': 0.13.1
@@ -459,6 +461,8 @@ importers:
       matter-js: 0.19.0
       mfm-js: 0.23.3
       misskey-js: 0.0.15
+      msw: ^1.1.0
+      msw-storybook-addon: ^1.8.0
       photoswipe: 5.3.6
       prettier: ^2.8.4
       prismjs: 1.29.0
@@ -561,7 +565,9 @@ importers:
       '@storybook/addon-interactions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/addon-links': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/testing-library': 0.0.14-next.1
+      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
       '@storybook/vue3-vite': 7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae
       '@testing-library/vue': 6.6.1_a2ihsjreowava2sm4iorpgwkom
@@ -590,6 +596,8 @@ importers:
       eslint-plugin-import: 2.27.5_uyiasnnzcqrxqkfvjklwnmwcha
       eslint-plugin-vue: 9.9.0_eslint@8.35.0
       happy-dom: 8.9.0
+      msw: 1.1.0_typescript@4.9.5
+      msw-storybook-addon: 1.8.0_msw@1.1.0
       prettier: 2.8.4
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
@@ -3866,6 +3874,30 @@ packages:
     requiresBuild: true
     optional: true
 
+  /@mswjs/cookies/0.2.2:
+    resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==}
+    engines: {node: '>=14'}
+    dependencies:
+      '@types/set-cookie-parser': 2.4.2
+      set-cookie-parser: 2.5.1
+    dev: true
+
+  /@mswjs/interceptors/0.17.9:
+    resolution: {integrity: sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==}
+    engines: {node: '>=14'}
+    dependencies:
+      '@open-draft/until': 1.0.3
+      '@types/debug': 4.1.7
+      '@xmldom/xmldom': 0.8.6
+      debug: 4.3.4
+      headers-polyfill: 3.1.2
+      outvariant: 1.3.0
+      strict-event-emitter: 0.2.8
+      web-encoding: 1.1.5
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@ndelangen/get-tarball/3.0.7:
     resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==}
     dependencies:
@@ -4009,6 +4041,10 @@ packages:
       - encoding
     dev: false
 
+  /@open-draft/until/1.0.3:
+    resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==}
+    dev: true
+
   /@peertube/http-signature/1.7.0:
     resolution: {integrity: sha512-aGQIwo6/sWtyyqhVK4e1MtxYz4N1X8CNt6SOtCc+Wnczs5S5ONaLHDDR8LYaGn0MgOwvGgXyuZ5sJIfd7iyoUw==}
     engines: {node: '>=0.10'}
@@ -4910,7 +4946,7 @@ packages:
     dependencies:
       '@storybook/client-logger': 7.0.0-rc.4
       memoizerific: 1.11.3
-      qs: 6.10.4
+      qs: 6.11.0
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: true
@@ -5457,6 +5493,16 @@ packages:
     resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
     dev: true
 
+  /@types/cookie/0.4.1:
+    resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+    dev: true
+
+  /@types/debug/4.1.7:
+    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+    dependencies:
+      '@types/ms': 0.7.31
+    dev: true
+
   /@types/detect-port/1.3.2:
     resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==}
     dev: true
@@ -5584,6 +5630,10 @@ packages:
       pretty-format: 29.3.1
     dev: true
 
+  /@types/js-levenshtein/1.1.1:
+    resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==}
+    dev: true
+
   /@types/js-yaml/4.0.5:
     resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
     dev: true
@@ -5646,6 +5696,10 @@ packages:
     resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
     dev: true
 
+  /@types/ms/0.7.31:
+    resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
+    dev: true
+
   /@types/node-fetch/2.6.2:
     resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
     dependencies:
@@ -5807,6 +5861,12 @@ packages:
     resolution: {integrity: sha512-DVoelQjcHaPshqyg0duirwuuaZ/teG4E3QGiQXbzso8akd12VRtgGYCao8viRFXHVLJOlo/Elh1nfbMsRQJXVA==}
     dev: true
 
+  /@types/set-cookie-parser/2.4.2:
+    resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==}
+    dependencies:
+      '@types/node': 18.15.0
+    dev: true
+
   /@types/sharp/0.31.1:
     resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==}
     dependencies:
@@ -6318,6 +6378,11 @@ packages:
     resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==}
     dev: false
 
+  /@xmldom/xmldom/0.8.6:
+    resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==}
+    engines: {node: '>=10.0.0'}
+    dev: true
+
   /@yarnpkg/esbuild-plugin-pnp/3.0.0-rc.15_esbuild@0.16.17:
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
     engines: {node: '>=14.15.0'}
@@ -6328,6 +6393,12 @@ packages:
       tslib: 2.5.0
     dev: true
 
+  /@zxing/text-encoding/0.9.0:
+    resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /abab/2.0.6:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     dev: false
@@ -7581,7 +7652,7 @@ packages:
     resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
     dependencies:
       function-bind: 1.1.1
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
 
   /callsites/3.1.0:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -7686,6 +7757,14 @@ packages:
       supports-color: 5.5.0
     dev: true
 
+  /chalk/4.1.1:
+    resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+    dev: true
+
   /chalk/4.1.2:
     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
     engines: {node: '>=10'}
@@ -7707,6 +7786,10 @@ packages:
     dependencies:
       is-regex: 1.1.4
 
+  /chardet/0.7.0:
+    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+    dev: true
+
   /chart.js/4.2.1:
     resolution: {integrity: sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==}
     engines: {pnpm: ^7.0.0}
@@ -7855,6 +7938,11 @@ packages:
       yargs: 16.2.0
     dev: false
 
+  /cli-spinners/2.7.0:
+    resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
+    engines: {node: '>=6'}
+    dev: true
+
   /cli-table3/0.6.3:
     resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
     engines: {node: 10.* || >= 12.*}
@@ -7880,6 +7968,11 @@ packages:
       string-width: 5.1.2
     dev: true
 
+  /cli-width/3.0.0:
+    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+    engines: {node: '>= 10'}
+    dev: true
+
   /cliui/3.2.0:
     resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
     dependencies:
@@ -7938,7 +8031,6 @@ packages:
   /clone/1.0.4:
     resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
     engines: {node: '>=0.8'}
-    dev: false
 
   /clone/2.1.2:
     resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
@@ -8198,6 +8290,11 @@ packages:
     resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
     dev: true
 
+  /cookie/0.4.2:
+    resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /cookie/0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
@@ -8610,7 +8707,7 @@ packages:
     dependencies:
       call-bind: 1.0.2
       es-get-iterator: 1.1.3
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       is-arguments: 1.1.1
       is-array-buffer: 3.0.2
       is-date-object: 1.0.5
@@ -8659,6 +8756,12 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /defaults/1.0.4:
+    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+    dependencies:
+      clone: 1.0.4
+    dev: true
+
   /defer-to-connect/2.0.1:
     resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
     engines: {node: '>=10'}
@@ -9043,7 +9146,7 @@ packages:
     resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
     dependencies:
       call-bind: 1.0.2
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       has-symbols: 1.0.3
       is-arguments: 1.1.1
       is-map: 2.0.2
@@ -9806,7 +9909,6 @@ packages:
   /events/3.3.0:
     resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
     engines: {node: '>=0.8.x'}
-    dev: false
 
   /execa/0.7.0:
     resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
@@ -10003,6 +10105,15 @@ packages:
   /extend/3.0.2:
     resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
 
+  /external-editor/3.1.0:
+    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+    engines: {node: '>=4'}
+    dependencies:
+      chardet: 0.7.0
+      iconv-lite: 0.4.24
+      tmp: 0.0.33
+    dev: true
+
   /extglob/2.0.4:
     resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
     engines: {node: '>=0.10.0'}
@@ -10659,13 +10770,6 @@ packages:
     resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
     dev: true
 
-  /get-intrinsic/1.1.3:
-    resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
-    dependencies:
-      function-bind: 1.1.1
-      has: 1.0.3
-      has-symbols: 1.0.3
-
   /get-intrinsic/1.2.0:
     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
     dependencies:
@@ -10964,6 +11068,11 @@ packages:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
     dev: true
 
+  /graphql/16.6.0:
+    resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==}
+    engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+    dev: true
+
   /gsap/3.11.4:
     resolution: {integrity: sha512-McHhEguHyExMMnjqKA8G+7TvxmlKQGMbjgwAilnFe1e4id7V/tFveRQ2YMZhTYu0oxHGWvbPltdVYQOu3z1SCA==}
     dev: false
@@ -11197,6 +11306,10 @@ packages:
     resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
     hasBin: true
 
+  /headers-polyfill/3.1.2:
+    resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==}
+    dev: true
+
   /hexoid/1.0.0:
     resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
     engines: {node: '>=8'}
@@ -11443,6 +11556,27 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /inquirer/8.2.5:
+    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      ansi-escapes: 4.3.2
+      chalk: 4.1.2
+      cli-cursor: 3.1.0
+      cli-width: 3.0.0
+      external-editor: 3.1.0
+      figures: 3.2.0
+      lodash: 4.17.21
+      mute-stream: 0.0.8
+      ora: 5.4.1
+      run-async: 2.4.1
+      rxjs: 7.8.0
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      through: 2.3.8
+      wrap-ansi: 7.0.0
+    dev: true
+
   /insert-text-at-cursor/0.3.0:
     resolution: {integrity: sha512-/nPtyeX9xPUvxZf+r0518B7uqNKlP+LqNJqSiXFEaa2T71rWIwTVXGH7hB9xO/EVdwa5/pWlFCPwShOW81XIxQ==}
     dev: false
@@ -11766,6 +11900,11 @@ packages:
       is-path-inside: 3.0.3
     dev: true
 
+  /is-interactive/1.0.0:
+    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+    engines: {node: '>=8'}
+    dev: true
+
   /is-ip/3.1.0:
     resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
     engines: {node: '>=8'}
@@ -11798,6 +11937,10 @@ packages:
     engines: {node: '>= 0.4'}
     dev: true
 
+  /is-node-process/1.0.1:
+    resolution: {integrity: sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==}
+    dev: true
+
   /is-number-object/1.0.7:
     resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
     engines: {node: '>= 0.4'}
@@ -12574,6 +12717,11 @@ packages:
       nopt: 6.0.0
     dev: true
 
+  /js-levenshtein/1.1.6:
+    resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /js-sdsl/4.2.0:
     resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
     dev: true
@@ -13579,6 +13727,51 @@ packages:
     optionalDependencies:
       msgpackr-extract: 2.2.0
 
+  /msw-storybook-addon/1.8.0_msw@1.1.0:
+    resolution: {integrity: sha512-dw3vZwqjixmiur0vouRSOax7wPSu9Og2Hspy9JZFHf49bZRjwDiLF0Pfn2NXEkGviYJOJiGxS1ejoTiUwoSg4A==}
+    peerDependencies:
+      msw: '>=0.35.0 <2.0.0'
+    dependencies:
+      is-node-process: 1.0.1
+      msw: 1.1.0_typescript@4.9.5
+    dev: true
+
+  /msw/1.1.0_typescript@4.9.5:
+    resolution: {integrity: sha512-oqMvUXm1bMbwvGpoXAQVz8vXXQyQyx52HBDg3EDOK+dFXkQHssgkXEG4LfMwwZyr2Qt18I/w04XPaY4BkFTkzA==}
+    engines: {node: '>=14'}
+    hasBin: true
+    requiresBuild: true
+    peerDependencies:
+      typescript: '>= 4.4.x <= 4.9.x'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@mswjs/cookies': 0.2.2
+      '@mswjs/interceptors': 0.17.9
+      '@open-draft/until': 1.0.3
+      '@types/cookie': 0.4.1
+      '@types/js-levenshtein': 1.1.1
+      chalk: 4.1.1
+      chokidar: 3.5.3
+      cookie: 0.4.2
+      graphql: 16.6.0
+      headers-polyfill: 3.1.2
+      inquirer: 8.2.5
+      is-node-process: 1.0.1
+      js-levenshtein: 1.1.6
+      node-fetch: 2.6.7
+      outvariant: 1.3.0
+      path-to-regexp: 6.2.1
+      strict-event-emitter: 0.4.6
+      type-fest: 2.19.0
+      typescript: 4.9.5
+      yargs: 17.6.2
+    transitivePeerDependencies:
+      - encoding
+      - supports-color
+    dev: true
+
   /muggle-string/0.2.2:
     resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
     dev: true
@@ -13592,6 +13785,10 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /mute-stream/0.0.8:
+    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+    dev: true
+
   /mylas/2.1.13:
     resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==}
     engines: {node: '>=12.0.0'}
@@ -14117,6 +14314,21 @@ packages:
       word-wrap: 1.2.3
     dev: true
 
+  /ora/5.4.1:
+    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      bl: 4.1.0
+      chalk: 4.1.2
+      cli-cursor: 3.1.0
+      cli-spinners: 2.7.0
+      is-interactive: 1.0.0
+      is-unicode-supported: 0.1.0
+      log-symbols: 4.1.0
+      strip-ansi: 6.0.1
+      wcwidth: 1.0.1
+    dev: true
+
   /ordered-read-streams/1.0.1:
     resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==}
     dependencies:
@@ -14137,6 +14349,11 @@ packages:
       lcid: 1.0.0
     dev: false
 
+  /os-tmpdir/1.0.2:
+    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /os-utils/0.0.14:
     resolution: {integrity: sha512-ajB8csaHLBvJOYsHJkp8YdO2FvlBbf/ZxaYQwXXRDyQ84UoE+uTuLXxqd0shekXMX6Qr/pt/DDyLMRAMsgfWzg==}
     dev: false
@@ -14151,6 +14368,10 @@ packages:
       jssha: 3.3.0
     dev: false
 
+  /outvariant/1.3.0:
+    resolution: {integrity: sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==}
+    dev: true
+
   /p-cancelable/2.1.1:
     resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
     engines: {node: '>=8'}
@@ -14391,6 +14612,10 @@ packages:
     resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==}
     dev: false
 
+  /path-to-regexp/6.2.1:
+    resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
+    dev: true
+
   /path-type/1.1.0:
     resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
     engines: {node: '>=0.10.0'}
@@ -15916,6 +16141,11 @@ packages:
       xml2js: 0.4.23
     dev: false
 
+  /run-async/2.4.1:
+    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
   /run-parallel/1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
     dependencies:
@@ -15924,7 +16154,7 @@ packages:
   /rxjs/7.8.0:
     resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
     dependencies:
-      tslib: 2.4.1
+      tslib: 2.5.0
 
   /s-age/1.1.2:
     resolution: {integrity: sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==}
@@ -16059,6 +16289,7 @@ packages:
   /semver/7.3.8:
     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
     engines: {node: '>=10'}
+    hasBin: true
     dependencies:
       lru-cache: 6.0.0
 
@@ -16111,7 +16342,6 @@ packages:
 
   /set-cookie-parser/2.5.1:
     resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
-    dev: false
 
   /set-value/2.0.1:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
@@ -16195,7 +16425,7 @@ packages:
     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
     dependencies:
       call-bind: 1.0.2
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       object-inspect: 1.12.2
     dev: true
 
@@ -16583,6 +16813,16 @@ packages:
     resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==}
     dev: false
 
+  /strict-event-emitter/0.2.8:
+    resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==}
+    dependencies:
+      events: 3.3.0
+    dev: true
+
+  /strict-event-emitter/0.4.6:
+    resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==}
+    dev: true
+
   /strict-uri-encode/1.1.0:
     resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
     engines: {node: '>=0.10.0'}
@@ -17010,6 +17250,13 @@ packages:
     engines: {node: '>=14.0.0'}
     dev: true
 
+  /tmp/0.0.33:
+    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+    engines: {node: '>=0.6.0'}
+    dependencies:
+      os-tmpdir: 1.0.2
+    dev: true
+
   /tmp/0.2.1:
     resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
     engines: {node: '>=8.17.0'}
@@ -17173,9 +17420,6 @@ packages:
     resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
     dev: true
 
-  /tslib/2.4.1:
-    resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
-
   /tslib/2.5.0:
     resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
 
@@ -18059,6 +18303,20 @@ packages:
       graceful-fs: 4.2.10
     dev: true
 
+  /wcwidth/1.0.1:
+    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+    dependencies:
+      defaults: 1.0.4
+    dev: true
+
+  /web-encoding/1.1.5:
+    resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==}
+    dependencies:
+      util: 0.12.5
+    optionalDependencies:
+      '@zxing/text-encoding': 0.9.0
+    dev: true
+
   /web-push/3.5.0:
     resolution: {integrity: sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==}
     engines: {node: '>= 6'}

From be7b71a2f56ecd0cef14a1ddec91c92f9a2aeaed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 16:15:03 +0900
Subject: [PATCH 06/99] refactor(#10336): remove hatches

---
 packages/frontend/.storybook/generate.tsx          |  2 +-
 .../src/components/MkAnalogClock.stories.impl.ts   | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
 create mode 100644 packages/frontend/src/components/MkAnalogClock.stories.impl.ts

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index cc39ef68e7..db2ff8f048 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -30,7 +30,7 @@ function toStories(component: string): string {
 			properties={[
 				<property
 					key={<identifier name="layout" />}
-					value={<literal value={`${dir}/`.startsWith('src/pages/') || base === 'MkAnalogClock.vue' ? 'fullscreen' : 'centered'} />}
+					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'} />}
 					kind="init"
 				/>,
 				...hasMsw
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
new file mode 100644
index 0000000000..420357561a
--- /dev/null
+++ b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
@@ -0,0 +1,14 @@
+export const Default = {
+	render(args, { argTypes }) {
+		return {
+			components: {
+				MkAnalogClock,
+			},
+			props: Object.keys(argTypes),
+			template: '<MkAnalogClock v-bind="$props" />',
+		};
+	},
+	parameters: {
+		layout: 'fullscreen',
+	},
+};

From 3907cb51d6f6a9d0731444ade0cea8c806c9c470 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 16:27:40 +0900
Subject: [PATCH 07/99] refactor(#10336): module semantics

---
 packages/frontend/.storybook/generate.tsx     | 22 +++++++++++--------
 .../components/MkAnalogClock.stories.impl.ts  |  1 +
 .../src/components/MkAnalogClock.stories.ts   |  4 ++--
 .../src/components/MkButton.stories.impl.ts   |  1 +
 .../src/components/MkButton.stories.ts        |  2 +-
 5 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index db2ff8f048..4e3705a041 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -74,15 +74,19 @@ function toStories(component: string): string {
 							/>,
 						]
 					: [],
-				<import-declaration
-					source={<literal value={`./${base}`} />}
-					specifiers={[
-						<import-default-specifier
-							local={identifier}
-							imported={identifier}
-						/>,
-					]}
-				/>,
+				...hasImplStories
+					? []
+					: [
+							<import-declaration
+								source={<literal value={`./${base}`} />}
+								specifiers={[
+									<import-default-specifier
+										local={identifier}
+										imported={identifier}
+									/>,
+								]}
+							/>,
+						],
 				<variable-declaration
 					kind="const"
 					declarations={[
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
index 420357561a..74a70f7edb 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
@@ -1,3 +1,4 @@
+import MkAnalogClock from './MkAnalogClock.vue';
 export const Default = {
 	render(args, { argTypes }) {
 		return {
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
index f81e997cfb..464a4bbf8e 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -1,9 +1,10 @@
 import { Meta, Story } from '@storybook/vue3';
-import MkAnalogClock from './MkAnalogClock.vue';
 const meta = {
 	title: 'components/MkAnalogClock',
 	component: MkAnalogClock,
 };
+export default meta;
+import MkAnalogClock from './MkAnalogClock.vue';
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -18,4 +19,3 @@ export const Default = {
 		layout: 'fullscreen',
 	},
 };
-export default meta;
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
index 5f73ca71bc..72ccdaab0b 100644
--- a/packages/frontend/src/components/MkButton.stories.impl.ts
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -1,3 +1,4 @@
+import MkButton from './MkButton.vue';
 export const Default = {
 	render(args, { argTypes }) {
 		return {
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index 57dacb8f18..fb56501b9c 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -1,10 +1,10 @@
 import { Meta, Story } from '@storybook/vue3';
-import MkButton from './MkButton.vue';
 const meta = {
 	title: 'components/MkButton',
 	component: MkButton,
 };
 export default meta;
+import MkButton from './MkButton.vue';
 export const Default = {
 	render(args, { argTypes }) {
 		return {

From ca7d2081a2987751393182878553c00b2f3a024c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 16:29:36 +0900
Subject: [PATCH 08/99] refactor(#10336): remove unused common preferences

---
 packages/frontend/.storybook/preview.ts | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 1e9bcca09f..4ee938803e 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -23,16 +23,6 @@ const preview = {
 	decorators: [
 		mswDecorator,
 	],
-	parameters: {
-		layout: 'centered',
-	},
-	argTypes: {
-		default: {
-			control: {
-				type: 'text',
-			},
-		},
-	},
 } satisfies Preview;
 
 export default preview;

From 2ec608fdba22aee3277bed4527a8bdd7babbb7b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 16:31:50 +0900
Subject: [PATCH 09/99] fix: typo

---
 packages/frontend/src/components/MkUrlPreview.vue      |  2 +-
 ...ubePlayer.stories.ts => MkYouTubePlayer.stories.ts} | 10 +++++-----
 .../{MkYoutubePlayer.vue => MkYouTubePlayer.vue}       |  0
 3 files changed, 6 insertions(+), 6 deletions(-)
 rename packages/frontend/src/components/{MkYoutubePlayer.stories.ts => MkYouTubePlayer.stories.ts} (57%)
 rename packages/frontend/src/components/{MkYoutubePlayer.vue => MkYouTubePlayer.vue} (100%)

diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index 094709e093..839fa96319 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -149,7 +149,7 @@ function adjustTweetHeight(message: any) {
 }
 
 const openPlayer = (): void => {
-	os.popup(defineAsyncComponent(() => import('@/components/MkYoutubePlayer.vue')), {
+	os.popup(defineAsyncComponent(() => import('@/components/MkYouTubePlayer.vue')), {
 		url: requestUrl.href,
 	});
 };
diff --git a/packages/frontend/src/components/MkYoutubePlayer.stories.ts b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
similarity index 57%
rename from packages/frontend/src/components/MkYoutubePlayer.stories.ts
rename to packages/frontend/src/components/MkYouTubePlayer.stories.ts
index 671c1303d1..5e20a83784 100644
--- a/packages/frontend/src/components/MkYoutubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
@@ -1,17 +1,17 @@
 import { Meta, Story } from '@storybook/vue3';
-import MkYoutubePlayer from './MkYoutubePlayer.vue';
+import MkYouTubePlayer from './MkYouTubePlayer.vue';
 const meta = {
-	title: 'components/MkYoutubePlayer',
-	component: MkYoutubePlayer,
+	title: 'components/MkYouTubePlayer',
+	component: MkYouTubePlayer,
 };
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				MkYoutubePlayer,
+				MkYouTubePlayer,
 			},
 			props: Object.keys(argTypes),
-			template: '<MkYoutubePlayer v-bind="$props" />',
+			template: '<MkYouTubePlayer v-bind="$props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkYoutubePlayer.vue b/packages/frontend/src/components/MkYouTubePlayer.vue
similarity index 100%
rename from packages/frontend/src/components/MkYoutubePlayer.vue
rename to packages/frontend/src/components/MkYouTubePlayer.vue

From 2eecb8e87657f03003998fb422dfe754a31d72cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 22:12:11 +0900
Subject: [PATCH 10/99] build(#10336): mock assets

---
 packages/frontend/.storybook/main.ts          |   2 +
 packages/frontend/.storybook/mocks.ts         |  16 +
 .../frontend/.storybook/preview-head.html     |   1 +
 packages/frontend/.storybook/preview.ts       |  10 +-
 packages/frontend/public/mockServiceWorker.js | 303 ++++++++++++++++++
 packages/frontend/vite.config.ts              |   7 +-
 6 files changed, 334 insertions(+), 5 deletions(-)
 create mode 100644 packages/frontend/.storybook/mocks.ts
 create mode 100644 packages/frontend/public/mockServiceWorker.js

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 9cd74de519..b63f1e46e0 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,3 +1,4 @@
+import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
 import { getConfig } from '../vite.config';
@@ -23,6 +24,7 @@ const config = {
 		const x = mergeConfig(config, {
 			...original,
 			build,
+			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
 		});
 		return x;
 	},
diff --git a/packages/frontend/.storybook/mocks.ts b/packages/frontend/.storybook/mocks.ts
new file mode 100644
index 0000000000..ab19604a6c
--- /dev/null
+++ b/packages/frontend/.storybook/mocks.ts
@@ -0,0 +1,16 @@
+import { type SharedOptions, rest } from 'msw';
+
+export const onUnhandledRequest = ((req, print) => {
+	if (req.url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emojis?\/|iframe.html$|node_modules\/|sb-|static-assets\/|vite\/)/.test(req.url.pathname)) {
+		return
+	}
+	print.warning()
+}) satisfies SharedOptions['onUnhandledRequest'];
+
+export const commonHandlers = [
+	rest.get('/twemoji/:codepoints.svg', async (req, res, ctx) => {
+		const { codepoints } = req.params;
+		const file = await import(`../node_modules/@discordapp/twemoji/dist/svg/${codepoints}.svg?raw`);
+		return res(ctx.set('Content-Type', 'image/svg+xml'), ctx.body(file.default));
+	}),
+];
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
index e551040105..d0ec5b452f 100644
--- a/packages/frontend/.storybook/preview-head.html
+++ b/packages/frontend/.storybook/preview-head.html
@@ -1,3 +1,4 @@
+<link rel="stylesheet" href="../node_modules/@tabler/icons-webfont/tabler-icons.min.css">
 <script>
   window.global = window;
 </script>
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 4ee938803e..5bcd527f03 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,10 +1,13 @@
 import { type Preview, setup } from '@storybook/vue3';
 import { initialize, mswDecorator } from 'msw-storybook-addon';
 import locale from './locale';
+import { commonHandlers, onUnhandledRequest } from './mocks';
 import theme from './theme';
 import '../src/style.scss';
 
-initialize();
+initialize({
+	onUnhandledRequest,
+});
 localStorage.setItem("locale", JSON.stringify(locale));
 Promise.all([
 	import('../src/components'),
@@ -23,6 +26,11 @@ const preview = {
 	decorators: [
 		mswDecorator,
 	],
+	parameters: {
+		msw: {
+			handlers: commonHandlers,
+		},
+	},
 } satisfies Preview;
 
 export default preview;
diff --git a/packages/frontend/public/mockServiceWorker.js b/packages/frontend/public/mockServiceWorker.js
new file mode 100644
index 0000000000..e915a1eb08
--- /dev/null
+++ b/packages/frontend/public/mockServiceWorker.js
@@ -0,0 +1,303 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker (1.1.0).
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ * - Please do NOT serve this file on production.
+ */
+
+const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70'
+const activeClientIds = new Set()
+
+self.addEventListener('install', function () {
+  self.skipWaiting()
+})
+
+self.addEventListener('activate', function (event) {
+  event.waitUntil(self.clients.claim())
+})
+
+self.addEventListener('message', async function (event) {
+  const clientId = event.source.id
+
+  if (!clientId || !self.clients) {
+    return
+  }
+
+  const client = await self.clients.get(clientId)
+
+  if (!client) {
+    return
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  switch (event.data) {
+    case 'KEEPALIVE_REQUEST': {
+      sendToClient(client, {
+        type: 'KEEPALIVE_RESPONSE',
+      })
+      break
+    }
+
+    case 'INTEGRITY_CHECK_REQUEST': {
+      sendToClient(client, {
+        type: 'INTEGRITY_CHECK_RESPONSE',
+        payload: INTEGRITY_CHECKSUM,
+      })
+      break
+    }
+
+    case 'MOCK_ACTIVATE': {
+      activeClientIds.add(clientId)
+
+      sendToClient(client, {
+        type: 'MOCKING_ENABLED',
+        payload: true,
+      })
+      break
+    }
+
+    case 'MOCK_DEACTIVATE': {
+      activeClientIds.delete(clientId)
+      break
+    }
+
+    case 'CLIENT_CLOSED': {
+      activeClientIds.delete(clientId)
+
+      const remainingClients = allClients.filter((client) => {
+        return client.id !== clientId
+      })
+
+      // Unregister itself when there are no more clients
+      if (remainingClients.length === 0) {
+        self.registration.unregister()
+      }
+
+      break
+    }
+  }
+})
+
+self.addEventListener('fetch', function (event) {
+  const { request } = event
+  const accept = request.headers.get('accept') || ''
+
+  // Bypass server-sent events.
+  if (accept.includes('text/event-stream')) {
+    return
+  }
+
+  // Bypass navigation requests.
+  if (request.mode === 'navigate') {
+    return
+  }
+
+  // Opening the DevTools triggers the "only-if-cached" request
+  // that cannot be handled by the worker. Bypass such requests.
+  if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+    return
+  }
+
+  // Bypass all requests when there are no active clients.
+  // Prevents the self-unregistered worked from handling requests
+  // after it's been deleted (still remains active until the next reload).
+  if (activeClientIds.size === 0) {
+    return
+  }
+
+  // Generate unique request ID.
+  const requestId = Math.random().toString(16).slice(2)
+
+  event.respondWith(
+    handleRequest(event, requestId).catch((error) => {
+      if (error.name === 'NetworkError') {
+        console.warn(
+          '[MSW] Successfully emulated a network error for the "%s %s" request.',
+          request.method,
+          request.url,
+        )
+        return
+      }
+
+      // At this point, any exception indicates an issue with the original request/response.
+      console.error(
+        `\
+[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`,
+        request.method,
+        request.url,
+        `${error.name}: ${error.message}`,
+      )
+    }),
+  )
+})
+
+async function handleRequest(event, requestId) {
+  const client = await resolveMainClient(event)
+  const response = await getResponse(event, client, requestId)
+
+  // Send back the response clone for the "response:*" life-cycle events.
+  // Ensure MSW is active and ready to handle the message, otherwise
+  // this message will pend indefinitely.
+  if (client && activeClientIds.has(client.id)) {
+    ;(async function () {
+      const clonedResponse = response.clone()
+      sendToClient(client, {
+        type: 'RESPONSE',
+        payload: {
+          requestId,
+          type: clonedResponse.type,
+          ok: clonedResponse.ok,
+          status: clonedResponse.status,
+          statusText: clonedResponse.statusText,
+          body:
+            clonedResponse.body === null ? null : await clonedResponse.text(),
+          headers: Object.fromEntries(clonedResponse.headers.entries()),
+          redirected: clonedResponse.redirected,
+        },
+      })
+    })()
+  }
+
+  return response
+}
+
+// Resolve the main client for the given event.
+// Client that issues a request doesn't necessarily equal the client
+// that registered the worker. It's with the latter the worker should
+// communicate with during the response resolving phase.
+async function resolveMainClient(event) {
+  const client = await self.clients.get(event.clientId)
+
+  if (client?.frameType === 'top-level') {
+    return client
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  return allClients
+    .filter((client) => {
+      // Get only those clients that are currently visible.
+      return client.visibilityState === 'visible'
+    })
+    .find((client) => {
+      // Find the client ID that's recorded in the
+      // set of clients that have registered the worker.
+      return activeClientIds.has(client.id)
+    })
+}
+
+async function getResponse(event, client, requestId) {
+  const { request } = event
+  const clonedRequest = request.clone()
+
+  function passthrough() {
+    // Clone the request because it might've been already used
+    // (i.e. its body has been read and sent to the client).
+    const headers = Object.fromEntries(clonedRequest.headers.entries())
+
+    // Remove MSW-specific request headers so the bypassed requests
+    // comply with the server's CORS preflight check.
+    // Operate with the headers as an object because request "Headers"
+    // are immutable.
+    delete headers['x-msw-bypass']
+
+    return fetch(clonedRequest, { headers })
+  }
+
+  // Bypass mocking when the client is not active.
+  if (!client) {
+    return passthrough()
+  }
+
+  // Bypass initial page load requests (i.e. static assets).
+  // The absence of the immediate/parent client in the map of the active clients
+  // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+  // and is not ready to handle requests.
+  if (!activeClientIds.has(client.id)) {
+    return passthrough()
+  }
+
+  // Bypass requests with the explicit bypass header.
+  // Such requests can be issued by "ctx.fetch()".
+  if (request.headers.get('x-msw-bypass') === 'true') {
+    return passthrough()
+  }
+
+  // Notify the client that a request has been intercepted.
+  const clientMessage = await sendToClient(client, {
+    type: 'REQUEST',
+    payload: {
+      id: requestId,
+      url: request.url,
+      method: request.method,
+      headers: Object.fromEntries(request.headers.entries()),
+      cache: request.cache,
+      mode: request.mode,
+      credentials: request.credentials,
+      destination: request.destination,
+      integrity: request.integrity,
+      redirect: request.redirect,
+      referrer: request.referrer,
+      referrerPolicy: request.referrerPolicy,
+      body: await request.text(),
+      bodyUsed: request.bodyUsed,
+      keepalive: request.keepalive,
+    },
+  })
+
+  switch (clientMessage.type) {
+    case 'MOCK_RESPONSE': {
+      return respondWithMock(clientMessage.data)
+    }
+
+    case 'MOCK_NOT_FOUND': {
+      return passthrough()
+    }
+
+    case 'NETWORK_ERROR': {
+      const { name, message } = clientMessage.data
+      const networkError = new Error(message)
+      networkError.name = name
+
+      // Rejecting a "respondWith" promise emulates a network error.
+      throw networkError
+    }
+  }
+
+  return passthrough()
+}
+
+function sendToClient(client, message) {
+  return new Promise((resolve, reject) => {
+    const channel = new MessageChannel()
+
+    channel.port1.onmessage = (event) => {
+      if (event.data && event.data.error) {
+        return reject(event.data.error)
+      }
+
+      resolve(event.data)
+    }
+
+    client.postMessage(message, [channel.port2])
+  })
+}
+
+function sleep(timeMs) {
+  return new Promise((resolve) => {
+    setTimeout(resolve, timeMs)
+  })
+}
+
+async function respondWithMock(response) {
+  await sleep(response.delay)
+  return new Response(response.body, response)
+}
diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts
index ea0b4d85df..846473ff67 100644
--- a/packages/frontend/vite.config.ts
+++ b/packages/frontend/vite.config.ts
@@ -1,7 +1,6 @@
 import path from 'path';
 import pluginVue from '@vitejs/plugin-vue';
-import { defineConfig } from 'vite';
-import { configDefaults as vitestConfigDefaults } from 'vitest/config';
+import { type UserConfig, defineConfig } from 'vite';
 
 import locales from '../../locales';
 import meta from '../../package.json';
@@ -38,7 +37,7 @@ function toBase62(n: number): string {
 	return result;
 }
 
-export function getConfig() {
+export function getConfig(): UserConfig {
 	return {
 		base: '/vite/',
 
@@ -62,7 +61,7 @@ export function getConfig() {
 
 		css: {
 			modules: {
-				generateScopedName: (name, filename, css) => {
+				generateScopedName(name, filename, _css): string {
 					const id = (path.relative(__dirname, filename.split('?')[0]) + '-' + name).replace(/[\\\/\.\?&=]/g, '-').replace(/(src-|vue-)/g, '');
 					if (process.env.NODE_ENV === 'production') {
 						return 'x' + toBase62(hash(id)).substring(0, 4);

From bdbbb92ff69f392c18825cf1e917efbe40f58c3e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 20 Mar 2023 23:07:13 +0900
Subject: [PATCH 11/99] build(#10336): impl `SatisfiesExpression`

---
 packages/frontend/.storybook/generate.tsx     | 221 ++++++++++--------
 .../src/components/MkAbuseReport.stories.ts   |   6 +-
 .../components/MkAbuseReportWindow.stories.ts |   6 +-
 .../src/components/MkAchievements.stories.ts  |   6 +-
 .../src/components/MkAnalogClock.stories.ts   |   4 +-
 .../frontend/src/components/MkAsUi.stories.ts |   6 +-
 .../src/components/MkAutocomplete.stories.ts  |   6 +-
 .../src/components/MkAvatars.stories.ts       |   6 +-
 .../src/components/MkButton.stories.impl.ts   |   3 +-
 .../src/components/MkButton.stories.ts        |   7 +-
 .../src/components/MkCaptcha.stories.ts       |   6 +-
 .../MkChannelFollowButton.stories.ts          |   6 +-
 .../components/MkChannelPreview.stories.ts    |   6 +-
 .../src/components/MkChart.stories.ts         |   6 +-
 .../src/components/MkChartLegend.stories.ts   |   6 +-
 .../src/components/MkChartTooltip.stories.ts  |   6 +-
 .../src/components/MkCheckbox.stories.ts      |   6 +-
 .../src/components/MkClickerGame.stories.ts   |   6 +-
 .../src/components/MkClipPreview.stories.ts   |   6 +-
 .../src/components/MkCode.core.stories.ts     |   6 +-
 .../frontend/src/components/MkCode.stories.ts |   6 +-
 .../src/components/MkContainer.stories.ts     |   6 +-
 .../src/components/MkContextMenu.stories.ts   |   6 +-
 .../src/components/MkCropperDialog.stories.ts |   6 +-
 .../src/components/MkCwButton.stories.ts      |   6 +-
 .../components/MkDateSeparatedList.stories.ts |   6 +-
 .../src/components/MkDialog.stories.ts        |   6 +-
 .../src/components/MkDigitalClock.stories.ts  |   6 +-
 .../src/components/MkDonation.stories.ts      |   6 +-
 .../src/components/MkDrive.file.stories.ts    |   6 +-
 .../src/components/MkDrive.folder.stories.ts  |   6 +-
 .../components/MkDrive.navFolder.stories.ts   |   6 +-
 .../src/components/MkDrive.stories.ts         |   6 +-
 .../MkDriveFileThumbnail.stories.ts           |   6 +-
 .../components/MkDriveSelectDialog.stories.ts |   6 +-
 .../src/components/MkDriveWindow.stories.ts   |   6 +-
 .../MkEmojiPicker.section.stories.ts          |   6 +-
 .../src/components/MkEmojiPicker.stories.ts   |   6 +-
 .../components/MkEmojiPickerDialog.stories.ts |   6 +-
 .../components/MkEmojiPickerWindow.stories.ts |   6 +-
 .../components/MkFeaturedPhotos.stories.ts    |   6 +-
 .../MkFileCaptionEditWindow.stories.ts        |   6 +-
 .../components/MkFileListForAdmin.stories.ts  |   6 +-
 .../src/components/MkFlashPreview.stories.ts  |   6 +-
 .../components/MkFoldableSection.stories.ts   |   6 +-
 .../src/components/MkFolder.stories.ts        |   6 +-
 .../src/components/MkFollowButton.stories.ts  |   6 +-
 .../components/MkForgotPassword.stories.ts    |   6 +-
 .../src/components/MkFormDialog.stories.ts    |   6 +-
 .../MkGalleryPostPreview.stories.ts           |   6 +-
 .../src/components/MkGoogle.stories.ts        |   6 +-
 .../src/components/MkHeatmap.stories.ts       |   6 +-
 .../src/components/MkImageViewer.stories.ts   |   6 +-
 .../components/MkImgWithBlurhash.stories.ts   |   6 +-
 .../frontend/src/components/MkInfo.stories.ts |   6 +-
 .../src/components/MkInput.stories.ts         |   6 +-
 .../components/MkInstanceCardMini.stories.ts  |   6 +-
 .../src/components/MkInstanceStats.stories.ts |   6 +-
 .../components/MkInstanceTicker.stories.ts    |   6 +-
 .../src/components/MkKeyValue.stories.ts      |   6 +-
 .../src/components/MkLaunchPad.stories.ts     |   6 +-
 .../frontend/src/components/MkLink.stories.ts |   6 +-
 .../src/components/MkMarquee.stories.ts       |   6 +-
 .../src/components/MkMediaBanner.stories.ts   |   6 +-
 .../src/components/MkMediaImage.stories.ts    |   6 +-
 .../src/components/MkMediaList.stories.ts     |   6 +-
 .../src/components/MkMediaVideo.stories.ts    |   6 +-
 .../src/components/MkMention.stories.ts       |   6 +-
 .../src/components/MkMenu.child.stories.ts    |   6 +-
 .../frontend/src/components/MkMenu.stories.ts |   6 +-
 .../src/components/MkMiniChart.stories.ts     |   6 +-
 .../src/components/MkModal.stories.ts         |   6 +-
 .../components/MkModalPageWindow.stories.ts   |   6 +-
 .../src/components/MkModalWindow.stories.ts   |   6 +-
 .../frontend/src/components/MkNote.stories.ts |   6 +-
 .../src/components/MkNoteDetailed.stories.ts  |   6 +-
 .../src/components/MkNoteHeader.stories.ts    |   6 +-
 .../src/components/MkNotePreview.stories.ts   |   6 +-
 .../src/components/MkNoteSimple.stories.ts    |   6 +-
 .../src/components/MkNoteSub.stories.ts       |   6 +-
 .../src/components/MkNotes.stories.ts         |   6 +-
 .../src/components/MkNotification.stories.ts  |   6 +-
 .../MkNotificationSettingWindow.stories.ts    |   6 +-
 .../src/components/MkNotifications.stories.ts |   6 +-
 .../src/components/MkNumber.stories.ts        |   6 +-
 .../src/components/MkNumberDiff.stories.ts    |   6 +-
 .../src/components/MkObjectView.stories.ts    |   6 +-
 .../components/MkObjectView.value.stories.ts  |   6 +-
 .../frontend/src/components/MkOmit.stories.ts |   6 +-
 .../src/components/MkPagePreview.stories.ts   |   6 +-
 .../src/components/MkPageWindow.stories.ts    |   6 +-
 .../src/components/MkPagination.stories.ts    |   6 +-
 .../src/components/MkPlusOneEffect.stories.ts |   6 +-
 .../frontend/src/components/MkPoll.stories.ts |   6 +-
 .../src/components/MkPollEditor.stories.ts    |   6 +-
 .../src/components/MkPopupMenu.stories.ts     |   6 +-
 .../src/components/MkPostForm.stories.ts      |   6 +-
 .../components/MkPostFormAttaches.stories.ts  |   6 +-
 .../components/MkPostFormDialog.stories.ts    |   6 +-
 .../MkPushNotificationAllowButton.stories.ts  |   6 +-
 .../src/components/MkRadio.stories.ts         |   6 +-
 .../src/components/MkRadios.stories.ts        |   6 +-
 .../src/components/MkRange.stories.ts         |   6 +-
 .../MkReactedUsersDialog.stories.ts           |   6 +-
 .../components/MkReactionEffect.stories.ts    |   6 +-
 .../src/components/MkReactionIcon.stories.ts  |   6 +-
 .../components/MkReactionTooltip.stories.ts   |   6 +-
 .../MkReactionsViewer.details.stories.ts      |   6 +-
 .../MkReactionsViewer.reaction.stories.ts     |   6 +-
 .../components/MkReactionsViewer.stories.ts   |   6 +-
 .../src/components/MkRemoteCaution.stories.ts |   6 +-
 .../components/MkRetentionHeatmap.stories.ts  |   6 +-
 .../src/components/MkRippleEffect.stories.ts  |   6 +-
 .../src/components/MkRolePreview.stories.ts   |   6 +-
 .../src/components/MkSample.stories.ts        |   6 +-
 .../src/components/MkSelect.stories.ts        |   6 +-
 .../src/components/MkSignin.stories.ts        |   6 +-
 .../src/components/MkSigninDialog.stories.ts  |   6 +-
 .../src/components/MkSignup.stories.ts        |   6 +-
 .../src/components/MkSignupDialog.stories.ts  |   6 +-
 .../src/components/MkSparkle.stories.ts       |   6 +-
 .../components/MkSubNoteContent.stories.ts    |   6 +-
 .../src/components/MkSuperMenu.stories.ts     |   6 +-
 .../src/components/MkSwitch.stories.ts        |   6 +-
 .../frontend/src/components/MkTab.stories.ts  |   6 +-
 .../src/components/MkTagCloud.stories.ts      |   6 +-
 .../src/components/MkTextarea.stories.ts      |   6 +-
 .../src/components/MkTimeline.stories.ts      |   6 +-
 .../src/components/MkToast.stories.ts         |   6 +-
 .../MkTokenGenerateWindow.stories.ts          |   6 +-
 .../src/components/MkTooltip.stories.ts       |   6 +-
 .../src/components/MkUpdated.stories.ts       |   6 +-
 .../src/components/MkUrlPreview.stories.ts    |   6 +-
 .../components/MkUrlPreviewPopup.stories.ts   |   6 +-
 .../src/components/MkUserCardMini.stories.ts  |   6 +-
 .../src/components/MkUserInfo.stories.ts      |   6 +-
 .../src/components/MkUserList.stories.ts      |   6 +-
 .../MkUserOnlineIndicator.stories.ts          |   6 +-
 .../src/components/MkUserPopup.stories.ts     |   6 +-
 .../components/MkUserSelectDialog.stories.ts  |   6 +-
 .../src/components/MkUsersTooltip.stories.ts  |   6 +-
 .../components/MkVisibilityPicker.stories.ts  |   6 +-
 .../src/components/MkWaitingDialog.stories.ts |   6 +-
 .../src/components/MkWidgets.stories.ts       |   6 +-
 .../src/components/MkWindow.stories.ts        |   6 +-
 .../src/components/MkYouTubePlayer.stories.ts |   6 +-
 .../src/components/form/link.stories.ts       |   6 +-
 .../src/components/form/section.stories.ts    |   6 +-
 .../src/components/form/slot.stories.ts       |   6 +-
 .../src/components/form/split.stories.ts      |   6 +-
 .../src/components/form/suspense.stories.ts   |   6 +-
 .../src/components/global/MkA.stories.ts      |   6 +-
 .../src/components/global/MkAcct.stories.ts   |   6 +-
 .../src/components/global/MkAd.stories.ts     |   6 +-
 .../src/components/global/MkAvatar.stories.ts |   6 +-
 .../global/MkCustomEmoji.stories.ts           |   6 +-
 .../components/global/MkEllipsis.stories.ts   |   6 +-
 .../src/components/global/MkEmoji.stories.ts  |   6 +-
 .../src/components/global/MkError.stories.ts  |   6 +-
 .../components/global/MkLoading.stories.ts    |   6 +-
 .../MkMisskeyFlavoredMarkdown.stories.ts      |   6 +-
 .../components/global/MkPageHeader.stories.ts |   6 +-
 .../global/MkPageHeader.tabs.stories.ts       |   6 +-
 .../src/components/global/MkSpacer.stories.ts |   6 +-
 .../global/MkStickyContainer.stories.ts       |   6 +-
 .../src/components/global/MkTime.stories.ts   |   6 +-
 .../src/components/global/MkUrl.stories.ts    |   6 +-
 .../components/global/MkUserName.stories.ts   |   6 +-
 .../components/global/RouterView.stories.ts   |   6 +-
 .../src/components/page/page.block.stories.ts |   6 +-
 .../components/page/page.button.stories.ts    |   6 +-
 .../components/page/page.canvas.stories.ts    |   6 +-
 .../components/page/page.counter.stories.ts   |   6 +-
 .../src/components/page/page.if.stories.ts    |   6 +-
 .../src/components/page/page.image.stories.ts |   6 +-
 .../src/components/page/page.note.stories.ts  |   6 +-
 .../page/page.number-input.stories.ts         |   6 +-
 .../src/components/page/page.post.stories.ts  |   6 +-
 .../page/page.radio-button.stories.ts         |   6 +-
 .../components/page/page.section.stories.ts   |   6 +-
 .../src/components/page/page.stories.ts       |   6 +-
 .../components/page/page.switch.stories.ts    |   6 +-
 .../page/page.text-input.stories.ts           |   6 +-
 .../src/components/page/page.text.stories.ts  |   6 +-
 .../page/page.textarea-input.stories.ts       |   6 +-
 .../components/page/page.textarea.stories.ts  |   6 +-
 .../frontend/src/pages/_empty_.stories.ts     |   6 +-
 .../frontend/src/pages/_error_.stories.ts     |   6 +-
 .../frontend/src/pages/_loading_.stories.ts   |   6 +-
 .../src/pages/about-misskey.stories.ts        |   6 +-
 .../src/pages/about.emojis.stories.ts         |   6 +-
 .../src/pages/about.federation.stories.ts     |   6 +-
 packages/frontend/src/pages/about.stories.ts  |   6 +-
 .../src/pages/achievements.stories.ts         |   6 +-
 .../frontend/src/pages/admin-file.stories.ts  |   6 +-
 .../pages/admin/RolesEditorFormula.stories.ts |   6 +-
 .../src/pages/admin/_header_.stories.ts       |   6 +-
 .../src/pages/admin/abuses.stories.ts         |   6 +-
 .../frontend/src/pages/admin/ads.stories.ts   |   6 +-
 .../src/pages/admin/announcements.stories.ts  |   6 +-
 .../src/pages/admin/bot-protection.stories.ts |   6 +-
 .../src/pages/admin/database.stories.ts       |   6 +-
 .../src/pages/admin/email-settings.stories.ts |   6 +-
 .../src/pages/admin/federation.stories.ts     |   6 +-
 .../frontend/src/pages/admin/files.stories.ts |   6 +-
 .../frontend/src/pages/admin/index.stories.ts |   6 +-
 .../src/pages/admin/instance-block.stories.ts |   6 +-
 .../src/pages/admin/moderation.stories.ts     |   6 +-
 .../src/pages/admin/object-storage.stories.ts |   6 +-
 .../src/pages/admin/other-settings.stories.ts |   6 +-
 .../admin/overview.active-users.stories.ts    |   6 +-
 .../admin/overview.ap-requests.stories.ts     |   6 +-
 .../admin/overview.federation.stories.ts      |   6 +-
 .../pages/admin/overview.heatmap.stories.ts   |   6 +-
 .../pages/admin/overview.instances.stories.ts |   6 +-
 .../admin/overview.moderators.stories.ts      |   6 +-
 .../src/pages/admin/overview.pie.stories.ts   |   6 +-
 .../admin/overview.queue.chart.stories.ts     |   6 +-
 .../src/pages/admin/overview.queue.stories.ts |   6 +-
 .../pages/admin/overview.retention.stories.ts |   6 +-
 .../src/pages/admin/overview.stats.stories.ts |   6 +-
 .../src/pages/admin/overview.stories.ts       |   6 +-
 .../src/pages/admin/overview.users.stories.ts |   6 +-
 .../src/pages/admin/proxy-account.stories.ts  |   6 +-
 .../pages/admin/queue.chart.chart.stories.ts  |   6 +-
 .../src/pages/admin/queue.chart.stories.ts    |   6 +-
 .../frontend/src/pages/admin/queue.stories.ts |   6 +-
 .../src/pages/admin/relays.stories.ts         |   6 +-
 .../src/pages/admin/roles.edit.stories.ts     |   6 +-
 .../src/pages/admin/roles.editor.stories.ts   |   6 +-
 .../src/pages/admin/roles.role.stories.ts     |   6 +-
 .../frontend/src/pages/admin/roles.stories.ts |   6 +-
 .../src/pages/admin/security.stories.ts       |   6 +-
 .../src/pages/admin/settings.stories.ts       |   6 +-
 .../frontend/src/pages/admin/users.stories.ts |   6 +-
 packages/frontend/src/pages/ads.stories.ts    |   6 +-
 .../src/pages/announcements.stories.ts        |   6 +-
 .../src/pages/antenna-timeline.stories.ts     |   6 +-
 .../frontend/src/pages/api-console.stories.ts |   6 +-
 .../frontend/src/pages/auth.form.stories.ts   |   6 +-
 packages/frontend/src/pages/auth.stories.ts   |   6 +-
 .../src/pages/channel-editor.stories.ts       |   6 +-
 .../frontend/src/pages/channel.stories.ts     |   6 +-
 .../frontend/src/pages/channels.stories.ts    |   6 +-
 .../frontend/src/pages/clicker.stories.ts     |   6 +-
 packages/frontend/src/pages/clip.stories.ts   |   6 +-
 .../pages/custom-emojis-manager.stories.ts    |   6 +-
 packages/frontend/src/pages/drive.stories.ts  |   6 +-
 .../src/pages/emoji-edit-dialog.stories.ts    |   6 +-
 .../src/pages/emojis.emoji.stories.ts         |   6 +-
 .../src/pages/explore.featured.stories.ts     |   6 +-
 .../src/pages/explore.roles.stories.ts        |   6 +-
 .../frontend/src/pages/explore.stories.ts     |   6 +-
 .../src/pages/explore.users.stories.ts        |   6 +-
 .../frontend/src/pages/favorites.stories.ts   |   6 +-
 .../src/pages/flash/flash-edit.stories.ts     |   6 +-
 .../src/pages/flash/flash-index.stories.ts    |   6 +-
 .../frontend/src/pages/flash/flash.stories.ts |   6 +-
 .../src/pages/follow-requests.stories.ts      |   6 +-
 packages/frontend/src/pages/follow.stories.ts |   6 +-
 .../src/pages/gallery/edit.stories.ts         |   6 +-
 .../src/pages/gallery/index.stories.ts        |   6 +-
 .../src/pages/gallery/post.stories.ts         |   6 +-
 .../src/pages/instance-info.stories.ts        |   6 +-
 packages/frontend/src/pages/miauth.stories.ts |   6 +-
 .../src/pages/my-antennas/create.stories.ts   |   6 +-
 .../src/pages/my-antennas/edit.stories.ts     |   6 +-
 .../src/pages/my-antennas/editor.stories.ts   |   6 +-
 .../src/pages/my-antennas/index.stories.ts    |   6 +-
 .../src/pages/my-clips/index.stories.ts       |   6 +-
 .../src/pages/my-lists/index.stories.ts       |   6 +-
 .../src/pages/my-lists/list.stories.ts        |   6 +-
 .../frontend/src/pages/not-found.stories.ts   |   6 +-
 packages/frontend/src/pages/note.stories.ts   |   6 +-
 .../src/pages/notifications.stories.ts        |   6 +-
 .../els/page-editor.el.image.stories.ts       |   6 +-
 .../els/page-editor.el.note.stories.ts        |   6 +-
 .../els/page-editor.el.section.stories.ts     |   6 +-
 .../els/page-editor.el.text.stories.ts        |   6 +-
 .../page-editor/page-editor.blocks.stories.ts |   6 +-
 .../page-editor.container.stories.ts          |   6 +-
 .../pages/page-editor/page-editor.stories.ts  |   6 +-
 packages/frontend/src/pages/page.stories.ts   |   6 +-
 packages/frontend/src/pages/pages.stories.ts  |   6 +-
 .../frontend/src/pages/preview.stories.ts     |   6 +-
 .../src/pages/registry.keys.stories.ts        |   6 +-
 .../frontend/src/pages/registry.stories.ts    |   6 +-
 .../src/pages/registry.value.stories.ts       |   6 +-
 .../src/pages/reset-password.stories.ts       |   6 +-
 packages/frontend/src/pages/role.stories.ts   |   6 +-
 .../frontend/src/pages/scratchpad.stories.ts  |   6 +-
 packages/frontend/src/pages/search.stories.ts |   6 +-
 .../pages/settings/2fa.qrdialog.stories.ts    |   6 +-
 .../src/pages/settings/2fa.stories.ts         |   6 +-
 .../pages/settings/account-info.stories.ts    |   6 +-
 .../src/pages/settings/accounts.stories.ts    |   6 +-
 .../src/pages/settings/api.stories.ts         |   6 +-
 .../src/pages/settings/apps.stories.ts        |   6 +-
 .../src/pages/settings/custom-css.stories.ts  |   6 +-
 .../src/pages/settings/deck.stories.ts        |   6 +-
 .../pages/settings/delete-account.stories.ts  |   6 +-
 .../src/pages/settings/drive.stories.ts       |   6 +-
 .../src/pages/settings/email.stories.ts       |   6 +-
 .../src/pages/settings/general.stories.ts     |   6 +-
 .../pages/settings/import-export.stories.ts   |   6 +-
 .../src/pages/settings/index.stories.ts       |   6 +-
 .../pages/settings/instance-mute.stories.ts   |   6 +-
 .../src/pages/settings/mute-block.stories.ts  |   6 +-
 .../src/pages/settings/navbar.stories.ts      |   6 +-
 .../pages/settings/notifications.stories.ts   |   6 +-
 .../src/pages/settings/other.stories.ts       |   6 +-
 .../pages/settings/plugin.install.stories.ts  |   6 +-
 .../src/pages/settings/plugin.stories.ts      |   6 +-
 .../settings/preferences-backups.stories.ts   |   6 +-
 .../src/pages/settings/privacy.stories.ts     |   6 +-
 .../src/pages/settings/profile.stories.ts     |   6 +-
 .../src/pages/settings/reaction.stories.ts    |   6 +-
 .../src/pages/settings/roles.stories.ts       |   6 +-
 .../src/pages/settings/security.stories.ts    |   6 +-
 .../pages/settings/sounds.sound.stories.ts    |   6 +-
 .../src/pages/settings/sounds.stories.ts      |   6 +-
 .../settings/statusbar.statusbar.stories.ts   |   6 +-
 .../src/pages/settings/statusbar.stories.ts   |   6 +-
 .../pages/settings/theme.install.stories.ts   |   6 +-
 .../pages/settings/theme.manage.stories.ts    |   6 +-
 .../src/pages/settings/theme.stories.ts       |   6 +-
 .../pages/settings/webhook.edit.stories.ts    |   6 +-
 .../src/pages/settings/webhook.new.stories.ts |   6 +-
 .../src/pages/settings/webhook.stories.ts     |   6 +-
 .../src/pages/settings/word-mute.stories.ts   |   6 +-
 packages/frontend/src/pages/share.stories.ts  |   6 +-
 .../src/pages/signup-complete.stories.ts      |   6 +-
 packages/frontend/src/pages/tag.stories.ts    |   6 +-
 .../src/pages/theme-editor.stories.ts         |   6 +-
 .../frontend/src/pages/timeline.stories.ts    |   6 +-
 .../src/pages/timeline.tutorial.stories.ts    |   6 +-
 .../frontend/src/pages/user-info.stories.ts   |   6 +-
 .../src/pages/user-list-timeline.stories.ts   |   6 +-
 .../frontend/src/pages/user-tag.stories.ts    |   6 +-
 .../src/pages/user/achievements.stories.ts    |   6 +-
 .../pages/user/activity.following.stories.ts  |   6 +-
 .../pages/user/activity.heatmap.stories.ts    |   6 +-
 .../src/pages/user/activity.notes.stories.ts  |   6 +-
 .../src/pages/user/activity.pv.stories.ts     |   6 +-
 .../src/pages/user/activity.stories.ts        |   6 +-
 .../frontend/src/pages/user/clips.stories.ts  |   6 +-
 .../src/pages/user/follow-list.stories.ts     |   6 +-
 .../src/pages/user/followers.stories.ts       |   6 +-
 .../src/pages/user/following.stories.ts       |   6 +-
 .../src/pages/user/gallery.stories.ts         |   6 +-
 .../frontend/src/pages/user/home.stories.ts   |   6 +-
 .../src/pages/user/index.activity.stories.ts  |   6 +-
 .../src/pages/user/index.photos.stories.ts    |   6 +-
 .../frontend/src/pages/user/index.stories.ts  |   6 +-
 .../src/pages/user/index.timeline.stories.ts  |   6 +-
 .../frontend/src/pages/user/pages.stories.ts  |   6 +-
 .../src/pages/user/reactions.stories.ts       |   6 +-
 .../src/pages/welcome.entrance.a.stories.ts   |   6 +-
 .../src/pages/welcome.entrance.b.stories.ts   |   6 +-
 .../src/pages/welcome.entrance.c.stories.ts   |   6 +-
 .../src/pages/welcome.setup.stories.ts        |   6 +-
 .../frontend/src/pages/welcome.stories.ts     |   6 +-
 .../src/pages/welcome.timeline.stories.ts     |   6 +-
 .../src/ui/_common_/common.stories.ts         |   6 +-
 .../ui/_common_/navbar-for-mobile.stories.ts  |   6 +-
 .../src/ui/_common_/navbar.stories.ts         |   6 +-
 .../src/ui/_common_/notification.stories.ts   |   6 +-
 .../_common_/statusbar-federation.stories.ts  |   6 +-
 .../src/ui/_common_/statusbar-rss.stories.ts  |   6 +-
 .../_common_/statusbar-user-list.stories.ts   |   6 +-
 .../src/ui/_common_/statusbars.stories.ts     |   6 +-
 .../ui/_common_/stream-indicator.stories.ts   |   6 +-
 .../src/ui/_common_/upload.stories.ts         |   6 +-
 .../frontend/src/ui/classic.header.stories.ts |   6 +-
 .../src/ui/classic.sidebar.stories.ts         |   6 +-
 packages/frontend/src/ui/classic.stories.ts   |   6 +-
 packages/frontend/src/ui/deck.stories.ts      |   6 +-
 .../src/ui/deck/antenna-column.stories.ts     |   6 +-
 .../src/ui/deck/channel-column.stories.ts     |   6 +-
 .../src/ui/deck/column-core.stories.ts        |   6 +-
 .../frontend/src/ui/deck/column.stories.ts    |   6 +-
 .../src/ui/deck/direct-column.stories.ts      |   6 +-
 .../src/ui/deck/list-column.stories.ts        |   6 +-
 .../src/ui/deck/main-column.stories.ts        |   6 +-
 .../src/ui/deck/mentions-column.stories.ts    |   6 +-
 .../ui/deck/notifications-column.stories.ts   |   6 +-
 .../frontend/src/ui/deck/tl-column.stories.ts |   6 +-
 .../src/ui/deck/widgets-column.stories.ts     |   6 +-
 packages/frontend/src/ui/universal.stories.ts |   6 +-
 .../src/ui/universal.widgets.stories.ts       |   6 +-
 packages/frontend/src/ui/visitor.stories.ts   |   6 +-
 packages/frontend/src/ui/visitor/a.stories.ts |   6 +-
 packages/frontend/src/ui/visitor/b.stories.ts |   6 +-
 .../frontend/src/ui/visitor/header.stories.ts |   6 +-
 .../frontend/src/ui/visitor/kanban.stories.ts |   6 +-
 packages/frontend/src/ui/zen.stories.ts       |   6 +-
 .../WidgetActivity.calendar.stories.ts        |   6 +-
 .../widgets/WidgetActivity.chart.stories.ts   |   6 +-
 .../src/widgets/WidgetActivity.stories.ts     |   6 +-
 .../src/widgets/WidgetAichan.stories.ts       |   6 +-
 .../src/widgets/WidgetAiscript.stories.ts     |   6 +-
 .../src/widgets/WidgetAiscriptApp.stories.ts  |   6 +-
 .../src/widgets/WidgetButton.stories.ts       |   6 +-
 .../src/widgets/WidgetCalendar.stories.ts     |   6 +-
 .../src/widgets/WidgetClicker.stories.ts      |   6 +-
 .../src/widgets/WidgetClock.stories.ts        |   6 +-
 .../src/widgets/WidgetDigitalClock.stories.ts |   6 +-
 .../src/widgets/WidgetFederation.stories.ts   |   6 +-
 .../widgets/WidgetInstanceCloud.stories.ts    |   6 +-
 .../src/widgets/WidgetInstanceInfo.stories.ts |   6 +-
 .../src/widgets/WidgetJobQueue.stories.ts     |   6 +-
 .../src/widgets/WidgetMemo.stories.ts         |   6 +-
 .../widgets/WidgetNotifications.stories.ts    |   6 +-
 .../src/widgets/WidgetOnlineUsers.stories.ts  |   6 +-
 .../src/widgets/WidgetPhotos.stories.ts       |   6 +-
 .../src/widgets/WidgetPostForm.stories.ts     |   6 +-
 .../src/widgets/WidgetProfile.stories.ts      |   6 +-
 .../frontend/src/widgets/WidgetRss.stories.ts |   6 +-
 .../src/widgets/WidgetRssTicker.stories.ts    |   6 +-
 .../src/widgets/WidgetSlideshow.stories.ts    |   6 +-
 .../src/widgets/WidgetTimeline.stories.ts     |   6 +-
 .../src/widgets/WidgetTrends.stories.ts       |   6 +-
 .../src/widgets/WidgetUnixClock.stories.ts    |   6 +-
 .../src/widgets/WidgetUserList.stories.ts     |   6 +-
 .../widgets/server-metric/cpu-mem.stories.ts  |   6 +-
 .../src/widgets/server-metric/cpu.stories.ts  |   6 +-
 .../src/widgets/server-metric/disk.stories.ts |   6 +-
 .../widgets/server-metric/index.stories.ts    |   6 +-
 .../src/widgets/server-metric/mem.stories.ts  |   6 +-
 .../src/widgets/server-metric/net.stories.ts  |   6 +-
 .../src/widgets/server-metric/pie.stories.ts  |   6 +-
 431 files changed, 1414 insertions(+), 1383 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 4e3705a041..327ed4bc79 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -2,11 +2,26 @@ import { existsSync, readFileSync } from 'node:fs';
 import { writeFile } from 'node:fs/promises';
 import { basename, dirname } from 'node:path/posix';
 import { promisify } from 'node:util';
-import { generate } from 'astring';
+import { GENERATOR, type State, generate } from 'astring';
 import type * as estree from 'estree';
 import * as glob from 'glob';
 import { format } from 'prettier';
 
+interface SatisfiesExpression extends estree.BaseExpression {
+	type: 'SatisfiesExpression';
+	expression: estree.Expression;
+	reference: estree.Identifier;
+}
+
+const generator = {
+	...GENERATOR,
+	SatisfiesExpression(node: SatisfiesExpression, state: State) {
+		this[node.expression.type](node.expression, state);
+		state.write(' satisfies ');
+		this[node.reference.type](node.reference, state);
+	},
+}
+
 function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>): T {
 	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
 	return Object.assign(props, { type }) as T;
@@ -56,10 +71,14 @@ function toStories(component: string): string {
 							local={<identifier name="Meta" />}
 							imported={<identifier name="Meta" />}
 						/>,
-						<import-specifier
-							local={<identifier name="Story" />}
-							imported={<identifier name="Story" />}
-						/>,
+						...hasImplStories
+							? []
+							: [
+									<import-specifier
+										local={<identifier name="StoryObj" />}
+										imported={<identifier name="StoryObj" />}
+									/>,
+								],
 					]}
 				/>,
 				...hasMsw
@@ -93,19 +112,24 @@ function toStories(component: string): string {
 						<variable-declarator
 							id={<identifier name="meta" />}
 							init={
-								<object-expression
-									properties={[
-										<property
-											key={<identifier name="title" />}
-											value={literal}
-											kind="init"
-										/>,
-										<property
-											key={<identifier name="component" />}
-											value={identifier}
-											kind="init"
-										/>,
-									]}
+								<satisfies-expression
+									expression={
+										<object-expression
+											properties={[
+												<property
+													key={<identifier name="title" />}
+													value={literal}
+													kind="init"
+												/>,
+												<property
+													key={<identifier name="component" />}
+													value={identifier}
+													kind="init"
+												/>,
+											]}
+										/>
+									}
+									reference={<identifier name={`Meta<typeof ${identifier.name}>`} />}
 								/>
 							}
 						/>,
@@ -123,89 +147,94 @@ function toStories(component: string): string {
 											<variable-declarator
 												id={<identifier name="Default" />}
 												init={
-													<object-expression
-														properties={[
-															<property
-																key={<identifier name="render" />}
-																value={
-																	<function-expression
-																		id={<identifier name="render" />}
-																		params={[
-																			<identifier name="args" />,
-																			<object-pattern
-																				properties={[
-																					<property
-																						key={<identifier name="argTypes" />}
-																						value={<identifier name="argTypes" />}
-																						kind="init"
-																						shorthand
+													<satisfies-expression
+														expression={
+															<object-expression
+																properties={[
+																	<property
+																		key={<identifier name="render" />}
+																		value={
+																			<function-expression
+																				id={<identifier name="render" />}
+																				params={[
+																					<identifier name="args" />,
+																					<object-pattern
+																						properties={[
+																							<property
+																								key={<identifier name="argTypes" />}
+																								value={<identifier name="argTypes" />}
+																								kind="init"
+																								shorthand
+																							/>,
+																						]}
 																					/>,
 																				]}
-																			/>,
-																		]}
-																		body={
-																			<block-statement
-																				body={[
-																					<return-statement
-																						argument={
-																							<object-expression
-																								properties={[
-																									<property
-																										key={<identifier name="components" />}
-																										value={
-																											<object-expression
-																												properties={[
-																													<property
-																														key={identifier}
-																														value={identifier}
-																														kind="init"
-																														shorthand
-																													/>,
-																												]}
-																											/>
-																										}
-																										kind="init"
-																									/>,
-																									<property
-																										key={<identifier name="props" />}
-																										value={
-																											<call-expression
-																												callee={
-																													<member-expression
-																														object={<identifier name="Object" />}
-																														property={<identifier name="keys" />}
+																				body={
+																					<block-statement
+																						body={[
+																							<return-statement
+																								argument={
+																									<object-expression
+																										properties={[
+																											<property
+																												key={<identifier name="components" />}
+																												value={
+																													<object-expression
+																														properties={[
+																															<property
+																																key={identifier}
+																																value={identifier}
+																																kind="init"
+																																shorthand
+																															/>,
+																														]}
 																													/>
 																												}
-																												arguments={[
-																													<identifier name="argTypes" />,
-																												]}
-																											/>
-																										}
-																										kind="init"
-																									/>,
-																									<property
-																										key={<identifier name="template" />}
-																										value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
-																										kind="init"
-																									/>,
-																								]}
-																							/>
-																						}
-																					/>,
-																				]}
+																												kind="init"
+																											/>,
+																											<property
+																												key={<identifier name="props" />}
+																												value={
+																													<call-expression
+																														callee={
+																															<member-expression
+																																object={<identifier name="Object" />}
+																																property={<identifier name="keys" />}
+																															/>
+																														}
+																														arguments={[
+																															<identifier name="argTypes" />,
+																														]}
+																													/>
+																												}
+																												kind="init"
+																											/>,
+																											<property
+																												key={<identifier name="template" />}
+																												value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
+																												kind="init"
+																											/>,
+																										]}
+																									/>
+																								}
+																							/>,
+																						]}
+																					/>
+																				}
 																			/>
 																		}
-																	/>
-																}
-																method
-																kind="init"
-															/>,
-															<property
-																key={<identifier name="parameters" />}
-																value={parameters}
-																kind="init"
-															/>,
-														]}
+																		method
+																		kind="init"
+																	/>,
+																	<property
+																		key={<identifier name="parameters" />}
+																		value={parameters}
+																		kind="init"
+																	/>,
+																]}
+															/>
+														}
+														reference={<identifier name={`StoryObj<typeof ${identifier.name}>`} />}
 													/>
 												}
 											/>,
@@ -221,7 +250,7 @@ function toStories(component: string): string {
 		/>
 	) as unknown as estree.Program;
 	return format(
-		generate(program) + (hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
+		generate(program, { generator }) + (hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
 		{
 			parser: 'babel-ts',
 			singleQuote: true,
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
index e3a87b80fd..f46a44f81d 100644
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAbuseReport from './MkAbuseReport.vue';
 const meta = {
 	title: 'components/MkAbuseReport',
 	component: MkAbuseReport,
-};
+} satisfies Meta<typeof MkAbuseReport>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAbuseReport>;
 export default meta;
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
index 47b0923e9a..7db3344385 100644
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAbuseReportWindow from './MkAbuseReportWindow.vue';
 const meta = {
 	title: 'components/MkAbuseReportWindow',
 	component: MkAbuseReportWindow,
-};
+} satisfies Meta<typeof MkAbuseReportWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAbuseReportWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
index 9c0b1aec8d..d2a84d6dd9 100644
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAchievements from './MkAchievements.vue';
 const meta = {
 	title: 'components/MkAchievements',
 	component: MkAchievements,
-};
+} satisfies Meta<typeof MkAchievements>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAchievements>;
 export default meta;
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
index 464a4bbf8e..2d034c2ac7 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -1,8 +1,8 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/MkAnalogClock',
 	component: MkAnalogClock,
-};
+} satisfies Meta<typeof MkAnalogClock>;
 export default meta;
 import MkAnalogClock from './MkAnalogClock.vue';
 export const Default = {
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
index 7ad72bef43..1cb16883a4 100644
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAsUi from './MkAsUi.vue';
 const meta = {
 	title: 'components/MkAsUi',
 	component: MkAsUi,
-};
+} satisfies Meta<typeof MkAsUi>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAsUi>;
 export default meta;
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
index c6a0f6be63..b0d5b9f132 100644
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAutocomplete from './MkAutocomplete.vue';
 const meta = {
 	title: 'components/MkAutocomplete',
 	component: MkAutocomplete,
-};
+} satisfies Meta<typeof MkAutocomplete>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAutocomplete>;
 export default meta;
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
index bc2a82c842..690030b46f 100644
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAvatars from './MkAvatars.vue';
 const meta = {
 	title: 'components/MkAvatars',
 	component: MkAvatars,
-};
+} satisfies Meta<typeof MkAvatars>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAvatars>;
 export default meta;
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
index 72ccdaab0b..94bf1e39b2 100644
--- a/packages/frontend/src/components/MkButton.stories.impl.ts
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -1,3 +1,4 @@
+import { StoryObj } from '@storybook/vue3';
 import MkButton from './MkButton.vue';
 export const Default = {
 	render(args, { argTypes }) {
@@ -12,4 +13,4 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkButton>;
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index fb56501b9c..2328de28db 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -1,9 +1,10 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/MkButton',
 	component: MkButton,
-};
+} satisfies Meta<typeof MkButton>;
 export default meta;
+import { StoryObj } from '@storybook/vue3';
 import MkButton from './MkButton.vue';
 export const Default = {
 	render(args, { argTypes }) {
@@ -18,4 +19,4 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkButton>;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index e58f36ccff..8db28448b3 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCaptcha from './MkCaptcha.vue';
 const meta = {
 	title: 'components/MkCaptcha',
 	component: MkCaptcha,
-};
+} satisfies Meta<typeof MkCaptcha>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCaptcha>;
 export default meta;
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
index 889b9a7f09..71ee9331c6 100644
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkChannelFollowButton from './MkChannelFollowButton.vue';
 const meta = {
 	title: 'components/MkChannelFollowButton',
 	component: MkChannelFollowButton,
-};
+} satisfies Meta<typeof MkChannelFollowButton>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkChannelFollowButton>;
 export default meta;
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
index a4537bee52..9d850794a0 100644
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkChannelPreview from './MkChannelPreview.vue';
 const meta = {
 	title: 'components/MkChannelPreview',
 	component: MkChannelPreview,
-};
+} satisfies Meta<typeof MkChannelPreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkChannelPreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
index 8d4b633edf..feb9904044 100644
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkChart from './MkChart.vue';
 const meta = {
 	title: 'components/MkChart',
 	component: MkChart,
-};
+} satisfies Meta<typeof MkChart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkChart>;
 export default meta;
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
index fcc39a6a46..62186992bb 100644
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkChartLegend from './MkChartLegend.vue';
 const meta = {
 	title: 'components/MkChartLegend',
 	component: MkChartLegend,
-};
+} satisfies Meta<typeof MkChartLegend>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkChartLegend>;
 export default meta;
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
index d0ab98b975..f3ff7d39fc 100644
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkChartTooltip from './MkChartTooltip.vue';
 const meta = {
 	title: 'components/MkChartTooltip',
 	component: MkChartTooltip,
-};
+} satisfies Meta<typeof MkChartTooltip>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkChartTooltip>;
 export default meta;
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
index 177b8a6402..b7b5c230bf 100644
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCheckbox from './MkCheckbox.vue';
 const meta = {
 	title: 'components/MkCheckbox',
 	component: MkCheckbox,
-};
+} satisfies Meta<typeof MkCheckbox>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCheckbox>;
 export default meta;
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
index c56ec9bd1a..15b3a7785f 100644
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkClickerGame from './MkClickerGame.vue';
 const meta = {
 	title: 'components/MkClickerGame',
 	component: MkClickerGame,
-};
+} satisfies Meta<typeof MkClickerGame>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkClickerGame>;
 export default meta;
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
index 422d12fab1..4351df3c47 100644
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkClipPreview from './MkClipPreview.vue';
 const meta = {
 	title: 'components/MkClipPreview',
 	component: MkClipPreview,
-};
+} satisfies Meta<typeof MkClipPreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkClipPreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index 53b41eb0c9..b3c43223bc 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCode_core from './MkCode.core.vue';
 const meta = {
 	title: 'components/MkCode.core',
 	component: MkCode_core,
-};
+} satisfies Meta<typeof MkCode_core>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCode_core>;
 export default meta;
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
index 1f6d4daff0..d09c095146 100644
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCode from './MkCode.vue';
 const meta = {
 	title: 'components/MkCode',
 	component: MkCode,
-};
+} satisfies Meta<typeof MkCode>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCode>;
 export default meta;
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
index cd07161ce9..93f4846fc9 100644
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkContainer from './MkContainer.vue';
 const meta = {
 	title: 'components/MkContainer',
 	component: MkContainer,
-};
+} satisfies Meta<typeof MkContainer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkContainer>;
 export default meta;
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
index 927e51c8a1..4108faa34b 100644
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkContextMenu from './MkContextMenu.vue';
 const meta = {
 	title: 'components/MkContextMenu',
 	component: MkContextMenu,
-};
+} satisfies Meta<typeof MkContextMenu>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkContextMenu>;
 export default meta;
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
index 3896c88404..2ed84b402c 100644
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCropperDialog from './MkCropperDialog.vue';
 const meta = {
 	title: 'components/MkCropperDialog',
 	component: MkCropperDialog,
-};
+} satisfies Meta<typeof MkCropperDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCropperDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
index 1a7398a951..408ce9f2d6 100644
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCwButton from './MkCwButton.vue';
 const meta = {
 	title: 'components/MkCwButton',
 	component: MkCwButton,
-};
+} satisfies Meta<typeof MkCwButton>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCwButton>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
index 719734a08f..d4852f43b8 100644
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDateSeparatedList from './MkDateSeparatedList.vue';
 const meta = {
 	title: 'components/MkDateSeparatedList',
 	component: MkDateSeparatedList,
-};
+} satisfies Meta<typeof MkDateSeparatedList>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDateSeparatedList>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
index 939cc9a571..e34e076a99 100644
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDialog from './MkDialog.vue';
 const meta = {
 	title: 'components/MkDialog',
 	component: MkDialog,
-};
+} satisfies Meta<typeof MkDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
index 86706bde1e..8f0c5e02b3 100644
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDigitalClock from './MkDigitalClock.vue';
 const meta = {
 	title: 'components/MkDigitalClock',
 	component: MkDigitalClock,
-};
+} satisfies Meta<typeof MkDigitalClock>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDigitalClock>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
index ae57ad2502..c62748cc65 100644
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDonation from './MkDonation.vue';
 const meta = {
 	title: 'components/MkDonation',
 	component: MkDonation,
-};
+} satisfies Meta<typeof MkDonation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDonation>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index c873285b4f..f64f4593b2 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_file from './MkDrive.file.vue';
 const meta = {
 	title: 'components/MkDrive.file',
 	component: MkDrive_file,
-};
+} satisfies Meta<typeof MkDrive_file>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDrive_file>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index 3d70a81bb4..c1774428f0 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_folder from './MkDrive.folder.vue';
 const meta = {
 	title: 'components/MkDrive.folder',
 	component: MkDrive_folder,
-};
+} satisfies Meta<typeof MkDrive_folder>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDrive_folder>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index 1279d9eae1..d0d405538e 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_navFolder from './MkDrive.navFolder.vue';
 const meta = {
 	title: 'components/MkDrive.navFolder',
 	component: MkDrive_navFolder,
-};
+} satisfies Meta<typeof MkDrive_navFolder>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDrive_navFolder>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
index f581ddabeb..a90fdf3623 100644
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive from './MkDrive.vue';
 const meta = {
 	title: 'components/MkDrive',
 	component: MkDrive,
-};
+} satisfies Meta<typeof MkDrive>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDrive>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
index 9e6e078c06..13eae1240a 100644
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue';
 const meta = {
 	title: 'components/MkDriveFileThumbnail',
 	component: MkDriveFileThumbnail,
-};
+} satisfies Meta<typeof MkDriveFileThumbnail>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDriveFileThumbnail>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
index 39a7828b4f..d5090fdc8a 100644
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveSelectDialog from './MkDriveSelectDialog.vue';
 const meta = {
 	title: 'components/MkDriveSelectDialog',
 	component: MkDriveSelectDialog,
-};
+} satisfies Meta<typeof MkDriveSelectDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDriveSelectDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
index 29cdd5228e..23fe35f156 100644
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveWindow from './MkDriveWindow.vue';
 const meta = {
 	title: 'components/MkDriveWindow',
 	component: MkDriveWindow,
-};
+} satisfies Meta<typeof MkDriveWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkDriveWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index 60ea8fac00..b4d26bb58e 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPicker_section from './MkEmojiPicker.section.vue';
 const meta = {
 	title: 'components/MkEmojiPicker.section',
 	component: MkEmojiPicker_section,
-};
+} satisfies Meta<typeof MkEmojiPicker_section>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEmojiPicker_section>;
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
index 06b41d28d7..74a6a35806 100644
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPicker from './MkEmojiPicker.vue';
 const meta = {
 	title: 'components/MkEmojiPicker',
 	component: MkEmojiPicker,
-};
+} satisfies Meta<typeof MkEmojiPicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEmojiPicker>;
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
index 56ab6ac013..b3ed21972c 100644
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPickerDialog from './MkEmojiPickerDialog.vue';
 const meta = {
 	title: 'components/MkEmojiPickerDialog',
 	component: MkEmojiPickerDialog,
-};
+} satisfies Meta<typeof MkEmojiPickerDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEmojiPickerDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
index 470bacaf2c..6251b2c522 100644
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPickerWindow from './MkEmojiPickerWindow.vue';
 const meta = {
 	title: 'components/MkEmojiPickerWindow',
 	component: MkEmojiPickerWindow,
-};
+} satisfies Meta<typeof MkEmojiPickerWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEmojiPickerWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
index 0da9787c9c..606c182f66 100644
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFeaturedPhotos from './MkFeaturedPhotos.vue';
 const meta = {
 	title: 'components/MkFeaturedPhotos',
 	component: MkFeaturedPhotos,
-};
+} satisfies Meta<typeof MkFeaturedPhotos>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFeaturedPhotos>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
index 2ade1eef49..b085478b4e 100644
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFileCaptionEditWindow from './MkFileCaptionEditWindow.vue';
 const meta = {
 	title: 'components/MkFileCaptionEditWindow',
 	component: MkFileCaptionEditWindow,
-};
+} satisfies Meta<typeof MkFileCaptionEditWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFileCaptionEditWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
index 22386b84c2..22da12b766 100644
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFileListForAdmin from './MkFileListForAdmin.vue';
 const meta = {
 	title: 'components/MkFileListForAdmin',
 	component: MkFileListForAdmin,
-};
+} satisfies Meta<typeof MkFileListForAdmin>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFileListForAdmin>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
index b8d218ed70..2827c4450d 100644
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFlashPreview from './MkFlashPreview.vue';
 const meta = {
 	title: 'components/MkFlashPreview',
 	component: MkFlashPreview,
-};
+} satisfies Meta<typeof MkFlashPreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFlashPreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
index 80d9ca8615..dcc2afeb6d 100644
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFoldableSection from './MkFoldableSection.vue';
 const meta = {
 	title: 'components/MkFoldableSection',
 	component: MkFoldableSection,
-};
+} satisfies Meta<typeof MkFoldableSection>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFoldableSection>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
index 7eb6a3b0e3..e23080d647 100644
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFolder from './MkFolder.vue';
 const meta = {
 	title: 'components/MkFolder',
 	component: MkFolder,
-};
+} satisfies Meta<typeof MkFolder>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFolder>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
index 4e85afa014..7d707b5c8c 100644
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFollowButton from './MkFollowButton.vue';
 const meta = {
 	title: 'components/MkFollowButton',
 	component: MkFollowButton,
-};
+} satisfies Meta<typeof MkFollowButton>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFollowButton>;
 export default meta;
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
index 6dd724aa12..c8be79aef2 100644
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkForgotPassword from './MkForgotPassword.vue';
 const meta = {
 	title: 'components/MkForgotPassword',
 	component: MkForgotPassword,
-};
+} satisfies Meta<typeof MkForgotPassword>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkForgotPassword>;
 export default meta;
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
index 6622424376..56ca0326a6 100644
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkFormDialog from './MkFormDialog.vue';
 const meta = {
 	title: 'components/MkFormDialog',
 	component: MkFormDialog,
-};
+} satisfies Meta<typeof MkFormDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkFormDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
index 18b0ab6ae1..3971dd1225 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkGalleryPostPreview from './MkGalleryPostPreview.vue';
 const meta = {
 	title: 'components/MkGalleryPostPreview',
 	component: MkGalleryPostPreview,
-};
+} satisfies Meta<typeof MkGalleryPostPreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkGalleryPostPreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
index 660607038f..b439d6ea4b 100644
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkGoogle from './MkGoogle.vue';
 const meta = {
 	title: 'components/MkGoogle',
 	component: MkGoogle,
-};
+} satisfies Meta<typeof MkGoogle>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkGoogle>;
 export default meta;
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
index 1fdb8eb081..b89fc49c31 100644
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkHeatmap from './MkHeatmap.vue';
 const meta = {
 	title: 'components/MkHeatmap',
 	component: MkHeatmap,
-};
+} satisfies Meta<typeof MkHeatmap>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkHeatmap>;
 export default meta;
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
index 4f0ff7f437..ece0738868 100644
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkImageViewer from './MkImageViewer.vue';
 const meta = {
 	title: 'components/MkImageViewer',
 	component: MkImageViewer,
-};
+} satisfies Meta<typeof MkImageViewer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkImageViewer>;
 export default meta;
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
index c00088d9b2..89a5192e4d 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkImgWithBlurhash from './MkImgWithBlurhash.vue';
 const meta = {
 	title: 'components/MkImgWithBlurhash',
 	component: MkImgWithBlurhash,
-};
+} satisfies Meta<typeof MkImgWithBlurhash>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkImgWithBlurhash>;
 export default meta;
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
index 1e164d4278..fcea66afb1 100644
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkInfo from './MkInfo.vue';
 const meta = {
 	title: 'components/MkInfo',
 	component: MkInfo,
-};
+} satisfies Meta<typeof MkInfo>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkInfo>;
 export default meta;
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
index 199a5b5392..724ab1c706 100644
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkInput from './MkInput.vue';
 const meta = {
 	title: 'components/MkInput',
 	component: MkInput,
-};
+} satisfies Meta<typeof MkInput>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkInput>;
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
index fcc9e8f2ee..4427b72747 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceCardMini from './MkInstanceCardMini.vue';
 const meta = {
 	title: 'components/MkInstanceCardMini',
 	component: MkInstanceCardMini,
-};
+} satisfies Meta<typeof MkInstanceCardMini>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkInstanceCardMini>;
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
index 74fa5359be..2290681413 100644
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceStats from './MkInstanceStats.vue';
 const meta = {
 	title: 'components/MkInstanceStats',
 	component: MkInstanceStats,
-};
+} satisfies Meta<typeof MkInstanceStats>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkInstanceStats>;
 export default meta;
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
index 87eb49a7c7..779ce96c42 100644
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceTicker from './MkInstanceTicker.vue';
 const meta = {
 	title: 'components/MkInstanceTicker',
 	component: MkInstanceTicker,
-};
+} satisfies Meta<typeof MkInstanceTicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkInstanceTicker>;
 export default meta;
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
index 83753e146c..0a4544e7e1 100644
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkKeyValue from './MkKeyValue.vue';
 const meta = {
 	title: 'components/MkKeyValue',
 	component: MkKeyValue,
-};
+} satisfies Meta<typeof MkKeyValue>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkKeyValue>;
 export default meta;
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
index 02e239763d..1395795070 100644
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkLaunchPad from './MkLaunchPad.vue';
 const meta = {
 	title: 'components/MkLaunchPad',
 	component: MkLaunchPad,
-};
+} satisfies Meta<typeof MkLaunchPad>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkLaunchPad>;
 export default meta;
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
index 33baee8702..9eb49f1e23 100644
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkLink from './MkLink.vue';
 const meta = {
 	title: 'components/MkLink',
 	component: MkLink,
-};
+} satisfies Meta<typeof MkLink>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkLink>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
index 9fec1d5a89..ec35940f6d 100644
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMarquee from './MkMarquee.vue';
 const meta = {
 	title: 'components/MkMarquee',
 	component: MkMarquee,
-};
+} satisfies Meta<typeof MkMarquee>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMarquee>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
index dcf57f0cc8..7c9d954f38 100644
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaBanner from './MkMediaBanner.vue';
 const meta = {
 	title: 'components/MkMediaBanner',
 	component: MkMediaBanner,
-};
+} satisfies Meta<typeof MkMediaBanner>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMediaBanner>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
index cb495872da..ea9f9f33b0 100644
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaImage from './MkMediaImage.vue';
 const meta = {
 	title: 'components/MkMediaImage',
 	component: MkMediaImage,
-};
+} satisfies Meta<typeof MkMediaImage>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMediaImage>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
index 87eb23dc89..3b194849b5 100644
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaList from './MkMediaList.vue';
 const meta = {
 	title: 'components/MkMediaList',
 	component: MkMediaList,
-};
+} satisfies Meta<typeof MkMediaList>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMediaList>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
index a39adebbe7..06bea55404 100644
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaVideo from './MkMediaVideo.vue';
 const meta = {
 	title: 'components/MkMediaVideo',
 	component: MkMediaVideo,
-};
+} satisfies Meta<typeof MkMediaVideo>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMediaVideo>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
index 459633a07a..139b9851fc 100644
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMention from './MkMention.vue';
 const meta = {
 	title: 'components/MkMention',
 	component: MkMention,
-};
+} satisfies Meta<typeof MkMention>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMention>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index 114d710409..6e6cf385f2 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMenu_child from './MkMenu.child.vue';
 const meta = {
 	title: 'components/MkMenu.child',
 	component: MkMenu_child,
-};
+} satisfies Meta<typeof MkMenu_child>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMenu_child>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
index 9a293bcc9c..d3eb2f83e6 100644
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMenu from './MkMenu.vue';
 const meta = {
 	title: 'components/MkMenu',
 	component: MkMenu,
-};
+} satisfies Meta<typeof MkMenu>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMenu>;
 export default meta;
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
index f773bafe25..cc49211f99 100644
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMiniChart from './MkMiniChart.vue';
 const meta = {
 	title: 'components/MkMiniChart',
 	component: MkMiniChart,
-};
+} satisfies Meta<typeof MkMiniChart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMiniChart>;
 export default meta;
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
index 84f40abc0d..f85f8c68cc 100644
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkModal from './MkModal.vue';
 const meta = {
 	title: 'components/MkModal',
 	component: MkModal,
-};
+} satisfies Meta<typeof MkModal>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkModal>;
 export default meta;
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
index 3312818799..a6e7ffa0fa 100644
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkModalPageWindow from './MkModalPageWindow.vue';
 const meta = {
 	title: 'components/MkModalPageWindow',
 	component: MkModalPageWindow,
-};
+} satisfies Meta<typeof MkModalPageWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkModalPageWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
index 7e71ae0716..bfc75f90e9 100644
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkModalWindow from './MkModalWindow.vue';
 const meta = {
 	title: 'components/MkModalWindow',
 	component: MkModalWindow,
-};
+} satisfies Meta<typeof MkModalWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkModalWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
index 47dfafc763..dcadfbaa0b 100644
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNote from './MkNote.vue';
 const meta = {
 	title: 'components/MkNote',
 	component: MkNote,
-};
+} satisfies Meta<typeof MkNote>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNote>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
index 3e106adfaa..a9396cf23d 100644
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteDetailed from './MkNoteDetailed.vue';
 const meta = {
 	title: 'components/MkNoteDetailed',
 	component: MkNoteDetailed,
-};
+} satisfies Meta<typeof MkNoteDetailed>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNoteDetailed>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
index e49279ae58..8ec74de40e 100644
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteHeader from './MkNoteHeader.vue';
 const meta = {
 	title: 'components/MkNoteHeader',
 	component: MkNoteHeader,
-};
+} satisfies Meta<typeof MkNoteHeader>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNoteHeader>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
index d3074aacae..6bd9fd1213 100644
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotePreview from './MkNotePreview.vue';
 const meta = {
 	title: 'components/MkNotePreview',
 	component: MkNotePreview,
-};
+} satisfies Meta<typeof MkNotePreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNotePreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
index 60676a0f85..c4dd101cfe 100644
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteSimple from './MkNoteSimple.vue';
 const meta = {
 	title: 'components/MkNoteSimple',
 	component: MkNoteSimple,
-};
+} satisfies Meta<typeof MkNoteSimple>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNoteSimple>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
index 4e63f95701..172647eabe 100644
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteSub from './MkNoteSub.vue';
 const meta = {
 	title: 'components/MkNoteSub',
 	component: MkNoteSub,
-};
+} satisfies Meta<typeof MkNoteSub>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNoteSub>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
index ee559a017b..4bad4882a2 100644
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotes from './MkNotes.vue';
 const meta = {
 	title: 'components/MkNotes',
 	component: MkNotes,
-};
+} satisfies Meta<typeof MkNotes>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNotes>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
index 7960900a8d..90d87ce58f 100644
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotification from './MkNotification.vue';
 const meta = {
 	title: 'components/MkNotification',
 	component: MkNotification,
-};
+} satisfies Meta<typeof MkNotification>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNotification>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
index 78dc44c8ad..8dd29793e0 100644
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotificationSettingWindow from './MkNotificationSettingWindow.vue';
 const meta = {
 	title: 'components/MkNotificationSettingWindow',
 	component: MkNotificationSettingWindow,
-};
+} satisfies Meta<typeof MkNotificationSettingWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNotificationSettingWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
index e340422e1f..c56f9235af 100644
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotifications from './MkNotifications.vue';
 const meta = {
 	title: 'components/MkNotifications',
 	component: MkNotifications,
-};
+} satisfies Meta<typeof MkNotifications>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNotifications>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
index fc86c00250..cae6122669 100644
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNumber from './MkNumber.vue';
 const meta = {
 	title: 'components/MkNumber',
 	component: MkNumber,
-};
+} satisfies Meta<typeof MkNumber>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNumber>;
 export default meta;
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
index 715bbb5439..296d39632f 100644
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkNumberDiff from './MkNumberDiff.vue';
 const meta = {
 	title: 'components/MkNumberDiff',
 	component: MkNumberDiff,
-};
+} satisfies Meta<typeof MkNumberDiff>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkNumberDiff>;
 export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
index 746dccc375..2b345b6ac1 100644
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkObjectView from './MkObjectView.vue';
 const meta = {
 	title: 'components/MkObjectView',
 	component: MkObjectView,
-};
+} satisfies Meta<typeof MkObjectView>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkObjectView>;
 export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index 8e18978376..f71148ee8e 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkObjectView_value from './MkObjectView.value.vue';
 const meta = {
 	title: 'components/MkObjectView.value',
 	component: MkObjectView_value,
-};
+} satisfies Meta<typeof MkObjectView_value>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkObjectView_value>;
 export default meta;
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
index 4d954fd236..e98d695185 100644
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkOmit from './MkOmit.vue';
 const meta = {
 	title: 'components/MkOmit',
 	component: MkOmit,
-};
+} satisfies Meta<typeof MkOmit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkOmit>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
index dd96afa285..db38b03aab 100644
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPagePreview from './MkPagePreview.vue';
 const meta = {
 	title: 'components/MkPagePreview',
 	component: MkPagePreview,
-};
+} satisfies Meta<typeof MkPagePreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPagePreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
index f1c8b3b244..4843e4e2b4 100644
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageWindow from './MkPageWindow.vue';
 const meta = {
 	title: 'components/MkPageWindow',
 	component: MkPageWindow,
-};
+} satisfies Meta<typeof MkPageWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPageWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
index 3b89bb4b26..a5509a9309 100644
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPagination from './MkPagination.vue';
 const meta = {
 	title: 'components/MkPagination',
 	component: MkPagination,
-};
+} satisfies Meta<typeof MkPagination>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPagination>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
index 10cf1f372d..a75a89a8eb 100644
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPlusOneEffect from './MkPlusOneEffect.vue';
 const meta = {
 	title: 'components/MkPlusOneEffect',
 	component: MkPlusOneEffect,
-};
+} satisfies Meta<typeof MkPlusOneEffect>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPlusOneEffect>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
index 154c675119..a52aff5043 100644
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPoll from './MkPoll.vue';
 const meta = {
 	title: 'components/MkPoll',
 	component: MkPoll,
-};
+} satisfies Meta<typeof MkPoll>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPoll>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
index 09acb5f4ab..59c016f6b4 100644
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPollEditor from './MkPollEditor.vue';
 const meta = {
 	title: 'components/MkPollEditor',
 	component: MkPollEditor,
-};
+} satisfies Meta<typeof MkPollEditor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPollEditor>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
index acb5b6939c..76dfac51a5 100644
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPopupMenu from './MkPopupMenu.vue';
 const meta = {
 	title: 'components/MkPopupMenu',
 	component: MkPopupMenu,
-};
+} satisfies Meta<typeof MkPopupMenu>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPopupMenu>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
index da9b8947ba..d160ff066f 100644
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostForm from './MkPostForm.vue';
 const meta = {
 	title: 'components/MkPostForm',
 	component: MkPostForm,
-};
+} satisfies Meta<typeof MkPostForm>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPostForm>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
index 717385b1fa..7b8567f208 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostFormAttaches from './MkPostFormAttaches.vue';
 const meta = {
 	title: 'components/MkPostFormAttaches',
 	component: MkPostFormAttaches,
-};
+} satisfies Meta<typeof MkPostFormAttaches>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPostFormAttaches>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
index 18a0f75ced..b5058bfdef 100644
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostFormDialog from './MkPostFormDialog.vue';
 const meta = {
 	title: 'components/MkPostFormDialog',
 	component: MkPostFormDialog,
-};
+} satisfies Meta<typeof MkPostFormDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPostFormDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
index 20af967780..673f5e643c 100644
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPushNotificationAllowButton from './MkPushNotificationAllowButton.vue';
 const meta = {
 	title: 'components/MkPushNotificationAllowButton',
 	component: MkPushNotificationAllowButton,
-};
+} satisfies Meta<typeof MkPushNotificationAllowButton>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPushNotificationAllowButton>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
index 34037cd782..3cf58bda7b 100644
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRadio from './MkRadio.vue';
 const meta = {
 	title: 'components/MkRadio',
 	component: MkRadio,
-};
+} satisfies Meta<typeof MkRadio>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRadio>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
index 0a12b130c9..9ec398614c 100644
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRadios from './MkRadios.vue';
 const meta = {
 	title: 'components/MkRadios',
 	component: MkRadios,
-};
+} satisfies Meta<typeof MkRadios>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRadios>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
index 764f7ac5b7..3e92726608 100644
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRange from './MkRange.vue';
 const meta = {
 	title: 'components/MkRange',
 	component: MkRange,
-};
+} satisfies Meta<typeof MkRange>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRange>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
index bf470a833a..e44770f681 100644
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactedUsersDialog from './MkReactedUsersDialog.vue';
 const meta = {
 	title: 'components/MkReactedUsersDialog',
 	component: MkReactedUsersDialog,
-};
+} satisfies Meta<typeof MkReactedUsersDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactedUsersDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
index c0d5b4a154..17e79bc29b 100644
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionEffect from './MkReactionEffect.vue';
 const meta = {
 	title: 'components/MkReactionEffect',
 	component: MkReactionEffect,
-};
+} satisfies Meta<typeof MkReactionEffect>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionEffect>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
index 37e329f34a..f3551ec0af 100644
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionIcon from './MkReactionIcon.vue';
 const meta = {
 	title: 'components/MkReactionIcon',
 	component: MkReactionIcon,
-};
+} satisfies Meta<typeof MkReactionIcon>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionIcon>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
index 16e5fca1c4..996e08df7f 100644
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionTooltip from './MkReactionTooltip.vue';
 const meta = {
 	title: 'components/MkReactionTooltip',
 	component: MkReactionTooltip,
-};
+} satisfies Meta<typeof MkReactionTooltip>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionTooltip>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index d373edf3c1..432ff2335b 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer_details from './MkReactionsViewer.details.vue';
 const meta = {
 	title: 'components/MkReactionsViewer.details',
 	component: MkReactionsViewer_details,
-};
+} satisfies Meta<typeof MkReactionsViewer_details>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionsViewer_details>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index b56f13bb5c..fcdaa140b1 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer_reaction from './MkReactionsViewer.reaction.vue';
 const meta = {
 	title: 'components/MkReactionsViewer.reaction',
 	component: MkReactionsViewer_reaction,
-};
+} satisfies Meta<typeof MkReactionsViewer_reaction>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionsViewer_reaction>;
 export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
index 18addf460d..d593267861 100644
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer from './MkReactionsViewer.vue';
 const meta = {
 	title: 'components/MkReactionsViewer',
 	component: MkReactionsViewer,
-};
+} satisfies Meta<typeof MkReactionsViewer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkReactionsViewer>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
index 4f4f8054a7..406c93a26b 100644
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRemoteCaution from './MkRemoteCaution.vue';
 const meta = {
 	title: 'components/MkRemoteCaution',
 	component: MkRemoteCaution,
-};
+} satisfies Meta<typeof MkRemoteCaution>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRemoteCaution>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
index 0eca578c36..e0cbb8e0ed 100644
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRetentionHeatmap from './MkRetentionHeatmap.vue';
 const meta = {
 	title: 'components/MkRetentionHeatmap',
 	component: MkRetentionHeatmap,
-};
+} satisfies Meta<typeof MkRetentionHeatmap>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRetentionHeatmap>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
index 4b054be436..9632aca9b1 100644
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRippleEffect from './MkRippleEffect.vue';
 const meta = {
 	title: 'components/MkRippleEffect',
 	component: MkRippleEffect,
-};
+} satisfies Meta<typeof MkRippleEffect>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRippleEffect>;
 export default meta;
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
index f4306233cb..d9001b80d2 100644
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkRolePreview from './MkRolePreview.vue';
 const meta = {
 	title: 'components/MkRolePreview',
 	component: MkRolePreview,
-};
+} satisfies Meta<typeof MkRolePreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkRolePreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
index 14cd69bd67..080dd6a09a 100644
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSample from './MkSample.vue';
 const meta = {
 	title: 'components/MkSample',
 	component: MkSample,
-};
+} satisfies Meta<typeof MkSample>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSample>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
index 0e67a67238..0526e59157 100644
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSelect from './MkSelect.vue';
 const meta = {
 	title: 'components/MkSelect',
 	component: MkSelect,
-};
+} satisfies Meta<typeof MkSelect>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSelect>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
index 32a52771df..56e0c6a78d 100644
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignin from './MkSignin.vue';
 const meta = {
 	title: 'components/MkSignin',
 	component: MkSignin,
-};
+} satisfies Meta<typeof MkSignin>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSignin>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
index b05096452b..964b2368bd 100644
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSigninDialog from './MkSigninDialog.vue';
 const meta = {
 	title: 'components/MkSigninDialog',
 	component: MkSigninDialog,
-};
+} satisfies Meta<typeof MkSigninDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSigninDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
index 665a5881e2..cd2411f03d 100644
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignup from './MkSignup.vue';
 const meta = {
 	title: 'components/MkSignup',
 	component: MkSignup,
-};
+} satisfies Meta<typeof MkSignup>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSignup>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
index 4e1316fed5..6c50f9e4ca 100644
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignupDialog from './MkSignupDialog.vue';
 const meta = {
 	title: 'components/MkSignupDialog',
 	component: MkSignupDialog,
-};
+} satisfies Meta<typeof MkSignupDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSignupDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
index 22dc8af7d2..cafe471900 100644
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSparkle from './MkSparkle.vue';
 const meta = {
 	title: 'components/MkSparkle',
 	component: MkSparkle,
-};
+} satisfies Meta<typeof MkSparkle>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSparkle>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
index d83aef1328..c85ac32bd3 100644
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSubNoteContent from './MkSubNoteContent.vue';
 const meta = {
 	title: 'components/MkSubNoteContent',
 	component: MkSubNoteContent,
-};
+} satisfies Meta<typeof MkSubNoteContent>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSubNoteContent>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
index 8be6b5aa70..651353c8fb 100644
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSuperMenu from './MkSuperMenu.vue';
 const meta = {
 	title: 'components/MkSuperMenu',
 	component: MkSuperMenu,
-};
+} satisfies Meta<typeof MkSuperMenu>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSuperMenu>;
 export default meta;
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
index fae92c1726..704df93904 100644
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSwitch from './MkSwitch.vue';
 const meta = {
 	title: 'components/MkSwitch',
 	component: MkSwitch,
-};
+} satisfies Meta<typeof MkSwitch>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSwitch>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
index 035afa7f55..351dc29b98 100644
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTab from './MkTab.vue';
 const meta = {
 	title: 'components/MkTab',
 	component: MkTab,
-};
+} satisfies Meta<typeof MkTab>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTab>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
index cea976fd4b..868902865b 100644
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTagCloud from './MkTagCloud.vue';
 const meta = {
 	title: 'components/MkTagCloud',
 	component: MkTagCloud,
-};
+} satisfies Meta<typeof MkTagCloud>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTagCloud>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
index 0369b0978a..4cc40e2d15 100644
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTextarea from './MkTextarea.vue';
 const meta = {
 	title: 'components/MkTextarea',
 	component: MkTextarea,
-};
+} satisfies Meta<typeof MkTextarea>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTextarea>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
index f778c7ea02..3c48c5e79b 100644
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTimeline from './MkTimeline.vue';
 const meta = {
 	title: 'components/MkTimeline',
 	component: MkTimeline,
-};
+} satisfies Meta<typeof MkTimeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTimeline>;
 export default meta;
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
index be078dec5b..730b2e34e2 100644
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkToast from './MkToast.vue';
 const meta = {
 	title: 'components/MkToast',
 	component: MkToast,
-};
+} satisfies Meta<typeof MkToast>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkToast>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
index daec25cb83..6e1b4b4361 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTokenGenerateWindow from './MkTokenGenerateWindow.vue';
 const meta = {
 	title: 'components/MkTokenGenerateWindow',
 	component: MkTokenGenerateWindow,
-};
+} satisfies Meta<typeof MkTokenGenerateWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTokenGenerateWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
index 474b49d263..42f8a21e53 100644
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTooltip from './MkTooltip.vue';
 const meta = {
 	title: 'components/MkTooltip',
 	component: MkTooltip,
-};
+} satisfies Meta<typeof MkTooltip>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTooltip>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
index b4388eb21f..15e679c9a6 100644
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUpdated from './MkUpdated.vue';
 const meta = {
 	title: 'components/MkUpdated',
 	component: MkUpdated,
-};
+} satisfies Meta<typeof MkUpdated>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUpdated>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
index a7f230ef40..6389438bf2 100644
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrlPreview from './MkUrlPreview.vue';
 const meta = {
 	title: 'components/MkUrlPreview',
 	component: MkUrlPreview,
-};
+} satisfies Meta<typeof MkUrlPreview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUrlPreview>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
index c55cbc04be..4c76e1dbf9 100644
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrlPreviewPopup from './MkUrlPreviewPopup.vue';
 const meta = {
 	title: 'components/MkUrlPreviewPopup',
 	component: MkUrlPreviewPopup,
-};
+} satisfies Meta<typeof MkUrlPreviewPopup>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUrlPreviewPopup>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
index ae2001abba..faee519469 100644
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserCardMini from './MkUserCardMini.vue';
 const meta = {
 	title: 'components/MkUserCardMini',
 	component: MkUserCardMini,
-};
+} satisfies Meta<typeof MkUserCardMini>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserCardMini>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
index dddae8a572..08010825cb 100644
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserInfo from './MkUserInfo.vue';
 const meta = {
 	title: 'components/MkUserInfo',
 	component: MkUserInfo,
-};
+} satisfies Meta<typeof MkUserInfo>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserInfo>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
index f5269bfc82..1c7441f5d4 100644
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserList from './MkUserList.vue';
 const meta = {
 	title: 'components/MkUserList',
 	component: MkUserList,
-};
+} satisfies Meta<typeof MkUserList>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserList>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
index 5132078e54..3c338403e8 100644
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserOnlineIndicator from './MkUserOnlineIndicator.vue';
 const meta = {
 	title: 'components/MkUserOnlineIndicator',
 	component: MkUserOnlineIndicator,
-};
+} satisfies Meta<typeof MkUserOnlineIndicator>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserOnlineIndicator>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
index f83c41e2d0..e9eeae31c8 100644
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserPopup from './MkUserPopup.vue';
 const meta = {
 	title: 'components/MkUserPopup',
 	component: MkUserPopup,
-};
+} satisfies Meta<typeof MkUserPopup>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserPopup>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
index cb66bbacc4..21c0be2e3e 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserSelectDialog from './MkUserSelectDialog.vue';
 const meta = {
 	title: 'components/MkUserSelectDialog',
 	component: MkUserSelectDialog,
-};
+} satisfies Meta<typeof MkUserSelectDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserSelectDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
index 7bb6c0b355..1c932d6a5f 100644
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUsersTooltip from './MkUsersTooltip.vue';
 const meta = {
 	title: 'components/MkUsersTooltip',
 	component: MkUsersTooltip,
-};
+} satisfies Meta<typeof MkUsersTooltip>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUsersTooltip>;
 export default meta;
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
index 55522a1814..41a5f865fa 100644
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkVisibilityPicker from './MkVisibilityPicker.vue';
 const meta = {
 	title: 'components/MkVisibilityPicker',
 	component: MkVisibilityPicker,
-};
+} satisfies Meta<typeof MkVisibilityPicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkVisibilityPicker>;
 export default meta;
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
index 813a6b3993..47dbf7ad1d 100644
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkWaitingDialog from './MkWaitingDialog.vue';
 const meta = {
 	title: 'components/MkWaitingDialog',
 	component: MkWaitingDialog,
-};
+} satisfies Meta<typeof MkWaitingDialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkWaitingDialog>;
 export default meta;
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
index 2500713503..7c8ad0670d 100644
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkWidgets from './MkWidgets.vue';
 const meta = {
 	title: 'components/MkWidgets',
 	component: MkWidgets,
-};
+} satisfies Meta<typeof MkWidgets>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkWidgets>;
 export default meta;
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
index f8e315b066..ed80a62c87 100644
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkWindow from './MkWindow.vue';
 const meta = {
 	title: 'components/MkWindow',
 	component: MkWindow,
-};
+} satisfies Meta<typeof MkWindow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkWindow>;
 export default meta;
diff --git a/packages/frontend/src/components/MkYouTubePlayer.stories.ts b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
index 5e20a83784..1c9e18df05 100644
--- a/packages/frontend/src/components/MkYouTubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkYouTubePlayer from './MkYouTubePlayer.vue';
 const meta = {
 	title: 'components/MkYouTubePlayer',
 	component: MkYouTubePlayer,
-};
+} satisfies Meta<typeof MkYouTubePlayer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkYouTubePlayer>;
 export default meta;
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index f132ccdea8..7e9fdb715a 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import link from './link.vue';
 const meta = {
 	title: 'components/form/link',
 	component: link,
-};
+} satisfies Meta<typeof link>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof link>;
 export default meta;
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index 5b779f54a4..c08f907565 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import section from './section.vue';
 const meta = {
 	title: 'components/form/section',
 	component: section,
-};
+} satisfies Meta<typeof section>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof section>;
 export default meta;
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index 55cdf7d76a..4049276110 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import slot from './slot.vue';
 const meta = {
 	title: 'components/form/slot',
 	component: slot,
-};
+} satisfies Meta<typeof slot>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof slot>;
 export default meta;
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index 73cc4f8e44..48ccfcf78a 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import split from './split.vue';
 const meta = {
 	title: 'components/form/split',
 	component: split,
-};
+} satisfies Meta<typeof split>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof split>;
 export default meta;
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index 10541fdb1c..39e74fa1b6 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import suspense from './suspense.vue';
 const meta = {
 	title: 'components/form/suspense',
 	component: suspense,
-};
+} satisfies Meta<typeof suspense>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof suspense>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index 10dee397ff..8032d70705 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkA from './MkA.vue';
 const meta = {
 	title: 'components/global/MkA',
 	component: MkA,
-};
+} satisfies Meta<typeof MkA>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkA>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index a336156126..3078c305eb 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAcct from './MkAcct.vue';
 const meta = {
 	title: 'components/global/MkAcct',
 	component: MkAcct,
-};
+} satisfies Meta<typeof MkAcct>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAcct>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index 8d4f3713e2..f404138cf6 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAd from './MkAd.vue';
 const meta = {
 	title: 'components/global/MkAd',
 	component: MkAd,
-};
+} satisfies Meta<typeof MkAd>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAd>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 8556ef08ab..1a50cb40d6 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkAvatar from './MkAvatar.vue';
 const meta = {
 	title: 'components/global/MkAvatar',
 	component: MkAvatar,
-};
+} satisfies Meta<typeof MkAvatar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkAvatar>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index c1349c5808..42563cb98a 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkCustomEmoji from './MkCustomEmoji.vue';
 const meta = {
 	title: 'components/global/MkCustomEmoji',
 	component: MkCustomEmoji,
-};
+} satisfies Meta<typeof MkCustomEmoji>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkCustomEmoji>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
index 06a56a62c0..86ffd22406 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEllipsis from './MkEllipsis.vue';
 const meta = {
 	title: 'components/global/MkEllipsis',
 	component: MkEllipsis,
-};
+} satisfies Meta<typeof MkEllipsis>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEllipsis>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index 2dd4e23771..c57dffe4d0 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmoji from './MkEmoji.vue';
 const meta = {
 	title: 'components/global/MkEmoji',
 	component: MkEmoji,
-};
+} satisfies Meta<typeof MkEmoji>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkEmoji>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index 2a8abb943b..789233ddbc 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkError from './MkError.vue';
 const meta = {
 	title: 'components/global/MkError',
 	component: MkError,
-};
+} satisfies Meta<typeof MkError>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkError>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index 78fbfa9f52..0104591735 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkLoading from './MkLoading.vue';
 const meta = {
 	title: 'components/global/MkLoading',
 	component: MkLoading,
-};
+} satisfies Meta<typeof MkLoading>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkLoading>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 8b7827bfc8..5b13ebd3c7 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
 const meta = {
 	title: 'components/global/MkMisskeyFlavoredMarkdown',
 	component: MkMisskeyFlavoredMarkdown,
-};
+} satisfies Meta<typeof MkMisskeyFlavoredMarkdown>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
index 3921168824..4aca3d19ed 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageHeader from './MkPageHeader.vue';
 const meta = {
 	title: 'components/global/MkPageHeader',
 	component: MkPageHeader,
-};
+} satisfies Meta<typeof MkPageHeader>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPageHeader>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index aaa12228f9..fb07450580 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
 const meta = {
 	title: 'components/global/MkPageHeader.tabs',
 	component: MkPageHeader_tabs,
-};
+} satisfies Meta<typeof MkPageHeader_tabs>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkPageHeader_tabs>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
index 5040c0b17f..e9b138d614 100644
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkSpacer from './MkSpacer.vue';
 const meta = {
 	title: 'components/global/MkSpacer',
 	component: MkSpacer,
-};
+} satisfies Meta<typeof MkSpacer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkSpacer>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
index 0741f3f9bb..87449db549 100644
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkStickyContainer from './MkStickyContainer.vue';
 const meta = {
 	title: 'components/global/MkStickyContainer',
 	component: MkStickyContainer,
-};
+} satisfies Meta<typeof MkStickyContainer>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkStickyContainer>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
index 9df2fef695..a03ee7b389 100644
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkTime from './MkTime.vue';
 const meta = {
 	title: 'components/global/MkTime',
 	component: MkTime,
-};
+} satisfies Meta<typeof MkTime>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkTime>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
index 1f0e01f000..1a46cd3486 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrl from './MkUrl.vue';
 const meta = {
 	title: 'components/global/MkUrl',
 	component: MkUrl,
-};
+} satisfies Meta<typeof MkUrl>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUrl>;
 export default meta;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
index b5df40dfeb..caaf80ee3b 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserName from './MkUserName.vue';
 const meta = {
 	title: 'components/global/MkUserName',
 	component: MkUserName,
-};
+} satisfies Meta<typeof MkUserName>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof MkUserName>;
 export default meta;
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
index a0e76d9da1..7d266c81d3 100644
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import RouterView from './RouterView.vue';
 const meta = {
 	title: 'components/global/RouterView',
 	component: RouterView,
-};
+} satisfies Meta<typeof RouterView>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof RouterView>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index ba53f52505..38bac62739 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_block from './page.block.vue';
 const meta = {
 	title: 'components/page/page.block',
 	component: page_block,
-};
+} satisfies Meta<typeof page_block>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_block>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 4fd0b3a24f..9fa0c16157 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_button from './page.button.vue';
 const meta = {
 	title: 'components/page/page.button',
 	component: page_button,
-};
+} satisfies Meta<typeof page_button>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_button>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index 61880b3925..6d95fd6712 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_canvas from './page.canvas.vue';
 const meta = {
 	title: 'components/page/page.canvas',
 	component: page_canvas,
-};
+} satisfies Meta<typeof page_canvas>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_canvas>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index c94cbbb687..b28848cf5e 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_counter from './page.counter.vue';
 const meta = {
 	title: 'components/page/page.counter',
 	component: page_counter,
-};
+} satisfies Meta<typeof page_counter>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_counter>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index ddc88377d6..20f7ae3456 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_if from './page.if.vue';
 const meta = {
 	title: 'components/page/page.if',
 	component: page_if,
-};
+} satisfies Meta<typeof page_if>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_if>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index a21d6010d8..f4e2184cbc 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_image from './page.image.vue';
 const meta = {
 	title: 'components/page/page.image',
 	component: page_image,
-};
+} satisfies Meta<typeof page_image>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_image>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 0efb0220e9..5fea1445d6 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_note from './page.note.vue';
 const meta = {
 	title: 'components/page/page.note',
 	component: page_note,
-};
+} satisfies Meta<typeof page_note>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_note>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index 5fefcb9ee8..a3f42bb788 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_number_input from './page.number-input.vue';
 const meta = {
 	title: 'components/page/page.number-input',
 	component: page_number_input,
-};
+} satisfies Meta<typeof page_number_input>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_number_input>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index d59e5a4702..80af11a4f9 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_post from './page.post.vue';
 const meta = {
 	title: 'components/page/page.post',
 	component: page_post,
-};
+} satisfies Meta<typeof page_post>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_post>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 9974b7636f..670127ef06 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_radio_button from './page.radio-button.vue';
 const meta = {
 	title: 'components/page/page.radio-button',
 	component: page_radio_button,
-};
+} satisfies Meta<typeof page_radio_button>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_radio_button>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index 754541927b..0e2920eca9 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_section from './page.section.vue';
 const meta = {
 	title: 'components/page/page.section',
 	component: page_section,
-};
+} satisfies Meta<typeof page_section>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_section>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index 43271b6ca2..5a9bc2a691 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page from './page.vue';
 const meta = {
 	title: 'components/page/page',
 	component: page,
-};
+} satisfies Meta<typeof page>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index 7726586e77..c5cca25eb5 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_switch from './page.switch.vue';
 const meta = {
 	title: 'components/page/page.switch',
 	component: page_switch,
-};
+} satisfies Meta<typeof page_switch>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_switch>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index 6f58f19bde..0af6ef7225 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_text_input from './page.text-input.vue';
 const meta = {
 	title: 'components/page/page.text-input',
 	component: page_text_input,
-};
+} satisfies Meta<typeof page_text_input>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_text_input>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index 924224577b..99ad29d9d1 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_text from './page.text.vue';
 const meta = {
 	title: 'components/page/page.text',
 	component: page_text,
-};
+} satisfies Meta<typeof page_text>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_text>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index d14548a222..4d2aa48ffa 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_textarea_input from './page.textarea-input.vue';
 const meta = {
 	title: 'components/page/page.textarea-input',
 	component: page_textarea_input,
-};
+} satisfies Meta<typeof page_textarea_input>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_textarea_input>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index 13c4480ace..6828aa0c27 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_textarea from './page.textarea.vue';
 const meta = {
 	title: 'components/page/page.textarea',
 	component: page_textarea,
-};
+} satisfies Meta<typeof page_textarea>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof page_textarea>;
 export default meta;
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
index 3ca1df5861..ac0c2c67ca 100644
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _empty_ from './_empty_.vue';
 const meta = {
 	title: 'pages/_empty_',
 	component: _empty_,
-};
+} satisfies Meta<typeof _empty_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _empty_>;
 export default meta;
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
index f198b63fc8..7f8311a4cc 100644
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _error_ from './_error_.vue';
 const meta = {
 	title: 'pages/_error_',
 	component: _error_,
-};
+} satisfies Meta<typeof _error_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _error_>;
 export default meta;
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
index f511634eb9..d9dbdfc295 100644
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _loading_ from './_loading_.vue';
 const meta = {
 	title: 'pages/_loading_',
 	component: _loading_,
-};
+} satisfies Meta<typeof _loading_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _loading_>;
 export default meta;
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index 3b8f3ad117..ef5fe82e09 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import about_misskey from './about-misskey.vue';
 const meta = {
 	title: 'pages/about-misskey',
 	component: about_misskey,
-};
+} satisfies Meta<typeof about_misskey>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof about_misskey>;
 export default meta;
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index e178271a84..73f582f953 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import about_emojis from './about.emojis.vue';
 const meta = {
 	title: 'pages/about.emojis',
 	component: about_emojis,
-};
+} satisfies Meta<typeof about_emojis>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof about_emojis>;
 export default meta;
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index a2c763aef7..371dabf636 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import about_federation from './about.federation.vue';
 const meta = {
 	title: 'pages/about.federation',
 	component: about_federation,
-};
+} satisfies Meta<typeof about_federation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof about_federation>;
 export default meta;
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index a36c99fc32..079aad11ab 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import about from './about.vue';
 const meta = {
 	title: 'pages/about',
 	component: about,
-};
+} satisfies Meta<typeof about>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof about>;
 export default meta;
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index b7959f8976..8581760dc2 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import achievements from './achievements.vue';
 const meta = {
 	title: 'pages/achievements',
 	component: achievements,
-};
+} satisfies Meta<typeof achievements>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof achievements>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index 62ac20caf3..cc80bd47f7 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import admin_file from './admin-file.vue';
 const meta = {
 	title: 'pages/admin-file',
 	component: admin_file,
-};
+} satisfies Meta<typeof admin_file>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof admin_file>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
index 5af3ccc657..94fe9d3891 100644
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import RolesEditorFormula from './RolesEditorFormula.vue';
 const meta = {
 	title: 'pages/admin/RolesEditorFormula',
 	component: RolesEditorFormula,
-};
+} satisfies Meta<typeof RolesEditorFormula>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof RolesEditorFormula>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
index 3ae43e3fa6..2ff33c6979 100644
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _header_ from './_header_.vue';
 const meta = {
 	title: 'pages/admin/_header_',
 	component: _header_,
-};
+} satisfies Meta<typeof _header_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _header_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index ea3bbb4775..782799d161 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import abuses from './abuses.vue';
 const meta = {
 	title: 'pages/admin/abuses',
 	component: abuses,
-};
+} satisfies Meta<typeof abuses>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof abuses>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 638c56656f..9436302243 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import ads from './ads.vue';
 const meta = {
 	title: 'pages/admin/ads',
 	component: ads,
-};
+} satisfies Meta<typeof ads>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof ads>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index ae064741fb..18a0178516 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import announcements from './announcements.vue';
 const meta = {
 	title: 'pages/admin/announcements',
 	component: announcements,
-};
+} satisfies Meta<typeof announcements>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof announcements>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index 7c8506b40e..d4d39fe52f 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import bot_protection from './bot-protection.vue';
 const meta = {
 	title: 'pages/admin/bot-protection',
 	component: bot_protection,
-};
+} satisfies Meta<typeof bot_protection>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof bot_protection>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index 3a2ae56a40..823ad4e24c 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import database from './database.vue';
 const meta = {
 	title: 'pages/admin/database',
 	component: database,
-};
+} satisfies Meta<typeof database>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof database>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index 9b804ce4ac..b178e1dfd7 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import email_settings from './email-settings.vue';
 const meta = {
 	title: 'pages/admin/email-settings',
 	component: email_settings,
-};
+} satisfies Meta<typeof email_settings>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof email_settings>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index 63bf5023dd..702201dfa0 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import federation from './federation.vue';
 const meta = {
 	title: 'pages/admin/federation',
 	component: federation,
-};
+} satisfies Meta<typeof federation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof federation>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index 6d5b00f3f1..c78a146093 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import files from './files.vue';
 const meta = {
 	title: 'pages/admin/files',
 	component: files,
-};
+} satisfies Meta<typeof files>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof files>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index 54b89efc02..30141c3c97 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/admin/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index c76509923f..86e06c51a0 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import instance_block from './instance-block.vue';
 const meta = {
 	title: 'pages/admin/instance-block',
 	component: instance_block,
-};
+} satisfies Meta<typeof instance_block>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof instance_block>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index c55aedadca..dd53a34e3d 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import moderation from './moderation.vue';
 const meta = {
 	title: 'pages/admin/moderation',
 	component: moderation,
-};
+} satisfies Meta<typeof moderation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof moderation>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index faa1f1948d..4cdf207066 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import object_storage from './object-storage.vue';
 const meta = {
 	title: 'pages/admin/object-storage',
 	component: object_storage,
-};
+} satisfies Meta<typeof object_storage>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof object_storage>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index fc37c6072e..203e02b2c1 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import other_settings from './other-settings.vue';
 const meta = {
 	title: 'pages/admin/other-settings',
 	component: other_settings,
-};
+} satisfies Meta<typeof other_settings>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof other_settings>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index e7efca1a53..3d32d6ec73 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_active_users from './overview.active-users.vue';
 const meta = {
 	title: 'pages/admin/overview.active-users',
 	component: overview_active_users,
-};
+} satisfies Meta<typeof overview_active_users>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_active_users>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index 347065c396..4831733d37 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_ap_requests from './overview.ap-requests.vue';
 const meta = {
 	title: 'pages/admin/overview.ap-requests',
 	component: overview_ap_requests,
-};
+} satisfies Meta<typeof overview_ap_requests>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_ap_requests>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index 61956f0249..3573483a39 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_federation from './overview.federation.vue';
 const meta = {
 	title: 'pages/admin/overview.federation',
 	component: overview_federation,
-};
+} satisfies Meta<typeof overview_federation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_federation>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index 872c883fe7..9e90173616 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_heatmap from './overview.heatmap.vue';
 const meta = {
 	title: 'pages/admin/overview.heatmap',
 	component: overview_heatmap,
-};
+} satisfies Meta<typeof overview_heatmap>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_heatmap>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index c6ca9f0855..421c9b7e41 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_instances from './overview.instances.vue';
 const meta = {
 	title: 'pages/admin/overview.instances',
 	component: overview_instances,
-};
+} satisfies Meta<typeof overview_instances>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_instances>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index a05c482eab..0201210053 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_moderators from './overview.moderators.vue';
 const meta = {
 	title: 'pages/admin/overview.moderators',
 	component: overview_moderators,
-};
+} satisfies Meta<typeof overview_moderators>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_moderators>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index 3c9844e206..c27809cab5 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_pie from './overview.pie.vue';
 const meta = {
 	title: 'pages/admin/overview.pie',
 	component: overview_pie,
-};
+} satisfies Meta<typeof overview_pie>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_pie>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index 848300fe07..fcf1566e99 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_queue_chart from './overview.queue.chart.vue';
 const meta = {
 	title: 'pages/admin/overview.queue.chart',
 	component: overview_queue_chart,
-};
+} satisfies Meta<typeof overview_queue_chart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_queue_chart>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index e3f4bfca52..f67609c18f 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_queue from './overview.queue.vue';
 const meta = {
 	title: 'pages/admin/overview.queue',
 	component: overview_queue,
-};
+} satisfies Meta<typeof overview_queue>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_queue>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index 3e1c5a89bc..b7941e8728 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_retention from './overview.retention.vue';
 const meta = {
 	title: 'pages/admin/overview.retention',
 	component: overview_retention,
-};
+} satisfies Meta<typeof overview_retention>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_retention>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 0c368aaddc..411ab4728d 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_stats from './overview.stats.vue';
 const meta = {
 	title: 'pages/admin/overview.stats',
 	component: overview_stats,
-};
+} satisfies Meta<typeof overview_stats>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_stats>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index de388bd48e..4f557e6ff0 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview from './overview.vue';
 const meta = {
 	title: 'pages/admin/overview',
 	component: overview,
-};
+} satisfies Meta<typeof overview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 3846e67011..7809a2bd8c 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import overview_users from './overview.users.vue';
 const meta = {
 	title: 'pages/admin/overview.users',
 	component: overview_users,
-};
+} satisfies Meta<typeof overview_users>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof overview_users>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 04fa3e1b68..9fed56fccc 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import proxy_account from './proxy-account.vue';
 const meta = {
 	title: 'pages/admin/proxy-account',
 	component: proxy_account,
-};
+} satisfies Meta<typeof proxy_account>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof proxy_account>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 95a1f0a5e3..83bb392849 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import queue_chart_chart from './queue.chart.chart.vue';
 const meta = {
 	title: 'pages/admin/queue.chart.chart',
 	component: queue_chart_chart,
-};
+} satisfies Meta<typeof queue_chart_chart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof queue_chart_chart>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index 48c9aba4b8..105e5c9ef3 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import queue_chart from './queue.chart.vue';
 const meta = {
 	title: 'pages/admin/queue.chart',
 	component: queue_chart,
-};
+} satisfies Meta<typeof queue_chart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof queue_chart>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index 08a32d0402..deb2445121 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import queue from './queue.vue';
 const meta = {
 	title: 'pages/admin/queue',
 	component: queue,
-};
+} satisfies Meta<typeof queue>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof queue>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index aabd4d2fcf..c229b97fe6 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import relays from './relays.vue';
 const meta = {
 	title: 'pages/admin/relays',
 	component: relays,
-};
+} satisfies Meta<typeof relays>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof relays>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index 148cad434b..ed6f3dd9f4 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import roles_edit from './roles.edit.vue';
 const meta = {
 	title: 'pages/admin/roles.edit',
 	component: roles_edit,
-};
+} satisfies Meta<typeof roles_edit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof roles_edit>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index 91f0cd6656..201a2cf78c 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import roles_editor from './roles.editor.vue';
 const meta = {
 	title: 'pages/admin/roles.editor',
 	component: roles_editor,
-};
+} satisfies Meta<typeof roles_editor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof roles_editor>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index 4847b5d272..ae3a51a643 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import roles_role from './roles.role.vue';
 const meta = {
 	title: 'pages/admin/roles.role',
 	component: roles_role,
-};
+} satisfies Meta<typeof roles_role>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof roles_role>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index 1c6abb42be..4f789089ff 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import roles from './roles.vue';
 const meta = {
 	title: 'pages/admin/roles',
 	component: roles,
-};
+} satisfies Meta<typeof roles>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof roles>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index 8785d2caf9..e483d86915 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import security from './security.vue';
 const meta = {
 	title: 'pages/admin/security',
 	component: security,
-};
+} satisfies Meta<typeof security>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof security>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index 75a99d78ce..379cac5ba9 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import settings from './settings.vue';
 const meta = {
 	title: 'pages/admin/settings',
 	component: settings,
-};
+} satisfies Meta<typeof settings>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof settings>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index 7d849fcece..2b02b44e89 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import users from './users.vue';
 const meta = {
 	title: 'pages/admin/users',
 	component: users,
-};
+} satisfies Meta<typeof users>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof users>;
 export default meta;
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index c02055d8ea..0bfae5ec48 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import ads from './ads.vue';
 const meta = {
 	title: 'pages/ads',
 	component: ads,
-};
+} satisfies Meta<typeof ads>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof ads>;
 export default meta;
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index 4835a4c327..b882ca5a3c 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import announcements from './announcements.vue';
 const meta = {
 	title: 'pages/announcements',
 	component: announcements,
-};
+} satisfies Meta<typeof announcements>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof announcements>;
 export default meta;
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index c16f408a53..20cba71e7e 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import antenna_timeline from './antenna-timeline.vue';
 const meta = {
 	title: 'pages/antenna-timeline',
 	component: antenna_timeline,
-};
+} satisfies Meta<typeof antenna_timeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof antenna_timeline>;
 export default meta;
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index dda2502d5a..015c50b87c 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import api_console from './api-console.vue';
 const meta = {
 	title: 'pages/api-console',
 	component: api_console,
-};
+} satisfies Meta<typeof api_console>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof api_console>;
 export default meta;
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 6cdae41880..30358e2d11 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import auth_form from './auth.form.vue';
 const meta = {
 	title: 'pages/auth.form',
 	component: auth_form,
-};
+} satisfies Meta<typeof auth_form>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof auth_form>;
 export default meta;
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index 37f365581d..ebf3d2ac45 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import auth from './auth.vue';
 const meta = {
 	title: 'pages/auth',
 	component: auth,
-};
+} satisfies Meta<typeof auth>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof auth>;
 export default meta;
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index 9928ede95d..fa0eae5b36 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import channel_editor from './channel-editor.vue';
 const meta = {
 	title: 'pages/channel-editor',
 	component: channel_editor,
-};
+} satisfies Meta<typeof channel_editor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof channel_editor>;
 export default meta;
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index bcb5b82222..daf90c86ff 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import channel from './channel.vue';
 const meta = {
 	title: 'pages/channel',
 	component: channel,
-};
+} satisfies Meta<typeof channel>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof channel>;
 export default meta;
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index 0e35ca4531..3bab3c0263 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import channels from './channels.vue';
 const meta = {
 	title: 'pages/channels',
 	component: channels,
-};
+} satisfies Meta<typeof channels>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof channels>;
 export default meta;
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index 5ed6fc048d..7229ed1290 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import clicker from './clicker.vue';
 const meta = {
 	title: 'pages/clicker',
 	component: clicker,
-};
+} satisfies Meta<typeof clicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof clicker>;
 export default meta;
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index c2e6f056f0..1c11467c03 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import clip from './clip.vue';
 const meta = {
 	title: 'pages/clip',
 	component: clip,
-};
+} satisfies Meta<typeof clip>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof clip>;
 export default meta;
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 44d87b4288..9f05aa76d4 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import custom_emojis_manager from './custom-emojis-manager.vue';
 const meta = {
 	title: 'pages/custom-emojis-manager',
 	component: custom_emojis_manager,
-};
+} satisfies Meta<typeof custom_emojis_manager>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof custom_emojis_manager>;
 export default meta;
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index 56c6ff72d9..04d767be63 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import drive from './drive.vue';
 const meta = {
 	title: 'pages/drive',
 	component: drive,
-};
+} satisfies Meta<typeof drive>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof drive>;
 export default meta;
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index e675bbe438..fba0df28e0 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import emoji_edit_dialog from './emoji-edit-dialog.vue';
 const meta = {
 	title: 'pages/emoji-edit-dialog',
 	component: emoji_edit_dialog,
-};
+} satisfies Meta<typeof emoji_edit_dialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof emoji_edit_dialog>;
 export default meta;
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index bda94c9b9a..76a6598b0f 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import emojis_emoji from './emojis.emoji.vue';
 const meta = {
 	title: 'pages/emojis.emoji',
 	component: emojis_emoji,
-};
+} satisfies Meta<typeof emojis_emoji>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof emojis_emoji>;
 export default meta;
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index b04eee4264..7c5a7e7527 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import explore_featured from './explore.featured.vue';
 const meta = {
 	title: 'pages/explore.featured',
 	component: explore_featured,
-};
+} satisfies Meta<typeof explore_featured>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof explore_featured>;
 export default meta;
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index 44ff94c7ae..636403b7ae 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import explore_roles from './explore.roles.vue';
 const meta = {
 	title: 'pages/explore.roles',
 	component: explore_roles,
-};
+} satisfies Meta<typeof explore_roles>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof explore_roles>;
 export default meta;
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index 5aa5efe566..2d5425c197 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import explore from './explore.vue';
 const meta = {
 	title: 'pages/explore',
 	component: explore,
-};
+} satisfies Meta<typeof explore>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof explore>;
 export default meta;
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index 4ce52c9886..b8a61d311b 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import explore_users from './explore.users.vue';
 const meta = {
 	title: 'pages/explore.users',
 	component: explore_users,
-};
+} satisfies Meta<typeof explore_users>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof explore_users>;
 export default meta;
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 76c1882195..33189eb6d6 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import favorites from './favorites.vue';
 const meta = {
 	title: 'pages/favorites',
 	component: favorites,
-};
+} satisfies Meta<typeof favorites>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof favorites>;
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index 27376858e0..a280a9c74f 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import flash_edit from './flash-edit.vue';
 const meta = {
 	title: 'pages/flash/flash-edit',
 	component: flash_edit,
-};
+} satisfies Meta<typeof flash_edit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof flash_edit>;
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 327506577f..0452a498ca 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import flash_index from './flash-index.vue';
 const meta = {
 	title: 'pages/flash/flash-index',
 	component: flash_index,
-};
+} satisfies Meta<typeof flash_index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof flash_index>;
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index e0ff01a0b8..1fb4f9406f 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import flash from './flash.vue';
 const meta = {
 	title: 'pages/flash/flash',
 	component: flash,
-};
+} satisfies Meta<typeof flash>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof flash>;
 export default meta;
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index 8654604b6f..a13906dcc9 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import follow_requests from './follow-requests.vue';
 const meta = {
 	title: 'pages/follow-requests',
 	component: follow_requests,
-};
+} satisfies Meta<typeof follow_requests>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof follow_requests>;
 export default meta;
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index b9090d158b..b833f094d5 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import follow from './follow.vue';
 const meta = {
 	title: 'pages/follow',
 	component: follow,
-};
+} satisfies Meta<typeof follow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof follow>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index 6bf05086b6..ae8e9bf3ff 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import edit from './edit.vue';
 const meta = {
 	title: 'pages/gallery/edit',
 	component: edit,
-};
+} satisfies Meta<typeof edit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof edit>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index 57d8be035a..36ca145387 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/gallery/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index 1bafccebde..b94095c815 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import post from './post.vue';
 const meta = {
 	title: 'pages/gallery/post',
 	component: post,
-};
+} satisfies Meta<typeof post>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof post>;
 export default meta;
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index 311a27a877..c09cb3dc8f 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import instance_info from './instance-info.vue';
 const meta = {
 	title: 'pages/instance-info',
 	component: instance_info,
-};
+} satisfies Meta<typeof instance_info>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof instance_info>;
 export default meta;
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index b668f03cd0..1ef072dbf5 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import miauth from './miauth.vue';
 const meta = {
 	title: 'pages/miauth',
 	component: miauth,
-};
+} satisfies Meta<typeof miauth>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof miauth>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index 310cfe61f7..615f856145 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import create from './create.vue';
 const meta = {
 	title: 'pages/my-antennas/create',
 	component: create,
-};
+} satisfies Meta<typeof create>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof create>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index 51202b066e..0e3d882f75 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import edit from './edit.vue';
 const meta = {
 	title: 'pages/my-antennas/edit',
 	component: edit,
-};
+} satisfies Meta<typeof edit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof edit>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index 88a96edffb..7d84732ea5 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import editor from './editor.vue';
 const meta = {
 	title: 'pages/my-antennas/editor',
 	component: editor,
-};
+} satisfies Meta<typeof editor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof editor>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index f0c356b49b..cf2a08a82c 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/my-antennas/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index a84ba350bc..2f8c0b0ce7 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/my-clips/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index ae76937e09..33bf24cdce 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/my-lists/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index 7ed8f30097..50791af89a 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import list from './list.vue';
 const meta = {
 	title: 'pages/my-lists/list',
 	component: list,
-};
+} satisfies Meta<typeof list>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof list>;
 export default meta;
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index 03c1b8103d..29ee7f1c33 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import not_found from './not-found.vue';
 const meta = {
 	title: 'pages/not-found',
 	component: not_found,
-};
+} satisfies Meta<typeof not_found>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof not_found>;
 export default meta;
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index fc88632ce0..2ee7bc9d66 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import note from './note.vue';
 const meta = {
 	title: 'pages/note',
 	component: note,
-};
+} satisfies Meta<typeof note>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof note>;
 export default meta;
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index 8a81613b09..47f904a949 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import notifications from './notifications.vue';
 const meta = {
 	title: 'pages/notifications',
 	component: notifications,
-};
+} satisfies Meta<typeof notifications>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof notifications>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 94eeb054c6..5e06e31447 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_image from './page-editor.el.image.vue';
 const meta = {
 	title: 'pages/page-editor/els/page-editor.el.image',
 	component: page_editor_el_image,
-};
+} satisfies Meta<typeof page_editor_el_image>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_el_image>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 9b767672c5..0cb64ffc40 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_note from './page-editor.el.note.vue';
 const meta = {
 	title: 'pages/page-editor/els/page-editor.el.note',
 	component: page_editor_el_note,
-};
+} satisfies Meta<typeof page_editor_el_note>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_el_note>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index f40039517a..f294a7d128 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_section from './page-editor.el.section.vue';
 const meta = {
 	title: 'pages/page-editor/els/page-editor.el.section',
 	component: page_editor_el_section,
-};
+} satisfies Meta<typeof page_editor_el_section>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_el_section>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index 6e4bc9bbd4..5b1b1ca397 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_text from './page-editor.el.text.vue';
 const meta = {
 	title: 'pages/page-editor/els/page-editor.el.text',
 	component: page_editor_el_text,
-};
+} satisfies Meta<typeof page_editor_el_text>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_el_text>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index e753a96028..65b4f56a6d 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_blocks from './page-editor.blocks.vue';
 const meta = {
 	title: 'pages/page-editor/page-editor.blocks',
 	component: page_editor_blocks,
-};
+} satisfies Meta<typeof page_editor_blocks>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_blocks>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 77a4836f3b..49f9437cee 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_container from './page-editor.container.vue';
 const meta = {
 	title: 'pages/page-editor/page-editor.container',
 	component: page_editor_container,
-};
+} satisfies Meta<typeof page_editor_container>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor_container>;
 export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index 59c0989381..e044fc5ac3 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor from './page-editor.vue';
 const meta = {
 	title: 'pages/page-editor/page-editor',
 	component: page_editor,
-};
+} satisfies Meta<typeof page_editor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page_editor>;
 export default meta;
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index 910deaca49..5e78ad4801 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import page from './page.vue';
 const meta = {
 	title: 'pages/page',
 	component: page,
-};
+} satisfies Meta<typeof page>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof page>;
 export default meta;
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index 2d8f53bda1..249e4e377e 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import pages from './pages.vue';
 const meta = {
 	title: 'pages/pages',
 	component: pages,
-};
+} satisfies Meta<typeof pages>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof pages>;
 export default meta;
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index 6605c45876..9131e31061 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import preview from './preview.vue';
 const meta = {
 	title: 'pages/preview',
 	component: preview,
-};
+} satisfies Meta<typeof preview>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof preview>;
 export default meta;
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 0d710acff3..9843a5f014 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import registry_keys from './registry.keys.vue';
 const meta = {
 	title: 'pages/registry.keys',
 	component: registry_keys,
-};
+} satisfies Meta<typeof registry_keys>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof registry_keys>;
 export default meta;
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index 776c153adc..c28edaa870 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import registry from './registry.vue';
 const meta = {
 	title: 'pages/registry',
 	component: registry,
-};
+} satisfies Meta<typeof registry>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof registry>;
 export default meta;
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index d90bc4edda..91e2afc987 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import registry_value from './registry.value.vue';
 const meta = {
 	title: 'pages/registry.value',
 	component: registry_value,
-};
+} satisfies Meta<typeof registry_value>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof registry_value>;
 export default meta;
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index e478a2706e..add1262acf 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import reset_password from './reset-password.vue';
 const meta = {
 	title: 'pages/reset-password',
 	component: reset_password,
-};
+} satisfies Meta<typeof reset_password>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof reset_password>;
 export default meta;
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index f1cfe66607..e2bfe127ba 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import role from './role.vue';
 const meta = {
 	title: 'pages/role',
 	component: role,
-};
+} satisfies Meta<typeof role>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof role>;
 export default meta;
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index a5ea5b36e3..9ec876c4ea 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import scratchpad from './scratchpad.vue';
 const meta = {
 	title: 'pages/scratchpad',
 	component: scratchpad,
-};
+} satisfies Meta<typeof scratchpad>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof scratchpad>;
 export default meta;
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 05d2603dfe..9200f38160 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import search from './search.vue';
 const meta = {
 	title: 'pages/search',
 	component: search,
-};
+} satisfies Meta<typeof search>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof search>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index 54d1d959b2..fc9a221e40 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _2fa_qrdialog from './2fa.qrdialog.vue';
 const meta = {
 	title: 'pages/settings/2fa.qrdialog',
 	component: _2fa_qrdialog,
-};
+} satisfies Meta<typeof _2fa_qrdialog>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _2fa_qrdialog>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 9d6a887484..540753b61c 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import _2fa from './2fa.vue';
 const meta = {
 	title: 'pages/settings/2fa',
 	component: _2fa,
-};
+} satisfies Meta<typeof _2fa>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof _2fa>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index 0fb998b3e4..d7871eb875 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import account_info from './account-info.vue';
 const meta = {
 	title: 'pages/settings/account-info',
 	component: account_info,
-};
+} satisfies Meta<typeof account_info>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof account_info>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index 9996274c78..4445ffd815 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import accounts from './accounts.vue';
 const meta = {
 	title: 'pages/settings/accounts',
 	component: accounts,
-};
+} satisfies Meta<typeof accounts>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof accounts>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index bb3194c561..ab74444191 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import api from './api.vue';
 const meta = {
 	title: 'pages/settings/api',
 	component: api,
-};
+} satisfies Meta<typeof api>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof api>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index 038848986b..f82b8e3640 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import apps from './apps.vue';
 const meta = {
 	title: 'pages/settings/apps',
 	component: apps,
-};
+} satisfies Meta<typeof apps>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof apps>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index 7b7cc913fc..6c861d419e 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import custom_css from './custom-css.vue';
 const meta = {
 	title: 'pages/settings/custom-css',
 	component: custom_css,
-};
+} satisfies Meta<typeof custom_css>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof custom_css>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index e6c51bc005..1762786675 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import deck from './deck.vue';
 const meta = {
 	title: 'pages/settings/deck',
 	component: deck,
-};
+} satisfies Meta<typeof deck>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof deck>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index 4f5cf2c094..32b8f00670 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import delete_account from './delete-account.vue';
 const meta = {
 	title: 'pages/settings/delete-account',
 	component: delete_account,
-};
+} satisfies Meta<typeof delete_account>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof delete_account>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index 140615641c..29328bac81 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import drive from './drive.vue';
 const meta = {
 	title: 'pages/settings/drive',
 	component: drive,
-};
+} satisfies Meta<typeof drive>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof drive>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index 043f23a484..8d3e25263a 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import email from './email.vue';
 const meta = {
 	title: 'pages/settings/email',
 	component: email,
-};
+} satisfies Meta<typeof email>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof email>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index 09237cf350..e85cead28a 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import general from './general.vue';
 const meta = {
 	title: 'pages/settings/general',
 	component: general,
-};
+} satisfies Meta<typeof general>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof general>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index 9d05bd5c25..af45540613 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import import_export from './import-export.vue';
 const meta = {
 	title: 'pages/settings/import-export',
 	component: import_export,
-};
+} satisfies Meta<typeof import_export>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof import_export>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index 6b5f9e0c3d..f2f5b94a46 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/settings/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index fb333bb1d0..8e62714af1 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import instance_mute from './instance-mute.vue';
 const meta = {
 	title: 'pages/settings/instance-mute',
 	component: instance_mute,
-};
+} satisfies Meta<typeof instance_mute>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof instance_mute>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index fd84608d50..6591d783f6 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import mute_block from './mute-block.vue';
 const meta = {
 	title: 'pages/settings/mute-block',
 	component: mute_block,
-};
+} satisfies Meta<typeof mute_block>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof mute_block>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index 3fc2b9a867..62fdbb0c80 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import navbar from './navbar.vue';
 const meta = {
 	title: 'pages/settings/navbar',
 	component: navbar,
-};
+} satisfies Meta<typeof navbar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof navbar>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index 0c19456852..ceceb9ff1b 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import notifications from './notifications.vue';
 const meta = {
 	title: 'pages/settings/notifications',
 	component: notifications,
-};
+} satisfies Meta<typeof notifications>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof notifications>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index 83e7cce2b4..d3e2d2d462 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import other from './other.vue';
 const meta = {
 	title: 'pages/settings/other',
 	component: other,
-};
+} satisfies Meta<typeof other>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof other>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index bace922ca8..d0b10f0e37 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import plugin_install from './plugin.install.vue';
 const meta = {
 	title: 'pages/settings/plugin.install',
 	component: plugin_install,
-};
+} satisfies Meta<typeof plugin_install>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof plugin_install>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index 88e14e32de..8e59824268 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import plugin from './plugin.vue';
 const meta = {
 	title: 'pages/settings/plugin',
 	component: plugin,
-};
+} satisfies Meta<typeof plugin>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof plugin>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 812329857f..7f27b48ce0 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import preferences_backups from './preferences-backups.vue';
 const meta = {
 	title: 'pages/settings/preferences-backups',
 	component: preferences_backups,
-};
+} satisfies Meta<typeof preferences_backups>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof preferences_backups>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index e2b2ab905b..b3cc031039 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import privacy from './privacy.vue';
 const meta = {
 	title: 'pages/settings/privacy',
 	component: privacy,
-};
+} satisfies Meta<typeof privacy>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof privacy>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index 302a1a37b9..f0d1684b0e 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import profile from './profile.vue';
 const meta = {
 	title: 'pages/settings/profile',
 	component: profile,
-};
+} satisfies Meta<typeof profile>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof profile>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index 7328d53bd7..a985ba34da 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import reaction from './reaction.vue';
 const meta = {
 	title: 'pages/settings/reaction',
 	component: reaction,
-};
+} satisfies Meta<typeof reaction>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof reaction>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index 0cbf932ce5..0ab5412f74 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import roles from './roles.vue';
 const meta = {
 	title: 'pages/settings/roles',
 	component: roles,
-};
+} satisfies Meta<typeof roles>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof roles>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index 7997beeca4..fb003ab05f 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import security from './security.vue';
 const meta = {
 	title: 'pages/settings/security',
 	component: security,
-};
+} satisfies Meta<typeof security>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof security>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index bb1d5fc873..c11573758c 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import sounds_sound from './sounds.sound.vue';
 const meta = {
 	title: 'pages/settings/sounds.sound',
 	component: sounds_sound,
-};
+} satisfies Meta<typeof sounds_sound>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof sounds_sound>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index 121f81ccab..a8304f2792 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import sounds from './sounds.vue';
 const meta = {
 	title: 'pages/settings/sounds',
 	component: sounds,
-};
+} satisfies Meta<typeof sounds>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof sounds>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 77e6f04e08..88d163337e 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_statusbar from './statusbar.statusbar.vue';
 const meta = {
 	title: 'pages/settings/statusbar.statusbar',
 	component: statusbar_statusbar,
-};
+} satisfies Meta<typeof statusbar_statusbar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof statusbar_statusbar>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 75f6acc6fb..9e2246c2a5 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar from './statusbar.vue';
 const meta = {
 	title: 'pages/settings/statusbar',
 	component: statusbar,
-};
+} satisfies Meta<typeof statusbar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof statusbar>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index 7aa772208e..ff8e996bf4 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import theme_install from './theme.install.vue';
 const meta = {
 	title: 'pages/settings/theme.install',
 	component: theme_install,
-};
+} satisfies Meta<typeof theme_install>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof theme_install>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index 42fe97c937..a03d8581e1 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import theme_manage from './theme.manage.vue';
 const meta = {
 	title: 'pages/settings/theme.manage',
 	component: theme_manage,
-};
+} satisfies Meta<typeof theme_manage>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof theme_manage>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index 93da070836..05d320b76d 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import theme from './theme.vue';
 const meta = {
 	title: 'pages/settings/theme',
 	component: theme,
-};
+} satisfies Meta<typeof theme>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof theme>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index 33952bb961..c3596bc031 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import webhook_edit from './webhook.edit.vue';
 const meta = {
 	title: 'pages/settings/webhook.edit',
 	component: webhook_edit,
-};
+} satisfies Meta<typeof webhook_edit>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof webhook_edit>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index 4f94b9758e..7d6677b81d 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import webhook_new from './webhook.new.vue';
 const meta = {
 	title: 'pages/settings/webhook.new',
 	component: webhook_new,
-};
+} satisfies Meta<typeof webhook_new>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof webhook_new>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index 18e95e337b..aaaf8b6fb0 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import webhook from './webhook.vue';
 const meta = {
 	title: 'pages/settings/webhook',
 	component: webhook,
-};
+} satisfies Meta<typeof webhook>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof webhook>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index 619143166b..f4145b814b 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import word_mute from './word-mute.vue';
 const meta = {
 	title: 'pages/settings/word-mute',
 	component: word_mute,
-};
+} satisfies Meta<typeof word_mute>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof word_mute>;
 export default meta;
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index 69a1127236..914f4e3a4e 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import share from './share.vue';
 const meta = {
 	title: 'pages/share',
 	component: share,
-};
+} satisfies Meta<typeof share>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof share>;
 export default meta;
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index c34c3722d2..7591c4d470 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import signup_complete from './signup-complete.vue';
 const meta = {
 	title: 'pages/signup-complete',
 	component: signup_complete,
-};
+} satisfies Meta<typeof signup_complete>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof signup_complete>;
 export default meta;
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index 8e39a7161a..1f8f3bb18b 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import tag from './tag.vue';
 const meta = {
 	title: 'pages/tag',
 	component: tag,
-};
+} satisfies Meta<typeof tag>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof tag>;
 export default meta;
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index 2ae21fef85..754a3574cd 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import theme_editor from './theme-editor.vue';
 const meta = {
 	title: 'pages/theme-editor',
 	component: theme_editor,
-};
+} satisfies Meta<typeof theme_editor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof theme_editor>;
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index 9acd55e1e3..5676cece40 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import timeline from './timeline.vue';
 const meta = {
 	title: 'pages/timeline',
 	component: timeline,
-};
+} satisfies Meta<typeof timeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof timeline>;
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index 0066d0d3d5..8799c9fcf8 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import timeline_tutorial from './timeline.tutorial.vue';
 const meta = {
 	title: 'pages/timeline.tutorial',
 	component: timeline_tutorial,
-};
+} satisfies Meta<typeof timeline_tutorial>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof timeline_tutorial>;
 export default meta;
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index 821a2e6bf8..b5a3782ad5 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import user_info from './user-info.vue';
 const meta = {
 	title: 'pages/user-info',
 	component: user_info,
-};
+} satisfies Meta<typeof user_info>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof user_info>;
 export default meta;
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index 16cde7e2fc..18457da47f 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import user_list_timeline from './user-list-timeline.vue';
 const meta = {
 	title: 'pages/user-list-timeline',
 	component: user_list_timeline,
-};
+} satisfies Meta<typeof user_list_timeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof user_list_timeline>;
 export default meta;
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 1637eec0d3..7ec9188e99 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import user_tag from './user-tag.vue';
 const meta = {
 	title: 'pages/user-tag',
 	component: user_tag,
-};
+} satisfies Meta<typeof user_tag>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof user_tag>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index ade9caa091..62dc7c86d7 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import achievements from './achievements.vue';
 const meta = {
 	title: 'pages/user/achievements',
 	component: achievements,
-};
+} satisfies Meta<typeof achievements>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof achievements>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index 8c1a19d1ae..9594aa1bd4 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import activity_following from './activity.following.vue';
 const meta = {
 	title: 'pages/user/activity.following',
 	component: activity_following,
-};
+} satisfies Meta<typeof activity_following>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof activity_following>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 44e7c8bc55..9578d1786d 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import activity_heatmap from './activity.heatmap.vue';
 const meta = {
 	title: 'pages/user/activity.heatmap',
 	component: activity_heatmap,
-};
+} satisfies Meta<typeof activity_heatmap>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof activity_heatmap>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index d4c45a3031..a07061fc64 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import activity_notes from './activity.notes.vue';
 const meta = {
 	title: 'pages/user/activity.notes',
 	component: activity_notes,
-};
+} satisfies Meta<typeof activity_notes>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof activity_notes>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index 9ceb716867..2933c7927d 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import activity_pv from './activity.pv.vue';
 const meta = {
 	title: 'pages/user/activity.pv',
 	component: activity_pv,
-};
+} satisfies Meta<typeof activity_pv>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof activity_pv>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index 88e887b423..4642f7d5c0 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import activity from './activity.vue';
 const meta = {
 	title: 'pages/user/activity',
 	component: activity,
-};
+} satisfies Meta<typeof activity>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof activity>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index d4b2535e92..7b4d155b69 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import clips from './clips.vue';
 const meta = {
 	title: 'pages/user/clips',
 	component: clips,
-};
+} satisfies Meta<typeof clips>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof clips>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index 171a1b4358..b2b3eb7a90 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import follow_list from './follow-list.vue';
 const meta = {
 	title: 'pages/user/follow-list',
 	component: follow_list,
-};
+} satisfies Meta<typeof follow_list>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof follow_list>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index 92385dc1e2..eecc122d4d 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import followers from './followers.vue';
 const meta = {
 	title: 'pages/user/followers',
 	component: followers,
-};
+} satisfies Meta<typeof followers>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof followers>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index 98479f85b0..debbb9610d 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import following from './following.vue';
 const meta = {
 	title: 'pages/user/following',
 	component: following,
-};
+} satisfies Meta<typeof following>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof following>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index ad38c5c7b0..8255498592 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import gallery from './gallery.vue';
 const meta = {
 	title: 'pages/user/gallery',
 	component: gallery,
-};
+} satisfies Meta<typeof gallery>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof gallery>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index d300f35af7..af3dd6231a 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import home from './home.vue';
 const meta = {
 	title: 'pages/user/home',
 	component: home,
-};
+} satisfies Meta<typeof home>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof home>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index 9758be90cc..ffdfa16b1a 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index_activity from './index.activity.vue';
 const meta = {
 	title: 'pages/user/index.activity',
 	component: index_activity,
-};
+} satisfies Meta<typeof index_activity>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index_activity>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index cf75985e74..c39bae3568 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index_photos from './index.photos.vue';
 const meta = {
 	title: 'pages/user/index.photos',
 	component: index_photos,
-};
+} satisfies Meta<typeof index_photos>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index_photos>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index ee8176e388..ba498f7acb 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'pages/user/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index 09dd96f00a..27cdf80d42 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index_timeline from './index.timeline.vue';
 const meta = {
 	title: 'pages/user/index.timeline',
 	component: index_timeline,
-};
+} satisfies Meta<typeof index_timeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof index_timeline>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index b0e19bd13b..50a696362a 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import pages from './pages.vue';
 const meta = {
 	title: 'pages/user/pages',
 	component: pages,
-};
+} satisfies Meta<typeof pages>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof pages>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index 40288b8ba5..a590b8f20f 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import reactions from './reactions.vue';
 const meta = {
 	title: 'pages/user/reactions',
 	component: reactions,
-};
+} satisfies Meta<typeof reactions>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof reactions>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index d9cfbc1788..d8ba7deb13 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_a from './welcome.entrance.a.vue';
 const meta = {
 	title: 'pages/welcome.entrance.a',
 	component: welcome_entrance_a,
-};
+} satisfies Meta<typeof welcome_entrance_a>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome_entrance_a>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index 0850cfc14e..81980c5b0b 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_b from './welcome.entrance.b.vue';
 const meta = {
 	title: 'pages/welcome.entrance.b',
 	component: welcome_entrance_b,
-};
+} satisfies Meta<typeof welcome_entrance_b>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome_entrance_b>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index f125157a86..f2832056d8 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_c from './welcome.entrance.c.vue';
 const meta = {
 	title: 'pages/welcome.entrance.c',
 	component: welcome_entrance_c,
-};
+} satisfies Meta<typeof welcome_entrance_c>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome_entrance_c>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index 5c5f7a1005..81e2e50835 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_setup from './welcome.setup.vue';
 const meta = {
 	title: 'pages/welcome.setup',
 	component: welcome_setup,
-};
+} satisfies Meta<typeof welcome_setup>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome_setup>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index a1a95e43fb..c062a7717a 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome from './welcome.vue';
 const meta = {
 	title: 'pages/welcome',
 	component: welcome,
-};
+} satisfies Meta<typeof welcome>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index 0dcaf112ff..fc1a7b3462 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_timeline from './welcome.timeline.vue';
 const meta = {
 	title: 'pages/welcome.timeline',
 	component: welcome_timeline,
-};
+} satisfies Meta<typeof welcome_timeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof welcome_timeline>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index e64c41be77..3ef6fc54b7 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import common from './common.vue';
 const meta = {
 	title: 'ui/_common_/common',
 	component: common,
-};
+} satisfies Meta<typeof common>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof common>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index 36658a6c3f..e6b81fc2bb 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import navbar_for_mobile from './navbar-for-mobile.vue';
 const meta = {
 	title: 'ui/_common_/navbar-for-mobile',
 	component: navbar_for_mobile,
-};
+} satisfies Meta<typeof navbar_for_mobile>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof navbar_for_mobile>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index ceeb4f0158..f118d22f04 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import navbar from './navbar.vue';
 const meta = {
 	title: 'ui/_common_/navbar',
 	component: navbar,
-};
+} satisfies Meta<typeof navbar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof navbar>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index d0175f87fb..f8bb87f352 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import notification from './notification.vue';
 const meta = {
 	title: 'ui/_common_/notification',
 	component: notification,
-};
+} satisfies Meta<typeof notification>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof notification>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index 68ace58336..d809ce3238 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_federation from './statusbar-federation.vue';
 const meta = {
 	title: 'ui/_common_/statusbar-federation',
 	component: statusbar_federation,
-};
+} satisfies Meta<typeof statusbar_federation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof statusbar_federation>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index 86d16757f6..f20f7bfb94 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_rss from './statusbar-rss.vue';
 const meta = {
 	title: 'ui/_common_/statusbar-rss',
 	component: statusbar_rss,
-};
+} satisfies Meta<typeof statusbar_rss>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof statusbar_rss>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index e111143890..eacae75f0f 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_user_list from './statusbar-user-list.vue';
 const meta = {
 	title: 'ui/_common_/statusbar-user-list',
 	component: statusbar_user_list,
-};
+} satisfies Meta<typeof statusbar_user_list>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof statusbar_user_list>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index 57cbd826f8..0ff1faabc5 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import statusbars from './statusbars.vue';
 const meta = {
 	title: 'ui/_common_/statusbars',
 	component: statusbars,
-};
+} satisfies Meta<typeof statusbars>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof statusbars>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index 39cde128b9..1430849c67 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import stream_indicator from './stream-indicator.vue';
 const meta = {
 	title: 'ui/_common_/stream-indicator',
 	component: stream_indicator,
-};
+} satisfies Meta<typeof stream_indicator>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof stream_indicator>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index e6d85f5392..612db18122 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import upload from './upload.vue';
 const meta = {
 	title: 'ui/_common_/upload',
 	component: upload,
-};
+} satisfies Meta<typeof upload>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof upload>;
 export default meta;
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index cc847e7126..aa3965204c 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import classic_header from './classic.header.vue';
 const meta = {
 	title: 'ui/classic.header',
 	component: classic_header,
-};
+} satisfies Meta<typeof classic_header>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof classic_header>;
 export default meta;
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index 741da3d146..cb3c5e4b64 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import classic_sidebar from './classic.sidebar.vue';
 const meta = {
 	title: 'ui/classic.sidebar',
 	component: classic_sidebar,
-};
+} satisfies Meta<typeof classic_sidebar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof classic_sidebar>;
 export default meta;
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index cd32251735..52d53990eb 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import classic from './classic.vue';
 const meta = {
 	title: 'ui/classic',
 	component: classic,
-};
+} satisfies Meta<typeof classic>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof classic>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index 34bd26ace9..d84ae4341c 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import deck from './deck.vue';
 const meta = {
 	title: 'ui/deck',
 	component: deck,
-};
+} satisfies Meta<typeof deck>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof deck>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index 37f6bace9c..080d2464fc 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import antenna_column from './antenna-column.vue';
 const meta = {
 	title: 'ui/deck/antenna-column',
 	component: antenna_column,
-};
+} satisfies Meta<typeof antenna_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof antenna_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index 3a4a232d05..8cb9b10008 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import channel_column from './channel-column.vue';
 const meta = {
 	title: 'ui/deck/channel-column',
 	component: channel_column,
-};
+} satisfies Meta<typeof channel_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof channel_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index 14174bf723..7bb2a2ff11 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import column_core from './column-core.vue';
 const meta = {
 	title: 'ui/deck/column-core',
 	component: column_core,
-};
+} satisfies Meta<typeof column_core>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof column_core>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index 7c3e7b69e0..8513fbe1d3 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import column from './column.vue';
 const meta = {
 	title: 'ui/deck/column',
 	component: column,
-};
+} satisfies Meta<typeof column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index a7ce6757ed..60c1b24896 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import direct_column from './direct-column.vue';
 const meta = {
 	title: 'ui/deck/direct-column',
 	component: direct_column,
-};
+} satisfies Meta<typeof direct_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof direct_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index 7d2745f4a9..8a0cd8888d 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import list_column from './list-column.vue';
 const meta = {
 	title: 'ui/deck/list-column',
 	component: list_column,
-};
+} satisfies Meta<typeof list_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof list_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index 60021a5d78..6d35056a1d 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import main_column from './main-column.vue';
 const meta = {
 	title: 'ui/deck/main-column',
 	component: main_column,
-};
+} satisfies Meta<typeof main_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof main_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index 16e2b2e1d7..e88931d38c 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import mentions_column from './mentions-column.vue';
 const meta = {
 	title: 'ui/deck/mentions-column',
 	component: mentions_column,
-};
+} satisfies Meta<typeof mentions_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof mentions_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index 06d18ef9b3..c8e81f3d7e 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import notifications_column from './notifications-column.vue';
 const meta = {
 	title: 'ui/deck/notifications-column',
 	component: notifications_column,
-};
+} satisfies Meta<typeof notifications_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof notifications_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index 741464063d..1205c2dfaf 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import tl_column from './tl-column.vue';
 const meta = {
 	title: 'ui/deck/tl-column',
 	component: tl_column,
-};
+} satisfies Meta<typeof tl_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof tl_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index 27a392cf6e..9cfe50297a 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import widgets_column from './widgets-column.vue';
 const meta = {
 	title: 'ui/deck/widgets-column',
 	component: widgets_column,
-};
+} satisfies Meta<typeof widgets_column>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof widgets_column>;
 export default meta;
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index d049fb3ae9..cb5c183e6b 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import universal from './universal.vue';
 const meta = {
 	title: 'ui/universal',
 	component: universal,
-};
+} satisfies Meta<typeof universal>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof universal>;
 export default meta;
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index 8c85bf27e0..5e7a208add 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import universal_widgets from './universal.widgets.vue';
 const meta = {
 	title: 'ui/universal.widgets',
 	component: universal_widgets,
-};
+} satisfies Meta<typeof universal_widgets>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof universal_widgets>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index 5a725cb4b8..df84e3a890 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import visitor from './visitor.vue';
 const meta = {
 	title: 'ui/visitor',
 	component: visitor,
-};
+} satisfies Meta<typeof visitor>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof visitor>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index e430cd9743..19ca049d7f 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import a from './a.vue';
 const meta = {
 	title: 'ui/visitor/a',
 	component: a,
-};
+} satisfies Meta<typeof a>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof a>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index f329bae1a4..9bb781b18c 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import b from './b.vue';
 const meta = {
 	title: 'ui/visitor/b',
 	component: b,
-};
+} satisfies Meta<typeof b>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof b>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index 2ecd08b220..67e8cee3dc 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import header from './header.vue';
 const meta = {
 	title: 'ui/visitor/header',
 	component: header,
-};
+} satisfies Meta<typeof header>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof header>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index 4468ebc8a5..cef3e51cc4 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import kanban from './kanban.vue';
 const meta = {
 	title: 'ui/visitor/kanban',
 	component: kanban,
-};
+} satisfies Meta<typeof kanban>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof kanban>;
 export default meta;
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index ff8c8bca9a..ce3d1d91fc 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import zen from './zen.vue';
 const meta = {
 	title: 'ui/zen',
 	component: zen,
-};
+} satisfies Meta<typeof zen>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof zen>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index 5f2d78036c..e85f814f26 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity_calendar from './WidgetActivity.calendar.vue';
 const meta = {
 	title: 'widgets/WidgetActivity.calendar',
 	component: WidgetActivity_calendar,
-};
+} satisfies Meta<typeof WidgetActivity_calendar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetActivity_calendar>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index 3cecf4a68e..91843a941a 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity_chart from './WidgetActivity.chart.vue';
 const meta = {
 	title: 'widgets/WidgetActivity.chart',
 	component: WidgetActivity_chart,
-};
+} satisfies Meta<typeof WidgetActivity_chart>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetActivity_chart>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
index 01658db95d..c36fd76714 100644
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity from './WidgetActivity.vue';
 const meta = {
 	title: 'widgets/WidgetActivity',
 	component: WidgetActivity,
-};
+} satisfies Meta<typeof WidgetActivity>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetActivity>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
index b997f368a7..a10d99f933 100644
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAichan from './WidgetAichan.vue';
 const meta = {
 	title: 'widgets/WidgetAichan',
 	component: WidgetAichan,
-};
+} satisfies Meta<typeof WidgetAichan>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetAichan>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
index f64cf77995..b9217a5c80 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAiscript from './WidgetAiscript.vue';
 const meta = {
 	title: 'widgets/WidgetAiscript',
 	component: WidgetAiscript,
-};
+} satisfies Meta<typeof WidgetAiscript>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetAiscript>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
index 892110bc25..261b744c4a 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAiscriptApp from './WidgetAiscriptApp.vue';
 const meta = {
 	title: 'widgets/WidgetAiscriptApp',
 	component: WidgetAiscriptApp,
-};
+} satisfies Meta<typeof WidgetAiscriptApp>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetAiscriptApp>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
index 3a07679d77..021b212a7e 100644
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetButton from './WidgetButton.vue';
 const meta = {
 	title: 'widgets/WidgetButton',
 	component: WidgetButton,
-};
+} satisfies Meta<typeof WidgetButton>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetButton>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
index ccb7c184b4..3b66d9c15b 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetCalendar from './WidgetCalendar.vue';
 const meta = {
 	title: 'widgets/WidgetCalendar',
 	component: WidgetCalendar,
-};
+} satisfies Meta<typeof WidgetCalendar>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetCalendar>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
index ce6d40064b..70f793a21f 100644
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetClicker from './WidgetClicker.vue';
 const meta = {
 	title: 'widgets/WidgetClicker',
 	component: WidgetClicker,
-};
+} satisfies Meta<typeof WidgetClicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetClicker>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
index 0eb10f1f07..9cfe80943b 100644
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetClock from './WidgetClock.vue';
 const meta = {
 	title: 'widgets/WidgetClock',
 	component: WidgetClock,
-};
+} satisfies Meta<typeof WidgetClock>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetClock>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
index e37c4108dc..de351f4440 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetDigitalClock from './WidgetDigitalClock.vue';
 const meta = {
 	title: 'widgets/WidgetDigitalClock',
 	component: WidgetDigitalClock,
-};
+} satisfies Meta<typeof WidgetDigitalClock>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetDigitalClock>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
index 549f71c6fd..50900465ad 100644
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetFederation from './WidgetFederation.vue';
 const meta = {
 	title: 'widgets/WidgetFederation',
 	component: WidgetFederation,
-};
+} satisfies Meta<typeof WidgetFederation>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetFederation>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
index 8458d842f5..477a66f461 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetInstanceCloud from './WidgetInstanceCloud.vue';
 const meta = {
 	title: 'widgets/WidgetInstanceCloud',
 	component: WidgetInstanceCloud,
-};
+} satisfies Meta<typeof WidgetInstanceCloud>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetInstanceCloud>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
index 6a6505a799..bccae94dd8 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetInstanceInfo from './WidgetInstanceInfo.vue';
 const meta = {
 	title: 'widgets/WidgetInstanceInfo',
 	component: WidgetInstanceInfo,
-};
+} satisfies Meta<typeof WidgetInstanceInfo>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetInstanceInfo>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
index de7a7431c5..43d7f0198d 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetJobQueue from './WidgetJobQueue.vue';
 const meta = {
 	title: 'widgets/WidgetJobQueue',
 	component: WidgetJobQueue,
-};
+} satisfies Meta<typeof WidgetJobQueue>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetJobQueue>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
index 202529c8a5..75651a52b1 100644
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetMemo from './WidgetMemo.vue';
 const meta = {
 	title: 'widgets/WidgetMemo',
 	component: WidgetMemo,
-};
+} satisfies Meta<typeof WidgetMemo>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetMemo>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
index bf1f7aecae..d6249f4c06 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetNotifications from './WidgetNotifications.vue';
 const meta = {
 	title: 'widgets/WidgetNotifications',
 	component: WidgetNotifications,
-};
+} satisfies Meta<typeof WidgetNotifications>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetNotifications>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
index fa7371a499..b7cae9b579 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetOnlineUsers from './WidgetOnlineUsers.vue';
 const meta = {
 	title: 'widgets/WidgetOnlineUsers',
 	component: WidgetOnlineUsers,
-};
+} satisfies Meta<typeof WidgetOnlineUsers>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetOnlineUsers>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
index 4e335e01c2..36c9c76d37 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetPhotos from './WidgetPhotos.vue';
 const meta = {
 	title: 'widgets/WidgetPhotos',
 	component: WidgetPhotos,
-};
+} satisfies Meta<typeof WidgetPhotos>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetPhotos>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
index 5d03be5ce2..a74c59b107 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetPostForm from './WidgetPostForm.vue';
 const meta = {
 	title: 'widgets/WidgetPostForm',
 	component: WidgetPostForm,
-};
+} satisfies Meta<typeof WidgetPostForm>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetPostForm>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
index 6b9b8b9adf..97a1c087ee 100644
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetProfile from './WidgetProfile.vue';
 const meta = {
 	title: 'widgets/WidgetProfile',
 	component: WidgetProfile,
-};
+} satisfies Meta<typeof WidgetProfile>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetProfile>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
index 02bd406d4f..0c1e14a903 100644
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetRss from './WidgetRss.vue';
 const meta = {
 	title: 'widgets/WidgetRss',
 	component: WidgetRss,
-};
+} satisfies Meta<typeof WidgetRss>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetRss>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
index 16d4a0855d..e4e9fce039 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetRssTicker from './WidgetRssTicker.vue';
 const meta = {
 	title: 'widgets/WidgetRssTicker',
 	component: WidgetRssTicker,
-};
+} satisfies Meta<typeof WidgetRssTicker>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetRssTicker>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
index 59394b70da..6386bf89e4 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetSlideshow from './WidgetSlideshow.vue';
 const meta = {
 	title: 'widgets/WidgetSlideshow',
 	component: WidgetSlideshow,
-};
+} satisfies Meta<typeof WidgetSlideshow>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetSlideshow>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
index 7b00b73528..c7853c58c3 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetTimeline from './WidgetTimeline.vue';
 const meta = {
 	title: 'widgets/WidgetTimeline',
 	component: WidgetTimeline,
-};
+} satisfies Meta<typeof WidgetTimeline>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetTimeline>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
index c1dca9039d..d787fc84ea 100644
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetTrends from './WidgetTrends.vue';
 const meta = {
 	title: 'widgets/WidgetTrends',
 	component: WidgetTrends,
-};
+} satisfies Meta<typeof WidgetTrends>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetTrends>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
index 3c388f3f42..2c2511ba9f 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetUnixClock from './WidgetUnixClock.vue';
 const meta = {
 	title: 'widgets/WidgetUnixClock',
 	component: WidgetUnixClock,
-};
+} satisfies Meta<typeof WidgetUnixClock>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetUnixClock>;
 export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
index 528f9d26cd..ee3513bed2 100644
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetUserList from './WidgetUserList.vue';
 const meta = {
 	title: 'widgets/WidgetUserList',
 	component: WidgetUserList,
-};
+} satisfies Meta<typeof WidgetUserList>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof WidgetUserList>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 0c376fdf99..0b62d996e1 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import cpu_mem from './cpu-mem.vue';
 const meta = {
 	title: 'widgets/server-metric/cpu-mem',
 	component: cpu_mem,
-};
+} satisfies Meta<typeof cpu_mem>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof cpu_mem>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index aefd4642b4..4516fe5dc0 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import cpu from './cpu.vue';
 const meta = {
 	title: 'widgets/server-metric/cpu',
 	component: cpu,
-};
+} satisfies Meta<typeof cpu>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof cpu>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index 3b97ad1a91..a8179265e9 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import disk from './disk.vue';
 const meta = {
 	title: 'widgets/server-metric/disk',
 	component: disk,
-};
+} satisfies Meta<typeof disk>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof disk>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index a982729b61..1ef2ab35d5 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import index from './index.vue';
 const meta = {
 	title: 'widgets/server-metric/index',
 	component: index,
-};
+} satisfies Meta<typeof index>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof index>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index acfa33634b..3ac52649e9 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import mem from './mem.vue';
 const meta = {
 	title: 'widgets/server-metric/mem',
 	component: mem,
-};
+} satisfies Meta<typeof mem>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof mem>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index 3f231caf8c..fca6bfa749 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import net from './net.vue';
 const meta = {
 	title: 'widgets/server-metric/net',
 	component: net,
-};
+} satisfies Meta<typeof net>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof net>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index 32f8c898c0..411beb19d2 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -1,9 +1,9 @@
-import { Meta, Story } from '@storybook/vue3';
+import { Meta, StoryObj } from '@storybook/vue3';
 import pie from './pie.vue';
 const meta = {
 	title: 'widgets/server-metric/pie',
 	component: pie,
-};
+} satisfies Meta<typeof pie>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
@@ -17,5 +17,5 @@ export const Default = {
 	parameters: {
 		layout: 'centered',
 	},
-};
+} satisfies StoryObj<typeof pie>;
 export default meta;

From 0ac4d744fd8d1220d60f54c2a2900cf7d22acb0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 21 Mar 2023 02:05:00 +0900
Subject: [PATCH 12/99] build(#10336): control themes

---
 packages/frontend/.storybook/.gitignore       |   8 +-
 packages/frontend/.storybook/main.ts          |   1 +
 packages/frontend/.storybook/preload-theme.ts |  38 +-
 packages/frontend/.storybook/preview.ts       |  69 +-
 packages/frontend/package.json                |  11 +-
 packages/frontend/src/scripts/i18n.ts         |   1 -
 pnpm-lock.yaml                                | 910 ++++++++++++++----
 7 files changed, 843 insertions(+), 195 deletions(-)

diff --git a/packages/frontend/.storybook/.gitignore b/packages/frontend/.storybook/.gitignore
index a516a23411..0de26507c6 100644
--- a/packages/frontend/.storybook/.gitignore
+++ b/packages/frontend/.storybook/.gitignore
@@ -1,8 +1,8 @@
-# (cd .; pnpm tsc --jsx react --jsxFactory h ./generate.tsx && node ./generate.js)
+# (cd path/to/frontend; pnpm tsc --jsx react --jsxFactory h .storybook/generate.tsx && node .storybook/generate.js)
 /generate.js
-# (cd .; pnpm tsc ./preload-locale.ts && node ./preload-locale.js)
+# (cd path/to/frontend; pnpm tsc .storybook/preload-locale.ts && node .storybook/preload-locale.js)
 /preload-locale.js
 /locale.ts
-# (cd .; pnpm tsc ./preload-theme.ts && node ./preload-theme.js)
+# (cd path/to/frontend; pnpm tsc .storybook/preload-theme.ts && node .storybook/preload-theme.js)
 /preload-theme.js
-/theme.ts
+/themes.ts
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index b63f1e46e0..d54c493625 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -8,6 +8,7 @@ const config = {
 		'@storybook/addon-links',
 		'@storybook/addon-essentials',
 		'@storybook/addon-interactions',
+		'../node_modules/storybook-addon-misskey-theme',
 	],
 	framework: {
 		name: '@storybook/vue3-vite',
diff --git a/packages/frontend/.storybook/preload-theme.ts b/packages/frontend/.storybook/preload-theme.ts
index 22e128a5c4..1ff8f71ecd 100644
--- a/packages/frontend/.storybook/preload-theme.ts
+++ b/packages/frontend/.storybook/preload-theme.ts
@@ -2,19 +2,35 @@ import { readFile, writeFile } from 'node:fs/promises';
 import { resolve } from 'node:path';
 import * as JSON5 from 'json5';
 
-Promise.all([
-	readFile(resolve(__dirname, '../src/themes/_light.json5'), 'utf8'),
-	readFile(resolve(__dirname, '../src/themes/l-light.json5'), 'utf8'),
-]).then((sources) => {
-	const base = JSON5.parse(sources[0]);
-	const theme = JSON5.parse(sources[1]);
+const keys = [
+	'_dark',
+	'_light',
+	'l-light',
+	'l-coffee',
+	'l-apricot',
+	'l-rainy',
+	'l-botanical',
+	'l-vivid',
+	'l-cherry',
+	'l-sushi',
+	'l-u0',
+	'd-dark',
+	'd-persimmon',
+	'd-astro',
+	'd-future',
+	'd-botanical',
+	'd-green-lime',
+	'd-green-orange',
+	'd-cherry',
+	'd-ice',
+	'd-u0',
+]
+
+Promise.all(keys.map((key) => readFile(resolve(__dirname, `../src/themes/${key}.json5`), 'utf8'))).then((sources) => {
 	writeFile(
-		resolve(__dirname, './theme.ts'),
+		resolve(__dirname, './themes.ts'),
 		`export default ${JSON.stringify(
-			Object.assign(theme, {
-				base: undefined,
-				props: Object.assign(base.props, theme.props),
-			}),
+			Object.fromEntries(sources.map((source, i) => [keys[i], JSON5.parse(source)])),
 			undefined,
 			2,
 		)} as const;`,
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 5bcd527f03..a39b59fa7b 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,30 +1,75 @@
-import { type Preview, setup } from '@storybook/vue3';
+import { addons } from '@storybook/addons';
+import { FORCE_REMOUNT } from '@storybook/core-events';
+import { type Preview, forceReRender, setup } from '@storybook/vue3';
 import { initialize, mswDecorator } from 'msw-storybook-addon';
 import locale from './locale';
 import { commonHandlers, onUnhandledRequest } from './mocks';
-import theme from './theme';
+import themes from './themes';
 import '../src/style.scss';
 
+let initialized = false;
+let unobserve = () => {};
+
+function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme']) {
+	unobserve();
+	const theme = themes[document.documentElement.dataset.misskeyTheme];
+	if (theme) {
+		applyTheme(themes[document.documentElement.dataset.misskeyTheme]);
+	}
+	const observer = new MutationObserver((entries) => {
+		for (const entry of entries) {
+			if (entry.attributeName === 'data-misskey-theme') {
+				const target = entry.target as HTMLElement;
+				const theme = themes[target.dataset.misskeyTheme];
+				if (theme) {
+					applyTheme(themes[target.dataset.misskeyTheme]);
+				} else {
+					target.removeAttribute('style');
+				}
+			}
+		}
+	});
+	observer.observe(document.documentElement, {
+		attributes: true,
+		attributeFilter: ['data-misskey-theme'],
+	});
+	unobserve = () => observer.disconnect();
+}
+
 initialize({
 	onUnhandledRequest,
 });
 localStorage.setItem("locale", JSON.stringify(locale));
-Promise.all([
-	import('../src/components'),
-	import('../src/directives'),
-	import('../src/widgets'),
-	import('../src/scripts/theme').then(({ applyTheme }) => applyTheme(theme)),
-]).then(([{ default: components }, { default: directives }, { default: widgets }]) => {
-	setup((app) => {
-		components(app);
-		directives(app);
-		widgets(app);
+queueMicrotask(() => {
+	Promise.all([
+		import('../src/components'),
+		import('../src/directives'),
+		import('../src/widgets'),
+		import('../src/scripts/theme'),
+	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }]) => {
+		setup((app) => {
+			initialized = true;
+			loadTheme(applyTheme);
+			components(app);
+			directives(app);
+			widgets(app);
+		});
 	});
 });
 
 const preview = {
 	decorators: [
 		mswDecorator,
+		(Story, context) => {
+			const story = Story();
+			if (!initialized) {
+				const channel = addons.getChannel();
+				requestIdleCallback(() => {
+					channel.emit(FORCE_REMOUNT, { storyId: context.id });
+				});
+			}
+			return story;
+		}
 	],
 	parameters: {
 		msw: {
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 03f7e5d2bb..182585a87d 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -75,10 +75,16 @@
 		"@storybook/addon-essentials": "^7.0.0-rc.4",
 		"@storybook/addon-interactions": "^7.0.0-rc.4",
 		"@storybook/addon-links": "^7.0.0-rc.4",
+		"@storybook/addons": "7.0.0-rc.5",
 		"@storybook/blocks": "^7.0.0-rc.4",
-		"@storybook/manager-api": "7.0.0-rc.4",
+		"@storybook/core-events": "^7.0.0-rc.4",
+		"@storybook/manager-api": "^7.0.0-rc.4",
+		"@storybook/preview-api": "^7.0.0-rc.4",
+		"@storybook/react": "^7.0.0-rc.4",
+		"@storybook/react-vite": "^7.0.0-rc.4",
 		"@storybook/testing-library": "^0.0.14-next.1",
-		"@storybook/theming": "7.0.0-rc.4",
+		"@storybook/theming": "^7.0.0-rc.4",
+		"@storybook/types": "^7.0.0-rc.4",
 		"@storybook/vue3": "^7.0.0-rc.4",
 		"@storybook/vue3-vite": "^7.0.0-rc.4",
 		"@testing-library/vue": "^6.6.1",
@@ -114,6 +120,7 @@
 		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
 		"storybook": "^7.0.0-rc.4",
+		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
 		"vitest": "^0.29.2",
 		"vitest-fetch-mock": "^0.2.2",
diff --git a/packages/frontend/src/scripts/i18n.ts b/packages/frontend/src/scripts/i18n.ts
index 9235a67e2e..54184386da 100644
--- a/packages/frontend/src/scripts/i18n.ts
+++ b/packages/frontend/src/scripts/i18n.ts
@@ -3,7 +3,6 @@ export class I18n<T extends Record<string, any>> {
 
 	constructor(locale: T) {
 		this.ts = locale;
-		console.log(this);
 
 		//#region BIND
 		this.t = this.t.bind(this);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b1b170a5ea..74a13fd109 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -401,10 +401,16 @@ importers:
       '@storybook/addon-essentials': ^7.0.0-rc.4
       '@storybook/addon-interactions': ^7.0.0-rc.4
       '@storybook/addon-links': ^7.0.0-rc.4
+      '@storybook/addons': 7.0.0-rc.5
       '@storybook/blocks': ^7.0.0-rc.4
-      '@storybook/manager-api': 7.0.0-rc.4
+      '@storybook/core-events': ^7.0.0-rc.4
+      '@storybook/manager-api': ^7.0.0-rc.4
+      '@storybook/preview-api': ^7.0.0-rc.4
+      '@storybook/react': ^7.0.0-rc.4
+      '@storybook/react-vite': ^7.0.0-rc.4
       '@storybook/testing-library': ^0.0.14-next.1
-      '@storybook/theming': 7.0.0-rc.4
+      '@storybook/theming': ^7.0.0-rc.4
+      '@storybook/types': ^7.0.0-rc.4
       '@storybook/vue3': ^7.0.0-rc.4
       '@storybook/vue3-vite': ^7.0.0-rc.4
       '@syuilo/aiscript': 0.13.1
@@ -478,6 +484,7 @@ importers:
       seedrandom: 3.0.5
       start-server-and-test: 2.0.0
       storybook: ^7.0.0-rc.4
+      storybook-addon-misskey-theme: github:misskey-dev/storybook-addon-misskey-theme
       strict-event-emitter-types: 2.0.0
       summaly: github:misskey-dev/summaly
       syuilo-password-strength: 0.0.1
@@ -564,10 +571,16 @@ importers:
       '@storybook/addon-essentials': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/addon-interactions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
       '@storybook/addon-links': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addons': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
       '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.5
       '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/react': 7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq
+      '@storybook/react-vite': 7.0.0-rc.5_ndsstb2ob2rgr4m75wxvpqsrpi
       '@storybook/testing-library': 0.0.14-next.1
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.5
       '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
       '@storybook/vue3-vite': 7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae
       '@testing-library/vue': 6.6.1_a2ihsjreowava2sm4iorpgwkom
@@ -603,6 +616,7 @@ importers:
       react-dom: 18.2.0_react@18.2.0
       start-server-and-test: 2.0.0
       storybook: 7.0.0-rc.4
+      storybook-addon-misskey-theme: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_vcphge7oza42ndhprrearltd3q
       summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
       vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
       vitest-fetch-mock: 0.2.2_vitest@0.29.2
@@ -665,14 +679,14 @@ packages:
     dependencies:
       '@ampproject/remapping': 2.2.0
       '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.20.7
+      '@babel/generator': 7.21.3
       '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-module-transforms': 7.20.11
-      '@babel/helpers': 7.20.7
-      '@babel/parser': 7.20.7
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helpers': 7.21.0
+      '@babel/parser': 7.21.3
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
       convert-source-map: 1.9.0
       debug: 4.3.4
       gensync: 1.0.0-beta.2
@@ -747,8 +761,8 @@ packages:
     dependencies:
       '@babel/compat-data': 7.20.10
       '@babel/core': 7.20.12
-      '@babel/helper-validator-option': 7.18.6
-      browserslist: 4.21.4
+      '@babel/helper-validator-option': 7.21.0
+      browserslist: 4.21.5
       lru-cache: 5.1.1
       semver: 6.3.0
     dev: true
@@ -761,8 +775,8 @@ packages:
     dependencies:
       '@babel/compat-data': 7.20.10
       '@babel/core': 7.21.3
-      '@babel/helper-validator-option': 7.18.6
-      browserslist: 4.21.4
+      '@babel/helper-validator-option': 7.21.0
+      browserslist: 4.21.5
       lru-cache: 5.1.1
       semver: 6.3.0
     dev: true
@@ -871,14 +885,6 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-function-name/7.19.0:
-    resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.20.7
-      '@babel/types': 7.21.3
-    dev: true
-
   /@babel/helper-function-name/7.21.0:
     resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
     engines: {node: '>=6.9.0'}
@@ -908,22 +914,6 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-module-transforms/7.20.11:
-    resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-module-imports': 7.18.6
-      '@babel/helper-simple-access': 7.20.2
-      '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/helper-validator-identifier': 7.19.1
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/helper-module-transforms/7.21.2:
     resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
     engines: {node: '>=6.9.0'}
@@ -1025,11 +1015,6 @@ packages:
     resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
     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'}
-    dev: true
-
   /@babel/helper-validator-option/7.21.0:
     resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
     engines: {node: '>=6.9.0'}
@@ -1047,17 +1032,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helpers/7.20.7:
-    resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/helpers/7.21.0:
     resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
     engines: {node: '>=6.9.0'}
@@ -1531,6 +1505,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3:
+    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12:
     resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
     peerDependencies:
@@ -1605,13 +1588,13 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12:
+  /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
@@ -1644,6 +1627,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3:
+    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12:
     resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
     peerDependencies:
@@ -1830,6 +1822,16 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12:
     resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
     engines: {node: '>=6.9.0'}
@@ -2064,15 +2066,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.20.12:
+  /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.21.3
     dev: true
 
   /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.20.12:
@@ -2377,6 +2379,26 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.21.3:
+    resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.21.3:
+    resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
   /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.20.12:
     resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==}
     engines: {node: '>=6.9.0'}
@@ -2535,17 +2557,17 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.20.12:
+  /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12
+      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -2602,7 +2624,7 @@ packages:
       '@babel/core': 7.20.12
       '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-option': 7.18.6
+      '@babel/helper-validator-option': 7.21.0
       '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12
       '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12
       '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12
@@ -2668,7 +2690,7 @@ packages:
       '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12
       '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12
       '@babel/preset-modules': 0.1.5_@babel+core@7.20.12
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
       babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12
       babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12
       babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12
@@ -2688,7 +2710,7 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-option': 7.18.6
+      '@babel/helper-validator-option': 7.21.0
       '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.3
       '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.3
       '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.3
@@ -2754,7 +2776,7 @@ packages:
       '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.3
       '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3
       '@babel/preset-modules': 0.1.5_@babel+core@7.21.3
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
       babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3
       babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3
       babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3
@@ -2764,16 +2786,16 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/preset-flow/7.18.6_@babel+core@7.20.12:
+  /@babel/preset-flow/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-option': 7.18.6
-      '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.20.12
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.21.3
     dev: true
 
   /@babel/preset-modules/0.1.5_@babel+core@7.20.12:
@@ -2802,27 +2824,27 @@ packages:
       esutils: 2.0.3
     dev: true
 
-  /@babel/preset-typescript/7.21.0_@babel+core@7.20.12:
+  /@babel/preset-typescript/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.20.12
+      '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/register/7.21.0_@babel+core@7.20.12:
+  /@babel/register/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       clone-deep: 4.0.1
       find-cache-dir: 2.1.0
       make-dir: 2.1.0
@@ -2856,7 +2878,7 @@ packages:
       '@babel/code-frame': 7.18.6
       '@babel/generator': 7.21.3
       '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.19.0
+      '@babel/helper-function-name': 7.21.0
       '@babel/helper-hoist-variables': 7.18.6
       '@babel/helper-split-export-declaration': 7.18.6
       '@babel/parser': 7.21.3
@@ -2901,6 +2923,10 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
+  /@base2/pretty-print-object/1.0.1:
+    resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
+    dev: true
+
   /@bcoe/v8-coverage/0.2.3:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: true
@@ -3626,7 +3652,7 @@ packages:
       collect-v8-coverage: 1.0.1
       exit: 0.1.2
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       istanbul-lib-coverage: 3.2.0
       istanbul-lib-instrument: 5.2.1
       istanbul-lib-report: 3.0.0
@@ -3663,7 +3689,7 @@ packages:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.17
       callsites: 3.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: true
 
   /@jest/test-result/29.5.0:
@@ -3681,7 +3707,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/test-result': 29.5.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       slash: 3.0.0
     dev: true
@@ -3697,7 +3723,7 @@ packages:
       chalk: 4.1.2
       convert-source-map: 2.0.0
       fast-json-stable-stringify: 2.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-regex-util: 29.4.3
       jest-util: 29.5.0
@@ -3732,6 +3758,23 @@ packages:
       chalk: 4.1.2
     dev: true
 
+  /@joshwooding/vite-plugin-react-docgen-typescript/0.2.1_vwvfc4ezh6jlf6pa67auy3eulu:
+    resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==}
+    peerDependencies:
+      typescript: '>= 4.3.x'
+      vite: ^3.0.0 || ^4.0.0
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      glob: 7.2.3
+      glob-promise: 4.2.2_glob@7.2.3
+      magic-string: 0.27.0
+      react-docgen-typescript: 2.2.2_typescript@4.9.5
+      typescript: 4.9.5
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    dev: true
+
   /@jridgewell/gen-mapping/0.1.1:
     resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
     engines: {node: '>=6.0.0'}
@@ -4129,6 +4172,14 @@ packages:
       rollup: 3.19.0
     dev: false
 
+  /@rollup/pluginutils/4.2.1:
+    resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
+    engines: {node: '>= 8.0.0'}
+    dependencies:
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+    dev: true
+
   /@rollup/pluginutils/5.0.2_rollup@3.19.0:
     resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
     engines: {node: '>=14.0.0'}
@@ -4485,6 +4536,19 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/addons/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-KDSoMW/y39eAMbeSmwmYEiYu3KomabJCYdsfmD65i0DqwuOFrkG3im3wPkF3F88rZDuzWzVZMl3Z15n56uVXKA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/manager-api': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/types': 7.0.0-rc.5
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
   /@storybook/blocks/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-sG3VMGqri2sf1ye4rV6phdyTV3vqfL6jxh2RZJ3H1XrdezaVwQVQcdqdxJDgqBJ+/i7N5kFqByUG+WCTV2cSmA==}
     peerDependencies:
@@ -4586,6 +4650,49 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/builder-vite/7.0.0-rc.5_vwvfc4ezh6jlf6pa67auy3eulu:
+    resolution: {integrity: sha512-TkT+KaUBHiyFyHQ31qeq3zFM1p5cwffu3orAJRcSWOCHkQy1hbu2H55ZApgZJRHBq9MGxtUZ1FTVYIb3OLv1jg==}
+    peerDependencies:
+      '@preact/preset-vite': '*'
+      '@storybook/mdx1-csf': '>=1.0.0-next.1'
+      typescript: '>= 4.3.x'
+      vite: ^3.0.0 || ^4.0.0
+      vite-plugin-glimmerx: '*'
+    peerDependenciesMeta:
+      '@preact/preset-vite':
+        optional: true
+      '@storybook/mdx1-csf':
+        optional: true
+      typescript:
+        optional: true
+      vite-plugin-glimmerx:
+        optional: true
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.5
+      '@storybook/channel-websocket': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-common': 7.0.0-rc.5
+      '@storybook/csf-plugin': 7.0.0-rc.5
+      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/node-logger': 7.0.0-rc.5
+      '@storybook/preview': 7.0.0-rc.5
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/types': 7.0.0-rc.5
+      browser-assert: 1.2.1
+      es-module-lexer: 0.9.3
+      express: 4.18.2
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2_glob@8.1.0
+      magic-string: 0.27.0
+      rollup: 3.19.0
+      slash: 3.0.0
+      typescript: 4.9.5
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/channel-postmessage/7.0.0-rc.4:
     resolution: {integrity: sha512-ZWuwZfYfwpvCx+WgoTEweFmQ6cb4B3HUT6eNcFMeXgMRw1q9roa8CDCCw+4TJ2jDkvUrdkYTHYmcgn0QpAxpAg==}
     dependencies:
@@ -4593,7 +4700,18 @@ packages:
       '@storybook/client-logger': 7.0.0-rc.4
       '@storybook/core-events': 7.0.0-rc.4
       '@storybook/global': 5.0.0
-      qs: 6.10.4
+      qs: 6.11.1
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channel-postmessage/7.0.0-rc.5:
+    resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/global': 5.0.0
+      qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
@@ -4606,10 +4724,23 @@ packages:
       telejson: 7.0.4
     dev: true
 
+  /@storybook/channel-websocket/7.0.0-rc.5:
+    resolution: {integrity: sha512-n8oPrbxGS9FtSkNWYMpOtEZedeeVxnxJuiEwApGRkWt0q3eWIK9u24NElIbjCoSysaZl60CXrlK615W+Ml3ujQ==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/global': 5.0.0
+      telejson: 7.0.4
+    dev: true
+
   /@storybook/channels/7.0.0-rc.4:
     resolution: {integrity: sha512-N4jQPVsT+Qd3dYRFKL2jN1Ik1XXYxCO2e6hoxir55VvAd5WCCnwNWmglEWRoIMNwmJQAbyFRCxbYzAKctsqaVw==}
     dev: true
 
+  /@storybook/channels/7.0.0-rc.5:
+    resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
+    dev: true
+
   /@storybook/cli/7.0.0-rc.4:
     resolution: {integrity: sha512-T4GCpvJvPUqDgpYdb7DLeYbc3E5OZigLNRQfSQIrQ8yQ4gtJmG18GNqzUIuMkVQRUjwr67ZqMi7ui+3PSEucvA==}
     hasBin: true
@@ -4665,6 +4796,12 @@ packages:
       '@storybook/global': 5.0.0
     dev: true
 
+  /@storybook/client-logger/7.0.0-rc.5:
+    resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
   /@storybook/codemod/7.0.0-rc.4:
     resolution: {integrity: sha512-PGoHnQfOrpRCXwaOsPoszfvzxERAm9bR4nxfF5pOUnsXYRrI4hPqZRpgw3kDRXTl43mSA+eI7fkGg4y9GeTElw==}
     dependencies:
@@ -4703,6 +4840,24 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
+  /@storybook/components/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-zuKQ0+uOtRbmnF0trJ4LpWZ5w9Dzcs5dZjF3Uu4ka4F4vJ/fUWKL2spxAIsRalu2jyk2XVp6/mz/NiWQnrophw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.5
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/core-client/7.0.0-rc.4:
     resolution: {integrity: sha512-Np5QTcyKtiTczuM/5Ad3dC47n7xoSoonzh1wYWp747QGkzRfh1XCQ1sbALxCY8lB/4rnFsnehHQCoQsjreWelg==}
     dependencies:
@@ -4710,6 +4865,13 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.4
     dev: true
 
+  /@storybook/core-client/7.0.0-rc.5:
+    resolution: {integrity: sha512-jBY4kJDL5sdVcnGzz+cpruzkF01Hi+DJ/c9mpNiL+CjiDSFewtCk28Qggwccm9tKne5eAlrFiJAu5MOlbIcM+g==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/preview-api': 7.0.0-rc.5
+    dev: true
+
   /@storybook/core-common/7.0.0-rc.4:
     resolution: {integrity: sha512-cvJgs23iHmD24u5sjb3a5n5oCRzwx0BzI7v0mt+Lfc6r2gyXgw2Hf4tM5DchNKba0GEjvPU/ERuOWnXUETGqSw==}
     dependencies:
@@ -4737,10 +4899,41 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/core-common/7.0.0-rc.5:
+    resolution: {integrity: sha512-YlkcTcDx8bkOq3/STAuBkQOBQB5i0zLj2Zb0LUPzIDDBPZlGb3mJEla0UyJoMbP/E/QCq1K8pA1l9vtTK+ROJQ==}
+    dependencies:
+      '@storybook/node-logger': 7.0.0-rc.5
+      '@storybook/types': 7.0.0-rc.5
+      '@types/node': 16.18.16
+      '@types/pretty-hrtime': 1.0.1
+      chalk: 4.1.2
+      esbuild: 0.16.17
+      esbuild-register: 3.4.2_esbuild@0.16.17
+      file-system-cache: 2.0.2
+      find-up: 5.0.0
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2_glob@8.1.0
+      handlebars: 4.7.7
+      lazy-universal-dotenv: 4.0.0
+      picomatch: 2.3.1
+      pkg-dir: 5.0.0
+      pretty-hrtime: 1.0.3
+      resolve-from: 5.0.0
+      slash: 3.0.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/core-events/7.0.0-rc.4:
     resolution: {integrity: sha512-OgEhQSaOMcSx0y5tjGg5Mscyyk9BayhqiJeuDK3kVZfKtFO3LErwhV4TrNjuDnYFfwUgiPa2ikTAB6K6JAn6yg==}
     dev: true
 
+  /@storybook/core-events/7.0.0-rc.5:
+    resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
+    dev: true
+
   /@storybook/core-server/7.0.0-rc.4:
     resolution: {integrity: sha512-IgVy57+W43W7duhfMDXaCS7rFp8A9SfhAQSFSycD3RPP1ontnNUquOygV6AHOz04rs2NZtMNlYW6RHiwVcmSJA==}
     dependencies:
@@ -4803,6 +4996,15 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/csf-plugin/7.0.0-rc.5:
+    resolution: {integrity: sha512-sgIEqV1MfhybvODcjtG0Ce/XlzWv2Sg5Prg5Qqsr5sMU7aET+yLHmr1umbM5L8ieRjsXS4CsxZCqZMrY9hDdNw==}
+    dependencies:
+      '@storybook/csf-tools': 7.0.0-rc.5
+      unplugin: 0.10.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/csf-tools/7.0.0-rc.4:
     resolution: {integrity: sha512-swMulWdpSObtcfDo3flmry50oLAPbGLn0YBU+tJhhxerng5RVDy5MPG0A5ZKd6hD1jvyTA1pkhbwzCrklbNhSw==}
     dependencies:
@@ -4819,6 +5021,22 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/csf-tools/7.0.0-rc.5:
+    resolution: {integrity: sha512-DvcAygIZMZIL30j7WxMXeJ6a+A2/Y/FuatZItmW+3sNv0FK1J9wH2SKw7QjzEw75LsgjvO07lU2cgcsPDFhXoA==}
+    dependencies:
+      '@babel/generator': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/types': 7.0.0-rc.5
+      fs-extra: 11.1.0
+      recast: 0.23.1
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/csf/0.0.2-next.10:
     resolution: {integrity: sha512-m2PFgBP/xRIF85VrDhvesn9ktaD2pN3VUjvMqkAL/cINp/3qXsCyI81uw7N5VEOkQAbWrY2FcydnvEPDEdE8fA==}
     dependencies:
@@ -4843,6 +5061,20 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/docs-tools/7.0.0-rc.5:
+    resolution: {integrity: sha512-Hnws7dRmu+ZiDv0rcaG00LB0Q6bha8KKSOy/RsRsdfP50qM4ZPOfpqEFNwYOIQF1Huxe8b//BlVnu33AeUOITQ==}
+    dependencies:
+      '@babel/core': 7.21.3
+      '@storybook/core-common': 7.0.0-rc.5
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/types': 7.0.0-rc.5
+      '@types/doctrine': 0.0.3
+      doctrine: 3.0.0
+      lodash: 4.17.21
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/global/5.0.0:
     resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
@@ -4857,6 +5089,16 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.4
     dev: true
 
+  /@storybook/instrumenter/7.0.0-rc.5:
+    resolution: {integrity: sha512-e9AtV1hNTs4ppmqKfst/cInmRnhkK9VcGf3xB/d9Qqm0Sqo+sNXu6ywK5KpAURdCzsUEOPXbJ9H52yTrU4f74A==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.5
+    dev: true
+
   /@storybook/manager-api/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-0yT6zgalv8ZockGfzQML9vnOlDHKmNBjNFouVDgUMMQ2KiwdJOUG8IUqZoUtxqMO+nceIk4eTqUKK/QUqdUZVg==}
     peerDependencies:
@@ -4882,6 +5124,31 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
+  /@storybook/manager-api/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-MsNj/cPIOlL7HJ8ReYahUvJVfvZDtNfacUYSFuQjQwdnp0u3pbC5mGZPd32tAGj7lLaLzcqqo1yR+NAgwpZUBw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.5
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+    dev: true
+
   /@storybook/manager/7.0.0-rc.4:
     resolution: {integrity: sha512-prLxXsCevw5ghWKvS7uAYdMOJ2Cr7jxE4Z1h9OSpVVombiUaU9iFPpNCsfY40VNVi9WuEHSTWH7QV/g453nGiw==}
     dev: true
@@ -4899,6 +5166,15 @@ packages:
       pretty-hrtime: 1.0.3
     dev: true
 
+  /@storybook/node-logger/7.0.0-rc.5:
+    resolution: {integrity: sha512-3DpM988ndfbwc/03doFVP/HUJgoCp4eKVFMmSqnKVUd6qWx/dhsrTv+jqLt43wNZCgL/N/8QE+Q+FhVwefh6Tg==}
+    dependencies:
+      '@types/npmlog': 4.1.4
+      chalk: 4.1.2
+      npmlog: 5.0.1
+      pretty-hrtime: 1.0.3
+    dev: true
+
   /@storybook/postinstall/7.0.0-rc.4:
     resolution: {integrity: sha512-SzLUnhl2GOzV0rvyTx1eOYRQ+bR3uXWbRXCroP+m2PFqNvXHh3lvEHM1XCxdxMDtY/VRQyEuRfirKizkSaGf3Q==}
     dev: true
@@ -4924,10 +5200,35 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
+  /@storybook/preview-api/7.0.0-rc.5:
+    resolution: {integrity: sha512-cuyFIT/4MXfoqN6d5AK/KH7Yp0cifuOmcBj4+9xrmrPK47m4F8eHZ/mX6rXE6rVFNsWv65Al5An6WCM1CDImJg==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.5
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0-rc.5
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      slash: 3.0.0
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/preview/7.0.0-rc.4:
     resolution: {integrity: sha512-JFncdC74tPwN6uGpSm4HwhV/FW6VqHHlLLcvpudpgngb7CZ6udkT9XAEW90JeViXNUM4tPn00HRc/adguZwCTA==}
     dev: true
 
+  /@storybook/preview/7.0.0-rc.5:
+    resolution: {integrity: sha512-AG6vg4dsHVjbNchC3eiDqwSKfUWyFXauYDLg+Ce4F47s98J5ly+mFAIY0Vo1mwao3CVHLk0SYt+vtuQZF52WAg==}
+    dev: true
+
   /@storybook/react-dom-shim/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-KWFdCBCdtO+p+HcO4evgUjAid+k2HfHAoBOQsaQ1vJTjHBWJLGFinpRdkAqzZp+p+KQzKIPgXeYAPZlqo5hSzw==}
     peerDependencies:
@@ -4938,6 +5239,82 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/react-dom-shim/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-Hyx8Px1LLc3+WjIUW5hNFEsbQspONnyThxBCU7w0kAivpJn7vy26HFCHp4QA1FPU6CnJUl5dVxckj6bosv/Gqg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/react-vite/7.0.0-rc.5_ndsstb2ob2rgr4m75wxvpqsrpi:
+    resolution: {integrity: sha512-IW2DYK6K115B7VKBvNMaSMVe3LWyFyFBgjby1N2/wfL5jkvrwRmYH4ag5+qn1e6HgxH6F+Wd9ryLhf8jaldgVQ==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      vite: ^3.0.0 || ^4.0.0
+    dependencies:
+      '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1_vwvfc4ezh6jlf6pa67auy3eulu
+      '@rollup/pluginutils': 4.2.1
+      '@storybook/builder-vite': 7.0.0-rc.5_vwvfc4ezh6jlf6pa67auy3eulu
+      '@storybook/react': 7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq
+      '@vitejs/plugin-react': 3.1.0_vite@4.1.4
+      ast-types: 0.14.2
+      magic-string: 0.27.0
+      react: 18.2.0
+      react-docgen: 6.0.0-alpha.3
+      react-dom: 18.2.0_react@18.2.0
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    transitivePeerDependencies:
+      - '@preact/preset-vite'
+      - '@storybook/mdx1-csf'
+      - supports-color
+      - typescript
+      - vite-plugin-glimmerx
+    dev: true
+
+  /@storybook/react/7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq:
+    resolution: {integrity: sha512-YtCtDEPaj9owwxuk5xlv+hQTywGe4f2jZJxG+if8tZH2wXDSBJC5uNKd1U7gVUBwM6DuXXVhpud/NW8wEYN2vg==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-client': 7.0.0-rc.5
+      '@storybook/docs-tools': 7.0.0-rc.5
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/react-dom-shim': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.5
+      '@types/escodegen': 0.0.6
+      '@types/estree': 0.0.51
+      '@types/node': 16.18.16
+      acorn: 7.4.1
+      acorn-jsx: 5.3.2_acorn@7.4.1
+      acorn-walk: 7.2.0
+      escodegen: 2.0.0
+      html-tags: 3.2.0
+      lodash: 4.17.21
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      react-element-to-jsx-string: 15.0.0_biqbaboplfbrettd7655fr4n2y
+      ts-dedent: 2.2.0
+      type-fest: 2.19.0
+      typescript: 4.9.5
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/router/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-J/7/NTFjBndHDN7a5bQWpkczOJUxRKVbqW4ggNh9di9Z9wb4IuQlz572eo4bM/kWfRPo0zR/tgBT8F/zVWd6JA==}
     peerDependencies:
@@ -4946,7 +5323,20 @@ packages:
     dependencies:
       '@storybook/client-logger': 7.0.0-rc.4
       memoizerific: 1.11.3
-      qs: 6.11.0
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/router/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-s23O2OOQ4+CvySk3QC/PXhDJChc4jjyQu/h3gLMKF7bfWx0bd5KR4LnP3rCKLIMkxoJYFPUayPMgwEEeN/ENSw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.5
+      memoizerific: 1.11.3
+      qs: 6.11.1
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: true
@@ -4971,8 +5361,8 @@ packages:
   /@storybook/testing-library/0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/instrumenter': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/instrumenter': 7.0.0-rc.5
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm
       ts-dedent: 2.2.0
@@ -4992,11 +5382,34 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/theming/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-OzwybDA2+4FWg85tcTNQkVI0JnHkwCRG9HM1qx9hOZJHNRfxmJFjJePOnBoXM6CjVlz0S1PJUwCmMHNH8OTvEw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
   /@storybook/types/7.0.0-rc.4:
     resolution: {integrity: sha512-Zu9weYGeKrnaWgVk2vtPU/MpUp6EtM27ehqJVK3x0I/sa8/MXCc411ErblALLVrMX6KhFjUFU98gHlvo8ietIA==}
     dependencies:
       '@storybook/channels': 7.0.0-rc.4
-      '@types/babel__core': 7.1.20
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/types/7.0.0-rc.5:
+    resolution: {integrity: sha512-gLKUY7EfPYenz0Y1jw90AUAUlKTHOj9p7J3d8GcI5x5buHdU+M7Q1jotPWzDwRFI24y3Ob31oyCBhysIw8S2Aw==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.5
+      '@types/babel__core': 7.20.0
       '@types/express': 4.17.17
       file-system-cache: 2.0.2
     dev: true
@@ -5400,8 +5813,8 @@ packages:
     resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==}
     dev: true
 
-  /@types/babel__core/7.1.20:
-    resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==}
+  /@types/babel__core/7.20.0:
+    resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
     dependencies:
       '@babel/parser': 7.21.3
       '@babel/types': 7.21.3
@@ -5523,6 +5936,14 @@ packages:
     resolution: {integrity: sha512-ogj/ZTIdeFkiuxDwawYuZSIgC6suFGgBeZPr6Xs5lHEcvIXTjXGtH+/n8f1XhZhespaUwJ5LIGRICPji972FLw==}
     dev: true
 
+  /@types/escodegen/0.0.6:
+    resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}
+    dev: true
+
+  /@types/estree/0.0.51:
+    resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
+    dev: true
+
   /@types/estree/1.0.0:
     resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
 
@@ -5563,6 +5984,13 @@ packages:
       '@types/node': 18.15.0
     dev: true
 
+  /@types/glob/7.2.0:
+    resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+    dependencies:
+      '@types/minimatch': 5.1.2
+      '@types/node': 18.15.0
+    dev: true
+
   /@types/glob/8.0.0:
     resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==}
     dependencies:
@@ -6189,6 +6617,22 @@ packages:
       eslint-visitor-keys: 3.3.0
     dev: true
 
+  /@vitejs/plugin-react/3.1.0_vite@4.1.4:
+    resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.1.0-beta.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/plugin-transform-react-jsx-self': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.21.3
+      magic-string: 0.27.0
+      react-refresh: 0.14.0
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@vitejs/plugin-vue/4.0.0_vite@4.1.4+vue@3.2.47:
     resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -6298,7 +6742,7 @@ packages:
   /@vue/compiler-sfc/2.7.14:
     resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       postcss: 8.4.21
       source-map: 0.6.1
     dev: false
@@ -6431,6 +6875,14 @@ packages:
       acorn-walk: 8.2.0
     dev: false
 
+  /acorn-jsx/5.3.2_acorn@7.4.1:
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      acorn: 7.4.1
+    dev: true
+
   /acorn-jsx/5.3.2_acorn@8.8.2:
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
@@ -6439,6 +6891,11 @@ packages:
       acorn: 8.8.2
     dev: true
 
+  /acorn-walk/7.2.0:
+    resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
+    engines: {node: '>=0.4.0'}
+    dev: true
+
   /acorn-walk/8.2.0:
     resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
     engines: {node: '>=0.4.0'}
@@ -7028,27 +7485,27 @@ packages:
       - debug
     dev: true
 
-  /babel-core/7.0.0-bridge.0_@babel+core@7.20.12:
+  /babel-core/7.0.0-bridge.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
     dev: true
 
-  /babel-jest/29.5.0_@babel+core@7.20.12:
+  /babel-jest/29.5.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       '@babel/core': ^7.8.0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/transform': 29.5.0
-      '@types/babel__core': 7.1.20
+      '@types/babel__core': 7.20.0
       babel-plugin-istanbul: 6.1.1
-      babel-preset-jest: 29.5.0_@babel+core@7.20.12
+      babel-preset-jest: 29.5.0_@babel+core@7.21.3
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       slash: 3.0.0
     transitivePeerDependencies:
       - supports-color
@@ -7072,8 +7529,8 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.20.7
-      '@types/babel__core': 7.1.20
+      '@babel/types': 7.21.3
+      '@types/babel__core': 7.20.0
       '@types/babel__traverse': 7.18.3
     dev: true
 
@@ -7169,15 +7626,35 @@ packages:
       '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12
     dev: true
 
-  /babel-preset-jest/29.5.0_@babel+core@7.20.12:
+  /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3:
+    resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3
+      '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3
+    dev: true
+
+  /babel-preset-jest/29.5.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       babel-plugin-jest-hoist: 29.5.0
-      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12
+      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3
     dev: true
 
   /babel-walk/3.0.0-canary-5:
@@ -7420,17 +7897,6 @@ packages:
       electron-to-chromium: 1.4.284
     dev: false
 
-  /browserslist/4.21.4:
-    resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-    dependencies:
-      caniuse-lite: 1.0.30001443
-      electron-to-chromium: 1.4.284
-      node-releases: 2.0.8
-      update-browserslist-db: 1.0.10_browserslist@4.21.4
-    dev: true
-
   /browserslist/4.21.5:
     resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -7686,10 +8152,6 @@ packages:
     resolution: {integrity: sha512-4KKthVYyooNIOhO1w0OJ13EhEwOGECMrZdkeyDydhvYXaTDA3WdhR8amoJnAgpSgcCR26aOAWk6N9ANVYlv2oQ==}
     dev: false
 
-  /caniuse-lite/1.0.30001443:
-    resolution: {integrity: sha512-jUo8svymO8+Mkj3qbUbVjR8zv8LUGpGkUM/jKvc9SO2BvjCI980dp9fQbf/dyLs6RascPzgR4nhAKFA4OHeSaA==}
-    dev: true
-
   /caniuse-lite/1.0.30001468:
     resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==}
     dev: true
@@ -8124,6 +8586,7 @@ packages:
 
   /color-support/1.1.3:
     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+    hasBin: true
 
   /color/0.11.4:
     resolution: {integrity: sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==}
@@ -8322,6 +8785,11 @@ packages:
     requiresBuild: true
     dev: false
 
+  /core-js/3.29.1:
+    resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
+    requiresBuild: true
+    dev: false
+
   /core-util-is/1.0.2:
     resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
 
@@ -8813,7 +9281,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       globby: 11.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       is-glob: 4.0.3
       is-path-cwd: 2.2.0
       is-path-inside: 3.0.3
@@ -9514,7 +9982,6 @@ packages:
       optionator: 0.8.3
     optionalDependencies:
       source-map: 0.6.1
-    dev: false
 
   /eslint-import-resolver-node/0.3.7:
     resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
@@ -9860,6 +10327,17 @@ packages:
     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
     engines: {node: '>=4.0'}
 
+  /estree-to-babel/3.2.1:
+    resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==}
+    engines: {node: '>=8.3.0'}
+    dependencies:
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      c8: 7.13.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /estree-walker/2.0.2:
     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
@@ -10638,7 +11116,7 @@ packages:
     resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
     engines: {node: '>=14.14'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jsonfile: 6.1.0
       universalify: 2.0.0
     dev: true
@@ -10679,7 +11157,7 @@ packages:
     resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
     engines: {node: '>= 0.10'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       through2: 2.0.5
     dev: false
 
@@ -10896,6 +11374,16 @@ packages:
       is-glob: 4.0.3
     dev: true
 
+  /glob-promise/4.2.2_glob@7.2.3:
+    resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==}
+    engines: {node: '>=12'}
+    peerDependencies:
+      glob: ^7.1.6
+    dependencies:
+      '@types/glob': 7.2.0
+      glob: 7.2.3
+    dev: true
+
   /glob-promise/6.0.2_glob@8.1.0:
     resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==}
     engines: {node: '>=16'}
@@ -11064,6 +11552,9 @@ packages:
   /graceful-fs/4.2.10:
     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
 
+  /graceful-fs/4.2.11:
+    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
   /grapheme-splitter/1.0.4:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
     dev: true
@@ -11352,6 +11843,11 @@ packages:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
     dev: true
 
+  /html-tags/3.2.0:
+    resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
+    engines: {node: '>=8'}
+    dev: true
+
   /htmlparser2/8.0.1:
     resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
     dependencies:
@@ -11988,7 +12484,6 @@ packages:
   /is-plain-object/5.0.0:
     resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /is-potential-custom-element-name/1.0.1:
     resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -12308,16 +12803,16 @@ packages:
       ts-node:
         optional: true
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/test-sequencer': 29.5.0
       '@jest/types': 29.5.0
       '@types/node': 18.15.0
-      babel-jest: 29.5.0_@babel+core@7.20.12
+      babel-jest: 29.5.0_@babel+core@7.21.3
       chalk: 4.1.2
       ci-info: 3.7.1
       deepmerge: 4.2.2
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-circus: 29.5.0
       jest-environment-node: 29.5.0
       jest-get-type: 29.4.3
@@ -12394,7 +12889,7 @@ packages:
       '@types/node': 18.15.0
       anymatch: 3.1.3
       fb-watchman: 2.0.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-regex-util: 29.4.3
       jest-util: 29.5.0
       jest-worker: 29.5.0
@@ -12455,7 +12950,7 @@ packages:
       '@jest/types': 29.5.0
       '@types/stack-utils': 2.0.1
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       micromatch: 4.0.5
       pretty-format: 29.5.0
       slash: 3.0.0
@@ -12511,7 +13006,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0
       jest-util: 29.5.0
@@ -12533,7 +13028,7 @@ packages:
       '@types/node': 18.15.0
       chalk: 4.1.2
       emittery: 0.13.1
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-docblock: 29.4.3
       jest-environment-node: 29.5.0
       jest-haste-map: 29.5.0
@@ -12566,7 +13061,7 @@ packages:
       cjs-module-lexer: 1.2.2
       collect-v8-coverage: 1.0.1
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-message-util: 29.5.0
       jest-mock: 29.5.0
@@ -12619,7 +13114,7 @@ packages:
       '@types/node': 18.15.0
       chalk: 4.1.2
       ci-info: 3.7.1
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       picomatch: 2.3.1
     dev: true
 
@@ -12771,20 +13266,20 @@ packages:
     peerDependencies:
       '@babel/preset-env': ^7.1.6
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/parser': 7.20.7
-      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12
+      '@babel/core': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3
       '@babel/preset-env': 7.20.2_@babel+core@7.20.12
-      '@babel/preset-flow': 7.18.6_@babel+core@7.20.12
-      '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12
-      '@babel/register': 7.21.0_@babel+core@7.20.12
-      babel-core: 7.0.0-bridge.0_@babel+core@7.20.12
+      '@babel/preset-flow': 7.18.6_@babel+core@7.21.3
+      '@babel/preset-typescript': 7.21.0_@babel+core@7.21.3
+      '@babel/register': 7.21.0_@babel+core@7.21.3
+      babel-core: 7.0.0-bridge.0_@babel+core@7.21.3
       chalk: 4.1.2
       flow-parser: 0.202.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       micromatch: 4.0.5
       neo-async: 2.6.2
       node-dir: 0.1.17
@@ -12887,7 +13382,7 @@ packages:
   /jsonfile/4.0.0:
     resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: false
 
   /jsonfile/5.0.0:
@@ -12895,7 +13390,7 @@ packages:
     dependencies:
       universalify: 0.1.2
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: false
 
   /jsonfile/6.1.0:
@@ -12903,7 +13398,7 @@ packages:
     dependencies:
       universalify: 2.0.0
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: true
 
   /jsonld/8.1.1:
@@ -13078,7 +13573,6 @@ packages:
     dependencies:
       prelude-ls: 1.1.2
       type-check: 0.3.2
-    dev: false
 
   /levn/0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
@@ -13144,7 +13638,7 @@ packages:
     resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
     engines: {node: '>=0.10.0'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       parse-json: 2.2.0
       pify: 2.3.0
       pinkie-promise: 2.0.1
@@ -13543,6 +14037,11 @@ packages:
     resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  /min-indent/1.0.1:
+    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+    engines: {node: '>=4'}
+    dev: true
+
   /minimalistic-assert/1.0.1:
     resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
     dev: false
@@ -14300,7 +14799,6 @@ packages:
       prelude-ls: 1.1.2
       type-check: 0.3.2
       word-wrap: 1.2.3
-    dev: false
 
   /optionator/0.9.1:
     resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
@@ -14620,7 +15118,7 @@ packages:
     resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
     engines: {node: '>=0.10.0'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       pify: 2.3.0
       pinkie-promise: 2.0.1
     dev: false
@@ -15125,7 +15623,6 @@ packages:
   /prelude-ls/1.1.2:
     resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
     engines: {node: '>= 0.8.0'}
-    dev: false
 
   /prelude-ls/1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -15466,6 +15963,13 @@ packages:
       side-channel: 1.0.4
     dev: true
 
+  /qs/6.11.1:
+    resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==}
+    engines: {node: '>=0.6'}
+    dependencies:
+      side-channel: 1.0.4
+    dev: true
+
   /qs/6.5.3:
     resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
     engines: {node: '>=0.6'}
@@ -15584,6 +16088,33 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /react-docgen-typescript/2.2.2_typescript@4.9.5:
+    resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
+    peerDependencies:
+      typescript: '>= 4.3.x'
+    dependencies:
+      typescript: 4.9.5
+    dev: true
+
+  /react-docgen/6.0.0-alpha.3:
+    resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==}
+    engines: {node: '>=12.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/generator': 7.21.3
+      ast-types: 0.14.2
+      commander: 2.20.3
+      doctrine: 3.0.0
+      estree-to-babel: 3.2.1
+      neo-async: 2.6.2
+      node-dir: 0.1.17
+      resolve: 1.22.1
+      strip-indent: 3.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /react-dom/18.2.0_react@18.2.0:
     resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
     peerDependencies:
@@ -15594,6 +16125,19 @@ packages:
       scheduler: 0.23.0
     dev: true
 
+  /react-element-to-jsx-string/15.0.0_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==}
+    peerDependencies:
+      react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+      react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+    dependencies:
+      '@base2/pretty-print-object': 1.0.1
+      is-plain-object: 5.0.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      react-is: 18.1.0
+    dev: true
+
   /react-inspector/6.0.1_react@18.2.0:
     resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==}
     peerDependencies:
@@ -15610,10 +16154,19 @@ packages:
     resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
     dev: true
 
+  /react-is/18.1.0:
+    resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
+    dev: true
+
   /react-is/18.2.0:
     resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
     dev: true
 
+  /react-refresh/0.14.0:
+    resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /react/18.2.0:
     resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
     engines: {node: '>=0.10.0'}
@@ -16948,6 +17501,13 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /strip-indent/3.0.0:
+    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+    engines: {node: '>=8'}
+    dependencies:
+      min-indent: 1.0.1
+    dev: true
+
   /strip-json-comments/2.0.1:
     resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
     engines: {node: '>=0.10.0'}
@@ -17450,7 +18010,6 @@ packages:
     engines: {node: '>= 0.8.0'}
     dependencies:
       prelude-ls: 1.1.2
-    dev: false
 
   /type-check/0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -17821,17 +18380,6 @@ packages:
       setimmediate: 1.0.5
     dev: false
 
-  /update-browserslist-db/1.0.10_browserslist@4.21.4:
-    resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-    dependencies:
-      browserslist: 4.21.4
-      escalade: 3.1.1
-      picocolors: 1.0.0
-    dev: true
-
   /update-browserslist-db/1.0.10_browserslist@4.21.5:
     resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
     hasBin: true
@@ -17990,7 +18538,7 @@ packages:
     dependencies:
       fs-mkdirp-stream: 1.0.0
       glob-stream: 6.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       is-valid-glob: 1.0.0
       lazystream: 1.0.1
       lead: 1.0.0
@@ -18013,7 +18561,7 @@ packages:
     dependencies:
       append-buffer: 1.0.2
       convert-source-map: 1.9.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       normalize-path: 2.1.1
       now-and-later: 2.0.1
       remove-bom-buffer: 3.0.0
@@ -18300,7 +18848,7 @@ packages:
     engines: {node: '>=10.13.0'}
     dependencies:
       glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: true
 
   /wcwidth/1.0.1:
@@ -18514,7 +19062,7 @@ packages:
   /write-file-atomic/2.4.3:
     resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       imurmurhash: 0.1.4
       signal-exit: 3.0.7
     dev: true
@@ -18749,6 +19297,38 @@ packages:
       sharp: 0.31.3
     dev: false
 
+  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_vcphge7oza42ndhprrearltd3q:
+    resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
+    id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
+    name: storybook-addon-misskey-theme
+    version: 0.0.0
+    peerDependencies:
+      '@storybook/blocks': ^7.0.0-rc.4
+      '@storybook/components': ^7.0.0-rc.4
+      '@storybook/core-events': ^7.0.0-rc.4
+      '@storybook/manager-api': ^7.0.0-rc.4
+      '@storybook/preview-api': ^7.0.0-rc.4
+      '@storybook/theming': ^7.0.0-rc.4
+      '@storybook/types': ^7.0.0-rc.4
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/components': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.5
+      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.5
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
   github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992:
     resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992}
     name: summaly
@@ -18768,7 +19348,7 @@ packages:
     name: plyr
     version: 3.7.0
     dependencies:
-      core-js: 3.27.1
+      core-js: 3.29.1
       custom-event-polyfill: 1.0.7
       loadjs: 4.2.0
       rangetouch: 2.0.1

From bf527cd6e761b72e81a5dfcb310353c11056c6e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 21 Mar 2023 11:58:58 +0900
Subject: [PATCH 13/99] refactor(#10336): semantics

---
 packages/frontend/.storybook/generate.tsx | 8 +++++++-
 packages/frontend/.storybook/preview.ts   | 2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 327ed4bc79..0a4ec39108 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -16,7 +16,13 @@ interface SatisfiesExpression extends estree.BaseExpression {
 const generator = {
 	...GENERATOR,
 	SatisfiesExpression(node: SatisfiesExpression, state: State) {
-		this[node.expression.type](node.expression, state);
+		if (node.expression.type === 'ArrowFunctionExpression') {
+			state.write('(');
+			this[node.expression.type](node.expression, state);
+			state.write(')');
+		} else {
+			this[node.expression.type](node.expression, state);
+		}
 		state.write(' satisfies ');
 		this[node.reference.type](node.reference, state);
 	},
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index a39b59fa7b..72e642189f 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -64,7 +64,7 @@ const preview = {
 			const story = Story();
 			if (!initialized) {
 				const channel = addons.getChannel();
-				requestIdleCallback(() => {
+				(globalThis.requestIdleCallback || setTimeout)(() => {
 					channel.emit(FORCE_REMOUNT, { storyId: context.id });
 				});
 			}

From cc3fbefc830c5e399d2f0f86e6d566f378457bf4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 21 Mar 2023 13:01:40 +0900
Subject: [PATCH 14/99] build(#10336): make .storybook as an individual
 TypeScript project

---
 packages/frontend/.storybook/.gitignore    |  7 +-
 packages/frontend/.storybook/generate.tsx  | 87 ++++++++++++++++------
 packages/frontend/.storybook/tsconfig.json | 22 ++++++
 packages/frontend/tsconfig.json            |  3 +
 4 files changed, 95 insertions(+), 24 deletions(-)
 create mode 100644 packages/frontend/.storybook/tsconfig.json

diff --git a/packages/frontend/.storybook/.gitignore b/packages/frontend/.storybook/.gitignore
index 0de26507c6..649b36b848 100644
--- a/packages/frontend/.storybook/.gitignore
+++ b/packages/frontend/.storybook/.gitignore
@@ -1,8 +1,9 @@
-# (cd path/to/frontend; pnpm tsc --jsx react --jsxFactory h .storybook/generate.tsx && node .storybook/generate.js)
+# (cd path/to/frontend; pnpm tsc -p .storybook)
+# (cd path/to/frontend; node .storybook/generate.js)
 /generate.js
-# (cd path/to/frontend; pnpm tsc .storybook/preload-locale.ts && node .storybook/preload-locale.js)
+# (cd path/to/frontend; node .storybook/preload-locale.js)
 /preload-locale.js
 /locale.ts
-# (cd path/to/frontend; pnpm tsc .storybook/preload-theme.ts && node .storybook/preload-theme.js)
+# (cd path/to/frontend; node .storybook/preload-theme.js)
 /preload-theme.js
 /themes.ts
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 0a4ec39108..8ce2af772c 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -4,7 +4,7 @@ import { basename, dirname } from 'node:path/posix';
 import { promisify } from 'node:util';
 import { GENERATOR, type State, generate } from 'astring';
 import type * as estree from 'estree';
-import * as glob from 'glob';
+import glob from 'glob';
 import { format } from 'prettier';
 
 interface SatisfiesExpression extends estree.BaseExpression {
@@ -16,23 +16,69 @@ interface SatisfiesExpression extends estree.BaseExpression {
 const generator = {
 	...GENERATOR,
 	SatisfiesExpression(node: SatisfiesExpression, state: State) {
-		if (node.expression.type === 'ArrowFunctionExpression') {
-			state.write('(');
-			this[node.expression.type](node.expression, state);
-			state.write(')');
-		} else {
-			this[node.expression.type](node.expression, state);
+		switch (node.expression.type) {
+			case 'ArrowFunctionExpression': {
+				state.write('(');
+				this[node.expression.type](node.expression, state);
+				state.write(')');
+				break;
+			}
+			default: {
+				// @ts-ignore
+				this[node.expression.type](node.expression, state);
+				break;
+			}
 		}
 		state.write(' satisfies ');
 		this[node.reference.type](node.reference, state);
 	},
 }
 
+type SplitCamel<T extends string, YC extends string = '', YN extends readonly string[] = []> = T extends `${infer XH}${infer XR}`
+	? XR extends ''
+		? [...YN, Uncapitalize<`${YC}${XH}`>]
+		: XH extends Uppercase<XH>
+			? SplitCamel<XR, Lowercase<XH>, [...YN, YC]>
+			: SplitCamel<XR, `${YC}${XH}`, YN>
+	: YN;
+
+// @ts-ignore
+type SplitKebab<T extends string> = T extends `${infer XH}-${infer XR}`
+	? [XH, ...SplitKebab<XR>]
+	: [T];
+
+type ToKebab<T extends readonly string[]> = T extends readonly [infer XO extends string]
+	? XO
+	: T extends readonly [infer XH extends string, ...infer XR extends readonly string[]]
+		? `${XH}${XR extends readonly string[] ? `-${ToKebab<XR>}` : ''}`
+		: '';
+
+// @ts-ignore
+type ToPascal<T extends readonly string[]> = T extends readonly [infer XH extends string, ...infer XR extends readonly string[]]
+	? `${Capitalize<XH>}${ToPascal<XR>}`
+	: '';
+
 function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>): T {
 	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
 	return Object.assign(props, { type }) as T;
 }
 
+declare global {
+	namespace JSX {
+		type Element = never;
+		type ElementClass = never;
+		type ElementAttributesProperty = never;
+		type ElementChildrenAttribute = never;
+		type IntrinsicAttributes = never;
+		type IntrinsicClassAttributes<T> = never;
+		type IntrinsicElements = {
+			[T in keyof typeof generator as ToKebab<SplitCamel<Uncapitalize<T>>>]: {
+				[K in keyof Omit<Parameters<typeof generator[T]>[0], 'type'>]?: Parameters<typeof generator[T]>[0][K];
+			};
+		};
+	}
+}
+
 function toStories(component: string): string {
 	const msw = `${component.slice(0, -'.vue'.length)}.msw`;
 	const implStories = `${component.slice(0, -'.vue'.length)}.stories.impl`;
@@ -52,14 +98,14 @@ function toStories(component: string): string {
 				<property
 					key={<identifier name="layout" />}
 					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'} />}
-					kind="init"
+					kind={"init" as const}
 				/>,
 				...hasMsw
 					? [
 							<property
 								key={<identifier name="msw" />}
 								value={<identifier name="msw" />}
-								kind="init"
+								kind={"init" as const}
 								shorthand
 							/>,
 						]
@@ -107,13 +153,12 @@ function toStories(component: string): string {
 								specifiers={[
 									<import-default-specifier
 										local={identifier}
-										imported={identifier}
 									/>,
 								]}
 							/>,
 						],
 				<variable-declaration
-					kind="const"
+					kind={"const" as const}
 					declarations={[
 						<variable-declarator
 							id={<identifier name="meta" />}
@@ -125,12 +170,12 @@ function toStories(component: string): string {
 												<property
 													key={<identifier name="title" />}
 													value={literal}
-													kind="init"
+													kind={"init" as const}
 												/>,
 												<property
 													key={<identifier name="component" />}
 													value={identifier}
-													kind="init"
+													kind={"init" as const}
 												/>,
 											]}
 										/>
@@ -148,7 +193,7 @@ function toStories(component: string): string {
 							<export-named-declaration
 								declaration={
 									<variable-declaration
-										kind="const"
+										kind={"const" as const}
 										declarations={[
 											<variable-declarator
 												id={<identifier name="Default" />}
@@ -169,7 +214,7 @@ function toStories(component: string): string {
 																							<property
 																								key={<identifier name="argTypes" />}
 																								value={<identifier name="argTypes" />}
-																								kind="init"
+																								kind={"init" as const}
 																								shorthand
 																							/>,
 																						]}
@@ -190,13 +235,13 @@ function toStories(component: string): string {
 																															<property
 																																key={identifier}
 																																value={identifier}
-																																kind="init"
+																																kind={"init" as const}
 																																shorthand
 																															/>,
 																														]}
 																													/>
 																												}
-																												kind="init"
+																												kind={"init" as const}
 																											/>,
 																											<property
 																												key={<identifier name="props" />}
@@ -213,12 +258,12 @@ function toStories(component: string): string {
 																														]}
 																													/>
 																												}
-																												kind="init"
+																												kind={"init" as const}
 																											/>,
 																											<property
 																												key={<identifier name="template" />}
 																												value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
-																												kind="init"
+																												kind={"init" as const}
 																											/>,
 																										]}
 																									/>
@@ -230,12 +275,12 @@ function toStories(component: string): string {
 																			/>
 																		}
 																		method
-																		kind="init"
+																		kind={"init" as const}
 																	/>,
 																	<property
 																		key={<identifier name="parameters" />}
 																		value={parameters}
-																		kind="init"
+																		kind={"init" as const}
 																	/>,
 																]}
 															/>
diff --git a/packages/frontend/.storybook/tsconfig.json b/packages/frontend/.storybook/tsconfig.json
new file mode 100644
index 0000000000..01aa9db6eb
--- /dev/null
+++ b/packages/frontend/.storybook/tsconfig.json
@@ -0,0 +1,22 @@
+{
+	"compilerOptions": {
+		"strict": true,
+		"allowUnusedLabels": false,
+		"allowUnreachableCode": false,
+		"exactOptionalPropertyTypes": true,
+		"noFallthroughCasesInSwitch": true,
+		"noImplicitOverride": true,
+		"noImplicitReturns": true,
+		"noPropertyAccessFromIndexSignature": true,
+		"noUncheckedIndexedAccess": true,
+		"noUnusedLocals": true,
+		"noUnusedParameters": true,
+		"checkJs": true,
+		"esModuleInterop": true,
+		"skipLibCheck": true,
+		"forceConsistentCasingInFileNames": true,
+		"jsx": "react",
+		"jsxFactory": "h"
+	},
+	"files": ["./generate.tsx", "./preload-locale.ts", "./preload-theme.ts"]
+}
diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json
index 54e5219b56..4d582daa3c 100644
--- a/packages/frontend/tsconfig.json
+++ b/packages/frontend/tsconfig.json
@@ -43,5 +43,8 @@
 		".eslintrc.js",
 		"./**/*.ts",
 		"./**/*.vue"
+	],
+	"exclude": [
+		".storybook/**/*",
 	]
 }

From 49f8bb4974e5ce7253c19d9888e65ac5f29677f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 21 Mar 2023 13:05:40 +0900
Subject: [PATCH 15/99] style(#10336): use single quote

---
 packages/frontend/.storybook/generate.tsx | 80 +++++++++++------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 8ce2af772c..4d71dd81e3 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -96,16 +96,16 @@ function toStories(component: string): string {
 		<object-expression
 			properties={[
 				<property
-					key={<identifier name="layout" />}
+					key={<identifier name='layout' />}
 					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'} />}
-					kind={"init" as const}
+					kind={'init' as const}
 				/>,
 				...hasMsw
 					? [
 							<property
-								key={<identifier name="msw" />}
-								value={<identifier name="msw" />}
-								kind={"init" as const}
+								key={<identifier name='msw' />}
+								value={<identifier name='msw' />}
+								kind={'init' as const}
 								shorthand
 							/>,
 						]
@@ -117,18 +117,18 @@ function toStories(component: string): string {
 		<program
 			body={[
 				<import-declaration
-					source={<literal value="@storybook/vue3" />}
+					source={<literal value='@storybook/vue3' />}
 					specifiers={[
 						<import-specifier
-							local={<identifier name="Meta" />}
-							imported={<identifier name="Meta" />}
+							local={<identifier name='Meta' />}
+							imported={<identifier name='Meta' />}
 						/>,
 						...hasImplStories
 							? []
 							: [
 									<import-specifier
-										local={<identifier name="StoryObj" />}
-										imported={<identifier name="StoryObj" />}
+										local={<identifier name='StoryObj' />}
+										imported={<identifier name='StoryObj' />}
 									/>,
 								],
 					]}
@@ -139,7 +139,7 @@ function toStories(component: string): string {
 								source={<literal value={`./${basename(msw)}`} />}
 								specifiers={[
 									<import-namespace-specifier
-										local={<identifier name="msw" />}
+										local={<identifier name='msw' />}
 									/>,
 								]}
 							/>,
@@ -158,24 +158,24 @@ function toStories(component: string): string {
 							/>,
 						],
 				<variable-declaration
-					kind={"const" as const}
+					kind={'const' as const}
 					declarations={[
 						<variable-declarator
-							id={<identifier name="meta" />}
+							id={<identifier name='meta' />}
 							init={
 								<satisfies-expression
 									expression={
 										<object-expression
 											properties={[
 												<property
-													key={<identifier name="title" />}
+													key={<identifier name='title' />}
 													value={literal}
-													kind={"init" as const}
+													kind={'init' as const}
 												/>,
 												<property
-													key={<identifier name="component" />}
+													key={<identifier name='component' />}
 													value={identifier}
-													kind={"init" as const}
+													kind={'init' as const}
 												/>,
 											]}
 										/>
@@ -193,28 +193,28 @@ function toStories(component: string): string {
 							<export-named-declaration
 								declaration={
 									<variable-declaration
-										kind={"const" as const}
+										kind={'const' as const}
 										declarations={[
 											<variable-declarator
-												id={<identifier name="Default" />}
+												id={<identifier name='Default' />}
 												init={
 													<satisfies-expression
 														expression={
 															<object-expression
 																properties={[
 																	<property
-																		key={<identifier name="render" />}
+																		key={<identifier name='render' />}
 																		value={
 																			<function-expression
-																				id={<identifier name="render" />}
+																				id={<identifier name='render' />}
 																				params={[
-																					<identifier name="args" />,
+																					<identifier name='args' />,
 																					<object-pattern
 																						properties={[
 																							<property
-																								key={<identifier name="argTypes" />}
-																								value={<identifier name="argTypes" />}
-																								kind={"init" as const}
+																								key={<identifier name='argTypes' />}
+																								value={<identifier name='argTypes' />}
+																								kind={'init' as const}
 																								shorthand
 																							/>,
 																						]}
@@ -228,42 +228,42 @@ function toStories(component: string): string {
 																									<object-expression
 																										properties={[
 																											<property
-																												key={<identifier name="components" />}
+																												key={<identifier name='components' />}
 																												value={
 																													<object-expression
 																														properties={[
 																															<property
 																																key={identifier}
 																																value={identifier}
-																																kind={"init" as const}
+																																kind={'init' as const}
 																																shorthand
 																															/>,
 																														]}
 																													/>
 																												}
-																												kind={"init" as const}
+																												kind={'init' as const}
 																											/>,
 																											<property
-																												key={<identifier name="props" />}
+																												key={<identifier name='props' />}
 																												value={
 																													<call-expression
 																														callee={
 																															<member-expression
-																																object={<identifier name="Object" />}
-																																property={<identifier name="keys" />}
+																																object={<identifier name='Object' />}
+																																property={<identifier name='keys' />}
 																															/>
 																														}
 																														arguments={[
-																															<identifier name="argTypes" />,
+																															<identifier name='argTypes' />,
 																														]}
 																													/>
 																												}
-																												kind={"init" as const}
+																												kind={'init' as const}
 																											/>,
 																											<property
-																												key={<identifier name="template" />}
-																												value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
-																												kind={"init" as const}
+																												key={<identifier name='template' />}
+																												value={<literal value={`<${identifier.name} v-bind='$props' />`} />}
+																												kind={'init' as const}
 																											/>,
 																										]}
 																									/>
@@ -275,12 +275,12 @@ function toStories(component: string): string {
 																			/>
 																		}
 																		method
-																		kind={"init" as const}
+																		kind={'init' as const}
 																	/>,
 																	<property
-																		key={<identifier name="parameters" />}
+																		key={<identifier name='parameters' />}
 																		value={parameters}
-																		kind={"init" as const}
+																		kind={'init' as const}
 																	/>,
 																]}
 															/>
@@ -295,7 +295,7 @@ function toStories(component: string): string {
 							/>,
 						],
 				<export-default-declaration
-					declaration={<identifier name="meta" />}
+					declaration={<identifier name='meta' />}
 				/>,
 			]}
 		/>

From 5ced8aef273e6cb378638f0a42d67a25437e3f16 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 21 Mar 2023 13:12:30 +0900
Subject: [PATCH 16/99] build(#10336): avoid intrinsic component names

---
 packages/frontend/.storybook/generate.tsx            |  4 ++--
 .../frontend/src/components/form/link.stories.ts     | 12 ++++++------
 .../frontend/src/components/form/section.stories.ts  | 12 ++++++------
 .../frontend/src/components/form/slot.stories.ts     | 12 ++++++------
 .../frontend/src/components/form/split.stories.ts    | 12 ++++++------
 .../frontend/src/components/form/suspense.stories.ts | 12 ++++++------
 .../frontend/src/components/page/page.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/about.stories.ts         | 12 ++++++------
 packages/frontend/src/pages/achievements.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/admin/abuses.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/admin/ads.stories.ts     | 12 ++++++------
 .../src/pages/admin/announcements.stories.ts         | 12 ++++++------
 .../frontend/src/pages/admin/database.stories.ts     | 12 ++++++------
 .../frontend/src/pages/admin/federation.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/admin/files.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/admin/index.stories.ts   | 12 ++++++------
 .../frontend/src/pages/admin/moderation.stories.ts   | 12 ++++++------
 .../frontend/src/pages/admin/overview.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/admin/queue.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/admin/relays.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/admin/roles.stories.ts   | 12 ++++++------
 .../frontend/src/pages/admin/security.stories.ts     | 12 ++++++------
 .../frontend/src/pages/admin/settings.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/admin/users.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/ads.stories.ts           | 12 ++++++------
 packages/frontend/src/pages/announcements.stories.ts | 12 ++++++------
 packages/frontend/src/pages/auth.stories.ts          | 12 ++++++------
 packages/frontend/src/pages/channel.stories.ts       | 12 ++++++------
 packages/frontend/src/pages/channels.stories.ts      | 12 ++++++------
 packages/frontend/src/pages/clicker.stories.ts       | 12 ++++++------
 packages/frontend/src/pages/clip.stories.ts          | 12 ++++++------
 packages/frontend/src/pages/drive.stories.ts         | 12 ++++++------
 packages/frontend/src/pages/explore.stories.ts       | 12 ++++++------
 packages/frontend/src/pages/favorites.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/flash/flash.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/follow.stories.ts        | 12 ++++++------
 packages/frontend/src/pages/gallery/edit.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/gallery/index.stories.ts | 12 ++++++------
 packages/frontend/src/pages/gallery/post.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/miauth.stories.ts        | 12 ++++++------
 .../frontend/src/pages/my-antennas/create.stories.ts | 12 ++++++------
 .../frontend/src/pages/my-antennas/edit.stories.ts   | 12 ++++++------
 .../frontend/src/pages/my-antennas/editor.stories.ts | 12 ++++++------
 .../frontend/src/pages/my-antennas/index.stories.ts  | 12 ++++++------
 .../frontend/src/pages/my-clips/index.stories.ts     | 12 ++++++------
 .../frontend/src/pages/my-lists/index.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/my-lists/list.stories.ts | 12 ++++++------
 packages/frontend/src/pages/note.stories.ts          | 12 ++++++------
 packages/frontend/src/pages/notifications.stories.ts | 12 ++++++------
 packages/frontend/src/pages/page.stories.ts          | 12 ++++++------
 packages/frontend/src/pages/pages.stories.ts         | 12 ++++++------
 packages/frontend/src/pages/preview.stories.ts       | 12 ++++++------
 packages/frontend/src/pages/registry.stories.ts      | 12 ++++++------
 packages/frontend/src/pages/role.stories.ts          | 12 ++++++------
 packages/frontend/src/pages/scratchpad.stories.ts    | 12 ++++++------
 packages/frontend/src/pages/search.stories.ts        | 12 ++++++------
 .../frontend/src/pages/settings/accounts.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/settings/api.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/settings/apps.stories.ts | 12 ++++++------
 packages/frontend/src/pages/settings/deck.stories.ts | 12 ++++++------
 .../frontend/src/pages/settings/drive.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/email.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/general.stories.ts   | 12 ++++++------
 .../frontend/src/pages/settings/index.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/navbar.stories.ts    | 12 ++++++------
 .../src/pages/settings/notifications.stories.ts      | 12 ++++++------
 .../frontend/src/pages/settings/other.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/plugin.stories.ts    | 12 ++++++------
 .../frontend/src/pages/settings/privacy.stories.ts   | 12 ++++++------
 .../frontend/src/pages/settings/profile.stories.ts   | 12 ++++++------
 .../frontend/src/pages/settings/reaction.stories.ts  | 12 ++++++------
 .../frontend/src/pages/settings/roles.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/security.stories.ts  | 12 ++++++------
 .../frontend/src/pages/settings/sounds.stories.ts    | 12 ++++++------
 .../frontend/src/pages/settings/statusbar.stories.ts | 12 ++++++------
 .../frontend/src/pages/settings/theme.stories.ts     | 12 ++++++------
 .../frontend/src/pages/settings/webhook.stories.ts   | 12 ++++++------
 packages/frontend/src/pages/share.stories.ts         | 12 ++++++------
 packages/frontend/src/pages/tag.stories.ts           | 12 ++++++------
 packages/frontend/src/pages/timeline.stories.ts      | 12 ++++++------
 .../frontend/src/pages/user/achievements.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/user/activity.stories.ts | 12 ++++++------
 packages/frontend/src/pages/user/clips.stories.ts    | 12 ++++++------
 .../frontend/src/pages/user/followers.stories.ts     | 12 ++++++------
 .../frontend/src/pages/user/following.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/user/gallery.stories.ts  | 12 ++++++------
 packages/frontend/src/pages/user/home.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/user/index.stories.ts    | 12 ++++++------
 packages/frontend/src/pages/user/pages.stories.ts    | 12 ++++++------
 .../frontend/src/pages/user/reactions.stories.ts     | 12 ++++++------
 packages/frontend/src/pages/welcome.stories.ts       | 12 ++++++------
 packages/frontend/src/ui/_common_/common.stories.ts  | 12 ++++++------
 packages/frontend/src/ui/_common_/navbar.stories.ts  | 12 ++++++------
 .../frontend/src/ui/_common_/notification.stories.ts | 12 ++++++------
 .../frontend/src/ui/_common_/statusbars.stories.ts   | 12 ++++++------
 packages/frontend/src/ui/_common_/upload.stories.ts  | 12 ++++++------
 packages/frontend/src/ui/classic.stories.ts          | 12 ++++++------
 packages/frontend/src/ui/deck.stories.ts             | 12 ++++++------
 packages/frontend/src/ui/deck/column.stories.ts      | 12 ++++++------
 packages/frontend/src/ui/universal.stories.ts        | 12 ++++++------
 packages/frontend/src/ui/visitor.stories.ts          | 12 ++++++------
 packages/frontend/src/ui/visitor/a.stories.ts        | 12 ++++++------
 packages/frontend/src/ui/visitor/b.stories.ts        | 12 ++++++------
 packages/frontend/src/ui/visitor/header.stories.ts   | 12 ++++++------
 packages/frontend/src/ui/visitor/kanban.stories.ts   | 12 ++++++------
 packages/frontend/src/ui/zen.stories.ts              | 12 ++++++------
 .../src/widgets/server-metric/cpu.stories.ts         | 12 ++++++------
 .../src/widgets/server-metric/disk.stories.ts        | 12 ++++++------
 .../src/widgets/server-metric/index.stories.ts       | 12 ++++++------
 .../src/widgets/server-metric/mem.stories.ts         | 12 ++++++------
 .../src/widgets/server-metric/net.stories.ts         | 12 ++++++------
 .../src/widgets/server-metric/pie.stories.ts         | 12 ++++++------
 112 files changed, 668 insertions(+), 668 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 4d71dd81e3..a368a4f68e 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -90,7 +90,7 @@ function toStories(component: string): string {
 		<literal value={component.slice('src/'.length, -'.vue'.length)} />
 	) as unknown as estree.Literal;
 	const identifier = (
-		<identifier name={base.slice(0, -'.vue'.length).replace(/[-.]|^(?=\d)/g, '_')} />
+		<identifier name={base.slice(0, -'.vue'.length).replace(/[-.]|^(?=\d)/g, '_').replace(/(?<=^[^A-Z_]*$)/, '_')} />
 	) as unknown as estree.Identifier;
 	const parameters = (
 		<object-expression
@@ -262,7 +262,7 @@ function toStories(component: string): string {
 																											/>,
 																											<property
 																												key={<identifier name='template' />}
-																												value={<literal value={`<${identifier.name} v-bind='$props' />`} />}
+																												value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
 																												kind={'init' as const}
 																											/>,
 																										]}
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index 7e9fdb715a..c46949f43a 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import link from './link.vue';
+import link_ from './link.vue';
 const meta = {
 	title: 'components/form/link',
-	component: link,
-} satisfies Meta<typeof link>;
+	component: link_,
+} satisfies Meta<typeof link_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				link,
+				link_,
 			},
 			props: Object.keys(argTypes),
-			template: '<link v-bind="$props" />',
+			template: '<link_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof link>;
+} satisfies StoryObj<typeof link_>;
 export default meta;
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index c08f907565..aae1ec2e43 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import section from './section.vue';
+import section_ from './section.vue';
 const meta = {
 	title: 'components/form/section',
-	component: section,
-} satisfies Meta<typeof section>;
+	component: section_,
+} satisfies Meta<typeof section_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				section,
+				section_,
 			},
 			props: Object.keys(argTypes),
-			template: '<section v-bind="$props" />',
+			template: '<section_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof section>;
+} satisfies StoryObj<typeof section_>;
 export default meta;
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index 4049276110..035d74f1c1 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import slot from './slot.vue';
+import slot_ from './slot.vue';
 const meta = {
 	title: 'components/form/slot',
-	component: slot,
-} satisfies Meta<typeof slot>;
+	component: slot_,
+} satisfies Meta<typeof slot_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				slot,
+				slot_,
 			},
 			props: Object.keys(argTypes),
-			template: '<slot v-bind="$props" />',
+			template: '<slot_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof slot>;
+} satisfies StoryObj<typeof slot_>;
 export default meta;
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index 48ccfcf78a..fca1db65f4 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import split from './split.vue';
+import split_ from './split.vue';
 const meta = {
 	title: 'components/form/split',
-	component: split,
-} satisfies Meta<typeof split>;
+	component: split_,
+} satisfies Meta<typeof split_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				split,
+				split_,
 			},
 			props: Object.keys(argTypes),
-			template: '<split v-bind="$props" />',
+			template: '<split_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof split>;
+} satisfies StoryObj<typeof split_>;
 export default meta;
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index 39e74fa1b6..abb6a802e0 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import suspense from './suspense.vue';
+import suspense_ from './suspense.vue';
 const meta = {
 	title: 'components/form/suspense',
-	component: suspense,
-} satisfies Meta<typeof suspense>;
+	component: suspense_,
+} satisfies Meta<typeof suspense_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				suspense,
+				suspense_,
 			},
 			props: Object.keys(argTypes),
-			template: '<suspense v-bind="$props" />',
+			template: '<suspense_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof suspense>;
+} satisfies StoryObj<typeof suspense_>;
 export default meta;
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index 5a9bc2a691..f6439fd0c1 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import page from './page.vue';
+import page_ from './page.vue';
 const meta = {
 	title: 'components/page/page',
-	component: page,
-} satisfies Meta<typeof page>;
+	component: page_,
+} satisfies Meta<typeof page_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				page,
+				page_,
 			},
 			props: Object.keys(argTypes),
-			template: '<page v-bind="$props" />',
+			template: '<page_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof page>;
+} satisfies StoryObj<typeof page_>;
 export default meta;
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index 079aad11ab..ba25159971 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import about from './about.vue';
+import about_ from './about.vue';
 const meta = {
 	title: 'pages/about',
-	component: about,
-} satisfies Meta<typeof about>;
+	component: about_,
+} satisfies Meta<typeof about_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				about,
+				about_,
 			},
 			props: Object.keys(argTypes),
-			template: '<about v-bind="$props" />',
+			template: '<about_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof about>;
+} satisfies StoryObj<typeof about_>;
 export default meta;
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index 8581760dc2..d0c1126af3 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import achievements from './achievements.vue';
+import achievements_ from './achievements.vue';
 const meta = {
 	title: 'pages/achievements',
-	component: achievements,
-} satisfies Meta<typeof achievements>;
+	component: achievements_,
+} satisfies Meta<typeof achievements_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				achievements,
+				achievements_,
 			},
 			props: Object.keys(argTypes),
-			template: '<achievements v-bind="$props" />',
+			template: '<achievements_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof achievements>;
+} satisfies StoryObj<typeof achievements_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index 782799d161..e98fae9df5 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import abuses from './abuses.vue';
+import abuses_ from './abuses.vue';
 const meta = {
 	title: 'pages/admin/abuses',
-	component: abuses,
-} satisfies Meta<typeof abuses>;
+	component: abuses_,
+} satisfies Meta<typeof abuses_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				abuses,
+				abuses_,
 			},
 			props: Object.keys(argTypes),
-			template: '<abuses v-bind="$props" />',
+			template: '<abuses_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof abuses>;
+} satisfies StoryObj<typeof abuses_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 9436302243..80fe84e31e 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import ads from './ads.vue';
+import ads_ from './ads.vue';
 const meta = {
 	title: 'pages/admin/ads',
-	component: ads,
-} satisfies Meta<typeof ads>;
+	component: ads_,
+} satisfies Meta<typeof ads_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				ads,
+				ads_,
 			},
 			props: Object.keys(argTypes),
-			template: '<ads v-bind="$props" />',
+			template: '<ads_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof ads>;
+} satisfies StoryObj<typeof ads_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index 18a0178516..72a5a7b4d6 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import announcements from './announcements.vue';
+import announcements_ from './announcements.vue';
 const meta = {
 	title: 'pages/admin/announcements',
-	component: announcements,
-} satisfies Meta<typeof announcements>;
+	component: announcements_,
+} satisfies Meta<typeof announcements_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				announcements,
+				announcements_,
 			},
 			props: Object.keys(argTypes),
-			template: '<announcements v-bind="$props" />',
+			template: '<announcements_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof announcements>;
+} satisfies StoryObj<typeof announcements_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index 823ad4e24c..cf1cfdddf0 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import database from './database.vue';
+import database_ from './database.vue';
 const meta = {
 	title: 'pages/admin/database',
-	component: database,
-} satisfies Meta<typeof database>;
+	component: database_,
+} satisfies Meta<typeof database_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				database,
+				database_,
 			},
 			props: Object.keys(argTypes),
-			template: '<database v-bind="$props" />',
+			template: '<database_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof database>;
+} satisfies StoryObj<typeof database_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index 702201dfa0..231de45401 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import federation from './federation.vue';
+import federation_ from './federation.vue';
 const meta = {
 	title: 'pages/admin/federation',
-	component: federation,
-} satisfies Meta<typeof federation>;
+	component: federation_,
+} satisfies Meta<typeof federation_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				federation,
+				federation_,
 			},
 			props: Object.keys(argTypes),
-			template: '<federation v-bind="$props" />',
+			template: '<federation_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof federation>;
+} satisfies StoryObj<typeof federation_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index c78a146093..49c4f7a267 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import files from './files.vue';
+import files_ from './files.vue';
 const meta = {
 	title: 'pages/admin/files',
-	component: files,
-} satisfies Meta<typeof files>;
+	component: files_,
+} satisfies Meta<typeof files_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				files,
+				files_,
 			},
 			props: Object.keys(argTypes),
-			template: '<files v-bind="$props" />',
+			template: '<files_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof files>;
+} satisfies StoryObj<typeof files_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index 30141c3c97..504c2993f4 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/admin/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index dd53a34e3d..0847887e1f 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import moderation from './moderation.vue';
+import moderation_ from './moderation.vue';
 const meta = {
 	title: 'pages/admin/moderation',
-	component: moderation,
-} satisfies Meta<typeof moderation>;
+	component: moderation_,
+} satisfies Meta<typeof moderation_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				moderation,
+				moderation_,
 			},
 			props: Object.keys(argTypes),
-			template: '<moderation v-bind="$props" />',
+			template: '<moderation_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof moderation>;
+} satisfies StoryObj<typeof moderation_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index 4f557e6ff0..f35ba14dbd 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import overview from './overview.vue';
+import overview_ from './overview.vue';
 const meta = {
 	title: 'pages/admin/overview',
-	component: overview,
-} satisfies Meta<typeof overview>;
+	component: overview_,
+} satisfies Meta<typeof overview_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				overview,
+				overview_,
 			},
 			props: Object.keys(argTypes),
-			template: '<overview v-bind="$props" />',
+			template: '<overview_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof overview>;
+} satisfies StoryObj<typeof overview_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index deb2445121..0e4335cee8 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import queue from './queue.vue';
+import queue_ from './queue.vue';
 const meta = {
 	title: 'pages/admin/queue',
-	component: queue,
-} satisfies Meta<typeof queue>;
+	component: queue_,
+} satisfies Meta<typeof queue_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				queue,
+				queue_,
 			},
 			props: Object.keys(argTypes),
-			template: '<queue v-bind="$props" />',
+			template: '<queue_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof queue>;
+} satisfies StoryObj<typeof queue_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index c229b97fe6..6e18d7568e 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import relays from './relays.vue';
+import relays_ from './relays.vue';
 const meta = {
 	title: 'pages/admin/relays',
-	component: relays,
-} satisfies Meta<typeof relays>;
+	component: relays_,
+} satisfies Meta<typeof relays_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				relays,
+				relays_,
 			},
 			props: Object.keys(argTypes),
-			template: '<relays v-bind="$props" />',
+			template: '<relays_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof relays>;
+} satisfies StoryObj<typeof relays_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index 4f789089ff..10873c3ec0 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import roles from './roles.vue';
+import roles_ from './roles.vue';
 const meta = {
 	title: 'pages/admin/roles',
-	component: roles,
-} satisfies Meta<typeof roles>;
+	component: roles_,
+} satisfies Meta<typeof roles_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				roles,
+				roles_,
 			},
 			props: Object.keys(argTypes),
-			template: '<roles v-bind="$props" />',
+			template: '<roles_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof roles>;
+} satisfies StoryObj<typeof roles_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index e483d86915..a0b8c9a68e 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import security from './security.vue';
+import security_ from './security.vue';
 const meta = {
 	title: 'pages/admin/security',
-	component: security,
-} satisfies Meta<typeof security>;
+	component: security_,
+} satisfies Meta<typeof security_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				security,
+				security_,
 			},
 			props: Object.keys(argTypes),
-			template: '<security v-bind="$props" />',
+			template: '<security_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof security>;
+} satisfies StoryObj<typeof security_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index 379cac5ba9..5231e0706b 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import settings from './settings.vue';
+import settings_ from './settings.vue';
 const meta = {
 	title: 'pages/admin/settings',
-	component: settings,
-} satisfies Meta<typeof settings>;
+	component: settings_,
+} satisfies Meta<typeof settings_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				settings,
+				settings_,
 			},
 			props: Object.keys(argTypes),
-			template: '<settings v-bind="$props" />',
+			template: '<settings_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof settings>;
+} satisfies StoryObj<typeof settings_>;
 export default meta;
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index 2b02b44e89..fe71259293 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import users from './users.vue';
+import users_ from './users.vue';
 const meta = {
 	title: 'pages/admin/users',
-	component: users,
-} satisfies Meta<typeof users>;
+	component: users_,
+} satisfies Meta<typeof users_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				users,
+				users_,
 			},
 			props: Object.keys(argTypes),
-			template: '<users v-bind="$props" />',
+			template: '<users_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof users>;
+} satisfies StoryObj<typeof users_>;
 export default meta;
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index 0bfae5ec48..3dc49e0628 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import ads from './ads.vue';
+import ads_ from './ads.vue';
 const meta = {
 	title: 'pages/ads',
-	component: ads,
-} satisfies Meta<typeof ads>;
+	component: ads_,
+} satisfies Meta<typeof ads_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				ads,
+				ads_,
 			},
 			props: Object.keys(argTypes),
-			template: '<ads v-bind="$props" />',
+			template: '<ads_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof ads>;
+} satisfies StoryObj<typeof ads_>;
 export default meta;
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index b882ca5a3c..8119b1ae5f 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import announcements from './announcements.vue';
+import announcements_ from './announcements.vue';
 const meta = {
 	title: 'pages/announcements',
-	component: announcements,
-} satisfies Meta<typeof announcements>;
+	component: announcements_,
+} satisfies Meta<typeof announcements_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				announcements,
+				announcements_,
 			},
 			props: Object.keys(argTypes),
-			template: '<announcements v-bind="$props" />',
+			template: '<announcements_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof announcements>;
+} satisfies StoryObj<typeof announcements_>;
 export default meta;
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index ebf3d2ac45..95a0c7f058 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import auth from './auth.vue';
+import auth_ from './auth.vue';
 const meta = {
 	title: 'pages/auth',
-	component: auth,
-} satisfies Meta<typeof auth>;
+	component: auth_,
+} satisfies Meta<typeof auth_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				auth,
+				auth_,
 			},
 			props: Object.keys(argTypes),
-			template: '<auth v-bind="$props" />',
+			template: '<auth_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof auth>;
+} satisfies StoryObj<typeof auth_>;
 export default meta;
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index daf90c86ff..55e532e805 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import channel from './channel.vue';
+import channel_ from './channel.vue';
 const meta = {
 	title: 'pages/channel',
-	component: channel,
-} satisfies Meta<typeof channel>;
+	component: channel_,
+} satisfies Meta<typeof channel_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				channel,
+				channel_,
 			},
 			props: Object.keys(argTypes),
-			template: '<channel v-bind="$props" />',
+			template: '<channel_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof channel>;
+} satisfies StoryObj<typeof channel_>;
 export default meta;
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index 3bab3c0263..3c592edf76 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import channels from './channels.vue';
+import channels_ from './channels.vue';
 const meta = {
 	title: 'pages/channels',
-	component: channels,
-} satisfies Meta<typeof channels>;
+	component: channels_,
+} satisfies Meta<typeof channels_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				channels,
+				channels_,
 			},
 			props: Object.keys(argTypes),
-			template: '<channels v-bind="$props" />',
+			template: '<channels_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof channels>;
+} satisfies StoryObj<typeof channels_>;
 export default meta;
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index 7229ed1290..643ceaa653 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import clicker from './clicker.vue';
+import clicker_ from './clicker.vue';
 const meta = {
 	title: 'pages/clicker',
-	component: clicker,
-} satisfies Meta<typeof clicker>;
+	component: clicker_,
+} satisfies Meta<typeof clicker_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				clicker,
+				clicker_,
 			},
 			props: Object.keys(argTypes),
-			template: '<clicker v-bind="$props" />',
+			template: '<clicker_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof clicker>;
+} satisfies StoryObj<typeof clicker_>;
 export default meta;
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index 1c11467c03..7beeb786be 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import clip from './clip.vue';
+import clip_ from './clip.vue';
 const meta = {
 	title: 'pages/clip',
-	component: clip,
-} satisfies Meta<typeof clip>;
+	component: clip_,
+} satisfies Meta<typeof clip_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				clip,
+				clip_,
 			},
 			props: Object.keys(argTypes),
-			template: '<clip v-bind="$props" />',
+			template: '<clip_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof clip>;
+} satisfies StoryObj<typeof clip_>;
 export default meta;
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index 04d767be63..ffaac68ab6 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import drive from './drive.vue';
+import drive_ from './drive.vue';
 const meta = {
 	title: 'pages/drive',
-	component: drive,
-} satisfies Meta<typeof drive>;
+	component: drive_,
+} satisfies Meta<typeof drive_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				drive,
+				drive_,
 			},
 			props: Object.keys(argTypes),
-			template: '<drive v-bind="$props" />',
+			template: '<drive_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof drive>;
+} satisfies StoryObj<typeof drive_>;
 export default meta;
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index 2d5425c197..5cf163e849 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import explore from './explore.vue';
+import explore_ from './explore.vue';
 const meta = {
 	title: 'pages/explore',
-	component: explore,
-} satisfies Meta<typeof explore>;
+	component: explore_,
+} satisfies Meta<typeof explore_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				explore,
+				explore_,
 			},
 			props: Object.keys(argTypes),
-			template: '<explore v-bind="$props" />',
+			template: '<explore_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof explore>;
+} satisfies StoryObj<typeof explore_>;
 export default meta;
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 33189eb6d6..8bfb283dc0 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import favorites from './favorites.vue';
+import favorites_ from './favorites.vue';
 const meta = {
 	title: 'pages/favorites',
-	component: favorites,
-} satisfies Meta<typeof favorites>;
+	component: favorites_,
+} satisfies Meta<typeof favorites_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				favorites,
+				favorites_,
 			},
 			props: Object.keys(argTypes),
-			template: '<favorites v-bind="$props" />',
+			template: '<favorites_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof favorites>;
+} satisfies StoryObj<typeof favorites_>;
 export default meta;
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index 1fb4f9406f..dddb5021d6 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import flash from './flash.vue';
+import flash_ from './flash.vue';
 const meta = {
 	title: 'pages/flash/flash',
-	component: flash,
-} satisfies Meta<typeof flash>;
+	component: flash_,
+} satisfies Meta<typeof flash_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				flash,
+				flash_,
 			},
 			props: Object.keys(argTypes),
-			template: '<flash v-bind="$props" />',
+			template: '<flash_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof flash>;
+} satisfies StoryObj<typeof flash_>;
 export default meta;
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index b833f094d5..67c07e10e3 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import follow from './follow.vue';
+import follow_ from './follow.vue';
 const meta = {
 	title: 'pages/follow',
-	component: follow,
-} satisfies Meta<typeof follow>;
+	component: follow_,
+} satisfies Meta<typeof follow_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				follow,
+				follow_,
 			},
 			props: Object.keys(argTypes),
-			template: '<follow v-bind="$props" />',
+			template: '<follow_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof follow>;
+} satisfies StoryObj<typeof follow_>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index ae8e9bf3ff..02f86ced3b 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import edit from './edit.vue';
+import edit_ from './edit.vue';
 const meta = {
 	title: 'pages/gallery/edit',
-	component: edit,
-} satisfies Meta<typeof edit>;
+	component: edit_,
+} satisfies Meta<typeof edit_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				edit,
+				edit_,
 			},
 			props: Object.keys(argTypes),
-			template: '<edit v-bind="$props" />',
+			template: '<edit_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof edit>;
+} satisfies StoryObj<typeof edit_>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index 36ca145387..21c4913ea8 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/gallery/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index b94095c815..ae018dd671 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import post from './post.vue';
+import post_ from './post.vue';
 const meta = {
 	title: 'pages/gallery/post',
-	component: post,
-} satisfies Meta<typeof post>;
+	component: post_,
+} satisfies Meta<typeof post_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				post,
+				post_,
 			},
 			props: Object.keys(argTypes),
-			template: '<post v-bind="$props" />',
+			template: '<post_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof post>;
+} satisfies StoryObj<typeof post_>;
 export default meta;
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index 1ef072dbf5..9e09cc55de 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import miauth from './miauth.vue';
+import miauth_ from './miauth.vue';
 const meta = {
 	title: 'pages/miauth',
-	component: miauth,
-} satisfies Meta<typeof miauth>;
+	component: miauth_,
+} satisfies Meta<typeof miauth_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				miauth,
+				miauth_,
 			},
 			props: Object.keys(argTypes),
-			template: '<miauth v-bind="$props" />',
+			template: '<miauth_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof miauth>;
+} satisfies StoryObj<typeof miauth_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index 615f856145..b6cecbfd31 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import create from './create.vue';
+import create_ from './create.vue';
 const meta = {
 	title: 'pages/my-antennas/create',
-	component: create,
-} satisfies Meta<typeof create>;
+	component: create_,
+} satisfies Meta<typeof create_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				create,
+				create_,
 			},
 			props: Object.keys(argTypes),
-			template: '<create v-bind="$props" />',
+			template: '<create_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof create>;
+} satisfies StoryObj<typeof create_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index 0e3d882f75..67ad042655 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import edit from './edit.vue';
+import edit_ from './edit.vue';
 const meta = {
 	title: 'pages/my-antennas/edit',
-	component: edit,
-} satisfies Meta<typeof edit>;
+	component: edit_,
+} satisfies Meta<typeof edit_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				edit,
+				edit_,
 			},
 			props: Object.keys(argTypes),
-			template: '<edit v-bind="$props" />',
+			template: '<edit_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof edit>;
+} satisfies StoryObj<typeof edit_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index 7d84732ea5..ddc8577dd1 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import editor from './editor.vue';
+import editor_ from './editor.vue';
 const meta = {
 	title: 'pages/my-antennas/editor',
-	component: editor,
-} satisfies Meta<typeof editor>;
+	component: editor_,
+} satisfies Meta<typeof editor_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				editor,
+				editor_,
 			},
 			props: Object.keys(argTypes),
-			template: '<editor v-bind="$props" />',
+			template: '<editor_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof editor>;
+} satisfies StoryObj<typeof editor_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index cf2a08a82c..5b4f5bbcdd 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/my-antennas/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index 2f8c0b0ce7..de28663875 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/my-clips/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index 33bf24cdce..7cbc582d6e 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/my-lists/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index 50791af89a..9aedbbc333 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import list from './list.vue';
+import list_ from './list.vue';
 const meta = {
 	title: 'pages/my-lists/list',
-	component: list,
-} satisfies Meta<typeof list>;
+	component: list_,
+} satisfies Meta<typeof list_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				list,
+				list_,
 			},
 			props: Object.keys(argTypes),
-			template: '<list v-bind="$props" />',
+			template: '<list_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof list>;
+} satisfies StoryObj<typeof list_>;
 export default meta;
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index 2ee7bc9d66..9eb7b00500 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import note from './note.vue';
+import note_ from './note.vue';
 const meta = {
 	title: 'pages/note',
-	component: note,
-} satisfies Meta<typeof note>;
+	component: note_,
+} satisfies Meta<typeof note_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				note,
+				note_,
 			},
 			props: Object.keys(argTypes),
-			template: '<note v-bind="$props" />',
+			template: '<note_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof note>;
+} satisfies StoryObj<typeof note_>;
 export default meta;
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index 47f904a949..5c8a70d034 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import notifications from './notifications.vue';
+import notifications_ from './notifications.vue';
 const meta = {
 	title: 'pages/notifications',
-	component: notifications,
-} satisfies Meta<typeof notifications>;
+	component: notifications_,
+} satisfies Meta<typeof notifications_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				notifications,
+				notifications_,
 			},
 			props: Object.keys(argTypes),
-			template: '<notifications v-bind="$props" />',
+			template: '<notifications_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof notifications>;
+} satisfies StoryObj<typeof notifications_>;
 export default meta;
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index 5e78ad4801..91fae74f62 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import page from './page.vue';
+import page_ from './page.vue';
 const meta = {
 	title: 'pages/page',
-	component: page,
-} satisfies Meta<typeof page>;
+	component: page_,
+} satisfies Meta<typeof page_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				page,
+				page_,
 			},
 			props: Object.keys(argTypes),
-			template: '<page v-bind="$props" />',
+			template: '<page_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof page>;
+} satisfies StoryObj<typeof page_>;
 export default meta;
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index 249e4e377e..89b4ba0fb1 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import pages from './pages.vue';
+import pages_ from './pages.vue';
 const meta = {
 	title: 'pages/pages',
-	component: pages,
-} satisfies Meta<typeof pages>;
+	component: pages_,
+} satisfies Meta<typeof pages_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				pages,
+				pages_,
 			},
 			props: Object.keys(argTypes),
-			template: '<pages v-bind="$props" />',
+			template: '<pages_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof pages>;
+} satisfies StoryObj<typeof pages_>;
 export default meta;
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index 9131e31061..0c7c99f661 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import preview from './preview.vue';
+import preview_ from './preview.vue';
 const meta = {
 	title: 'pages/preview',
-	component: preview,
-} satisfies Meta<typeof preview>;
+	component: preview_,
+} satisfies Meta<typeof preview_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				preview,
+				preview_,
 			},
 			props: Object.keys(argTypes),
-			template: '<preview v-bind="$props" />',
+			template: '<preview_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof preview>;
+} satisfies StoryObj<typeof preview_>;
 export default meta;
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index c28edaa870..cc5362f209 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import registry from './registry.vue';
+import registry_ from './registry.vue';
 const meta = {
 	title: 'pages/registry',
-	component: registry,
-} satisfies Meta<typeof registry>;
+	component: registry_,
+} satisfies Meta<typeof registry_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				registry,
+				registry_,
 			},
 			props: Object.keys(argTypes),
-			template: '<registry v-bind="$props" />',
+			template: '<registry_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof registry>;
+} satisfies StoryObj<typeof registry_>;
 export default meta;
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index e2bfe127ba..a6563e2a31 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import role from './role.vue';
+import role_ from './role.vue';
 const meta = {
 	title: 'pages/role',
-	component: role,
-} satisfies Meta<typeof role>;
+	component: role_,
+} satisfies Meta<typeof role_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				role,
+				role_,
 			},
 			props: Object.keys(argTypes),
-			template: '<role v-bind="$props" />',
+			template: '<role_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof role>;
+} satisfies StoryObj<typeof role_>;
 export default meta;
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index 9ec876c4ea..748a55e197 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import scratchpad from './scratchpad.vue';
+import scratchpad_ from './scratchpad.vue';
 const meta = {
 	title: 'pages/scratchpad',
-	component: scratchpad,
-} satisfies Meta<typeof scratchpad>;
+	component: scratchpad_,
+} satisfies Meta<typeof scratchpad_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				scratchpad,
+				scratchpad_,
 			},
 			props: Object.keys(argTypes),
-			template: '<scratchpad v-bind="$props" />',
+			template: '<scratchpad_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof scratchpad>;
+} satisfies StoryObj<typeof scratchpad_>;
 export default meta;
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 9200f38160..44125b066f 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import search from './search.vue';
+import search_ from './search.vue';
 const meta = {
 	title: 'pages/search',
-	component: search,
-} satisfies Meta<typeof search>;
+	component: search_,
+} satisfies Meta<typeof search_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				search,
+				search_,
 			},
 			props: Object.keys(argTypes),
-			template: '<search v-bind="$props" />',
+			template: '<search_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof search>;
+} satisfies StoryObj<typeof search_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index 4445ffd815..b462238fb3 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import accounts from './accounts.vue';
+import accounts_ from './accounts.vue';
 const meta = {
 	title: 'pages/settings/accounts',
-	component: accounts,
-} satisfies Meta<typeof accounts>;
+	component: accounts_,
+} satisfies Meta<typeof accounts_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				accounts,
+				accounts_,
 			},
 			props: Object.keys(argTypes),
-			template: '<accounts v-bind="$props" />',
+			template: '<accounts_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof accounts>;
+} satisfies StoryObj<typeof accounts_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index ab74444191..6be07d1ab3 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import api from './api.vue';
+import api_ from './api.vue';
 const meta = {
 	title: 'pages/settings/api',
-	component: api,
-} satisfies Meta<typeof api>;
+	component: api_,
+} satisfies Meta<typeof api_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				api,
+				api_,
 			},
 			props: Object.keys(argTypes),
-			template: '<api v-bind="$props" />',
+			template: '<api_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof api>;
+} satisfies StoryObj<typeof api_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index f82b8e3640..94b59fd141 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import apps from './apps.vue';
+import apps_ from './apps.vue';
 const meta = {
 	title: 'pages/settings/apps',
-	component: apps,
-} satisfies Meta<typeof apps>;
+	component: apps_,
+} satisfies Meta<typeof apps_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				apps,
+				apps_,
 			},
 			props: Object.keys(argTypes),
-			template: '<apps v-bind="$props" />',
+			template: '<apps_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof apps>;
+} satisfies StoryObj<typeof apps_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index 1762786675..16f237e165 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import deck from './deck.vue';
+import deck_ from './deck.vue';
 const meta = {
 	title: 'pages/settings/deck',
-	component: deck,
-} satisfies Meta<typeof deck>;
+	component: deck_,
+} satisfies Meta<typeof deck_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				deck,
+				deck_,
 			},
 			props: Object.keys(argTypes),
-			template: '<deck v-bind="$props" />',
+			template: '<deck_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof deck>;
+} satisfies StoryObj<typeof deck_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index 29328bac81..621fab6b85 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import drive from './drive.vue';
+import drive_ from './drive.vue';
 const meta = {
 	title: 'pages/settings/drive',
-	component: drive,
-} satisfies Meta<typeof drive>;
+	component: drive_,
+} satisfies Meta<typeof drive_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				drive,
+				drive_,
 			},
 			props: Object.keys(argTypes),
-			template: '<drive v-bind="$props" />',
+			template: '<drive_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof drive>;
+} satisfies StoryObj<typeof drive_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index 8d3e25263a..dbcd866607 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import email from './email.vue';
+import email_ from './email.vue';
 const meta = {
 	title: 'pages/settings/email',
-	component: email,
-} satisfies Meta<typeof email>;
+	component: email_,
+} satisfies Meta<typeof email_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				email,
+				email_,
 			},
 			props: Object.keys(argTypes),
-			template: '<email v-bind="$props" />',
+			template: '<email_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof email>;
+} satisfies StoryObj<typeof email_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index e85cead28a..48ad246af0 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import general from './general.vue';
+import general_ from './general.vue';
 const meta = {
 	title: 'pages/settings/general',
-	component: general,
-} satisfies Meta<typeof general>;
+	component: general_,
+} satisfies Meta<typeof general_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				general,
+				general_,
 			},
 			props: Object.keys(argTypes),
-			template: '<general v-bind="$props" />',
+			template: '<general_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof general>;
+} satisfies StoryObj<typeof general_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index f2f5b94a46..1cdf2045c3 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/settings/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index 62fdbb0c80..8546cbdb64 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import navbar from './navbar.vue';
+import navbar_ from './navbar.vue';
 const meta = {
 	title: 'pages/settings/navbar',
-	component: navbar,
-} satisfies Meta<typeof navbar>;
+	component: navbar_,
+} satisfies Meta<typeof navbar_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				navbar,
+				navbar_,
 			},
 			props: Object.keys(argTypes),
-			template: '<navbar v-bind="$props" />',
+			template: '<navbar_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof navbar>;
+} satisfies StoryObj<typeof navbar_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index ceceb9ff1b..d73dd10474 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import notifications from './notifications.vue';
+import notifications_ from './notifications.vue';
 const meta = {
 	title: 'pages/settings/notifications',
-	component: notifications,
-} satisfies Meta<typeof notifications>;
+	component: notifications_,
+} satisfies Meta<typeof notifications_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				notifications,
+				notifications_,
 			},
 			props: Object.keys(argTypes),
-			template: '<notifications v-bind="$props" />',
+			template: '<notifications_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof notifications>;
+} satisfies StoryObj<typeof notifications_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index d3e2d2d462..e7c2d14eb0 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import other from './other.vue';
+import other_ from './other.vue';
 const meta = {
 	title: 'pages/settings/other',
-	component: other,
-} satisfies Meta<typeof other>;
+	component: other_,
+} satisfies Meta<typeof other_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				other,
+				other_,
 			},
 			props: Object.keys(argTypes),
-			template: '<other v-bind="$props" />',
+			template: '<other_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof other>;
+} satisfies StoryObj<typeof other_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index 8e59824268..11f522b7db 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import plugin from './plugin.vue';
+import plugin_ from './plugin.vue';
 const meta = {
 	title: 'pages/settings/plugin',
-	component: plugin,
-} satisfies Meta<typeof plugin>;
+	component: plugin_,
+} satisfies Meta<typeof plugin_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				plugin,
+				plugin_,
 			},
 			props: Object.keys(argTypes),
-			template: '<plugin v-bind="$props" />',
+			template: '<plugin_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof plugin>;
+} satisfies StoryObj<typeof plugin_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index b3cc031039..23fbe5cea1 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import privacy from './privacy.vue';
+import privacy_ from './privacy.vue';
 const meta = {
 	title: 'pages/settings/privacy',
-	component: privacy,
-} satisfies Meta<typeof privacy>;
+	component: privacy_,
+} satisfies Meta<typeof privacy_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				privacy,
+				privacy_,
 			},
 			props: Object.keys(argTypes),
-			template: '<privacy v-bind="$props" />',
+			template: '<privacy_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof privacy>;
+} satisfies StoryObj<typeof privacy_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index f0d1684b0e..af255090d6 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import profile from './profile.vue';
+import profile_ from './profile.vue';
 const meta = {
 	title: 'pages/settings/profile',
-	component: profile,
-} satisfies Meta<typeof profile>;
+	component: profile_,
+} satisfies Meta<typeof profile_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				profile,
+				profile_,
 			},
 			props: Object.keys(argTypes),
-			template: '<profile v-bind="$props" />',
+			template: '<profile_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof profile>;
+} satisfies StoryObj<typeof profile_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index a985ba34da..103cb98c57 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import reaction from './reaction.vue';
+import reaction_ from './reaction.vue';
 const meta = {
 	title: 'pages/settings/reaction',
-	component: reaction,
-} satisfies Meta<typeof reaction>;
+	component: reaction_,
+} satisfies Meta<typeof reaction_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				reaction,
+				reaction_,
 			},
 			props: Object.keys(argTypes),
-			template: '<reaction v-bind="$props" />',
+			template: '<reaction_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof reaction>;
+} satisfies StoryObj<typeof reaction_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index 0ab5412f74..34f0ece879 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import roles from './roles.vue';
+import roles_ from './roles.vue';
 const meta = {
 	title: 'pages/settings/roles',
-	component: roles,
-} satisfies Meta<typeof roles>;
+	component: roles_,
+} satisfies Meta<typeof roles_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				roles,
+				roles_,
 			},
 			props: Object.keys(argTypes),
-			template: '<roles v-bind="$props" />',
+			template: '<roles_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof roles>;
+} satisfies StoryObj<typeof roles_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index fb003ab05f..7042d4b455 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import security from './security.vue';
+import security_ from './security.vue';
 const meta = {
 	title: 'pages/settings/security',
-	component: security,
-} satisfies Meta<typeof security>;
+	component: security_,
+} satisfies Meta<typeof security_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				security,
+				security_,
 			},
 			props: Object.keys(argTypes),
-			template: '<security v-bind="$props" />',
+			template: '<security_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof security>;
+} satisfies StoryObj<typeof security_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index a8304f2792..63b01ecacd 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import sounds from './sounds.vue';
+import sounds_ from './sounds.vue';
 const meta = {
 	title: 'pages/settings/sounds',
-	component: sounds,
-} satisfies Meta<typeof sounds>;
+	component: sounds_,
+} satisfies Meta<typeof sounds_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				sounds,
+				sounds_,
 			},
 			props: Object.keys(argTypes),
-			template: '<sounds v-bind="$props" />',
+			template: '<sounds_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof sounds>;
+} satisfies StoryObj<typeof sounds_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 9e2246c2a5..747b1815d2 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar from './statusbar.vue';
+import statusbar_ from './statusbar.vue';
 const meta = {
 	title: 'pages/settings/statusbar',
-	component: statusbar,
-} satisfies Meta<typeof statusbar>;
+	component: statusbar_,
+} satisfies Meta<typeof statusbar_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				statusbar,
+				statusbar_,
 			},
 			props: Object.keys(argTypes),
-			template: '<statusbar v-bind="$props" />',
+			template: '<statusbar_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof statusbar>;
+} satisfies StoryObj<typeof statusbar_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index 05d320b76d..0c0017f168 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import theme from './theme.vue';
+import theme_ from './theme.vue';
 const meta = {
 	title: 'pages/settings/theme',
-	component: theme,
-} satisfies Meta<typeof theme>;
+	component: theme_,
+} satisfies Meta<typeof theme_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				theme,
+				theme_,
 			},
 			props: Object.keys(argTypes),
-			template: '<theme v-bind="$props" />',
+			template: '<theme_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof theme>;
+} satisfies StoryObj<typeof theme_>;
 export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index aaaf8b6fb0..7a10202b6d 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import webhook from './webhook.vue';
+import webhook_ from './webhook.vue';
 const meta = {
 	title: 'pages/settings/webhook',
-	component: webhook,
-} satisfies Meta<typeof webhook>;
+	component: webhook_,
+} satisfies Meta<typeof webhook_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				webhook,
+				webhook_,
 			},
 			props: Object.keys(argTypes),
-			template: '<webhook v-bind="$props" />',
+			template: '<webhook_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof webhook>;
+} satisfies StoryObj<typeof webhook_>;
 export default meta;
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index 914f4e3a4e..525d6b3b02 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import share from './share.vue';
+import share_ from './share.vue';
 const meta = {
 	title: 'pages/share',
-	component: share,
-} satisfies Meta<typeof share>;
+	component: share_,
+} satisfies Meta<typeof share_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				share,
+				share_,
 			},
 			props: Object.keys(argTypes),
-			template: '<share v-bind="$props" />',
+			template: '<share_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof share>;
+} satisfies StoryObj<typeof share_>;
 export default meta;
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index 1f8f3bb18b..def784dd5d 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import tag from './tag.vue';
+import tag_ from './tag.vue';
 const meta = {
 	title: 'pages/tag',
-	component: tag,
-} satisfies Meta<typeof tag>;
+	component: tag_,
+} satisfies Meta<typeof tag_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				tag,
+				tag_,
 			},
 			props: Object.keys(argTypes),
-			template: '<tag v-bind="$props" />',
+			template: '<tag_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof tag>;
+} satisfies StoryObj<typeof tag_>;
 export default meta;
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index 5676cece40..97319bc669 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import timeline from './timeline.vue';
+import timeline_ from './timeline.vue';
 const meta = {
 	title: 'pages/timeline',
-	component: timeline,
-} satisfies Meta<typeof timeline>;
+	component: timeline_,
+} satisfies Meta<typeof timeline_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				timeline,
+				timeline_,
 			},
 			props: Object.keys(argTypes),
-			template: '<timeline v-bind="$props" />',
+			template: '<timeline_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof timeline>;
+} satisfies StoryObj<typeof timeline_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index 62dc7c86d7..dc1123b04c 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import achievements from './achievements.vue';
+import achievements_ from './achievements.vue';
 const meta = {
 	title: 'pages/user/achievements',
-	component: achievements,
-} satisfies Meta<typeof achievements>;
+	component: achievements_,
+} satisfies Meta<typeof achievements_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				achievements,
+				achievements_,
 			},
 			props: Object.keys(argTypes),
-			template: '<achievements v-bind="$props" />',
+			template: '<achievements_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof achievements>;
+} satisfies StoryObj<typeof achievements_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index 4642f7d5c0..f6f610549e 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import activity from './activity.vue';
+import activity_ from './activity.vue';
 const meta = {
 	title: 'pages/user/activity',
-	component: activity,
-} satisfies Meta<typeof activity>;
+	component: activity_,
+} satisfies Meta<typeof activity_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				activity,
+				activity_,
 			},
 			props: Object.keys(argTypes),
-			template: '<activity v-bind="$props" />',
+			template: '<activity_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof activity>;
+} satisfies StoryObj<typeof activity_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index 7b4d155b69..d3432dd26b 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import clips from './clips.vue';
+import clips_ from './clips.vue';
 const meta = {
 	title: 'pages/user/clips',
-	component: clips,
-} satisfies Meta<typeof clips>;
+	component: clips_,
+} satisfies Meta<typeof clips_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				clips,
+				clips_,
 			},
 			props: Object.keys(argTypes),
-			template: '<clips v-bind="$props" />',
+			template: '<clips_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof clips>;
+} satisfies StoryObj<typeof clips_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index eecc122d4d..17ec4c4cf7 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import followers from './followers.vue';
+import followers_ from './followers.vue';
 const meta = {
 	title: 'pages/user/followers',
-	component: followers,
-} satisfies Meta<typeof followers>;
+	component: followers_,
+} satisfies Meta<typeof followers_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				followers,
+				followers_,
 			},
 			props: Object.keys(argTypes),
-			template: '<followers v-bind="$props" />',
+			template: '<followers_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof followers>;
+} satisfies StoryObj<typeof followers_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index debbb9610d..cc37ebe5cb 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import following from './following.vue';
+import following_ from './following.vue';
 const meta = {
 	title: 'pages/user/following',
-	component: following,
-} satisfies Meta<typeof following>;
+	component: following_,
+} satisfies Meta<typeof following_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				following,
+				following_,
 			},
 			props: Object.keys(argTypes),
-			template: '<following v-bind="$props" />',
+			template: '<following_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof following>;
+} satisfies StoryObj<typeof following_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index 8255498592..15f8a83938 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import gallery from './gallery.vue';
+import gallery_ from './gallery.vue';
 const meta = {
 	title: 'pages/user/gallery',
-	component: gallery,
-} satisfies Meta<typeof gallery>;
+	component: gallery_,
+} satisfies Meta<typeof gallery_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				gallery,
+				gallery_,
 			},
 			props: Object.keys(argTypes),
-			template: '<gallery v-bind="$props" />',
+			template: '<gallery_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof gallery>;
+} satisfies StoryObj<typeof gallery_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index af3dd6231a..0126623dc3 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import home from './home.vue';
+import home_ from './home.vue';
 const meta = {
 	title: 'pages/user/home',
-	component: home,
-} satisfies Meta<typeof home>;
+	component: home_,
+} satisfies Meta<typeof home_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				home,
+				home_,
 			},
 			props: Object.keys(argTypes),
-			template: '<home v-bind="$props" />',
+			template: '<home_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof home>;
+} satisfies StoryObj<typeof home_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index ba498f7acb..19c2b2eb0f 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'pages/user/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index 50a696362a..1e1bc31b85 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import pages from './pages.vue';
+import pages_ from './pages.vue';
 const meta = {
 	title: 'pages/user/pages',
-	component: pages,
-} satisfies Meta<typeof pages>;
+	component: pages_,
+} satisfies Meta<typeof pages_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				pages,
+				pages_,
 			},
 			props: Object.keys(argTypes),
-			template: '<pages v-bind="$props" />',
+			template: '<pages_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof pages>;
+} satisfies StoryObj<typeof pages_>;
 export default meta;
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index a590b8f20f..6fe141d4ff 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import reactions from './reactions.vue';
+import reactions_ from './reactions.vue';
 const meta = {
 	title: 'pages/user/reactions',
-	component: reactions,
-} satisfies Meta<typeof reactions>;
+	component: reactions_,
+} satisfies Meta<typeof reactions_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				reactions,
+				reactions_,
 			},
 			props: Object.keys(argTypes),
-			template: '<reactions v-bind="$props" />',
+			template: '<reactions_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof reactions>;
+} satisfies StoryObj<typeof reactions_>;
 export default meta;
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index c062a7717a..0ba8e1f855 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import welcome from './welcome.vue';
+import welcome_ from './welcome.vue';
 const meta = {
 	title: 'pages/welcome',
-	component: welcome,
-} satisfies Meta<typeof welcome>;
+	component: welcome_,
+} satisfies Meta<typeof welcome_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				welcome,
+				welcome_,
 			},
 			props: Object.keys(argTypes),
-			template: '<welcome v-bind="$props" />',
+			template: '<welcome_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-} satisfies StoryObj<typeof welcome>;
+} satisfies StoryObj<typeof welcome_>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index 3ef6fc54b7..9a6f812605 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import common from './common.vue';
+import common_ from './common.vue';
 const meta = {
 	title: 'ui/_common_/common',
-	component: common,
-} satisfies Meta<typeof common>;
+	component: common_,
+} satisfies Meta<typeof common_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				common,
+				common_,
 			},
 			props: Object.keys(argTypes),
-			template: '<common v-bind="$props" />',
+			template: '<common_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof common>;
+} satisfies StoryObj<typeof common_>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index f118d22f04..2c08306612 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import navbar from './navbar.vue';
+import navbar_ from './navbar.vue';
 const meta = {
 	title: 'ui/_common_/navbar',
-	component: navbar,
-} satisfies Meta<typeof navbar>;
+	component: navbar_,
+} satisfies Meta<typeof navbar_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				navbar,
+				navbar_,
 			},
 			props: Object.keys(argTypes),
-			template: '<navbar v-bind="$props" />',
+			template: '<navbar_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof navbar>;
+} satisfies StoryObj<typeof navbar_>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index f8bb87f352..1de941691d 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import notification from './notification.vue';
+import notification_ from './notification.vue';
 const meta = {
 	title: 'ui/_common_/notification',
-	component: notification,
-} satisfies Meta<typeof notification>;
+	component: notification_,
+} satisfies Meta<typeof notification_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				notification,
+				notification_,
 			},
 			props: Object.keys(argTypes),
-			template: '<notification v-bind="$props" />',
+			template: '<notification_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof notification>;
+} satisfies StoryObj<typeof notification_>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index 0ff1faabc5..1f668520e9 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import statusbars from './statusbars.vue';
+import statusbars_ from './statusbars.vue';
 const meta = {
 	title: 'ui/_common_/statusbars',
-	component: statusbars,
-} satisfies Meta<typeof statusbars>;
+	component: statusbars_,
+} satisfies Meta<typeof statusbars_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				statusbars,
+				statusbars_,
 			},
 			props: Object.keys(argTypes),
-			template: '<statusbars v-bind="$props" />',
+			template: '<statusbars_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof statusbars>;
+} satisfies StoryObj<typeof statusbars_>;
 export default meta;
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index 612db18122..40b3d392bb 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import upload from './upload.vue';
+import upload_ from './upload.vue';
 const meta = {
 	title: 'ui/_common_/upload',
-	component: upload,
-} satisfies Meta<typeof upload>;
+	component: upload_,
+} satisfies Meta<typeof upload_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				upload,
+				upload_,
 			},
 			props: Object.keys(argTypes),
-			template: '<upload v-bind="$props" />',
+			template: '<upload_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof upload>;
+} satisfies StoryObj<typeof upload_>;
 export default meta;
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index 52d53990eb..c87c93a950 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import classic from './classic.vue';
+import classic_ from './classic.vue';
 const meta = {
 	title: 'ui/classic',
-	component: classic,
-} satisfies Meta<typeof classic>;
+	component: classic_,
+} satisfies Meta<typeof classic_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				classic,
+				classic_,
 			},
 			props: Object.keys(argTypes),
-			template: '<classic v-bind="$props" />',
+			template: '<classic_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof classic>;
+} satisfies StoryObj<typeof classic_>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index d84ae4341c..74121f4e08 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import deck from './deck.vue';
+import deck_ from './deck.vue';
 const meta = {
 	title: 'ui/deck',
-	component: deck,
-} satisfies Meta<typeof deck>;
+	component: deck_,
+} satisfies Meta<typeof deck_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				deck,
+				deck_,
 			},
 			props: Object.keys(argTypes),
-			template: '<deck v-bind="$props" />',
+			template: '<deck_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof deck>;
+} satisfies StoryObj<typeof deck_>;
 export default meta;
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index 8513fbe1d3..dea69e8d97 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import column from './column.vue';
+import column_ from './column.vue';
 const meta = {
 	title: 'ui/deck/column',
-	component: column,
-} satisfies Meta<typeof column>;
+	component: column_,
+} satisfies Meta<typeof column_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				column,
+				column_,
 			},
 			props: Object.keys(argTypes),
-			template: '<column v-bind="$props" />',
+			template: '<column_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof column>;
+} satisfies StoryObj<typeof column_>;
 export default meta;
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index cb5c183e6b..d60620cb87 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import universal from './universal.vue';
+import universal_ from './universal.vue';
 const meta = {
 	title: 'ui/universal',
-	component: universal,
-} satisfies Meta<typeof universal>;
+	component: universal_,
+} satisfies Meta<typeof universal_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				universal,
+				universal_,
 			},
 			props: Object.keys(argTypes),
-			template: '<universal v-bind="$props" />',
+			template: '<universal_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof universal>;
+} satisfies StoryObj<typeof universal_>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index df84e3a890..b1ed6b75c0 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import visitor from './visitor.vue';
+import visitor_ from './visitor.vue';
 const meta = {
 	title: 'ui/visitor',
-	component: visitor,
-} satisfies Meta<typeof visitor>;
+	component: visitor_,
+} satisfies Meta<typeof visitor_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				visitor,
+				visitor_,
 			},
 			props: Object.keys(argTypes),
-			template: '<visitor v-bind="$props" />',
+			template: '<visitor_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof visitor>;
+} satisfies StoryObj<typeof visitor_>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index 19ca049d7f..d0ffad2c48 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import a from './a.vue';
+import a_ from './a.vue';
 const meta = {
 	title: 'ui/visitor/a',
-	component: a,
-} satisfies Meta<typeof a>;
+	component: a_,
+} satisfies Meta<typeof a_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				a,
+				a_,
 			},
 			props: Object.keys(argTypes),
-			template: '<a v-bind="$props" />',
+			template: '<a_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof a>;
+} satisfies StoryObj<typeof a_>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index 9bb781b18c..d60442df6b 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import b from './b.vue';
+import b_ from './b.vue';
 const meta = {
 	title: 'ui/visitor/b',
-	component: b,
-} satisfies Meta<typeof b>;
+	component: b_,
+} satisfies Meta<typeof b_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				b,
+				b_,
 			},
 			props: Object.keys(argTypes),
-			template: '<b v-bind="$props" />',
+			template: '<b_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof b>;
+} satisfies StoryObj<typeof b_>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index 67e8cee3dc..9205f10228 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import header from './header.vue';
+import header_ from './header.vue';
 const meta = {
 	title: 'ui/visitor/header',
-	component: header,
-} satisfies Meta<typeof header>;
+	component: header_,
+} satisfies Meta<typeof header_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				header,
+				header_,
 			},
 			props: Object.keys(argTypes),
-			template: '<header v-bind="$props" />',
+			template: '<header_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof header>;
+} satisfies StoryObj<typeof header_>;
 export default meta;
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index cef3e51cc4..888bbccb63 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import kanban from './kanban.vue';
+import kanban_ from './kanban.vue';
 const meta = {
 	title: 'ui/visitor/kanban',
-	component: kanban,
-} satisfies Meta<typeof kanban>;
+	component: kanban_,
+} satisfies Meta<typeof kanban_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				kanban,
+				kanban_,
 			},
 			props: Object.keys(argTypes),
-			template: '<kanban v-bind="$props" />',
+			template: '<kanban_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof kanban>;
+} satisfies StoryObj<typeof kanban_>;
 export default meta;
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index ce3d1d91fc..cf24162e05 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import zen from './zen.vue';
+import zen_ from './zen.vue';
 const meta = {
 	title: 'ui/zen',
-	component: zen,
-} satisfies Meta<typeof zen>;
+	component: zen_,
+} satisfies Meta<typeof zen_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				zen,
+				zen_,
 			},
 			props: Object.keys(argTypes),
-			template: '<zen v-bind="$props" />',
+			template: '<zen_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof zen>;
+} satisfies StoryObj<typeof zen_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index 4516fe5dc0..8ac2dbf57d 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import cpu from './cpu.vue';
+import cpu_ from './cpu.vue';
 const meta = {
 	title: 'widgets/server-metric/cpu',
-	component: cpu,
-} satisfies Meta<typeof cpu>;
+	component: cpu_,
+} satisfies Meta<typeof cpu_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				cpu,
+				cpu_,
 			},
 			props: Object.keys(argTypes),
-			template: '<cpu v-bind="$props" />',
+			template: '<cpu_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof cpu>;
+} satisfies StoryObj<typeof cpu_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index a8179265e9..cbd30d9dad 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import disk from './disk.vue';
+import disk_ from './disk.vue';
 const meta = {
 	title: 'widgets/server-metric/disk',
-	component: disk,
-} satisfies Meta<typeof disk>;
+	component: disk_,
+} satisfies Meta<typeof disk_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				disk,
+				disk_,
 			},
 			props: Object.keys(argTypes),
-			template: '<disk v-bind="$props" />',
+			template: '<disk_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof disk>;
+} satisfies StoryObj<typeof disk_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index 1ef2ab35d5..f800b15632 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import index from './index.vue';
+import index_ from './index.vue';
 const meta = {
 	title: 'widgets/server-metric/index',
-	component: index,
-} satisfies Meta<typeof index>;
+	component: index_,
+} satisfies Meta<typeof index_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				index,
+				index_,
 			},
 			props: Object.keys(argTypes),
-			template: '<index v-bind="$props" />',
+			template: '<index_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof index>;
+} satisfies StoryObj<typeof index_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index 3ac52649e9..dd161af66a 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import mem from './mem.vue';
+import mem_ from './mem.vue';
 const meta = {
 	title: 'widgets/server-metric/mem',
-	component: mem,
-} satisfies Meta<typeof mem>;
+	component: mem_,
+} satisfies Meta<typeof mem_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				mem,
+				mem_,
 			},
 			props: Object.keys(argTypes),
-			template: '<mem v-bind="$props" />',
+			template: '<mem_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof mem>;
+} satisfies StoryObj<typeof mem_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index fca6bfa749..b92f12ccc8 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import net from './net.vue';
+import net_ from './net.vue';
 const meta = {
 	title: 'widgets/server-metric/net',
-	component: net,
-} satisfies Meta<typeof net>;
+	component: net_,
+} satisfies Meta<typeof net_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				net,
+				net_,
 			},
 			props: Object.keys(argTypes),
-			template: '<net v-bind="$props" />',
+			template: '<net_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof net>;
+} satisfies StoryObj<typeof net_>;
 export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index 411beb19d2..02caa92e7c 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -1,21 +1,21 @@
 import { Meta, StoryObj } from '@storybook/vue3';
-import pie from './pie.vue';
+import pie_ from './pie.vue';
 const meta = {
 	title: 'widgets/server-metric/pie',
-	component: pie,
-} satisfies Meta<typeof pie>;
+	component: pie_,
+} satisfies Meta<typeof pie_>;
 export const Default = {
 	render(args, { argTypes }) {
 		return {
 			components: {
-				pie,
+				pie_,
 			},
 			props: Object.keys(argTypes),
-			template: '<pie v-bind="$props" />',
+			template: '<pie_ v-bind="$props" />',
 		};
 	},
 	parameters: {
 		layout: 'centered',
 	},
-} satisfies StoryObj<typeof pie>;
+} satisfies StoryObj<typeof pie_>;
 export default meta;

From 1d0ca7eecfd50c58af81739a9c98e2e334ed0acc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Wed, 22 Mar 2023 00:25:17 +0900
Subject: [PATCH 17/99] chore: suppress linter

---
 packages/frontend/.storybook/generate.tsx                 | 8 +++++---
 packages/frontend/src/components/MkAbuseReport.stories.ts | 2 ++
 .../src/components/MkAbuseReportWindow.stories.ts         | 2 ++
 .../frontend/src/components/MkAchievements.stories.ts     | 2 ++
 packages/frontend/src/components/MkAnalogClock.stories.ts | 2 ++
 packages/frontend/src/components/MkAsUi.stories.ts        | 2 ++
 .../frontend/src/components/MkAutocomplete.stories.ts     | 2 ++
 packages/frontend/src/components/MkAvatars.stories.ts     | 2 ++
 packages/frontend/src/components/MkButton.stories.ts      | 2 ++
 packages/frontend/src/components/MkCaptcha.stories.ts     | 2 ++
 .../src/components/MkChannelFollowButton.stories.ts       | 2 ++
 .../frontend/src/components/MkChannelPreview.stories.ts   | 2 ++
 packages/frontend/src/components/MkChart.stories.ts       | 2 ++
 packages/frontend/src/components/MkChartLegend.stories.ts | 2 ++
 .../frontend/src/components/MkChartTooltip.stories.ts     | 2 ++
 packages/frontend/src/components/MkCheckbox.stories.ts    | 2 ++
 packages/frontend/src/components/MkClickerGame.stories.ts | 2 ++
 packages/frontend/src/components/MkClipPreview.stories.ts | 2 ++
 packages/frontend/src/components/MkCode.core.stories.ts   | 2 ++
 packages/frontend/src/components/MkCode.stories.ts        | 2 ++
 packages/frontend/src/components/MkContainer.stories.ts   | 2 ++
 packages/frontend/src/components/MkContextMenu.stories.ts | 2 ++
 .../frontend/src/components/MkCropperDialog.stories.ts    | 2 ++
 packages/frontend/src/components/MkCwButton.stories.ts    | 2 ++
 .../src/components/MkDateSeparatedList.stories.ts         | 2 ++
 packages/frontend/src/components/MkDialog.stories.ts      | 2 ++
 .../frontend/src/components/MkDigitalClock.stories.ts     | 2 ++
 packages/frontend/src/components/MkDonation.stories.ts    | 2 ++
 packages/frontend/src/components/MkDrive.file.stories.ts  | 2 ++
 .../frontend/src/components/MkDrive.folder.stories.ts     | 2 ++
 .../frontend/src/components/MkDrive.navFolder.stories.ts  | 2 ++
 packages/frontend/src/components/MkDrive.stories.ts       | 2 ++
 .../src/components/MkDriveFileThumbnail.stories.ts        | 2 ++
 .../src/components/MkDriveSelectDialog.stories.ts         | 2 ++
 packages/frontend/src/components/MkDriveWindow.stories.ts | 2 ++
 .../src/components/MkEmojiPicker.section.stories.ts       | 2 ++
 packages/frontend/src/components/MkEmojiPicker.stories.ts | 2 ++
 .../src/components/MkEmojiPickerDialog.stories.ts         | 2 ++
 .../src/components/MkEmojiPickerWindow.stories.ts         | 2 ++
 .../frontend/src/components/MkFeaturedPhotos.stories.ts   | 2 ++
 .../src/components/MkFileCaptionEditWindow.stories.ts     | 2 ++
 .../frontend/src/components/MkFileListForAdmin.stories.ts | 2 ++
 .../frontend/src/components/MkFlashPreview.stories.ts     | 2 ++
 .../frontend/src/components/MkFoldableSection.stories.ts  | 2 ++
 packages/frontend/src/components/MkFolder.stories.ts      | 2 ++
 .../frontend/src/components/MkFollowButton.stories.ts     | 2 ++
 .../frontend/src/components/MkForgotPassword.stories.ts   | 2 ++
 packages/frontend/src/components/MkFormDialog.stories.ts  | 2 ++
 .../src/components/MkGalleryPostPreview.stories.ts        | 2 ++
 packages/frontend/src/components/MkGoogle.stories.ts      | 2 ++
 packages/frontend/src/components/MkHeatmap.stories.ts     | 2 ++
 packages/frontend/src/components/MkImageViewer.stories.ts | 2 ++
 .../frontend/src/components/MkImgWithBlurhash.stories.ts  | 2 ++
 packages/frontend/src/components/MkInfo.stories.ts        | 2 ++
 packages/frontend/src/components/MkInput.stories.ts       | 2 ++
 .../frontend/src/components/MkInstanceCardMini.stories.ts | 2 ++
 .../frontend/src/components/MkInstanceStats.stories.ts    | 2 ++
 .../frontend/src/components/MkInstanceTicker.stories.ts   | 2 ++
 packages/frontend/src/components/MkKeyValue.stories.ts    | 2 ++
 packages/frontend/src/components/MkLaunchPad.stories.ts   | 2 ++
 packages/frontend/src/components/MkLink.stories.ts        | 2 ++
 packages/frontend/src/components/MkMarquee.stories.ts     | 2 ++
 packages/frontend/src/components/MkMediaBanner.stories.ts | 2 ++
 packages/frontend/src/components/MkMediaImage.stories.ts  | 2 ++
 packages/frontend/src/components/MkMediaList.stories.ts   | 2 ++
 packages/frontend/src/components/MkMediaVideo.stories.ts  | 2 ++
 packages/frontend/src/components/MkMention.stories.ts     | 2 ++
 packages/frontend/src/components/MkMenu.child.stories.ts  | 2 ++
 packages/frontend/src/components/MkMenu.stories.ts        | 2 ++
 packages/frontend/src/components/MkMiniChart.stories.ts   | 2 ++
 packages/frontend/src/components/MkModal.stories.ts       | 2 ++
 .../frontend/src/components/MkModalPageWindow.stories.ts  | 2 ++
 packages/frontend/src/components/MkModalWindow.stories.ts | 2 ++
 packages/frontend/src/components/MkNote.stories.ts        | 2 ++
 .../frontend/src/components/MkNoteDetailed.stories.ts     | 2 ++
 packages/frontend/src/components/MkNoteHeader.stories.ts  | 2 ++
 packages/frontend/src/components/MkNotePreview.stories.ts | 2 ++
 packages/frontend/src/components/MkNoteSimple.stories.ts  | 2 ++
 packages/frontend/src/components/MkNoteSub.stories.ts     | 2 ++
 packages/frontend/src/components/MkNotes.stories.ts       | 2 ++
 .../frontend/src/components/MkNotification.stories.ts     | 2 ++
 .../src/components/MkNotificationSettingWindow.stories.ts | 2 ++
 .../frontend/src/components/MkNotifications.stories.ts    | 2 ++
 packages/frontend/src/components/MkNumber.stories.ts      | 2 ++
 packages/frontend/src/components/MkNumberDiff.stories.ts  | 2 ++
 packages/frontend/src/components/MkObjectView.stories.ts  | 2 ++
 .../frontend/src/components/MkObjectView.value.stories.ts | 2 ++
 packages/frontend/src/components/MkOmit.stories.ts        | 2 ++
 packages/frontend/src/components/MkPagePreview.stories.ts | 2 ++
 packages/frontend/src/components/MkPageWindow.stories.ts  | 2 ++
 packages/frontend/src/components/MkPagination.stories.ts  | 2 ++
 .../frontend/src/components/MkPlusOneEffect.stories.ts    | 2 ++
 packages/frontend/src/components/MkPoll.stories.ts        | 2 ++
 packages/frontend/src/components/MkPollEditor.stories.ts  | 2 ++
 packages/frontend/src/components/MkPopupMenu.stories.ts   | 2 ++
 packages/frontend/src/components/MkPostForm.stories.ts    | 2 ++
 .../frontend/src/components/MkPostFormAttaches.stories.ts | 2 ++
 .../frontend/src/components/MkPostFormDialog.stories.ts   | 2 ++
 .../components/MkPushNotificationAllowButton.stories.ts   | 2 ++
 packages/frontend/src/components/MkRadio.stories.ts       | 2 ++
 packages/frontend/src/components/MkRadios.stories.ts      | 2 ++
 packages/frontend/src/components/MkRange.stories.ts       | 2 ++
 .../src/components/MkReactedUsersDialog.stories.ts        | 2 ++
 .../frontend/src/components/MkReactionEffect.stories.ts   | 2 ++
 .../frontend/src/components/MkReactionIcon.stories.ts     | 2 ++
 .../frontend/src/components/MkReactionTooltip.stories.ts  | 2 ++
 .../src/components/MkReactionsViewer.details.stories.ts   | 2 ++
 .../src/components/MkReactionsViewer.reaction.stories.ts  | 2 ++
 .../frontend/src/components/MkReactionsViewer.stories.ts  | 2 ++
 .../frontend/src/components/MkRemoteCaution.stories.ts    | 2 ++
 .../frontend/src/components/MkRetentionHeatmap.stories.ts | 2 ++
 .../frontend/src/components/MkRippleEffect.stories.ts     | 2 ++
 packages/frontend/src/components/MkRolePreview.stories.ts | 2 ++
 packages/frontend/src/components/MkSample.stories.ts      | 2 ++
 packages/frontend/src/components/MkSelect.stories.ts      | 2 ++
 packages/frontend/src/components/MkSignin.stories.ts      | 2 ++
 .../frontend/src/components/MkSigninDialog.stories.ts     | 2 ++
 packages/frontend/src/components/MkSignup.stories.ts      | 2 ++
 .../frontend/src/components/MkSignupDialog.stories.ts     | 2 ++
 packages/frontend/src/components/MkSparkle.stories.ts     | 2 ++
 .../frontend/src/components/MkSubNoteContent.stories.ts   | 2 ++
 packages/frontend/src/components/MkSuperMenu.stories.ts   | 2 ++
 packages/frontend/src/components/MkSwitch.stories.ts      | 2 ++
 packages/frontend/src/components/MkTab.stories.ts         | 2 ++
 packages/frontend/src/components/MkTagCloud.stories.ts    | 2 ++
 packages/frontend/src/components/MkTextarea.stories.ts    | 2 ++
 packages/frontend/src/components/MkTimeline.stories.ts    | 2 ++
 packages/frontend/src/components/MkToast.stories.ts       | 2 ++
 .../src/components/MkTokenGenerateWindow.stories.ts       | 2 ++
 packages/frontend/src/components/MkTooltip.stories.ts     | 2 ++
 packages/frontend/src/components/MkUpdated.stories.ts     | 2 ++
 packages/frontend/src/components/MkUrlPreview.stories.ts  | 2 ++
 .../frontend/src/components/MkUrlPreviewPopup.stories.ts  | 2 ++
 .../frontend/src/components/MkUserCardMini.stories.ts     | 2 ++
 packages/frontend/src/components/MkUserInfo.stories.ts    | 2 ++
 packages/frontend/src/components/MkUserList.stories.ts    | 2 ++
 .../src/components/MkUserOnlineIndicator.stories.ts       | 2 ++
 packages/frontend/src/components/MkUserPopup.stories.ts   | 2 ++
 .../frontend/src/components/MkUserSelectDialog.stories.ts | 2 ++
 .../frontend/src/components/MkUsersTooltip.stories.ts     | 2 ++
 .../frontend/src/components/MkVisibilityPicker.stories.ts | 2 ++
 .../frontend/src/components/MkWaitingDialog.stories.ts    | 2 ++
 packages/frontend/src/components/MkWidgets.stories.ts     | 2 ++
 packages/frontend/src/components/MkWindow.stories.ts      | 2 ++
 .../frontend/src/components/MkYouTubePlayer.stories.ts    | 2 ++
 packages/frontend/src/components/form/link.stories.ts     | 2 ++
 packages/frontend/src/components/form/section.stories.ts  | 2 ++
 packages/frontend/src/components/form/slot.stories.ts     | 2 ++
 packages/frontend/src/components/form/split.stories.ts    | 2 ++
 packages/frontend/src/components/form/suspense.stories.ts | 2 ++
 packages/frontend/src/components/global/MkA.stories.ts    | 2 ++
 packages/frontend/src/components/global/MkAcct.stories.ts | 2 ++
 packages/frontend/src/components/global/MkAd.stories.ts   | 2 ++
 .../frontend/src/components/global/MkAvatar.stories.ts    | 2 ++
 .../src/components/global/MkCustomEmoji.stories.ts        | 2 ++
 .../frontend/src/components/global/MkEllipsis.stories.ts  | 2 ++
 .../frontend/src/components/global/MkEmoji.stories.ts     | 2 ++
 .../frontend/src/components/global/MkError.stories.ts     | 2 ++
 .../frontend/src/components/global/MkLoading.stories.ts   | 2 ++
 .../global/MkMisskeyFlavoredMarkdown.stories.ts           | 2 ++
 .../src/components/global/MkPageHeader.stories.ts         | 2 ++
 .../src/components/global/MkPageHeader.tabs.stories.ts    | 2 ++
 .../frontend/src/components/global/MkSpacer.stories.ts    | 2 ++
 .../src/components/global/MkStickyContainer.stories.ts    | 2 ++
 packages/frontend/src/components/global/MkTime.stories.ts | 2 ++
 packages/frontend/src/components/global/MkUrl.stories.ts  | 2 ++
 .../frontend/src/components/global/MkUserName.stories.ts  | 2 ++
 .../frontend/src/components/global/RouterView.stories.ts  | 2 ++
 .../frontend/src/components/page/page.block.stories.ts    | 2 ++
 .../frontend/src/components/page/page.button.stories.ts   | 2 ++
 .../frontend/src/components/page/page.canvas.stories.ts   | 2 ++
 .../frontend/src/components/page/page.counter.stories.ts  | 2 ++
 packages/frontend/src/components/page/page.if.stories.ts  | 2 ++
 .../frontend/src/components/page/page.image.stories.ts    | 2 ++
 .../frontend/src/components/page/page.note.stories.ts     | 2 ++
 .../src/components/page/page.number-input.stories.ts      | 2 ++
 .../frontend/src/components/page/page.post.stories.ts     | 2 ++
 .../src/components/page/page.radio-button.stories.ts      | 2 ++
 .../frontend/src/components/page/page.section.stories.ts  | 2 ++
 packages/frontend/src/components/page/page.stories.ts     | 2 ++
 .../frontend/src/components/page/page.switch.stories.ts   | 2 ++
 .../src/components/page/page.text-input.stories.ts        | 2 ++
 .../frontend/src/components/page/page.text.stories.ts     | 2 ++
 .../src/components/page/page.textarea-input.stories.ts    | 2 ++
 .../frontend/src/components/page/page.textarea.stories.ts | 2 ++
 packages/frontend/src/pages/_empty_.stories.ts            | 2 ++
 packages/frontend/src/pages/_error_.stories.ts            | 2 ++
 packages/frontend/src/pages/_loading_.stories.ts          | 2 ++
 packages/frontend/src/pages/about-misskey.stories.ts      | 2 ++
 packages/frontend/src/pages/about.emojis.stories.ts       | 2 ++
 packages/frontend/src/pages/about.federation.stories.ts   | 2 ++
 packages/frontend/src/pages/about.stories.ts              | 2 ++
 packages/frontend/src/pages/achievements.stories.ts       | 2 ++
 packages/frontend/src/pages/admin-file.stories.ts         | 2 ++
 .../src/pages/admin/RolesEditorFormula.stories.ts         | 2 ++
 packages/frontend/src/pages/admin/_header_.stories.ts     | 2 ++
 packages/frontend/src/pages/admin/abuses.stories.ts       | 2 ++
 packages/frontend/src/pages/admin/ads.stories.ts          | 2 ++
 .../frontend/src/pages/admin/announcements.stories.ts     | 2 ++
 .../frontend/src/pages/admin/bot-protection.stories.ts    | 2 ++
 packages/frontend/src/pages/admin/database.stories.ts     | 2 ++
 .../frontend/src/pages/admin/email-settings.stories.ts    | 2 ++
 packages/frontend/src/pages/admin/federation.stories.ts   | 2 ++
 packages/frontend/src/pages/admin/files.stories.ts        | 2 ++
 packages/frontend/src/pages/admin/index.stories.ts        | 2 ++
 .../frontend/src/pages/admin/instance-block.stories.ts    | 2 ++
 packages/frontend/src/pages/admin/moderation.stories.ts   | 2 ++
 .../frontend/src/pages/admin/object-storage.stories.ts    | 2 ++
 .../frontend/src/pages/admin/other-settings.stories.ts    | 2 ++
 .../src/pages/admin/overview.active-users.stories.ts      | 2 ++
 .../src/pages/admin/overview.ap-requests.stories.ts       | 2 ++
 .../src/pages/admin/overview.federation.stories.ts        | 2 ++
 .../frontend/src/pages/admin/overview.heatmap.stories.ts  | 2 ++
 .../src/pages/admin/overview.instances.stories.ts         | 2 ++
 .../src/pages/admin/overview.moderators.stories.ts        | 2 ++
 packages/frontend/src/pages/admin/overview.pie.stories.ts | 2 ++
 .../src/pages/admin/overview.queue.chart.stories.ts       | 2 ++
 .../frontend/src/pages/admin/overview.queue.stories.ts    | 2 ++
 .../src/pages/admin/overview.retention.stories.ts         | 2 ++
 .../frontend/src/pages/admin/overview.stats.stories.ts    | 2 ++
 packages/frontend/src/pages/admin/overview.stories.ts     | 2 ++
 .../frontend/src/pages/admin/overview.users.stories.ts    | 2 ++
 .../frontend/src/pages/admin/proxy-account.stories.ts     | 2 ++
 .../frontend/src/pages/admin/queue.chart.chart.stories.ts | 2 ++
 packages/frontend/src/pages/admin/queue.chart.stories.ts  | 2 ++
 packages/frontend/src/pages/admin/queue.stories.ts        | 2 ++
 packages/frontend/src/pages/admin/relays.stories.ts       | 2 ++
 packages/frontend/src/pages/admin/roles.edit.stories.ts   | 2 ++
 packages/frontend/src/pages/admin/roles.editor.stories.ts | 2 ++
 packages/frontend/src/pages/admin/roles.role.stories.ts   | 2 ++
 packages/frontend/src/pages/admin/roles.stories.ts        | 2 ++
 packages/frontend/src/pages/admin/security.stories.ts     | 2 ++
 packages/frontend/src/pages/admin/settings.stories.ts     | 2 ++
 packages/frontend/src/pages/admin/users.stories.ts        | 2 ++
 packages/frontend/src/pages/ads.stories.ts                | 2 ++
 packages/frontend/src/pages/announcements.stories.ts      | 2 ++
 packages/frontend/src/pages/antenna-timeline.stories.ts   | 2 ++
 packages/frontend/src/pages/api-console.stories.ts        | 2 ++
 packages/frontend/src/pages/auth.form.stories.ts          | 2 ++
 packages/frontend/src/pages/auth.stories.ts               | 2 ++
 packages/frontend/src/pages/channel-editor.stories.ts     | 2 ++
 packages/frontend/src/pages/channel.stories.ts            | 2 ++
 packages/frontend/src/pages/channels.stories.ts           | 2 ++
 packages/frontend/src/pages/clicker.stories.ts            | 2 ++
 packages/frontend/src/pages/clip.stories.ts               | 2 ++
 .../frontend/src/pages/custom-emojis-manager.stories.ts   | 2 ++
 packages/frontend/src/pages/drive.stories.ts              | 2 ++
 packages/frontend/src/pages/emoji-edit-dialog.stories.ts  | 2 ++
 packages/frontend/src/pages/emojis.emoji.stories.ts       | 2 ++
 packages/frontend/src/pages/explore.featured.stories.ts   | 2 ++
 packages/frontend/src/pages/explore.roles.stories.ts      | 2 ++
 packages/frontend/src/pages/explore.stories.ts            | 2 ++
 packages/frontend/src/pages/explore.users.stories.ts      | 2 ++
 packages/frontend/src/pages/favorites.stories.ts          | 2 ++
 packages/frontend/src/pages/flash/flash-edit.stories.ts   | 2 ++
 packages/frontend/src/pages/flash/flash-index.stories.ts  | 2 ++
 packages/frontend/src/pages/flash/flash.stories.ts        | 2 ++
 packages/frontend/src/pages/follow-requests.stories.ts    | 2 ++
 packages/frontend/src/pages/follow.stories.ts             | 2 ++
 packages/frontend/src/pages/gallery/edit.stories.ts       | 2 ++
 packages/frontend/src/pages/gallery/index.stories.ts      | 2 ++
 packages/frontend/src/pages/gallery/post.stories.ts       | 2 ++
 packages/frontend/src/pages/instance-info.stories.ts      | 2 ++
 packages/frontend/src/pages/miauth.stories.ts             | 2 ++
 packages/frontend/src/pages/my-antennas/create.stories.ts | 2 ++
 packages/frontend/src/pages/my-antennas/edit.stories.ts   | 2 ++
 packages/frontend/src/pages/my-antennas/editor.stories.ts | 2 ++
 packages/frontend/src/pages/my-antennas/index.stories.ts  | 2 ++
 packages/frontend/src/pages/my-clips/index.stories.ts     | 2 ++
 packages/frontend/src/pages/my-lists/index.stories.ts     | 2 ++
 packages/frontend/src/pages/my-lists/list.stories.ts      | 2 ++
 packages/frontend/src/pages/not-found.stories.ts          | 2 ++
 packages/frontend/src/pages/note.stories.ts               | 2 ++
 packages/frontend/src/pages/notifications.stories.ts      | 2 ++
 .../pages/page-editor/els/page-editor.el.image.stories.ts | 2 ++
 .../pages/page-editor/els/page-editor.el.note.stories.ts  | 2 ++
 .../page-editor/els/page-editor.el.section.stories.ts     | 2 ++
 .../pages/page-editor/els/page-editor.el.text.stories.ts  | 2 ++
 .../src/pages/page-editor/page-editor.blocks.stories.ts   | 2 ++
 .../pages/page-editor/page-editor.container.stories.ts    | 2 ++
 .../frontend/src/pages/page-editor/page-editor.stories.ts | 2 ++
 packages/frontend/src/pages/page.stories.ts               | 2 ++
 packages/frontend/src/pages/pages.stories.ts              | 2 ++
 packages/frontend/src/pages/preview.stories.ts            | 2 ++
 packages/frontend/src/pages/registry.keys.stories.ts      | 2 ++
 packages/frontend/src/pages/registry.stories.ts           | 2 ++
 packages/frontend/src/pages/registry.value.stories.ts     | 2 ++
 packages/frontend/src/pages/reset-password.stories.ts     | 2 ++
 packages/frontend/src/pages/role.stories.ts               | 2 ++
 packages/frontend/src/pages/scratchpad.stories.ts         | 2 ++
 packages/frontend/src/pages/search.stories.ts             | 2 ++
 .../frontend/src/pages/settings/2fa.qrdialog.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/2fa.stories.ts       | 2 ++
 .../frontend/src/pages/settings/account-info.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/accounts.stories.ts  | 2 ++
 packages/frontend/src/pages/settings/api.stories.ts       | 2 ++
 packages/frontend/src/pages/settings/apps.stories.ts      | 2 ++
 .../frontend/src/pages/settings/custom-css.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/deck.stories.ts      | 2 ++
 .../frontend/src/pages/settings/delete-account.stories.ts | 2 ++
 packages/frontend/src/pages/settings/drive.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/email.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/general.stories.ts   | 2 ++
 .../frontend/src/pages/settings/import-export.stories.ts  | 2 ++
 packages/frontend/src/pages/settings/index.stories.ts     | 2 ++
 .../frontend/src/pages/settings/instance-mute.stories.ts  | 2 ++
 .../frontend/src/pages/settings/mute-block.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/navbar.stories.ts    | 2 ++
 .../frontend/src/pages/settings/notifications.stories.ts  | 2 ++
 packages/frontend/src/pages/settings/other.stories.ts     | 2 ++
 .../frontend/src/pages/settings/plugin.install.stories.ts | 2 ++
 packages/frontend/src/pages/settings/plugin.stories.ts    | 2 ++
 .../src/pages/settings/preferences-backups.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/privacy.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/profile.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/reaction.stories.ts  | 2 ++
 packages/frontend/src/pages/settings/roles.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/security.stories.ts  | 2 ++
 .../frontend/src/pages/settings/sounds.sound.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/sounds.stories.ts    | 2 ++
 .../src/pages/settings/statusbar.statusbar.stories.ts     | 2 ++
 packages/frontend/src/pages/settings/statusbar.stories.ts | 2 ++
 .../frontend/src/pages/settings/theme.install.stories.ts  | 2 ++
 .../frontend/src/pages/settings/theme.manage.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/theme.stories.ts     | 2 ++
 .../frontend/src/pages/settings/webhook.edit.stories.ts   | 2 ++
 .../frontend/src/pages/settings/webhook.new.stories.ts    | 2 ++
 packages/frontend/src/pages/settings/webhook.stories.ts   | 2 ++
 packages/frontend/src/pages/settings/word-mute.stories.ts | 2 ++
 packages/frontend/src/pages/share.stories.ts              | 2 ++
 packages/frontend/src/pages/signup-complete.stories.ts    | 2 ++
 packages/frontend/src/pages/tag.stories.ts                | 2 ++
 packages/frontend/src/pages/theme-editor.stories.ts       | 2 ++
 packages/frontend/src/pages/timeline.stories.ts           | 2 ++
 packages/frontend/src/pages/timeline.tutorial.stories.ts  | 2 ++
 packages/frontend/src/pages/user-info.stories.ts          | 2 ++
 packages/frontend/src/pages/user-list-timeline.stories.ts | 2 ++
 packages/frontend/src/pages/user-tag.stories.ts           | 2 ++
 packages/frontend/src/pages/user/achievements.stories.ts  | 2 ++
 .../frontend/src/pages/user/activity.following.stories.ts | 2 ++
 .../frontend/src/pages/user/activity.heatmap.stories.ts   | 2 ++
 .../frontend/src/pages/user/activity.notes.stories.ts     | 2 ++
 packages/frontend/src/pages/user/activity.pv.stories.ts   | 2 ++
 packages/frontend/src/pages/user/activity.stories.ts      | 2 ++
 packages/frontend/src/pages/user/clips.stories.ts         | 2 ++
 packages/frontend/src/pages/user/follow-list.stories.ts   | 2 ++
 packages/frontend/src/pages/user/followers.stories.ts     | 2 ++
 packages/frontend/src/pages/user/following.stories.ts     | 2 ++
 packages/frontend/src/pages/user/gallery.stories.ts       | 2 ++
 packages/frontend/src/pages/user/home.stories.ts          | 2 ++
 .../frontend/src/pages/user/index.activity.stories.ts     | 2 ++
 packages/frontend/src/pages/user/index.photos.stories.ts  | 2 ++
 packages/frontend/src/pages/user/index.stories.ts         | 2 ++
 .../frontend/src/pages/user/index.timeline.stories.ts     | 2 ++
 packages/frontend/src/pages/user/pages.stories.ts         | 2 ++
 packages/frontend/src/pages/user/reactions.stories.ts     | 2 ++
 packages/frontend/src/pages/welcome.entrance.a.stories.ts | 2 ++
 packages/frontend/src/pages/welcome.entrance.b.stories.ts | 2 ++
 packages/frontend/src/pages/welcome.entrance.c.stories.ts | 2 ++
 packages/frontend/src/pages/welcome.setup.stories.ts      | 2 ++
 packages/frontend/src/pages/welcome.stories.ts            | 2 ++
 packages/frontend/src/pages/welcome.timeline.stories.ts   | 2 ++
 packages/frontend/src/ui/_common_/common.stories.ts       | 2 ++
 .../frontend/src/ui/_common_/navbar-for-mobile.stories.ts | 2 ++
 packages/frontend/src/ui/_common_/navbar.stories.ts       | 2 ++
 packages/frontend/src/ui/_common_/notification.stories.ts | 2 ++
 .../src/ui/_common_/statusbar-federation.stories.ts       | 2 ++
 .../frontend/src/ui/_common_/statusbar-rss.stories.ts     | 2 ++
 .../src/ui/_common_/statusbar-user-list.stories.ts        | 2 ++
 packages/frontend/src/ui/_common_/statusbars.stories.ts   | 2 ++
 .../frontend/src/ui/_common_/stream-indicator.stories.ts  | 2 ++
 packages/frontend/src/ui/_common_/upload.stories.ts       | 2 ++
 packages/frontend/src/ui/classic.header.stories.ts        | 2 ++
 packages/frontend/src/ui/classic.sidebar.stories.ts       | 2 ++
 packages/frontend/src/ui/classic.stories.ts               | 2 ++
 packages/frontend/src/ui/deck.stories.ts                  | 2 ++
 packages/frontend/src/ui/deck/antenna-column.stories.ts   | 2 ++
 packages/frontend/src/ui/deck/channel-column.stories.ts   | 2 ++
 packages/frontend/src/ui/deck/column-core.stories.ts      | 2 ++
 packages/frontend/src/ui/deck/column.stories.ts           | 2 ++
 packages/frontend/src/ui/deck/direct-column.stories.ts    | 2 ++
 packages/frontend/src/ui/deck/list-column.stories.ts      | 2 ++
 packages/frontend/src/ui/deck/main-column.stories.ts      | 2 ++
 packages/frontend/src/ui/deck/mentions-column.stories.ts  | 2 ++
 .../frontend/src/ui/deck/notifications-column.stories.ts  | 2 ++
 packages/frontend/src/ui/deck/tl-column.stories.ts        | 2 ++
 packages/frontend/src/ui/deck/widgets-column.stories.ts   | 2 ++
 packages/frontend/src/ui/universal.stories.ts             | 2 ++
 packages/frontend/src/ui/universal.widgets.stories.ts     | 2 ++
 packages/frontend/src/ui/visitor.stories.ts               | 2 ++
 packages/frontend/src/ui/visitor/a.stories.ts             | 2 ++
 packages/frontend/src/ui/visitor/b.stories.ts             | 2 ++
 packages/frontend/src/ui/visitor/header.stories.ts        | 2 ++
 packages/frontend/src/ui/visitor/kanban.stories.ts        | 2 ++
 packages/frontend/src/ui/zen.stories.ts                   | 2 ++
 .../src/widgets/WidgetActivity.calendar.stories.ts        | 2 ++
 .../frontend/src/widgets/WidgetActivity.chart.stories.ts  | 2 ++
 packages/frontend/src/widgets/WidgetActivity.stories.ts   | 2 ++
 packages/frontend/src/widgets/WidgetAichan.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetAiscript.stories.ts   | 2 ++
 .../frontend/src/widgets/WidgetAiscriptApp.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetButton.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetCalendar.stories.ts   | 2 ++
 packages/frontend/src/widgets/WidgetClicker.stories.ts    | 2 ++
 packages/frontend/src/widgets/WidgetClock.stories.ts      | 2 ++
 .../frontend/src/widgets/WidgetDigitalClock.stories.ts    | 2 ++
 packages/frontend/src/widgets/WidgetFederation.stories.ts | 2 ++
 .../frontend/src/widgets/WidgetInstanceCloud.stories.ts   | 2 ++
 .../frontend/src/widgets/WidgetInstanceInfo.stories.ts    | 2 ++
 packages/frontend/src/widgets/WidgetJobQueue.stories.ts   | 2 ++
 packages/frontend/src/widgets/WidgetMemo.stories.ts       | 2 ++
 .../frontend/src/widgets/WidgetNotifications.stories.ts   | 2 ++
 .../frontend/src/widgets/WidgetOnlineUsers.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetPhotos.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetPostForm.stories.ts   | 2 ++
 packages/frontend/src/widgets/WidgetProfile.stories.ts    | 2 ++
 packages/frontend/src/widgets/WidgetRss.stories.ts        | 2 ++
 packages/frontend/src/widgets/WidgetRssTicker.stories.ts  | 2 ++
 packages/frontend/src/widgets/WidgetSlideshow.stories.ts  | 2 ++
 packages/frontend/src/widgets/WidgetTimeline.stories.ts   | 2 ++
 packages/frontend/src/widgets/WidgetTrends.stories.ts     | 2 ++
 packages/frontend/src/widgets/WidgetUnixClock.stories.ts  | 2 ++
 packages/frontend/src/widgets/WidgetUserList.stories.ts   | 2 ++
 .../frontend/src/widgets/server-metric/cpu-mem.stories.ts | 2 ++
 .../frontend/src/widgets/server-metric/cpu.stories.ts     | 2 ++
 .../frontend/src/widgets/server-metric/disk.stories.ts    | 2 ++
 .../frontend/src/widgets/server-metric/index.stories.ts   | 2 ++
 .../frontend/src/widgets/server-metric/mem.stories.ts     | 2 ++
 .../frontend/src/widgets/server-metric/net.stories.ts     | 2 ++
 .../frontend/src/widgets/server-metric/pie.stories.ts     | 2 ++
 430 files changed, 863 insertions(+), 3 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index a368a4f68e..60f7d26d7b 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -29,7 +29,7 @@ const generator = {
 				break;
 			}
 		}
-		state.write(' satisfies ');
+		state.write(' satisfies ', node as unknown as estree.Expression);
 		this[node.reference.type](node.reference, state);
 	},
 }
@@ -206,7 +206,6 @@ function toStories(component: string): string {
 																		key={<identifier name='render' />}
 																		value={
 																			<function-expression
-																				id={<identifier name='render' />}
 																				params={[
 																					<identifier name='args' />,
 																					<object-pattern
@@ -301,7 +300,10 @@ function toStories(component: string): string {
 		/>
 	) as unknown as estree.Program;
 	return format(
-		generate(program, { generator }) + (hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
+		'/* eslint-disable @typescript-eslint/explicit-function-return-type */\n' +
+			'/* eslint-disable import/no-default-export */\n' +
+			generate(program, { generator }) +
+			(hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
 		{
 			parser: 'babel-ts',
 			singleQuote: true,
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
index f46a44f81d..7d97a6e7bc 100644
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAbuseReport from './MkAbuseReport.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
index 7db3344385..76ab111f46 100644
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAbuseReportWindow from './MkAbuseReportWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
index d2a84d6dd9..8220dbcbb8 100644
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAchievements from './MkAchievements.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
index 2d034c2ac7..54cbf2b30c 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/MkAnalogClock',
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
index 1cb16883a4..6965f41036 100644
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAsUi from './MkAsUi.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
index b0d5b9f132..f2bc0b8374 100644
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAutocomplete from './MkAutocomplete.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
index 690030b46f..2892691933 100644
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAvatars from './MkAvatars.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index 2328de28db..c3da0d1a46 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/MkButton',
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index 8db28448b3..f6d0648d89 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCaptcha from './MkCaptcha.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
index 71ee9331c6..461d6f2fda 100644
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkChannelFollowButton from './MkChannelFollowButton.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
index 9d850794a0..9ad2fe84a0 100644
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkChannelPreview from './MkChannelPreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
index feb9904044..5cd72a4805 100644
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkChart from './MkChart.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
index 62186992bb..ff21636c3b 100644
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkChartLegend from './MkChartLegend.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
index f3ff7d39fc..69555e9dd1 100644
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkChartTooltip from './MkChartTooltip.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
index b7b5c230bf..4cfed26091 100644
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCheckbox from './MkCheckbox.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
index 15b3a7785f..750b979f6c 100644
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkClickerGame from './MkClickerGame.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
index 4351df3c47..02ec124cf7 100644
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkClipPreview from './MkClipPreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index b3c43223bc..9498e4160d 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCode_core from './MkCode.core.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
index d09c095146..5d9ebec74d 100644
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCode from './MkCode.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
index 93f4846fc9..5d8b4891c8 100644
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkContainer from './MkContainer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
index 4108faa34b..46b8ae124f 100644
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkContextMenu from './MkContextMenu.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
index 2ed84b402c..9e3808eae2 100644
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCropperDialog from './MkCropperDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
index 408ce9f2d6..16e1b03217 100644
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCwButton from './MkCwButton.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
index d4852f43b8..3d5b27e0c0 100644
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDateSeparatedList from './MkDateSeparatedList.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
index e34e076a99..9af7dad32c 100644
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDialog from './MkDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
index 8f0c5e02b3..cfe65bcfc7 100644
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDigitalClock from './MkDigitalClock.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
index c62748cc65..b63ccc23e0 100644
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDonation from './MkDonation.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index f64f4593b2..56b007cbea 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_file from './MkDrive.file.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index c1774428f0..7c5514a292 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_folder from './MkDrive.folder.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index d0d405538e..cc7d937883 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive_navFolder from './MkDrive.navFolder.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
index a90fdf3623..d80015a579 100644
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDrive from './MkDrive.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
index 13eae1240a..2efa600aa1 100644
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
index d5090fdc8a..00d23ad8f3 100644
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveSelectDialog from './MkDriveSelectDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
index 23fe35f156..c2054de123 100644
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkDriveWindow from './MkDriveWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index b4d26bb58e..567ab0ca06 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPicker_section from './MkEmojiPicker.section.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
index 74a6a35806..5811d0d1ec 100644
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPicker from './MkEmojiPicker.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
index b3ed21972c..dad27b0d50 100644
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPickerDialog from './MkEmojiPickerDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
index 6251b2c522..39c5ca2b04 100644
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmojiPickerWindow from './MkEmojiPickerWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
index 606c182f66..9f4f2506bc 100644
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFeaturedPhotos from './MkFeaturedPhotos.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
index b085478b4e..c8f731bab9 100644
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFileCaptionEditWindow from './MkFileCaptionEditWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
index 22da12b766..9f3b261005 100644
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFileListForAdmin from './MkFileListForAdmin.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
index 2827c4450d..951863c697 100644
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFlashPreview from './MkFlashPreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
index dcc2afeb6d..da65def88c 100644
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFoldableSection from './MkFoldableSection.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
index e23080d647..c426a66112 100644
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFolder from './MkFolder.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
index 7d707b5c8c..0e61cb36dc 100644
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFollowButton from './MkFollowButton.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
index c8be79aef2..4976670c9e 100644
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkForgotPassword from './MkForgotPassword.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
index 56ca0326a6..b63991185a 100644
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkFormDialog from './MkFormDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
index 3971dd1225..fc6b7ec0d9 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkGalleryPostPreview from './MkGalleryPostPreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
index b439d6ea4b..1c15e263e2 100644
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkGoogle from './MkGoogle.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
index b89fc49c31..17bf874d0f 100644
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkHeatmap from './MkHeatmap.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
index ece0738868..19d50af615 100644
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkImageViewer from './MkImageViewer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
index 89a5192e4d..6694a4aaf9 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkImgWithBlurhash from './MkImgWithBlurhash.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
index fcea66afb1..886af9af8b 100644
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkInfo from './MkInfo.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
index 724ab1c706..e372115748 100644
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkInput from './MkInput.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
index 4427b72747..eeb72cd796 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceCardMini from './MkInstanceCardMini.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
index 2290681413..1b14c365b6 100644
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceStats from './MkInstanceStats.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
index 779ce96c42..2ed1628663 100644
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkInstanceTicker from './MkInstanceTicker.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
index 0a4544e7e1..748630113f 100644
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkKeyValue from './MkKeyValue.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
index 1395795070..aa3525124e 100644
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkLaunchPad from './MkLaunchPad.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
index 9eb49f1e23..ef98855b07 100644
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkLink from './MkLink.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
index ec35940f6d..6ade5a4cf2 100644
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMarquee from './MkMarquee.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
index 7c9d954f38..9d2d1069da 100644
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaBanner from './MkMediaBanner.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
index ea9f9f33b0..adfad85063 100644
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaImage from './MkMediaImage.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
index 3b194849b5..e68935ee9d 100644
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaList from './MkMediaList.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
index 06bea55404..61aafdad83 100644
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMediaVideo from './MkMediaVideo.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
index 139b9851fc..503ac4a542 100644
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMention from './MkMention.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index 6e6cf385f2..b45a046ef8 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMenu_child from './MkMenu.child.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
index d3eb2f83e6..8a60b68f3e 100644
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMenu from './MkMenu.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
index cc49211f99..c0d58421b1 100644
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMiniChart from './MkMiniChart.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
index f85f8c68cc..50c77800d8 100644
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkModal from './MkModal.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
index a6e7ffa0fa..6c8cbef34c 100644
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkModalPageWindow from './MkModalPageWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
index bfc75f90e9..7b162ab8bc 100644
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkModalWindow from './MkModalWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
index dcadfbaa0b..79d28a7efe 100644
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNote from './MkNote.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
index a9396cf23d..3a63251f2a 100644
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteDetailed from './MkNoteDetailed.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
index 8ec74de40e..1ccda97258 100644
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteHeader from './MkNoteHeader.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
index 6bd9fd1213..9270290701 100644
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotePreview from './MkNotePreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
index c4dd101cfe..e6e9fb9f49 100644
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteSimple from './MkNoteSimple.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
index 172647eabe..4d7c0af7b7 100644
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNoteSub from './MkNoteSub.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
index 4bad4882a2..4551b2c304 100644
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotes from './MkNotes.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
index 90d87ce58f..3e4478f9ae 100644
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotification from './MkNotification.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
index 8dd29793e0..059f86b007 100644
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotificationSettingWindow from './MkNotificationSettingWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
index c56f9235af..48ab20bf90 100644
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNotifications from './MkNotifications.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
index cae6122669..837de8329e 100644
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNumber from './MkNumber.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
index 296d39632f..9c1fcc2179 100644
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkNumberDiff from './MkNumberDiff.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
index 2b345b6ac1..c7aec40dc8 100644
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkObjectView from './MkObjectView.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index f71148ee8e..da7ae5958d 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkObjectView_value from './MkObjectView.value.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
index e98d695185..4c2dd1b3ac 100644
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkOmit from './MkOmit.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
index db38b03aab..6b8121527e 100644
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPagePreview from './MkPagePreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
index 4843e4e2b4..846dd9f65c 100644
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageWindow from './MkPageWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
index a5509a9309..78a99081c9 100644
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPagination from './MkPagination.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
index a75a89a8eb..b6851053d3 100644
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPlusOneEffect from './MkPlusOneEffect.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
index a52aff5043..651847cb15 100644
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPoll from './MkPoll.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
index 59c016f6b4..0629b9a685 100644
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPollEditor from './MkPollEditor.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
index 76dfac51a5..090e1f494b 100644
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPopupMenu from './MkPopupMenu.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
index d160ff066f..5ed74b029d 100644
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostForm from './MkPostForm.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
index 7b8567f208..687f0bfaf2 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostFormAttaches from './MkPostFormAttaches.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
index b5058bfdef..616d6f1f83 100644
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPostFormDialog from './MkPostFormDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
index 673f5e643c..15ef8eb045 100644
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPushNotificationAllowButton from './MkPushNotificationAllowButton.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
index 3cf58bda7b..8056eecf84 100644
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRadio from './MkRadio.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
index 9ec398614c..b3a0e39efb 100644
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRadios from './MkRadios.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
index 3e92726608..dc6caae4d5 100644
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRange from './MkRange.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
index e44770f681..10b9b6e2ed 100644
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactedUsersDialog from './MkReactedUsersDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
index 17e79bc29b..5bba9aa1af 100644
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionEffect from './MkReactionEffect.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
index f3551ec0af..ab78807357 100644
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionIcon from './MkReactionIcon.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
index 996e08df7f..b3478f3110 100644
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionTooltip from './MkReactionTooltip.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index 432ff2335b..c853b4da3b 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer_details from './MkReactionsViewer.details.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index fcdaa140b1..9f5160f06e 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer_reaction from './MkReactionsViewer.reaction.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
index d593267861..30262c02b0 100644
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkReactionsViewer from './MkReactionsViewer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
index 406c93a26b..103e77fc4f 100644
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRemoteCaution from './MkRemoteCaution.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
index e0cbb8e0ed..fb19bd30fe 100644
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRetentionHeatmap from './MkRetentionHeatmap.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
index 9632aca9b1..73552e9d09 100644
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRippleEffect from './MkRippleEffect.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
index d9001b80d2..1cc60992e4 100644
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkRolePreview from './MkRolePreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
index 080dd6a09a..6bc18d2903 100644
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSample from './MkSample.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
index 0526e59157..7996a53e14 100644
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSelect from './MkSelect.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
index 56e0c6a78d..8f03065e1d 100644
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignin from './MkSignin.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
index 964b2368bd..d2e0689b44 100644
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSigninDialog from './MkSigninDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
index cd2411f03d..a67235f6a2 100644
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignup from './MkSignup.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
index 6c50f9e4ca..dfca62ba28 100644
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSignupDialog from './MkSignupDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
index cafe471900..4e784abf5e 100644
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSparkle from './MkSparkle.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
index c85ac32bd3..ee19f578bc 100644
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSubNoteContent from './MkSubNoteContent.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
index 651353c8fb..b6db1e8617 100644
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSuperMenu from './MkSuperMenu.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
index 704df93904..8e7b8ffb1c 100644
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSwitch from './MkSwitch.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
index 351dc29b98..092a84a748 100644
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTab from './MkTab.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
index 868902865b..6bfbc03524 100644
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTagCloud from './MkTagCloud.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
index 4cc40e2d15..92c496db9b 100644
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTextarea from './MkTextarea.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
index 3c48c5e79b..b6bfb600dc 100644
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTimeline from './MkTimeline.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
index 730b2e34e2..fef647287c 100644
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkToast from './MkToast.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
index 6e1b4b4361..fb9b1bc6da 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTokenGenerateWindow from './MkTokenGenerateWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
index 42f8a21e53..2ea06ac2a8 100644
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTooltip from './MkTooltip.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
index 15e679c9a6..5a8a16a6b7 100644
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUpdated from './MkUpdated.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
index 6389438bf2..9f9d8c8f86 100644
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrlPreview from './MkUrlPreview.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
index 4c76e1dbf9..74657a93ae 100644
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrlPreviewPopup from './MkUrlPreviewPopup.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
index faee519469..81de09a199 100644
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserCardMini from './MkUserCardMini.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
index 08010825cb..286de8925f 100644
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserInfo from './MkUserInfo.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
index 1c7441f5d4..97f4d1f7d8 100644
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserList from './MkUserList.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
index 3c338403e8..2b9daf9b5b 100644
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserOnlineIndicator from './MkUserOnlineIndicator.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
index e9eeae31c8..a74ed2609b 100644
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserPopup from './MkUserPopup.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
index 21c0be2e3e..522c1fc632 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserSelectDialog from './MkUserSelectDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
index 1c932d6a5f..9b057bea6d 100644
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUsersTooltip from './MkUsersTooltip.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
index 41a5f865fa..52156bfe11 100644
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkVisibilityPicker from './MkVisibilityPicker.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
index 47dbf7ad1d..ea79004c39 100644
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkWaitingDialog from './MkWaitingDialog.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
index 7c8ad0670d..7a6aad357f 100644
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkWidgets from './MkWidgets.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
index ed80a62c87..8f1a27631c 100644
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkWindow from './MkWindow.vue';
 const meta = {
diff --git a/packages/frontend/src/components/MkYouTubePlayer.stories.ts b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
index 1c9e18df05..84f1dcd889 100644
--- a/packages/frontend/src/components/MkYouTubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkYouTubePlayer from './MkYouTubePlayer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index c46949f43a..54e6c25ca8 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import link_ from './link.vue';
 const meta = {
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index aae1ec2e43..fabddc668b 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import section_ from './section.vue';
 const meta = {
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index 035d74f1c1..6ddafe86c8 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import slot_ from './slot.vue';
 const meta = {
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index fca1db65f4..3495bd7318 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import split_ from './split.vue';
 const meta = {
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index abb6a802e0..a22580d7a9 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import suspense_ from './suspense.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index 8032d70705..e3d56c63c3 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkA from './MkA.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index 3078c305eb..a710c227a0 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAcct from './MkAcct.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index f404138cf6..687bf30ab5 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAd from './MkAd.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 1a50cb40d6..644a1f2f34 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkAvatar from './MkAvatar.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index 42563cb98a..cc9d4d668a 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkCustomEmoji from './MkCustomEmoji.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
index 86ffd22406..cdae6b11b5 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEllipsis from './MkEllipsis.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index c57dffe4d0..7c48937c7a 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkEmoji from './MkEmoji.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index 789233ddbc..d04d57f01f 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkError from './MkError.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index 0104591735..4fe0d4ff34 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkLoading from './MkLoading.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 5b13ebd3c7..23869d98e7 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
index 4aca3d19ed..aa7c5b5f8a 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageHeader from './MkPageHeader.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index fb07450580..0dfa7ab6e9 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
index e9b138d614..1ca0f7da95 100644
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkSpacer from './MkSpacer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
index 87449db549..cad5cd06fa 100644
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkStickyContainer from './MkStickyContainer.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
index a03ee7b389..c1d5fd6644 100644
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkTime from './MkTime.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
index 1a46cd3486..7e6c813ce0 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUrl from './MkUrl.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
index caaf80ee3b..68deaa4fec 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkUserName from './MkUserName.vue';
 const meta = {
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
index 7d266c81d3..45a574cf56 100644
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import RouterView from './RouterView.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index 38bac62739..e321ca94e3 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_block from './page.block.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 9fa0c16157..99088ffb71 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_button from './page.button.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index 6d95fd6712..c8a4dfc843 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_canvas from './page.canvas.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index b28848cf5e..ce3bc0d2af 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_counter from './page.counter.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index 20f7ae3456..4ad2d98989 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_if from './page.if.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index f4e2184cbc..934380d2c2 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_image from './page.image.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 5fea1445d6..7d7fa7acf0 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_note from './page.note.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index a3f42bb788..cc78db58c6 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_number_input from './page.number-input.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index 80af11a4f9..17fc49c96c 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_post from './page.post.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 670127ef06..14f2463dee 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_radio_button from './page.radio-button.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index 0e2920eca9..826a861bf7 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_section from './page.section.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index f6439fd0c1..5754d4ad0d 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_ from './page.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index c5cca25eb5..79d884a5f2 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_switch from './page.switch.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index 0af6ef7225..cc2cb26a22 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_text_input from './page.text-input.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index 99ad29d9d1..cbf1816dfd 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_text from './page.text.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index 4d2aa48ffa..c0320807ca 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_textarea_input from './page.textarea-input.vue';
 const meta = {
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index 6828aa0c27..9629c3ec9b 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_textarea from './page.textarea.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
index ac0c2c67ca..eb94615790 100644
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _empty_ from './_empty_.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
index 7f8311a4cc..67c81d4770 100644
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _error_ from './_error_.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
index d9dbdfc295..54bee86632 100644
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _loading_ from './_loading_.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index ef5fe82e09..82217ac20a 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import about_misskey from './about-misskey.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index 73f582f953..a172ce9c80 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import about_emojis from './about.emojis.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index 371dabf636..a7c4b059df 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import about_federation from './about.federation.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index ba25159971..64b3932312 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import about_ from './about.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index d0c1126af3..32a359720a 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import achievements_ from './achievements.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index cc80bd47f7..bd8ee0f04c 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import admin_file from './admin-file.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
index 94fe9d3891..bf1250f085 100644
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import RolesEditorFormula from './RolesEditorFormula.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
index 2ff33c6979..1c3871ddb9 100644
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _header_ from './_header_.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index e98fae9df5..3c64cb36ad 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import abuses_ from './abuses.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 80fe84e31e..5f939afecf 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import ads_ from './ads.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index 72a5a7b4d6..f9416c0c24 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import announcements_ from './announcements.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index d4d39fe52f..c76808edec 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import bot_protection from './bot-protection.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index cf1cfdddf0..a2d240489a 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import database_ from './database.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index b178e1dfd7..7433c44136 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import email_settings from './email-settings.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index 231de45401..761fdeee3f 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import federation_ from './federation.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index 49c4f7a267..6e868ec81a 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import files_ from './files.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index 504c2993f4..05ff1a3703 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index 86e06c51a0..bdf12a8d21 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import instance_block from './instance-block.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index 0847887e1f..e2ce3b23cc 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import moderation_ from './moderation.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index 4cdf207066..b2815ae3ff 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import object_storage from './object-storage.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index 203e02b2c1..4015dd47c6 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import other_settings from './other-settings.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index 3d32d6ec73..c91a005f4d 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_active_users from './overview.active-users.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index 4831733d37..6c750a11a7 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_ap_requests from './overview.ap-requests.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index 3573483a39..64fa535a55 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_federation from './overview.federation.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index 9e90173616..f9fb6cd8e8 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_heatmap from './overview.heatmap.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index 421c9b7e41..ac3a86098e 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_instances from './overview.instances.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index 0201210053..4c6d2cf7cf 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_moderators from './overview.moderators.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index c27809cab5..e9893549ee 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_pie from './overview.pie.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index fcf1566e99..2cbb7d78a8 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_queue_chart from './overview.queue.chart.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index f67609c18f..0fec1c1a7c 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_queue from './overview.queue.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index b7941e8728..25a1594327 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_retention from './overview.retention.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 411ab4728d..059ada5c9a 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_stats from './overview.stats.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index f35ba14dbd..9c4f2f73ac 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_ from './overview.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 7809a2bd8c..125c44f61f 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import overview_users from './overview.users.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 9fed56fccc..2a7a4bb6f7 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import proxy_account from './proxy-account.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 83bb392849..65ca99ccb8 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import queue_chart_chart from './queue.chart.chart.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index 105e5c9ef3..f08b88dad5 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import queue_chart from './queue.chart.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index 0e4335cee8..e13f4bf536 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import queue_ from './queue.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index 6e18d7568e..8aba314618 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import relays_ from './relays.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index ed6f3dd9f4..826b78af42 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import roles_edit from './roles.edit.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index 201a2cf78c..1bac7a7b60 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import roles_editor from './roles.editor.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index ae3a51a643..76f0d02ee3 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import roles_role from './roles.role.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index 10873c3ec0..41b6f82f68 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import roles_ from './roles.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index a0b8c9a68e..667dc1f28d 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import security_ from './security.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index 5231e0706b..2646dd894c 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import settings_ from './settings.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index fe71259293..7ec0fd4060 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import users_ from './users.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index 3dc49e0628..65afabd5df 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import ads_ from './ads.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index 8119b1ae5f..1488a805d6 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import announcements_ from './announcements.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index 20cba71e7e..f50785a714 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import antenna_timeline from './antenna-timeline.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index 015c50b87c..9c503f2fc2 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import api_console from './api-console.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 30358e2d11..4b0d95596b 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import auth_form from './auth.form.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index 95a0c7f058..235d5384be 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import auth_ from './auth.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index fa0eae5b36..7663db90e6 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import channel_editor from './channel-editor.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index 55e532e805..550d937545 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import channel_ from './channel.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index 3c592edf76..e0f79465ee 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import channels_ from './channels.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index 643ceaa653..1e5dfcfae0 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import clicker_ from './clicker.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index 7beeb786be..9921b57e1f 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import clip_ from './clip.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 9f05aa76d4..6d8cb181d7 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import custom_emojis_manager from './custom-emojis-manager.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index ffaac68ab6..b51b0f5a06 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import drive_ from './drive.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index fba0df28e0..13e66cd5f5 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import emoji_edit_dialog from './emoji-edit-dialog.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index 76a6598b0f..0eb9a82c55 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import emojis_emoji from './emojis.emoji.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index 7c5a7e7527..aa6fb9a641 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import explore_featured from './explore.featured.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index 636403b7ae..5a033ff659 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import explore_roles from './explore.roles.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index 5cf163e849..73b55b8d3e 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import explore_ from './explore.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index b8a61d311b..ad708a0732 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import explore_users from './explore.users.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 8bfb283dc0..3bcc85760a 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import favorites_ from './favorites.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index a280a9c74f..addaa232d2 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import flash_edit from './flash-edit.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 0452a498ca..3db663e6a4 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import flash_index from './flash-index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index dddb5021d6..760fff729e 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import flash_ from './flash.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index a13906dcc9..691064cbe8 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import follow_requests from './follow-requests.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index 67c07e10e3..51bffee3e9 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import follow_ from './follow.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index 02f86ced3b..11fa82a96a 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import edit_ from './edit.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index 21c4913ea8..4d1112aa3f 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index ae018dd671..f3dbec3349 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import post_ from './post.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index c09cb3dc8f..eede2a59ba 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import instance_info from './instance-info.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index 9e09cc55de..739f935dfd 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import miauth_ from './miauth.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index b6cecbfd31..205ed53dec 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import create_ from './create.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index 67ad042655..37c3eccc21 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import edit_ from './edit.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index ddc8577dd1..df9b81d5c0 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import editor_ from './editor.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index 5b4f5bbcdd..0c71408871 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index de28663875..aec5d71aae 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index 7cbc582d6e..0f3995a484 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index 9aedbbc333..99e6c999b9 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import list_ from './list.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index 29ee7f1c33..7883045697 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import not_found from './not-found.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index 9eb7b00500..5510f61bd9 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import note_ from './note.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index 5c8a70d034..bef350a4c1 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import notifications_ from './notifications.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 5e06e31447..67b9b8c35b 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_image from './page-editor.el.image.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 0cb64ffc40..7377d2b75d 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_note from './page-editor.el.note.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index f294a7d128..c93304330d 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_section from './page-editor.el.section.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index 5b1b1ca397..4486012428 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_el_text from './page-editor.el.text.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index 65b4f56a6d..fb29d1f4e1 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_blocks from './page-editor.blocks.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 49f9437cee..252892c264 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor_container from './page-editor.container.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index e044fc5ac3..f6ff74cd3d 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_editor from './page-editor.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index 91fae74f62..2e988a1575 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import page_ from './page.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index 89b4ba0fb1..1745427170 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import pages_ from './pages.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index 0c7c99f661..a73091c83f 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import preview_ from './preview.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 9843a5f014..8a079f7c26 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import registry_keys from './registry.keys.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index cc5362f209..7f042eb7dd 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import registry_ from './registry.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index 91e2afc987..2bb17f1d2d 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import registry_value from './registry.value.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index add1262acf..b2d0d2cf50 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import reset_password from './reset-password.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index a6563e2a31..f8b3bfc813 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import role_ from './role.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index 748a55e197..5ce010698e 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import scratchpad_ from './scratchpad.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 44125b066f..92964f42e9 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import search_ from './search.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index fc9a221e40..2eed85d760 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _2fa_qrdialog from './2fa.qrdialog.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 540753b61c..7f66edf240 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import _2fa from './2fa.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index d7871eb875..2194e97ffd 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import account_info from './account-info.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index b462238fb3..b50f0862fc 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import accounts_ from './accounts.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index 6be07d1ab3..66140aa8ba 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import api_ from './api.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index 94b59fd141..3a202bd10e 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import apps_ from './apps.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index 6c861d419e..e411cf8947 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import custom_css from './custom-css.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index 16f237e165..74aaec4430 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import deck_ from './deck.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index 32b8f00670..f71df1bab6 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import delete_account from './delete-account.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index 621fab6b85..be593fc2d2 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import drive_ from './drive.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index dbcd866607..42ea878fa3 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import email_ from './email.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index 48ad246af0..3a97f8f550 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import general_ from './general.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index af45540613..a050a23639 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import import_export from './import-export.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index 1cdf2045c3..3a5c6f58b1 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index 8e62714af1..69a9d58232 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import instance_mute from './instance-mute.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index 6591d783f6..4962ab1305 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import mute_block from './mute-block.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index 8546cbdb64..68e710c57d 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import navbar_ from './navbar.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index d73dd10474..85540d3675 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import notifications_ from './notifications.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index e7c2d14eb0..da07d5f054 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import other_ from './other.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index d0b10f0e37..5b00437878 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import plugin_install from './plugin.install.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index 11f522b7db..5fec62074b 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import plugin_ from './plugin.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 7f27b48ce0..2be2ec4910 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import preferences_backups from './preferences-backups.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index 23fbe5cea1..93f712be4f 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import privacy_ from './privacy.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index af255090d6..5558416788 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import profile_ from './profile.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index 103cb98c57..82b0875c14 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import reaction_ from './reaction.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index 34f0ece879..e894a75798 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import roles_ from './roles.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index 7042d4b455..99cc608f99 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import security_ from './security.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index c11573758c..d25d2821ef 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import sounds_sound from './sounds.sound.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index 63b01ecacd..19bab607f8 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import sounds_ from './sounds.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 88d163337e..6a8e48ef74 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_statusbar from './statusbar.statusbar.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 747b1815d2..37c31a34c1 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_ from './statusbar.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index ff8e996bf4..5ef535cca2 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import theme_install from './theme.install.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index a03d8581e1..c1dff7467d 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import theme_manage from './theme.manage.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index 0c0017f168..e746a2e119 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import theme_ from './theme.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index c3596bc031..e3eaaef35f 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import webhook_edit from './webhook.edit.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index 7d6677b81d..505e854cd8 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import webhook_new from './webhook.new.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index 7a10202b6d..80176507bc 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import webhook_ from './webhook.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index f4145b814b..7fe90196d8 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import word_mute from './word-mute.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index 525d6b3b02..e847f63e72 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import share_ from './share.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index 7591c4d470..2ada59a214 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import signup_complete from './signup-complete.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index def784dd5d..513f4c7472 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import tag_ from './tag.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index 754a3574cd..57ea65094d 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import theme_editor from './theme-editor.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index 97319bc669..b222fe0295 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import timeline_ from './timeline.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index 8799c9fcf8..cdbe3c3a51 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import timeline_tutorial from './timeline.tutorial.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index b5a3782ad5..5960355e6e 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import user_info from './user-info.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index 18457da47f..2fb33fdc47 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import user_list_timeline from './user-list-timeline.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 7ec9188e99..0911f79c3d 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import user_tag from './user-tag.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index dc1123b04c..781149d823 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import achievements_ from './achievements.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index 9594aa1bd4..e95f2d4efb 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import activity_following from './activity.following.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 9578d1786d..94aee455b0 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import activity_heatmap from './activity.heatmap.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index a07061fc64..107164cb85 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import activity_notes from './activity.notes.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index 2933c7927d..44359d8db4 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import activity_pv from './activity.pv.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index f6f610549e..72f3a3083b 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import activity_ from './activity.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index d3432dd26b..dbfef536cb 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import clips_ from './clips.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index b2b3eb7a90..27d148a5d0 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import follow_list from './follow-list.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index 17ec4c4cf7..7dea60770b 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import followers_ from './followers.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index cc37ebe5cb..c9a7c90d1c 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import following_ from './following.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index 15f8a83938..80b96e1ae7 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import gallery_ from './gallery.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index 0126623dc3..d218681972 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import home_ from './home.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index ffdfa16b1a..d3b61fd052 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_activity from './index.activity.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index c39bae3568..ae0243a631 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_photos from './index.photos.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index 19c2b2eb0f..333acffe8c 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index 27cdf80d42..dc256ff791 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_timeline from './index.timeline.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index 1e1bc31b85..3bab825853 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import pages_ from './pages.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index 6fe141d4ff..0fe75027bf 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import reactions_ from './reactions.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index d8ba7deb13..ff9f11c1b4 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_a from './welcome.entrance.a.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index 81980c5b0b..1a19c94480 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_b from './welcome.entrance.b.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index f2832056d8..0f4b3c6dde 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_entrance_c from './welcome.entrance.c.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index 81e2e50835..02ba28a65f 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_setup from './welcome.setup.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index 0ba8e1f855..410a460318 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_ from './welcome.vue';
 const meta = {
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index fc1a7b3462..06e1849d86 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import welcome_timeline from './welcome.timeline.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index 9a6f812605..ba8f5f6a2b 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import common_ from './common.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index e6b81fc2bb..c2c66fcf29 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import navbar_for_mobile from './navbar-for-mobile.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index 2c08306612..be7162a141 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import navbar_ from './navbar.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index 1de941691d..e92fbdccb5 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import notification_ from './notification.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index d809ce3238..2ed6d95db6 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_federation from './statusbar-federation.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index f20f7bfb94..abec5c48ac 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_rss from './statusbar-rss.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index eacae75f0f..648a42ef9c 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbar_user_list from './statusbar-user-list.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index 1f668520e9..c5c4b07860 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import statusbars_ from './statusbars.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index 1430849c67..5c16d68e0e 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import stream_indicator from './stream-indicator.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index 40b3d392bb..98856c5ee7 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import upload_ from './upload.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index aa3965204c..01d87195d9 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import classic_header from './classic.header.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index cb3c5e4b64..53fd612f10 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import classic_sidebar from './classic.sidebar.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index c87c93a950..1311d4a6fb 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import classic_ from './classic.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index 74121f4e08..5aefba84e8 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import deck_ from './deck.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index 080d2464fc..ebef884ca8 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import antenna_column from './antenna-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index 8cb9b10008..b442e1343d 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import channel_column from './channel-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index 7bb2a2ff11..946d2f6b2d 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import column_core from './column-core.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index dea69e8d97..fa406a4465 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import column_ from './column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index 60c1b24896..45a767d989 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import direct_column from './direct-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index 8a0cd8888d..7c582f2e40 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import list_column from './list-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index 6d35056a1d..e78e472cd1 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import main_column from './main-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index e88931d38c..d76f0dc0f0 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import mentions_column from './mentions-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index c8e81f3d7e..b97401f1e8 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import notifications_column from './notifications-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index 1205c2dfaf..4f225c2d64 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import tl_column from './tl-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index 9cfe50297a..8f9dc0fb9a 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import widgets_column from './widgets-column.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index d60620cb87..b5df41d152 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import universal_ from './universal.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index 5e7a208add..0896d95505 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import universal_widgets from './universal.widgets.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index b1ed6b75c0..8525c0ab24 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import visitor_ from './visitor.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index d0ffad2c48..08b512b874 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import a_ from './a.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index d60442df6b..fc061974b1 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import b_ from './b.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index 9205f10228..8081c6462d 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import header_ from './header.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index 888bbccb63..8496e82efe 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import kanban_ from './kanban.vue';
 const meta = {
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index cf24162e05..9785c2144a 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import zen_ from './zen.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index e85f814f26..d83b42bbbb 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity_calendar from './WidgetActivity.calendar.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index 91843a941a..b9bd1feffe 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity_chart from './WidgetActivity.chart.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
index c36fd76714..7570bfa5f0 100644
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetActivity from './WidgetActivity.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
index a10d99f933..c0b22bcebd 100644
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAichan from './WidgetAichan.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
index b9217a5c80..feab02ae0a 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAiscript from './WidgetAiscript.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
index 261b744c4a..66ace4844c 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetAiscriptApp from './WidgetAiscriptApp.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
index 021b212a7e..31f077155e 100644
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetButton from './WidgetButton.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
index 3b66d9c15b..958e0b9489 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetCalendar from './WidgetCalendar.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
index 70f793a21f..c791c3471d 100644
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetClicker from './WidgetClicker.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
index 9cfe80943b..3241fa9fef 100644
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetClock from './WidgetClock.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
index de351f4440..346022d277 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetDigitalClock from './WidgetDigitalClock.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
index 50900465ad..e28da43405 100644
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetFederation from './WidgetFederation.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
index 477a66f461..1e3f33c5f4 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetInstanceCloud from './WidgetInstanceCloud.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
index bccae94dd8..8311f85044 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetInstanceInfo from './WidgetInstanceInfo.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
index 43d7f0198d..2ffe72ddc6 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetJobQueue from './WidgetJobQueue.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
index 75651a52b1..830cae5e49 100644
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetMemo from './WidgetMemo.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
index d6249f4c06..9268308689 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetNotifications from './WidgetNotifications.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
index b7cae9b579..5ba9d806c2 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetOnlineUsers from './WidgetOnlineUsers.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
index 36c9c76d37..9925c229b3 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetPhotos from './WidgetPhotos.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
index a74c59b107..cc1c7e0fb9 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetPostForm from './WidgetPostForm.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
index 97a1c087ee..49a3a24619 100644
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetProfile from './WidgetProfile.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
index 0c1e14a903..3bc462f8c2 100644
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetRss from './WidgetRss.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
index e4e9fce039..3aeada0707 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetRssTicker from './WidgetRssTicker.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
index 6386bf89e4..84b9978cc6 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetSlideshow from './WidgetSlideshow.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
index c7853c58c3..42a73ba949 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetTimeline from './WidgetTimeline.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
index d787fc84ea..8aaa052fad 100644
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetTrends from './WidgetTrends.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
index 2c2511ba9f..3d7e48bad7 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetUnixClock from './WidgetUnixClock.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
index ee3513bed2..c8317b9f5c 100644
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import WidgetUserList from './WidgetUserList.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 0b62d996e1..3ec656e0d5 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import cpu_mem from './cpu-mem.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index 8ac2dbf57d..26409892bb 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import cpu_ from './cpu.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index cbd30d9dad..319628b3bb 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import disk_ from './disk.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index f800b15632..8fcfd051be 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import index_ from './index.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index dd161af66a..75929aae44 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import mem_ from './mem.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index b92f12ccc8..ab74ccdc0e 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import net_ from './net.vue';
 const meta = {
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index 02caa92e7c..510d1be613 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import pie_ from './pie.vue';
 const meta = {

From bf5fff879ff94c6db97fd9e7ec19dc9a9c0028a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Wed, 22 Mar 2023 00:48:11 +0900
Subject: [PATCH 18/99] style: typing

---
 packages/frontend/.storybook/generate.tsx | 609 ++++++++++++++--------
 1 file changed, 402 insertions(+), 207 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 60f7d26d7b..49304602d8 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -32,14 +32,18 @@ const generator = {
 		state.write(' satisfies ', node as unknown as estree.Expression);
 		this[node.reference.type](node.reference, state);
 	},
-}
+};
 
-type SplitCamel<T extends string, YC extends string = '', YN extends readonly string[] = []> = T extends `${infer XH}${infer XR}`
+type SplitCamel<
+	T extends string,
+	YC extends string = '',
+	YN extends readonly string[] = []
+> = T extends `${infer XH}${infer XR}`
 	? XR extends ''
 		? [...YN, Uncapitalize<`${YC}${XH}`>]
 		: XH extends Uppercase<XH>
-			? SplitCamel<XR, Lowercase<XH>, [...YN, YC]>
-			: SplitCamel<XR, `${YC}${XH}`, YN>
+		? SplitCamel<XR, Lowercase<XH>, [...YN, YC]>
+		: SplitCamel<XR, `${YC}${XH}`, YN>
 	: YN;
 
 // @ts-ignore
@@ -47,25 +51,36 @@ type SplitKebab<T extends string> = T extends `${infer XH}-${infer XR}`
 	? [XH, ...SplitKebab<XR>]
 	: [T];
 
-type ToKebab<T extends readonly string[]> = T extends readonly [infer XO extends string]
+type ToKebab<T extends readonly string[]> = T extends readonly [
+	infer XO extends string
+]
 	? XO
-	: T extends readonly [infer XH extends string, ...infer XR extends readonly string[]]
-		? `${XH}${XR extends readonly string[] ? `-${ToKebab<XR>}` : ''}`
-		: '';
+	: T extends readonly [
+			infer XH extends string,
+			...infer XR extends readonly string[]
+	  ]
+	? `${XH}${XR extends readonly string[] ? `-${ToKebab<XR>}` : ''}`
+	: '';
 
 // @ts-ignore
-type ToPascal<T extends readonly string[]> = T extends readonly [infer XH extends string, ...infer XR extends readonly string[]]
+type ToPascal<T extends readonly string[]> = T extends readonly [
+	infer XH extends string,
+	...infer XR extends readonly string[]
+]
 	? `${Capitalize<XH>}${ToPascal<XR>}`
 	: '';
 
-function h<T extends estree.Node>(component: T['type'], props: Omit<T, 'type'>): T {
+function h<T extends estree.Node>(
+	component: T['type'],
+	props: Omit<T, 'type'>
+): T {
 	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
 	return Object.assign(props, { type }) as T;
 }
 
 declare global {
 	namespace JSX {
-		type Element = never;
+		type Element = estree.Node;
 		type ElementClass = never;
 		type ElementAttributesProperty = never;
 		type ElementChildrenAttribute = never;
@@ -73,7 +88,10 @@ declare global {
 		type IntrinsicClassAttributes<T> = never;
 		type IntrinsicElements = {
 			[T in keyof typeof generator as ToKebab<SplitCamel<Uncapitalize<T>>>]: {
-				[K in keyof Omit<Parameters<typeof generator[T]>[0], 'type'>]?: Parameters<typeof generator[T]>[0][K];
+				[K in keyof Omit<
+					Parameters<(typeof generator)[T]>[0],
+					'type'
+				>]?: Parameters<(typeof generator)[T]>[0][K];
 			};
 		};
 	}
@@ -88,217 +106,391 @@ function toStories(component: string): string {
 	const dir = dirname(component);
 	const literal = (
 		<literal value={component.slice('src/'.length, -'.vue'.length)} />
-	) as unknown as estree.Literal;
+	) as estree.Literal;
 	const identifier = (
-		<identifier name={base.slice(0, -'.vue'.length).replace(/[-.]|^(?=\d)/g, '_').replace(/(?<=^[^A-Z_]*$)/, '_')} />
-	) as unknown as estree.Identifier;
+		<identifier
+			name={base
+				.slice(0, -'.vue'.length)
+				.replace(/[-.]|^(?=\d)/g, '_')
+				.replace(/(?<=^[^A-Z_]*$)/, '_')}
+		/>
+	) as estree.Identifier;
 	const parameters = (
 		<object-expression
 			properties={[
-				<property
-					key={<identifier name='layout' />}
-					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'} />}
-					kind={'init' as const}
-				/>,
-				...hasMsw
+				(
+					<property
+						key={(<identifier name='layout' />) as estree.Identifier}
+						value={
+							(
+								<literal
+									value={
+										`${dir}/`.startsWith('src/pages/')
+											? 'fullscreen'
+											: 'centered'
+									}
+								/>
+							) as estree.Literal
+						}
+						kind={'init' as const}
+					/>
+				) as estree.Property,
+				...(hasMsw
 					? [
-							<property
-								key={<identifier name='msw' />}
-								value={<identifier name='msw' />}
-								kind={'init' as const}
-								shorthand
-							/>,
-						]
-					: [],
+							(
+								<property
+									key={(<identifier name='msw' />) as estree.Identifier}
+									value={(<identifier name='msw' />) as estree.Identifier}
+									kind={'init' as const}
+									shorthand
+								/>
+							) as estree.Property,
+					  ]
+					: []),
 			]}
 		/>
-	);
+	) as estree.ObjectExpression;
 	const program = (
 		<program
 			body={[
-				<import-declaration
-					source={<literal value='@storybook/vue3' />}
-					specifiers={[
-						<import-specifier
-							local={<identifier name='Meta' />}
-							imported={<identifier name='Meta' />}
-						/>,
-						...hasImplStories
-							? []
-							: [
-									<import-specifier
-										local={<identifier name='StoryObj' />}
-										imported={<identifier name='StoryObj' />}
-									/>,
-								],
-					]}
-				/>,
-				...hasMsw
+				(
+					<import-declaration
+						source={(<literal value='@storybook/vue3' />) as estree.Literal}
+						specifiers={[
+							(
+								<import-specifier
+									local={(<identifier name='Meta' />) as estree.Identifier}
+									imported={(<identifier name='Meta' />) as estree.Identifier}
+								/>
+							) as estree.ImportSpecifier,
+							...(hasImplStories
+								? []
+								: [
+										(
+											<import-specifier
+												local={
+													(<identifier name='StoryObj' />) as estree.Identifier
+												}
+												imported={
+													(<identifier name='StoryObj' />) as estree.Identifier
+												}
+											/>
+										) as estree.ImportSpecifier,
+								  ]),
+						]}
+					/>
+				) as estree.ImportDeclaration,
+				...(hasMsw
 					? [
-							<import-declaration
-								source={<literal value={`./${basename(msw)}`} />}
-								specifiers={[
-									<import-namespace-specifier
-										local={<identifier name='msw' />}
-									/>,
-								]}
-							/>,
-						]
-					: [],
-				...hasImplStories
+							(
+								<import-declaration
+									source={
+										(<literal value={`./${basename(msw)}`} />) as estree.Literal
+									}
+									specifiers={[
+										(
+											<import-namespace-specifier
+												local={(<identifier name='msw' />) as estree.Identifier}
+											/>
+										) as estree.ImportNamespaceSpecifier,
+									]}
+								/>
+							) as estree.ImportDeclaration,
+					  ]
+					: []),
+				...(hasImplStories
 					? []
 					: [
-							<import-declaration
-								source={<literal value={`./${base}`} />}
-								specifiers={[
-									<import-default-specifier
-										local={identifier}
-									/>,
-								]}
-							/>,
-						],
-				<variable-declaration
-					kind={'const' as const}
-					declarations={[
-						<variable-declarator
-							id={<identifier name='meta' />}
-							init={
-								<satisfies-expression
-									expression={
-										<object-expression
-											properties={[
-												<property
-													key={<identifier name='title' />}
-													value={literal}
-													kind={'init' as const}
-												/>,
-												<property
-													key={<identifier name='component' />}
-													value={identifier}
-													kind={'init' as const}
-												/>,
-											]}
-										/>
-									}
-									reference={<identifier name={`Meta<typeof ${identifier.name}>`} />}
+							(
+								<import-declaration
+									source={(<literal value={`./${base}`} />) as estree.Literal}
+									specifiers={[
+										(
+											<import-default-specifier local={identifier} />
+										) as estree.ImportDefaultSpecifier,
+									]}
 								/>
-							}
-						/>,
-					]}
-				/>,
-				...hasImplStories
-					? [
-						]
-					: [
-							<export-named-declaration
-								declaration={
-									<variable-declaration
-										kind={'const' as const}
-										declarations={[
-											<variable-declarator
-												id={<identifier name='Default' />}
-												init={
-													<satisfies-expression
-														expression={
-															<object-expression
-																properties={[
+							) as estree.ImportDeclaration,
+					  ]),
+				(
+					<variable-declaration
+						kind={'const' as const}
+						declarations={[
+							(
+								<variable-declarator
+									id={(<identifier name='meta' />) as estree.Identifier}
+									init={
+										(
+											<satisfies-expression
+												expression={
+													(
+														<object-expression
+															properties={[
+																(
 																	<property
-																		key={<identifier name='render' />}
-																		value={
-																			<function-expression
-																				params={[
-																					<identifier name='args' />,
-																					<object-pattern
-																						properties={[
-																							<property
-																								key={<identifier name='argTypes' />}
-																								value={<identifier name='argTypes' />}
-																								kind={'init' as const}
-																								shorthand
-																							/>,
-																						]}
-																					/>,
-																				]}
-																				body={
-																					<block-statement
-																						body={[
-																							<return-statement
-																								argument={
-																									<object-expression
-																										properties={[
-																											<property
-																												key={<identifier name='components' />}
-																												value={
-																													<object-expression
-																														properties={[
-																															<property
-																																key={identifier}
-																																value={identifier}
-																																kind={'init' as const}
-																																shorthand
-																															/>,
-																														]}
-																													/>
-																												}
-																												kind={'init' as const}
-																											/>,
-																											<property
-																												key={<identifier name='props' />}
-																												value={
-																													<call-expression
-																														callee={
-																															<member-expression
-																																object={<identifier name='Object' />}
-																																property={<identifier name='keys' />}
-																															/>
-																														}
-																														arguments={[
-																															<identifier name='argTypes' />,
-																														]}
-																													/>
-																												}
-																												kind={'init' as const}
-																											/>,
-																											<property
-																												key={<identifier name='template' />}
-																												value={<literal value={`<${identifier.name} v-bind="$props" />`} />}
-																												kind={'init' as const}
-																											/>,
-																										]}
-																									/>
-																								}
-																							/>,
-																						]}
-																					/>
-																				}
-																			/>
+																		key={
+																			(
+																				<identifier name='title' />
+																			) as estree.Identifier
 																		}
-																		method
+																		value={literal}
 																		kind={'init' as const}
-																	/>,
+																	/>
+																) as estree.Property,
+																(
 																	<property
-																		key={<identifier name='parameters' />}
-																		value={parameters}
+																		key={
+																			(
+																				<identifier name='component' />
+																			) as estree.Identifier
+																		}
+																		value={identifier}
 																		kind={'init' as const}
-																	/>,
-																]}
-															/>
-														}
-														reference={<identifier name={`StoryObj<typeof ${identifier.name}>`} />}
-													/>
+																	/>
+																) as estree.Property,
+															]}
+														/>
+													) as estree.ObjectExpression
 												}
-											/>,
-										]}
-									/>
-								}
-							/>,
-						],
-				<export-default-declaration
-					declaration={<identifier name='meta' />}
-				/>,
+												reference={
+													(
+														<identifier
+															name={`Meta<typeof ${identifier.name}>`}
+														/>
+													) as estree.Identifier
+												}
+											/>
+										) as estree.Expression
+									}
+								/>
+							) as estree.VariableDeclarator,
+						]}
+					/>
+				) as estree.VariableDeclaration,
+				...(hasImplStories
+					? []
+					: [
+							(
+								<export-named-declaration
+									declaration={
+										(
+											<variable-declaration
+												kind={'const' as const}
+												declarations={[
+													(
+														<variable-declarator
+															id={
+																(
+																	<identifier name='Default' />
+																) as estree.Identifier
+															}
+															init={
+																(
+																	<satisfies-expression
+																		expression={
+																			(
+																				<object-expression
+																					properties={[
+																						(
+																							<property
+																								key={
+																									(
+																										<identifier name='render' />
+																									) as estree.Identifier
+																								}
+																								value={
+																									(
+																										<function-expression
+																											params={[
+																												(
+																													<identifier name='args' />
+																												) as estree.Identifier,
+																												(
+																													<object-pattern
+																														properties={[
+																															(
+																																<property
+																																	key={
+																																		(
+																																			<identifier name='argTypes' />
+																																		) as estree.Identifier
+																																	}
+																																	value={
+																																		(
+																																			<identifier name='argTypes' />
+																																		) as estree.Identifier
+																																	}
+																																	kind={
+																																		'init' as const
+																																	}
+																																	shorthand
+																																/>
+																															) as estree.AssignmentProperty,
+																														]}
+																													/>
+																												) as estree.ObjectPattern,
+																											]}
+																											body={
+																												(
+																													<block-statement
+																														body={[
+																															(
+																																<return-statement
+																																	argument={
+																																		(
+																																			<object-expression
+																																				properties={[
+																																					(
+																																						<property
+																																							key={
+																																								(
+																																									<identifier name='components' />
+																																								) as estree.Identifier
+																																							}
+																																							value={
+																																								(
+																																									<object-expression
+																																										properties={[
+																																											(
+																																												<property
+																																													key={
+																																														identifier
+																																													}
+																																													value={
+																																														identifier
+																																													}
+																																													kind={
+																																														'init' as const
+																																													}
+																																													shorthand
+																																												/>
+																																											) as estree.Property,
+																																										]}
+																																									/>
+																																								) as estree.ObjectExpression
+																																							}
+																																							kind={
+																																								'init' as const
+																																							}
+																																						/>
+																																					) as estree.Property,
+																																					(
+																																						<property
+																																							key={
+																																								(
+																																									<identifier name='props' />
+																																								) as estree.Identifier
+																																							}
+																																							value={
+																																								(
+																																									<call-expression
+																																										callee={
+																																											(
+																																												<member-expression
+																																													object={
+																																														(
+																																															<identifier name='Object' />
+																																														) as estree.Identifier
+																																													}
+																																													property={
+																																														(
+																																															<identifier name='keys' />
+																																														) as estree.Identifier
+																																													}
+																																												/>
+																																											) as estree.MemberExpression
+																																										}
+																																										arguments={[
+																																											(
+																																												<identifier name='argTypes' />
+																																											) as estree.Identifier,
+																																										]}
+																																									/>
+																																								) as estree.CallExpression
+																																							}
+																																							kind={
+																																								'init' as const
+																																							}
+																																						/>
+																																					) as estree.Property,
+																																					(
+																																						<property
+																																							key={
+																																								(
+																																									<identifier name='template' />
+																																								) as estree.Identifier
+																																							}
+																																							value={
+																																								(
+																																									<literal
+																																										value={`<${identifier.name} v-bind="$props" />`}
+																																									/>
+																																								) as estree.Literal
+																																							}
+																																							kind={
+																																								'init' as const
+																																							}
+																																						/>
+																																					) as estree.Property,
+																																				]}
+																																			/>
+																																		) as estree.ObjectExpression
+																																	}
+																																/>
+																															) as estree.ReturnStatement,
+																														]}
+																													/>
+																												) as estree.BlockStatement
+																											}
+																										/>
+																									) as estree.FunctionExpression
+																								}
+																								method
+																								kind={'init' as const}
+																							/>
+																						) as estree.Property,
+																						(
+																							<property
+																								key={
+																									(
+																										<identifier name='parameters' />
+																									) as estree.Identifier
+																								}
+																								value={parameters}
+																								kind={'init' as const}
+																							/>
+																						) as estree.Property,
+																					]}
+																				/>
+																			) as estree.ObjectExpression
+																		}
+																		reference={
+																			(
+																				<identifier
+																					name={`StoryObj<typeof ${identifier.name}>`}
+																				/>
+																			) as estree.Identifier
+																		}
+																	/>
+																) as estree.Expression
+															}
+														/>
+													) as estree.VariableDeclarator,
+												]}
+											/>
+										) as estree.VariableDeclaration
+									}
+								/>
+							) as estree.ExportNamedDeclaration,
+					  ]),
+				(
+					<export-default-declaration
+						declaration={(<identifier name='meta' />) as estree.Identifier}
+					/>
+				) as estree.ExportDefaultDeclaration,
 			]}
 		/>
-	) as unknown as estree.Program;
+	) as estree.Program;
 	return format(
 		'/* eslint-disable @typescript-eslint/explicit-function-return-type */\n' +
 			'/* eslint-disable import/no-default-export */\n' +
@@ -312,9 +504,12 @@ function toStories(component: string): string {
 	);
 }
 
-promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then((components) => Promise.all(
-	components.map((component) => {
-		const stories = component.replace(/\.vue$/, '.stories.ts');
-		return writeFile(stories, toStories(component));
-	})
-));
+promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
+	(components) =>
+		Promise.all(
+			components.map((component) => {
+				const stories = component.replace(/\.vue$/, '.stories.ts');
+				return writeFile(stories, toStories(component));
+			})
+		)
+);

From c2d8759812cf313e92fc96372f2e1b821ad0840a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Thu, 23 Mar 2023 16:44:41 +0900
Subject: [PATCH 19/99] build(#10336): update dependencies

---
 packages/frontend/.storybook/generate.tsx     |  146 +-
 packages/frontend/.storybook/main.ts          |    6 +
 packages/frontend/.storybook/preview.ts       |   21 +-
 packages/frontend/package.json                |   29 +-
 .../src/components/MkAbuseReport.stories.ts   |   17 +-
 .../components/MkAbuseReportWindow.stories.ts |   17 +-
 .../src/components/MkAchievements.stories.ts  |   17 +-
 .../frontend/src/components/MkAsUi.stories.ts |   17 +-
 .../src/components/MkAutocomplete.stories.ts  |   17 +-
 .../src/components/MkAvatars.stories.ts       |   17 +-
 .../src/components/MkButton.stories.impl.ts   |   20 +-
 .../src/components/MkButton.stories.ts        |   20 +-
 .../src/components/MkCaptcha.stories.ts       |   17 +-
 .../MkChannelFollowButton.stories.ts          |   17 +-
 .../components/MkChannelPreview.stories.ts    |   17 +-
 .../src/components/MkChart.stories.ts         |   17 +-
 .../src/components/MkChartLegend.stories.ts   |   17 +-
 .../src/components/MkChartTooltip.stories.ts  |   17 +-
 .../src/components/MkCheckbox.stories.ts      |   17 +-
 .../src/components/MkClickerGame.stories.ts   |   17 +-
 .../src/components/MkClipPreview.stories.ts   |   17 +-
 .../src/components/MkCode.core.stories.ts     |   17 +-
 .../frontend/src/components/MkCode.stories.ts |   17 +-
 .../src/components/MkContainer.stories.ts     |   17 +-
 .../src/components/MkContextMenu.stories.ts   |   17 +-
 .../src/components/MkCropperDialog.stories.ts |   17 +-
 .../src/components/MkCwButton.stories.ts      |   17 +-
 .../components/MkDateSeparatedList.stories.ts |   17 +-
 .../src/components/MkDialog.stories.ts        |   17 +-
 .../src/components/MkDigitalClock.stories.ts  |   17 +-
 .../src/components/MkDonation.stories.ts      |   17 +-
 .../src/components/MkDrive.file.stories.ts    |   17 +-
 .../src/components/MkDrive.folder.stories.ts  |   17 +-
 .../components/MkDrive.navFolder.stories.ts   |   17 +-
 .../src/components/MkDrive.stories.ts         |   17 +-
 .../MkDriveFileThumbnail.stories.ts           |   17 +-
 .../components/MkDriveSelectDialog.stories.ts |   17 +-
 .../src/components/MkDriveWindow.stories.ts   |   17 +-
 .../MkEmojiPicker.section.stories.ts          |   17 +-
 .../src/components/MkEmojiPicker.stories.ts   |   17 +-
 .../components/MkEmojiPickerDialog.stories.ts |   17 +-
 .../components/MkEmojiPickerWindow.stories.ts |   17 +-
 .../components/MkFeaturedPhotos.stories.ts    |   17 +-
 .../MkFileCaptionEditWindow.stories.ts        |   17 +-
 .../components/MkFileListForAdmin.stories.ts  |   17 +-
 .../src/components/MkFlashPreview.stories.ts  |   17 +-
 .../components/MkFoldableSection.stories.ts   |   17 +-
 .../src/components/MkFolder.stories.ts        |   17 +-
 .../src/components/MkFollowButton.stories.ts  |   17 +-
 .../components/MkForgotPassword.stories.ts    |   17 +-
 .../src/components/MkFormDialog.stories.ts    |   17 +-
 .../MkGalleryPostPreview.stories.ts           |   17 +-
 .../src/components/MkGoogle.stories.ts        |   17 +-
 .../src/components/MkHeatmap.stories.ts       |   17 +-
 .../src/components/MkImageViewer.stories.ts   |   17 +-
 .../components/MkImgWithBlurhash.stories.ts   |   17 +-
 .../frontend/src/components/MkInfo.stories.ts |   17 +-
 .../src/components/MkInput.stories.ts         |   17 +-
 .../components/MkInstanceCardMini.stories.ts  |   17 +-
 .../src/components/MkInstanceStats.stories.ts |   17 +-
 .../components/MkInstanceTicker.stories.ts    |   17 +-
 .../src/components/MkKeyValue.stories.ts      |   17 +-
 .../src/components/MkLaunchPad.stories.ts     |   17 +-
 .../frontend/src/components/MkLink.stories.ts |   17 +-
 .../src/components/MkMarquee.stories.ts       |   17 +-
 .../src/components/MkMediaBanner.stories.ts   |   17 +-
 .../src/components/MkMediaImage.stories.ts    |   17 +-
 .../src/components/MkMediaList.stories.ts     |   17 +-
 .../src/components/MkMediaVideo.stories.ts    |   17 +-
 .../src/components/MkMention.stories.ts       |   17 +-
 .../src/components/MkMenu.child.stories.ts    |   17 +-
 .../frontend/src/components/MkMenu.stories.ts |   17 +-
 .../src/components/MkMiniChart.stories.ts     |   17 +-
 .../src/components/MkModal.stories.ts         |   17 +-
 .../components/MkModalPageWindow.stories.ts   |   17 +-
 .../src/components/MkModalWindow.stories.ts   |   17 +-
 .../frontend/src/components/MkNote.stories.ts |   17 +-
 .../src/components/MkNoteDetailed.stories.ts  |   17 +-
 .../src/components/MkNoteHeader.stories.ts    |   17 +-
 .../src/components/MkNotePreview.stories.ts   |   17 +-
 .../src/components/MkNoteSimple.stories.ts    |   17 +-
 .../src/components/MkNoteSub.stories.ts       |   17 +-
 .../src/components/MkNotes.stories.ts         |   17 +-
 .../src/components/MkNotification.stories.ts  |   17 +-
 .../MkNotificationSettingWindow.stories.ts    |   17 +-
 .../src/components/MkNotifications.stories.ts |   17 +-
 .../src/components/MkNumber.stories.ts        |   17 +-
 .../src/components/MkNumberDiff.stories.ts    |   17 +-
 .../src/components/MkObjectView.stories.ts    |   17 +-
 .../components/MkObjectView.value.stories.ts  |   17 +-
 .../frontend/src/components/MkOmit.stories.ts |   17 +-
 .../src/components/MkPagePreview.stories.ts   |   17 +-
 .../src/components/MkPageWindow.stories.ts    |   17 +-
 .../src/components/MkPagination.stories.ts    |   17 +-
 .../src/components/MkPlusOneEffect.stories.ts |   17 +-
 .../frontend/src/components/MkPoll.stories.ts |   17 +-
 .../src/components/MkPollEditor.stories.ts    |   17 +-
 .../src/components/MkPopupMenu.stories.ts     |   17 +-
 .../src/components/MkPostForm.stories.ts      |   17 +-
 .../components/MkPostFormAttaches.stories.ts  |   17 +-
 .../components/MkPostFormDialog.stories.ts    |   17 +-
 .../MkPushNotificationAllowButton.stories.ts  |   17 +-
 .../src/components/MkRadio.stories.ts         |   17 +-
 .../src/components/MkRadios.stories.ts        |   17 +-
 .../src/components/MkRange.stories.ts         |   17 +-
 .../MkReactedUsersDialog.stories.ts           |   17 +-
 .../components/MkReactionEffect.stories.ts    |   17 +-
 .../src/components/MkReactionIcon.stories.ts  |   17 +-
 .../components/MkReactionTooltip.stories.ts   |   17 +-
 .../MkReactionsViewer.details.stories.ts      |   17 +-
 .../MkReactionsViewer.reaction.stories.ts     |   17 +-
 .../components/MkReactionsViewer.stories.ts   |   17 +-
 .../src/components/MkRemoteCaution.stories.ts |   17 +-
 .../components/MkRetentionHeatmap.stories.ts  |   17 +-
 .../src/components/MkRippleEffect.stories.ts  |   17 +-
 .../src/components/MkRolePreview.stories.ts   |   17 +-
 .../src/components/MkSample.stories.ts        |   17 +-
 .../src/components/MkSelect.stories.ts        |   17 +-
 .../src/components/MkSignin.stories.ts        |   17 +-
 .../src/components/MkSigninDialog.stories.ts  |   17 +-
 .../src/components/MkSignup.stories.ts        |   17 +-
 .../src/components/MkSignupDialog.stories.ts  |   17 +-
 .../src/components/MkSparkle.stories.ts       |   17 +-
 .../components/MkSubNoteContent.stories.ts    |   17 +-
 .../src/components/MkSuperMenu.stories.ts     |   17 +-
 .../src/components/MkSwitch.stories.ts        |   17 +-
 .../frontend/src/components/MkTab.stories.ts  |   17 +-
 .../src/components/MkTagCloud.stories.ts      |   17 +-
 .../src/components/MkTextarea.stories.ts      |   17 +-
 .../src/components/MkTimeline.stories.ts      |   17 +-
 .../src/components/MkToast.stories.ts         |   17 +-
 .../MkTokenGenerateWindow.stories.ts          |   17 +-
 .../src/components/MkTooltip.stories.ts       |   17 +-
 .../src/components/MkUpdated.stories.ts       |   17 +-
 .../src/components/MkUrlPreview.stories.ts    |   17 +-
 .../components/MkUrlPreviewPopup.stories.ts   |   17 +-
 .../src/components/MkUserCardMini.stories.ts  |   17 +-
 .../src/components/MkUserInfo.stories.ts      |   17 +-
 .../src/components/MkUserList.stories.ts      |   17 +-
 .../MkUserOnlineIndicator.stories.ts          |   17 +-
 .../src/components/MkUserPopup.stories.ts     |   17 +-
 .../components/MkUserSelectDialog.stories.ts  |   17 +-
 .../src/components/MkUsersTooltip.stories.ts  |   17 +-
 .../components/MkVisibilityPicker.stories.ts  |   17 +-
 .../src/components/MkWaitingDialog.stories.ts |   17 +-
 .../src/components/MkWidgets.stories.ts       |   17 +-
 .../src/components/MkWindow.stories.ts        |   17 +-
 .../src/components/MkYouTubePlayer.stories.ts |   17 +-
 .../src/components/form/link.stories.ts       |   17 +-
 .../src/components/form/section.stories.ts    |   17 +-
 .../src/components/form/slot.stories.ts       |   17 +-
 .../src/components/form/split.stories.ts      |   17 +-
 .../src/components/form/suspense.stories.ts   |   17 +-
 .../src/components/global/MkA.stories.ts      |   17 +-
 .../src/components/global/MkAcct.stories.ts   |   17 +-
 .../src/components/global/MkAd.stories.ts     |   17 +-
 .../global/MkAvatar.stories.impl.ts           |   64 +
 .../src/components/global/MkAvatar.stories.ts |   69 +-
 .../global/MkCustomEmoji.stories.ts           |   17 +-
 .../components/global/MkEllipsis.stories.ts   |   17 +-
 .../src/components/global/MkEmoji.stories.ts  |   17 +-
 .../src/components/global/MkError.stories.ts  |   17 +-
 .../components/global/MkLoading.stories.ts    |   17 +-
 .../MkMisskeyFlavoredMarkdown.stories.ts      |   17 +-
 .../components/global/MkPageHeader.stories.ts |   17 +-
 .../global/MkPageHeader.tabs.stories.ts       |   17 +-
 .../src/components/global/MkSpacer.stories.ts |   17 +-
 .../global/MkStickyContainer.stories.ts       |   17 +-
 .../src/components/global/MkTime.stories.ts   |   17 +-
 .../src/components/global/MkUrl.stories.ts    |   17 +-
 .../components/global/MkUserName.stories.ts   |   17 +-
 .../components/global/RouterView.stories.ts   |   17 +-
 .../src/components/page/page.block.stories.ts |   17 +-
 .../components/page/page.button.stories.ts    |   17 +-
 .../components/page/page.canvas.stories.ts    |   17 +-
 .../components/page/page.counter.stories.ts   |   17 +-
 .../src/components/page/page.if.stories.ts    |   17 +-
 .../src/components/page/page.image.stories.ts |   17 +-
 .../src/components/page/page.note.stories.ts  |   17 +-
 .../page/page.number-input.stories.ts         |   17 +-
 .../src/components/page/page.post.stories.ts  |   17 +-
 .../page/page.radio-button.stories.ts         |   17 +-
 .../components/page/page.section.stories.ts   |   17 +-
 .../src/components/page/page.stories.ts       |   17 +-
 .../components/page/page.switch.stories.ts    |   17 +-
 .../page/page.text-input.stories.ts           |   17 +-
 .../src/components/page/page.text.stories.ts  |   17 +-
 .../page/page.textarea-input.stories.ts       |   17 +-
 .../components/page/page.textarea.stories.ts  |   17 +-
 .../frontend/src/pages/_empty_.stories.ts     |   17 +-
 .../frontend/src/pages/_error_.stories.ts     |   17 +-
 .../frontend/src/pages/_loading_.stories.ts   |   17 +-
 .../src/pages/about-misskey.stories.ts        |   17 +-
 .../src/pages/about.emojis.stories.ts         |   17 +-
 .../src/pages/about.federation.stories.ts     |   17 +-
 packages/frontend/src/pages/about.stories.ts  |   17 +-
 .../src/pages/achievements.stories.ts         |   17 +-
 .../frontend/src/pages/admin-file.stories.ts  |   17 +-
 .../pages/admin/RolesEditorFormula.stories.ts |   17 +-
 .../src/pages/admin/_header_.stories.ts       |   17 +-
 .../src/pages/admin/abuses.stories.ts         |   17 +-
 .../frontend/src/pages/admin/ads.stories.ts   |   17 +-
 .../src/pages/admin/announcements.stories.ts  |   17 +-
 .../src/pages/admin/bot-protection.stories.ts |   17 +-
 .../src/pages/admin/database.stories.ts       |   17 +-
 .../src/pages/admin/email-settings.stories.ts |   17 +-
 .../src/pages/admin/federation.stories.ts     |   17 +-
 .../frontend/src/pages/admin/files.stories.ts |   17 +-
 .../frontend/src/pages/admin/index.stories.ts |   17 +-
 .../src/pages/admin/instance-block.stories.ts |   17 +-
 .../src/pages/admin/moderation.stories.ts     |   17 +-
 .../src/pages/admin/object-storage.stories.ts |   17 +-
 .../src/pages/admin/other-settings.stories.ts |   17 +-
 .../admin/overview.active-users.stories.ts    |   17 +-
 .../admin/overview.ap-requests.stories.ts     |   17 +-
 .../admin/overview.federation.stories.ts      |   17 +-
 .../pages/admin/overview.heatmap.stories.ts   |   17 +-
 .../pages/admin/overview.instances.stories.ts |   17 +-
 .../admin/overview.moderators.stories.ts      |   17 +-
 .../src/pages/admin/overview.pie.stories.ts   |   17 +-
 .../admin/overview.queue.chart.stories.ts     |   17 +-
 .../src/pages/admin/overview.queue.stories.ts |   17 +-
 .../pages/admin/overview.retention.stories.ts |   17 +-
 .../src/pages/admin/overview.stats.stories.ts |   17 +-
 .../src/pages/admin/overview.stories.ts       |   17 +-
 .../src/pages/admin/overview.users.stories.ts |   17 +-
 .../src/pages/admin/proxy-account.stories.ts  |   17 +-
 .../pages/admin/queue.chart.chart.stories.ts  |   17 +-
 .../src/pages/admin/queue.chart.stories.ts    |   17 +-
 .../frontend/src/pages/admin/queue.stories.ts |   17 +-
 .../src/pages/admin/relays.stories.ts         |   17 +-
 .../src/pages/admin/roles.edit.stories.ts     |   17 +-
 .../src/pages/admin/roles.editor.stories.ts   |   17 +-
 .../src/pages/admin/roles.role.stories.ts     |   17 +-
 .../frontend/src/pages/admin/roles.stories.ts |   17 +-
 .../src/pages/admin/security.stories.ts       |   17 +-
 .../src/pages/admin/settings.stories.ts       |   17 +-
 .../frontend/src/pages/admin/users.stories.ts |   17 +-
 packages/frontend/src/pages/ads.stories.ts    |   17 +-
 .../src/pages/announcements.stories.ts        |   17 +-
 .../src/pages/antenna-timeline.stories.ts     |   17 +-
 .../frontend/src/pages/api-console.stories.ts |   17 +-
 .../frontend/src/pages/auth.form.stories.ts   |   17 +-
 packages/frontend/src/pages/auth.stories.ts   |   17 +-
 .../src/pages/channel-editor.stories.ts       |   17 +-
 .../frontend/src/pages/channel.stories.ts     |   17 +-
 .../frontend/src/pages/channels.stories.ts    |   17 +-
 .../frontend/src/pages/clicker.stories.ts     |   17 +-
 packages/frontend/src/pages/clip.stories.ts   |   17 +-
 .../pages/custom-emojis-manager.stories.ts    |   17 +-
 packages/frontend/src/pages/drive.stories.ts  |   17 +-
 .../src/pages/emoji-edit-dialog.stories.ts    |   17 +-
 .../src/pages/emojis.emoji.stories.ts         |   17 +-
 .../src/pages/explore.featured.stories.ts     |   17 +-
 .../src/pages/explore.roles.stories.ts        |   17 +-
 .../frontend/src/pages/explore.stories.ts     |   17 +-
 .../src/pages/explore.users.stories.ts        |   17 +-
 .../frontend/src/pages/favorites.stories.ts   |   17 +-
 .../src/pages/flash/flash-edit.stories.ts     |   17 +-
 .../src/pages/flash/flash-index.stories.ts    |   17 +-
 .../frontend/src/pages/flash/flash.stories.ts |   17 +-
 .../src/pages/follow-requests.stories.ts      |   17 +-
 packages/frontend/src/pages/follow.stories.ts |   17 +-
 .../src/pages/gallery/edit.stories.ts         |   17 +-
 .../src/pages/gallery/index.stories.ts        |   17 +-
 .../src/pages/gallery/post.stories.ts         |   17 +-
 .../src/pages/instance-info.stories.ts        |   17 +-
 packages/frontend/src/pages/miauth.stories.ts |   17 +-
 .../src/pages/my-antennas/create.stories.ts   |   17 +-
 .../src/pages/my-antennas/edit.stories.ts     |   17 +-
 .../src/pages/my-antennas/editor.stories.ts   |   17 +-
 .../src/pages/my-antennas/index.stories.ts    |   17 +-
 .../src/pages/my-clips/index.stories.ts       |   17 +-
 .../src/pages/my-lists/index.stories.ts       |   17 +-
 .../src/pages/my-lists/list.stories.ts        |   17 +-
 .../frontend/src/pages/not-found.stories.ts   |   17 +-
 packages/frontend/src/pages/note.stories.ts   |   17 +-
 .../src/pages/notifications.stories.ts        |   17 +-
 .../els/page-editor.el.image.stories.ts       |   17 +-
 .../els/page-editor.el.note.stories.ts        |   17 +-
 .../els/page-editor.el.section.stories.ts     |   17 +-
 .../els/page-editor.el.text.stories.ts        |   17 +-
 .../page-editor/page-editor.blocks.stories.ts |   17 +-
 .../page-editor.container.stories.ts          |   17 +-
 .../pages/page-editor/page-editor.stories.ts  |   17 +-
 packages/frontend/src/pages/page.stories.ts   |   17 +-
 packages/frontend/src/pages/pages.stories.ts  |   17 +-
 .../frontend/src/pages/preview.stories.ts     |   17 +-
 .../src/pages/registry.keys.stories.ts        |   17 +-
 .../frontend/src/pages/registry.stories.ts    |   17 +-
 .../src/pages/registry.value.stories.ts       |   17 +-
 .../src/pages/reset-password.stories.ts       |   17 +-
 packages/frontend/src/pages/role.stories.ts   |   17 +-
 .../frontend/src/pages/scratchpad.stories.ts  |   17 +-
 packages/frontend/src/pages/search.stories.ts |   17 +-
 .../pages/settings/2fa.qrdialog.stories.ts    |   17 +-
 .../src/pages/settings/2fa.stories.ts         |   17 +-
 .../pages/settings/account-info.stories.ts    |   17 +-
 .../src/pages/settings/accounts.stories.ts    |   17 +-
 .../src/pages/settings/api.stories.ts         |   17 +-
 .../src/pages/settings/apps.stories.ts        |   17 +-
 .../src/pages/settings/custom-css.stories.ts  |   17 +-
 .../src/pages/settings/deck.stories.ts        |   17 +-
 .../pages/settings/delete-account.stories.ts  |   17 +-
 .../src/pages/settings/drive.stories.ts       |   17 +-
 .../src/pages/settings/email.stories.ts       |   17 +-
 .../src/pages/settings/general.stories.ts     |   17 +-
 .../pages/settings/import-export.stories.ts   |   17 +-
 .../src/pages/settings/index.stories.ts       |   17 +-
 .../pages/settings/instance-mute.stories.ts   |   17 +-
 .../src/pages/settings/mute-block.stories.ts  |   17 +-
 .../src/pages/settings/navbar.stories.ts      |   17 +-
 .../pages/settings/notifications.stories.ts   |   17 +-
 .../src/pages/settings/other.stories.ts       |   17 +-
 .../pages/settings/plugin.install.stories.ts  |   17 +-
 .../src/pages/settings/plugin.stories.ts      |   17 +-
 .../settings/preferences-backups.stories.ts   |   17 +-
 .../src/pages/settings/privacy.stories.ts     |   17 +-
 .../src/pages/settings/profile.stories.ts     |   17 +-
 .../src/pages/settings/reaction.stories.ts    |   17 +-
 .../src/pages/settings/roles.stories.ts       |   17 +-
 .../src/pages/settings/security.stories.ts    |   17 +-
 .../pages/settings/sounds.sound.stories.ts    |   17 +-
 .../src/pages/settings/sounds.stories.ts      |   17 +-
 .../settings/statusbar.statusbar.stories.ts   |   17 +-
 .../src/pages/settings/statusbar.stories.ts   |   17 +-
 .../pages/settings/theme.install.stories.ts   |   17 +-
 .../pages/settings/theme.manage.stories.ts    |   17 +-
 .../src/pages/settings/theme.stories.ts       |   17 +-
 .../pages/settings/webhook.edit.stories.ts    |   17 +-
 .../src/pages/settings/webhook.new.stories.ts |   17 +-
 .../src/pages/settings/webhook.stories.ts     |   17 +-
 .../src/pages/settings/word-mute.stories.ts   |   17 +-
 packages/frontend/src/pages/share.stories.ts  |   17 +-
 .../src/pages/signup-complete.stories.ts      |   17 +-
 packages/frontend/src/pages/tag.stories.ts    |   17 +-
 .../src/pages/theme-editor.stories.ts         |   17 +-
 .../frontend/src/pages/timeline.stories.ts    |   17 +-
 .../src/pages/timeline.tutorial.stories.ts    |   17 +-
 .../frontend/src/pages/user-info.stories.ts   |   17 +-
 .../src/pages/user-list-timeline.stories.ts   |   17 +-
 .../frontend/src/pages/user-tag.stories.ts    |   17 +-
 .../src/pages/user/achievements.stories.ts    |   17 +-
 .../pages/user/activity.following.stories.ts  |   17 +-
 .../pages/user/activity.heatmap.stories.ts    |   17 +-
 .../src/pages/user/activity.notes.stories.ts  |   17 +-
 .../src/pages/user/activity.pv.stories.ts     |   17 +-
 .../src/pages/user/activity.stories.ts        |   17 +-
 .../frontend/src/pages/user/clips.stories.ts  |   17 +-
 .../src/pages/user/follow-list.stories.ts     |   17 +-
 .../src/pages/user/followers.stories.ts       |   17 +-
 .../src/pages/user/following.stories.ts       |   17 +-
 .../src/pages/user/gallery.stories.ts         |   17 +-
 .../frontend/src/pages/user/home.stories.ts   |   17 +-
 .../src/pages/user/index.activity.stories.ts  |   17 +-
 .../src/pages/user/index.photos.stories.ts    |   17 +-
 .../frontend/src/pages/user/index.stories.ts  |   17 +-
 .../src/pages/user/index.timeline.stories.ts  |   17 +-
 .../frontend/src/pages/user/pages.stories.ts  |   17 +-
 .../src/pages/user/reactions.stories.ts       |   17 +-
 .../src/pages/welcome.entrance.a.stories.ts   |   17 +-
 .../src/pages/welcome.entrance.b.stories.ts   |   17 +-
 .../src/pages/welcome.entrance.c.stories.ts   |   17 +-
 .../src/pages/welcome.setup.stories.ts        |   17 +-
 .../frontend/src/pages/welcome.stories.ts     |   17 +-
 .../src/pages/welcome.timeline.stories.ts     |   17 +-
 .../src/ui/_common_/common.stories.ts         |   17 +-
 .../ui/_common_/navbar-for-mobile.stories.ts  |   17 +-
 .../src/ui/_common_/navbar.stories.ts         |   17 +-
 .../src/ui/_common_/notification.stories.ts   |   17 +-
 .../_common_/statusbar-federation.stories.ts  |   17 +-
 .../src/ui/_common_/statusbar-rss.stories.ts  |   17 +-
 .../_common_/statusbar-user-list.stories.ts   |   17 +-
 .../src/ui/_common_/statusbars.stories.ts     |   17 +-
 .../ui/_common_/stream-indicator.stories.ts   |   17 +-
 .../src/ui/_common_/upload.stories.ts         |   17 +-
 .../frontend/src/ui/classic.header.stories.ts |   17 +-
 .../src/ui/classic.sidebar.stories.ts         |   17 +-
 packages/frontend/src/ui/classic.stories.ts   |   17 +-
 packages/frontend/src/ui/deck.stories.ts      |   17 +-
 .../src/ui/deck/antenna-column.stories.ts     |   17 +-
 .../src/ui/deck/channel-column.stories.ts     |   17 +-
 .../src/ui/deck/column-core.stories.ts        |   17 +-
 .../frontend/src/ui/deck/column.stories.ts    |   17 +-
 .../src/ui/deck/direct-column.stories.ts      |   17 +-
 .../src/ui/deck/list-column.stories.ts        |   17 +-
 .../src/ui/deck/main-column.stories.ts        |   17 +-
 .../src/ui/deck/mentions-column.stories.ts    |   17 +-
 .../ui/deck/notifications-column.stories.ts   |   17 +-
 .../frontend/src/ui/deck/tl-column.stories.ts |   17 +-
 .../src/ui/deck/widgets-column.stories.ts     |   17 +-
 packages/frontend/src/ui/universal.stories.ts |   17 +-
 .../src/ui/universal.widgets.stories.ts       |   17 +-
 packages/frontend/src/ui/visitor.stories.ts   |   17 +-
 packages/frontend/src/ui/visitor/a.stories.ts |   17 +-
 packages/frontend/src/ui/visitor/b.stories.ts |   17 +-
 .../frontend/src/ui/visitor/header.stories.ts |   17 +-
 .../frontend/src/ui/visitor/kanban.stories.ts |   17 +-
 packages/frontend/src/ui/zen.stories.ts       |   17 +-
 .../WidgetActivity.calendar.stories.ts        |   17 +-
 .../widgets/WidgetActivity.chart.stories.ts   |   17 +-
 .../src/widgets/WidgetActivity.stories.ts     |   17 +-
 .../src/widgets/WidgetAichan.stories.ts       |   17 +-
 .../src/widgets/WidgetAiscript.stories.ts     |   17 +-
 .../src/widgets/WidgetAiscriptApp.stories.ts  |   17 +-
 .../src/widgets/WidgetButton.stories.ts       |   17 +-
 .../src/widgets/WidgetCalendar.stories.ts     |   17 +-
 .../src/widgets/WidgetClicker.stories.ts      |   17 +-
 .../src/widgets/WidgetClock.stories.ts        |   17 +-
 .../src/widgets/WidgetDigitalClock.stories.ts |   17 +-
 .../src/widgets/WidgetFederation.stories.ts   |   17 +-
 .../widgets/WidgetInstanceCloud.stories.ts    |   17 +-
 .../src/widgets/WidgetInstanceInfo.stories.ts |   17 +-
 .../src/widgets/WidgetJobQueue.stories.ts     |   17 +-
 .../src/widgets/WidgetMemo.stories.ts         |   17 +-
 .../widgets/WidgetNotifications.stories.ts    |   17 +-
 .../src/widgets/WidgetOnlineUsers.stories.ts  |   17 +-
 .../src/widgets/WidgetPhotos.stories.ts       |   17 +-
 .../src/widgets/WidgetPostForm.stories.ts     |   17 +-
 .../src/widgets/WidgetProfile.stories.ts      |   17 +-
 .../frontend/src/widgets/WidgetRss.stories.ts |   17 +-
 .../src/widgets/WidgetRssTicker.stories.ts    |   17 +-
 .../src/widgets/WidgetSlideshow.stories.ts    |   17 +-
 .../src/widgets/WidgetTimeline.stories.ts     |   17 +-
 .../src/widgets/WidgetTrends.stories.ts       |   17 +-
 .../src/widgets/WidgetUnixClock.stories.ts    |   17 +-
 .../src/widgets/WidgetUserList.stories.ts     |   17 +-
 .../widgets/server-metric/cpu-mem.stories.ts  |   17 +-
 .../src/widgets/server-metric/cpu.stories.ts  |   17 +-
 .../src/widgets/server-metric/disk.stories.ts |   17 +-
 .../widgets/server-metric/index.stories.ts    |   17 +-
 .../src/widgets/server-metric/mem.stories.ts  |   17 +-
 .../src/widgets/server-metric/net.stories.ts  |   17 +-
 .../src/widgets/server-metric/pie.stories.ts  |   17 +-
 pnpm-lock.yaml                                | 2230 +++++------------
 435 files changed, 6894 insertions(+), 2953 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkAvatar.stories.impl.ts

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 49304602d8..b167f232e3 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -305,30 +305,6 @@ function toStories(component: string): string {
 																												(
 																													<identifier name='args' />
 																												) as estree.Identifier,
-																												(
-																													<object-pattern
-																														properties={[
-																															(
-																																<property
-																																	key={
-																																		(
-																																			<identifier name='argTypes' />
-																																		) as estree.Identifier
-																																	}
-																																	value={
-																																		(
-																																			<identifier name='argTypes' />
-																																		) as estree.Identifier
-																																	}
-																																	kind={
-																																		'init' as const
-																																	}
-																																	shorthand
-																																/>
-																															) as estree.AssignmentProperty,
-																														]}
-																													/>
-																												) as estree.ObjectPattern,
 																											]}
 																											body={
 																												(
@@ -378,35 +354,123 @@ function toStories(component: string): string {
 																																						<property
 																																							key={
 																																								(
-																																									<identifier name='props' />
+																																									<identifier name='setup' />
 																																								) as estree.Identifier
 																																							}
 																																							value={
 																																								(
-																																									<call-expression
-																																										callee={
+																																									<function-expression
+																																										params={[]}
+																																										body={
 																																											(
-																																												<member-expression
-																																													object={
+																																												<block-statement
+																																													body={[
 																																														(
-																																															<identifier name='Object' />
+																																															<return-statement
+																																																argument={
+																																																	(
+																																																		<object-expression
+																																																			properties={[
+																																																				(
+																																																					<property
+																																																						key={
+																																																							(
+																																																								<identifier name='args' />
+																																																							) as estree.Identifier
+																																																						}
+																																																						value={
+																																																							(
+																																																								<identifier name='args' />
+																																																							) as estree.Identifier
+																																																						}
+																																																						kind={
+																																																							'init' as const
+																																																						}
+																																																						shorthand
+																																																					/>
+																																																				) as estree.Property,
+																																																			]}
+																																																		/>
+																																																	) as estree.ObjectExpression
+																																																}
+																																															/>
+																																														) as estree.ReturnStatement,
+																																													]}
+																																												/>
+																																											) as estree.BlockStatement
+																																										}
+																																									/>
+																																								) as estree.FunctionExpression
+																																							}
+																																							method
+																																							kind={
+																																								'init' as const
+																																							}
+																																						/>
+																																					) as estree.Property,
+																																					(
+																																						<property
+																																							key={
+																																								(
+																																									<identifier name='computed' />
+																																								) as estree.Identifier
+																																							}
+																																							value={
+																																								(
+																																									<object-expression
+																																										properties={[
+																																											(
+																																												<property
+																																													key={
+																																														(
+																																															<identifier name='props' />
 																																														) as estree.Identifier
 																																													}
-																																													property={
+																																													value={
 																																														(
-																																															<identifier name='keys' />
-																																														) as estree.Identifier
+																																															<function-expression
+																																																params={[]}
+																																																body={
+																																																	(
+																																																		<block-statement
+																																																			body={[
+																																																				(
+																																																					<return-statement
+																																																						argument={
+																																																							(
+																																																								<object-expression
+																																																									properties={[
+																																																										(
+																																																											<spread-element
+																																																												argument={
+																																																													(
+																																																														<identifier name='args' />
+																																																													) as estree.Identifier
+																																																												}
+																																																											/>
+																																																										) as estree.SpreadElement,
+																																																									]}
+																																																								/>
+																																																							) as estree.ObjectExpression
+																																																						}
+																																																					/>
+																																																				) as estree.ReturnStatement,
+																																																			]}
+																																																		/>
+																																																	) as estree.BlockStatement
+																																																}
+																																															/>
+																																														) as estree.FunctionExpression
+																																													}
+																																													method
+																																													kind={
+																																														'init' as const
 																																													}
 																																												/>
-																																											) as estree.MemberExpression
-																																										}
-																																										arguments={[
-																																											(
-																																												<identifier name='argTypes' />
-																																											) as estree.Identifier,
+																																											) as estree.Property,
 																																										]}
 																																									/>
-																																								) as estree.CallExpression
+																																								) as estree.ObjectExpression
 																																							}
 																																							kind={
 																																								'init' as const
@@ -423,7 +487,7 @@ function toStories(component: string): string {
 																																							value={
 																																								(
 																																									<literal
-																																										value={`<${identifier.name} v-bind="$props" />`}
+																																										value={`<${identifier.name} v-bind="props" />`}
 																																									/>
 																																								) as estree.Literal
 																																							}
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index d54c493625..90cc57536f 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -8,6 +8,7 @@ const config = {
 		'@storybook/addon-links',
 		'@storybook/addon-essentials',
 		'@storybook/addon-interactions',
+		'@storybook/addon-storysource',
 		'../node_modules/storybook-addon-misskey-theme',
 	],
 	framework: {
@@ -22,10 +23,15 @@ const config = {
 	},
 	async viteFinal(config, options) {
 		const { plugins, build: { rollupOptions, ...build }, ...original } = getConfig();
+		console.dir(config, {depth:Infinity});
+		console.dir(original, {depth:Infinity});
 		const x = mergeConfig(config, {
 			...original,
 			build,
 			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
+			server: {
+				hmr: false,
+			},
 		});
 		return x;
 	},
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 72e642189f..291432db0f 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,13 +1,18 @@
 import { addons } from '@storybook/addons';
 import { FORCE_REMOUNT } from '@storybook/core-events';
-import { type Preview, forceReRender, setup } from '@storybook/vue3';
+import { type Preview, setup } from '@storybook/vue3';
 import { initialize, mswDecorator } from 'msw-storybook-addon';
 import locale from './locale';
 import { commonHandlers, onUnhandledRequest } from './mocks';
 import themes from './themes';
 import '../src/style.scss';
 
-let initialized = false;
+// TODO: HMR が壊れているのを直す
+import.meta.hot.invalidate();
+
+const appInitialized = Symbol();
+
+let moduleInitialized = false;
 let unobserve = () => {};
 
 function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme']) {
@@ -48,7 +53,11 @@ queueMicrotask(() => {
 		import('../src/scripts/theme'),
 	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }]) => {
 		setup((app) => {
-			initialized = true;
+			moduleInitialized = true;
+			if (app[appInitialized]) {
+				return;
+			}
+			app[appInitialized] = true;
 			loadTheme(applyTheme);
 			components(app);
 			directives(app);
@@ -59,17 +68,17 @@ queueMicrotask(() => {
 
 const preview = {
 	decorators: [
-		mswDecorator,
 		(Story, context) => {
 			const story = Story();
-			if (!initialized) {
+			if (!moduleInitialized) {
 				const channel = addons.getChannel();
 				(globalThis.requestIdleCallback || setTimeout)(() => {
 					channel.emit(FORCE_REMOUNT, { storyId: context.id });
 				});
 			}
 			return story;
-		}
+		},
+		mswDecorator,
 	],
 	parameters: {
 		msw: {
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 182585a87d..06d90b5249 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -72,21 +72,22 @@
 		"vuedraggable": "next"
 	},
 	"devDependencies": {
-		"@storybook/addon-essentials": "^7.0.0-rc.4",
-		"@storybook/addon-interactions": "^7.0.0-rc.4",
-		"@storybook/addon-links": "^7.0.0-rc.4",
+		"@storybook/addon-essentials": "7.0.0-rc.6",
+		"@storybook/addon-interactions": "7.0.0-rc.6",
+		"@storybook/addon-links": "7.0.0-rc.6",
+		"@storybook/addon-storysource": "7.0.0-rc.6",
 		"@storybook/addons": "7.0.0-rc.5",
-		"@storybook/blocks": "^7.0.0-rc.4",
-		"@storybook/core-events": "^7.0.0-rc.4",
-		"@storybook/manager-api": "^7.0.0-rc.4",
-		"@storybook/preview-api": "^7.0.0-rc.4",
-		"@storybook/react": "^7.0.0-rc.4",
-		"@storybook/react-vite": "^7.0.0-rc.4",
+		"@storybook/blocks": "7.0.0-rc.6",
+		"@storybook/core-events": "7.0.0-rc.6",
+		"@storybook/manager-api": "7.0.0-rc.6",
+		"@storybook/preview-api": "7.0.0-rc.6",
+		"@storybook/react": "7.0.0-rc.6",
+		"@storybook/react-vite": "7.0.0-rc.6",
 		"@storybook/testing-library": "^0.0.14-next.1",
-		"@storybook/theming": "^7.0.0-rc.4",
-		"@storybook/types": "^7.0.0-rc.4",
-		"@storybook/vue3": "^7.0.0-rc.4",
-		"@storybook/vue3-vite": "^7.0.0-rc.4",
+		"@storybook/theming": "7.0.0-rc.6",
+		"@storybook/types": "7.0.0-rc.6",
+		"@storybook/vue3": "7.0.0-rc.6",
+		"@storybook/vue3-vite": "7.0.0-rc.6",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
 		"@types/estree": "^1.0.0",
@@ -119,7 +120,7 @@
 		"react": "^18.2.0",
 		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
-		"storybook": "^7.0.0-rc.4",
+		"storybook": "7.0.0-rc.6",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
 		"vitest": "^0.29.2",
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
index 7d97a6e7bc..dac1b27938 100644
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReport.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAbuseReport,
 } satisfies Meta<typeof MkAbuseReport>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAbuseReport,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAbuseReport v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAbuseReport v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
index 76ab111f46..acaf171e9f 100644
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAbuseReportWindow,
 } satisfies Meta<typeof MkAbuseReportWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAbuseReportWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAbuseReportWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAbuseReportWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
index 8220dbcbb8..492358ebc4 100644
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ b/packages/frontend/src/components/MkAchievements.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAchievements,
 } satisfies Meta<typeof MkAchievements>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAchievements,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAchievements v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAchievements v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
index 6965f41036..b27668655f 100644
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ b/packages/frontend/src/components/MkAsUi.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAsUi,
 } satisfies Meta<typeof MkAsUi>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAsUi,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAsUi v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAsUi v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
index f2bc0b8374..2242bfde39 100644
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ b/packages/frontend/src/components/MkAutocomplete.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAutocomplete,
 } satisfies Meta<typeof MkAutocomplete>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAutocomplete,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAutocomplete v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAutocomplete v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
index 2892691933..71a40e5cc4 100644
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ b/packages/frontend/src/components/MkAvatars.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAvatars,
 } satisfies Meta<typeof MkAvatars>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAvatars,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAvatars v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAvatars v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
index 94bf1e39b2..228af8f919 100644
--- a/packages/frontend/src/components/MkButton.stories.impl.ts
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -1,13 +1,27 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkButton from './MkButton.vue';
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkButton v-bind="$props">Text</MkButton>',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkButton v-bind="props">Text</MkButton>',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
index c3da0d1a46..c85ce89e18 100644
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ b/packages/frontend/src/components/MkButton.stories.ts
@@ -6,16 +6,30 @@ const meta = {
 	component: MkButton,
 } satisfies Meta<typeof MkButton>;
 export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkButton from './MkButton.vue';
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkButton v-bind="$props">Text</MkButton>',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkButton v-bind="props">Text</MkButton>',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index f6d0648d89..78db7287ae 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCaptcha,
 } satisfies Meta<typeof MkCaptcha>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCaptcha,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCaptcha v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCaptcha v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
index 461d6f2fda..8c7c31c56a 100644
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkChannelFollowButton,
 } satisfies Meta<typeof MkChannelFollowButton>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkChannelFollowButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkChannelFollowButton v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkChannelFollowButton v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
index 9ad2fe84a0..aedeba1104 100644
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ b/packages/frontend/src/components/MkChannelPreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkChannelPreview,
 } satisfies Meta<typeof MkChannelPreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkChannelPreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkChannelPreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkChannelPreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
index 5cd72a4805..d42adbe992 100644
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ b/packages/frontend/src/components/MkChart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkChart,
 } satisfies Meta<typeof MkChart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkChart,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkChart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkChart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
index ff21636c3b..482f10c31f 100644
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ b/packages/frontend/src/components/MkChartLegend.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkChartLegend,
 } satisfies Meta<typeof MkChartLegend>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkChartLegend,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkChartLegend v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkChartLegend v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
index 69555e9dd1..49cccaa5b4 100644
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ b/packages/frontend/src/components/MkChartTooltip.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkChartTooltip,
 } satisfies Meta<typeof MkChartTooltip>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkChartTooltip,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkChartTooltip v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkChartTooltip v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
index 4cfed26091..315ba320ad 100644
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ b/packages/frontend/src/components/MkCheckbox.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCheckbox,
 } satisfies Meta<typeof MkCheckbox>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCheckbox,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCheckbox v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCheckbox v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
index 750b979f6c..7b8f5165ff 100644
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ b/packages/frontend/src/components/MkClickerGame.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkClickerGame,
 } satisfies Meta<typeof MkClickerGame>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkClickerGame,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkClickerGame v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkClickerGame v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
index 02ec124cf7..a941c36120 100644
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ b/packages/frontend/src/components/MkClipPreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkClipPreview,
 } satisfies Meta<typeof MkClipPreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkClipPreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkClipPreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkClipPreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
index 9498e4160d..dc47abb6b1 100644
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ b/packages/frontend/src/components/MkCode.core.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCode_core,
 } satisfies Meta<typeof MkCode_core>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCode_core,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCode_core v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCode_core v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
index 5d9ebec74d..94b8af9cde 100644
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ b/packages/frontend/src/components/MkCode.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCode,
 } satisfies Meta<typeof MkCode>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCode,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCode v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCode v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
index 5d8b4891c8..3b2da66f25 100644
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ b/packages/frontend/src/components/MkContainer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkContainer,
 } satisfies Meta<typeof MkContainer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkContainer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkContainer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkContainer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
index 46b8ae124f..37cc68c7b4 100644
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ b/packages/frontend/src/components/MkContextMenu.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkContextMenu,
 } satisfies Meta<typeof MkContextMenu>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkContextMenu,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkContextMenu v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkContextMenu v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
index 9e3808eae2..a4ccf146c1 100644
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ b/packages/frontend/src/components/MkCropperDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCropperDialog,
 } satisfies Meta<typeof MkCropperDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCropperDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCropperDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCropperDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
index 16e1b03217..67d60052fe 100644
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ b/packages/frontend/src/components/MkCwButton.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCwButton,
 } satisfies Meta<typeof MkCwButton>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCwButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCwButton v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCwButton v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
index 3d5b27e0c0..f0f203b717 100644
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDateSeparatedList,
 } satisfies Meta<typeof MkDateSeparatedList>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDateSeparatedList,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDateSeparatedList v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDateSeparatedList v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
index 9af7dad32c..194e2c9cb3 100644
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ b/packages/frontend/src/components/MkDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDialog,
 } satisfies Meta<typeof MkDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
index cfe65bcfc7..c99020c9ea 100644
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ b/packages/frontend/src/components/MkDigitalClock.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDigitalClock,
 } satisfies Meta<typeof MkDigitalClock>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDigitalClock,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDigitalClock v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDigitalClock v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
index b63ccc23e0..7157b7e82b 100644
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ b/packages/frontend/src/components/MkDonation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDonation,
 } satisfies Meta<typeof MkDonation>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDonation,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDonation v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDonation v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
index 56b007cbea..17ba8df806 100644
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ b/packages/frontend/src/components/MkDrive.file.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDrive_file,
 } satisfies Meta<typeof MkDrive_file>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDrive_file,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDrive_file v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDrive_file v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
index 7c5514a292..74b810e314 100644
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.folder.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDrive_folder,
 } satisfies Meta<typeof MkDrive_folder>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDrive_folder,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDrive_folder v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDrive_folder v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
index cc7d937883..50272c4d8a 100644
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDrive_navFolder,
 } satisfies Meta<typeof MkDrive_navFolder>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDrive_navFolder,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDrive_navFolder v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDrive_navFolder v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
index d80015a579..3038312c39 100644
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ b/packages/frontend/src/components/MkDrive.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDrive,
 } satisfies Meta<typeof MkDrive>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDrive,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDrive v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDrive v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
index 2efa600aa1..6da7aab8c4 100644
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDriveFileThumbnail,
 } satisfies Meta<typeof MkDriveFileThumbnail>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDriveFileThumbnail,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDriveFileThumbnail v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDriveFileThumbnail v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
index 00d23ad8f3..b665516de6 100644
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDriveSelectDialog,
 } satisfies Meta<typeof MkDriveSelectDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDriveSelectDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDriveSelectDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDriveSelectDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
index c2054de123..b0f13f562a 100644
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ b/packages/frontend/src/components/MkDriveWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkDriveWindow,
 } satisfies Meta<typeof MkDriveWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkDriveWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkDriveWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkDriveWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
index 567ab0ca06..141a55f59b 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEmojiPicker_section,
 } satisfies Meta<typeof MkEmojiPicker_section>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEmojiPicker_section,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEmojiPicker_section v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmojiPicker_section v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
index 5811d0d1ec..5980c9a471 100644
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEmojiPicker,
 } satisfies Meta<typeof MkEmojiPicker>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEmojiPicker,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEmojiPicker v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmojiPicker v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
index dad27b0d50..db0900340b 100644
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEmojiPickerDialog,
 } satisfies Meta<typeof MkEmojiPickerDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEmojiPickerDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEmojiPickerDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmojiPickerDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
index 39c5ca2b04..f56e5369a8 100644
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEmojiPickerWindow,
 } satisfies Meta<typeof MkEmojiPickerWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEmojiPickerWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEmojiPickerWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmojiPickerWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
index 9f4f2506bc..4894999903 100644
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFeaturedPhotos,
 } satisfies Meta<typeof MkFeaturedPhotos>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFeaturedPhotos,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFeaturedPhotos v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFeaturedPhotos v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
index c8f731bab9..da29eb06cf 100644
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFileCaptionEditWindow,
 } satisfies Meta<typeof MkFileCaptionEditWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFileCaptionEditWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFileCaptionEditWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFileCaptionEditWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
index 9f3b261005..a3fe97ee30 100644
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFileListForAdmin,
 } satisfies Meta<typeof MkFileListForAdmin>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFileListForAdmin,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFileListForAdmin v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFileListForAdmin v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
index 951863c697..a87b58c7f9 100644
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ b/packages/frontend/src/components/MkFlashPreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFlashPreview,
 } satisfies Meta<typeof MkFlashPreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFlashPreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFlashPreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFlashPreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
index da65def88c..20eab42e71 100644
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ b/packages/frontend/src/components/MkFoldableSection.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFoldableSection,
 } satisfies Meta<typeof MkFoldableSection>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFoldableSection,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFoldableSection v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFoldableSection v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
index c426a66112..7086d2c6f7 100644
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ b/packages/frontend/src/components/MkFolder.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFolder,
 } satisfies Meta<typeof MkFolder>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFolder,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFolder v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFolder v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
index 0e61cb36dc..8b4ed2acf9 100644
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ b/packages/frontend/src/components/MkFollowButton.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFollowButton,
 } satisfies Meta<typeof MkFollowButton>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFollowButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFollowButton v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFollowButton v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
index 4976670c9e..50a82ec105 100644
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ b/packages/frontend/src/components/MkForgotPassword.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkForgotPassword,
 } satisfies Meta<typeof MkForgotPassword>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkForgotPassword,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkForgotPassword v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkForgotPassword v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
index b63991185a..7388e075cc 100644
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkFormDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkFormDialog,
 } satisfies Meta<typeof MkFormDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkFormDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkFormDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkFormDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
index fc6b7ec0d9..6b354e02b3 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkGalleryPostPreview,
 } satisfies Meta<typeof MkGalleryPostPreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkGalleryPostPreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkGalleryPostPreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkGalleryPostPreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
index 1c15e263e2..046b4bd652 100644
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ b/packages/frontend/src/components/MkGoogle.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkGoogle,
 } satisfies Meta<typeof MkGoogle>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkGoogle,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkGoogle v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkGoogle v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
index 17bf874d0f..1782029bfc 100644
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkHeatmap.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkHeatmap,
 } satisfies Meta<typeof MkHeatmap>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkHeatmap,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkHeatmap v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkHeatmap v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
index 19d50af615..8276b916af 100644
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ b/packages/frontend/src/components/MkImageViewer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkImageViewer,
 } satisfies Meta<typeof MkImageViewer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkImageViewer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkImageViewer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkImageViewer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
index 6694a4aaf9..b2693395ba 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkImgWithBlurhash,
 } satisfies Meta<typeof MkImgWithBlurhash>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkImgWithBlurhash,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkImgWithBlurhash v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkImgWithBlurhash v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
index 886af9af8b..99e46f95e7 100644
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ b/packages/frontend/src/components/MkInfo.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkInfo,
 } satisfies Meta<typeof MkInfo>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkInfo,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkInfo v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkInfo v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
index e372115748..6234735409 100644
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ b/packages/frontend/src/components/MkInput.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkInput,
 } satisfies Meta<typeof MkInput>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkInput,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkInput v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkInput v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
index eeb72cd796..919948e64e 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkInstanceCardMini,
 } satisfies Meta<typeof MkInstanceCardMini>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkInstanceCardMini,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkInstanceCardMini v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkInstanceCardMini v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
index 1b14c365b6..df6005ccc9 100644
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ b/packages/frontend/src/components/MkInstanceStats.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkInstanceStats,
 } satisfies Meta<typeof MkInstanceStats>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkInstanceStats,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkInstanceStats v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkInstanceStats v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
index 2ed1628663..364290640e 100644
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ b/packages/frontend/src/components/MkInstanceTicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkInstanceTicker,
 } satisfies Meta<typeof MkInstanceTicker>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkInstanceTicker,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkInstanceTicker v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkInstanceTicker v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
index 748630113f..5036379752 100644
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ b/packages/frontend/src/components/MkKeyValue.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkKeyValue,
 } satisfies Meta<typeof MkKeyValue>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkKeyValue,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkKeyValue v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkKeyValue v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
index aa3525124e..54f3ae3b73 100644
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ b/packages/frontend/src/components/MkLaunchPad.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkLaunchPad,
 } satisfies Meta<typeof MkLaunchPad>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkLaunchPad,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkLaunchPad v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkLaunchPad v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
index ef98855b07..cea9509a76 100644
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ b/packages/frontend/src/components/MkLink.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkLink,
 } satisfies Meta<typeof MkLink>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkLink,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkLink v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkLink v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
index 6ade5a4cf2..943b512bf8 100644
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ b/packages/frontend/src/components/MkMarquee.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMarquee,
 } satisfies Meta<typeof MkMarquee>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMarquee,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMarquee v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMarquee v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
index 9d2d1069da..9dd835b557 100644
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ b/packages/frontend/src/components/MkMediaBanner.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMediaBanner,
 } satisfies Meta<typeof MkMediaBanner>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMediaBanner,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMediaBanner v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMediaBanner v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
index adfad85063..4089a53ce8 100644
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ b/packages/frontend/src/components/MkMediaImage.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMediaImage,
 } satisfies Meta<typeof MkMediaImage>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMediaImage,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMediaImage v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMediaImage v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
index e68935ee9d..d88e19c06e 100644
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ b/packages/frontend/src/components/MkMediaList.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMediaList,
 } satisfies Meta<typeof MkMediaList>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMediaList,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMediaList v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMediaList v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
index 61aafdad83..9f94e8ce52 100644
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ b/packages/frontend/src/components/MkMediaVideo.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMediaVideo,
 } satisfies Meta<typeof MkMediaVideo>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMediaVideo,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMediaVideo v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMediaVideo v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
index 503ac4a542..ef88a5a6bc 100644
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ b/packages/frontend/src/components/MkMention.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMention,
 } satisfies Meta<typeof MkMention>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMention,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMention v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMention v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
index b45a046ef8..5e84136437 100644
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ b/packages/frontend/src/components/MkMenu.child.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMenu_child,
 } satisfies Meta<typeof MkMenu_child>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMenu_child,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMenu_child v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMenu_child v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
index 8a60b68f3e..557ce5363a 100644
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ b/packages/frontend/src/components/MkMenu.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMenu,
 } satisfies Meta<typeof MkMenu>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMenu,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMenu v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMenu v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
index c0d58421b1..f26c74446d 100644
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ b/packages/frontend/src/components/MkMiniChart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMiniChart,
 } satisfies Meta<typeof MkMiniChart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMiniChart,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMiniChart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMiniChart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
index 50c77800d8..baaf79dc71 100644
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ b/packages/frontend/src/components/MkModal.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkModal,
 } satisfies Meta<typeof MkModal>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkModal,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkModal v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkModal v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
index 6c8cbef34c..eebd26502f 100644
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalPageWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkModalPageWindow,
 } satisfies Meta<typeof MkModalPageWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkModalPageWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkModalPageWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkModalPageWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
index 7b162ab8bc..fddf98574b 100644
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ b/packages/frontend/src/components/MkModalWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkModalWindow,
 } satisfies Meta<typeof MkModalWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkModalWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkModalWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkModalWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
index 79d28a7efe..d7a82cffd3 100644
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ b/packages/frontend/src/components/MkNote.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNote,
 } satisfies Meta<typeof MkNote>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNote,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNote v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNote v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
index 3a63251f2a..abed199c52 100644
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ b/packages/frontend/src/components/MkNoteDetailed.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNoteDetailed,
 } satisfies Meta<typeof MkNoteDetailed>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNoteDetailed,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNoteDetailed v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNoteDetailed v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
index 1ccda97258..d8723eea42 100644
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ b/packages/frontend/src/components/MkNoteHeader.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNoteHeader,
 } satisfies Meta<typeof MkNoteHeader>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNoteHeader,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNoteHeader v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNoteHeader v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
index 9270290701..a00795f9ba 100644
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ b/packages/frontend/src/components/MkNotePreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNotePreview,
 } satisfies Meta<typeof MkNotePreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNotePreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNotePreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNotePreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
index e6e9fb9f49..148089d829 100644
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ b/packages/frontend/src/components/MkNoteSimple.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNoteSimple,
 } satisfies Meta<typeof MkNoteSimple>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNoteSimple,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNoteSimple v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNoteSimple v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
index 4d7c0af7b7..dc3fad2f81 100644
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ b/packages/frontend/src/components/MkNoteSub.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNoteSub,
 } satisfies Meta<typeof MkNoteSub>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNoteSub,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNoteSub v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNoteSub v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
index 4551b2c304..8fe2d31b4c 100644
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ b/packages/frontend/src/components/MkNotes.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNotes,
 } satisfies Meta<typeof MkNotes>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNotes,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNotes v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNotes v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
index 3e4478f9ae..3612d13107 100644
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ b/packages/frontend/src/components/MkNotification.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNotification,
 } satisfies Meta<typeof MkNotification>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNotification,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNotification v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNotification v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
index 059f86b007..ad5e055d04 100644
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNotificationSettingWindow,
 } satisfies Meta<typeof MkNotificationSettingWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNotificationSettingWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNotificationSettingWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNotificationSettingWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
index 48ab20bf90..5de01c2f92 100644
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ b/packages/frontend/src/components/MkNotifications.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNotifications,
 } satisfies Meta<typeof MkNotifications>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNotifications,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNotifications v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNotifications v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
index 837de8329e..1689bb431e 100644
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ b/packages/frontend/src/components/MkNumber.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNumber,
 } satisfies Meta<typeof MkNumber>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNumber,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNumber v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNumber v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
index 9c1fcc2179..bc281e62aa 100644
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ b/packages/frontend/src/components/MkNumberDiff.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkNumberDiff,
 } satisfies Meta<typeof MkNumberDiff>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkNumberDiff,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkNumberDiff v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkNumberDiff v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
index c7aec40dc8..90c446fbdb 100644
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkObjectView,
 } satisfies Meta<typeof MkObjectView>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkObjectView,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkObjectView v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkObjectView v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
index da7ae5958d..24b0e15531 100644
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ b/packages/frontend/src/components/MkObjectView.value.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkObjectView_value,
 } satisfies Meta<typeof MkObjectView_value>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkObjectView_value,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkObjectView_value v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkObjectView_value v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
index 4c2dd1b3ac..06963423bd 100644
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ b/packages/frontend/src/components/MkOmit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkOmit,
 } satisfies Meta<typeof MkOmit>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkOmit,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkOmit v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkOmit v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
index 6b8121527e..d1ddf6707b 100644
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ b/packages/frontend/src/components/MkPagePreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPagePreview,
 } satisfies Meta<typeof MkPagePreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPagePreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPagePreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPagePreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
index 846dd9f65c..334b3bc292 100644
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ b/packages/frontend/src/components/MkPageWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPageWindow,
 } satisfies Meta<typeof MkPageWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPageWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPageWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPageWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
index 78a99081c9..3bf7fb92bd 100644
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ b/packages/frontend/src/components/MkPagination.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPagination,
 } satisfies Meta<typeof MkPagination>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPagination,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPagination v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPagination v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
index b6851053d3..6708f2ba61 100644
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPlusOneEffect,
 } satisfies Meta<typeof MkPlusOneEffect>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPlusOneEffect,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPlusOneEffect v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPlusOneEffect v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
index 651847cb15..dbab8671dd 100644
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ b/packages/frontend/src/components/MkPoll.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPoll,
 } satisfies Meta<typeof MkPoll>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPoll,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPoll v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPoll v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
index 0629b9a685..8d26f2cbfb 100644
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ b/packages/frontend/src/components/MkPollEditor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPollEditor,
 } satisfies Meta<typeof MkPollEditor>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPollEditor,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPollEditor v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPollEditor v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
index 090e1f494b..2727ae37a3 100644
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ b/packages/frontend/src/components/MkPopupMenu.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPopupMenu,
 } satisfies Meta<typeof MkPopupMenu>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPopupMenu,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPopupMenu v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPopupMenu v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
index 5ed74b029d..e9623581a7 100644
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ b/packages/frontend/src/components/MkPostForm.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPostForm,
 } satisfies Meta<typeof MkPostForm>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPostForm,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPostForm v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPostForm v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
index 687f0bfaf2..26ea2a43f4 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPostFormAttaches,
 } satisfies Meta<typeof MkPostFormAttaches>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPostFormAttaches,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPostFormAttaches v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPostFormAttaches v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
index 616d6f1f83..3b79730501 100644
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ b/packages/frontend/src/components/MkPostFormDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPostFormDialog,
 } satisfies Meta<typeof MkPostFormDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPostFormDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPostFormDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPostFormDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
index 15ef8eb045..664ed0a447 100644
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPushNotificationAllowButton,
 } satisfies Meta<typeof MkPushNotificationAllowButton>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPushNotificationAllowButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPushNotificationAllowButton v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPushNotificationAllowButton v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
index 8056eecf84..728b864fca 100644
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ b/packages/frontend/src/components/MkRadio.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRadio,
 } satisfies Meta<typeof MkRadio>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRadio,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRadio v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRadio v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
index b3a0e39efb..b5059ea47c 100644
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ b/packages/frontend/src/components/MkRadios.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRadios,
 } satisfies Meta<typeof MkRadios>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRadios,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRadios v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRadios v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
index dc6caae4d5..8b68f4d1c3 100644
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ b/packages/frontend/src/components/MkRange.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRange,
 } satisfies Meta<typeof MkRange>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRange,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRange v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRange v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
index 10b9b6e2ed..16041af5ac 100644
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactedUsersDialog,
 } satisfies Meta<typeof MkReactedUsersDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactedUsersDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactedUsersDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactedUsersDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
index 5bba9aa1af..2d5599c147 100644
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ b/packages/frontend/src/components/MkReactionEffect.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionEffect,
 } satisfies Meta<typeof MkReactionEffect>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionEffect,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionEffect v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionEffect v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
index ab78807357..309e86aded 100644
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ b/packages/frontend/src/components/MkReactionIcon.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionIcon,
 } satisfies Meta<typeof MkReactionIcon>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionIcon,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionIcon v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionIcon v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
index b3478f3110..41bb73c7bf 100644
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ b/packages/frontend/src/components/MkReactionTooltip.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionTooltip,
 } satisfies Meta<typeof MkReactionTooltip>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionTooltip,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionTooltip v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionTooltip v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
index c853b4da3b..9e54ce7401 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionsViewer_details,
 } satisfies Meta<typeof MkReactionsViewer_details>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionsViewer_details,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionsViewer_details v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionsViewer_details v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
index 9f5160f06e..9e35252beb 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionsViewer_reaction,
 } satisfies Meta<typeof MkReactionsViewer_reaction>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionsViewer_reaction,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionsViewer_reaction v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionsViewer_reaction v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
index 30262c02b0..706428fb01 100644
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ b/packages/frontend/src/components/MkReactionsViewer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkReactionsViewer,
 } satisfies Meta<typeof MkReactionsViewer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkReactionsViewer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkReactionsViewer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkReactionsViewer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
index 103e77fc4f..3b91a07153 100644
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ b/packages/frontend/src/components/MkRemoteCaution.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRemoteCaution,
 } satisfies Meta<typeof MkRemoteCaution>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRemoteCaution,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRemoteCaution v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRemoteCaution v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
index fb19bd30fe..3b7872b189 100644
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRetentionHeatmap,
 } satisfies Meta<typeof MkRetentionHeatmap>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRetentionHeatmap,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRetentionHeatmap v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRetentionHeatmap v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
index 73552e9d09..04eb7cc1d4 100644
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ b/packages/frontend/src/components/MkRippleEffect.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRippleEffect,
 } satisfies Meta<typeof MkRippleEffect>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRippleEffect,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRippleEffect v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRippleEffect v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
index 1cc60992e4..15953c7171 100644
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ b/packages/frontend/src/components/MkRolePreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkRolePreview,
 } satisfies Meta<typeof MkRolePreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkRolePreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkRolePreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkRolePreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
index 6bc18d2903..b1e6459cf3 100644
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ b/packages/frontend/src/components/MkSample.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSample,
 } satisfies Meta<typeof MkSample>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSample,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSample v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSample v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
index 7996a53e14..8012045973 100644
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ b/packages/frontend/src/components/MkSelect.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSelect,
 } satisfies Meta<typeof MkSelect>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSelect,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSelect v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSelect v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
index 8f03065e1d..1ac0973cef 100644
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ b/packages/frontend/src/components/MkSignin.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSignin,
 } satisfies Meta<typeof MkSignin>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSignin,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSignin v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSignin v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
index d2e0689b44..3e4a3a7cb7 100644
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ b/packages/frontend/src/components/MkSigninDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSigninDialog,
 } satisfies Meta<typeof MkSigninDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSigninDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSigninDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSigninDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
index a67235f6a2..8372680014 100644
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ b/packages/frontend/src/components/MkSignup.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSignup,
 } satisfies Meta<typeof MkSignup>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSignup,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSignup v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSignup v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
index dfca62ba28..7eb70e6a88 100644
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ b/packages/frontend/src/components/MkSignupDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSignupDialog,
 } satisfies Meta<typeof MkSignupDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSignupDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSignupDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSignupDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
index 4e784abf5e..6c1dca90d9 100644
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ b/packages/frontend/src/components/MkSparkle.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSparkle,
 } satisfies Meta<typeof MkSparkle>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSparkle,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSparkle v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSparkle v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
index ee19f578bc..fa9c0bb7f0 100644
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ b/packages/frontend/src/components/MkSubNoteContent.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSubNoteContent,
 } satisfies Meta<typeof MkSubNoteContent>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSubNoteContent,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSubNoteContent v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSubNoteContent v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
index b6db1e8617..9ef7906884 100644
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ b/packages/frontend/src/components/MkSuperMenu.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSuperMenu,
 } satisfies Meta<typeof MkSuperMenu>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSuperMenu,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSuperMenu v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSuperMenu v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
index 8e7b8ffb1c..f01191be83 100644
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ b/packages/frontend/src/components/MkSwitch.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSwitch,
 } satisfies Meta<typeof MkSwitch>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSwitch,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSwitch v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSwitch v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
index 092a84a748..1ff6c06a0d 100644
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ b/packages/frontend/src/components/MkTab.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTab,
 } satisfies Meta<typeof MkTab>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTab,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTab v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTab v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
index 6bfbc03524..83aba5409b 100644
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ b/packages/frontend/src/components/MkTagCloud.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTagCloud,
 } satisfies Meta<typeof MkTagCloud>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTagCloud,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTagCloud v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTagCloud v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
index 92c496db9b..9bfc2a23af 100644
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ b/packages/frontend/src/components/MkTextarea.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTextarea,
 } satisfies Meta<typeof MkTextarea>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTextarea,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTextarea v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTextarea v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
index b6bfb600dc..511bdead17 100644
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ b/packages/frontend/src/components/MkTimeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTimeline,
 } satisfies Meta<typeof MkTimeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTimeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTimeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTimeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
index fef647287c..c5f80f61be 100644
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ b/packages/frontend/src/components/MkToast.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkToast,
 } satisfies Meta<typeof MkToast>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkToast,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkToast v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkToast v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
index fb9b1bc6da..5229d6d6c6 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTokenGenerateWindow,
 } satisfies Meta<typeof MkTokenGenerateWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTokenGenerateWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTokenGenerateWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTokenGenerateWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
index 2ea06ac2a8..19f22ede15 100644
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ b/packages/frontend/src/components/MkTooltip.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTooltip,
 } satisfies Meta<typeof MkTooltip>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTooltip,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTooltip v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTooltip v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
index 5a8a16a6b7..58069bd1d9 100644
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ b/packages/frontend/src/components/MkUpdated.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUpdated,
 } satisfies Meta<typeof MkUpdated>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUpdated,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUpdated v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUpdated v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
index 9f9d8c8f86..29a393a5ac 100644
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUrlPreview,
 } satisfies Meta<typeof MkUrlPreview>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUrlPreview,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUrlPreview v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUrlPreview v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
index 74657a93ae..f9df0987a1 100644
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUrlPreviewPopup,
 } satisfies Meta<typeof MkUrlPreviewPopup>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUrlPreviewPopup,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUrlPreviewPopup v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUrlPreviewPopup v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
index 81de09a199..8ed97c4b49 100644
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ b/packages/frontend/src/components/MkUserCardMini.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserCardMini,
 } satisfies Meta<typeof MkUserCardMini>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserCardMini,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserCardMini v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserCardMini v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
index 286de8925f..553df44660 100644
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ b/packages/frontend/src/components/MkUserInfo.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserInfo,
 } satisfies Meta<typeof MkUserInfo>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserInfo,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserInfo v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserInfo v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
index 97f4d1f7d8..927364596b 100644
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ b/packages/frontend/src/components/MkUserList.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserList,
 } satisfies Meta<typeof MkUserList>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserList,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserList v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserList v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
index 2b9daf9b5b..c576b91b57 100644
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserOnlineIndicator,
 } satisfies Meta<typeof MkUserOnlineIndicator>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserOnlineIndicator,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserOnlineIndicator v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserOnlineIndicator v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
index a74ed2609b..5a30d4ba4f 100644
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ b/packages/frontend/src/components/MkUserPopup.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserPopup,
 } satisfies Meta<typeof MkUserPopup>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserPopup,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserPopup v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserPopup v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
index 522c1fc632..ffda531ed3 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserSelectDialog,
 } satisfies Meta<typeof MkUserSelectDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserSelectDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserSelectDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserSelectDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
index 9b057bea6d..6fa843e8b5 100644
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ b/packages/frontend/src/components/MkUsersTooltip.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUsersTooltip,
 } satisfies Meta<typeof MkUsersTooltip>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUsersTooltip,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUsersTooltip v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUsersTooltip v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
index 52156bfe11..3d62ddd9d0 100644
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkVisibilityPicker,
 } satisfies Meta<typeof MkVisibilityPicker>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkVisibilityPicker,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkVisibilityPicker v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkVisibilityPicker v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
index ea79004c39..b2314523d9 100644
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ b/packages/frontend/src/components/MkWaitingDialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkWaitingDialog,
 } satisfies Meta<typeof MkWaitingDialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkWaitingDialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkWaitingDialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkWaitingDialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
index 7a6aad357f..39e91faafd 100644
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ b/packages/frontend/src/components/MkWidgets.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkWidgets,
 } satisfies Meta<typeof MkWidgets>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkWidgets,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkWidgets v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkWidgets v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
index 8f1a27631c..fcc9bd3002 100644
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ b/packages/frontend/src/components/MkWindow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkWindow,
 } satisfies Meta<typeof MkWindow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkWindow,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkWindow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkWindow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/MkYouTubePlayer.stories.ts b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
index 84f1dcd889..79191bbcd0 100644
--- a/packages/frontend/src/components/MkYouTubePlayer.stories.ts
+++ b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkYouTubePlayer,
 } satisfies Meta<typeof MkYouTubePlayer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkYouTubePlayer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkYouTubePlayer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkYouTubePlayer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
index 54e6c25ca8..b0ac7ee504 100644
--- a/packages/frontend/src/components/form/link.stories.ts
+++ b/packages/frontend/src/components/form/link.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: link_,
 } satisfies Meta<typeof link_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				link_,
 			},
-			props: Object.keys(argTypes),
-			template: '<link_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<link_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
index fabddc668b..0da19356e9 100644
--- a/packages/frontend/src/components/form/section.stories.ts
+++ b/packages/frontend/src/components/form/section.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: section_,
 } satisfies Meta<typeof section_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				section_,
 			},
-			props: Object.keys(argTypes),
-			template: '<section_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<section_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
index 6ddafe86c8..2c441f1156 100644
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ b/packages/frontend/src/components/form/slot.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: slot_,
 } satisfies Meta<typeof slot_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				slot_,
 			},
-			props: Object.keys(argTypes),
-			template: '<slot_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<slot_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
index 3495bd7318..5aece4082f 100644
--- a/packages/frontend/src/components/form/split.stories.ts
+++ b/packages/frontend/src/components/form/split.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: split_,
 } satisfies Meta<typeof split_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				split_,
 			},
-			props: Object.keys(argTypes),
-			template: '<split_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<split_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
index a22580d7a9..ccd2d7d099 100644
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ b/packages/frontend/src/components/form/suspense.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: suspense_,
 } satisfies Meta<typeof suspense_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				suspense_,
 			},
-			props: Object.keys(argTypes),
-			template: '<suspense_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<suspense_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index e3d56c63c3..91ea368263 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkA,
 } satisfies Meta<typeof MkA>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkA,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkA v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkA v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index a710c227a0..90f66bc182 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAcct,
 } satisfies Meta<typeof MkAcct>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAcct,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAcct v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAcct v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index 687bf30ab5..9f4dc320ba 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkAd,
 } satisfies Meta<typeof MkAd>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAd,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAd v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAd v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
new file mode 100644
index 0000000000..ca3db80b2e
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -0,0 +1,64 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkAvatar from './MkAvatar.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkAvatar,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAvatar v-bind="props" />',
+		};
+	},
+	args: {
+		size: 48,
+		user: {
+			avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+		},
+	},
+	decorators: [
+		(Story, context) => ({
+			// eslint-disable-next-line quotes
+			template: `<div :style="{ display: 'grid', width: '${context.args.size}px', height: '${context.args.size}px' }"><story/></div>`,
+		}),
+	],
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAvatar>;
+export const ProfilePage = {
+	...Default,
+	args: {
+		...Default.args,
+		size: 120,
+		indicator: true,
+		user: {
+			...Default.args.user,
+			onlineStatus: 'unknown',
+		},
+	},
+};
+export const ProfilePageCat = {
+	...ProfilePage,
+	args: {
+		...ProfilePage.args,
+		user: {
+			...ProfilePage.args.user,
+			isCat: true,
+		},
+	},
+};
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 644a1f2f34..6cd9ca0a9b 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -1,23 +1,80 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAvatar from './MkAvatar.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkAvatar',
 	component: MkAvatar,
 } satisfies Meta<typeof MkAvatar>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkAvatar from './MkAvatar.vue';
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAvatar,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAvatar v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAvatar v-bind="props" />',
 		};
 	},
+	args: {
+		size: 48,
+		user: {
+			avatarUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+		},
+	},
+	decorators: [
+		(Story, context) => ({
+			// eslint-disable-next-line quotes
+			template: `<div :style="{ display: 'grid', width: '${context.args.size}px', height: '${context.args.size}px' }"><story/></div>`,
+		}),
+	],
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkAvatar>;
-export default meta;
+export const ProfilePage = {
+	...Default,
+	args: {
+		...Default.args,
+		size: 120,
+		indicator: true,
+		user: {
+			...Default.args.user,
+			onlineStatus: 'unknown',
+		},
+	},
+};
+export const ProfilePageCat = {
+	...ProfilePage,
+	args: {
+		...ProfilePage.args,
+		user: {
+			...ProfilePage.args.user,
+			isCat: true,
+			// avatarUrl: 'https://millionlive-theaterdays.idolmaster-official.jp/assets/data/webp/common/footer/icon_app.png.webp',
+			// avatarUrl: 'https://cdn.imastodon.net/accounts/avatars/000/144/021/original/8137afa4114ab85f.png',
+			// avatarUrl: 'https://avatars.githubusercontent.com/u/4439005?v=4',
+			// avatarUrl: 'https://avatars.githubusercontent.com/u/7973572?v=4',
+			// avatarUrl: 'https://avatars.githubusercontent.com/u/6533808?v=4',
+			// avatarUrl: 'https://avatars.githubusercontent.com/u/7106976?v=4',
+			avatarUrl: 'https://avatars.githubusercontent.com/u/3396686?v=4',
+		},
+	},
+};
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index cc9d4d668a..76c70b9aba 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkCustomEmoji,
 } satisfies Meta<typeof MkCustomEmoji>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkCustomEmoji,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkCustomEmoji v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCustomEmoji v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
index cdae6b11b5..5b8b7ca062 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEllipsis,
 } satisfies Meta<typeof MkEllipsis>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEllipsis,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEllipsis v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEllipsis v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index 7c48937c7a..cca084e2db 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkEmoji,
 } satisfies Meta<typeof MkEmoji>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkEmoji,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkEmoji v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmoji v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index d04d57f01f..ce7f40f56d 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkError,
 } satisfies Meta<typeof MkError>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkError,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkError v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkError v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index 4fe0d4ff34..a83c41a0ea 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkLoading,
 } satisfies Meta<typeof MkLoading>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkLoading,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkLoading v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkLoading v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 23869d98e7..18407d188c 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkMisskeyFlavoredMarkdown,
 } satisfies Meta<typeof MkMisskeyFlavoredMarkdown>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkMisskeyFlavoredMarkdown,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkMisskeyFlavoredMarkdown v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
index aa7c5b5f8a..6f0b9dd344 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPageHeader,
 } satisfies Meta<typeof MkPageHeader>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPageHeader,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPageHeader v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPageHeader v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index 0dfa7ab6e9..611aa01790 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkPageHeader_tabs,
 } satisfies Meta<typeof MkPageHeader_tabs>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkPageHeader_tabs,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkPageHeader_tabs v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPageHeader_tabs v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
index 1ca0f7da95..f5e7b2eb9b 100644
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ b/packages/frontend/src/components/global/MkSpacer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkSpacer,
 } satisfies Meta<typeof MkSpacer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkSpacer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkSpacer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkSpacer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
index cad5cd06fa..180fdddb1a 100644
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkStickyContainer,
 } satisfies Meta<typeof MkStickyContainer>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkStickyContainer,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkStickyContainer v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkStickyContainer v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
index c1d5fd6644..d45dc70f28 100644
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkTime,
 } satisfies Meta<typeof MkTime>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkTime,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkTime v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTime v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
index 7e6c813ce0..e3b2c4ceba 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUrl,
 } satisfies Meta<typeof MkUrl>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUrl,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUrl v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUrl v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
index 68deaa4fec..ec708c61c8 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: MkUserName,
 } satisfies Meta<typeof MkUserName>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkUserName,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkUserName v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserName v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
index 45a574cf56..86e25b4757 100644
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ b/packages/frontend/src/components/global/RouterView.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: RouterView,
 } satisfies Meta<typeof RouterView>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				RouterView,
 			},
-			props: Object.keys(argTypes),
-			template: '<RouterView v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<RouterView v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
index e321ca94e3..896c99d3af 100644
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ b/packages/frontend/src/components/page/page.block.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_block,
 } satisfies Meta<typeof page_block>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_block,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_block v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_block v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
index 99088ffb71..6de5a2c3ab 100644
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ b/packages/frontend/src/components/page/page.button.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_button,
 } satisfies Meta<typeof page_button>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_button,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_button v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_button v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
index c8a4dfc843..18ec9c7873 100644
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ b/packages/frontend/src/components/page/page.canvas.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_canvas,
 } satisfies Meta<typeof page_canvas>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_canvas,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_canvas v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_canvas v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
index ce3bc0d2af..25380c6b2e 100644
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ b/packages/frontend/src/components/page/page.counter.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_counter,
 } satisfies Meta<typeof page_counter>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_counter,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_counter v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_counter v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
index 4ad2d98989..1f9a77216b 100644
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ b/packages/frontend/src/components/page/page.if.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_if,
 } satisfies Meta<typeof page_if>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_if,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_if v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_if v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
index 934380d2c2..63d75629fd 100644
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ b/packages/frontend/src/components/page/page.image.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_image,
 } satisfies Meta<typeof page_image>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_image,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_image v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_image v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
index 7d7fa7acf0..642df514cd 100644
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ b/packages/frontend/src/components/page/page.note.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_note,
 } satisfies Meta<typeof page_note>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_note,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_note v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_note v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
index cc78db58c6..671c98fa8a 100644
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ b/packages/frontend/src/components/page/page.number-input.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_number_input,
 } satisfies Meta<typeof page_number_input>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_number_input,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_number_input v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_number_input v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
index 17fc49c96c..e089710aab 100644
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ b/packages/frontend/src/components/page/page.post.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_post,
 } satisfies Meta<typeof page_post>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_post,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_post v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_post v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
index 14f2463dee..d7bda72007 100644
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ b/packages/frontend/src/components/page/page.radio-button.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_radio_button,
 } satisfies Meta<typeof page_radio_button>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_radio_button,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_radio_button v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_radio_button v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
index 826a861bf7..23492d6f29 100644
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ b/packages/frontend/src/components/page/page.section.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_section,
 } satisfies Meta<typeof page_section>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_section,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_section v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_section v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
index 5754d4ad0d..3b0aa96b8a 100644
--- a/packages/frontend/src/components/page/page.stories.ts
+++ b/packages/frontend/src/components/page/page.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_,
 } satisfies Meta<typeof page_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
index 79d884a5f2..a8ab15f93d 100644
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ b/packages/frontend/src/components/page/page.switch.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_switch,
 } satisfies Meta<typeof page_switch>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_switch,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_switch v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_switch v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
index cc2cb26a22..6aa022fec0 100644
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ b/packages/frontend/src/components/page/page.text-input.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_text_input,
 } satisfies Meta<typeof page_text_input>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_text_input,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_text_input v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_text_input v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
index cbf1816dfd..ba937dc8af 100644
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ b/packages/frontend/src/components/page/page.text.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_text,
 } satisfies Meta<typeof page_text>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_text,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_text v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_text v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
index c0320807ca..06142954d2 100644
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea-input.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_textarea_input,
 } satisfies Meta<typeof page_textarea_input>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_textarea_input,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_textarea_input v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_textarea_input v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
index 9629c3ec9b..d9337184b9 100644
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ b/packages/frontend/src/components/page/page.textarea.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_textarea,
 } satisfies Meta<typeof page_textarea>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_textarea,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_textarea v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_textarea v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
index eb94615790..489475ff76 100644
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ b/packages/frontend/src/pages/_empty_.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _empty_,
 } satisfies Meta<typeof _empty_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_empty_,
 			},
-			props: Object.keys(argTypes),
-			template: '<_empty_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_empty_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
index 67c81d4770..7406ea4dea 100644
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ b/packages/frontend/src/pages/_error_.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _error_,
 } satisfies Meta<typeof _error_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_error_,
 			},
-			props: Object.keys(argTypes),
-			template: '<_error_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_error_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
index 54bee86632..a5d5cbbea5 100644
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ b/packages/frontend/src/pages/_loading_.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _loading_,
 } satisfies Meta<typeof _loading_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_loading_,
 			},
-			props: Object.keys(argTypes),
-			template: '<_loading_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_loading_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
index 82217ac20a..3143ff9582 100644
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ b/packages/frontend/src/pages/about-misskey.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: about_misskey,
 } satisfies Meta<typeof about_misskey>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				about_misskey,
 			},
-			props: Object.keys(argTypes),
-			template: '<about_misskey v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<about_misskey v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
index a172ce9c80..3d95008795 100644
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ b/packages/frontend/src/pages/about.emojis.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: about_emojis,
 } satisfies Meta<typeof about_emojis>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				about_emojis,
 			},
-			props: Object.keys(argTypes),
-			template: '<about_emojis v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<about_emojis v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
index a7c4b059df..cf1fc1e611 100644
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ b/packages/frontend/src/pages/about.federation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: about_federation,
 } satisfies Meta<typeof about_federation>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				about_federation,
 			},
-			props: Object.keys(argTypes),
-			template: '<about_federation v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<about_federation v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
index 64b3932312..c8858f3f95 100644
--- a/packages/frontend/src/pages/about.stories.ts
+++ b/packages/frontend/src/pages/about.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: about_,
 } satisfies Meta<typeof about_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				about_,
 			},
-			props: Object.keys(argTypes),
-			template: '<about_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<about_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
index 32a359720a..1817312665 100644
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ b/packages/frontend/src/pages/achievements.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: achievements_,
 } satisfies Meta<typeof achievements_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				achievements_,
 			},
-			props: Object.keys(argTypes),
-			template: '<achievements_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<achievements_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
index bd8ee0f04c..57ea46d6a1 100644
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ b/packages/frontend/src/pages/admin-file.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: admin_file,
 } satisfies Meta<typeof admin_file>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				admin_file,
 			},
-			props: Object.keys(argTypes),
-			template: '<admin_file v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<admin_file v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
index bf1250f085..1af5513b76 100644
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: RolesEditorFormula,
 } satisfies Meta<typeof RolesEditorFormula>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				RolesEditorFormula,
 			},
-			props: Object.keys(argTypes),
-			template: '<RolesEditorFormula v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<RolesEditorFormula v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
index 1c3871ddb9..47cec03136 100644
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ b/packages/frontend/src/pages/admin/_header_.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _header_,
 } satisfies Meta<typeof _header_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_header_,
 			},
-			props: Object.keys(argTypes),
-			template: '<_header_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_header_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
index 3c64cb36ad..4de75bccb7 100644
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ b/packages/frontend/src/pages/admin/abuses.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: abuses_,
 } satisfies Meta<typeof abuses_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				abuses_,
 			},
-			props: Object.keys(argTypes),
-			template: '<abuses_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<abuses_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
index 5f939afecf..e56f72a2bf 100644
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ b/packages/frontend/src/pages/admin/ads.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: ads_,
 } satisfies Meta<typeof ads_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				ads_,
 			},
-			props: Object.keys(argTypes),
-			template: '<ads_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<ads_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
index f9416c0c24..9a0c0828be 100644
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ b/packages/frontend/src/pages/admin/announcements.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: announcements_,
 } satisfies Meta<typeof announcements_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				announcements_,
 			},
-			props: Object.keys(argTypes),
-			template: '<announcements_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<announcements_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
index c76808edec..366ef08609 100644
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ b/packages/frontend/src/pages/admin/bot-protection.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: bot_protection,
 } satisfies Meta<typeof bot_protection>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				bot_protection,
 			},
-			props: Object.keys(argTypes),
-			template: '<bot_protection v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<bot_protection v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
index a2d240489a..69c10b786d 100644
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ b/packages/frontend/src/pages/admin/database.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: database_,
 } satisfies Meta<typeof database_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				database_,
 			},
-			props: Object.keys(argTypes),
-			template: '<database_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<database_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
index 7433c44136..2fb9310194 100644
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/email-settings.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: email_settings,
 } satisfies Meta<typeof email_settings>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				email_settings,
 			},
-			props: Object.keys(argTypes),
-			template: '<email_settings v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<email_settings v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
index 761fdeee3f..8be691fb9e 100644
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ b/packages/frontend/src/pages/admin/federation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: federation_,
 } satisfies Meta<typeof federation_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				federation_,
 			},
-			props: Object.keys(argTypes),
-			template: '<federation_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<federation_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
index 6e868ec81a..8876366153 100644
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ b/packages/frontend/src/pages/admin/files.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: files_,
 } satisfies Meta<typeof files_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				files_,
 			},
-			props: Object.keys(argTypes),
-			template: '<files_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<files_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
index 05ff1a3703..135df4dd59 100644
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ b/packages/frontend/src/pages/admin/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
index bdf12a8d21..3e7d3f905b 100644
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ b/packages/frontend/src/pages/admin/instance-block.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: instance_block,
 } satisfies Meta<typeof instance_block>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				instance_block,
 			},
-			props: Object.keys(argTypes),
-			template: '<instance_block v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<instance_block v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
index e2ce3b23cc..48eea34542 100644
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ b/packages/frontend/src/pages/admin/moderation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: moderation_,
 } satisfies Meta<typeof moderation_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				moderation_,
 			},
-			props: Object.keys(argTypes),
-			template: '<moderation_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<moderation_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
index b2815ae3ff..d9da71dbdc 100644
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ b/packages/frontend/src/pages/admin/object-storage.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: object_storage,
 } satisfies Meta<typeof object_storage>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				object_storage,
 			},
-			props: Object.keys(argTypes),
-			template: '<object_storage v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<object_storage v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
index 4015dd47c6..3dd5a9e369 100644
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ b/packages/frontend/src/pages/admin/other-settings.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: other_settings,
 } satisfies Meta<typeof other_settings>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				other_settings,
 			},
-			props: Object.keys(argTypes),
-			template: '<other_settings v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<other_settings v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
index c91a005f4d..c809efec08 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_active_users,
 } satisfies Meta<typeof overview_active_users>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_active_users,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_active_users v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_active_users v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
index 6c750a11a7..62576f1b57 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_ap_requests,
 } satisfies Meta<typeof overview_ap_requests>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_ap_requests,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_ap_requests v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_ap_requests v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
index 64fa535a55..46d085a8b0 100644
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.federation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_federation,
 } satisfies Meta<typeof overview_federation>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_federation,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_federation v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_federation v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
index f9fb6cd8e8..dbb25c3921 100644
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_heatmap,
 } satisfies Meta<typeof overview_heatmap>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_heatmap,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_heatmap v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_heatmap v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
index ac3a86098e..e8cdbebd72 100644
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.instances.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_instances,
 } satisfies Meta<typeof overview_instances>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_instances,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_instances v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_instances v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
index 4c6d2cf7cf..0def4155fe 100644
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_moderators,
 } satisfies Meta<typeof overview_moderators>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_moderators,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_moderators v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_moderators v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
index e9893549ee..531b14729d 100644
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.pie.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_pie,
 } satisfies Meta<typeof overview_pie>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_pie,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_pie v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_pie v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
index 2cbb7d78a8..d51dde7ede 100644
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_queue_chart,
 } satisfies Meta<typeof overview_queue_chart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_queue_chart,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_queue_chart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_queue_chart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
index 0fec1c1a7c..e2b2be47e3 100644
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.queue.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_queue,
 } satisfies Meta<typeof overview_queue>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_queue,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_queue v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_queue v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
index 25a1594327..afe1e34c3d 100644
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.retention.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_retention,
 } satisfies Meta<typeof overview_retention>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_retention,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_retention v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_retention v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
index 059ada5c9a..75aa173aa6 100644
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stats.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_stats,
 } satisfies Meta<typeof overview_stats>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_stats,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_stats v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_stats v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
index 9c4f2f73ac..b8897c2b7c 100644
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_,
 } satisfies Meta<typeof overview_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
index 125c44f61f..0c3d806d9a 100644
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ b/packages/frontend/src/pages/admin/overview.users.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: overview_users,
 } satisfies Meta<typeof overview_users>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				overview_users,
 			},
-			props: Object.keys(argTypes),
-			template: '<overview_users v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<overview_users v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
index 2a7a4bb6f7..9ef9552fc4 100644
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ b/packages/frontend/src/pages/admin/proxy-account.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: proxy_account,
 } satisfies Meta<typeof proxy_account>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				proxy_account,
 			},
-			props: Object.keys(argTypes),
-			template: '<proxy_account v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<proxy_account v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
index 65ca99ccb8..ea778bebb5 100644
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: queue_chart_chart,
 } satisfies Meta<typeof queue_chart_chart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				queue_chart_chart,
 			},
-			props: Object.keys(argTypes),
-			template: '<queue_chart_chart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<queue_chart_chart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
index f08b88dad5..c94f627251 100644
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.chart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: queue_chart,
 } satisfies Meta<typeof queue_chart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				queue_chart,
 			},
-			props: Object.keys(argTypes),
-			template: '<queue_chart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<queue_chart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
index e13f4bf536..0f8207461b 100644
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ b/packages/frontend/src/pages/admin/queue.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: queue_,
 } satisfies Meta<typeof queue_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				queue_,
 			},
-			props: Object.keys(argTypes),
-			template: '<queue_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<queue_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
index 8aba314618..89fdf2aade 100644
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ b/packages/frontend/src/pages/admin/relays.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: relays_,
 } satisfies Meta<typeof relays_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				relays_,
 			},
-			props: Object.keys(argTypes),
-			template: '<relays_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<relays_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
index 826b78af42..c70098771e 100644
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.edit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: roles_edit,
 } satisfies Meta<typeof roles_edit>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				roles_edit,
 			},
-			props: Object.keys(argTypes),
-			template: '<roles_edit v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<roles_edit v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
index 1bac7a7b60..ebd4064e0e 100644
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.editor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: roles_editor,
 } satisfies Meta<typeof roles_editor>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				roles_editor,
 			},
-			props: Object.keys(argTypes),
-			template: '<roles_editor v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<roles_editor v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
index 76f0d02ee3..9e41dc227d 100644
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.role.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: roles_role,
 } satisfies Meta<typeof roles_role>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				roles_role,
 			},
-			props: Object.keys(argTypes),
-			template: '<roles_role v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<roles_role v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
index 41b6f82f68..cb5b29059f 100644
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ b/packages/frontend/src/pages/admin/roles.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: roles_,
 } satisfies Meta<typeof roles_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				roles_,
 			},
-			props: Object.keys(argTypes),
-			template: '<roles_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<roles_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
index 667dc1f28d..3de0725c60 100644
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ b/packages/frontend/src/pages/admin/security.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: security_,
 } satisfies Meta<typeof security_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				security_,
 			},
-			props: Object.keys(argTypes),
-			template: '<security_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<security_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
index 2646dd894c..9acb4ec34e 100644
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ b/packages/frontend/src/pages/admin/settings.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: settings_,
 } satisfies Meta<typeof settings_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				settings_,
 			},
-			props: Object.keys(argTypes),
-			template: '<settings_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<settings_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
index 7ec0fd4060..d845f76520 100644
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ b/packages/frontend/src/pages/admin/users.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: users_,
 } satisfies Meta<typeof users_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				users_,
 			},
-			props: Object.keys(argTypes),
-			template: '<users_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<users_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
index 65afabd5df..b1a4ee1d82 100644
--- a/packages/frontend/src/pages/ads.stories.ts
+++ b/packages/frontend/src/pages/ads.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: ads_,
 } satisfies Meta<typeof ads_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				ads_,
 			},
-			props: Object.keys(argTypes),
-			template: '<ads_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<ads_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
index 1488a805d6..0f8d34972a 100644
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ b/packages/frontend/src/pages/announcements.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: announcements_,
 } satisfies Meta<typeof announcements_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				announcements_,
 			},
-			props: Object.keys(argTypes),
-			template: '<announcements_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<announcements_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
index f50785a714..8e07aeb956 100644
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ b/packages/frontend/src/pages/antenna-timeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: antenna_timeline,
 } satisfies Meta<typeof antenna_timeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				antenna_timeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<antenna_timeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<antenna_timeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
index 9c503f2fc2..0475dfc3b8 100644
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ b/packages/frontend/src/pages/api-console.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: api_console,
 } satisfies Meta<typeof api_console>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				api_console,
 			},
-			props: Object.keys(argTypes),
-			template: '<api_console v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<api_console v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
index 4b0d95596b..643ec487c7 100644
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ b/packages/frontend/src/pages/auth.form.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: auth_form,
 } satisfies Meta<typeof auth_form>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				auth_form,
 			},
-			props: Object.keys(argTypes),
-			template: '<auth_form v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<auth_form v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
index 235d5384be..827ac75eb3 100644
--- a/packages/frontend/src/pages/auth.stories.ts
+++ b/packages/frontend/src/pages/auth.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: auth_,
 } satisfies Meta<typeof auth_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				auth_,
 			},
-			props: Object.keys(argTypes),
-			template: '<auth_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<auth_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
index 7663db90e6..f30e5e07c4 100644
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ b/packages/frontend/src/pages/channel-editor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: channel_editor,
 } satisfies Meta<typeof channel_editor>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				channel_editor,
 			},
-			props: Object.keys(argTypes),
-			template: '<channel_editor v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<channel_editor v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
index 550d937545..52b690ee02 100644
--- a/packages/frontend/src/pages/channel.stories.ts
+++ b/packages/frontend/src/pages/channel.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: channel_,
 } satisfies Meta<typeof channel_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				channel_,
 			},
-			props: Object.keys(argTypes),
-			template: '<channel_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<channel_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
index e0f79465ee..a50d2e46f6 100644
--- a/packages/frontend/src/pages/channels.stories.ts
+++ b/packages/frontend/src/pages/channels.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: channels_,
 } satisfies Meta<typeof channels_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				channels_,
 			},
-			props: Object.keys(argTypes),
-			template: '<channels_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<channels_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
index 1e5dfcfae0..010b1cb2a7 100644
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ b/packages/frontend/src/pages/clicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: clicker_,
 } satisfies Meta<typeof clicker_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				clicker_,
 			},
-			props: Object.keys(argTypes),
-			template: '<clicker_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<clicker_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
index 9921b57e1f..ad35528eea 100644
--- a/packages/frontend/src/pages/clip.stories.ts
+++ b/packages/frontend/src/pages/clip.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: clip_,
 } satisfies Meta<typeof clip_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				clip_,
 			},
-			props: Object.keys(argTypes),
-			template: '<clip_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<clip_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
index 6d8cb181d7..6ff43ad8b6 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: custom_emojis_manager,
 } satisfies Meta<typeof custom_emojis_manager>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				custom_emojis_manager,
 			},
-			props: Object.keys(argTypes),
-			template: '<custom_emojis_manager v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<custom_emojis_manager v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
index b51b0f5a06..94f85e773c 100644
--- a/packages/frontend/src/pages/drive.stories.ts
+++ b/packages/frontend/src/pages/drive.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: drive_,
 } satisfies Meta<typeof drive_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				drive_,
 			},
-			props: Object.keys(argTypes),
-			template: '<drive_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<drive_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
index 13e66cd5f5..5ff9d4c0b5 100644
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: emoji_edit_dialog,
 } satisfies Meta<typeof emoji_edit_dialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				emoji_edit_dialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<emoji_edit_dialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<emoji_edit_dialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
index 0eb9a82c55..78964f570c 100644
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ b/packages/frontend/src/pages/emojis.emoji.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: emojis_emoji,
 } satisfies Meta<typeof emojis_emoji>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				emojis_emoji,
 			},
-			props: Object.keys(argTypes),
-			template: '<emojis_emoji v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<emojis_emoji v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
index aa6fb9a641..a9e0a1fb2a 100644
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ b/packages/frontend/src/pages/explore.featured.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: explore_featured,
 } satisfies Meta<typeof explore_featured>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				explore_featured,
 			},
-			props: Object.keys(argTypes),
-			template: '<explore_featured v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<explore_featured v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
index 5a033ff659..76b5a3e6d2 100644
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ b/packages/frontend/src/pages/explore.roles.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: explore_roles,
 } satisfies Meta<typeof explore_roles>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				explore_roles,
 			},
-			props: Object.keys(argTypes),
-			template: '<explore_roles v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<explore_roles v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
index 73b55b8d3e..108282a02c 100644
--- a/packages/frontend/src/pages/explore.stories.ts
+++ b/packages/frontend/src/pages/explore.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: explore_,
 } satisfies Meta<typeof explore_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				explore_,
 			},
-			props: Object.keys(argTypes),
-			template: '<explore_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<explore_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
index ad708a0732..b89e297167 100644
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ b/packages/frontend/src/pages/explore.users.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: explore_users,
 } satisfies Meta<typeof explore_users>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				explore_users,
 			},
-			props: Object.keys(argTypes),
-			template: '<explore_users v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<explore_users v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
index 3bcc85760a..e8a19503f6 100644
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ b/packages/frontend/src/pages/favorites.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: favorites_,
 } satisfies Meta<typeof favorites_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				favorites_,
 			},
-			props: Object.keys(argTypes),
-			template: '<favorites_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<favorites_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
index addaa232d2..4437aca742 100644
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-edit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: flash_edit,
 } satisfies Meta<typeof flash_edit>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				flash_edit,
 			},
-			props: Object.keys(argTypes),
-			template: '<flash_edit v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<flash_edit v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
index 3db663e6a4..46997adaf5 100644
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ b/packages/frontend/src/pages/flash/flash-index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: flash_index,
 } satisfies Meta<typeof flash_index>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				flash_index,
 			},
-			props: Object.keys(argTypes),
-			template: '<flash_index v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<flash_index v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
index 760fff729e..f0e4bec28f 100644
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ b/packages/frontend/src/pages/flash/flash.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: flash_,
 } satisfies Meta<typeof flash_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				flash_,
 			},
-			props: Object.keys(argTypes),
-			template: '<flash_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<flash_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
index 691064cbe8..e476568ffd 100644
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ b/packages/frontend/src/pages/follow-requests.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: follow_requests,
 } satisfies Meta<typeof follow_requests>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				follow_requests,
 			},
-			props: Object.keys(argTypes),
-			template: '<follow_requests v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<follow_requests v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
index 51bffee3e9..57ecbf687d 100644
--- a/packages/frontend/src/pages/follow.stories.ts
+++ b/packages/frontend/src/pages/follow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: follow_,
 } satisfies Meta<typeof follow_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				follow_,
 			},
-			props: Object.keys(argTypes),
-			template: '<follow_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<follow_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
index 11fa82a96a..0205511cf4 100644
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ b/packages/frontend/src/pages/gallery/edit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: edit_,
 } satisfies Meta<typeof edit_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				edit_,
 			},
-			props: Object.keys(argTypes),
-			template: '<edit_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<edit_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
index 4d1112aa3f..ac17fc0477 100644
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ b/packages/frontend/src/pages/gallery/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
index f3dbec3349..f49938bbf8 100644
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ b/packages/frontend/src/pages/gallery/post.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: post_,
 } satisfies Meta<typeof post_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				post_,
 			},
-			props: Object.keys(argTypes),
-			template: '<post_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<post_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
index eede2a59ba..188ce8ec6e 100644
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ b/packages/frontend/src/pages/instance-info.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: instance_info,
 } satisfies Meta<typeof instance_info>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				instance_info,
 			},
-			props: Object.keys(argTypes),
-			template: '<instance_info v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<instance_info v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
index 739f935dfd..2814d117fb 100644
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ b/packages/frontend/src/pages/miauth.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: miauth_,
 } satisfies Meta<typeof miauth_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				miauth_,
 			},
-			props: Object.keys(argTypes),
-			template: '<miauth_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<miauth_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
index 205ed53dec..149e73a9ea 100644
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/create.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: create_,
 } satisfies Meta<typeof create_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				create_,
 			},
-			props: Object.keys(argTypes),
-			template: '<create_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<create_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
index 37c3eccc21..9771b4ffd5 100644
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/edit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: edit_,
 } satisfies Meta<typeof edit_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				edit_,
 			},
-			props: Object.keys(argTypes),
-			template: '<edit_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<edit_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
index df9b81d5c0..0e3c0e1855 100644
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/editor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: editor_,
 } satisfies Meta<typeof editor_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				editor_,
 			},
-			props: Object.keys(argTypes),
-			template: '<editor_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<editor_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
index 0c71408871..0a38dec601 100644
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ b/packages/frontend/src/pages/my-antennas/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
index aec5d71aae..71fd4314dc 100644
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ b/packages/frontend/src/pages/my-clips/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
index 0f3995a484..a945b45ca8 100644
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ b/packages/frontend/src/pages/my-lists/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
index 99e6c999b9..e636179b38 100644
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ b/packages/frontend/src/pages/my-lists/list.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: list_,
 } satisfies Meta<typeof list_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				list_,
 			},
-			props: Object.keys(argTypes),
-			template: '<list_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<list_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
index 7883045697..99715854d3 100644
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ b/packages/frontend/src/pages/not-found.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: not_found,
 } satisfies Meta<typeof not_found>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				not_found,
 			},
-			props: Object.keys(argTypes),
-			template: '<not_found v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<not_found v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
index 5510f61bd9..de8ef127d8 100644
--- a/packages/frontend/src/pages/note.stories.ts
+++ b/packages/frontend/src/pages/note.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: note_,
 } satisfies Meta<typeof note_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				note_,
 			},
-			props: Object.keys(argTypes),
-			template: '<note_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<note_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
index bef350a4c1..e7fab3655b 100644
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ b/packages/frontend/src/pages/notifications.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: notifications_,
 } satisfies Meta<typeof notifications_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				notifications_,
 			},
-			props: Object.keys(argTypes),
-			template: '<notifications_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<notifications_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
index 67b9b8c35b..372952a2b6 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_el_image,
 } satisfies Meta<typeof page_editor_el_image>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_el_image,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_el_image v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_el_image v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
index 7377d2b75d..c341e18988 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_el_note,
 } satisfies Meta<typeof page_editor_el_note>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_el_note,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_el_note v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_el_note v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
index c93304330d..90bd4f7a4e 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_el_section,
 } satisfies Meta<typeof page_editor_el_section>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_el_section,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_el_section v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_el_section v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
index 4486012428..46540991f0 100644
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_el_text,
 } satisfies Meta<typeof page_editor_el_text>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_el_text,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_el_text v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_el_text v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
index fb29d1f4e1..5cf3158d6e 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_blocks,
 } satisfies Meta<typeof page_editor_blocks>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_blocks,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_blocks v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_blocks v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
index 252892c264..9f035212fa 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor_container,
 } satisfies Meta<typeof page_editor_container>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor_container,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor_container v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor_container v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
index f6ff74cd3d..191b566530 100644
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_editor,
 } satisfies Meta<typeof page_editor>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_editor,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_editor v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_editor v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
index 2e988a1575..10e197dc14 100644
--- a/packages/frontend/src/pages/page.stories.ts
+++ b/packages/frontend/src/pages/page.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: page_,
 } satisfies Meta<typeof page_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				page_,
 			},
-			props: Object.keys(argTypes),
-			template: '<page_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<page_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
index 1745427170..5359f0ac82 100644
--- a/packages/frontend/src/pages/pages.stories.ts
+++ b/packages/frontend/src/pages/pages.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: pages_,
 } satisfies Meta<typeof pages_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				pages_,
 			},
-			props: Object.keys(argTypes),
-			template: '<pages_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<pages_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
index a73091c83f..0bdb067ab3 100644
--- a/packages/frontend/src/pages/preview.stories.ts
+++ b/packages/frontend/src/pages/preview.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: preview_,
 } satisfies Meta<typeof preview_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				preview_,
 			},
-			props: Object.keys(argTypes),
-			template: '<preview_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<preview_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
index 8a079f7c26..3266071424 100644
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ b/packages/frontend/src/pages/registry.keys.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: registry_keys,
 } satisfies Meta<typeof registry_keys>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				registry_keys,
 			},
-			props: Object.keys(argTypes),
-			template: '<registry_keys v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<registry_keys v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
index 7f042eb7dd..e0af01e1f5 100644
--- a/packages/frontend/src/pages/registry.stories.ts
+++ b/packages/frontend/src/pages/registry.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: registry_,
 } satisfies Meta<typeof registry_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				registry_,
 			},
-			props: Object.keys(argTypes),
-			template: '<registry_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<registry_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
index 2bb17f1d2d..44b848b9ce 100644
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ b/packages/frontend/src/pages/registry.value.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: registry_value,
 } satisfies Meta<typeof registry_value>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				registry_value,
 			},
-			props: Object.keys(argTypes),
-			template: '<registry_value v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<registry_value v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
index b2d0d2cf50..aa0c476491 100644
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ b/packages/frontend/src/pages/reset-password.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: reset_password,
 } satisfies Meta<typeof reset_password>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				reset_password,
 			},
-			props: Object.keys(argTypes),
-			template: '<reset_password v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<reset_password v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
index f8b3bfc813..3adcc107f1 100644
--- a/packages/frontend/src/pages/role.stories.ts
+++ b/packages/frontend/src/pages/role.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: role_,
 } satisfies Meta<typeof role_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				role_,
 			},
-			props: Object.keys(argTypes),
-			template: '<role_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<role_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
index 5ce010698e..94fcff0d9d 100644
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ b/packages/frontend/src/pages/scratchpad.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: scratchpad_,
 } satisfies Meta<typeof scratchpad_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				scratchpad_,
 			},
-			props: Object.keys(argTypes),
-			template: '<scratchpad_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<scratchpad_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
index 92964f42e9..fe10f4c2c2 100644
--- a/packages/frontend/src/pages/search.stories.ts
+++ b/packages/frontend/src/pages/search.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: search_,
 } satisfies Meta<typeof search_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				search_,
 			},
-			props: Object.keys(argTypes),
-			template: '<search_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<search_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
index 2eed85d760..8892f6bc3d 100644
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _2fa_qrdialog,
 } satisfies Meta<typeof _2fa_qrdialog>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_2fa_qrdialog,
 			},
-			props: Object.keys(argTypes),
-			template: '<_2fa_qrdialog v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_2fa_qrdialog v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
index 7f66edf240..30280a5c48 100644
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ b/packages/frontend/src/pages/settings/2fa.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: _2fa,
 } satisfies Meta<typeof _2fa>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				_2fa,
 			},
-			props: Object.keys(argTypes),
-			template: '<_2fa v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<_2fa v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
index 2194e97ffd..4150d31786 100644
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ b/packages/frontend/src/pages/settings/account-info.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: account_info,
 } satisfies Meta<typeof account_info>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				account_info,
 			},
-			props: Object.keys(argTypes),
-			template: '<account_info v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<account_info v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
index b50f0862fc..1a88aef4c5 100644
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ b/packages/frontend/src/pages/settings/accounts.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: accounts_,
 } satisfies Meta<typeof accounts_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				accounts_,
 			},
-			props: Object.keys(argTypes),
-			template: '<accounts_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<accounts_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
index 66140aa8ba..54e9eaffdb 100644
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ b/packages/frontend/src/pages/settings/api.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: api_,
 } satisfies Meta<typeof api_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				api_,
 			},
-			props: Object.keys(argTypes),
-			template: '<api_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<api_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
index 3a202bd10e..ccc13f96f9 100644
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ b/packages/frontend/src/pages/settings/apps.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: apps_,
 } satisfies Meta<typeof apps_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				apps_,
 			},
-			props: Object.keys(argTypes),
-			template: '<apps_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<apps_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
index e411cf8947..f45ce4b5c2 100644
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ b/packages/frontend/src/pages/settings/custom-css.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: custom_css,
 } satisfies Meta<typeof custom_css>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				custom_css,
 			},
-			props: Object.keys(argTypes),
-			template: '<custom_css v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<custom_css v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
index 74aaec4430..f9f566c698 100644
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ b/packages/frontend/src/pages/settings/deck.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: deck_,
 } satisfies Meta<typeof deck_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				deck_,
 			},
-			props: Object.keys(argTypes),
-			template: '<deck_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<deck_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
index f71df1bab6..5734b94cb7 100644
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ b/packages/frontend/src/pages/settings/delete-account.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: delete_account,
 } satisfies Meta<typeof delete_account>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				delete_account,
 			},
-			props: Object.keys(argTypes),
-			template: '<delete_account v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<delete_account v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
index be593fc2d2..55faccffd5 100644
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ b/packages/frontend/src/pages/settings/drive.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: drive_,
 } satisfies Meta<typeof drive_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				drive_,
 			},
-			props: Object.keys(argTypes),
-			template: '<drive_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<drive_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
index 42ea878fa3..98defa44a8 100644
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ b/packages/frontend/src/pages/settings/email.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: email_,
 } satisfies Meta<typeof email_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				email_,
 			},
-			props: Object.keys(argTypes),
-			template: '<email_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<email_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
index 3a97f8f550..589807d90c 100644
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ b/packages/frontend/src/pages/settings/general.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: general_,
 } satisfies Meta<typeof general_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				general_,
 			},
-			props: Object.keys(argTypes),
-			template: '<general_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<general_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
index a050a23639..3babedf181 100644
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ b/packages/frontend/src/pages/settings/import-export.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: import_export,
 } satisfies Meta<typeof import_export>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				import_export,
 			},
-			props: Object.keys(argTypes),
-			template: '<import_export v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<import_export v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
index 3a5c6f58b1..537c0a9add 100644
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ b/packages/frontend/src/pages/settings/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
index 69a9d58232..9e23409158 100644
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/instance-mute.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: instance_mute,
 } satisfies Meta<typeof instance_mute>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				instance_mute,
 			},
-			props: Object.keys(argTypes),
-			template: '<instance_mute v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<instance_mute v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
index 4962ab1305..436e102c4f 100644
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ b/packages/frontend/src/pages/settings/mute-block.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: mute_block,
 } satisfies Meta<typeof mute_block>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				mute_block,
 			},
-			props: Object.keys(argTypes),
-			template: '<mute_block v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<mute_block v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
index 68e710c57d..8ba931625f 100644
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ b/packages/frontend/src/pages/settings/navbar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: navbar_,
 } satisfies Meta<typeof navbar_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				navbar_,
 			},
-			props: Object.keys(argTypes),
-			template: '<navbar_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<navbar_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
index 85540d3675..a5fdb40175 100644
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ b/packages/frontend/src/pages/settings/notifications.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: notifications_,
 } satisfies Meta<typeof notifications_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				notifications_,
 			},
-			props: Object.keys(argTypes),
-			template: '<notifications_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<notifications_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
index da07d5f054..c450f45eb6 100644
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ b/packages/frontend/src/pages/settings/other.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: other_,
 } satisfies Meta<typeof other_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				other_,
 			},
-			props: Object.keys(argTypes),
-			template: '<other_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<other_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
index 5b00437878..287be56db7 100644
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.install.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: plugin_install,
 } satisfies Meta<typeof plugin_install>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				plugin_install,
 			},
-			props: Object.keys(argTypes),
-			template: '<plugin_install v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<plugin_install v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
index 5fec62074b..8bb4d2ac3b 100644
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ b/packages/frontend/src/pages/settings/plugin.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: plugin_,
 } satisfies Meta<typeof plugin_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				plugin_,
 			},
-			props: Object.keys(argTypes),
-			template: '<plugin_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<plugin_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
index 2be2ec4910..4241696892 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: preferences_backups,
 } satisfies Meta<typeof preferences_backups>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				preferences_backups,
 			},
-			props: Object.keys(argTypes),
-			template: '<preferences_backups v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<preferences_backups v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
index 93f712be4f..74e2d42442 100644
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ b/packages/frontend/src/pages/settings/privacy.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: privacy_,
 } satisfies Meta<typeof privacy_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				privacy_,
 			},
-			props: Object.keys(argTypes),
-			template: '<privacy_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<privacy_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
index 5558416788..30437a471f 100644
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ b/packages/frontend/src/pages/settings/profile.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: profile_,
 } satisfies Meta<typeof profile_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				profile_,
 			},
-			props: Object.keys(argTypes),
-			template: '<profile_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<profile_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
index 82b0875c14..c2fd4d5658 100644
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ b/packages/frontend/src/pages/settings/reaction.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: reaction_,
 } satisfies Meta<typeof reaction_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				reaction_,
 			},
-			props: Object.keys(argTypes),
-			template: '<reaction_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<reaction_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
index e894a75798..2a8552e7c2 100644
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ b/packages/frontend/src/pages/settings/roles.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: roles_,
 } satisfies Meta<typeof roles_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				roles_,
 			},
-			props: Object.keys(argTypes),
-			template: '<roles_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<roles_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
index 99cc608f99..0efc526bf6 100644
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ b/packages/frontend/src/pages/settings/security.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: security_,
 } satisfies Meta<typeof security_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				security_,
 			},
-			props: Object.keys(argTypes),
-			template: '<security_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<security_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
index d25d2821ef..b961fca8cd 100644
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: sounds_sound,
 } satisfies Meta<typeof sounds_sound>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				sounds_sound,
 			},
-			props: Object.keys(argTypes),
-			template: '<sounds_sound v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<sounds_sound v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
index 19bab607f8..b830240d7f 100644
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ b/packages/frontend/src/pages/settings/sounds.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: sounds_,
 } satisfies Meta<typeof sounds_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				sounds_,
 			},
-			props: Object.keys(argTypes),
-			template: '<sounds_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<sounds_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
index 6a8e48ef74..910d3604ac 100644
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbar_statusbar,
 } satisfies Meta<typeof statusbar_statusbar>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbar_statusbar,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbar_statusbar v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbar_statusbar v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
index 37c31a34c1..832ad9b125 100644
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ b/packages/frontend/src/pages/settings/statusbar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbar_,
 } satisfies Meta<typeof statusbar_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbar_,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbar_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbar_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
index 5ef535cca2..04de316fb2 100644
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.install.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: theme_install,
 } satisfies Meta<typeof theme_install>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				theme_install,
 			},
-			props: Object.keys(argTypes),
-			template: '<theme_install v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<theme_install v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
index c1dff7467d..3ce793e048 100644
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.manage.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: theme_manage,
 } satisfies Meta<typeof theme_manage>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				theme_manage,
 			},
-			props: Object.keys(argTypes),
-			template: '<theme_manage v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<theme_manage v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
index e746a2e119..cb1dcbb9c5 100644
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ b/packages/frontend/src/pages/settings/theme.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: theme_,
 } satisfies Meta<typeof theme_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				theme_,
 			},
-			props: Object.keys(argTypes),
-			template: '<theme_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<theme_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
index e3eaaef35f..e2b93b6fb9 100644
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: webhook_edit,
 } satisfies Meta<typeof webhook_edit>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				webhook_edit,
 			},
-			props: Object.keys(argTypes),
-			template: '<webhook_edit v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<webhook_edit v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
index 505e854cd8..ab9ad257e2 100644
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.new.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: webhook_new,
 } satisfies Meta<typeof webhook_new>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				webhook_new,
 			},
-			props: Object.keys(argTypes),
-			template: '<webhook_new v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<webhook_new v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
index 80176507bc..716501ea8d 100644
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ b/packages/frontend/src/pages/settings/webhook.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: webhook_,
 } satisfies Meta<typeof webhook_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				webhook_,
 			},
-			props: Object.keys(argTypes),
-			template: '<webhook_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<webhook_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
index 7fe90196d8..24c2f54c7d 100644
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ b/packages/frontend/src/pages/settings/word-mute.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: word_mute,
 } satisfies Meta<typeof word_mute>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				word_mute,
 			},
-			props: Object.keys(argTypes),
-			template: '<word_mute v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<word_mute v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
index e847f63e72..c6c21e5535 100644
--- a/packages/frontend/src/pages/share.stories.ts
+++ b/packages/frontend/src/pages/share.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: share_,
 } satisfies Meta<typeof share_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				share_,
 			},
-			props: Object.keys(argTypes),
-			template: '<share_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<share_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
index 2ada59a214..6b566c763f 100644
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ b/packages/frontend/src/pages/signup-complete.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: signup_complete,
 } satisfies Meta<typeof signup_complete>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				signup_complete,
 			},
-			props: Object.keys(argTypes),
-			template: '<signup_complete v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<signup_complete v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
index 513f4c7472..93433f432c 100644
--- a/packages/frontend/src/pages/tag.stories.ts
+++ b/packages/frontend/src/pages/tag.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: tag_,
 } satisfies Meta<typeof tag_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				tag_,
 			},
-			props: Object.keys(argTypes),
-			template: '<tag_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<tag_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
index 57ea65094d..fd7dc6bebf 100644
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ b/packages/frontend/src/pages/theme-editor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: theme_editor,
 } satisfies Meta<typeof theme_editor>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				theme_editor,
 			},
-			props: Object.keys(argTypes),
-			template: '<theme_editor v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<theme_editor v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
index b222fe0295..71a38756ed 100644
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ b/packages/frontend/src/pages/timeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: timeline_,
 } satisfies Meta<typeof timeline_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				timeline_,
 			},
-			props: Object.keys(argTypes),
-			template: '<timeline_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<timeline_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
index cdbe3c3a51..d53d776fce 100644
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ b/packages/frontend/src/pages/timeline.tutorial.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: timeline_tutorial,
 } satisfies Meta<typeof timeline_tutorial>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				timeline_tutorial,
 			},
-			props: Object.keys(argTypes),
-			template: '<timeline_tutorial v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<timeline_tutorial v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
index 5960355e6e..c5eb34263d 100644
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ b/packages/frontend/src/pages/user-info.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: user_info,
 } satisfies Meta<typeof user_info>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				user_info,
 			},
-			props: Object.keys(argTypes),
-			template: '<user_info v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<user_info v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
index 2fb33fdc47..bf3cd9f74b 100644
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ b/packages/frontend/src/pages/user-list-timeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: user_list_timeline,
 } satisfies Meta<typeof user_list_timeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				user_list_timeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<user_list_timeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<user_list_timeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
index 0911f79c3d..5218d646f1 100644
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ b/packages/frontend/src/pages/user-tag.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: user_tag,
 } satisfies Meta<typeof user_tag>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				user_tag,
 			},
-			props: Object.keys(argTypes),
-			template: '<user_tag v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<user_tag v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
index 781149d823..ee2010c26e 100644
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ b/packages/frontend/src/pages/user/achievements.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: achievements_,
 } satisfies Meta<typeof achievements_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				achievements_,
 			},
-			props: Object.keys(argTypes),
-			template: '<achievements_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<achievements_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
index e95f2d4efb..6820454561 100644
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ b/packages/frontend/src/pages/user/activity.following.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: activity_following,
 } satisfies Meta<typeof activity_following>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				activity_following,
 			},
-			props: Object.keys(argTypes),
-			template: '<activity_following v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<activity_following v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
index 94aee455b0..3afec1a492 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: activity_heatmap,
 } satisfies Meta<typeof activity_heatmap>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				activity_heatmap,
 			},
-			props: Object.keys(argTypes),
-			template: '<activity_heatmap v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<activity_heatmap v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
index 107164cb85..8ca58e3feb 100644
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ b/packages/frontend/src/pages/user/activity.notes.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: activity_notes,
 } satisfies Meta<typeof activity_notes>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				activity_notes,
 			},
-			props: Object.keys(argTypes),
-			template: '<activity_notes v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<activity_notes v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
index 44359d8db4..543bacc11f 100644
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ b/packages/frontend/src/pages/user/activity.pv.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: activity_pv,
 } satisfies Meta<typeof activity_pv>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				activity_pv,
 			},
-			props: Object.keys(argTypes),
-			template: '<activity_pv v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<activity_pv v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
index 72f3a3083b..3ff888faee 100644
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ b/packages/frontend/src/pages/user/activity.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: activity_,
 } satisfies Meta<typeof activity_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				activity_,
 			},
-			props: Object.keys(argTypes),
-			template: '<activity_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<activity_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
index dbfef536cb..4e3d683af8 100644
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ b/packages/frontend/src/pages/user/clips.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: clips_,
 } satisfies Meta<typeof clips_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				clips_,
 			},
-			props: Object.keys(argTypes),
-			template: '<clips_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<clips_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
index 27d148a5d0..11edbc8c5a 100644
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ b/packages/frontend/src/pages/user/follow-list.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: follow_list,
 } satisfies Meta<typeof follow_list>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				follow_list,
 			},
-			props: Object.keys(argTypes),
-			template: '<follow_list v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<follow_list v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
index 7dea60770b..ac518d465c 100644
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ b/packages/frontend/src/pages/user/followers.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: followers_,
 } satisfies Meta<typeof followers_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				followers_,
 			},
-			props: Object.keys(argTypes),
-			template: '<followers_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<followers_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
index c9a7c90d1c..005475242e 100644
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ b/packages/frontend/src/pages/user/following.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: following_,
 } satisfies Meta<typeof following_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				following_,
 			},
-			props: Object.keys(argTypes),
-			template: '<following_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<following_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
index 80b96e1ae7..5d14e5a569 100644
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ b/packages/frontend/src/pages/user/gallery.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: gallery_,
 } satisfies Meta<typeof gallery_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				gallery_,
 			},
-			props: Object.keys(argTypes),
-			template: '<gallery_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<gallery_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
index d218681972..7225dcd450 100644
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ b/packages/frontend/src/pages/user/home.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: home_,
 } satisfies Meta<typeof home_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				home_,
 			},
-			props: Object.keys(argTypes),
-			template: '<home_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<home_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
index d3b61fd052..475c33f09f 100644
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ b/packages/frontend/src/pages/user/index.activity.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_activity,
 } satisfies Meta<typeof index_activity>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_activity,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_activity v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_activity v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
index ae0243a631..05c92dbd6d 100644
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ b/packages/frontend/src/pages/user/index.photos.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_photos,
 } satisfies Meta<typeof index_photos>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_photos,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_photos v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_photos v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
index 333acffe8c..a699c0b644 100644
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ b/packages/frontend/src/pages/user/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
index dc256ff791..c44e5c77e0 100644
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ b/packages/frontend/src/pages/user/index.timeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_timeline,
 } satisfies Meta<typeof index_timeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_timeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_timeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_timeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
index 3bab825853..fd4ecbd885 100644
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ b/packages/frontend/src/pages/user/pages.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: pages_,
 } satisfies Meta<typeof pages_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				pages_,
 			},
-			props: Object.keys(argTypes),
-			template: '<pages_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<pages_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
index 0fe75027bf..1859f89fd3 100644
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ b/packages/frontend/src/pages/user/reactions.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: reactions_,
 } satisfies Meta<typeof reactions_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				reactions_,
 			},
-			props: Object.keys(argTypes),
-			template: '<reactions_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<reactions_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
index ff9f11c1b4..54298e9715 100644
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_entrance_a,
 } satisfies Meta<typeof welcome_entrance_a>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_entrance_a,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_entrance_a v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_entrance_a v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
index 1a19c94480..292d32003f 100644
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_entrance_b,
 } satisfies Meta<typeof welcome_entrance_b>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_entrance_b,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_entrance_b v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_entrance_b v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
index 0f4b3c6dde..cc99ce2be2 100644
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_entrance_c,
 } satisfies Meta<typeof welcome_entrance_c>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_entrance_c,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_entrance_c v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_entrance_c v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
index 02ba28a65f..f3ebda8fbf 100644
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ b/packages/frontend/src/pages/welcome.setup.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_setup,
 } satisfies Meta<typeof welcome_setup>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_setup,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_setup v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_setup v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
index 410a460318..afc0f9c57b 100644
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ b/packages/frontend/src/pages/welcome.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_,
 } satisfies Meta<typeof welcome_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
index 06e1849d86..31074ab6ef 100644
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ b/packages/frontend/src/pages/welcome.timeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: welcome_timeline,
 } satisfies Meta<typeof welcome_timeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				welcome_timeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<welcome_timeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<welcome_timeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
index ba8f5f6a2b..8a43ccfc52 100644
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ b/packages/frontend/src/ui/_common_/common.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: common_,
 } satisfies Meta<typeof common_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				common_,
 			},
-			props: Object.keys(argTypes),
-			template: '<common_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<common_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
index c2c66fcf29..de450478bb 100644
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: navbar_for_mobile,
 } satisfies Meta<typeof navbar_for_mobile>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				navbar_for_mobile,
 			},
-			props: Object.keys(argTypes),
-			template: '<navbar_for_mobile v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<navbar_for_mobile v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
index be7162a141..f951fff19e 100644
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ b/packages/frontend/src/ui/_common_/navbar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: navbar_,
 } satisfies Meta<typeof navbar_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				navbar_,
 			},
-			props: Object.keys(argTypes),
-			template: '<navbar_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<navbar_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
index e92fbdccb5..52c83dac23 100644
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ b/packages/frontend/src/ui/_common_/notification.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: notification_,
 } satisfies Meta<typeof notification_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				notification_,
 			},
-			props: Object.keys(argTypes),
-			template: '<notification_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<notification_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
index 2ed6d95db6..8330dce702 100644
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbar_federation,
 } satisfies Meta<typeof statusbar_federation>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbar_federation,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbar_federation v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbar_federation v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
index abec5c48ac..6cd6056a21 100644
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbar_rss,
 } satisfies Meta<typeof statusbar_rss>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbar_rss,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbar_rss v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbar_rss v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
index 648a42ef9c..b44a974a8d 100644
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbar_user_list,
 } satisfies Meta<typeof statusbar_user_list>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbar_user_list,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbar_user_list v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbar_user_list v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
index c5c4b07860..ca8930e6a6 100644
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ b/packages/frontend/src/ui/_common_/statusbars.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: statusbars_,
 } satisfies Meta<typeof statusbars_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				statusbars_,
 			},
-			props: Object.keys(argTypes),
-			template: '<statusbars_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<statusbars_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
index 5c16d68e0e..13fc51987e 100644
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: stream_indicator,
 } satisfies Meta<typeof stream_indicator>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				stream_indicator,
 			},
-			props: Object.keys(argTypes),
-			template: '<stream_indicator v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<stream_indicator v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
index 98856c5ee7..2083ae2e4d 100644
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ b/packages/frontend/src/ui/_common_/upload.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: upload_,
 } satisfies Meta<typeof upload_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				upload_,
 			},
-			props: Object.keys(argTypes),
-			template: '<upload_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<upload_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
index 01d87195d9..8c868699fe 100644
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ b/packages/frontend/src/ui/classic.header.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: classic_header,
 } satisfies Meta<typeof classic_header>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				classic_header,
 			},
-			props: Object.keys(argTypes),
-			template: '<classic_header v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<classic_header v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
index 53fd612f10..f2a0192f8c 100644
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ b/packages/frontend/src/ui/classic.sidebar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: classic_sidebar,
 } satisfies Meta<typeof classic_sidebar>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				classic_sidebar,
 			},
-			props: Object.keys(argTypes),
-			template: '<classic_sidebar v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<classic_sidebar v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
index 1311d4a6fb..2502b0327b 100644
--- a/packages/frontend/src/ui/classic.stories.ts
+++ b/packages/frontend/src/ui/classic.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: classic_,
 } satisfies Meta<typeof classic_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				classic_,
 			},
-			props: Object.keys(argTypes),
-			template: '<classic_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<classic_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
index 5aefba84e8..7c96891c5d 100644
--- a/packages/frontend/src/ui/deck.stories.ts
+++ b/packages/frontend/src/ui/deck.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: deck_,
 } satisfies Meta<typeof deck_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				deck_,
 			},
-			props: Object.keys(argTypes),
-			template: '<deck_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<deck_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
index ebef884ca8..83ac00b568 100644
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ b/packages/frontend/src/ui/deck/antenna-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: antenna_column,
 } satisfies Meta<typeof antenna_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				antenna_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<antenna_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<antenna_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
index b442e1343d..5a44bbc9e5 100644
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ b/packages/frontend/src/ui/deck/channel-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: channel_column,
 } satisfies Meta<typeof channel_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				channel_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<channel_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<channel_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
index 946d2f6b2d..dd38e0513a 100644
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ b/packages/frontend/src/ui/deck/column-core.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: column_core,
 } satisfies Meta<typeof column_core>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				column_core,
 			},
-			props: Object.keys(argTypes),
-			template: '<column_core v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<column_core v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
index fa406a4465..3c471401e6 100644
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ b/packages/frontend/src/ui/deck/column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: column_,
 } satisfies Meta<typeof column_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				column_,
 			},
-			props: Object.keys(argTypes),
-			template: '<column_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<column_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
index 45a767d989..0636349a4f 100644
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ b/packages/frontend/src/ui/deck/direct-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: direct_column,
 } satisfies Meta<typeof direct_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				direct_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<direct_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<direct_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
index 7c582f2e40..bd61e2eca9 100644
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ b/packages/frontend/src/ui/deck/list-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: list_column,
 } satisfies Meta<typeof list_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				list_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<list_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<list_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
index e78e472cd1..97dcb1aaaf 100644
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ b/packages/frontend/src/ui/deck/main-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: main_column,
 } satisfies Meta<typeof main_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				main_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<main_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<main_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
index d76f0dc0f0..5e97cd3676 100644
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ b/packages/frontend/src/ui/deck/mentions-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: mentions_column,
 } satisfies Meta<typeof mentions_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				mentions_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<mentions_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<mentions_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
index b97401f1e8..3dc9e30a7f 100644
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ b/packages/frontend/src/ui/deck/notifications-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: notifications_column,
 } satisfies Meta<typeof notifications_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				notifications_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<notifications_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<notifications_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
index 4f225c2d64..b548763c1f 100644
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ b/packages/frontend/src/ui/deck/tl-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: tl_column,
 } satisfies Meta<typeof tl_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				tl_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<tl_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<tl_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
index 8f9dc0fb9a..ffeb3e71c1 100644
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ b/packages/frontend/src/ui/deck/widgets-column.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: widgets_column,
 } satisfies Meta<typeof widgets_column>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				widgets_column,
 			},
-			props: Object.keys(argTypes),
-			template: '<widgets_column v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<widgets_column v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
index b5df41d152..447f408b7e 100644
--- a/packages/frontend/src/ui/universal.stories.ts
+++ b/packages/frontend/src/ui/universal.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: universal_,
 } satisfies Meta<typeof universal_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				universal_,
 			},
-			props: Object.keys(argTypes),
-			template: '<universal_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<universal_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
index 0896d95505..6684bae399 100644
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ b/packages/frontend/src/ui/universal.widgets.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: universal_widgets,
 } satisfies Meta<typeof universal_widgets>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				universal_widgets,
 			},
-			props: Object.keys(argTypes),
-			template: '<universal_widgets v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<universal_widgets v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
index 8525c0ab24..6f9e5dc56a 100644
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ b/packages/frontend/src/ui/visitor.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: visitor_,
 } satisfies Meta<typeof visitor_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				visitor_,
 			},
-			props: Object.keys(argTypes),
-			template: '<visitor_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<visitor_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
index 08b512b874..4d482e0419 100644
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ b/packages/frontend/src/ui/visitor/a.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: a_,
 } satisfies Meta<typeof a_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				a_,
 			},
-			props: Object.keys(argTypes),
-			template: '<a_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<a_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
index fc061974b1..11dbda5145 100644
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ b/packages/frontend/src/ui/visitor/b.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: b_,
 } satisfies Meta<typeof b_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				b_,
 			},
-			props: Object.keys(argTypes),
-			template: '<b_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<b_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
index 8081c6462d..be8e0e06cd 100644
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ b/packages/frontend/src/ui/visitor/header.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: header_,
 } satisfies Meta<typeof header_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				header_,
 			},
-			props: Object.keys(argTypes),
-			template: '<header_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<header_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
index 8496e82efe..bf06cc59a1 100644
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ b/packages/frontend/src/ui/visitor/kanban.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: kanban_,
 } satisfies Meta<typeof kanban_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				kanban_,
 			},
-			props: Object.keys(argTypes),
-			template: '<kanban_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<kanban_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
index 9785c2144a..592b9137a6 100644
--- a/packages/frontend/src/ui/zen.stories.ts
+++ b/packages/frontend/src/ui/zen.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: zen_,
 } satisfies Meta<typeof zen_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				zen_,
 			},
-			props: Object.keys(argTypes),
-			template: '<zen_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<zen_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
index d83b42bbbb..19727964a1 100644
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetActivity_calendar,
 } satisfies Meta<typeof WidgetActivity_calendar>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetActivity_calendar,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetActivity_calendar v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetActivity_calendar v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
index b9bd1feffe..98033392f8 100644
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetActivity_chart,
 } satisfies Meta<typeof WidgetActivity_chart>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetActivity_chart,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetActivity_chart v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetActivity_chart v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
index 7570bfa5f0..e558de0c4b 100644
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ b/packages/frontend/src/widgets/WidgetActivity.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetActivity,
 } satisfies Meta<typeof WidgetActivity>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetActivity,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetActivity v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetActivity v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
index c0b22bcebd..9cf38696fd 100644
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAichan.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetAichan,
 } satisfies Meta<typeof WidgetAichan>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetAichan,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetAichan v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetAichan v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
index feab02ae0a..39f0183d28 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetAiscript,
 } satisfies Meta<typeof WidgetAiscript>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetAiscript,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetAiscript v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetAiscript v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
index 66ace4844c..669b17bc9c 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetAiscriptApp,
 } satisfies Meta<typeof WidgetAiscriptApp>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetAiscriptApp,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetAiscriptApp v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetAiscriptApp v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
index 31f077155e..936a044e5f 100644
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ b/packages/frontend/src/widgets/WidgetButton.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetButton,
 } satisfies Meta<typeof WidgetButton>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetButton,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetButton v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetButton v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
index 958e0b9489..85c6c0e59a 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetCalendar,
 } satisfies Meta<typeof WidgetCalendar>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetCalendar,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetCalendar v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetCalendar v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
index c791c3471d..cb1dc54552 100644
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetClicker,
 } satisfies Meta<typeof WidgetClicker>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetClicker,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetClicker v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetClicker v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
index 3241fa9fef..cb56024ce9 100644
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetClock.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetClock,
 } satisfies Meta<typeof WidgetClock>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetClock,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetClock v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetClock v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
index 346022d277..34c18f069d 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetDigitalClock,
 } satisfies Meta<typeof WidgetDigitalClock>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetDigitalClock,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetDigitalClock v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetDigitalClock v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
index e28da43405..51de7d9a6b 100644
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ b/packages/frontend/src/widgets/WidgetFederation.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetFederation,
 } satisfies Meta<typeof WidgetFederation>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetFederation,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetFederation v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetFederation v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
index 1e3f33c5f4..ff924a5e5b 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetInstanceCloud,
 } satisfies Meta<typeof WidgetInstanceCloud>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetInstanceCloud,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetInstanceCloud v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetInstanceCloud v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
index 8311f85044..d3efb78fdc 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetInstanceInfo,
 } satisfies Meta<typeof WidgetInstanceInfo>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetInstanceInfo,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetInstanceInfo v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetInstanceInfo v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
index 2ffe72ddc6..5f4a001cc9 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetJobQueue,
 } satisfies Meta<typeof WidgetJobQueue>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetJobQueue,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetJobQueue v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetJobQueue v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
index 830cae5e49..6612257799 100644
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ b/packages/frontend/src/widgets/WidgetMemo.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetMemo,
 } satisfies Meta<typeof WidgetMemo>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetMemo,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetMemo v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetMemo v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
index 9268308689..95cf917171 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetNotifications,
 } satisfies Meta<typeof WidgetNotifications>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetNotifications,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetNotifications v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetNotifications v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
index 5ba9d806c2..9c44e57e36 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetOnlineUsers,
 } satisfies Meta<typeof WidgetOnlineUsers>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetOnlineUsers,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetOnlineUsers v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetOnlineUsers v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
index 9925c229b3..b11ea1505e 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetPhotos,
 } satisfies Meta<typeof WidgetPhotos>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetPhotos,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetPhotos v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetPhotos v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
index cc1c7e0fb9..88c00b08e4 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetPostForm,
 } satisfies Meta<typeof WidgetPostForm>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetPostForm,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetPostForm v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetPostForm v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
index 49a3a24619..70413f210d 100644
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ b/packages/frontend/src/widgets/WidgetProfile.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetProfile,
 } satisfies Meta<typeof WidgetProfile>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetProfile,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetProfile v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetProfile v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
index 3bc462f8c2..e50c22a6c0 100644
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRss.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetRss,
 } satisfies Meta<typeof WidgetRss>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetRss,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetRss v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetRss v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
index 3aeada0707..a10e504a45 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetRssTicker,
 } satisfies Meta<typeof WidgetRssTicker>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetRssTicker,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetRssTicker v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetRssTicker v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
index 84b9978cc6..9bfd1241c7 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetSlideshow,
 } satisfies Meta<typeof WidgetSlideshow>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetSlideshow,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetSlideshow v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetSlideshow v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
index 42a73ba949..7c472b0e0a 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetTimeline,
 } satisfies Meta<typeof WidgetTimeline>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetTimeline,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetTimeline v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetTimeline v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
index 8aaa052fad..52ec504736 100644
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ b/packages/frontend/src/widgets/WidgetTrends.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetTrends,
 } satisfies Meta<typeof WidgetTrends>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetTrends,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetTrends v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetTrends v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
index 3d7e48bad7..960392ea7c 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetUnixClock,
 } satisfies Meta<typeof WidgetUnixClock>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetUnixClock,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetUnixClock v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetUnixClock v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
index c8317b9f5c..469992c3c4 100644
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ b/packages/frontend/src/widgets/WidgetUserList.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: WidgetUserList,
 } satisfies Meta<typeof WidgetUserList>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				WidgetUserList,
 			},
-			props: Object.keys(argTypes),
-			template: '<WidgetUserList v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<WidgetUserList v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
index 3ec656e0d5..2a71043409 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: cpu_mem,
 } satisfies Meta<typeof cpu_mem>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				cpu_mem,
 			},
-			props: Object.keys(argTypes),
-			template: '<cpu_mem v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<cpu_mem v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
index 26409892bb..6cd98615e7 100644
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: cpu_,
 } satisfies Meta<typeof cpu_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				cpu_,
 			},
-			props: Object.keys(argTypes),
-			template: '<cpu_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<cpu_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
index 319628b3bb..8045a678a8 100644
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/disk.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: disk_,
 } satisfies Meta<typeof disk_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				disk_,
 			},
-			props: Object.keys(argTypes),
-			template: '<disk_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<disk_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
index 8fcfd051be..072ff25410 100644
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/index.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: index_,
 } satisfies Meta<typeof index_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				index_,
 			},
-			props: Object.keys(argTypes),
-			template: '<index_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<index_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
index 75929aae44..14a4e77bed 100644
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/mem.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: mem_,
 } satisfies Meta<typeof mem_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				mem_,
 			},
-			props: Object.keys(argTypes),
-			template: '<mem_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<mem_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
index ab74ccdc0e..9a6f826b5b 100644
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/net.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: net_,
 } satisfies Meta<typeof net_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				net_,
 			},
-			props: Object.keys(argTypes),
-			template: '<net_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<net_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
index 510d1be613..c49ba0f87d 100644
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ b/packages/frontend/src/widgets/server-metric/pie.stories.ts
@@ -7,13 +7,24 @@ const meta = {
 	component: pie_,
 } satisfies Meta<typeof pie_>;
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				pie_,
 			},
-			props: Object.keys(argTypes),
-			template: '<pie_ v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<pie_ v-bind="props" />',
 		};
 	},
 	parameters: {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 74a13fd109..4f98e4da89 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -398,21 +398,22 @@ importers:
       '@rollup/plugin-alias': 4.0.3
       '@rollup/plugin-json': 6.0.0
       '@rollup/pluginutils': 5.0.2
-      '@storybook/addon-essentials': ^7.0.0-rc.4
-      '@storybook/addon-interactions': ^7.0.0-rc.4
-      '@storybook/addon-links': ^7.0.0-rc.4
+      '@storybook/addon-essentials': 7.0.0-rc.6
+      '@storybook/addon-interactions': 7.0.0-rc.6
+      '@storybook/addon-links': 7.0.0-rc.6
+      '@storybook/addon-storysource': 7.0.0-rc.6
       '@storybook/addons': 7.0.0-rc.5
-      '@storybook/blocks': ^7.0.0-rc.4
-      '@storybook/core-events': ^7.0.0-rc.4
-      '@storybook/manager-api': ^7.0.0-rc.4
-      '@storybook/preview-api': ^7.0.0-rc.4
-      '@storybook/react': ^7.0.0-rc.4
-      '@storybook/react-vite': ^7.0.0-rc.4
+      '@storybook/blocks': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/react': 7.0.0-rc.6
+      '@storybook/react-vite': 7.0.0-rc.6
       '@storybook/testing-library': ^0.0.14-next.1
-      '@storybook/theming': ^7.0.0-rc.4
-      '@storybook/types': ^7.0.0-rc.4
-      '@storybook/vue3': ^7.0.0-rc.4
-      '@storybook/vue3-vite': ^7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
+      '@storybook/vue3': 7.0.0-rc.6
+      '@storybook/vue3-vite': 7.0.0-rc.6
       '@syuilo/aiscript': 0.13.1
       '@tabler/icons-webfont': 2.10.0
       '@testing-library/vue': ^6.6.1
@@ -483,8 +484,9 @@ importers:
       sass: 1.58.3
       seedrandom: 3.0.5
       start-server-and-test: 2.0.0
-      storybook: ^7.0.0-rc.4
+      storybook: 7.0.0-rc.6
       storybook-addon-misskey-theme: github:misskey-dev/storybook-addon-misskey-theme
+      storybook-addon-performance: ^0.17.1
       strict-event-emitter-types: 2.0.0
       summaly: github:misskey-dev/summaly
       syuilo-password-strength: 0.0.1
@@ -568,21 +570,22 @@ importers:
       vue-prism-editor: 2.0.0-alpha.2_vue@3.2.47
       vuedraggable: 4.1.0_vue@3.2.47
     devDependencies:
-      '@storybook/addon-essentials': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-interactions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-links': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-essentials': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-interactions': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-links': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-storysource': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
       '@storybook/addons': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/react': 7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq
-      '@storybook/react-vite': 7.0.0-rc.5_ndsstb2ob2rgr4m75wxvpqsrpi
+      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/react': 7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq
+      '@storybook/react-vite': 7.0.0-rc.6_ndsstb2ob2rgr4m75wxvpqsrpi
       '@storybook/testing-library': 0.0.14-next.1
-      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.5
-      '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
-      '@storybook/vue3-vite': 7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
+      '@storybook/vue3': 7.0.0-rc.6_vue@3.2.47
+      '@storybook/vue3-vite': 7.0.0-rc.6_y344amzr55z4s7r3flz6cvxaae
       '@testing-library/vue': 6.6.1_a2ihsjreowava2sm4iorpgwkom
       '@types/escape-regexp': 0.0.1
       '@types/estree': 1.0.0
@@ -615,8 +618,9 @@ importers:
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       start-server-and-test: 2.0.0
-      storybook: 7.0.0-rc.4
-      storybook-addon-misskey-theme: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_vcphge7oza42ndhprrearltd3q
+      storybook: 7.0.0-rc.6
+      storybook-addon-misskey-theme: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_hp2ec65oinwl37fsk4exx24idq
+      storybook-addon-performance: 0.17.1_biqbaboplfbrettd7655fr4n2y
       summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
       vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
       vitest-fetch-mock: 0.2.2_vitest@0.29.2
@@ -673,29 +677,6 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/core/7.20.12:
-    resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@ampproject/remapping': 2.2.0
-      '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helpers': 7.21.0
-      '@babel/parser': 7.21.3
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-      convert-source-map: 1.9.0
-      debug: 4.3.4
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/core/7.21.3:
     resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
     engines: {node: '>=6.9.0'}
@@ -719,15 +700,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/generator/7.20.7:
-    resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.21.3
-      '@jridgewell/gen-mapping': 0.3.2
-      jsesc: 2.5.2
-    dev: true
-
   /@babel/generator/7.21.3:
     resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
     engines: {node: '>=6.9.0'}
@@ -753,20 +725,6 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/compat-data': 7.20.10
-      '@babel/core': 7.20.12
-      '@babel/helper-validator-option': 7.21.0
-      browserslist: 4.21.5
-      lru-cache: 5.1.1
-      semver: 6.3.0
-    dev: true
-
   /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
     engines: {node: '>=6.9.0'}
@@ -781,25 +739,6 @@ packages:
       semver: 6.3.0
     dev: true
 
-  /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-member-expression-to-functions': 7.21.0
-      '@babel/helper-optimise-call-expression': 7.18.6
-      '@babel/helper-replace-supers': 7.20.7
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/helper-split-export-declaration': 7.18.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
     engines: {node: '>=6.9.0'}
@@ -819,17 +758,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-annotate-as-pure': 7.18.6
-      regexpu-core: 5.3.2
-    dev: true
-
   /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
     engines: {node: '>=6.9.0'}
@@ -841,22 +769,6 @@ packages:
       regexpu-core: 5.3.2
     dev: true
 
-  /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
-    peerDependencies:
-      '@babel/core': ^7.4.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      debug: 4.3.4
-      lodash.debounce: 4.0.8
-      resolve: 1.22.1
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
     peerDependencies:
@@ -942,21 +854,6 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-wrap-function': 7.20.5
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
     engines: {node: '>=6.9.0'}
@@ -1057,7 +954,7 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
 
   /@babel/parser/7.21.3:
     resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
@@ -1066,16 +963,6 @@ packages:
     dependencies:
       '@babel/types': 7.21.3
 
-  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
     engines: {node: '>=6.9.0'}
@@ -1086,18 +973,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
     engines: {node: '>=6.9.0'}
@@ -1110,21 +985,6 @@ packages:
       '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
     engines: {node: '>=6.9.0'}
@@ -1140,19 +1000,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
     engines: {node: '>=6.9.0'}
@@ -1166,20 +1013,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
     engines: {node: '>=6.9.0'}
@@ -1194,17 +1027,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
     engines: {node: '>=6.9.0'}
@@ -1216,17 +1038,6 @@ packages:
       '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
     engines: {node: '>=6.9.0'}
@@ -1238,17 +1049,6 @@ packages:
       '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
     engines: {node: '>=6.9.0'}
@@ -1260,17 +1060,6 @@ packages:
       '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
     engines: {node: '>=6.9.0'}
@@ -1282,17 +1071,6 @@ packages:
       '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
     engines: {node: '>=6.9.0'}
@@ -1304,17 +1082,6 @@ packages:
       '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
     engines: {node: '>=6.9.0'}
@@ -1326,20 +1093,6 @@ packages:
       '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.20.10
-      '@babel/core': 7.20.12
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
     engines: {node: '>=6.9.0'}
@@ -1354,17 +1107,6 @@ packages:
       '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
     engines: {node: '>=6.9.0'}
@@ -1376,18 +1118,6 @@ packages:
       '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12
-    dev: true
-
   /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
     engines: {node: '>=6.9.0'}
@@ -1400,19 +1130,6 @@ packages:
       '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
     engines: {node: '>=6.9.0'}
@@ -1426,21 +1143,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
     engines: {node: '>=6.9.0'}
@@ -1456,17 +1158,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
     engines: {node: '>=4'}
@@ -1478,15 +1169,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12:
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3:
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
     peerDependencies:
@@ -1496,15 +1178,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
     peerDependencies:
@@ -1514,15 +1187,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12:
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3:
     resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
     peerDependencies:
@@ -1532,16 +1196,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
     engines: {node: '>=6.9.0'}
@@ -1552,15 +1206,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
     peerDependencies:
@@ -1570,15 +1215,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
     peerDependencies:
@@ -1598,16 +1234,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
     engines: {node: '>=6.9.0'}
@@ -1618,15 +1244,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3:
     resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
     peerDependencies:
@@ -1636,15 +1253,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
     peerDependencies:
@@ -1654,22 +1262,13 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12:
+  /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
-  /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12:
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
@@ -1682,15 +1281,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
     peerDependencies:
@@ -1700,15 +1290,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12:
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3:
     resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
     peerDependencies:
@@ -1718,15 +1299,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
     peerDependencies:
@@ -1736,15 +1308,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
     peerDependencies:
@@ -1754,15 +1317,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
     peerDependencies:
@@ -1772,16 +1326,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
     engines: {node: '>=6.9.0'}
@@ -1792,16 +1336,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
     engines: {node: '>=6.9.0'}
@@ -1812,16 +1346,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
     engines: {node: '>=6.9.0'}
@@ -1832,16 +1356,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
     engines: {node: '>=6.9.0'}
@@ -1852,20 +1366,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-module-imports': 7.18.6
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
     engines: {node: '>=6.9.0'}
@@ -1880,16 +1380,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
     engines: {node: '>=6.9.0'}
@@ -1900,16 +1390,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
     engines: {node: '>=6.9.0'}
@@ -1920,26 +1400,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-classes/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-optimise-call-expression': 7.18.6
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-replace-supers': 7.20.7
-      '@babel/helper-split-export-declaration': 7.18.6
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
     engines: {node: '>=6.9.0'}
@@ -1960,17 +1420,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/template': 7.20.7
-    dev: true
-
   /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
     engines: {node: '>=6.9.0'}
@@ -1982,16 +1431,6 @@ packages:
       '@babel/template': 7.20.7
     dev: true
 
-  /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
     engines: {node: '>=6.9.0'}
@@ -2002,17 +1441,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
     engines: {node: '>=6.9.0'}
@@ -2024,16 +1452,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
     engines: {node: '>=6.9.0'}
@@ -2044,17 +1462,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
     engines: {node: '>=6.9.0'}
@@ -2077,16 +1484,6 @@ packages:
       '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.21.3
     dev: true
 
-  /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
     engines: {node: '>=6.9.0'}
@@ -2097,18 +1494,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
     engines: {node: '>=6.9.0'}
@@ -2121,16 +1506,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
     engines: {node: '>=6.9.0'}
@@ -2141,16 +1516,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
     engines: {node: '>=6.9.0'}
@@ -2161,19 +1526,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12:
-    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.3:
     resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
     engines: {node: '>=6.9.0'}
@@ -2187,20 +1539,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-simple-access': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.3:
     resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
     engines: {node: '>=6.9.0'}
@@ -2215,21 +1553,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12:
-    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-hoist-variables': 7.18.6
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-identifier': 7.19.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.3:
     resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
     engines: {node: '>=6.9.0'}
@@ -2245,19 +1568,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
     engines: {node: '>=6.9.0'}
@@ -2271,17 +1581,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
     engines: {node: '>=6.9.0'}
@@ -2293,16 +1592,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
     engines: {node: '>=6.9.0'}
@@ -2313,19 +1602,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-replace-supers': 7.20.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
     engines: {node: '>=6.9.0'}
@@ -2339,16 +1615,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
     engines: {node: '>=6.9.0'}
@@ -2359,16 +1625,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
     engines: {node: '>=6.9.0'}
@@ -2399,31 +1655,20 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.20.12:
+  /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
       '@babel/helper-module-imports': 7.18.6
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12
+      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      regenerator-transform: 0.15.1
-    dev: true
-
   /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
     engines: {node: '>=6.9.0'}
@@ -2435,16 +1680,6 @@ packages:
       regenerator-transform: 0.15.1
     dev: true
 
-  /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
     engines: {node: '>=6.9.0'}
@@ -2455,16 +1690,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
     engines: {node: '>=6.9.0'}
@@ -2475,17 +1700,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12:
-    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-    dev: true
-
   /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.3:
     resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
     engines: {node: '>=6.9.0'}
@@ -2497,16 +1711,6 @@ packages:
       '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
     dev: true
 
-  /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
     engines: {node: '>=6.9.0'}
@@ -2517,16 +1721,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
     engines: {node: '>=6.9.0'}
@@ -2537,16 +1731,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12:
-    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3:
     resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
     engines: {node: '>=6.9.0'}
@@ -2572,16 +1756,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12:
-    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3:
     resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
     engines: {node: '>=6.9.0'}
@@ -2592,17 +1766,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12:
-    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-    dev: true
-
   /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3:
     resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
     engines: {node: '>=6.9.0'}
@@ -2614,92 +1777,6 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/preset-env/7.20.2_@babel+core@7.20.12:
-    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.20.10
-      '@babel/core': 7.20.12
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12
-      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12
-      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12
-      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12
-      '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12
-      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12
-      '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12
-      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12
-      '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12
-      '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12
-      '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12
-      '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12
-      '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12
-      '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12
-      '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12
-      '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/preset-modules': 0.1.5_@babel+core@7.20.12
-      '@babel/types': 7.21.3
-      babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12
-      babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12
-      babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12
-      core-js-compat: 3.29.1
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/preset-env/7.20.2_@babel+core@7.21.3:
     resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
     engines: {node: '>=6.9.0'}
@@ -2798,19 +1875,6 @@ packages:
       '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.21.3
     dev: true
 
-  /@babel/preset-modules/0.1.5_@babel+core@7.20.12:
-    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12
-      '@babel/types': 7.21.3
-      esutils: 2.0.3
-    dev: true
-
   /@babel/preset-modules/0.1.5_@babel+core@7.21.3:
     resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
     peerDependencies:
@@ -2871,24 +1935,6 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/traverse/7.20.12:
-    resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.21.3
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-hoist-variables': 7.18.6
-      '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
-      debug: 4.3.4
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@babel/traverse/7.21.3:
     resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
     engines: {node: '>=6.9.0'}
@@ -2907,14 +1953,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/types/7.20.7:
-    resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.19.4
-      '@babel/helper-validator-identifier': 7.19.1
-      to-fast-properties: 2.0.0
-
   /@babel/types/7.21.3:
     resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
     engines: {node: '>=6.9.0'}
@@ -4236,8 +3274,8 @@ packages:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
 
-  /@storybook/addon-actions/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-PaiZYDd8dVtaqyOr0kFlBbzpXMVKL4saDwa1gNf1nGSP1yxeS5Iulah4aD8pevpO6MXxJrFWcwhg5295viK3HQ==}
+  /@storybook/addon-actions/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-MNtr4OIiwA6f9WBEcY6OfHPxRVIWj4TSA0kffTKq77AHwKbCCi4NXE1mjkW9wARnqil3N6/lxHB5QEbFTeDTuw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4247,14 +3285,14 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       dequal: 2.0.3
       lodash: 4.17.21
       polished: 4.2.2
@@ -4267,8 +3305,8 @@ packages:
       uuid-browser: 3.1.0
     dev: true
 
-  /@storybook/addon-backgrounds/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-zq52R+SIFJtHLNuEnnNQAhSMMvFKHv+n4/UET4tBFB/B76GvWxLuHjfb0T8Yi7aTDAGR3XqBVU+xrjM96aIWqw==}
+  /@storybook/addon-backgrounds/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-wtXRvyZXZEcThCU7K7upvEufLxvVX/bE7XN4Z7RRKdKbM6aNMdYHPP3a+OMXq9l0CsscIb+qXZiuFr71MZ1oxQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4278,22 +3316,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       memoizerific: 1.11.3
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-controls/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-MwsBIiK5Af1TCWscEjmzWAuthcSHZLZMjv+fSxCUY7GBIyUcvq9/jSPW8qsC/zbxqAsMoHEwG4rbr7P+p/74ew==}
+  /@storybook/addon-controls/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-NgzrW1lSNAOVp77ySI+GM9waGcTLlAGigTq4qIdOc/pR2LFSOniLIjBk3x98WgOp6jMBCbycLBwG18yS3wRa3w==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4303,15 +3341,15 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       lodash: 4.17.21
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
@@ -4320,8 +3358,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-docs/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-GlxzAoi3SR9vpc0PJE5EIratQ0O5OgVRJx032xawA+93gTFLL/qqK4UkcN4KJ4FIoRIQHMQ6PNbONvQR2NCEiQ==}
+  /@storybook/addon-docs/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-UJIlW6hR8esItOtvgRPO6PqtUWm8bmJUvpOGWZ1MX0tVCOZZVZiLxwl1dN/w869LSwZTjwq8kIZKT6/uGIxqKQ==}
     peerDependencies:
       '@storybook/mdx1-csf': '>=1.0.0-0'
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4330,23 +3368,23 @@ packages:
       '@storybook/mdx1-csf':
         optional: true
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12
+      '@babel/core': 7.21.3
+      '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3
       '@jest/transform': 29.5.0
       '@mdx-js/react': 2.3.0_react@18.2.0
-      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/csf-plugin': 7.0.0-rc.4
-      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/csf-plugin': 7.0.0-rc.6
+      '@storybook/csf-tools': 7.0.0-rc.6
       '@storybook/global': 5.0.0
       '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/postinstall': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/react-dom-shim': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/postinstall': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/react-dom-shim': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       fs-extra: 11.1.0
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
@@ -4357,25 +3395,25 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-essentials/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-KCVo/x4Ayi8qo0pev0wnLr+z69EH6Ohfx3VuYGMLw5KxYrvqs9qlemKNqiG2u8eZs5iEef9GYfax90uvPPNuEQ==}
+  /@storybook/addon-essentials/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-gSxt7Jf6v6teDz3CAL7AONjL9B3FcM3Us5sbdLb5KeBwn5em5i7DgdjhsPwGnOnl4LvIpcmM2o8i95q9zYxk6Q==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/addon-actions': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-backgrounds': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-controls': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-docs': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-highlight': 7.0.0-rc.4
-      '@storybook/addon-measure': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-outline': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-toolbars': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-viewport': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/addon-actions': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-backgrounds': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-controls': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-docs': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-highlight': 7.0.0-rc.6
+      '@storybook/addon-measure': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-outline': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-toolbars': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addon-viewport': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       ts-dedent: 2.2.0
@@ -4384,16 +3422,16 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-highlight/7.0.0-rc.4:
-    resolution: {integrity: sha512-Yh9L0Jwr40gpe8yr5bhTge+kxcf2Jev6uf1Un+t6z3MPMDbBaV3cCnnbE03lEuB973Om94Br1ADgfK6n2WHhwQ==}
+  /@storybook/addon-highlight/7.0.0-rc.6:
+    resolution: {integrity: sha512-cUy+ltq6m1E1Tc84renFDu2XJXSHoh6md65WSfzbHLf795qI0vIvOK+R27o5tGfHiaj+wCa3yhow4pKYjHrZqA==}
     dependencies:
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.6
     dev: true
 
-  /@storybook/addon-interactions/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-3kuOAIfuAHbrlaqd60u72aJp+RqZoGUJwBxujqac2gVu4kwr2MbTk/Z2/h76WgiRnMcm1VYubkqyi1wKhrkAcg==}
+  /@storybook/addon-interactions/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-daR1TYECe+KQAswtwUc4XnddOjtosSNTS5liRGLQUrYv7f0uai/DKDL3MPItDY/MuxYa4VSJ4uEsoYc7ffz5Cw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4403,16 +3441,16 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/instrumenter': 7.0.0-rc.4
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/instrumenter': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       jest-mock: 27.5.1
       polished: 4.2.2
       react: 18.2.0
@@ -4422,8 +3460,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-links/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-jhi2DolZ1YAzuAqqz4aH1IglDcYDDO17LExcVSezIT+5FEndg6pxqkiU4FKstecsM4ItXc0LT2jzg9WEGJYBzQ==}
+  /@storybook/addon-links/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-R4viNYpeX6NUuW6rYMTAcepAEGzmNBnXqR9sD1liM/kxhLz+9mFDdBAeVOR2dL4Xz1MsLtMhoIWX4HnbUw1ylw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4433,22 +3471,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/router': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       prop-types: 15.8.1
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-measure/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-mud2eCpyEquq0gncfdCe9S+6pRNUkrpxcedsphtDHDMIDDxzpRMo48isbdYuA5wiwwpHHXZ1DAll1h/ghrN9jg==}
+  /@storybook/addon-measure/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-BzkLPHXm5+UeoBPDLVWUNHe2+dvlDwYq5PBGgSTSrYfxT3rrrYQ44aVYljFonzcvvu3xJXGDDkS/tfOZl/iP+Q==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4458,19 +3496,19 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/addon-outline/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-ru7RtvwaS7TlkbISVM0lFIc9RwD9tBucS7oVLi2R3Fc/II/48ByMEynS8v7knrTF9ElfYan5M0PeHEzhAzDgdQ==}
+  /@storybook/addon-outline/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-lRuMw1HaPKRIYWoUOc8a5xU2AcJI/xljwB8ruwxWM0apsZXYdwbyc7w9Qfr5NuG1Xu6SYTuEiOwZqbmINGOEPg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4480,20 +3518,20 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-toolbars/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-FjDFk0K/KHzXHOEezSJyayYoVPcisfItppqt7xOOEG5E4igwIM6PB2t/1FNjdOe77atplVwPAqEB4amnNyVI6Q==}
+  /@storybook/addon-storysource/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-7QFVUW3qHTAdP0PWS+OqzFey8ObTqcws/6Vm5HSzRlQlI50SjnOhjglPzLbZaTpDiBeLhRU1tGTFZqUuMrYxPQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4503,17 +3541,42 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/source-loader': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      estraverse: 5.3.0
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      react-syntax-highlighter: 15.5.0_react@18.2.0
+    dev: true
+
+  /@storybook/addon-toolbars/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-BqaHm1ZVy3DSZ9tGYHE2fwUXxsJmelB0yR+Fgze9hfff2j+fIwwVQ8GHMYfUuTwEZSL3I3qDnwtQCW+OBdpRkg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/addon-viewport/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-yc48Ve2tZAc8OSivb+elMVdj/5TTDvOPl41jJMKPxjdmxVV0959Gp/xcvyTOOHV+7voDePmDB7I1TOrO1XEqEA==}
+  /@storybook/addon-viewport/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-P7/hCMypT/mzO0NVzUImI9NBFMshM8ClukovteeM5pI01hSRAlOjXirCCVYQJbena3BpL+unwMt57QfxHy/S8g==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4523,13 +3586,13 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
       memoizerific: 1.11.3
       prop-types: 15.8.1
       react: 18.2.0
@@ -4549,23 +3612,23 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/blocks/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-sG3VMGqri2sf1ye4rV6phdyTV3vqfL6jxh2RZJ3H1XrdezaVwQVQcdqdxJDgqBJ+/i7N5kFqByUG+WCTV2cSmA==}
+  /@storybook/blocks/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-3+9Aki5+tBqcTqZx+aDlQfVKdMflTwchr1DlBZODkd/dMKp8+sM7nHfH4hH0GipgppY8u+MxS0AmxsbwaF0xgA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/components': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/docs-tools': 7.0.0-rc.4
+      '@storybook/docs-tools': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       '@types/lodash': 4.14.191
       color-convert: 2.0.1
       dequal: 2.0.3
@@ -4583,13 +3646,13 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-manager/7.0.0-rc.4:
-    resolution: {integrity: sha512-n9Dphfddll8VqtYOr/zZP3ojJgYV7yWriKtRL+MMnq8qvwENKqvWR56aK5vZNQ3PVFxm3JpWs5/FsORgev943g==}
+  /@storybook/builder-manager/7.0.0-rc.6:
+    resolution: {integrity: sha512-EHozHI9bzcOejA4GFPNVsvqj2ZLW5hst8vZOElcK4GVmlJ/0z/1Cwffyz+Agc9sKwIDow9LrCWWXso8/zvuHsg==}
     dependencies:
       '@fal-works/esbuild-plugin-global-externals': 2.1.2
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/manager': 7.0.0-rc.4
-      '@storybook/node-logger': 7.0.0-rc.4
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/manager': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.6
       '@types/ejs': 3.1.2
       '@types/find-cache-dir': 3.2.1
       '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15_esbuild@0.16.17
@@ -4607,8 +3670,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-vite/7.0.0-rc.4_vwvfc4ezh6jlf6pa67auy3eulu:
-    resolution: {integrity: sha512-Acj3WAQ5+p1XgiTfPUCQ4NkI8yZrSAKHaHinxb2TFMoV4xcp+Hkr6WFRRPI1sMtxLmAx8svcEjloyZSsudP1Eg==}
+  /@storybook/builder-vite/7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu:
+    resolution: {integrity: sha512-96+OB4ZWf3HkRUmkQr+vnSKOss4W+05RSyogShqMsqrsx7dqSTUzXvASLKN6/+ptl9Qem4TQwujthBKgmYK19A==}
     peerDependencies:
       '@preact/preset-vite': '*'
       '@storybook/mdx1-csf': '>=1.0.0-next.1'
@@ -4625,16 +3688,16 @@ packages:
       vite-plugin-glimmerx:
         optional: true
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.4
-      '@storybook/channel-websocket': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/csf-plugin': 7.0.0-rc.4
+      '@storybook/channel-postmessage': 7.0.0-rc.6
+      '@storybook/channel-websocket': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/csf-plugin': 7.0.0-rc.6
       '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/preview': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/preview': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       browser-assert: 1.2.1
       es-module-lexer: 0.9.3
       express: 4.18.2
@@ -4650,60 +3713,6 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-vite/7.0.0-rc.5_vwvfc4ezh6jlf6pa67auy3eulu:
-    resolution: {integrity: sha512-TkT+KaUBHiyFyHQ31qeq3zFM1p5cwffu3orAJRcSWOCHkQy1hbu2H55ZApgZJRHBq9MGxtUZ1FTVYIb3OLv1jg==}
-    peerDependencies:
-      '@preact/preset-vite': '*'
-      '@storybook/mdx1-csf': '>=1.0.0-next.1'
-      typescript: '>= 4.3.x'
-      vite: ^3.0.0 || ^4.0.0
-      vite-plugin-glimmerx: '*'
-    peerDependenciesMeta:
-      '@preact/preset-vite':
-        optional: true
-      '@storybook/mdx1-csf':
-        optional: true
-      typescript:
-        optional: true
-      vite-plugin-glimmerx:
-        optional: true
-    dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.5
-      '@storybook/channel-websocket': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/csf-plugin': 7.0.0-rc.5
-      '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/preview': 7.0.0-rc.5
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
-      browser-assert: 1.2.1
-      es-module-lexer: 0.9.3
-      express: 4.18.2
-      fs-extra: 11.1.0
-      glob: 8.1.0
-      glob-promise: 6.0.2_glob@8.1.0
-      magic-string: 0.27.0
-      rollup: 3.19.0
-      slash: 3.0.0
-      typescript: 4.9.5
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@storybook/channel-postmessage/7.0.0-rc.4:
-    resolution: {integrity: sha512-ZWuwZfYfwpvCx+WgoTEweFmQ6cb4B3HUT6eNcFMeXgMRw1q9roa8CDCCw+4TJ2jDkvUrdkYTHYmcgn0QpAxpAg==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
-      '@storybook/global': 5.0.0
-      qs: 6.11.1
-      telejson: 7.0.4
-    dev: true
-
   /@storybook/channel-postmessage/7.0.0-rc.5:
     resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
     dependencies:
@@ -4715,46 +3724,48 @@ packages:
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-websocket/7.0.0-rc.4:
-    resolution: {integrity: sha512-N4lHRx7dAC+y0dtYeopeXRPUsHrjNz1WnUB0qUyZ5p6bUvcJq7McV9aCFBbp+M0nzx+l4IppX9QuRIId0eR7sA==}
+  /@storybook/channel-postmessage/7.0.0-rc.6:
+    resolution: {integrity: sha512-FXLben722pbLeoGiTMAWo3ngtamNjqmlCrsdc6f6nS2EFPAgHZ9U0acFmJ5HcJsh//VS38/4UQd9O7v8UXc9fg==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
+      qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-websocket/7.0.0-rc.5:
-    resolution: {integrity: sha512-n8oPrbxGS9FtSkNWYMpOtEZedeeVxnxJuiEwApGRkWt0q3eWIK9u24NElIbjCoSysaZl60CXrlK615W+Ml3ujQ==}
+  /@storybook/channel-websocket/7.0.0-rc.6:
+    resolution: {integrity: sha512-onACSEWj2BMLT4ZsOTiRuKliDgjhNGa/4rYAs1BV+AbCUeqD6t9WxYYa2Msc6VIwHPqQ6lrmazix0YYJsJCXLQ==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
       '@storybook/global': 5.0.0
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channels/7.0.0-rc.4:
-    resolution: {integrity: sha512-N4jQPVsT+Qd3dYRFKL2jN1Ik1XXYxCO2e6hoxir55VvAd5WCCnwNWmglEWRoIMNwmJQAbyFRCxbYzAKctsqaVw==}
-    dev: true
-
   /@storybook/channels/7.0.0-rc.5:
     resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
     dev: true
 
-  /@storybook/cli/7.0.0-rc.4:
-    resolution: {integrity: sha512-T4GCpvJvPUqDgpYdb7DLeYbc3E5OZigLNRQfSQIrQ8yQ4gtJmG18GNqzUIuMkVQRUjwr67ZqMi7ui+3PSEucvA==}
+  /@storybook/channels/7.0.0-rc.6:
+    resolution: {integrity: sha512-DkAr34GeLH6978du2zIz6ulyZMGkuzQfErV0v4Fqo2ZaXHV41MxgVubkEoX/pED4ksNUlTE85ZtxFPcF1PYIQw==}
+    dev: true
+
+  /@storybook/cli/7.0.0-rc.6:
+    resolution: {integrity: sha512-c93IiDGiaEOQjneVQXW+eDaaatW6TzIn89CdFGOxn/Ol7kvScb1+utrpp1Qvv3guMbm/Se4EWNMiP4ID9+B4fg==}
     hasBin: true
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/preset-env': 7.20.2_@babel+core@7.20.12
+      '@babel/core': 7.21.3
+      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
       '@ndelangen/get-tarball': 3.0.7
-      '@storybook/codemod': 7.0.0-rc.4
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/core-server': 7.0.0-rc.4
-      '@storybook/csf-tools': 7.0.0-rc.4
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/telemetry': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/codemod': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/core-server': 7.0.0-rc.6
+      '@storybook/csf-tools': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/telemetry': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       '@types/semver': 7.3.13
       boxen: 5.1.2
       chalk: 4.1.2
@@ -4790,28 +3801,28 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/client-logger/7.0.0-rc.4:
-    resolution: {integrity: sha512-z5w2odssAavqSPtkX0kjPwCpvSYNGDnC3pqKw0nHrZ4fb59SKdjdcoCbcUntDa0kAid9g29CT+eNTtPcci8/XA==}
-    dependencies:
-      '@storybook/global': 5.0.0
-    dev: true
-
   /@storybook/client-logger/7.0.0-rc.5:
     resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/codemod/7.0.0-rc.4:
-    resolution: {integrity: sha512-PGoHnQfOrpRCXwaOsPoszfvzxERAm9bR4nxfF5pOUnsXYRrI4hPqZRpgw3kDRXTl43mSA+eI7fkGg4y9GeTElw==}
+  /@storybook/client-logger/7.0.0-rc.6:
+    resolution: {integrity: sha512-bT0PbEsHII2zeQQ93YBaoYl8PGJZioowlUYnLl6XchSloYVwWfQIveSwsM70jgA4e99L6/Sbnp0V+2SrxKHw6A==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/codemod/7.0.0-rc.6:
+    resolution: {integrity: sha512-iXQES8xBhFNkC/dk6Lu7OMwssTPVcNQ77MUtcgXyH9MFcJSt3hhWeT5xp5fQmGTK1HhZDXYWdC/XhopXm8FfdA==}
     dependencies:
       '@babel/core': 7.21.3
       '@babel/preset-env': 7.20.2_@babel+core@7.21.3
       '@babel/types': 7.21.3
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/csf-tools': 7.0.0-rc.4
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/csf-tools': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       cross-spawn: 7.0.3
       globby: 11.1.0
       jscodeshift: 0.14.0_@babel+preset-env@7.20.2
@@ -4822,17 +3833,17 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/components/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-UpjRmEeIZZ1YA1qhWF2Ngybd0Pxk3XIqHsKLAXUnJatjKUa+FYXaqSb5DqsQ+OQhRXM01dqeBdzOnCFm/jWCWg==}
+  /@storybook/components/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-zY09QHIzVqz4j3DF3b57YcbTFI2euojIQ5LPFY/aKdGtuftXLTK3x7I4CtCmJ4TeFcC9el7STZpEwhMpjqQ/mw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       memoizerific: 1.11.3
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
@@ -4840,43 +3851,18 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/components/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-zuKQ0+uOtRbmnF0trJ4LpWZ5w9Dzcs5dZjF3Uu4ka4F4vJ/fUWKL2spxAIsRalu2jyk2XVp6/mz/NiWQnrophw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+  /@storybook/core-client/7.0.0-rc.6:
+    resolution: {integrity: sha512-CkCDBu2s/nGVpoIE4gH9Dy+H5/JJUs1cPp4RPnOlSsoFIg+Gh+t1JZtEe7NFFmMsGfVqCgOKzBtJvPzaHSUSXQ==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.5
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y
-      util-deprecate: 1.0.2
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
     dev: true
 
-  /@storybook/core-client/7.0.0-rc.4:
-    resolution: {integrity: sha512-Np5QTcyKtiTczuM/5Ad3dC47n7xoSoonzh1wYWp747QGkzRfh1XCQ1sbALxCY8lB/4rnFsnehHQCoQsjreWelg==}
+  /@storybook/core-common/7.0.0-rc.6:
+    resolution: {integrity: sha512-pKjFr7RqGSFX0lrXKe8Z0Cur9fQpqiP6W5mL9hQNhNlzkwc/UXumGJKDlwYZCNoygirQ/9TaTGp+bSOzJ5INUw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-    dev: true
-
-  /@storybook/core-client/7.0.0-rc.5:
-    resolution: {integrity: sha512-jBY4kJDL5sdVcnGzz+cpruzkF01Hi+DJ/c9mpNiL+CjiDSFewtCk28Qggwccm9tKne5eAlrFiJAu5MOlbIcM+g==}
-    dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/preview-api': 7.0.0-rc.5
-    dev: true
-
-  /@storybook/core-common/7.0.0-rc.4:
-    resolution: {integrity: sha512-cvJgs23iHmD24u5sjb3a5n5oCRzwx0BzI7v0mt+Lfc6r2gyXgw2Hf4tM5DchNKba0GEjvPU/ERuOWnXUETGqSw==}
-    dependencies:
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       '@types/node': 16.18.16
       '@types/pretty-hrtime': 1.0.1
       chalk: 4.1.2
@@ -4899,58 +3885,31 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/core-common/7.0.0-rc.5:
-    resolution: {integrity: sha512-YlkcTcDx8bkOq3/STAuBkQOBQB5i0zLj2Zb0LUPzIDDBPZlGb3mJEla0UyJoMbP/E/QCq1K8pA1l9vtTK+ROJQ==}
-    dependencies:
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
-      '@types/node': 16.18.16
-      '@types/pretty-hrtime': 1.0.1
-      chalk: 4.1.2
-      esbuild: 0.16.17
-      esbuild-register: 3.4.2_esbuild@0.16.17
-      file-system-cache: 2.0.2
-      find-up: 5.0.0
-      fs-extra: 11.1.0
-      glob: 8.1.0
-      glob-promise: 6.0.2_glob@8.1.0
-      handlebars: 4.7.7
-      lazy-universal-dotenv: 4.0.0
-      picomatch: 2.3.1
-      pkg-dir: 5.0.0
-      pretty-hrtime: 1.0.3
-      resolve-from: 5.0.0
-      slash: 3.0.0
-      ts-dedent: 2.2.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@storybook/core-events/7.0.0-rc.4:
-    resolution: {integrity: sha512-OgEhQSaOMcSx0y5tjGg5Mscyyk9BayhqiJeuDK3kVZfKtFO3LErwhV4TrNjuDnYFfwUgiPa2ikTAB6K6JAn6yg==}
-    dev: true
-
   /@storybook/core-events/7.0.0-rc.5:
     resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
     dev: true
 
-  /@storybook/core-server/7.0.0-rc.4:
-    resolution: {integrity: sha512-IgVy57+W43W7duhfMDXaCS7rFp8A9SfhAQSFSycD3RPP1ontnNUquOygV6AHOz04rs2NZtMNlYW6RHiwVcmSJA==}
+  /@storybook/core-events/7.0.0-rc.6:
+    resolution: {integrity: sha512-BOe6r//QEn/R9BXMiJsFM69jVUzgXGlPTfjECSIxdCEpUnCezwFA3LWPC8f4tDpL2uONqATkO9LQeQsGGapmCw==}
+    dev: true
+
+  /@storybook/core-server/7.0.0-rc.6:
+    resolution: {integrity: sha512-j00ehdSMWH3sQLv/YNHcGnWlHJd273WvCZsJrmY5rEoGOgpfMLTH1569yPAbghvHrFwOWyevPYjwiIOqaQCo3g==}
     dependencies:
       '@aw-web-design/x-default-browser': 1.4.88
       '@discoveryjs/json-ext': 0.5.7
-      '@storybook/builder-manager': 7.0.0-rc.4
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/builder-manager': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/csf-tools': 7.0.0-rc.6
       '@storybook/docs-mdx': 0.0.1-next.6
       '@storybook/global': 5.0.0
-      '@storybook/manager': 7.0.0-rc.4
-      '@storybook/node-logger': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/telemetry': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/manager': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/telemetry': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       '@types/detect-port': 1.3.2
       '@types/node': 16.18.16
       '@types/node-fetch': 2.6.2
@@ -4987,49 +3946,24 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/csf-plugin/7.0.0-rc.4:
-    resolution: {integrity: sha512-VotA5oREPC+YYEXj7RvdAsHaMySo3DRy1/eYdO+WQvj4PusxvdAEpdo5/CYEVQW7+5p4+zxt6YjL52Ar/bkdvA==}
+  /@storybook/csf-plugin/7.0.0-rc.6:
+    resolution: {integrity: sha512-AEQn16YgcgExMrS8GNdS3wVTQCc8L+RLc0IaT/EMAf8okM1brjfgEqkIYngci9ZUWQdbphF4qA6j4U7DTvVw1A==}
     dependencies:
-      '@storybook/csf-tools': 7.0.0-rc.4
+      '@storybook/csf-tools': 7.0.0-rc.6
       unplugin: 0.10.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/csf-plugin/7.0.0-rc.5:
-    resolution: {integrity: sha512-sgIEqV1MfhybvODcjtG0Ce/XlzWv2Sg5Prg5Qqsr5sMU7aET+yLHmr1umbM5L8ieRjsXS4CsxZCqZMrY9hDdNw==}
-    dependencies:
-      '@storybook/csf-tools': 7.0.0-rc.5
-      unplugin: 0.10.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@storybook/csf-tools/7.0.0-rc.4:
-    resolution: {integrity: sha512-swMulWdpSObtcfDo3flmry50oLAPbGLn0YBU+tJhhxerng5RVDy5MPG0A5ZKd6hD1jvyTA1pkhbwzCrklbNhSw==}
+  /@storybook/csf-tools/7.0.0-rc.6:
+    resolution: {integrity: sha512-jnt8svjJxDUg0ZPwck+EMg5DQwlc48KJfy2ZwjC2pUoCRNIUddifunHcFEMDrg8zhbHPcRAZq8mah3y1+fIHbw==}
     dependencies:
       '@babel/generator': 7.21.3
       '@babel/parser': 7.21.3
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/types': 7.0.0-rc.4
-      fs-extra: 11.1.0
-      recast: 0.23.1
-      ts-dedent: 2.2.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@storybook/csf-tools/7.0.0-rc.5:
-    resolution: {integrity: sha512-DvcAygIZMZIL30j7WxMXeJ6a+A2/Y/FuatZItmW+3sNv0FK1J9wH2SKw7QjzEw75LsgjvO07lU2cgcsPDFhXoA==}
-    dependencies:
-      '@babel/generator': 7.21.3
-      '@babel/parser': 7.21.3
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/types': 7.0.0-rc.6
       fs-extra: 11.1.0
       recast: 0.23.1
       ts-dedent: 2.2.0
@@ -5047,27 +3981,13 @@ packages:
     resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
     dev: true
 
-  /@storybook/docs-tools/7.0.0-rc.4:
-    resolution: {integrity: sha512-x5wUPc9b4YfVfroqV9nUhRcavdM6AVChWZIKYHxGAbx82rA7YBXwDuA6GD7JdXtzjzvh2IPQHzLFu4jnAAHMkQ==}
-    dependencies:
-      '@babel/core': 7.20.12
-      '@storybook/core-common': 7.0.0-rc.4
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
-      '@types/doctrine': 0.0.3
-      doctrine: 3.0.0
-      lodash: 4.17.21
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@storybook/docs-tools/7.0.0-rc.5:
-    resolution: {integrity: sha512-Hnws7dRmu+ZiDv0rcaG00LB0Q6bha8KKSOy/RsRsdfP50qM4ZPOfpqEFNwYOIQF1Huxe8b//BlVnu33AeUOITQ==}
+  /@storybook/docs-tools/7.0.0-rc.6:
+    resolution: {integrity: sha512-zdZCKNWCM8L3LA2SsEH/03Pyk4BJCos7ypsu2lJJKbfn7EjMmsqcMzoc7CS3DR5YJ0zmTxGCKDmJgSJTmViuQQ==}
     dependencies:
       '@babel/core': 7.21.3
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       '@types/doctrine': 0.0.3
       doctrine: 3.0.0
       lodash: 4.17.21
@@ -5079,49 +3999,14 @@ packages:
     resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
 
-  /@storybook/instrumenter/7.0.0-rc.4:
-    resolution: {integrity: sha512-6/k+cUFsDCJnnXsPGZ03qB11F8ND1G4UQtIs2pn8yWR8mo7EaDnugFLFAhjtYRaLAhg4hKhVspJcXGf/R+gxnQ==}
+  /@storybook/instrumenter/7.0.0-rc.6:
+    resolution: {integrity: sha512-hveboySEYxBtLYSgxHm2PI0Sa1DD/M6zkuCYqP4MXIoftRd437U1KzAtPrklnCoKrzUWPAXMJ8GUjwbM40RyGg==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.4
-    dev: true
-
-  /@storybook/instrumenter/7.0.0-rc.5:
-    resolution: {integrity: sha512-e9AtV1hNTs4ppmqKfst/cInmRnhkK9VcGf3xB/d9Qqm0Sqo+sNXu6ywK5KpAURdCzsUEOPXbJ9H52yTrU4f74A==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.5
-    dev: true
-
-  /@storybook/manager-api/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-0yT6zgalv8ZockGfzQML9vnOlDHKmNBjNFouVDgUMMQ2KiwdJOUG8IUqZoUtxqMO+nceIk4eTqUKK/QUqdUZVg==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/router': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.4
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      semver: 7.3.8
-      store2: 2.14.2
-      telejson: 7.0.4
-      ts-dedent: 2.2.0
+      '@storybook/preview-api': 7.0.0-rc.6
     dev: true
 
   /@storybook/manager-api/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
@@ -5149,16 +4034,41 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/manager/7.0.0-rc.4:
-    resolution: {integrity: sha512-prLxXsCevw5ghWKvS7uAYdMOJ2Cr7jxE4Z1h9OSpVVombiUaU9iFPpNCsfY40VNVi9WuEHSTWH7QV/g453nGiw==}
+  /@storybook/manager-api/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-UB3Wk/7mW966Nvvs3vv0y9irTYc77fIOeLkU8CIIMJ4eYTHkokycWr8GxL4goEm294tPVO56YLdUq5Xkwf8ouA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/manager/7.0.0-rc.6:
+    resolution: {integrity: sha512-GBi9wzPF4OmwSvJLlelEgdEobZYG73eSx6dl/isHNNJ+P1WwLDR7/5h5b6fsJh1hkzWuR7nywzHi/gYgQwV+Dg==}
     dev: true
 
   /@storybook/mdx2-csf/1.0.0-next.6:
     resolution: {integrity: sha512-m6plojocU/rmrqWd26yvm8D+oHZPZ6PtSSFmZIgpNDEPVmc8s4fBD6LXOAB5MiPI5f8KLUr2HVhOMZ97o5pDTw==}
     dev: true
 
-  /@storybook/node-logger/7.0.0-rc.4:
-    resolution: {integrity: sha512-ogzs+X9ZsCk8+R5NPZhO3DCZQEUKLhfDcOLlJnYVMKbNR9L6EwXsTaE2RQZYaANIhEt2FK3vH0iihVysaEfOuQ==}
+  /@storybook/node-logger/7.0.0-rc.6:
+    resolution: {integrity: sha512-D551vFd899i5kdk0yvvhb2mbt9PHFvdcbGWGqC3jKjbHRyJzmv/wedYdlPrUPmLsMJHLXiILwfNsDIhHYbZREQ==}
     dependencies:
       '@types/npmlog': 4.1.4
       chalk: 4.1.2
@@ -5166,38 +4076,8 @@ packages:
       pretty-hrtime: 1.0.3
     dev: true
 
-  /@storybook/node-logger/7.0.0-rc.5:
-    resolution: {integrity: sha512-3DpM988ndfbwc/03doFVP/HUJgoCp4eKVFMmSqnKVUd6qWx/dhsrTv+jqLt43wNZCgL/N/8QE+Q+FhVwefh6Tg==}
-    dependencies:
-      '@types/npmlog': 4.1.4
-      chalk: 4.1.2
-      npmlog: 5.0.1
-      pretty-hrtime: 1.0.3
-    dev: true
-
-  /@storybook/postinstall/7.0.0-rc.4:
-    resolution: {integrity: sha512-SzLUnhl2GOzV0rvyTx1eOYRQ+bR3uXWbRXCroP+m2PFqNvXHh3lvEHM1XCxdxMDtY/VRQyEuRfirKizkSaGf3Q==}
-    dev: true
-
-  /@storybook/preview-api/7.0.0-rc.4:
-    resolution: {integrity: sha512-J4PMV+UlWDqzV2Cj6PfxkUZ8315m3Mcbx1JPjKFcIGJ3HaK0mXye1brBMPG7gefjx9239QVw6w0zmw9ahLWmVw==}
-    dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.4
-      '@storybook/channels': 7.0.0-rc.4
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-events': 7.0.0-rc.4
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.4
-      '@types/qs': 6.9.7
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      qs: 6.10.4
-      slash: 3.0.0
-      synchronous-promise: 2.0.17
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
+  /@storybook/postinstall/7.0.0-rc.6:
+    resolution: {integrity: sha512-z7GfdzJo3gGNUldqkHFEPJ60CPaLrP+9EjfWv7+5zXtsp5g7DOuO8Lm/aQHsgcSNKempAmis1IhRZvE+0HLQ/Q==}
     dev: true
 
   /@storybook/preview-api/7.0.0-rc.5:
@@ -5221,16 +4101,33 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview/7.0.0-rc.4:
-    resolution: {integrity: sha512-JFncdC74tPwN6uGpSm4HwhV/FW6VqHHlLLcvpudpgngb7CZ6udkT9XAEW90JeViXNUM4tPn00HRc/adguZwCTA==}
+  /@storybook/preview-api/7.0.0-rc.6:
+    resolution: {integrity: sha512-p+UcJW6KZfDbJoSJStijxNaMOsDG4KMlv5tZmEzca54NGt6+AWzpdGPTTM8+wP0r/OoDOeTRs0BxinYjbf7ZHQ==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.6
+      '@storybook/channels': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0-rc.6
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      slash: 3.0.0
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview/7.0.0-rc.5:
-    resolution: {integrity: sha512-AG6vg4dsHVjbNchC3eiDqwSKfUWyFXauYDLg+Ce4F47s98J5ly+mFAIY0Vo1mwao3CVHLk0SYt+vtuQZF52WAg==}
+  /@storybook/preview/7.0.0-rc.6:
+    resolution: {integrity: sha512-BiI2h6vFQ3VtT5BbYlW4Lw+9QDdM8R5KtiqPLUDzS7h7fsrZxZmCCybeNP/mz2LNUkk5B4XENY+dx/lM3QSLaQ==}
     dev: true
 
-  /@storybook/react-dom-shim/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-KWFdCBCdtO+p+HcO4evgUjAid+k2HfHAoBOQsaQ1vJTjHBWJLGFinpRdkAqzZp+p+KQzKIPgXeYAPZlqo5hSzw==}
+  /@storybook/react-dom-shim/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-Pp7mrLlGhGSeI00RGiS0JpbEbcJunNUDsIY+5mythOlYD1B+7daY8EnHuHK+3uYthSgngjOr8QCqubPXWvM7zQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5239,18 +4136,8 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/react-dom-shim/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-Hyx8Px1LLc3+WjIUW5hNFEsbQspONnyThxBCU7w0kAivpJn7vy26HFCHp4QA1FPU6CnJUl5dVxckj6bosv/Gqg==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-    dev: true
-
-  /@storybook/react-vite/7.0.0-rc.5_ndsstb2ob2rgr4m75wxvpqsrpi:
-    resolution: {integrity: sha512-IW2DYK6K115B7VKBvNMaSMVe3LWyFyFBgjby1N2/wfL5jkvrwRmYH4ag5+qn1e6HgxH6F+Wd9ryLhf8jaldgVQ==}
+  /@storybook/react-vite/7.0.0-rc.6_ndsstb2ob2rgr4m75wxvpqsrpi:
+    resolution: {integrity: sha512-palDThwDlR2kDslnM5nrC3ODy1kiMoFEszbWxS2BJ9582+3gILbWMgGjjTlI8/i7oMtADKpkOp67dxSIMUDfqw==}
     engines: {node: '>=16'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5259,8 +4146,8 @@ packages:
     dependencies:
       '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1_vwvfc4ezh6jlf6pa67auy3eulu
       '@rollup/pluginutils': 4.2.1
-      '@storybook/builder-vite': 7.0.0-rc.5_vwvfc4ezh6jlf6pa67auy3eulu
-      '@storybook/react': 7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq
+      '@storybook/builder-vite': 7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu
+      '@storybook/react': 7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq
       '@vitejs/plugin-react': 3.1.0_vite@4.1.4
       ast-types: 0.14.2
       magic-string: 0.27.0
@@ -5276,8 +4163,8 @@ packages:
       - vite-plugin-glimmerx
     dev: true
 
-  /@storybook/react/7.0.0-rc.5_ygqkwb4gg3aean7xjfdauovyqq:
-    resolution: {integrity: sha512-YtCtDEPaj9owwxuk5xlv+hQTywGe4f2jZJxG+if8tZH2wXDSBJC5uNKd1U7gVUBwM6DuXXVhpud/NW8wEYN2vg==}
+  /@storybook/react/7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq:
+    resolution: {integrity: sha512-RmHXOxNW6gGqkotTIudWxPB909btJ2pr0daWxFgVKzJFko2ZA+z4Bzdn35COVj3/6vNk1/bq1TzDStFbjDLjmw==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5287,13 +4174,13 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-client': 7.0.0-rc.5
-      '@storybook/docs-tools': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-client': 7.0.0-rc.6
+      '@storybook/docs-tools': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/react-dom-shim': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/react-dom-shim': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       '@types/escodegen': 0.0.6
       '@types/estree': 0.0.51
       '@types/node': 16.18.16
@@ -5315,19 +4202,6 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/router/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-J/7/NTFjBndHDN7a5bQWpkczOJUxRKVbqW4ggNh9di9Z9wb4IuQlz572eo4bM/kWfRPo0zR/tgBT8F/zVWd6JA==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-    dev: true
-
   /@storybook/router/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-s23O2OOQ4+CvySk3QC/PXhDJChc4jjyQu/h3gLMKF7bfWx0bd5KR4LnP3rCKLIMkxoJYFPUayPMgwEEeN/ENSw==}
     peerDependencies:
@@ -5341,11 +4215,39 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/telemetry/7.0.0-rc.4:
-    resolution: {integrity: sha512-+bxoxJd3P2Yph7wMK5HrSW9NiHNpCIse02KTN1/HCjI9/tyAdv5pyWp9t4ElzD8eefu9dgqdSbiWkT8PIxuf0Q==}
+  /@storybook/router/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-qK53NWIQo9Q2pg5kFlT3YhSKiqO99HGiwN4wIX5W/T8p0+fJYrNgtcydcNWInQEO9p+ryA2B59hADpqqh86c8A==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/core-common': 7.0.0-rc.4
+      '@storybook/client-logger': 7.0.0-rc.6
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/source-loader/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-oEHEL26kOXRnTnBdZrMwUZAM2F8X9aFoqVmNIbLESx5QAlHGY04YLzKhi/tp31ZxoalxR7GveQ0GDzSDc62sCw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/types': 7.0.0-rc.6
+      estraverse: 5.3.0
+      lodash: 4.17.21
+      prettier: 2.8.4
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+    dev: true
+
+  /@storybook/telemetry/7.0.0-rc.6:
+    resolution: {integrity: sha512-OK8aLVuLPokZMGiSqJKSCvroNKyAXh0w9s0XWGbXuMZHDsMn5XCS/Mc8NrWTV4v37xM6mHe4BQSMnX1EWFOYpA==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.6
       chalk: 4.1.2
       detect-package-manager: 2.0.1
       fetch-retry: 5.0.4
@@ -5361,27 +4263,13 @@ packages:
   /@storybook/testing-library/0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/instrumenter': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/instrumenter': 7.0.0-rc.6
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/theming/7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-Bmg2M3ifuZANr2dWUU8Wf1I/aBrp4qIJod3A8YgjFUm6QFUa5wStq0Aue6T5KocKRLbZbQpfmwhnob1PoGjoog==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
-      '@storybook/client-logger': 7.0.0-rc.4
-      '@storybook/global': 5.0.0
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-    dev: true
-
   /@storybook/theming/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-OzwybDA2+4FWg85tcTNQkVI0JnHkwCRG9HM1qx9hOZJHNRfxmJFjJePOnBoXM6CjVlz0S1PJUwCmMHNH8OTvEw==}
     peerDependencies:
@@ -5396,13 +4284,18 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
-  /@storybook/types/7.0.0-rc.4:
-    resolution: {integrity: sha512-Zu9weYGeKrnaWgVk2vtPU/MpUp6EtM27ehqJVK3x0I/sa8/MXCc411ErblALLVrMX6KhFjUFU98gHlvo8ietIA==}
+  /@storybook/theming/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-/pBo3xJ/PxC01WgBd7WutNTprKWXaCS+Ei+NuTLOJQGTwCaTtyd2dI5i0t9UZFB8FBRo8pcrmwjos9ZuQrekKg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 7.0.0-rc.4
-      '@types/babel__core': 7.20.0
-      '@types/express': 4.17.17
-      file-system-cache: 2.0.2
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
+      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
     dev: true
 
   /@storybook/types/7.0.0-rc.5:
@@ -5414,17 +4307,26 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/vue3-vite/7.0.0-rc.4_y344amzr55z4s7r3flz6cvxaae:
-    resolution: {integrity: sha512-QqvQfJoK6mgaGBD64cqrqJmATPFKbTlPOe8yX2PNpvEvYH85R9Jq/hwk02Kc4ZVhYnBH4t7lGaSaZYtnwogH7w==}
+  /@storybook/types/7.0.0-rc.6:
+    resolution: {integrity: sha512-miG7HXDgMSMJ/IMQTYqmelqTtPTbMTml1zOP3PXgswvrCY8RFYytNp7DM6dpADRU7wsAOo1BwnEUSYkS3CKxUQ==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.6
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/vue3-vite/7.0.0-rc.6_y344amzr55z4s7r3flz6cvxaae:
+    resolution: {integrity: sha512-hmG7MhnXx1AuIEhpQ+73uRwBpG887zyQnTle3OxA1MnntUGSHgFrdev17zT5q3TUn6XXnw+cMJj3AXAE/kGCCw==}
     engines: {node: ^14.18 || >=16}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
       vite: ^3.0.0 || ^4.0.0
     dependencies:
-      '@storybook/builder-vite': 7.0.0-rc.4_vwvfc4ezh6jlf6pa67auy3eulu
-      '@storybook/core-server': 7.0.0-rc.4
-      '@storybook/vue3': 7.0.0-rc.4_vue@3.2.47
+      '@storybook/builder-vite': 7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu
+      '@storybook/core-server': 7.0.0-rc.6
+      '@storybook/vue3': 7.0.0-rc.6_vue@3.2.47
       '@vitejs/plugin-vue': 4.0.0_vite@4.1.4+vue@3.2.47
       magic-string: 0.27.0
       react: 18.2.0
@@ -5443,17 +4345,17 @@ packages:
       - vue
     dev: true
 
-  /@storybook/vue3/7.0.0-rc.4_vue@3.2.47:
-    resolution: {integrity: sha512-zn4WACjUGTTlNn2W5Y+2Gcdey1hgqy+XUbE233XRN8ompOFUK01udF6Fx9lo0UJ5HxBjTZsMYx3KoovtaY5TDg==}
+  /@storybook/vue3/7.0.0-rc.6_vue@3.2.47:
+    resolution: {integrity: sha512-/PermfD1zNJbzFbgVS7oFKYvLxsF4XjH+sNPHC7pVROuxQ4VPNl5pjLgsQbZ4zRBbtnz5yf3loHijEeOiM+MFA==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       vue: ^3.0.0
     dependencies:
-      '@storybook/core-client': 7.0.0-rc.4
-      '@storybook/docs-tools': 7.0.0-rc.4
+      '@storybook/core-client': 7.0.0-rc.6
+      '@storybook/docs-tools': 7.0.0-rc.6
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.4
-      '@storybook/types': 7.0.0-rc.4
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.6
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       vue: 3.2.47
@@ -6026,6 +4928,12 @@ packages:
       chokidar: 3.5.3
     dev: true
 
+  /@types/hast/2.3.4:
+    resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
   /@types/http-cache-semantics/4.0.1:
     resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
 
@@ -6728,7 +5636,7 @@ packages:
   /@vue/compiler-core/3.2.47:
     resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       '@vue/shared': 3.2.47
       estree-walker: 2.0.2
       source-map: 0.6.1
@@ -6770,7 +5678,7 @@ packages:
   /@vue/reactivity-transform/3.2.47:
     resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       '@vue/compiler-core': 3.2.47
       '@vue/shared': 3.2.47
       estree-walker: 2.0.2
@@ -6827,6 +5735,26 @@ packages:
     engines: {node: '>=10.0.0'}
     dev: true
 
+  /@xstate/react/3.2.1_react@18.2.0+xstate@4.37.0:
+    resolution: {integrity: sha512-L/mqYRxyBWVdIdSaXBHacfvS8NKn3sTKbPb31aRADbE9spsJ1p+tXil0GVQHPlzrmjGeozquLrxuYGiXsFNU7g==}
+    peerDependencies:
+      '@xstate/fsm': ^2.0.0
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      xstate: ^4.36.0
+    peerDependenciesMeta:
+      '@xstate/fsm':
+        optional: true
+      xstate:
+        optional: true
+    dependencies:
+      react: 18.2.0
+      use-isomorphic-layout-effect: 1.1.2_react@18.2.0
+      use-sync-external-store: 1.2.0_react@18.2.0
+      xstate: 4.37.0
+    transitivePeerDependencies:
+      - '@types/react'
+    dev: true
+
   /@yarnpkg/esbuild-plugin-pnp/3.0.0-rc.15_esbuild@0.16.17:
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
     engines: {node: '>=14.15.0'}
@@ -6871,7 +5799,7 @@ packages:
   /acorn-globals/7.0.1:
     resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
     dependencies:
-      acorn: 8.8.1
+      acorn: 8.8.2
       acorn-walk: 8.2.0
     dev: false
 
@@ -7124,7 +6052,7 @@ packages:
     engines: {node: '>= 6'}
     dependencies:
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       lazystream: 1.0.1
       lodash.defaults: 4.2.0
       lodash.difference: 4.5.0
@@ -7534,19 +6462,6 @@ packages:
       '@types/babel__traverse': 7.18.3
     dev: true
 
-  /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12:
-    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.20.10
-      '@babel/core': 7.20.12
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.3:
     resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
     peerDependencies:
@@ -7560,18 +6475,6 @@ packages:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12:
-    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
-      core-js-compat: 3.29.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3:
     resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
     peerDependencies:
@@ -7584,17 +6487,6 @@ packages:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12:
-    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3:
     resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
     peerDependencies:
@@ -7606,26 +6498,6 @@ packages:
       - supports-color
     dev: true
 
-  /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12:
-    resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.20.12
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12
-      '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12
-      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12
-    dev: true
-
   /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3:
     resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
     peerDependencies:
@@ -8243,11 +7115,23 @@ packages:
     resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
     engines: {node: '>=10'}
 
+  /character-entities-legacy/1.1.4:
+    resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+    dev: true
+
+  /character-entities/1.2.4:
+    resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+    dev: true
+
   /character-parser/2.2.0:
     resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
     dependencies:
       is-regex: 1.1.4
 
+  /character-reference-invalid/1.1.4:
+    resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+    dev: true
+
   /chardet/0.7.0:
     resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
     dev: true
@@ -8627,6 +7511,10 @@ packages:
     dependencies:
       delayed-stream: 1.0.0
 
+  /comma-separated-tokens/1.0.8:
+    resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
+    dev: true
+
   /commander/2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
@@ -9975,6 +8863,7 @@ packages:
   /escodegen/2.0.0:
     resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
     engines: {node: '>=6.0'}
+    hasBin: true
     dependencies:
       esprima: 4.0.1
       estraverse: 5.3.0
@@ -10746,6 +9635,12 @@ packages:
     dependencies:
       reusify: 1.0.4
 
+  /fault/1.0.4:
+    resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+    dependencies:
+      format: 0.2.2
+    dev: true
+
   /fb-watchman/2.0.2:
     resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
     dependencies:
@@ -11083,6 +9978,11 @@ packages:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
+  /format/0.2.2:
+    resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+    engines: {node: '>=0.4.x'}
+    dev: true
+
   /formdata-polyfill/4.0.10:
     resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
     engines: {node: '>=12.20.0'}
@@ -11135,7 +10035,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       at-least-node: 1.0.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jsonfile: 6.1.0
       universalify: 2.0.0
     dev: true
@@ -11175,7 +10075,7 @@ packages:
     resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
     engines: {node: '>=0.6'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       inherits: 2.0.4
       mkdirp: 0.5.6
       rimraf: 2.7.1
@@ -11793,6 +10693,20 @@ packages:
     resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==}
     dev: false
 
+  /hast-util-parse-selector/2.2.5:
+    resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
+    dev: true
+
+  /hastscript/6.0.0:
+    resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
+    dependencies:
+      '@types/hast': 2.3.4
+      comma-separated-tokens: 1.0.8
+      hast-util-parse-selector: 2.2.5
+      property-information: 5.6.0
+      space-separated-tokens: 1.1.5
+    dev: true
+
   /he/1.2.0:
     resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
     hasBin: true
@@ -11808,7 +10722,6 @@ packages:
 
   /highlight.js/10.7.3:
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
-    dev: false
 
   /homedir-polyfill/1.0.3:
     resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
@@ -12206,6 +11119,17 @@ packages:
       kind-of: 6.0.3
     dev: false
 
+  /is-alphabetical/1.0.4:
+    resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+    dev: true
+
+  /is-alphanumerical/1.0.4:
+    resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+    dependencies:
+      is-alphabetical: 1.0.4
+      is-decimal: 1.0.4
+    dev: true
+
   /is-arguments/1.1.1:
     resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
     engines: {node: '>= 0.4'}
@@ -12289,6 +11213,10 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
+  /is-decimal/1.0.4:
+    resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+    dev: true
+
   /is-deflate/1.0.0:
     resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
     dev: true
@@ -12388,6 +11316,10 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /is-hexadecimal/1.0.4:
+    resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+    dev: true
+
   /is-installed-globally/0.4.0:
     resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
     engines: {node: '>=10'}
@@ -12935,7 +11867,7 @@ packages:
       '@jest/types': 29.5.0
       '@types/stack-utils': 2.0.1
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       micromatch: 4.0.5
       pretty-format: 29.5.0
       slash: 3.0.0
@@ -13079,21 +12011,21 @@ packages:
     resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/generator': 7.20.7
-      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12
-      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/core': 7.21.3
+      '@babel/generator': 7.21.3
+      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
       '@jest/expect-utils': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
       '@types/babel__traverse': 7.18.3
       '@types/prettier': 2.7.2
-      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12
+      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3
       chalk: 4.1.2
       expect: 29.5.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-diff: 29.5.0
       jest-get-type: 29.4.3
       jest-matcher-utils: 29.5.0
@@ -13272,7 +12204,7 @@ packages:
       '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3
       '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
       '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3
-      '@babel/preset-env': 7.20.2_@babel+core@7.20.12
+      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
       '@babel/preset-flow': 7.18.6_@babel+core@7.21.3
       '@babel/preset-typescript': 7.21.0_@babel+core@7.21.3
       '@babel/register': 7.21.0_@babel+core@7.21.3
@@ -13367,6 +12299,7 @@ packages:
 
   /json5/1.0.1:
     resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
+    hasBin: true
     dependencies:
       minimist: 1.2.7
     dev: true
@@ -13763,6 +12696,13 @@ packages:
     resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  /lowlight/1.20.0:
+    resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+    dependencies:
+      fault: 1.0.4
+      highlight.js: 10.7.3
+    dev: true
+
   /lru-cache/4.1.5:
     resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
     dependencies:
@@ -14161,6 +13101,7 @@ packages:
 
   /mkdirp/0.5.6:
     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+    hasBin: true
     dependencies:
       minimist: 1.2.7
 
@@ -14463,7 +13404,7 @@ packages:
     dependencies:
       env-paths: 2.2.1
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       make-fetch-happen: 10.2.1
       nopt: 6.0.0
       npmlog: 6.0.2
@@ -14974,6 +13915,17 @@ packages:
       data-uri-to-buffer: 0.0.3
     dev: false
 
+  /parse-entities/2.0.0:
+    resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+    dependencies:
+      character-entities: 1.2.4
+      character-entities-legacy: 1.1.4
+      character-reference-invalid: 1.1.4
+      is-alphanumerical: 1.0.4
+      is-decimal: 1.0.4
+      is-hexadecimal: 1.0.4
+    dev: true
+
   /parse-filepath/1.0.2:
     resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
     engines: {node: '>=0.8'}
@@ -15676,10 +14628,14 @@ packages:
     resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
     engines: {node: '>= 0.8'}
 
+  /prismjs/1.27.0:
+    resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
+    engines: {node: '>=6'}
+    dev: true
+
   /prismjs/1.29.0:
     resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
     engines: {node: '>=6'}
-    dev: false
 
   /private-ip/2.3.3:
     resolution: {integrity: sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==}
@@ -15766,6 +14722,12 @@ packages:
       react-is: 16.13.1
     dev: true
 
+  /property-information/5.6.0:
+    resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+    dependencies:
+      xtend: 4.0.2
+    dev: true
+
   /proto-list/1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
     dev: true
@@ -16167,6 +15129,19 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /react-syntax-highlighter/15.5.0_react@18.2.0:
+    resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
+    peerDependencies:
+      react: '>= 0.14.0'
+    dependencies:
+      '@babel/runtime': 7.20.7
+      highlight.js: 10.7.3
+      lowlight: 1.20.0
+      prismjs: 1.29.0
+      react: 18.2.0
+      refractor: 3.6.0
+    dev: true
+
   /react/18.2.0:
     resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
     engines: {node: '>=0.10.0'}
@@ -16368,6 +15343,14 @@ packages:
     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
     dev: false
 
+  /refractor/3.6.0:
+    resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
+    dependencies:
+      hastscript: 6.0.0
+      parse-entities: 2.0.0
+      prismjs: 1.27.0
+    dev: true
+
   /regenerate-unicode-properties/10.1.0:
     resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
     engines: {node: '>=4'}
@@ -16607,6 +15590,7 @@ packages:
 
   /resolve/1.22.1:
     resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+    hasBin: true
     dependencies:
       is-core-module: 2.11.0
       path-parse: 1.0.7
@@ -17320,11 +16304,29 @@ packages:
     resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
     dev: true
 
-  /storybook/7.0.0-rc.4:
-    resolution: {integrity: sha512-Hj06cdZe55hBGfbMwOpI8a5Mj/Dn8njNpcrgPIFcq6fHTU24MGrJP+e15+yo+NLmpJ+6tdsCByd9V6XQ7+r4ew==}
+  /storybook-addon-performance/0.17.1_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-pOt33LwBJU2fWzyawy+i03M5b27gF/+/EgexyvZZtWhab3GLdQcLnIqt7fTMLOievYmibbiD23M64Fbq91POUQ==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@xstate/react': 3.2.1_react@18.2.0+xstate@4.37.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      xstate: 4.37.0
+    transitivePeerDependencies:
+      - '@types/react'
+      - '@xstate/fsm'
+    dev: true
+
+  /storybook/7.0.0-rc.6:
+    resolution: {integrity: sha512-ZdQatRnVDzxsWbuP8dcue+W/sWRaQmyBQPlrSLLw6upYQq0+LmP9eNjroz+KmQaGwHt7T51ra/xaSTDb54Chbw==}
     hasBin: true
     dependencies:
-      '@storybook/cli': 7.0.0-rc.4
+      '@storybook/cli': 7.0.0-rc.6
     transitivePeerDependencies:
       - bufferutil
       - encoding
@@ -18422,6 +17424,18 @@ packages:
     resolution: {integrity: sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==}
     dev: false
 
+  /use-isomorphic-layout-effect/1.1.2_react@18.2.0:
+    resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
+    peerDependencies:
+      '@types/react': '*'
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      '@types/react':
+        optional: true
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /use-resize-observer/9.1.0_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==}
     peerDependencies:
@@ -18433,6 +17447,14 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /use-sync-external-store/1.2.0_react@18.2.0:
+    resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /use/3.1.1:
     resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
     engines: {node: '>=0.10.0'}
@@ -18716,8 +17738,8 @@ packages:
   /vue-docgen-api/4.64.1_vue@3.2.47:
     resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       '@vue/compiler-dom': 3.2.47
       '@vue/compiler-sfc': 3.2.47
       ast-types: 0.14.2
@@ -19144,6 +18166,10 @@ packages:
     resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
     dev: false
 
+  /xstate/4.37.0:
+    resolution: {integrity: sha512-YC+JCerRclKS9ixQTuw8l3vs3iFqWzNzOGR0ID5XsSlieMXIV9nNPE43h9CGr7VdxA1QYhMwhCZA0EdpOd17Bg==}
+    dev: true
+
   /xtend/4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
@@ -19297,7 +18323,7 @@ packages:
       sharp: 0.31.3
     dev: false
 
-  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_vcphge7oza42ndhprrearltd3q:
+  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_hp2ec65oinwl37fsk4exx24idq:
     resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
     id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
     name: storybook-addon-misskey-theme
@@ -19318,13 +18344,13 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/components': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/manager-api': 7.0.0-rc.4_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/types': 7.0.0-rc.6
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: true

From bd7cc6ac385b9b6f2e200c58b83d5ebc7a742d79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 24 Mar 2023 23:22:49 +0900
Subject: [PATCH 20/99] docs: note about Storybook

---
 CONTRIBUTING.md                               | 84 +++++++++++++++++++
 packages/frontend/.storybook/main.ts          | 12 +--
 .../src/components/MkCaptcha.stories.impl.ts  |  2 +
 .../src/components/MkCaptcha.stories.ts       | 30 +------
 .../global/MkAvatar.stories.impl.ts           |  1 -
 .../src/components/global/MkAvatar.stories.ts |  8 --
 6 files changed, 90 insertions(+), 47 deletions(-)
 create mode 100644 packages/frontend/src/components/MkCaptcha.stories.impl.ts

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 887d17961f..7f8ed0922f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -203,6 +203,90 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
 vue-routerとの最大の違いは、niraxは複数のルーターが存在することを許可している点です。
 これにより、アプリ内ウィンドウでブラウザとは個別にルーティングすることなどが可能になります。
 
+## Storybook
+
+Misskey uses [Storybook](https://storybook.js.org/) for UI development.
+
+### Setup
+
+```bash
+cd path/to/packages/frontend
+pnpm tsc -p .storybook && (node .storybook/generate.js & node .storybook/preload-locale.js & node .storybook/preload-theme.js)
+```
+
+### Run
+
+```bash
+cd path/to/packages/frontend
+pnpm storybook dev
+```
+
+### Usage
+
+When you create a new component (in this example, `MyComponent.vue`), the story file (`MyComponent.stories.ts`) will be automatically generated by the `.storybook/generate.js` script.
+You can override the default story by creating a impl story file (`MyComponent.stories.impl.ts`).
+
+```ts
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MyComponent from './MyComponent.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MyComponent,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MyComponent v-bind="props" />',
+		};
+	},
+	args: {
+		foo: 'bar',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAvatar>;
+```
+
+If you want to opt-out from the automatic generation, create a `MyComponent.stories.impl.ts` file and add the following line to the file.
+
+```ts
+import MyComponent from './MyComponent.vue';
+void MyComponent;
+```
+
+You can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file and add the following line to the file.
+
+```ts
+import { rest } from 'msw';
+export const handlers = [
+	rest.post('/api/notes/timeline', (req, res, ctx) => {
+		return res(
+			ctx.json({
+				notes: [],
+				users: [],
+				hasNext: false,
+			})
+		);
+	}),
+];
+```
+
+Don't forget to re-run the `.storybook/generate.js` script after adding, editing, or removing the above files.
+
 ## Notes
 ### How to resolve conflictions occurred at pnpm-lock.yaml?
 
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 90cc57536f..c58b6f1d70 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,7 +1,6 @@
 import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
-import { getConfig } from '../vite.config';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
@@ -22,18 +21,9 @@ const config = {
 		disableTelemetry: true,
 	},
 	async viteFinal(config, options) {
-		const { plugins, build: { rollupOptions, ...build }, ...original } = getConfig();
-		console.dir(config, {depth:Infinity});
-		console.dir(original, {depth:Infinity});
-		const x = mergeConfig(config, {
-			...original,
-			build,
+		return mergeConfig(config, {
 			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
-			server: {
-				hmr: false,
-			},
 		});
-		return x;
 	},
 } satisfies StorybookConfig;
 export default config;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.impl.ts b/packages/frontend/src/components/MkCaptcha.stories.impl.ts
new file mode 100644
index 0000000000..6ac437a277
--- /dev/null
+++ b/packages/frontend/src/components/MkCaptcha.stories.impl.ts
@@ -0,0 +1,2 @@
+import MkCaptcha from './MkCaptcha.vue';
+void MkCaptcha;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
index 78db7287ae..680c0387cc 100644
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ b/packages/frontend/src/components/MkCaptcha.stories.ts
@@ -1,34 +1,10 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCaptcha from './MkCaptcha.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/MkCaptcha',
 	component: MkCaptcha,
 } satisfies Meta<typeof MkCaptcha>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCaptcha,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCaptcha v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCaptcha>;
 export default meta;
+import MkCaptcha from './MkCaptcha.vue';
+void MkCaptcha;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index ca3db80b2e..6de5768af8 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -1,5 +1,4 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
 /* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkAvatar from './MkAvatar.vue';
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 6cd9ca0a9b..4d819982ee 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -7,7 +7,6 @@ const meta = {
 } satisfies Meta<typeof MkAvatar>;
 export default meta;
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
 /* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkAvatar from './MkAvatar.vue';
@@ -68,13 +67,6 @@ export const ProfilePageCat = {
 		user: {
 			...ProfilePage.args.user,
 			isCat: true,
-			// avatarUrl: 'https://millionlive-theaterdays.idolmaster-official.jp/assets/data/webp/common/footer/icon_app.png.webp',
-			// avatarUrl: 'https://cdn.imastodon.net/accounts/avatars/000/144/021/original/8137afa4114ab85f.png',
-			// avatarUrl: 'https://avatars.githubusercontent.com/u/4439005?v=4',
-			// avatarUrl: 'https://avatars.githubusercontent.com/u/7973572?v=4',
-			// avatarUrl: 'https://avatars.githubusercontent.com/u/6533808?v=4',
-			// avatarUrl: 'https://avatars.githubusercontent.com/u/7106976?v=4',
-			avatarUrl: 'https://avatars.githubusercontent.com/u/3396686?v=4',
 		},
 	},
 };

From 8332c03bd81437f863017dedc6215a6f3dc216d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 04:00:09 +0900
Subject: [PATCH 21/99] build(#10336): sync

---
 packages/frontend/.storybook/manager.ts       |  2 +-
 .../pages/settings/drive-cleaner.stories.ts   | 34 +++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 packages/frontend/src/pages/settings/drive-cleaner.stories.ts

diff --git a/packages/frontend/.storybook/manager.ts b/packages/frontend/.storybook/manager.ts
index 33213bffa9..5653deee84 100644
--- a/packages/frontend/.storybook/manager.ts
+++ b/packages/frontend/.storybook/manager.ts
@@ -6,7 +6,7 @@ addons.setConfig({
 		base: 'dark',
 		brandTitle: 'Misskey Storybook',
 		brandUrl: 'https://misskey-hub.net',
-		brandImage: 'https://github.com/misskey-dev/assets/blob/main/misskey.svg?raw=true',
+		brandImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAABgCAYAAAEobTsDAAAACXBIWXMAACxKAAAsSgF3enRNAAA4fklEQVR42uydaZBU1RXHX/frjWkG2ZR9HXDYkaCAEI0awSX5lA/G0i/5lLXKUoEwgAYjoIPgCMNioUAYUEipJKYs1mFREWXpASpEU1gMZaosNRY1KUsQFPDknMw7cOs/78573TSmwXerfvX63X057/S9r8+97RCRE9FMyVYs6oxS6gx2CSZu3Ltyz8QkrFQbUSwcs+FLD42npYd+QF4HJBfsSpIwb/d4enbvbeIfU4gdfg5RYH3Yimne33zzzY1YXmtpzp49O7EYnZFYtH8ILTlYyfSlp+qz9PT2LFWtT0hg6r5pgx/XynjSQ3I10UprxfEe/c2wL774oqN3m9Myzp8//wKWgXkY6ShE+aZrUn/fzlh9tIwW7etBixs6M+X02F8yNH29QzV7xghm410vo4Ty7bffbvf8XA0XP71XP72in9lYLYNJsGT8WvwgrXTUr4z4rnLmzJlJmDfeSxzs3BadseJIioTaXBsmTjNedmjGOoelpILmbqsgiaOV9DJJMim5CuqHiP+ePXuu03C9wueEYHbyxx9/fL3kr2ga6SCNB/mkWFLuVj9vMJJYlsTRthidHzM7w11+0CVBe3Lm+ubOmPW39jTr9fak/kbG6dOnT8/Uz0eOHBnM14wgfuovnDt37jW990vrkTI7eePGjV0ljuan8Xw+Z7jjbparpNE6aNiXX375O/O+qanpHu3cFp2hsGvDJIz7jJcowZQxcR0NrYwW7KUta4U2JupP7Ay/jHaKmT+mhTRB5WYVqIe2LXnhMc1Lu9s7QwvQwtt6ZE00vK6urgd5Tv3NzgAy2BHr16/vjg1uhbaKpazCO0MfE8voWSpmqThWUKVCsUtHWR5kFewIlIySnQBF0/GoM0pzOh7r0ieeNQMrRjqD5dq1X7aDhJdqI4reGUsP3cLrkjE8FR9xXu51XdJrUKxbDa9Lnn57HIm/z7S60Vg/OAFQHsoay2kKKkPTXHJnLNo3kqfgQ7kzKnjG2Y5kXSL0GRrv++iqsX+Vr1SoJK4XdJEkrhHWAtV6r1frOsW+/pEpeBXUwbr2wDBbOt/OkHUJwx3SlelAszZ2oGkvOdSzMlYp65Jn3xlDUMmEonN+nv6+KlfBb93gc98IU2LFFTRvLU/j4hrGrwwemOmWcjGPWIu1ia5Lat7Jnq/NJWnqKodkOt6jMj5I1yZaOK5L9N6Pr7766n5zTSLrDQ07ceLEWCN9wkTzV8w8zDiCLhI1XlCdNA8yp+LmdNxYl6SZRNVLzinpjFTGaSfrEgEWaSnbOgGuaduVG3Fc73ExZjQs09raRNciWLauV9DPLE8lxnehxpQZ93G593otyyRh9gnrEibPdQmL8k7LrLBl/oouvLBMOzgLxrIS2hmXOhXP4FTctjYxK0ee40Y9DtPkwHWJOImf79rE0iHaGW5enSHoY4IdUtDaxL5wSlmkowjrkpaLNFMySnYCFBEtTSIiwYi4UvD9Dp27ZczBpYd+xEvYCcw4ncQ7SocuTueaN+OkcHhi4f4fn15y8G5e5d1Ftz/Y+2fWn7osrtjvB8ysLwf6Ux+1dI1Xw7sOvwYnWBhYIG5kbuCBHs4Mpqlru2/lsNS8HRlC+gyN9ete2WbErPqRNGvbSH2FH0NInP0nyXoVkCsBW1tUWIpVjj5Mxax7wYKx5lhbEmreHUCLG/qxYPTma3fmOvrjpnY0Z1szj6xyaMoah3oOig2s3X8bKb+sGb4SKhMXjM50/ZAwfnczz4yP74/0d2h5beIXbn623YeNwwveTsY94tJF13T06NHO0B6skxLDMqUcWx0MwYhj3U+dOnWTcd8U0H51ORDuar0PFIxVH2ToAu9naNGBTiwU1zBZqs2lGZemskDMWO/QdKYnv/p55s1hJMzb1YzZOebA21636BsS+TlZP9uchGMc7sBnxE8x4/JPzGP0M4L5obCiH6RPIma5CtobmO/fWMAbsG0mJ0+evAv8Q/eNJR9XAeGJKVbBePFwkgzEs/yhFxNv1OYcks9Va5vfBerP8z0q3UGzN3Uj4cmNzRhrYtdnsFKIhpn3X3/99QyM99lnn42TKz8tv7XlYcsP49vjtLRfMIG0aQTLYkOQ34BlTFLD2Cxhh372e4UnpgJooqCmDJrGjGurg9hfmG2B8XBROHwnVfwmfMTzB2IkzN8e+5ckRJOFx1gghJkvO+KRmfgL95GZr6ZIcBNOW3zCjA5FJ1piheQBtOGGPkjg8I0XOk0v71X1XpFyNB4L3cpPP/30J5onvCNNCzaB0nB5t2qrA2IL88tjw4YN3aCdodpvvlqFuBmxmfGzgZF+Mt7yxS/LCy6cU5hvBwWUcBQEBd7WhaEsCGJ37NixCWY6MAvBt4FCOgCoO5CnXU3INmbDgu3Ctql2VMEQLqdgKHHUGH6mJyYBgtEWCOiQcPY7SoBgpACbYCNl+RBS6LPh+8UuFOEE4/JrDRQOJQ1YhKQoZJV8BQLnF0qQkF9Wwv9Sh23CdiUEFYrot5KI6JV4RCQYEZFgRESCEREJRkQJCwa7+IBRZSP56trCr+vllKnBtOfnDhzd8UYJK9XGRhQsGLrN+XZq3lIwnsraxTugUJi2GFVr4rvYL7m4YRLHv5tqc5PITzjAUv27sGEQN+1y2mPY7EquSnuMPkOS3dVAR20yZOBVKBbsTJ7XfScK+2cXvHsr1ey7nebvuYU0vmDbK4/+GFYkwXCKSYg659TvUttillMSgtF3WLqCNx/JwQiyAYkZylRKTVMPPZ/a5GOoI2FtHt86nJ6ov4Fmbh56RrQOdiTYISDaActL1TAnbFvEX2woilxOrJgUpjGGpSpeONKDag8ME8stZiDTbKwzd5tsyrrInC1l7FdGIjTpMre8dv9dH6L1VtCBEhZDk5hgU9N6mERr4Xgv5yeQ4dDSSgfUL08ABSBuQ8uxDDa2ETer1Qd8VTViezBPdBimG9rCaYzh8Qq14Ko9UEFygsjihp5MV6Yzzd560YJrSp1Dk1c7JMJgWHDJfcLSmVbrLbFG8rE4atJ7DQ9r+WSzxML4WJ4ONsZBdM8XGt4oKOyKDqjdCs1+j2VjPGyLaeGFgsU2Hfeh4AcKhu5YrN3XmWpz/zPpYzoy19DC/Vl6YnMHmrK62Xpr2tpm4x3ZyajwfVoLs5+60hJTcGzWVNKgICHD9DrBDRknbjera2nJpYMvDuwbrCfEsLYboAMcrh3BfipwGo5xVEPYjuZRWhEMt8I07at5txMLRwc5asc7ZSZJj650qEpOmvmzI1tcJfN2hmmf3GdQKEAwkog8dRKuZmhB5mtBJnGmX1izPikXj+nJx7RPT8yRATfzlbraBtVunmive1DfBJkXKiD0McUyx3ArdFuvwlpCbT154GPnTNM++SyCIdt9jS2/GdseZb+fsMFWMglmaIGYal398LMMmt7b4ki5NntLICnmelJ3RC3HUFgkHWgUBrY8e2779u1d8jU3xHCMg+1AwQg07esz1K3ws/mU86imvhTfJp9nrGspGKbNJwoGSG0KkY7AML+4x48fr0RbSUxj+ywuIL4Khg6CVUAhbdoEy7LvO29ptwrpwf7Tam6YDlMHFDDUIoGCkS6LZWXfu/J8zj2pg+td0zNbCka5ntclSBzUFtoxOri6V138VN1C48TvP2g3aX6W9Gh/aabH/LxzvbDzMnqvxrQWA1oFhS2tdfr888/vNfPBc8iwTn55eF8pG8x7PUtMkX7RuiveHOKgn32p2R+opdFIxyoYkkiMgBVZcUC4O3Wl8281Br62V6xSCp/5mhgCNyOForbQioQ1nvUzdjX3/H/00UfjMdzvgDYTMhzaYUL6tCBC3JoxMIHztM4DUC4Ickv/1gyepc1+YSoc6uRerbdEQDRukKFzaAsu8WRSXiEZy+vthFZCzxDwCst6VzesMXCwQXB48jWFI3ZhzOFQKMLbfOLABNereHai9nah5vjeWonLqSTEzsxTnqrvykpcvx4iK/ECBaOYVuKYB/m4AIvqSxYMKCvwyS+QtkgpC0a0fSDaPtC6YFi0hlVzFP/rxC4cIbVFykK62AJS/C0RwUKBc4xoX0m0ryTaVxIRERHZAkdEREQKIyIiolQp2YpFRERECiMiIuIK5tI2YhVlM5c9ztWy0y8i4mohnwc8Ub1j3D+WHb6Dlh66jbmV+SF17ZfsFmZvu8Tp1t/ptfCtGJnMft05rMfEeiT5mPrzSw/dQ8sO30tynVw3bg37uwUojzuZHNldPbNc4pXqAPkwmmlilpdo/fKlP1PN5GBcppVofb/XOGEedCZlKAlmPHMzM5a5iRmtlrJxv/SxmJN69s0EtYb+Ri1/I8//bUG1uYnMJFp0YCI9t/8O4m30Z82DOGxYNnU2MfWIuX0MN4CW6oBBVV8p0TpaMTYQo2vUcbnCzpXob1bzaifMALt9h8uRCBNQSTCjmJHef5nI1sSBn+iWAY/k7DdSn8zfmaYg5L9OOH72yR2j6am3xlL12zdT9e7xJP/1OnfXGLrvD/2WeXnHUAD9QGELAwqy+kfLo3CEHJfl5DnexVeB4Qhsyehoi/f/apfsa44UBmwdkaMyljTcREsaRjOjWDmMZEYww5ghzCDmemYA05+q1nXcPaUus7d6exlV7wiH/P+xWsbxUJT/dHKXxffP6bH5hnvaPSCKBGcw+QiapAuiQGWjAqPfijk91iIM3kzmFWOmUy9KKyiNbvYPqQDrjbyrzHD9Vsd0XppGLBe+/ZdbHuDij4s9r5wQplzpL509FjQWGDecWx4wPlXm+MCYWsvVesEYW+ssilnj6HL28iqMoamKtY3lpDz33gBeKlTS4oYLSkLP2mF6sX8Phrc2by6nOVvLee97CzgsSw+vcOjhlQxfew9xRWGk+o+8ZujihjsJOKezixDEBRTMfPAGkozBibc2E5H4ODA6OBZBN11O8vMUTzWEVec7c/LJ4xXJ23tgcua3tS0f9Zd0mJfXNzlsf9B44NE12L+FENDP8MBAn17iWEgcwZQV9VOkj4PGXuLZznmypcU8sB7iQPmRhEs88feToaIqDDlap+7DLJms/KCcFu7tS7W5PqaSYLow1zKdmA4c3p6e2NSentzSnmZvbWby6hhNrZOTVppPXfl987/sVcpMYuHeCeQDK6kJpLOMMIIJneLmi7FDeDvkmwujiCQdxAutyOSYHYgD6a1hjZYwy0MbXIbUpZU2vlqAUnYFPR3H5ox/Q3SBOJ65BUcEITFQLEUbCz1qKWwfQLvyjodK2vJlNy/MDBnPT0UuUWG4FX/6ZxvyY8E7XWnR/i6sGFRJdGTaM+2YtkwZh2UYOY0nQZNXsYJY69D0dRf/eVEUh/z7IpdVvmD3KPJj/tuj9MWoazbMJpB45FA+6D8t6l98+ikSEdZ8lQ4KmPFPkW5YWlOE+eTJ/wP386B8JI7Wu4CHxbWQQPDkIp4NvUg+DrZPtlA88remYRRsMcYCj+ASV+i4IVIPjZtnHlifuI2wy+4C32G4FSvfT5ONZawUntvbnmoPtFASTJJxqWpdTA73kxmFKAk5y01AhdGueucgMnl6x0VAYVgE1KowkiFJ6NFZqGx0IPN18k2MDwYfuDNQp4w2d/DgwWtbO4sNHzTwDwTjo7/kWYSHJWEhGZYA5Y/j5SrS70H1K2QsCul3KtAFj729PuEVWPA7o7wVxoq/p6gVJGLHmvcyPNu4oCSYGOOQhE2rY+XAykJP7DL/wldO7urhKYy5W3uTyZwtF1CFkWhNUVg6N+lDCtCDJJ+BmUFSOXHixFjI87Igfz1snkZme3hsD5akt+UN7bTng+cWKoUrKazjfOn3IPToPU0XUqnoLNH+sBc+Fqn/snc+rU0EYRjfNUk3m9RSCmJVsEgQ23pQEfTgP1QQBC+ClyLoB5DSc7EFPXjTi9AiBQ8VpXqIHuo38OTFinjsd8gt4KXrvMJbpi+ZvJvJWLLpE/hRmp1/2Xnn2ZlJ9llCOrN18lNU+k3BrwzRnrJEEQxVOHJuepYaa1vlrAtsKJXY9+Pb7y2+l2IhBaN0hgTj+dcjmc2zzV0UwXAruhaQdsdrAd1LufYAlu9J/0m9Hr1+qseaHcyJ4yKduxwhGPy+FpwVBdl+bmPihq0c9XNuDygyXe0iniM5+yJhRP2JfE66fUwiPUplPHTKIwQyYfTzoAuYY3yUmBCCQZmrb4zhq4vrDw7N8bcYju+tK5fuxo+WPpDl416e0hLlXbTrf7X8pZ794/Nenqyk36QDoI28crCXZq8v9v50wc+El8+iJ09PQh6Tnpz0THXpNU51UuDRXzk1lvU7jok0+kv6f8r80p9UC05FKGwSMrqV7eGBS3R53n+iQWmlV6wLs+cx3akvqB/pr7TI5D6UiM3IH4Qrj7Tc5PooTrT6lLa4BGxE4FrmScFgdMGQsAFwtR5NvNiMf61+jzLDzp3HMQ2GmhQLl2hQ2qv34wUjEjuGbP51vDWSRuNUtjXgq9OXo1uLH+M/i5/ibGEt/l1JojEWC21m0S1QFao5SW1MBz3kIOegZ19aDTNVnjVXm7eUh4PNXB1fNpvNY1o7fNor293JX9ZVjuvKmR/3eadBw+eABy6dBxJXOq6hDyodpS9SDUpnfwbKq+WhNPRZWTyo/o2NjeP5rWr9+03MOBhNOFgwdKQho1VoHKgMmaYs/eOUpUhFoAaqgodnb1BSHyjoKHi18q3fDjTz1OshIL7nP/Wkag9Yj/y1/cXfg9K/v9wzjjyCMdAWfXIqFFowAghFPTC1ftne3r7SwYV/2fzu4h5BYmIfo/+1+pUA9KZfobCvzHIZE0IYAvZjPTR6f+nCoQkGA8H4/4IxqhA0QFzp19fXT7Tb7Vf2epqM9Vut1nyP9aSCgRAMnk2xaJh9kaVQV/x9ZjQPEAzPm5cC7mFUuzHAghEkIHsVjAB7GkGXJAVYKohywsaLr1BAMJSZRr9r6gIsTbyEwyMAg25+FlBAguIbF6GFYmj2MLSlicdMI8i3JgUI1LpO+BlF3q9VQ8z8hoSaRojN6LybnUMjGACAAvlhAAAABAMAAMEAAEAwAAAQDABAkRjYhgEAIBgAgAIzsA0DAEAwAAAFZmAbBgAYAsEwr5jBk9sBOFjkTsg3ek2eKo03LqQzlhlv3KPbVrlxLmocnYoO800undKcvjhx/uTM2CSlgXAAUCDBoEE8NZueXf15O1vZumm4YbiW/WXvzIKjOM4AvDu7O7urAySbw7KEBJIJt4wPQGDHBocAhlRsUqmC4IeEB8AkfsAHGBD3fR8CY05zGhwuGwfCseJGBowk4wBJ4Yp4igJFqOUBqniIw5//X22L5md7ujUWIAFd9ZXXM709PfN3f/3PLDATvuxwogZvVPeP/8LzzaKjXpDJbOlpKcSD+AZNaDfuk+/ehGVn+8ZYWt4HQin+ZCGWGrIVnEsE+biuBsfhnCqQ9Drav5oyFImwt7ivQHLraH8fa4xkEQx7gsvOvoGS6I68hryKdEO6wpTd7cuENJxkMXWXdX7BEQsS4fN77Ko3rDXIKyr9JUqiN7bdJyaLJWW9YfGZnsD+oWHtLQ+4KPQmrDp+KxQTYH1+Wzh7kbJRTJ7cooKnXghDrPoTv3rhSDyrQF6Jy6IA6Yy8DINnZC6VpcFlMWSOtWr+ET+oGLXedwDrhcbt6lKy8PQbMUEUlfYCksci/LzgVHdolBVqQPJyKYyIgkQlWocHZvRREIYq2yMUIllRh4UhZ0aeRx2TyRcQWUWVLLoiXZBOyEvIC8jzUPDr1P7ieYMsm25vWb+ddzgAOrBu0pRI5/NzSn4O80++DgtO94iJYh5+nn3iFWjWLiWT2lMJgsPfLO4Evdk8kTQYdWHApstvE4c6Oqg0camQ3zyuqkdvLwep0BvYnWL4sM6rvgv8fgjDTpBVIC8iHfG2IR/pgLSDjDx/rpAG4svI9ebOPRQEE7B+cpf+jX8/7XAnmHmsAGYd74Z0hRlHu8DUQy/R/lBtCUP3Hf69JylxzTG5xmyfVhpPhFFvhJEwq4jLoj3SFmmN/AyC4aoXG9n439kHQ2AKZRjE6K/bXp1wIB8mRTrCxMjzMGF/B8jvmfYW9QOxeOAMhWHpUA3oJ7igFuNS1+NR1/sneFDCsBB7aXlnWFr2MvIiSuGurAJpg7RCWiJ5SAsYMMaeO7M4CWYdNEZ+XV9ym9dT+g6Ylrm7f2HGajvsTZff2v4AhLFC+u4w3XGofel5SIRub1gd0++WIrMMUm+qV6FrG19j+FT8XCqQKLKVtknHHgZYxDa+qtN+p/Nk+90IY7ZJXHS3kdRfw+NWIFtrIxainrroBUIPc/nxDM4hIsWej9cofTYZo8jQ+yqMojMvwqdnW8Dy77Px7ewdoKi0HSwpq84qkOeQXKQ5kg1LSrNg2r5kmBFJhpnFagq3BWDcDps+C2EEkFCPQTmDF57sdX7c9lcPP/VsOEvOLgwGh0VohGG6qkXFNsUAVBQ2kF0MODGROfzXA0WdKKhLlK2MEacVkyaZm34KNBmDpcd95sHkyK6b+1iAYaGxpxCFsggh6GJPcnA47jAhVVOh1aowVl9oDBsrUmOs+6EBLDrVGqVxd1ZRLYuyLORZWHiqCUzdlwrTD6SiOO7l/TUeGBFn5EafEIa9+Ntf/GdJWU+Q6TW4+UCRYTwwYfBBrR4wpRRAMTC5NHSyoP7R9+m7XEKmwuD7Fe2PlqVhIgwmi4p4G7OAlRoKI8qF7Abqj5G0uARrIRYUV6pH8J+AZVTi4kKhTIb1JarJzobxPlOsuOT4GKW6XE73RRgb/pkCMp+UNYXFp/Mwk8iNyyIHaYaTOxPJQJoijWHusXSURgOYth85cIexW234YK0HPtqArPfA+5956GBJPd7J+kPRt90hESLLMB2YUhDHkGxqgtMqiG/ZKhb78G1bnRSDOar6PguWxZEHIR5rG9/PhKGYRGpR4vaV7A3ixYna101qGoRsRbNM4NdXPlecOL0M4mMR+OrHp/k5KPCyerUQC3cZk+6a0niSrulKvl8XFyYkpUxNZP+ThLH+h2TgLCjB25MzOSiG6qwCeQZpgjRCnkLSYXqkIUzZlwZT91cxZW8D+BAFMWqjB0Z/7oGPN6E01sWEkTzvWNcLi069AonIaZ/aDOv4H7YwVAE1qscnvP67szXCMJYRF4uJMHQZAG/DEB8hpOpQovgqxAE8NjWdrJS68zruY+FeGCRYXT2+IJkdS11H9TyNssT7Kox1F5MgEQtPZqE0MqGotDqrQJ6OyyINaYCkwOS9DWHS3nSYvC8dPliDstiAstjsgbFbqqQxcn1MGKnzjnf614KSzpCIFvmp+QphqAakLAx/TWCB8QmoLbZdiTwpHUTicyszWo3d9o1gk10lS5+LWzeBT4FfBgf1KtAUfEfswESv8sNbg3dFHSEXXR9rJxbq66WCZSpGbXJhmvTXRCokSCYMJa6EsfYfYUjEiu+TURpNURp3ZRVIQyQVSUaZhJEgEoBRm7wkh5gkxmyJC2PzHWHMOdqxct7xFyARzfOTSRiBhyMM88HBBzMPHEvDyy5evNioNoRBK3J9FAaH4sWyDx5Hn2l/MR1/jq22li4W91sYdNvhJjY89nVaGJ/9PQQqFn6TDotOP41CuCurQJJwWwixET/MiFjw0Vq6BYnL4ot7hTH7UPvKOUfag8zsw1U075D0PAlDJwoHYQRM4MJgIjEuqjbKy8sb8/3yAKHV1ERmN2/e7K2WnLkU6ZiadtxNFr0gAjp49iHiI0MrNuuDsURJEO5jYX7dKVbgsuhizzGJCQlHJRWNOMyEseZCEJyYfyINf25tiGK4J6tAfJiBWNXPLcbQrYhCGDOLW1XOOtQaZGYerCKnffiREIZpKk4T4XEXRlwa26UUfaziXFiqbn4bYB4L98IQ2aZJ4cetl8JYfc4GJ5aXB68vOJmCYqjOKoQsEC+MWOH996j1KAvMLgo3I1vibMZtn6NI1lUJY/r+3MoZkTyQmX4gBgojJIShS339BBtkAY7q5bQomDmq77JJFqgtrl271oWOlWDAlPG60tPvPmw7W4kVaM6Ft+NudVULAgfr8JKSkiZ0zU2R+npJcS5R3g9aKDR9cxELdd+oiHHEoVjx2Jihjz1HFxONMLTiMBPG32xwollrK6/g7cDgRaeD4hYEsRAPvDbQGtK0hTd39EbMKIQsFMKYuje7cvr+bJCZtq+KnHbB+ywM/cTj+2of8z7wQUMDuq4Lg08uU0Aqqkku9l+9erWlSd/cxMKtMKh/j5UwVp0NgBPZbawcmvAtOlpdFp/x/YhZBWYbnv+1KvD2oO0ZeVb2WBRDoUYYk3dnVE79awbITNlTRXZbWycMP6EQhunAjEoPyQ7y/XJ6bNIeBTZRG5hS/s7pe5cuXWoljsPbUG2nNsU++r6uX6rzVE8Qvdg02EJqrP9BJ/bs2fOMqq8yTIDqyWUeiyCBzzlai7ai0eibvH/sGgQ5vH98PPL64pj450y68u2sH7YbgfFnKnzB/anC8CL2yu/84ABOZisL64XiJAnEtoznrEyRXTgJY+LXjSon724MMpP+EgOPEch3LwxzWTgJobi4uKlpuzS4RV31NjXmwtBPdkW9ByoMfv2omAhDjsuVK1cKVOck30rSMwllv8xjERTUljAUxwuq2rx161ZhvRTG8jLfjyvKfaCC5MAekPHPSU7CGLnO81+skzJ+Z9qlibvSIMZXd9Osja8VE4bq4RpPuS+pAkQXXqx6cqFVTTWAsf51US++CoQ4N27c+JP0IK5cbMd0ua/Ur+u0TTdJxDaTwYsSGaQbwGIfE0ZINwFMbxU4GjFHpfZDHIqdqj+G57ZK3s9jb9IPOd58H8H6F1Jx7ty5Njz2pu3xfTSO5O2a+NkM/kzFT3BhCNwII9B7sDV8eakFKvi/VcH+VqkPCRVu8sC4zQyUxVjcXtDPO4Sk8qvh9szxXyZDjJ13I6RkLAxXRT8oeVAp+LQSUBBJFPT/TkFn+ylTmUuDl8Cn6avZgN+uEwaHtcGL+LMAf3xYwuDHkMVKfSFM48JJIBhbl73wWFAcCX4dMYPZwWNJ8Hpy/2mfqq7YrzoejaV6JwxpwoeLSrzRT894gdMkx9tc/NzpJJ3GzbytEwnjw5Wey9Q+EkSSCrfbEGPbHQbPCOwUUtLdirDf8E1LVGQLBoQJPvF5of2iLocmB2gKPpia57QC0YplsprxUl5e3pb6wISRsG98QDJsnsVpCMpwMfDC2g6ZQJkhX8V11CAWYRW8Pr+2Mij6dwz+dux74rY+0XF27NiRwduVxge/bkGGeEbGhGEoDgAwyjKQpH5DvSOXnfbcRmDyTm+pHfY0jHfCZyCdoB3ypL1X5C0vRFEgt1/9jXcEtSs9jbeR5CHzvfvH/NkLyO1ub3vfFXVMnl04rWwaQoaEZWgwUXDEIMVVao0IqA5c6cfJE4c+04ASA6A20A1y6gMfeAKdMBjGwuC3UbR6CwGL6yCvsG6EwRYALZpYGMWSzkF89/Lly/14HS4OcTx2zkmMsAa3cQsQ7oWh/7UkgITYidiIz/A1A754/TB7KOqv7tD/2buflyjCOI7js6NTuzteOpWlFz0YFBQUHiozrfwR0tFTkBkJUYfo1KFAiMgOkVAudMsu3YrqECFJ1qFYLD116tgt8Q8IdHoe2Y3pgXHGx8fledb3wOuyu+58Z+fZzzzPM7PO/+sJK/KVxxpSAiOhK6wdEIUExRop6EuvM6ossmFnWa9GgOh+/gUd6pyH9udVe2FGRYXW/kq6nMBYYKg3GVImNf3N/r2QSwiXQHmdT2CsT375ZQ8nrU55NIx9sYr1EhjxIQSBsTWBYe8/GxXFKYwGhoGgCA0rblZ8/JpUp7jK8qDyupT1pweGDv2gSJ8XMhEMBvdjqEs/QNKDIy0wqgiMOg4MOYZWZ/bFWH5IEuPjO+rzcr2uBkZ87K9OUBIYBIZLgdGUwnQDCePEkORllGHZwHoKcTYEhpwcTDo1a2KIUGNNWRAYBIbRwFAtLS1dED2M2fjwQ/xc++H09PQ++bzLgaGeZZDbWS6XD8h6CQwCQ2HstGp+PRYHhpEGqREYmzrNanrS04HJSOV9zLYX3aAgMAgMAoPAIDCyBkbWoYnuEMWByU+t4NBogEYv4HIwQIzSbRemg6KeT6sSGAQGgUFg6E1+agxNjFwq7kBDDdOZH4Jk/fGZiaFinSimMHJBXdYLtggMAoPAsBuBAQAAIFlbGAAAcJe1hQEAAHdZWxgAAHCXtYUBAAB3WVsYAABwl7WFAQAAd1lbGAAAcJe1hQEAAHdZWxgAAHCXtYUBAAB31eJ+AL6UdL+1Gt2XwFdsqIas22LrTgYAwOkORuwg3JAPc8Xz11qu35/pnJ9a6F0tLfZEUws90ZPv3avjrw997h/dfSnY6QWxA3XOdA078l7Qf9Ebuf3C+zj5yVsRojVz3srdV97XoSve1Xzo5eM1KKqdicajg81d42+6308tDP4pLZ6LKlYezJ4u9422DTcG/r9tobMBANjuTHcsGls7Ch2TX7p+lxZ7I0F2KoRTQrdwUugSTgjHhWPRxIfDP5rbgpbYndlyujVUOwN72732e29zPx/N+VEWE+9yv5rbvNZqDTHB8K39Nx5/6xMdo35hQNQ8qBhYe1y+5uazzud+Q64WHY2n0dYsy5X3PmNrg3XMEWFZUJd5YZelNW8XY8JMpL/MC2OWbhtQHx2M2IE9ODuy53LpL3tn09NEEAbgfu7WxWoCHLxZKYnQSgVaKMVaFUu8q5FfYLyZKCEaI4kikdpSisjFxJM3CV68aARbq4hCSZP+gJ692mhM7Ude37fuJhvDst2ykAX2TZ5sM1+dw0zmmZlNVl4qkAAygPiRfqQPxl62v2FstdMEi7A4K5UbljMcGn1hej/z0QyNELpqHBF/Fnjk/smpxNoQPM2EYW5jmCQCufSPLP/ENMqjMon1Ibi36E9TfbUkg+qLAYAF2N1YKBQKzfo1UANsHUsa7fO+Qjx3qtXqDdihwLbviv9Lny+KZS8vmhdejfZTRyGqnVw0HTVy89nQHwVSgfh4enl64PLt1pv1LND/XWEwV26Zx+IpK2yH6aT1N2c3HBa+vz+VHszHVs9C/Os5mFm7UBOI2fWLMJshwvS7lpbAvPi38zC9GoLoShAcHns7CRdiVl0wNo+8IAFKKZfLwwAQQfJypxulUsmn1YGsUSIgEfop0e4gGuNbxfNKpXJNbg5RGbnTQ5IYXTAUEYZNQqN91VGIWqcXjKOLbatPKgSx8ApSgXQjp2E+60G6YC7j+tkZsPWLFmmTxLsRVnfQNBBLMr9iKQbU4LjbeALbbSKuP+t4/Tjth8inADxZOQPRL0FA4eAJ0ZPSanmRz4NAZSeWfd8tjJGrVzCUCoHM7kkVZBbGDal6+g5OkjByh9B3Z/KoOV9ICqTGcaNSTlBdakNKWMRlD/J8qWeDowvG/kVNwXBuQyqQU4gbcSGdSAdMvnXk7M2mVn6xtiBm/mm1txhaxhfZXDTJgoqIBYNjbKYjo69cuQdL3TDxoRceJX0wmeoTQ2mY54WHyz0w/s7z45jT1oZ1WeGqZy8KhgC1CxJRLBadf9s79+AqqjOA3937fgRCQEIgCXkQSAIkVRGw0vqY1rbaTv9prdr+YztTrbY+8AFEFASBAPIIOlMBeQgIFkWtNoAkiA8imATGgm1FScY/yOhYe5mpIuO09ev3wS4uN3v23HPP3svuzZ6Z3wzcu3cfZ/f7zu887s1ATJgezm6wUmFIwHYbZXw1KyY9wfAEY6Aj9WF9egQJVUwgwZiCYjAZuUxjEiIkFcg4ZCxSozEGfrti2HpFPTNtEfEHfdFfLwqtW7w3ClkABUOt0KZIIvpUSXFVuP7WNZX7Z7XWQtPOOnhwZz0QTURrHdy1dcwHtVcUXEPbImHG6AUn4KQFQ7UJxQiJBGvKRO8Beng4lVzEC02LGKYYe2j/Tq0PZ8AXDKeer9PJW8EYPSFU/fihSfB496WwqvsS5GLkW/j/RlwI2aAxEWFKBaFLBVKNVCGVSAV+bjQ07y2EBbtjsHBPDBa1naW53V5G158RjIhxsacmGnFkEFKIDNEo1F5LIFGzkQu3Cwanl7FdcnSkB9IvSenEbWwMxEsb1UMG96sn09EfhuytBrHSnCqCZtuIXgPt0+QZaZO7n/bDOKduW+NFvkHtsfF6k7yOQO7jQn5xOivvOTXncGJGn7pLQnqlh7Zn5QTBuk0iP3efYIwPVbd0jocNxwphc2/BOZ7+cBCs6qqClQfroaWrDqWjDmWhFiGpQNhSgYxGypEypBQ/MwpaOkvg0VcLkAQs2HOWhW1izH0lAnc/5YO71n7DPesVmL8rBuXjUwQDqWosnNDcftUR+qqqCXh91/7ryhvLf0bbpgqGDUlDNSIhGFLgMdaASTl16tRl3IRr/yr+JAWcYMOcBOkiPn8PJkVUVASkgrtIl3FObZlcg2EdgnR9ysUHG4tnLqk/u7nEQtZXZ0mmkg6IC61BtbUkdVF3Ts7hxwzJPEgUPXdQLINkMbseBwtGoHrT8QSwWPveEFjeUQMr3xmLDXINjmwgh9KSCmQkUqIxAimGZR1DYd6uApi/m2QD2VMAC9qsoW3u2+yHu9ehUGzwwfSNGhtIMHxA0lFWp1bpoxHhmD++qG3akce7roE0wOu6+lRV4+Aao2Tki2CwEiMdmyMYejAkMw1a7dhJzjSNaILppvNKs9eT5IiCvGCIJ+XtvARL75s0OqvtEAzG+pzVep1aPAfdNk+5qTys1hIZpzXsEA6Z86Fn1e71UvQMOCsu7J8icUbO4cdMSiwm6RhCx2fHcE+m+6K6cIVgVExUq5/+MA6WfBCHlQdKYcWBKmjprIRV3ZUoCxVIWlKBDEcuQoYhQ5EiaN5XCI/sHAzzdg+G+a+eAUWiP3NejsN0FIt7USbuf9oHD2z2wYwtBP2bXjv7Xuk4ZSytpSDuWdf4Yss73wERlr897Z/BiBplfANGOmEyAnoWHSvbgEn5+uuv27k9SHYSUkVgNbgY8GMs6quHkchtGcHJ8H59X6IRWiw3AiV+D3m91hMnTgwVORe6X4xrW5OFBt1PHDt2bBhdJ2RWevCzz1GcaRLiF4BzPzjPMh/FQv5vdWpccDou3M87OecYYkZ65IzuE28UR3LBc5tI+3RBBYMEIh2efLcQG+JyHM0ow15/GY5mGKQC4UgFMgQpRAYjNAVDIxmDYW4rysauQpSN85nxTADuXe+D+zZ+IxYzt/pglsbMZ+h1ev+MYIyjNRXEsv1TT6x4eyqIsLxjKlQ2FkzU12MMZMGgQBIITpmElGRtz7L2TI9NCZVgJ2N5waB64523fOKVFwx+HYgLVLYEw8inn35aQ6Jm0/RAD8UfCYyIYBAM4ekRlLUiKxF1alzICoaTcw7BEgK7YpZkQbRtYe3LJYLhr974fgzSZf3fY9gYF8PyAyUoGiXQ0lUCq7pHIGlJBVKAJJA4EsPPxXAfUVj8RgIWtA+CRfsSsOi1MExfr49aaGLxzFmpaNp2llkIycaMzbQNCYZKglFALH3z0r5l+yeBCI+9NQkqGxINqd8mYSGaIC0EI5BtLBonvxn0XjZkiJJnutNElPScJmXY67iW3hOoN73B8Gej7uh4vGtgnY/dU27CwsAnkC7YCE3GofXb8NyWCIx2cGKR+3wkGSM5fg2ewHbzhNGJcaFDsQAmhfc5B+Qcy/1y6la6fjKZzsvGdFROBWPDP6IgyhNdg2FZx3BYefAiaOm8CFZ1DUNZSEsqNLGIIhEkjISQIBKAh15QYLo+arHJMGpBYkE8myIYW84JRq0mGIOW7GvoW/pGI4iw5PVGqJgYJ8GI5JNgfPHFFz8QCRpWT8KOpPTVV1/9QqTnl05jgdscoqQrMAwuJRgSn5GCrk1WMPTzyTfBSFdCsKe/ljf6QfHCEwx9NMUqrjiSsFggDmyJCycLxoXIORIxLFs/6sASjAn+6vV/i0AmrD0Sxd7/EFybUQQrO4dAS1chSoKJVBBsqUD8KCsqjlgYRi02p4xaEM+mJxjNe+v6Fu+rByuaX+sHCkas0SgYMkKRgWAEbSZAUFJlDD1OZgpJjotVw3D48OGL6BokV5GvZVwvE1bjIypydjaSDMHI6Boc0LAEBAnaCV7H74BRPvvssyky8k4NpmCDByQsIvWXq7iw+3l3es7hxr18/fhzJCuKCNn7FgkKxrr3wiBDy8E4rs0YhFMmBSgZCRSGOMKVCkRFFJj7sgL3rvPB/RvOjlrM3IICgXLRpMmFKVtpG22KZOP5grFwT03fovYasGJhW39GT4jmlWBQ8gAsIg0TnRPkqNACPEqUosH75Zdf3igxHJ6kevEEY2ALBkEiIRAfIvGSNLtmWu8BJoWkQ7b+7I8L+wXDDTnHE4wsCMZTR0IgAy4Uvbjucv/3lrwR//fKgzFo6YyiaFhKBeKDx/b7TlZMVK4aWaNc8sBGlIVNKA0oF02aXDxIbDNh6zeCMRMFgz47yiAYj+6u6Fu4pxKsWPBqf0aPjxgFI8ATCpEEwEgsTQIJMcQhaKSjo2M4azgYvz0wlnUcTDI/NBtupffcAl079VDpvAFLJnUPJoXqRuIzUlDjYdYQSpxPgENORYozupDs7e0dx48BcbAXvxdMisi9oZEAs4Ys9RrxtV6JadJcxkWIh1meoMLKR4Qbco5dMUyfkYkTOcGQFw5bBWPtX4MgQ1mtWon7KiSuvClw2/IDodMtnUGUjH5SQeDrvv/99C7/DP0zI6qUChQFlAu2WPAFw39OMOa1jup7dFcpWDF/Z3/Kx4fyQjD0nlmmwcIaNnaqUPCgXh2YFIlEw2lo7E+U1DgNBMGgRpDR8+zNoWAkRe8Pe5Eie6qSXruAIzghzD9LwaRkQzDcknM8wbBbMMb7q9e8GwAZyuvVMv0PjWnEkUTRSHVUw9Xq9dNu8N/QcLVy/dDSM9slUrctqVZLtZELTS7kBGPuK8V981qLwYpH/tIPvI6gjGAErOD3FuShXp5V7+STTz6Zms5+6LyykeDp+JS8jY0vnTPn+Pq89u0yx2YlDuHt+cdJmjQkz2ejl02v23bN8okzKAPz/rOvNywLPVOMuFyawX0Kmt17EibG6FMvrz5sjouwGWBSksnkj3h1R9uASRGof9mcE04HHK29PDXn4FRVbQb1ERJAWsBkp1tkBcO2v6ZaWusfufqwH2QYUakOpYY5teJSHwTG+5FhpcpQzugFVzBKqv3lJBjEwy8V9c19uQismPPnfqBgBBrcJhjUQFMDBlqxSswiMBaQJXmSwpcWfoKkY3MaRyFYDYmdQqLT3t5eTPXEqTvh8x5IgmF8BizqMZwpra2tI1giTq9nGItBmno0G6VgiYdAfUjHhYhg0XuZCobeeHORzzlhHqdPn36QlXM8wciNYASR6Jzn/W8+eUiFTJi5yd9K+0BCjF/AZF2kqksOEr1lgbIrU8H4TbPyumFkJHHnmkTHwy8VwHm8yOU/hcVKkeGHtvwyUyKMIe6cFmqAKJlmmIgjn3/++R2MJHySglfbd4QFvc8KcirUu2B9ls6ddWw6L4EeapKRlG+mbeR6dmzwdxmeslho1kv1QtefmrSp90zvm9UVQzAihOw1yCZOCaFgEaZ7BHrh12OEBb1P2+HXNg+DXtgjF2EJuOdMRUaQGHFBJZnScEZYUPxQHFnERSQdzPZBr6Xej6NHj9bp8UD3gJU3LnTOIRjf8LmOWx/iIzwhDkLTLQzBYJILwdCnScKhqK+geZf/6JNdKojw0J/UtxTVF+P/NVL+OfiDvvgdK5XO2SgNs7dyoKkUpGmLD25foXQHQr4CkhSNWEm1Mnb2jugpBM7xvDVTfhK42ShKsoLB6vnxi7xU6L0ISSI6OAf4GNhYKAHo++Y1DFoSs61QD1WXLlnBEOhFJYFTeI0GJemBJhgpopi1Qo2feHzwe86cEbswA8Fhf/nCaPi50DOZYQyeZOwzJznHEwxhwZCXDCRWXqdc3Lxbff+PnQpY8cgL6qERlUqNz8eQC4lzKB6tTLjzCeUISYQVtM3wcqXecA4h47QLEr/uVnVO03OB/yLQtN2cWxb6X4nEfMMNchGwY0qElVApwWhTGkkZiaB9UNAYGoyIzURT2bFjRwme/2zRRp+2p4RBn6f9ZAL1bDIcBaKe6Tp2kmDLjd7jpeMK9Owse1d0HdSgpfZE6Rj0GtUvfo2uPvX6P/744+vNrotVX/o14ELDHbRfwuoaRIa0ccj2Jv1e0H71IWxJwukOzdOzL9uYaqNgkWxB9cIQmYidyMYFPVf0vMjAGBFhjjp99NFH3+bvVz7n4NqXZdu2bRtJbYQJUTPo3Iwxg8/bL9M5T969oX1RPGYSb4T27Z9efXE35yvF8sIBAHZKhj5dEtYqK44UDK9QR1Y2KFMqG9RJw0rVEfQaEte2Caf+YbBsnMPQkWpJWa06GbmsCP/NOQd9PwGDaMSQxKBhvpLScb4pZbW+7xZX+sZo+0kYBCVoFKVsCAaHsBz2C0aeEXEYUREoyUJKoddEr1dGMLKL+PPuVEj8zaTGuI0Xr1knxiEqRe7jLZhCwPGCoZOyLiJgbBAZCzQDxpPK3jkQ/HNgYJSNoDEpGfeVejMkFnUGrXBAQhUO0DzD6QmPCfXCwKTYer25F5CwCC5ocCMEjRKZ9aad/Hy5lLjNxNjkPr5Ef/fI0YJhJPVArBMAAFecg3EfnBW2KuEJRt4mrGguoCHV1J6rNjUUy4TOzs7xZsPD2JD93hMMZwmG2UJcKrRWwRMMTzA8wchjsCgs8lQw7E5QcYcTcwI0f2uxwG+2YU44bsXJkyf/QGLB+AGiX8lfv7xg5JILLRS0LobWEdG6hdR5eRJI1n3X19OI4oIG2ZI8yCeS8WW/cIgLBhtPMDzB8ATDhYJBHD9+/Ao7vv3CWNQZJzzBSCHro1L8whi5inqC4cp84gmGhycYDhaMhAwuSCDxdMBh8x+jGLwgIxX4teNpWbieqBWeYJw/QkHCkO79olGqPJxCcBoJO/EEwxMMTzA8wXCdYDi4x+UJRn6veXDqc+kJhicY+QcWJV0c+jXViAyeYHDIcYLOen3kfookJIMLFnk6VSTcsijS8nxckF9yKhSeYLgMTzA8wfAEwxMMTzA8wfAEwxMMNwiG1JSJC77G5/YhWLcl7ASHrCbAAfjDW56AuIt8X8QpJBTe11Q9wfAEwxMMTzA8wfBwZrx5guEJhqsXfXKEQy7hukBABjpxEfJgCsTWP3bmgilFj/xaVJvDH6bjx1de/VT4QMQTDE8wPMHwBMMTDNfgCUYOBeP/FczIFptfb3AAAAAASUVORK5CYII=',
 		brandTarget: '_blank',
 	}),
 });
diff --git a/packages/frontend/src/pages/settings/drive-cleaner.stories.ts b/packages/frontend/src/pages/settings/drive-cleaner.stories.ts
new file mode 100644
index 0000000000..c07117bdde
--- /dev/null
+++ b/packages/frontend/src/pages/settings/drive-cleaner.stories.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+import { Meta, StoryObj } from '@storybook/vue3';
+import drive_cleaner from './drive-cleaner.vue';
+const meta = {
+	title: 'pages/settings/drive-cleaner',
+	component: drive_cleaner,
+} satisfies Meta<typeof drive_cleaner>;
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				drive_cleaner,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<drive_cleaner v-bind="props" />',
+		};
+	},
+	parameters: {
+		layout: 'fullscreen',
+	},
+} satisfies StoryObj<typeof drive_cleaner>;
+export default meta;

From 2bce064adad4964cac11dc799efaf382064c2fdc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 11:34:17 +0900
Subject: [PATCH 22/99] build(#10336): full reload server on change

---
 packages/frontend/.storybook/main.ts |  6 +++
 packages/frontend/package.json       |  1 +
 pnpm-lock.yaml                       | 69 ++++++++++++++++------------
 3 files changed, 47 insertions(+), 29 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index c58b6f1d70..9d1c517ea4 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,6 +1,7 @@
 import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
+import restart from 'vite-plugin-restart';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
@@ -22,6 +23,11 @@ const config = {
 	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
+			plugins: [
+				restart({
+					restart: ['../src/**/*', './**/*'],
+				}),
+			],
 			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
 		});
 	},
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 06d90b5249..20463ac803 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -123,6 +123,7 @@
 		"storybook": "7.0.0-rc.6",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
+		"vite-plugin-restart": "^0.3.1",
 		"vitest": "^0.29.2",
 		"vitest-fetch-mock": "^0.2.2",
 		"vue-eslint-parser": "9.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7d6d05b178..fe02e9e9d6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -506,6 +506,7 @@ importers:
       uuid: 9.0.0
       vanilla-tilt: 1.8.0
       vite: 4.1.4
+      vite-plugin-restart: ^0.3.1
       vitest: ^0.29.2
       vitest-fetch-mock: ^0.2.2
       vue: 3.2.47
@@ -626,6 +627,7 @@ importers:
       storybook: 7.0.0-rc.6
       storybook-addon-misskey-theme: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_hp2ec65oinwl37fsk4exx24idq
       summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
+      vite-plugin-restart: 0.3.1_vite@4.1.4
       vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
       vitest-fetch-mock: 0.2.2_vitest@0.29.2
       vue-eslint-parser: 9.1.0_eslint@8.35.0
@@ -4745,12 +4747,12 @@ packages:
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-postmessage/7.0.0-rc.7:
-    resolution: {integrity: sha512-hvZ5Np1N6lxM522BhFVlVvYIB38C6ZVBb4+eD2KN9119zJPKWpeVyFz8hu9Uc8RpX7VOGyhb9uk0yq3EXwNiKQ==}
+  /@storybook/channel-postmessage/7.0.0-rc.8:
+    resolution: {integrity: sha512-SHx9X5HtNV7/XzcjxzEYFM/3Xxn2pIsNtzFMIpe9YhfMQLGKXgmm9Hv5o5s4GXZquJN6w646XE90eOol6cwTDg==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.7
-      '@storybook/client-logger': 7.0.0-rc.7
-      '@storybook/core-events': 7.0.0-rc.7
+      '@storybook/channels': 7.0.0-rc.8
+      '@storybook/client-logger': 7.0.0-rc.8
+      '@storybook/core-events': 7.0.0-rc.8
       '@storybook/global': 5.0.0
       qs: 6.11.1
       telejson: 7.0.4
@@ -4773,8 +4775,8 @@ packages:
     resolution: {integrity: sha512-DkAr34GeLH6978du2zIz6ulyZMGkuzQfErV0v4Fqo2ZaXHV41MxgVubkEoX/pED4ksNUlTE85ZtxFPcF1PYIQw==}
     dev: true
 
-  /@storybook/channels/7.0.0-rc.7:
-    resolution: {integrity: sha512-0D5lKPIa04Hmu9JVd9nuw+1y6RUX/yHva870gX0qB5ts8M8lhfmHlYQLT61kyWcr1/77NIypSUHBuZK5q3E71w==}
+  /@storybook/channels/7.0.0-rc.8:
+    resolution: {integrity: sha512-2tI/ECbQcXjncYGLVdrttNT8adIp6kV/bnQGJWmF5hBXZ7Izwyq1WRPTgPT++RihmOOTHvkRx4GCKfwluOrNpA==}
     dev: true
 
   /@storybook/cli/7.0.0-rc.6:
@@ -4838,8 +4840,8 @@ packages:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/client-logger/7.0.0-rc.7:
-    resolution: {integrity: sha512-VmiPmFZPN2qMSwHERr5QskFraeG0gwZcBv+OhNt9HfLx8al1ryCyYxyi4tbPwqXHcTttedCtEgyNg106tqzMSg==}
+  /@storybook/client-logger/7.0.0-rc.8:
+    resolution: {integrity: sha512-6pBwnK0vB0mgkO8opiHbZxBVGyaKFSpJXglfx8F15gIwA3r1njgtOZvvYx+03DCz0ExaTiSXrrbWp39mI8mo5w==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
@@ -4924,8 +4926,8 @@ packages:
     resolution: {integrity: sha512-BOe6r//QEn/R9BXMiJsFM69jVUzgXGlPTfjECSIxdCEpUnCezwFA3LWPC8f4tDpL2uONqATkO9LQeQsGGapmCw==}
     dev: true
 
-  /@storybook/core-events/7.0.0-rc.7:
-    resolution: {integrity: sha512-gwAbDlH/UdLIR/CJQaZr4bS6IgHVI0W9JBELnIubfFzAEH5aiRupvywpWFuFh1/Z1IEnykyq7BaNChfw0rFvcw==}
+  /@storybook/core-events/7.0.0-rc.8:
+    resolution: {integrity: sha512-KsKf+Ob6zQ8+IJ9oDD5xqASwYGzcjT08azBjSt4yocHIJ3mY741h88YDS0wcwnM+JrV6iFYlY0hiK35lnBEddA==}
     dev: true
 
   /@storybook/core-server/7.0.0-rc.6:
@@ -5044,14 +5046,14 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.6
     dev: true
 
-  /@storybook/instrumenter/7.0.0-rc.7:
-    resolution: {integrity: sha512-BSTOp61Gs1Sw+CLRbgqeYxmNc7PmaVEukrS/CCIE2byz2TpzoEpgDZeVBefWNrG0I/yZrpjaeUfHW1grB4gHBA==}
+  /@storybook/instrumenter/7.0.0-rc.8:
+    resolution: {integrity: sha512-esRTjLLJJAKsTun/8u/wvsS+OPlwB2eal+ZAo0cBo+YTpkw0A6R+HunhNU1elZ8ztbJsZxP2drPprrFGXgeaLQ==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.7
-      '@storybook/client-logger': 7.0.0-rc.7
-      '@storybook/core-events': 7.0.0-rc.7
+      '@storybook/channels': 7.0.0-rc.8
+      '@storybook/client-logger': 7.0.0-rc.8
+      '@storybook/core-events': 7.0.0-rc.8
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.7
+      '@storybook/preview-api': 7.0.0-rc.8
     dev: true
 
   /@storybook/manager-api/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
@@ -5167,16 +5169,16 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview-api/7.0.0-rc.7:
-    resolution: {integrity: sha512-tmftfWdkCfCBWOyCloaAfdDP75xAeu6yuXCBBTuxrMxyBI6EHOrrFEDEAHsEEt1WriL8EMEylpPwzMWjRMtBIg==}
+  /@storybook/preview-api/7.0.0-rc.8:
+    resolution: {integrity: sha512-K45I81s2ZOoeAmKC8DP0HPhR67tr94pkgKddaoWLQJHBgVq9GKuy7QCcnn2zYKOFd1d/uqcnrQyg4AkmcjkVCg==}
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.7
-      '@storybook/channels': 7.0.0-rc.7
-      '@storybook/client-logger': 7.0.0-rc.7
-      '@storybook/core-events': 7.0.0-rc.7
+      '@storybook/channel-postmessage': 7.0.0-rc.8
+      '@storybook/channels': 7.0.0-rc.8
+      '@storybook/client-logger': 7.0.0-rc.8
+      '@storybook/core-events': 7.0.0-rc.8
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.7
+      '@storybook/types': 7.0.0-rc.8
       '@types/qs': 6.9.7
       dequal: 2.0.3
       lodash: 4.17.21
@@ -5329,8 +5331,8 @@ packages:
   /@storybook/testing-library/0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.7
-      '@storybook/instrumenter': 7.0.0-rc.7
+      '@storybook/client-logger': 7.0.0-rc.8
+      '@storybook/instrumenter': 7.0.0-rc.8
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm
       ts-dedent: 2.2.0
@@ -5382,10 +5384,10 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/types/7.0.0-rc.7:
-    resolution: {integrity: sha512-NGDAkSrooNuS9P+sKdTeW3NNVSVv3ED8Q8WYe5Z4uDSdFda35byq05bCneecJ0KHE5EYC2B2yB1ebRUOGA3nyw==}
+  /@storybook/types/7.0.0-rc.8:
+    resolution: {integrity: sha512-Jz3MLLKs+Jy8dZVd+HVHuKAbxa7xcF/MLfUNldu0HxtJr3b7ybUlvjWjT5h2I60V5TYkWGf9wcKmegI6TGiJXQ==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.7
+      '@storybook/channels': 7.0.0-rc.8
       '@types/babel__core': 7.20.0
       '@types/express': 4.17.17
       file-system-cache: 2.0.2
@@ -18664,6 +18666,15 @@ packages:
       - terser
     dev: true
 
+  /vite-plugin-restart/0.3.1_vite@4.1.4:
+    resolution: {integrity: sha512-LVe74MLUwaOzXVUgRGiphYbAYNgdGF6mP5vxj5BKcKkdmzvuuw79qcNgn9kHKKaIlCCjmOUiY3qlJ8jBSBUCoA==}
+    peerDependencies:
+      vite: ^2.9.0 || ^3.0.0 || ^4.0.0
+    dependencies:
+      micromatch: 4.0.5
+      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+    dev: true
+
   /vite/4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q:
     resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
     engines: {node: ^14.18.0 || >=16.0.0}

From b56d173f8af7481f867a53bff7666d9ab8340d28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 12:20:49 +0900
Subject: [PATCH 23/99] chore: use defaultStore instead

---
 packages/frontend/src/components/MkContextMenu.vue | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/packages/frontend/src/components/MkContextMenu.vue b/packages/frontend/src/components/MkContextMenu.vue
index 21cccaabde..99ecd0808f 100644
--- a/packages/frontend/src/components/MkContextMenu.vue
+++ b/packages/frontend/src/components/MkContextMenu.vue
@@ -1,10 +1,10 @@
 <template>
 <Transition
 	appear
-	:enter-active-class="$store.state.animation ? $style.transition_fade_enterActive : ''"
-	:leave-active-class="$store.state.animation ? $style.transition_fade_leaveActive : ''"
-	:enter-from-class="$store.state.animation ? $style.transition_fade_enterFrom : ''"
-	:leave-to-class="$store.state.animation ? $style.transition_fade_leaveTo : ''"
+	:enter-active-class="animation ? $style.transition_fade_enterActive : ''"
+	:leave-active-class="animation ? $style.transition_fade_leaveActive : ''"
+	:enter-from-class="animation ? $style.transition_fade_enterFrom : ''"
+	:leave-to-class="animation ? $style.transition_fade_leaveTo : ''"
 >
 	<div ref="rootEl" :class="$style.root" :style="{ zIndex }" @contextmenu.prevent.stop="() => {}">
 		<MkMenu :items="items" :align="'left'" @close="$emit('closed')"/>
@@ -17,6 +17,7 @@ import { onMounted, onBeforeUnmount } from 'vue';
 import MkMenu from './MkMenu.vue';
 import { MenuItem } from './types/menu.vue';
 import contains from '@/scripts/contains';
+import { defaultStore } from '@/store';
 import * as os from '@/os';
 
 const props = defineProps<{
@@ -28,6 +29,8 @@ const emit = defineEmits<{
 	(ev: 'closed'): void;
 }>();
 
+const animation = $computed(() => defaultStore.state.animation);
+
 let rootEl = $shallowRef<HTMLDivElement>();
 
 let zIndex = $ref<number>(os.claimZIndex('high'));

From 8ca9621d424398fbedb2b1fe497243fcd360d871 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 12:21:16 +0900
Subject: [PATCH 24/99] build(#10336): show popups on Story

---
 packages/frontend/.storybook/preview.ts | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 291432db0f..752a86bd19 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -14,6 +14,7 @@ const appInitialized = Symbol();
 
 let moduleInitialized = false;
 let unobserve = () => {};
+let misskeyOS = null;
 
 function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme']) {
 	unobserve();
@@ -51,7 +52,8 @@ queueMicrotask(() => {
 		import('../src/directives'),
 		import('../src/widgets'),
 		import('../src/scripts/theme'),
-	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }]) => {
+		import('../src/os'),
+	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }, os]) => {
 		setup((app) => {
 			moduleInitialized = true;
 			if (app[appInitialized]) {
@@ -62,6 +64,7 @@ queueMicrotask(() => {
 			components(app);
 			directives(app);
 			widgets(app);
+			misskeyOS = os;
 		});
 	});
 });
@@ -79,6 +82,17 @@ const preview = {
 			return story;
 		},
 		mswDecorator,
+		(Story, context) => {
+			return {
+				setup() {
+					return {
+						context,
+						popups: misskeyOS.popups,
+					};
+				},
+				template: '<div><component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/><story /></div>',
+			};
+		},
 	],
 	parameters: {
 		msw: {

From 899c6241c36c49236e6fc29952dff22e4412841f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 12:23:28 +0900
Subject: [PATCH 25/99] refactor(#10336): remove redundant div

---
 packages/frontend/.storybook/preview.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 752a86bd19..fb5065b360 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -90,7 +90,7 @@ const preview = {
 						popups: misskeyOS.popups,
 					};
 				},
-				template: '<div><component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/><story /></div>',
+				template: '<component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/><story />',
 			};
 		},
 	],

From 225a8e11a9f50ef3075b7c671aff50b207c0d6e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 20:19:20 +0900
Subject: [PATCH 26/99] docs: fix

---
 CONTRIBUTING.md | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7f8ed0922f..bcd62f9cb9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -268,18 +268,14 @@ import MyComponent from './MyComponent.vue';
 void MyComponent;
 ```
 
-You can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file and add the following line to the file.
+You can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file to define the mock handlers.
 
 ```ts
 import { rest } from 'msw';
 export const handlers = [
 	rest.post('/api/notes/timeline', (req, res, ctx) => {
 		return res(
-			ctx.json({
-				notes: [],
-				users: [],
-				hasNext: false,
-			})
+			ctx.json([]),
 		);
 	}),
 ];

From 356fd72603ad09737d82c65aea90baef70bcda7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 23:32:47 +0900
Subject: [PATCH 27/99] build(#10336): interactions

---
 packages/frontend/.storybook/main.ts          |   5 +-
 packages/frontend/.storybook/preview.ts       |   4 +-
 packages/frontend/package.json                |   3 +-
 packages/frontend/src/components/MkMenu.vue   |  20 +-
 .../src/components/global/MkA.stories.impl.ts |  46 +++
 .../src/components/global/MkA.stories.ts      |  25 +-
 packages/frontend/src/scripts/test-utils.ts   |   4 +
 pnpm-lock.yaml                                | 305 ++++++++++++++----
 8 files changed, 327 insertions(+), 85 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkA.stories.impl.ts
 create mode 100644 packages/frontend/src/scripts/test-utils.ts

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 9d1c517ea4..b6b7a62726 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -5,9 +5,9 @@ import restart from 'vite-plugin-restart';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
-		'@storybook/addon-links',
 		'@storybook/addon-essentials',
 		'@storybook/addon-interactions',
+		'@storybook/addon-links',
 		'@storybook/addon-storysource',
 		'../node_modules/storybook-addon-misskey-theme',
 	],
@@ -21,6 +21,9 @@ const config = {
 	core: {
 		disableTelemetry: true,
 	},
+	features: {
+		interactionsDebugger: true,
+	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
 			plugins: [
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index fb5065b360..85910f8ed0 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -90,7 +90,9 @@ const preview = {
 						popups: misskeyOS.popups,
 					};
 				},
-				template: '<component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/><story />',
+				template:
+					'<component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/>' +
+					'<story />',
 			};
 		},
 	],
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 20463ac803..e4be6c13e3 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -79,11 +79,12 @@
 		"@storybook/addons": "7.0.0-rc.5",
 		"@storybook/blocks": "7.0.0-rc.6",
 		"@storybook/core-events": "7.0.0-rc.6",
+		"@storybook/jest": "0.0.10",
 		"@storybook/manager-api": "7.0.0-rc.6",
 		"@storybook/preview-api": "7.0.0-rc.6",
 		"@storybook/react": "7.0.0-rc.6",
 		"@storybook/react-vite": "7.0.0-rc.6",
-		"@storybook/testing-library": "^0.0.14-next.1",
+		"@storybook/testing-library": "0.0.14-next.1",
 		"@storybook/theming": "7.0.0-rc.6",
 		"@storybook/types": "7.0.0-rc.6",
 		"@storybook/vue3": "7.0.0-rc.6",
diff --git a/packages/frontend/src/components/MkMenu.vue b/packages/frontend/src/components/MkMenu.vue
index 9e3022896c..e513a65a32 100644
--- a/packages/frontend/src/components/MkMenu.vue
+++ b/packages/frontend/src/components/MkMenu.vue
@@ -1,5 +1,5 @@
 <template>
-<div>
+<div role="menu">
 	<div
 		ref="itemsEl" v-hotkey="keymap"
 		class="_popup _shadow"
@@ -8,37 +8,37 @@
 		@contextmenu.self="e => e.preventDefault()"
 	>
 		<template v-for="(item, i) in items2">
-			<div v-if="item === null" :class="$style.divider"></div>
-			<span v-else-if="item.type === 'label'" :class="[$style.label, $style.item]">
+			<div v-if="item === null" role="separator" :class="$style.divider"></div>
+			<span v-else-if="item.type === 'label'" role="menuitem" :class="[$style.label, $style.item]">
 				<span>{{ item.text }}</span>
 			</span>
-			<span v-else-if="item.type === 'pending'" :tabindex="i" :class="[$style.pending, $style.item]">
+			<span v-else-if="item.type === 'pending'" role="menuitem" :tabindex="i" :class="[$style.pending, $style.item]">
 				<span><MkEllipsis/></span>
 			</span>
-			<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button" :class="$style.item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<MkA v-else-if="item.type === 'link'" role="menuitem" :to="item.to" :tabindex="i" class="_button" :class="$style.item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<MkAvatar v-if="item.avatar" :user="item.avatar" :class="$style.avatar"/>
 				<span>{{ item.text }}</span>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</MkA>
-			<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button" :class="$style.item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<a v-else-if="item.type === 'a'" role="menuitem" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button" :class="$style.item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<span>{{ item.text }}</span>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</a>
-			<button v-else-if="item.type === 'user'" :tabindex="i" class="_button" :class="[$style.item, { [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<button v-else-if="item.type === 'user'" role="menuitem" :tabindex="i" class="_button" :class="[$style.item, { [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<MkAvatar :user="item.user" :class="$style.avatar"/><MkUserName :user="item.user"/>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</button>
-			<span v-else-if="item.type === 'switch'" :tabindex="i" :class="$style.item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<span v-else-if="item.type === 'switch'" role="menuitemcheckbox" :tabindex="i" :class="$style.item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<MkSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</MkSwitch>
 			</span>
-			<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button" :class="[$style.item, $style.parent, { [$style.childShowing]: childShowingItem === item }]" @mouseenter="showChildren(item, $event)">
+			<button v-else-if="item.type === 'parent'" role="menuitem" :tabindex="i" class="_button" :class="[$style.item, $style.parent, { [$style.childShowing]: childShowingItem === item }]" @mouseenter="showChildren(item, $event)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<span>{{ item.text }}</span>
 				<span :class="$style.caret"><i class="ti ti-chevron-right ti-fw"></i></span>
 			</button>
-			<button v-else :tabindex="i" class="_button" :class="[$style.item, { [$style.danger]: item.danger, [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<button v-else :tabindex="i" class="_button" role="menuitem" :class="[$style.item, { [$style.danger]: item.danger, [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<MkAvatar v-if="item.avatar" :user="item.avatar" :class="$style.avatar"/>
 				<span>{{ item.text }}</span>
diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
new file mode 100644
index 0000000000..b1a88be5a3
--- /dev/null
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -0,0 +1,46 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import MkA from './MkA.vue';
+import { tick } from '@/scripts/test-utils';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkA,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkA v-bind="props">Text</MkA>',
+		};
+	},
+	args: {
+		to: '#test',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkA>;
+export const ContextMenu = {
+	...Default,
+	async play({ canvasElement }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		await userEvent.click(a, { button: 2 });
+		await tick();
+		const menu = canvas.getByRole('menu');
+		await expect(menu).toBeInTheDocument();
+	},
+} satisfies StoryObj<typeof MkA>;
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index 91ea368263..ce648f2d57 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -1,11 +1,17 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkA from './MkA.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkA',
 	component: MkA,
 } satisfies Meta<typeof MkA>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import MkA from './MkA.vue';
+import { tick } from '@/scripts/test-utils';
 export const Default = {
 	render(args) {
 		return {
@@ -24,11 +30,22 @@ export const Default = {
 					};
 				},
 			},
-			template: '<MkA v-bind="props" />',
+			template: '<MkA v-bind="props">Text</MkA>',
 		};
 	},
+	async play({ canvasElement }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		await userEvent.click(a, { button: 2 });
+		await tick();
+		const menu = canvas.getByRole('menu');
+		await expect(menu).toBeInTheDocument();
+	},
+	args: {
+		to: '#test',
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkA>;
-export default meta;
diff --git a/packages/frontend/src/scripts/test-utils.ts b/packages/frontend/src/scripts/test-utils.ts
new file mode 100644
index 0000000000..c526fc156a
--- /dev/null
+++ b/packages/frontend/src/scripts/test-utils.ts
@@ -0,0 +1,4 @@
+export async function tick(): Promise<void> {
+	// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+	await new Promise((globalThis.requestIdleCallback ?? setTimeout) as never);
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fe02e9e9d6..df273e26e7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -411,11 +411,12 @@ importers:
       '@storybook/addons': 7.0.0-rc.5
       '@storybook/blocks': 7.0.0-rc.6
       '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/jest': 0.0.10
       '@storybook/manager-api': 7.0.0-rc.6
       '@storybook/preview-api': 7.0.0-rc.6
       '@storybook/react': 7.0.0-rc.6
       '@storybook/react-vite': 7.0.0-rc.6
-      '@storybook/testing-library': ^0.0.14-next.1
+      '@storybook/testing-library': 0.0.14-next.1
       '@storybook/theming': 7.0.0-rc.6
       '@storybook/types': 7.0.0-rc.6
       '@storybook/vue3': 7.0.0-rc.6
@@ -583,6 +584,7 @@ importers:
       '@storybook/addons': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
       '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
       '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/jest': 0.0.10_biqbaboplfbrettd7655fr4n2y
       '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
       '@storybook/preview-api': 7.0.0-rc.6
       '@storybook/react': 7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq
@@ -656,6 +658,10 @@ importers:
 
 packages:
 
+  /@adobe/css-tools/4.2.0:
+    resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==}
+    dev: true
+
   /@ampproject/remapping/2.2.0:
     resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
     engines: {node: '>=6.0.0'}
@@ -3610,13 +3616,6 @@ packages:
       jest-mock: 29.5.0
     dev: true
 
-  /@jest/expect-utils/29.3.1:
-    resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      jest-get-type: 29.4.3
-    dev: true
-
   /@jest/expect-utils/29.5.0:
     resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3695,13 +3694,6 @@ packages:
       - supports-color
     dev: true
 
-  /@jest/schemas/29.4.2:
-    resolution: {integrity: sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      '@sinclair/typebox': 0.25.21
-    dev: true
-
   /@jest/schemas/29.4.3:
     resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4611,6 +4603,27 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/addons/6.5.16_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/api': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/channels': 6.5.16
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      '@storybook/csf': 0.0.2--canary.4566f4d.1
+      '@storybook/router': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@types/webpack-env': 1.18.0
+      core-js: 3.29.1
+      global: 4.4.0
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      regenerator-runtime: 0.13.11
+    dev: true
+
   /@storybook/addons/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-KDSoMW/y39eAMbeSmwmYEiYu3KomabJCYdsfmD65i0DqwuOFrkG3im3wPkF3F88rZDuzWzVZMl3Z15n56uVXKA==}
     peerDependencies:
@@ -4624,6 +4637,33 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/api/6.5.16_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 6.5.16
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      '@storybook/csf': 0.0.2--canary.4566f4d.1
+      '@storybook/router': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/semver': 7.3.2
+      '@storybook/theming': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      core-js: 3.29.1
+      fast-deep-equal: 3.1.3
+      global: 4.4.0
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      regenerator-runtime: 0.13.11
+      store2: 2.14.2
+      telejson: 6.0.8
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/blocks/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-3+9Aki5+tBqcTqZx+aDlQfVKdMflTwchr1DlBZODkd/dMKp8+sM7nHfH4hH0GipgppY8u+MxS0AmxsbwaF0xgA==}
     peerDependencies:
@@ -4767,6 +4807,14 @@ packages:
       telejson: 7.0.4
     dev: true
 
+  /@storybook/channels/6.5.16:
+    resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==}
+    dependencies:
+      core-js: 3.29.1
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/channels/7.0.0-rc.5:
     resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
     dev: true
@@ -4828,6 +4876,13 @@ packages:
       - utf-8-validate
     dev: true
 
+  /@storybook/client-logger/6.5.16:
+    resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==}
+    dependencies:
+      core-js: 3.29.1
+      global: 4.4.0
+    dev: true
+
   /@storybook/client-logger/7.0.0-rc.5:
     resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
     dependencies:
@@ -4918,6 +4973,12 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/core-events/6.5.16:
+    resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==}
+    dependencies:
+      core-js: 3.29.1
+    dev: true
+
   /@storybook/core-events/7.0.0-rc.5:
     resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
     dev: true
@@ -5008,6 +5069,12 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/csf/0.0.2--canary.4566f4d.1:
+    resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==}
+    dependencies:
+      lodash: 4.17.21
+    dev: true
+
   /@storybook/csf/0.0.2-next.10:
     resolution: {integrity: sha512-m2PFgBP/xRIF85VrDhvesn9ktaD2pN3VUjvMqkAL/cINp/3qXsCyI81uw7N5VEOkQAbWrY2FcydnvEPDEdE8fA==}
     dependencies:
@@ -5032,10 +5099,29 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/expect/27.5.2-0:
+    resolution: {integrity: sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==}
+    dependencies:
+      '@types/jest': 29.4.0
+    dev: true
+
   /@storybook/global/5.0.0:
     resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
 
+  /@storybook/instrumenter/6.5.16_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-q8/GaBk8PA/cL7m5OW+ec5t63+Zja9YvYSPGXrYtW17koSv7OnNPmk6RvI7tIHHO0mODBYnaHjF4zQfEGoyR5Q==}
+    dependencies:
+      '@storybook/addons': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      core-js: 3.29.1
+      global: 4.4.0
+    transitivePeerDependencies:
+      - react
+      - react-dom
+    dev: true
+
   /@storybook/instrumenter/7.0.0-rc.6:
     resolution: {integrity: sha512-hveboySEYxBtLYSgxHm2PI0Sa1DD/M6zkuCYqP4MXIoftRd437U1KzAtPrklnCoKrzUWPAXMJ8GUjwbM40RyGg==}
     dependencies:
@@ -5056,6 +5142,18 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.8
     dev: true
 
+  /@storybook/jest/0.0.10_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==}
+    dependencies:
+      '@storybook/expect': 27.5.2-0
+      '@storybook/instrumenter': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@testing-library/jest-dom': 5.16.5
+      jest-mock: 27.5.1
+    transitivePeerDependencies:
+      - react
+      - react-dom
+    dev: true
+
   /@storybook/manager-api/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-MsNj/cPIOlL7HJ8ReYahUvJVfvZDtNfacUYSFuQjQwdnp0u3pbC5mGZPd32tAGj7lLaLzcqqo1yR+NAgwpZUBw==}
     peerDependencies:
@@ -5270,6 +5368,21 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/router/6.5.16_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 6.5.16
+      core-js: 3.29.1
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      regenerator-runtime: 0.13.11
+    dev: true
+
   /@storybook/router/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-s23O2OOQ4+CvySk3QC/PXhDJChc4jjyQu/h3gLMKF7bfWx0bd5KR4LnP3rCKLIMkxoJYFPUayPMgwEEeN/ENSw==}
     peerDependencies:
@@ -5296,6 +5409,15 @@ packages:
       react-dom: 18.2.0_react@18.2.0
     dev: true
 
+  /@storybook/semver/7.3.2:
+    resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      core-js: 3.29.1
+      find-up: 4.1.0
+    dev: true
+
   /@storybook/source-loader/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-oEHEL26kOXRnTnBdZrMwUZAM2F8X9aFoqVmNIbLESx5QAlHGY04YLzKhi/tp31ZxoalxR7GveQ0GDzSDc62sCw==}
     peerDependencies:
@@ -5338,6 +5460,20 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
+  /@storybook/theming/6.5.16_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 6.5.16
+      core-js: 3.29.1
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
+      regenerator-runtime: 0.13.11
+    dev: true
+
   /@storybook/theming/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-OzwybDA2+4FWg85tcTNQkVI0JnHkwCRG9HM1qx9hOZJHNRfxmJFjJePOnBoXM6CjVlz0S1PJUwCmMHNH8OTvEw==}
     peerDependencies:
@@ -5743,6 +5879,21 @@ packages:
       pretty-format: 27.5.1
     dev: true
 
+  /@testing-library/jest-dom/5.16.5:
+    resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==}
+    engines: {node: '>=8', npm: '>=6', yarn: '>=1'}
+    dependencies:
+      '@adobe/css-tools': 4.2.0
+      '@babel/runtime': 7.20.7
+      '@types/testing-library__jest-dom': 5.14.5
+      aria-query: 5.1.3
+      chalk: 3.0.0
+      css.escape: 1.5.1
+      dom-accessibility-api: 0.5.16
+      lodash: 4.17.21
+      redent: 3.0.0
+    dev: true
+
   /@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm:
     resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==}
     engines: {node: '>=10', npm: '>=6'}
@@ -6020,6 +6171,10 @@ packages:
       '@types/node': 18.15.0
     dev: true
 
+  /@types/is-function/1.0.1:
+    resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==}
+    dev: true
+
   /@types/istanbul-lib-coverage/2.0.4:
     resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
     dev: true
@@ -6039,8 +6194,8 @@ packages:
   /@types/jest/29.4.0:
     resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==}
     dependencies:
-      expect: 29.3.1
-      pretty-format: 29.3.1
+      expect: 29.5.0
+      pretty-format: 29.5.0
     dev: true
 
   /@types/js-levenshtein/1.1.1:
@@ -6308,6 +6463,12 @@ packages:
     resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
     dev: true
 
+  /@types/testing-library__jest-dom/5.14.5:
+    resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==}
+    dependencies:
+      '@types/jest': 29.4.0
+    dev: true
+
   /@types/throttle-debounce/5.0.0:
     resolution: {integrity: sha512-Pb7k35iCGFcGPECoNE4DYp3Oyf2xcTd3FbFQxXUI9hEYKUl6YX+KLf7HrBmgVcD05nl50LIH6i+80js4iYmWbw==}
     dev: true
@@ -6380,6 +6541,10 @@ packages:
     resolution: {integrity: sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==}
     dev: false
 
+  /@types/webpack-env/1.18.0:
+    resolution: {integrity: sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==}
+    dev: true
+
   /@types/websocket/1.0.5:
     resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==}
     dependencies:
@@ -8150,6 +8315,14 @@ packages:
       supports-color: 5.5.0
     dev: true
 
+  /chalk/3.0.0:
+    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+    engines: {node: '>=8'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+    dev: true
+
   /chalk/4.1.1:
     resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
     engines: {node: '>=10'}
@@ -8735,7 +8908,6 @@ packages:
   /core-js/3.29.1:
     resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
     requiresBuild: true
-    dev: false
 
   /core-util-is/1.0.2:
     resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -9361,6 +9533,10 @@ packages:
       domhandler: 5.0.3
       entities: 4.4.0
 
+  /dom-walk/0.1.2:
+    resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
+    dev: true
+
   /domelementtype/2.3.0:
     resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
 
@@ -10426,17 +10602,6 @@ packages:
       homedir-polyfill: 1.0.3
     dev: false
 
-  /expect/29.3.1:
-    resolution: {integrity: sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      '@jest/expect-utils': 29.3.1
-      jest-get-type: 29.2.0
-      jest-matcher-utils: 29.3.1
-      jest-message-util: 29.3.1
-      jest-util: 29.5.0
-    dev: true
-
   /expect/29.5.0:
     resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -11438,6 +11603,13 @@ packages:
       which: 1.3.1
     dev: false
 
+  /global/4.4.0:
+    resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
+    dependencies:
+      min-document: 2.19.0
+      process: 0.11.10
+    dev: true
+
   /globals/11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
     engines: {node: '>=4'}
@@ -12348,6 +12520,10 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /is-function/1.0.2:
+    resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
+    dev: true
+
   /is-generator-fn/2.1.0:
     resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
     engines: {node: '>=6'}
@@ -12640,6 +12816,11 @@ packages:
     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
     engines: {node: '>=0.10.0'}
 
+  /isobject/4.0.0:
+    resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /isomorphic-unfetch/3.1.0:
     resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
     dependencies:
@@ -12864,11 +13045,6 @@ packages:
       jest-util: 29.5.0
     dev: true
 
-  /jest-get-type/29.2.0:
-    resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dev: true
-
   /jest-get-type/29.4.3:
     resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -12901,16 +13077,6 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-matcher-utils/29.3.1:
-    resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      chalk: 4.1.2
-      jest-diff: 29.5.0
-      jest-get-type: 29.4.3
-      pretty-format: 29.5.0
-    dev: true
-
   /jest-matcher-utils/29.5.0:
     resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -12921,21 +13087,6 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-message-util/29.3.1:
-    resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      '@jest/types': 29.5.0
-      '@types/stack-utils': 2.0.1
-      chalk: 4.1.2
-      graceful-fs: 4.2.11
-      micromatch: 4.0.5
-      pretty-format: 29.5.0
-      slash: 3.0.0
-      stack-utils: 2.0.6
-    dev: true
-
   /jest-message-util/29.5.0:
     resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -14042,6 +14193,12 @@ packages:
     resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  /min-document/2.19.0:
+    resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
+    dependencies:
+      dom-walk: 0.1.2
+    dev: true
+
   /min-indent/1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
@@ -15687,15 +15844,6 @@ packages:
       react-is: 17.0.2
     dev: true
 
-  /pretty-format/29.3.1:
-    resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      '@jest/schemas': 29.4.2
-      ansi-styles: 5.2.0
-      react-is: 18.2.0
-    dev: true
-
   /pretty-format/29.5.0:
     resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -16361,6 +16509,14 @@ packages:
     resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==}
     dev: false
 
+  /redent/3.0.0:
+    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+    engines: {node: '>=8'}
+    dependencies:
+      indent-string: 4.0.0
+      strip-indent: 3.0.0
+    dev: true
+
   /redis-commands/1.7.0:
     resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==}
     dev: false
@@ -17729,6 +17885,19 @@ packages:
       mkdirp: 1.0.4
       yallist: 4.0.0
 
+  /telejson/6.0.8:
+    resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==}
+    dependencies:
+      '@types/is-function': 1.0.1
+      global: 4.4.0
+      is-function: 1.0.2
+      is-regex: 1.1.4
+      is-symbol: 1.0.4
+      isobject: 4.0.0
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+    dev: true
+
   /telejson/7.0.4:
     resolution: {integrity: sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA==}
     dependencies:

From bc6d576a4ec15df8fb569c6e4dc0d379a2e81480 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 25 Mar 2023 23:35:47 +0900
Subject: [PATCH 28/99] build(#10336): add an interaction test for `<MkA/>`

---
 .../src/components/global/MkA.stories.impl.ts  | 18 +++++++++---------
 .../src/components/global/MkA.stories.ts       |  3 +++
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
index b1a88be5a3..3afec7f81a 100644
--- a/packages/frontend/src/components/global/MkA.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -25,15 +25,6 @@ export const Default = {
 			template: '<MkA v-bind="props">Text</MkA>',
 		};
 	},
-	args: {
-		to: '#test',
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkA>;
-export const ContextMenu = {
-	...Default,
 	async play({ canvasElement }) {
 		const canvas = within(canvasElement);
 		const a = canvas.getByRole<HTMLAnchorElement>('link');
@@ -42,5 +33,14 @@ export const ContextMenu = {
 		await tick();
 		const menu = canvas.getByRole('menu');
 		await expect(menu).toBeInTheDocument();
+		await userEvent.click(a, { button: 0 });
+		await tick();
+		await expect(menu).not.toBeInTheDocument();
+	},
+	args: {
+		to: '#test',
+	},
+	parameters: {
+		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkA>;
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index ce648f2d57..5bb6b3b5a8 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -41,6 +41,9 @@ export const Default = {
 		await tick();
 		const menu = canvas.getByRole('menu');
 		await expect(menu).toBeInTheDocument();
+		await userEvent.click(a, { button: 0 });
+		await tick();
+		await expect(menu).not.toBeInTheDocument();
 	},
 	args: {
 		to: '#test',

From 3db014739299f730f123da3418814b8633c34eff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Thu, 30 Mar 2023 23:00:01 +0900
Subject: [PATCH 29/99] build(#10336): bump storybook

---
 packages/frontend/package.json  |   30 +-
 packages/frontend/src/index.mdx |    8 +
 pnpm-lock.yaml                  | 8233 +++++++++++++++++--------------
 3 files changed, 4420 insertions(+), 3851 deletions(-)
 create mode 100644 packages/frontend/src/index.mdx

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index e4be6c13e3..4f112995a6 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -72,23 +72,23 @@
 		"vuedraggable": "next"
 	},
 	"devDependencies": {
-		"@storybook/addon-essentials": "7.0.0-rc.6",
-		"@storybook/addon-interactions": "7.0.0-rc.6",
-		"@storybook/addon-links": "7.0.0-rc.6",
-		"@storybook/addon-storysource": "7.0.0-rc.6",
+		"@storybook/addon-essentials": "7.0.0-rc.10",
+		"@storybook/addon-interactions": "7.0.0-rc.10",
+		"@storybook/addon-links": "7.0.0-rc.10",
+		"@storybook/addon-storysource": "7.0.0-rc.10",
 		"@storybook/addons": "7.0.0-rc.5",
-		"@storybook/blocks": "7.0.0-rc.6",
-		"@storybook/core-events": "7.0.0-rc.6",
+		"@storybook/blocks": "7.0.0-rc.10",
+		"@storybook/core-events": "7.0.0-rc.10",
 		"@storybook/jest": "0.0.10",
-		"@storybook/manager-api": "7.0.0-rc.6",
-		"@storybook/preview-api": "7.0.0-rc.6",
-		"@storybook/react": "7.0.0-rc.6",
-		"@storybook/react-vite": "7.0.0-rc.6",
+		"@storybook/manager-api": "7.0.0-rc.10",
+		"@storybook/preview-api": "7.0.0-rc.10",
+		"@storybook/react": "7.0.0-rc.10",
+		"@storybook/react-vite": "7.0.0-rc.10",
 		"@storybook/testing-library": "0.0.14-next.1",
-		"@storybook/theming": "7.0.0-rc.6",
-		"@storybook/types": "7.0.0-rc.6",
-		"@storybook/vue3": "7.0.0-rc.6",
-		"@storybook/vue3-vite": "7.0.0-rc.6",
+		"@storybook/theming": "7.0.0-rc.10",
+		"@storybook/types": "7.0.0-rc.10",
+		"@storybook/vue3": "7.0.0-rc.10",
+		"@storybook/vue3-vite": "7.0.0-rc.10",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
 		"@types/estree": "^1.0.0",
@@ -121,7 +121,7 @@
 		"react": "^18.2.0",
 		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
-		"storybook": "7.0.0-rc.6",
+		"storybook": "7.0.0-rc.10",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
 		"vite-plugin-restart": "^0.3.1",
diff --git a/packages/frontend/src/index.mdx b/packages/frontend/src/index.mdx
new file mode 100644
index 0000000000..d64392c174
--- /dev/null
+++ b/packages/frontend/src/index.mdx
@@ -0,0 +1,8 @@
+import { Meta } from '@storybook/blocks'
+
+<Meta title="index" />
+
+# Welcome to Misskey Storybook
+
+This project uses [Storybook](https://storybook.js.org/) to develop and document components.
+You can find more information about the usage of Storybook in this project in the CONTRIBUTING.md file placed in the root of this repository.
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index df273e26e7..293a1675d9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,4 +1,4 @@
-lockfileVersion: 5.4
+lockfileVersion: '6.0'
 
 overrides:
   chokidar: 3.5.3
@@ -7,662 +7,972 @@ overrides:
 importers:
 
   .:
-    specifiers:
-      '@tensorflow/tfjs-core': 4.2.0
-      '@types/gulp': 4.0.10
-      '@types/gulp-rename': 2.0.1
-      '@typescript-eslint/eslint-plugin': 5.54.1
-      '@typescript-eslint/parser': 5.54.1
-      cross-env: 7.0.3
-      cypress: 12.7.0
-      eslint: 8.35.0
-      execa: 5.1.1
-      gulp: 4.0.2
-      gulp-cssnano: 2.1.3
-      gulp-rename: 2.0.0
-      gulp-replace: 1.1.4
-      gulp-terser: 2.1.0
-      js-yaml: 4.1.0
-      start-server-and-test: 2.0.0
-      typescript: 4.9.5
     dependencies:
-      execa: 5.1.1
-      gulp: 4.0.2
-      gulp-cssnano: 2.1.3
-      gulp-rename: 2.0.0
-      gulp-replace: 1.1.4
-      gulp-terser: 2.1.0
-      js-yaml: 4.1.0
-      typescript: 4.9.5
+      execa:
+        specifier: 5.1.1
+        version: 5.1.1
+      gulp:
+        specifier: 4.0.2
+        version: 4.0.2
+      gulp-cssnano:
+        specifier: 2.1.3
+        version: 2.1.3
+      gulp-rename:
+        specifier: 2.0.0
+        version: 2.0.0
+      gulp-replace:
+        specifier: 1.1.4
+        version: 1.1.4
+      gulp-terser:
+        specifier: 2.1.0
+        version: 2.1.0
+      js-yaml:
+        specifier: 4.1.0
+        version: 4.1.0
+      typescript:
+        specifier: 4.9.5
+        version: 4.9.5
     optionalDependencies:
-      '@tensorflow/tfjs-core': 4.2.0
+      '@tensorflow/tfjs-core':
+        specifier: 4.2.0
+        version: 4.2.0
     devDependencies:
-      '@types/gulp': 4.0.10
-      '@types/gulp-rename': 2.0.1
-      '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      cross-env: 7.0.3
-      cypress: 12.7.0
-      eslint: 8.35.0
-      start-server-and-test: 2.0.0
+      '@types/gulp':
+        specifier: 4.0.10
+        version: 4.0.10
+      '@types/gulp-rename':
+        specifier: 2.0.1
+        version: 2.0.1
+      '@typescript-eslint/eslint-plugin':
+        specifier: 5.54.1
+        version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5)
+      '@typescript-eslint/parser':
+        specifier: 5.54.1
+        version: 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      cross-env:
+        specifier: 7.0.3
+        version: 7.0.3
+      cypress:
+        specifier: 12.7.0
+        version: 12.7.0
+      eslint:
+        specifier: 8.35.0
+        version: 8.35.0
+      start-server-and-test:
+        specifier: 2.0.0
+        version: 2.0.0
 
   packages/backend:
-    specifiers:
-      '@aws-sdk/client-s3': ^3.294.0
-      '@aws-sdk/lib-storage': ^3.294.0
-      '@aws-sdk/node-http-handler': ^3.292.0
-      '@bull-board/api': 5.0.0
-      '@bull-board/fastify': 5.0.0
-      '@bull-board/ui': 5.0.0
-      '@discordapp/twemoji': 14.0.2
-      '@fastify/accepts': 4.1.0
-      '@fastify/cookie': 8.3.0
-      '@fastify/cors': 8.2.0
-      '@fastify/http-proxy': 8.4.0
-      '@fastify/multipart': 7.4.2
-      '@fastify/static': 6.9.0
-      '@fastify/view': 7.4.1
-      '@jest/globals': 29.5.0
-      '@nestjs/common': 9.3.9
-      '@nestjs/core': 9.3.9
-      '@nestjs/testing': 9.3.9
-      '@peertube/http-signature': 1.7.0
-      '@sinonjs/fake-timers': 10.0.2
-      '@swc/cli': 0.1.62
-      '@swc/core': 1.3.38
-      '@swc/core-android-arm64': ^1.3.11
-      '@swc/core-darwin-arm64': ^1.3.38
-      '@swc/core-darwin-x64': ^1.3.38
-      '@swc/core-linux-arm-gnueabihf': ^1.3.38
-      '@swc/core-linux-arm64-gnu': ^1.3.38
-      '@swc/core-linux-arm64-musl': ^1.3.38
-      '@swc/core-linux-x64-gnu': ^1.3.38
-      '@swc/core-linux-x64-musl': ^1.3.38
-      '@swc/core-win32-arm64-msvc': ^1.3.38
-      '@swc/core-win32-ia32-msvc': ^1.3.38
-      '@swc/core-win32-x64-msvc': ^1.3.38
-      '@swc/jest': 0.2.24
-      '@tensorflow/tfjs': 4.2.0
-      '@tensorflow/tfjs-node': 4.2.0
-      '@types/accepts': 1.3.5
-      '@types/archiver': 5.3.1
-      '@types/bcryptjs': 2.4.2
-      '@types/bull': 4.10.0
-      '@types/cbor': 6.0.0
-      '@types/color-convert': 2.0.0
-      '@types/content-disposition': 0.5.5
-      '@types/escape-regexp': 0.0.1
-      '@types/fluent-ffmpeg': 2.1.21
-      '@types/ioredis': 4.28.10
-      '@types/jest': 29.4.0
-      '@types/js-yaml': 4.0.5
-      '@types/jsdom': 21.1.0
-      '@types/jsonld': 1.5.8
-      '@types/jsrsasign': 10.5.5
-      '@types/mime-types': 2.1.1
-      '@types/node': 18.15.0
-      '@types/node-fetch': 3.0.3
-      '@types/nodemailer': 6.4.7
-      '@types/oauth': 0.9.1
-      '@types/pg': 8.6.6
-      '@types/pug': 2.0.6
-      '@types/punycode': 2.1.0
-      '@types/qrcode': 1.5.0
-      '@types/random-seed': 0.3.3
-      '@types/ratelimiter': 3.4.4
-      '@types/redis': 4.0.11
-      '@types/rename': 1.0.4
-      '@types/sanitize-html': 2.8.1
-      '@types/semver': 7.3.13
-      '@types/sharp': 0.31.1
-      '@types/sinonjs__fake-timers': 8.1.2
-      '@types/tinycolor2': 1.4.3
-      '@types/tmp': 0.2.3
-      '@types/unzipper': 0.10.5
-      '@types/uuid': 9.0.1
-      '@types/vary': 1.1.0
-      '@types/web-push': 3.3.2
-      '@types/websocket': 1.0.5
-      '@types/ws': 8.5.4
-      '@typescript-eslint/eslint-plugin': 5.54.1
-      '@typescript-eslint/parser': 5.54.1
-      accepts: 1.3.8
-      ajv: 8.12.0
-      archiver: 5.3.1
-      autwh: 0.1.0
-      aws-sdk-client-mock: ^2.1.1
-      bcryptjs: 2.4.3
-      blurhash: 2.0.5
-      bull: 4.10.4
-      cacheable-lookup: 6.1.0
-      cbor: 8.1.0
-      chalk: 5.2.0
-      chalk-template: 0.4.0
-      chokidar: 3.5.3
-      cli-highlight: 2.1.11
-      color-convert: 2.0.1
-      content-disposition: 0.5.4
-      cross-env: 7.0.3
-      date-fns: 2.29.3
-      deep-email-validator: 0.1.21
-      escape-regexp: 0.0.1
-      eslint: 8.35.0
-      eslint-plugin-import: 2.27.5
-      execa: 6.1.0
-      fastify: 4.14.1
-      feed: 4.2.2
-      file-type: 18.2.1
-      fluent-ffmpeg: 2.1.2
-      form-data: 4.0.0
-      got: 12.6.0
-      happy-dom: 8.9.0
-      hpagent: 1.2.0
-      ioredis: 4.28.5
-      ip-cidr: 3.1.0
-      is-svg: 4.3.2
-      jest: 29.5.0
-      jest-mock: 29.5.0
-      js-yaml: 4.1.0
-      jsdom: 21.1.0
-      json5: 2.2.3
-      jsonld: 8.1.1
-      jsrsasign: 10.6.1
-      mfm-js: 0.23.3
-      mime-types: 2.1.35
-      misskey-js: 0.0.15
-      ms: 3.0.0-canary.1
-      nested-property: 4.0.0
-      node-fetch: 3.3.0
-      nodemailer: 6.9.1
-      nsfwjs: 2.4.2
-      oauth: 0.10.0
-      os-utils: 0.0.14
-      otpauth: ^9.0.2
-      parse5: 7.1.2
-      pg: 8.10.0
-      private-ip: 3.0.0
-      probe-image-size: 7.2.3
-      promise-limit: 2.7.0
-      pug: 3.0.2
-      punycode: 2.3.0
-      pureimage: 0.3.17
-      qrcode: 1.5.1
-      random-seed: 0.3.0
-      ratelimiter: 3.4.1
-      re2: 1.18.0
-      redis-lock: 0.1.4
-      reflect-metadata: 0.1.13
-      rename: 1.0.4
-      rndstr: 1.0.0
-      rss-parser: 3.12.0
-      rxjs: 7.8.0
-      s-age: 1.1.2
-      sanitize-html: 2.10.0
-      seedrandom: 3.0.5
-      semver: 7.3.8
-      sharp: 0.31.3
-      sharp-read-bmp: github:misskey-dev/sharp-read-bmp
-      strict-event-emitter-types: 2.0.0
-      stringz: 2.1.0
-      summaly: github:misskey-dev/summaly
-      systeminformation: 5.17.12
-      tinycolor2: 1.6.0
-      tmp: 0.2.1
-      tsc-alias: 1.8.3
-      tsconfig-paths: 4.1.2
-      twemoji-parser: 14.0.0
-      typeorm: 0.3.11
-      typescript: 4.9.5
-      ulid: 2.3.0
-      unzipper: 0.10.11
-      uuid: 9.0.0
-      vary: 1.1.2
-      web-push: 3.5.0
-      websocket: 1.0.34
-      ws: 8.12.1
-      xev: 3.0.2
     dependencies:
-      '@aws-sdk/client-s3': 3.294.0
-      '@aws-sdk/lib-storage': 3.294.0_fm572ahyuety6ptjeh22b77bsi
-      '@aws-sdk/node-http-handler': 3.292.0
-      '@bull-board/api': 5.0.0
-      '@bull-board/fastify': 5.0.0
-      '@bull-board/ui': 5.0.0
-      '@discordapp/twemoji': 14.0.2
-      '@fastify/accepts': 4.1.0
-      '@fastify/cookie': 8.3.0
-      '@fastify/cors': 8.2.0
-      '@fastify/http-proxy': 8.4.0
-      '@fastify/multipart': 7.4.2
-      '@fastify/static': 6.9.0
-      '@fastify/view': 7.4.1
-      '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai
-      '@nestjs/core': 9.3.9_jrq2rdgfp2sx67wmylmrqliwxe
-      '@nestjs/testing': 9.3.9_77foi4w27ghy47yutmnzv7krjy
-      '@peertube/http-signature': 1.7.0
-      '@sinonjs/fake-timers': 10.0.2
-      '@swc/cli': 0.1.62_2u6773zfichz7q5gjuzddfwg7q
-      '@swc/core': 1.3.38
-      accepts: 1.3.8
-      ajv: 8.12.0
-      archiver: 5.3.1
-      autwh: 0.1.0
-      bcryptjs: 2.4.3
-      blurhash: 2.0.5
-      bull: 4.10.4
-      cacheable-lookup: 6.1.0
-      cbor: 8.1.0
-      chalk: 5.2.0
-      chalk-template: 0.4.0
-      chokidar: 3.5.3
-      cli-highlight: 2.1.11
-      color-convert: 2.0.1
-      content-disposition: 0.5.4
-      date-fns: 2.29.3
-      deep-email-validator: 0.1.21
-      escape-regexp: 0.0.1
-      fastify: 4.14.1
-      feed: 4.2.2
-      file-type: 18.2.1
-      fluent-ffmpeg: 2.1.2
-      form-data: 4.0.0
-      got: 12.6.0
-      happy-dom: 8.9.0
-      hpagent: 1.2.0
-      ioredis: 4.28.5
-      ip-cidr: 3.1.0
-      is-svg: 4.3.2
-      js-yaml: 4.1.0
-      jsdom: 21.1.0
-      json5: 2.2.3
-      jsonld: 8.1.1
-      jsrsasign: 10.6.1
-      mfm-js: 0.23.3
-      mime-types: 2.1.35
-      misskey-js: 0.0.15
-      ms: 3.0.0-canary.1
-      nested-property: 4.0.0
-      node-fetch: 3.3.0
-      nodemailer: 6.9.1
-      nsfwjs: 2.4.2_@tensorflow+tfjs@4.2.0
-      oauth: 0.10.0
-      os-utils: 0.0.14
-      otpauth: 9.0.2
-      parse5: 7.1.2
-      pg: 8.10.0
-      private-ip: 3.0.0
-      probe-image-size: 7.2.3
-      promise-limit: 2.7.0
-      pug: 3.0.2
-      punycode: 2.3.0
-      pureimage: 0.3.17
-      qrcode: 1.5.1
-      random-seed: 0.3.0
-      ratelimiter: 3.4.1
-      re2: 1.18.0
-      redis-lock: 0.1.4
-      reflect-metadata: 0.1.13
-      rename: 1.0.4
-      rndstr: 1.0.0
-      rss-parser: 3.12.0
-      rxjs: 7.8.0
-      s-age: 1.1.2
-      sanitize-html: 2.10.0
-      seedrandom: 3.0.5
-      semver: 7.3.8
-      sharp: 0.31.3
-      sharp-read-bmp: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01
-      strict-event-emitter-types: 2.0.0
-      stringz: 2.1.0
-      summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
-      systeminformation: 5.17.12
-      tinycolor2: 1.6.0
-      tmp: 0.2.1
-      tsc-alias: 1.8.3
-      tsconfig-paths: 4.1.2
-      twemoji-parser: 14.0.0
-      typeorm: 0.3.11_ioredis@4.28.5+pg@8.10.0
-      typescript: 4.9.5
-      ulid: 2.3.0
-      unzipper: 0.10.11
-      uuid: 9.0.0
-      vary: 1.1.2
-      web-push: 3.5.0
-      websocket: 1.0.34
-      ws: 8.12.1
-      xev: 3.0.2
+      '@aws-sdk/client-s3':
+        specifier: ^3.294.0
+        version: 3.294.0
+      '@aws-sdk/lib-storage':
+        specifier: ^3.294.0
+        version: 3.294.0(@aws-sdk/abort-controller@3.292.0)(@aws-sdk/client-s3@3.294.0)
+      '@aws-sdk/node-http-handler':
+        specifier: ^3.292.0
+        version: 3.292.0
+      '@bull-board/api':
+        specifier: 5.0.0
+        version: 5.0.0
+      '@bull-board/fastify':
+        specifier: 5.0.0
+        version: 5.0.0
+      '@bull-board/ui':
+        specifier: 5.0.0
+        version: 5.0.0
+      '@discordapp/twemoji':
+        specifier: 14.0.2
+        version: 14.0.2
+      '@fastify/accepts':
+        specifier: 4.1.0
+        version: 4.1.0
+      '@fastify/cookie':
+        specifier: 8.3.0
+        version: 8.3.0
+      '@fastify/cors':
+        specifier: 8.2.0
+        version: 8.2.0
+      '@fastify/http-proxy':
+        specifier: 8.4.0
+        version: 8.4.0
+      '@fastify/multipart':
+        specifier: 7.4.2
+        version: 7.4.2
+      '@fastify/static':
+        specifier: 6.9.0
+        version: 6.9.0
+      '@fastify/view':
+        specifier: 7.4.1
+        version: 7.4.1
+      '@nestjs/common':
+        specifier: 9.3.9
+        version: 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0)
+      '@nestjs/core':
+        specifier: 9.3.9
+        version: 9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0)
+      '@nestjs/testing':
+        specifier: 9.3.9
+        version: 9.3.9(@nestjs/common@9.3.9)(@nestjs/core@9.3.9)
+      '@peertube/http-signature':
+        specifier: 1.7.0
+        version: 1.7.0
+      '@sinonjs/fake-timers':
+        specifier: 10.0.2
+        version: 10.0.2
+      '@swc/cli':
+        specifier: 0.1.62
+        version: 0.1.62(@swc/core@1.3.38)(chokidar@3.5.3)
+      '@swc/core':
+        specifier: 1.3.38
+        version: 1.3.38
+      accepts:
+        specifier: 1.3.8
+        version: 1.3.8
+      ajv:
+        specifier: 8.12.0
+        version: 8.12.0
+      archiver:
+        specifier: 5.3.1
+        version: 5.3.1
+      autwh:
+        specifier: 0.1.0
+        version: 0.1.0
+      bcryptjs:
+        specifier: 2.4.3
+        version: 2.4.3
+      blurhash:
+        specifier: 2.0.5
+        version: 2.0.5
+      bull:
+        specifier: 4.10.4
+        version: 4.10.4
+      cacheable-lookup:
+        specifier: 6.1.0
+        version: 6.1.0
+      cbor:
+        specifier: 8.1.0
+        version: 8.1.0
+      chalk:
+        specifier: 5.2.0
+        version: 5.2.0
+      chalk-template:
+        specifier: 0.4.0
+        version: 0.4.0
+      chokidar:
+        specifier: 3.5.3
+        version: 3.5.3
+      cli-highlight:
+        specifier: 2.1.11
+        version: 2.1.11
+      color-convert:
+        specifier: 2.0.1
+        version: 2.0.1
+      content-disposition:
+        specifier: 0.5.4
+        version: 0.5.4
+      date-fns:
+        specifier: 2.29.3
+        version: 2.29.3
+      deep-email-validator:
+        specifier: 0.1.21
+        version: 0.1.21
+      escape-regexp:
+        specifier: 0.0.1
+        version: 0.0.1
+      fastify:
+        specifier: 4.14.1
+        version: 4.14.1
+      feed:
+        specifier: 4.2.2
+        version: 4.2.2
+      file-type:
+        specifier: 18.2.1
+        version: 18.2.1
+      fluent-ffmpeg:
+        specifier: 2.1.2
+        version: 2.1.2
+      form-data:
+        specifier: 4.0.0
+        version: 4.0.0
+      got:
+        specifier: 12.6.0
+        version: 12.6.0
+      happy-dom:
+        specifier: 8.9.0
+        version: 8.9.0
+      hpagent:
+        specifier: 1.2.0
+        version: 1.2.0
+      ioredis:
+        specifier: 4.28.5
+        version: 4.28.5
+      ip-cidr:
+        specifier: 3.1.0
+        version: 3.1.0
+      is-svg:
+        specifier: 4.3.2
+        version: 4.3.2
+      js-yaml:
+        specifier: 4.1.0
+        version: 4.1.0
+      jsdom:
+        specifier: 21.1.0
+        version: 21.1.0
+      json5:
+        specifier: 2.2.3
+        version: 2.2.3
+      jsonld:
+        specifier: 8.1.1
+        version: 8.1.1
+      jsrsasign:
+        specifier: 10.6.1
+        version: 10.6.1
+      mfm-js:
+        specifier: 0.23.3
+        version: 0.23.3
+      mime-types:
+        specifier: 2.1.35
+        version: 2.1.35
+      misskey-js:
+        specifier: 0.0.15
+        version: 0.0.15
+      ms:
+        specifier: 3.0.0-canary.1
+        version: 3.0.0-canary.1
+      nested-property:
+        specifier: 4.0.0
+        version: 4.0.0
+      node-fetch:
+        specifier: 3.3.0
+        version: 3.3.0
+      nodemailer:
+        specifier: 6.9.1
+        version: 6.9.1
+      nsfwjs:
+        specifier: 2.4.2
+        version: 2.4.2(@tensorflow/tfjs@4.2.0)
+      oauth:
+        specifier: 0.10.0
+        version: 0.10.0
+      os-utils:
+        specifier: 0.0.14
+        version: 0.0.14
+      otpauth:
+        specifier: ^9.0.2
+        version: 9.0.2
+      parse5:
+        specifier: 7.1.2
+        version: 7.1.2
+      pg:
+        specifier: 8.10.0
+        version: 8.10.0
+      private-ip:
+        specifier: 3.0.0
+        version: 3.0.0
+      probe-image-size:
+        specifier: 7.2.3
+        version: 7.2.3
+      promise-limit:
+        specifier: 2.7.0
+        version: 2.7.0
+      pug:
+        specifier: 3.0.2
+        version: 3.0.2
+      punycode:
+        specifier: 2.3.0
+        version: 2.3.0
+      pureimage:
+        specifier: 0.3.17
+        version: 0.3.17
+      qrcode:
+        specifier: 1.5.1
+        version: 1.5.1
+      random-seed:
+        specifier: 0.3.0
+        version: 0.3.0
+      ratelimiter:
+        specifier: 3.4.1
+        version: 3.4.1
+      re2:
+        specifier: 1.18.0
+        version: 1.18.0
+      redis-lock:
+        specifier: 0.1.4
+        version: 0.1.4
+      reflect-metadata:
+        specifier: 0.1.13
+        version: 0.1.13
+      rename:
+        specifier: 1.0.4
+        version: 1.0.4
+      rndstr:
+        specifier: 1.0.0
+        version: 1.0.0
+      rss-parser:
+        specifier: 3.12.0
+        version: 3.12.0
+      rxjs:
+        specifier: 7.8.0
+        version: 7.8.0
+      s-age:
+        specifier: 1.1.2
+        version: 1.1.2
+      sanitize-html:
+        specifier: 2.10.0
+        version: 2.10.0
+      seedrandom:
+        specifier: 3.0.5
+        version: 3.0.5
+      semver:
+        specifier: 7.3.8
+        version: 7.3.8
+      sharp:
+        specifier: 0.31.3
+        version: 0.31.3
+      sharp-read-bmp:
+        specifier: github:misskey-dev/sharp-read-bmp
+        version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01
+      strict-event-emitter-types:
+        specifier: 2.0.0
+        version: 2.0.0
+      stringz:
+        specifier: 2.1.0
+        version: 2.1.0
+      summaly:
+        specifier: github:misskey-dev/summaly
+        version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
+      systeminformation:
+        specifier: 5.17.12
+        version: 5.17.12
+      tinycolor2:
+        specifier: 1.6.0
+        version: 1.6.0
+      tmp:
+        specifier: 0.2.1
+        version: 0.2.1
+      tsc-alias:
+        specifier: 1.8.3
+        version: 1.8.3
+      tsconfig-paths:
+        specifier: 4.1.2
+        version: 4.1.2
+      twemoji-parser:
+        specifier: 14.0.0
+        version: 14.0.0
+      typeorm:
+        specifier: 0.3.11
+        version: 0.3.11(ioredis@4.28.5)(pg@8.10.0)
+      typescript:
+        specifier: 4.9.5
+        version: 4.9.5
+      ulid:
+        specifier: 2.3.0
+        version: 2.3.0
+      unzipper:
+        specifier: 0.10.11
+        version: 0.10.11
+      uuid:
+        specifier: 9.0.0
+        version: 9.0.0
+      vary:
+        specifier: 1.1.2
+        version: 1.1.2
+      web-push:
+        specifier: 3.5.0
+        version: 3.5.0
+      websocket:
+        specifier: 1.0.34
+        version: 1.0.34
+      ws:
+        specifier: 8.12.1
+        version: 8.12.1
+      xev:
+        specifier: 3.0.2
+        version: 3.0.2
     optionalDependencies:
-      '@swc/core-android-arm64': 1.3.11
-      '@swc/core-darwin-arm64': 1.3.38
-      '@swc/core-darwin-x64': 1.3.38
-      '@swc/core-linux-arm-gnueabihf': 1.3.38
-      '@swc/core-linux-arm64-gnu': 1.3.38
-      '@swc/core-linux-arm64-musl': 1.3.38
-      '@swc/core-linux-x64-gnu': 1.3.38
-      '@swc/core-linux-x64-musl': 1.3.38
-      '@swc/core-win32-arm64-msvc': 1.3.38
-      '@swc/core-win32-ia32-msvc': 1.3.38
-      '@swc/core-win32-x64-msvc': 1.3.38
-      '@tensorflow/tfjs': 4.2.0_seedrandom@3.0.5
-      '@tensorflow/tfjs-node': 4.2.0_seedrandom@3.0.5
+      '@swc/core-android-arm64':
+        specifier: ^1.3.11
+        version: 1.3.11
+      '@swc/core-darwin-arm64':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-darwin-x64':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-linux-arm-gnueabihf':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-linux-arm64-gnu':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-linux-arm64-musl':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-linux-x64-gnu':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-linux-x64-musl':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-win32-arm64-msvc':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-win32-ia32-msvc':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@swc/core-win32-x64-msvc':
+        specifier: ^1.3.38
+        version: 1.3.38
+      '@tensorflow/tfjs':
+        specifier: 4.2.0
+        version: 4.2.0(seedrandom@3.0.5)
+      '@tensorflow/tfjs-node':
+        specifier: 4.2.0
+        version: 4.2.0(seedrandom@3.0.5)
     devDependencies:
-      '@jest/globals': 29.5.0
-      '@swc/jest': 0.2.24_@swc+core@1.3.38
-      '@types/accepts': 1.3.5
-      '@types/archiver': 5.3.1
-      '@types/bcryptjs': 2.4.2
-      '@types/bull': 4.10.0
-      '@types/cbor': 6.0.0
-      '@types/color-convert': 2.0.0
-      '@types/content-disposition': 0.5.5
-      '@types/escape-regexp': 0.0.1
-      '@types/fluent-ffmpeg': 2.1.21
-      '@types/ioredis': 4.28.10
-      '@types/jest': 29.4.0
-      '@types/js-yaml': 4.0.5
-      '@types/jsdom': 21.1.0
-      '@types/jsonld': 1.5.8
-      '@types/jsrsasign': 10.5.5
-      '@types/mime-types': 2.1.1
-      '@types/node': 18.15.0
-      '@types/node-fetch': 3.0.3
-      '@types/nodemailer': 6.4.7
-      '@types/oauth': 0.9.1
-      '@types/pg': 8.6.6
-      '@types/pug': 2.0.6
-      '@types/punycode': 2.1.0
-      '@types/qrcode': 1.5.0
-      '@types/random-seed': 0.3.3
-      '@types/ratelimiter': 3.4.4
-      '@types/redis': 4.0.11
-      '@types/rename': 1.0.4
-      '@types/sanitize-html': 2.8.1
-      '@types/semver': 7.3.13
-      '@types/sharp': 0.31.1
-      '@types/sinonjs__fake-timers': 8.1.2
-      '@types/tinycolor2': 1.4.3
-      '@types/tmp': 0.2.3
-      '@types/unzipper': 0.10.5
-      '@types/uuid': 9.0.1
-      '@types/vary': 1.1.0
-      '@types/web-push': 3.3.2
-      '@types/websocket': 1.0.5
-      '@types/ws': 8.5.4
-      '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      aws-sdk-client-mock: 2.1.1
-      cross-env: 7.0.3
-      eslint: 8.35.0
-      eslint-plugin-import: 2.27.5_uyiasnnzcqrxqkfvjklwnmwcha
-      execa: 6.1.0
-      jest: 29.5.0_@types+node@18.15.0
-      jest-mock: 29.5.0
+      '@jest/globals':
+        specifier: 29.5.0
+        version: 29.5.0
+      '@swc/jest':
+        specifier: 0.2.24
+        version: 0.2.24(@swc/core@1.3.38)
+      '@types/accepts':
+        specifier: 1.3.5
+        version: 1.3.5
+      '@types/archiver':
+        specifier: 5.3.1
+        version: 5.3.1
+      '@types/bcryptjs':
+        specifier: 2.4.2
+        version: 2.4.2
+      '@types/bull':
+        specifier: 4.10.0
+        version: 4.10.0
+      '@types/cbor':
+        specifier: 6.0.0
+        version: 6.0.0
+      '@types/color-convert':
+        specifier: 2.0.0
+        version: 2.0.0
+      '@types/content-disposition':
+        specifier: 0.5.5
+        version: 0.5.5
+      '@types/escape-regexp':
+        specifier: 0.0.1
+        version: 0.0.1
+      '@types/fluent-ffmpeg':
+        specifier: 2.1.21
+        version: 2.1.21
+      '@types/ioredis':
+        specifier: 4.28.10
+        version: 4.28.10
+      '@types/jest':
+        specifier: 29.4.0
+        version: 29.4.0
+      '@types/js-yaml':
+        specifier: 4.0.5
+        version: 4.0.5
+      '@types/jsdom':
+        specifier: 21.1.0
+        version: 21.1.0
+      '@types/jsonld':
+        specifier: 1.5.8
+        version: 1.5.8
+      '@types/jsrsasign':
+        specifier: 10.5.5
+        version: 10.5.5
+      '@types/mime-types':
+        specifier: 2.1.1
+        version: 2.1.1
+      '@types/node':
+        specifier: 18.15.0
+        version: 18.15.0
+      '@types/node-fetch':
+        specifier: 3.0.3
+        version: 3.0.3
+      '@types/nodemailer':
+        specifier: 6.4.7
+        version: 6.4.7
+      '@types/oauth':
+        specifier: 0.9.1
+        version: 0.9.1
+      '@types/pg':
+        specifier: 8.6.6
+        version: 8.6.6
+      '@types/pug':
+        specifier: 2.0.6
+        version: 2.0.6
+      '@types/punycode':
+        specifier: 2.1.0
+        version: 2.1.0
+      '@types/qrcode':
+        specifier: 1.5.0
+        version: 1.5.0
+      '@types/random-seed':
+        specifier: 0.3.3
+        version: 0.3.3
+      '@types/ratelimiter':
+        specifier: 3.4.4
+        version: 3.4.4
+      '@types/redis':
+        specifier: 4.0.11
+        version: 4.0.11
+      '@types/rename':
+        specifier: 1.0.4
+        version: 1.0.4
+      '@types/sanitize-html':
+        specifier: 2.8.1
+        version: 2.8.1
+      '@types/semver':
+        specifier: 7.3.13
+        version: 7.3.13
+      '@types/sharp':
+        specifier: 0.31.1
+        version: 0.31.1
+      '@types/sinonjs__fake-timers':
+        specifier: 8.1.2
+        version: 8.1.2
+      '@types/tinycolor2':
+        specifier: 1.4.3
+        version: 1.4.3
+      '@types/tmp':
+        specifier: 0.2.3
+        version: 0.2.3
+      '@types/unzipper':
+        specifier: 0.10.5
+        version: 0.10.5
+      '@types/uuid':
+        specifier: 9.0.1
+        version: 9.0.1
+      '@types/vary':
+        specifier: 1.1.0
+        version: 1.1.0
+      '@types/web-push':
+        specifier: 3.3.2
+        version: 3.3.2
+      '@types/websocket':
+        specifier: 1.0.5
+        version: 1.0.5
+      '@types/ws':
+        specifier: 8.5.4
+        version: 8.5.4
+      '@typescript-eslint/eslint-plugin':
+        specifier: 5.54.1
+        version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5)
+      '@typescript-eslint/parser':
+        specifier: 5.54.1
+        version: 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      aws-sdk-client-mock:
+        specifier: ^2.1.1
+        version: 2.1.1
+      cross-env:
+        specifier: 7.0.3
+        version: 7.0.3
+      eslint:
+        specifier: 8.35.0
+        version: 8.35.0
+      eslint-plugin-import:
+        specifier: 2.27.5
+        version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)
+      execa:
+        specifier: 6.1.0
+        version: 6.1.0
+      jest:
+        specifier: 29.5.0
+        version: 29.5.0(@types/node@18.15.0)
+      jest-mock:
+        specifier: 29.5.0
+        version: 29.5.0
 
   packages/frontend:
-    specifiers:
-      '@discordapp/twemoji': 14.0.2
-      '@rollup/plugin-alias': 4.0.3
-      '@rollup/plugin-json': 6.0.0
-      '@rollup/pluginutils': 5.0.2
-      '@storybook/addon-essentials': 7.0.0-rc.6
-      '@storybook/addon-interactions': 7.0.0-rc.6
-      '@storybook/addon-links': 7.0.0-rc.6
-      '@storybook/addon-storysource': 7.0.0-rc.6
-      '@storybook/addons': 7.0.0-rc.5
-      '@storybook/blocks': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/jest': 0.0.10
-      '@storybook/manager-api': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/react': 7.0.0-rc.6
-      '@storybook/react-vite': 7.0.0-rc.6
-      '@storybook/testing-library': 0.0.14-next.1
-      '@storybook/theming': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
-      '@storybook/vue3': 7.0.0-rc.6
-      '@storybook/vue3-vite': 7.0.0-rc.6
-      '@syuilo/aiscript': 0.13.1
-      '@tabler/icons-webfont': 2.10.0
-      '@testing-library/vue': ^6.6.1
-      '@types/escape-regexp': 0.0.1
-      '@types/estree': ^1.0.0
-      '@types/gulp': 4.0.10
-      '@types/gulp-rename': 2.0.1
-      '@types/matter-js': 0.18.2
-      '@types/node': 18.15.0
-      '@types/punycode': 2.1.0
-      '@types/sanitize-html': 2.8.1
-      '@types/seedrandom': 3.0.5
-      '@types/throttle-debounce': 5.0.0
-      '@types/tinycolor2': 1.4.3
-      '@types/uuid': 9.0.1
-      '@types/websocket': 1.0.5
-      '@types/ws': 8.5.4
-      '@typescript-eslint/eslint-plugin': 5.54.1
-      '@typescript-eslint/parser': 5.54.1
-      '@vitejs/plugin-vue': 4.0.0
-      '@vitest/coverage-c8': ^0.29.2
-      '@vue/compiler-sfc': 3.2.47
-      '@vue/runtime-core': 3.2.47
-      astring: ^1.8.4
-      autobind-decorator: 2.4.0
-      autosize: 5.0.2
-      blurhash: 2.0.5
-      broadcast-channel: 4.20.2
-      browser-image-resizer: github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3
-      canvas-confetti: 1.6.0
-      chart.js: 4.2.1
-      chartjs-adapter-date-fns: 3.0.0
-      chartjs-chart-matrix: 2.0.1
-      chartjs-plugin-gradient: 0.6.1
-      chartjs-plugin-zoom: 2.0.0
-      compare-versions: 5.0.1
-      cropperjs: 2.0.0-beta.2
-      cross-env: 7.0.3
-      cypress: 12.7.0
-      date-fns: 2.29.3
-      escape-regexp: 0.0.1
-      eslint: 8.35.0
-      eslint-plugin-import: 2.27.5
-      eslint-plugin-vue: 9.9.0
-      eventemitter3: 5.0.0
-      gsap: 3.11.4
-      happy-dom: 8.9.0
-      idb-keyval: 6.2.0
-      insert-text-at-cursor: 0.3.0
-      is-file-animated: 1.0.2
-      json5: 2.2.3
-      matter-js: 0.19.0
-      mfm-js: 0.23.3
-      misskey-js: 0.0.15
-      msw: ^1.1.0
-      msw-storybook-addon: ^1.8.0
-      photoswipe: 5.3.6
-      prettier: ^2.8.4
-      prismjs: 1.29.0
-      punycode: 2.3.0
-      querystring: 0.2.1
-      react: ^18.2.0
-      react-dom: ^18.2.0
-      rndstr: 1.0.0
-      rollup: 3.19.0
-      s-age: 1.1.2
-      sanitize-html: 2.10.0
-      sass: 1.58.3
-      seedrandom: 3.0.5
-      start-server-and-test: 2.0.0
-      storybook: 7.0.0-rc.6
-      storybook-addon-misskey-theme: github:misskey-dev/storybook-addon-misskey-theme
-      strict-event-emitter-types: 2.0.0
-      summaly: github:misskey-dev/summaly
-      syuilo-password-strength: 0.0.1
-      textarea-caret: 3.1.0
-      three: 0.150.1
-      throttle-debounce: 5.0.0
-      tinycolor2: 1.6.0
-      tsc-alias: 1.8.3
-      tsconfig-paths: 4.1.2
-      twemoji-parser: 14.0.0
-      typescript: 4.9.5
-      uuid: 9.0.0
-      vanilla-tilt: 1.8.0
-      vite: 4.1.4
-      vite-plugin-restart: ^0.3.1
-      vitest: ^0.29.2
-      vitest-fetch-mock: ^0.2.2
-      vue: 3.2.47
-      vue-eslint-parser: 9.1.0
-      vue-plyr: 7.0.0
-      vue-prism-editor: 2.0.0-alpha.2
-      vue-tsc: 1.2.0
-      vuedraggable: next
     dependencies:
-      '@discordapp/twemoji': 14.0.2
-      '@rollup/plugin-alias': 4.0.3_rollup@3.19.0
-      '@rollup/plugin-json': 6.0.0_rollup@3.19.0
-      '@rollup/pluginutils': 5.0.2_rollup@3.19.0
-      '@syuilo/aiscript': 0.13.1
-      '@tabler/icons-webfont': 2.10.0
-      '@vitejs/plugin-vue': 4.0.0_vite@4.1.4+vue@3.2.47
-      '@vue/compiler-sfc': 3.2.47
-      autobind-decorator: 2.4.0
-      autosize: 5.0.2
-      blurhash: 2.0.5
-      broadcast-channel: 4.20.2
-      browser-image-resizer: github.com/misskey-dev/browser-image-resizer/0227e860621e55cbed0aabe6dc601096a7748c4a
-      canvas-confetti: 1.6.0
-      chart.js: 4.2.1
-      chartjs-adapter-date-fns: 3.0.0_rid3rx6orfiwps7kg2r43n6mvu
-      chartjs-chart-matrix: 2.0.1_chart.js@4.2.1
-      chartjs-plugin-gradient: 0.6.1_chart.js@4.2.1
-      chartjs-plugin-zoom: 2.0.0_chart.js@4.2.1
-      compare-versions: 5.0.1
-      cropperjs: 2.0.0-beta.2
-      date-fns: 2.29.3
-      escape-regexp: 0.0.1
-      eventemitter3: 5.0.0
-      gsap: 3.11.4
-      idb-keyval: 6.2.0
-      insert-text-at-cursor: 0.3.0
-      is-file-animated: 1.0.2
-      json5: 2.2.3
-      matter-js: 0.19.0
-      mfm-js: 0.23.3
-      misskey-js: 0.0.15
-      photoswipe: 5.3.6
-      prismjs: 1.29.0
-      punycode: 2.3.0
-      querystring: 0.2.1
-      rndstr: 1.0.0
-      rollup: 3.19.0
-      s-age: 1.1.2
-      sanitize-html: 2.10.0
-      sass: 1.58.3
-      seedrandom: 3.0.5
-      strict-event-emitter-types: 2.0.0
-      syuilo-password-strength: 0.0.1
-      textarea-caret: 3.1.0
-      three: 0.150.1
-      throttle-debounce: 5.0.0
-      tinycolor2: 1.6.0
-      tsc-alias: 1.8.3
-      tsconfig-paths: 4.1.2
-      twemoji-parser: 14.0.0
-      typescript: 4.9.5
-      uuid: 9.0.0
-      vanilla-tilt: 1.8.0
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
-      vue: 3.2.47
-      vue-plyr: 7.0.0
-      vue-prism-editor: 2.0.0-alpha.2_vue@3.2.47
-      vuedraggable: 4.1.0_vue@3.2.47
+      '@discordapp/twemoji':
+        specifier: 14.0.2
+        version: 14.0.2
+      '@rollup/plugin-alias':
+        specifier: 4.0.3
+        version: 4.0.3(rollup@3.19.0)
+      '@rollup/plugin-json':
+        specifier: 6.0.0
+        version: 6.0.0(rollup@3.19.0)
+      '@rollup/pluginutils':
+        specifier: 5.0.2
+        version: 5.0.2(rollup@3.19.0)
+      '@syuilo/aiscript':
+        specifier: 0.13.1
+        version: 0.13.1
+      '@tabler/icons-webfont':
+        specifier: 2.10.0
+        version: 2.10.0
+      '@vitejs/plugin-vue':
+        specifier: 4.0.0
+        version: 4.0.0(vite@4.1.4)(vue@3.2.47)
+      '@vue/compiler-sfc':
+        specifier: 3.2.47
+        version: 3.2.47
+      autobind-decorator:
+        specifier: 2.4.0
+        version: 2.4.0
+      autosize:
+        specifier: 5.0.2
+        version: 5.0.2
+      blurhash:
+        specifier: 2.0.5
+        version: 2.0.5
+      broadcast-channel:
+        specifier: 4.20.2
+        version: 4.20.2
+      browser-image-resizer:
+        specifier: github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3
+        version: github.com/misskey-dev/browser-image-resizer/0227e860621e55cbed0aabe6dc601096a7748c4a
+      canvas-confetti:
+        specifier: 1.6.0
+        version: 1.6.0
+      chart.js:
+        specifier: 4.2.1
+        version: 4.2.1
+      chartjs-adapter-date-fns:
+        specifier: 3.0.0
+        version: 3.0.0(chart.js@4.2.1)(date-fns@2.29.3)
+      chartjs-chart-matrix:
+        specifier: 2.0.1
+        version: 2.0.1(chart.js@4.2.1)
+      chartjs-plugin-gradient:
+        specifier: 0.6.1
+        version: 0.6.1(chart.js@4.2.1)
+      chartjs-plugin-zoom:
+        specifier: 2.0.0
+        version: 2.0.0(chart.js@4.2.1)
+      compare-versions:
+        specifier: 5.0.1
+        version: 5.0.1
+      cropperjs:
+        specifier: 2.0.0-beta.2
+        version: 2.0.0-beta.2
+      date-fns:
+        specifier: 2.29.3
+        version: 2.29.3
+      escape-regexp:
+        specifier: 0.0.1
+        version: 0.0.1
+      eventemitter3:
+        specifier: 5.0.0
+        version: 5.0.0
+      gsap:
+        specifier: 3.11.4
+        version: 3.11.4
+      idb-keyval:
+        specifier: 6.2.0
+        version: 6.2.0
+      insert-text-at-cursor:
+        specifier: 0.3.0
+        version: 0.3.0
+      is-file-animated:
+        specifier: 1.0.2
+        version: 1.0.2
+      json5:
+        specifier: 2.2.3
+        version: 2.2.3
+      matter-js:
+        specifier: 0.19.0
+        version: 0.19.0
+      mfm-js:
+        specifier: 0.23.3
+        version: 0.23.3
+      misskey-js:
+        specifier: 0.0.15
+        version: 0.0.15
+      photoswipe:
+        specifier: 5.3.6
+        version: 5.3.6
+      prismjs:
+        specifier: 1.29.0
+        version: 1.29.0
+      punycode:
+        specifier: 2.3.0
+        version: 2.3.0
+      querystring:
+        specifier: 0.2.1
+        version: 0.2.1
+      rndstr:
+        specifier: 1.0.0
+        version: 1.0.0
+      rollup:
+        specifier: 3.19.0
+        version: 3.19.0
+      s-age:
+        specifier: 1.1.2
+        version: 1.1.2
+      sanitize-html:
+        specifier: 2.10.0
+        version: 2.10.0
+      sass:
+        specifier: 1.58.3
+        version: 1.58.3
+      seedrandom:
+        specifier: 3.0.5
+        version: 3.0.5
+      strict-event-emitter-types:
+        specifier: 2.0.0
+        version: 2.0.0
+      syuilo-password-strength:
+        specifier: 0.0.1
+        version: 0.0.1
+      textarea-caret:
+        specifier: 3.1.0
+        version: 3.1.0
+      three:
+        specifier: 0.150.1
+        version: 0.150.1
+      throttle-debounce:
+        specifier: 5.0.0
+        version: 5.0.0
+      tinycolor2:
+        specifier: 1.6.0
+        version: 1.6.0
+      tsc-alias:
+        specifier: 1.8.3
+        version: 1.8.3
+      tsconfig-paths:
+        specifier: 4.1.2
+        version: 4.1.2
+      twemoji-parser:
+        specifier: 14.0.0
+        version: 14.0.0
+      typescript:
+        specifier: 4.9.5
+        version: 4.9.5
+      uuid:
+        specifier: 9.0.0
+        version: 9.0.0
+      vanilla-tilt:
+        specifier: 1.8.0
+        version: 1.8.0
+      vite:
+        specifier: 4.1.4
+        version: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
+      vue:
+        specifier: 3.2.47
+        version: 3.2.47
+      vue-plyr:
+        specifier: 7.0.0
+        version: 7.0.0
+      vue-prism-editor:
+        specifier: 2.0.0-alpha.2
+        version: 2.0.0-alpha.2(vue@3.2.47)
+      vuedraggable:
+        specifier: next
+        version: 4.1.0(vue@3.2.47)
     devDependencies:
-      '@storybook/addon-essentials': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-interactions': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-links': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-storysource': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addons': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/jest': 0.0.10_biqbaboplfbrettd7655fr4n2y
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/react': 7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq
-      '@storybook/react-vite': 7.0.0-rc.6_ndsstb2ob2rgr4m75wxvpqsrpi
-      '@storybook/testing-library': 0.0.14-next.1
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
-      '@storybook/vue3': 7.0.0-rc.6_vue@3.2.47
-      '@storybook/vue3-vite': 7.0.0-rc.6_y344amzr55z4s7r3flz6cvxaae
-      '@testing-library/vue': 6.6.1_a2ihsjreowava2sm4iorpgwkom
-      '@types/escape-regexp': 0.0.1
-      '@types/estree': 1.0.0
-      '@types/gulp': 4.0.10
-      '@types/gulp-rename': 2.0.1
-      '@types/matter-js': 0.18.2
-      '@types/node': 18.15.0
-      '@types/punycode': 2.1.0
-      '@types/sanitize-html': 2.8.1
-      '@types/seedrandom': 3.0.5
-      '@types/throttle-debounce': 5.0.0
-      '@types/tinycolor2': 1.4.3
-      '@types/uuid': 9.0.1
-      '@types/websocket': 1.0.5
-      '@types/ws': 8.5.4
-      '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      '@vitest/coverage-c8': 0.29.2_vitest@0.29.2
-      '@vue/runtime-core': 3.2.47
-      astring: 1.8.4
-      cross-env: 7.0.3
-      cypress: 12.7.0
-      eslint: 8.35.0
-      eslint-plugin-import: 2.27.5_uyiasnnzcqrxqkfvjklwnmwcha
-      eslint-plugin-vue: 9.9.0_eslint@8.35.0
-      happy-dom: 8.9.0
-      msw: 1.1.0_typescript@4.9.5
-      msw-storybook-addon: 1.8.0_msw@1.1.0
-      prettier: 2.8.4
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      start-server-and-test: 2.0.0
-      storybook: 7.0.0-rc.6
-      storybook-addon-misskey-theme: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_hp2ec65oinwl37fsk4exx24idq
-      summaly: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
-      vite-plugin-restart: 0.3.1_vite@4.1.4
-      vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
-      vitest-fetch-mock: 0.2.2_vitest@0.29.2
-      vue-eslint-parser: 9.1.0_eslint@8.35.0
-      vue-tsc: 1.2.0_typescript@4.9.5
+      '@storybook/addon-essentials':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-interactions':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-links':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-storysource':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addons':
+        specifier: 7.0.0-rc.5
+        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/blocks':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/jest':
+        specifier: 0.0.10
+        version: 0.0.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/react':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
+      '@storybook/react-vite':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4)
+      '@storybook/testing-library':
+        specifier: 0.0.14-next.1
+        version: 0.0.14-next.1
+      '@storybook/theming':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/vue3':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(vue@3.2.47)
+      '@storybook/vue3-vite':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4)(vue@3.2.47)
+      '@testing-library/vue':
+        specifier: ^6.6.1
+        version: 6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47)
+      '@types/escape-regexp':
+        specifier: 0.0.1
+        version: 0.0.1
+      '@types/estree':
+        specifier: ^1.0.0
+        version: 1.0.0
+      '@types/gulp':
+        specifier: 4.0.10
+        version: 4.0.10
+      '@types/gulp-rename':
+        specifier: 2.0.1
+        version: 2.0.1
+      '@types/matter-js':
+        specifier: 0.18.2
+        version: 0.18.2
+      '@types/node':
+        specifier: 18.15.0
+        version: 18.15.0
+      '@types/punycode':
+        specifier: 2.1.0
+        version: 2.1.0
+      '@types/sanitize-html':
+        specifier: 2.8.1
+        version: 2.8.1
+      '@types/seedrandom':
+        specifier: 3.0.5
+        version: 3.0.5
+      '@types/throttle-debounce':
+        specifier: 5.0.0
+        version: 5.0.0
+      '@types/tinycolor2':
+        specifier: 1.4.3
+        version: 1.4.3
+      '@types/uuid':
+        specifier: 9.0.1
+        version: 9.0.1
+      '@types/websocket':
+        specifier: 1.0.5
+        version: 1.0.5
+      '@types/ws':
+        specifier: 8.5.4
+        version: 8.5.4
+      '@typescript-eslint/eslint-plugin':
+        specifier: 5.54.1
+        version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5)
+      '@typescript-eslint/parser':
+        specifier: 5.54.1
+        version: 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      '@vitest/coverage-c8':
+        specifier: ^0.29.2
+        version: 0.29.2(vitest@0.29.2)
+      '@vue/runtime-core':
+        specifier: 3.2.47
+        version: 3.2.47
+      astring:
+        specifier: ^1.8.4
+        version: 1.8.4
+      cross-env:
+        specifier: 7.0.3
+        version: 7.0.3
+      cypress:
+        specifier: 12.7.0
+        version: 12.7.0
+      eslint:
+        specifier: 8.35.0
+        version: 8.35.0
+      eslint-plugin-import:
+        specifier: 2.27.5
+        version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)
+      eslint-plugin-vue:
+        specifier: 9.9.0
+        version: 9.9.0(eslint@8.35.0)
+      happy-dom:
+        specifier: 8.9.0
+        version: 8.9.0
+      msw:
+        specifier: ^1.1.0
+        version: 1.1.0(typescript@4.9.5)
+      msw-storybook-addon:
+        specifier: ^1.8.0
+        version: 1.8.0(msw@1.1.0)
+      prettier:
+        specifier: ^2.8.4
+        version: 2.8.4
+      react:
+        specifier: ^18.2.0
+        version: 18.2.0
+      react-dom:
+        specifier: ^18.2.0
+        version: 18.2.0(react@18.2.0)
+      start-server-and-test:
+        specifier: 2.0.0
+        version: 2.0.0
+      storybook:
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      storybook-addon-misskey-theme:
+        specifier: github:misskey-dev/storybook-addon-misskey-theme
+        version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0)
+      summaly:
+        specifier: github:misskey-dev/summaly
+        version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
+      vite-plugin-restart:
+        specifier: ^0.3.1
+        version: 0.3.1(vite@4.1.4)
+      vitest:
+        specifier: ^0.29.2
+        version: 0.29.2(happy-dom@8.9.0)(sass@1.58.3)
+      vitest-fetch-mock:
+        specifier: ^0.2.2
+        version: 0.2.2(vitest@0.29.2)
+      vue-eslint-parser:
+        specifier: 9.1.0
+        version: 9.1.0(eslint@8.35.0)
+      vue-tsc:
+        specifier: 1.2.0
+        version: 1.2.0(typescript@4.9.5)
 
   packages/sw:
-    specifiers:
-      '@typescript-eslint/parser': 5.52.0
-      '@typescript/lib-webworker': npm:@types/serviceworker@0.0.62
-      esbuild: 0.14.42
-      eslint: 8.34.0
-      eslint-plugin-import: 2.27.5
-      idb-keyval: 6.2.0
-      misskey-js: 0.0.15
-      typescript: 4.9.5
     dependencies:
-      esbuild: 0.14.42
-      idb-keyval: 6.2.0
-      misskey-js: 0.0.15
+      esbuild:
+        specifier: 0.14.42
+        version: 0.14.42
+      idb-keyval:
+        specifier: 6.2.0
+        version: 6.2.0
+      misskey-js:
+        specifier: 0.0.15
+        version: 0.0.15
     devDependencies:
-      '@typescript-eslint/parser': 5.52.0_7kw3g6rralp5ps6mg3uyzz6azm
-      '@typescript/lib-webworker': /@types/serviceworker/0.0.62
-      eslint: 8.34.0
-      eslint-plugin-import: 2.27.5_mcvs2y73sfmcxqzpjj5lr7a2m4
-      typescript: 4.9.5
+      '@typescript-eslint/parser':
+        specifier: 5.52.0
+        version: 5.52.0(eslint@8.34.0)(typescript@4.9.5)
+      '@typescript/lib-webworker':
+        specifier: npm:@types/serviceworker@0.0.62
+        version: /@types/serviceworker@0.0.62
+      eslint:
+        specifier: 8.34.0
+        version: 8.34.0
+      eslint-plugin-import:
+        specifier: 2.27.5
+        version: 2.27.5(@typescript-eslint/parser@5.52.0)(eslint@8.34.0)
+      typescript:
+        specifier: 4.9.5
+        version: 4.9.5
 
 packages:
 
-  /@adobe/css-tools/4.2.0:
+  /@adobe/css-tools@4.2.0:
     resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==}
     dev: true
 
-  /@ampproject/remapping/2.2.0:
+  /@ampproject/remapping@2.2.0:
     resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
     engines: {node: '>=6.0.0'}
     dependencies:
@@ -670,14 +980,14 @@ packages:
       '@jridgewell/trace-mapping': 0.3.17
     dev: true
 
-  /@aw-web-design/x-default-browser/1.4.88:
+  /@aw-web-design/x-default-browser@1.4.88:
     resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==}
     hasBin: true
     dependencies:
       default-browser-id: 3.0.0
     dev: true
 
-  /@aws-crypto/crc32/3.0.0:
+  /@aws-crypto/crc32@3.0.0:
     resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==}
     dependencies:
       '@aws-crypto/util': 3.0.0
@@ -685,7 +995,7 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/crc32c/3.0.0:
+  /@aws-crypto/crc32c@3.0.0:
     resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==}
     dependencies:
       '@aws-crypto/util': 3.0.0
@@ -693,13 +1003,13 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/ie11-detection/3.0.0:
+  /@aws-crypto/ie11-detection@3.0.0:
     resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==}
     dependencies:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/sha1-browser/3.0.0:
+  /@aws-crypto/sha1-browser@3.0.0:
     resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==}
     dependencies:
       '@aws-crypto/ie11-detection': 3.0.0
@@ -711,7 +1021,7 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/sha256-browser/3.0.0:
+  /@aws-crypto/sha256-browser@3.0.0:
     resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==}
     dependencies:
       '@aws-crypto/ie11-detection': 3.0.0
@@ -724,7 +1034,7 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/sha256-js/3.0.0:
+  /@aws-crypto/sha256-js@3.0.0:
     resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==}
     dependencies:
       '@aws-crypto/util': 3.0.0
@@ -732,13 +1042,13 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/supports-web-crypto/3.0.0:
+  /@aws-crypto/supports-web-crypto@3.0.0:
     resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==}
     dependencies:
       tslib: 1.14.1
     dev: false
 
-  /@aws-crypto/util/3.0.0:
+  /@aws-crypto/util@3.0.0:
     resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==}
     dependencies:
       '@aws-sdk/types': 3.292.0
@@ -746,7 +1056,7 @@ packages:
       tslib: 1.14.1
     dev: false
 
-  /@aws-sdk/abort-controller/3.292.0:
+  /@aws-sdk/abort-controller@3.292.0:
     resolution: {integrity: sha512-lf+OPptL01kvryIJy7+dvFux5KbJ6OTwLPPEekVKZ2AfEvwcVtOZWFUhyw3PJCBTVncjKB1Kjl3V/eTS3YuPXQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -754,20 +1064,20 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/chunked-blob-reader-native/3.292.0:
+  /@aws-sdk/chunked-blob-reader-native@3.292.0:
     resolution: {integrity: sha512-A34sBrnggm9mXPZeeEie4jDv9zHRMS0LSm85VkfrBLuYYsfsw9DxmW59wJkuo6DIm/RK04oH5+lRMt34koBgrw==}
     dependencies:
       '@aws-sdk/util-base64': 3.292.0
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/chunked-blob-reader/3.292.0:
+  /@aws-sdk/chunked-blob-reader@3.292.0:
     resolution: {integrity: sha512-ccFPnzBjLbDCmFjTXwhsfD58vtEiAjbor3A9tvnou+3Dj6RrMEGPaTu5tcw3mwWb2zh1K3HFJg6Bmb0no49TRw==}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/client-s3/3.294.0:
+  /@aws-sdk/client-s3@3.294.0:
     resolution: {integrity: sha512-J0rTBpZlmeNWgpYaGM7w55Hdmh8LWfYFmb09Fr0Oee/VGFgi28p3vCCnP+ploo1TlFRdsPlGZJ7zod+m/iPeBg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -830,7 +1140,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/client-sso-oidc/3.294.0:
+  /@aws-sdk/client-sso-oidc@3.294.0:
     resolution: {integrity: sha512-/ZfDud76MdSPJ/TxjV2xLE30XbBQDZwKQ32axwoK1eziPvrAIUBYVgpBwj+m0quhoiQhBKkg3aFl6j39AF2thw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -870,7 +1180,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/client-sso/3.294.0:
+  /@aws-sdk/client-sso@3.294.0:
     resolution: {integrity: sha512-+FuxQTi5WvnaXM5JbNLkBIzQ3An4gA0ox61N1u+3xled+nywKb1yQ7WmRpyMG5bLbkmnj3aqoo5/uskFc4c4EA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -910,7 +1220,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/client-sts/3.294.0:
+  /@aws-sdk/client-sts@3.294.0:
     resolution: {integrity: sha512-AefqwhFjTDzelZuSYhriJbiI+GQwf2yKiKAnCt0gRj6rswewStM63Gtlhfb01sFPp+ZiqPcyQ47LqUaHp1mz/g==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -954,7 +1264,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/config-resolver/3.292.0:
+  /@aws-sdk/config-resolver@3.292.0:
     resolution: {integrity: sha512-cB3twnNR7vYvlt2jvw8VlA1+iv/tVzl+/S39MKqw2tepU+AbJAM0EHwb/dkf1OKSmlrnANXhshx80MHF9zL4mA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -965,7 +1275,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/credential-provider-env/3.292.0:
+  /@aws-sdk/credential-provider-env@3.292.0:
     resolution: {integrity: sha512-YbafSG0ZEKE2969CJWVtUhh3hfOeLPecFVoXOtegCyAJgY5Ghtu4TsVhL4DgiGAgOC30ojAmUVQEXzd7xJF5xA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -974,7 +1284,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/credential-provider-imds/3.292.0:
+  /@aws-sdk/credential-provider-imds@3.292.0:
     resolution: {integrity: sha512-W/peOgDSRYulgzFpUhvgi1pCm6piBz6xrVN17N4QOy+3NHBXRVMVzYk6ct2qpLPgJUSEZkcpP+Gds+bBm8ed1A==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -985,7 +1295,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/credential-provider-ini/3.294.0:
+  /@aws-sdk/credential-provider-ini@3.294.0:
     resolution: {integrity: sha512-pdTPbaAb5bWA+DnuKoL2TpXeNDp6Ejpv/OYt+bw2gdzl9w5r/ZCtUTTbW+Vvejr4WL5s3c1bY96kwdqCn7iLqA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1002,7 +1312,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/credential-provider-node/3.294.0:
+  /@aws-sdk/credential-provider-node@3.294.0:
     resolution: {integrity: sha512-zUL1Qhb4BsQIZCs/TPpG4oIYH/9YsGiS+Se1tasSGjTOLfBy7jhOZ0QIdpEeyAx/EP8blOBredM9xWfEXgiHVA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1020,7 +1330,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/credential-provider-process/3.292.0:
+  /@aws-sdk/credential-provider-process@3.292.0:
     resolution: {integrity: sha512-CFVXuMuUvg/a4tknzRikEDwZBnKlHs1LZCpTXIGjBdUTdosoi4WNzDLzGp93ZRTtcgFz+4wirz2f7P3lC0NrQw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1030,7 +1340,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/credential-provider-sso/3.294.0:
+  /@aws-sdk/credential-provider-sso@3.294.0:
     resolution: {integrity: sha512-UxrcAA/0l7j9+3tolYcG5M61D/IE1Bjd/9H87H1i2A2BrwUUBhW1Dp/vvROEDrrywlMDG3CDF3T/7ADtTak+sg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1044,7 +1354,7 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/credential-provider-web-identity/3.292.0:
+  /@aws-sdk/credential-provider-web-identity@3.292.0:
     resolution: {integrity: sha512-4DbtIEM9gGVfqYlMdYXg3XY+vBhemjB1zXIequottW8loLYM8Vuz4/uGxxKNze6evVVzowsA0wKrYclE1aj/Rg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1053,7 +1363,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/eventstream-codec/3.292.0:
+  /@aws-sdk/eventstream-codec@3.292.0:
     resolution: {integrity: sha512-P0np4vhCKf/JH6I39Id8DxZR+UZzG+Br+vOrTinerMfOhzTa2229XmL8pwlMpOoxnJLMPmEDtD1KQqLslBEXtw==}
     dependencies:
       '@aws-crypto/crc32': 3.0.0
@@ -1062,7 +1372,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/eventstream-serde-browser/3.292.0:
+  /@aws-sdk/eventstream-serde-browser@3.292.0:
     resolution: {integrity: sha512-VzRbJqqE444GOuoNTxTJ1dC1IhNhA6jfHjgsI8iDRHraaEukGqsPx1vkc+byxrDEjgxKN5IqOwZ4yJWMIAozBA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1071,7 +1381,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/eventstream-serde-config-resolver/3.292.0:
+  /@aws-sdk/eventstream-serde-config-resolver@3.292.0:
     resolution: {integrity: sha512-Ndx+qJyWmBCW9FSm68AGLoO4AZ0AaL/wjpJEgFF2sZBWjYe9O9PB9IGR/yuqCBTElf3YtSiFMsloikQaz2ft6g==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1079,7 +1389,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/eventstream-serde-node/3.292.0:
+  /@aws-sdk/eventstream-serde-node@3.292.0:
     resolution: {integrity: sha512-NFCEiNCetNye7jQfRd5y/7J9dLg9+uL57698wYeXeadlwJ8Cd/Nhsz+t7RIbP05VqshU+anXARMB1avl9oAijQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1088,7 +1398,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/eventstream-serde-universal/3.292.0:
+  /@aws-sdk/eventstream-serde-universal@3.292.0:
     resolution: {integrity: sha512-1gqZNx+S1EUpl3Tq6uIesiDx8gnkpXqPsFfCZT7lSWWXBpnHmnUZAh3jbiO9UlQbYuB9SfT0EBKb1iOY9z4j1Q==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1097,7 +1407,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/fetch-http-handler/3.292.0:
+  /@aws-sdk/fetch-http-handler@3.292.0:
     resolution: {integrity: sha512-zh3bhUJbL8RSa39ZKDcy+AghtUkIP8LwcNlwRIoxMQh3Row4D1s4fCq0KZCx98NJBEXoiTLyTQlZxxI//BOb1Q==}
     dependencies:
       '@aws-sdk/protocol-http': 3.292.0
@@ -1107,7 +1417,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/hash-blob-browser/3.292.0:
+  /@aws-sdk/hash-blob-browser@3.292.0:
     resolution: {integrity: sha512-4+Fm4IOkxGqgx8dU0EbExCq6xx30y369ZSXz89h9YDQYdJ2Muw7iNCHAg/4VM+gfp0vo9J8zPOTsSju8LNS5Jg==}
     dependencies:
       '@aws-sdk/chunked-blob-reader': 3.292.0
@@ -1116,7 +1426,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/hash-node/3.292.0:
+  /@aws-sdk/hash-node@3.292.0:
     resolution: {integrity: sha512-1yLxmIsvE+eK36JXEgEIouTITdykQLVhsA5Oai//Lar6Ddgu1sFpLDbdkMtKbrh4I0jLN9RacNCkeVQjZPTCCQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1126,7 +1436,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/hash-stream-node/3.292.0:
+  /@aws-sdk/hash-stream-node@3.292.0:
     resolution: {integrity: sha512-p2nj9A5lZKQU45Q4Od3iZDvpziEpojAyuyAI0HPzpIuJIfzFQ0/7pMBKde1li6wq93rpyFLwNufV6FEZnKCYRg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1135,21 +1445,21 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/invalid-dependency/3.292.0:
+  /@aws-sdk/invalid-dependency@3.292.0:
     resolution: {integrity: sha512-39OUV78CD3TmEbjhpt+V+Fk4wAGWhixqHxDSN8+4WL0uB4Fl7k5m3Z9hNY78AttHQSl2twR7WtLztnXPAFsriw==}
     dependencies:
       '@aws-sdk/types': 3.292.0
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/is-array-buffer/3.292.0:
+  /@aws-sdk/is-array-buffer@3.292.0:
     resolution: {integrity: sha512-kW/G5T/fzI0sJH5foZG6XJiNCevXqKLxV50qIT4B1pMuw7regd4ALIy0HwSqj1nnn9mSbRWBfmby0jWCJsMcwg==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/lib-storage/3.294.0_fm572ahyuety6ptjeh22b77bsi:
+  /@aws-sdk/lib-storage@3.294.0(@aws-sdk/abort-controller@3.292.0)(@aws-sdk/client-s3@3.294.0):
     resolution: {integrity: sha512-5H/1EgGDIt8Ls/YOepfkyyBwkyQ9d668/gmnWGWRvytar+cVMHu/D5G88831luPrlzyZ+jR+Te7Nc2oqYqamTw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -1166,7 +1476,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/md5-js/3.292.0:
+  /@aws-sdk/md5-js@3.292.0:
     resolution: {integrity: sha512-ngfsKLgQenXW3EbsDf47PVNys1SecTbsq6k88h7+Aa8BU49+9ZOIz4VDpWuPiNyYpeV7jJdl1dfD+ujOYvvgNw==}
     dependencies:
       '@aws-sdk/types': 3.292.0
@@ -1174,7 +1484,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-bucket-endpoint/3.292.0:
+  /@aws-sdk/middleware-bucket-endpoint@3.292.0:
     resolution: {integrity: sha512-XRy9RSUIRcbxYfH504ywhQllgfdf3wVhk2k0mMPYnUbeEhAFe1/eUog2v/bi07/q5TQ4Hppi+W3nHCVualQEow==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1185,7 +1495,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-content-length/3.292.0:
+  /@aws-sdk/middleware-content-length@3.292.0:
     resolution: {integrity: sha512-2gMWzQus5mj14menolpPDbYBeaOYcj7KNFZOjTjjI3iQ0KqyetG6XasirNrcJ/8QX1BRmpTol8Xjp2Ue3Gbzwg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1194,7 +1504,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-endpoint/3.292.0:
+  /@aws-sdk/middleware-endpoint@3.292.0:
     resolution: {integrity: sha512-cPMkiSxpZGG6tYlW4OS+ucS6r43f9ddX9kcUoemJCY10MOuogdPjulCAjE0HTs2PLKSOrrG4CTP4Q4wWDrH4Bw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1208,7 +1518,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-expect-continue/3.292.0:
+  /@aws-sdk/middleware-expect-continue@3.292.0:
     resolution: {integrity: sha512-bZ2bsBud3E6BebZWGxVcWxBSg09bP0KyX8PT0jI66JM0yTbZSJhoGhlKAqfNG46R9h4K5tCYB2uYgV/3oU/ZpQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1217,7 +1527,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-flexible-checksums/3.292.0:
+  /@aws-sdk/middleware-flexible-checksums@3.292.0:
     resolution: {integrity: sha512-AxU/Gb+TRdl/0jHmbreYh3QnB0jR25zgjPZ4/JbGBJ2SQI9jm3LCNK9XOrPUmZp/vu9wsvyxtmKQidpQ5+FX5w==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1230,7 +1540,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-host-header/3.292.0:
+  /@aws-sdk/middleware-host-header@3.292.0:
     resolution: {integrity: sha512-mHuCWe3Yg2S5YZ7mB7sKU6C97XspfqrimWjMW9pfV2usAvLA3R0HrB03jpR5vpZ3P4q7HB6wK3S6CjYMGGRNag==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1239,7 +1549,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-location-constraint/3.292.0:
+  /@aws-sdk/middleware-location-constraint@3.292.0:
     resolution: {integrity: sha512-WTbMyoCckdkmq7Yok0gI4226gTmxP/zM1fbFiC+liZXBJ+H5EvIFmu30tWbX+4m41LL/XQVm65olXJFwhoExGQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1247,7 +1557,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-logger/3.292.0:
+  /@aws-sdk/middleware-logger@3.292.0:
     resolution: {integrity: sha512-yZNY1XYmG3NG+uonET7jzKXNiwu61xm/ZZ6i/l51SusuaYN+qQtTAhOFsieQqTehF9kP4FzbsWgPDwD8ZZX9lw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1255,7 +1565,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-recursion-detection/3.292.0:
+  /@aws-sdk/middleware-recursion-detection@3.292.0:
     resolution: {integrity: sha512-kA3VZpPko0Zqd7CYPTKAxhjEv0HJqFu2054L04dde1JLr43ro+2MTdX7vsHzeAFUVRphqatFFofCumvXmU6Mig==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1264,7 +1574,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-retry/3.293.0:
+  /@aws-sdk/middleware-retry@3.293.0:
     resolution: {integrity: sha512-7tiaz2GzRecNHaZ6YnF+Nrtk3au8qF6oiipf11R7MJiqJ0fkMLnz/iRrlakDziS9qF/a9v+3yxb4W4NHK3f4Tw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1277,7 +1587,7 @@ packages:
       uuid: 8.3.2
     dev: false
 
-  /@aws-sdk/middleware-sdk-s3/3.292.0:
+  /@aws-sdk/middleware-sdk-s3@3.292.0:
     resolution: {integrity: sha512-kEUmh3ZM34H+2bEQfpZhVotJCNYpSbq9Q4YxlWVbnjiO/VS+S9BFEM3Fcj5+EzEgI02tNNi6/qTXj3iS8tT6hA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1287,7 +1597,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-sdk-sts/3.292.0:
+  /@aws-sdk/middleware-sdk-sts@3.292.0:
     resolution: {integrity: sha512-GN5ZHEqXZqDi+HkVbaXRX9HaW/vA5rikYpWKYsmxTUZ7fB7ijvEO3co3lleJv2C+iGYRtUIHC4wYNB5xgoTCxg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1299,7 +1609,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-serde/3.292.0:
+  /@aws-sdk/middleware-serde@3.292.0:
     resolution: {integrity: sha512-6hN9mTQwSvV8EcGvtXbS/MpK7WMCokUku5Wu7X24UwCNMVkoRHLIkYcxHcvBTwttuOU0d8hph1/lIX4dkLwkQw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1307,7 +1617,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-signing/3.292.0:
+  /@aws-sdk/middleware-signing@3.292.0:
     resolution: {integrity: sha512-GVfoSjDjEQ4TaO6x9MffyP3uRV+2KcS5FtexLCYOM9pJcnE9tqq9FJOrZ1xl1g+YjUVKxo4x8lu3tpEtIb17qg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1319,7 +1629,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-ssec/3.292.0:
+  /@aws-sdk/middleware-ssec@3.292.0:
     resolution: {integrity: sha512-VfwrTEs9nYU6sCnt/cffhnJ2djGkMyMbBEysMZm2HEbFMloGKBd0Wtvk9y+SWPa6+DDRe2CqqX8jMzrO4JT4Eg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1327,14 +1637,14 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-stack/3.292.0:
+  /@aws-sdk/middleware-stack@3.292.0:
     resolution: {integrity: sha512-WdQpRkuMysrEwrkByCM1qCn2PPpFGGQ2iXqaFha5RzCdZDlxJni9cVNb6HzWUcgjLEYVTXCmOR9Wxm3CNW44Qg==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/middleware-user-agent/3.293.0:
+  /@aws-sdk/middleware-user-agent@3.293.0:
     resolution: {integrity: sha512-gZ7/e6XwpKk9mvgA78q4Ffc796jTn02TUKx2qMDnkLVbeJXBNN2jnvYEKq8v70+o7fd/ALRudg8gBDmkkhM/Hw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1344,7 +1654,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/node-config-provider/3.292.0:
+  /@aws-sdk/node-config-provider@3.292.0:
     resolution: {integrity: sha512-S3NnC9dQ5GIbJYSDIldZb4zdpCOEua1tM7bjYL3VS5uqCEM93kIi/o/UkIUveMp/eqTS2LJa5HjNIz5Te6je0A==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1354,7 +1664,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/node-http-handler/3.292.0:
+  /@aws-sdk/node-http-handler@3.292.0:
     resolution: {integrity: sha512-L/E3UDSwXLXjt1XWWh0RBD55F+aZI1AEdPwdES9i1PjnZLyuxuDhEDptVibNN56+I9/4Q3SbmuVRVlOD0uzBag==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1365,7 +1675,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/property-provider/3.292.0:
+  /@aws-sdk/property-provider@3.292.0:
     resolution: {integrity: sha512-dHArSvsiqhno/g55N815gXmAMrmN8DP7OeFNqJ4wJG42xsF2PFN3DAsjIuHuXMwu+7A3R1LHqIpvv0hA9KeoJQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1373,7 +1683,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/protocol-http/3.292.0:
+  /@aws-sdk/protocol-http@3.292.0:
     resolution: {integrity: sha512-NLi4fq3k41aXIh1I97yX0JTy+3p6aW1NdwFwdMa674z86QNfb4SfRQRZBQe9wEnAZ/eWHVnlKIuII+U1URk/Kg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1381,7 +1691,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/querystring-builder/3.292.0:
+  /@aws-sdk/querystring-builder@3.292.0:
     resolution: {integrity: sha512-XElIFJaReIm24eEvBtV2dOtZvcm3gXsGu/ftG8MLJKbKXFKpAP1q+K6En0Bs7/T88voKghKdKpKT+eZUWgTqlg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1390,7 +1700,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/querystring-parser/3.292.0:
+  /@aws-sdk/querystring-parser@3.292.0:
     resolution: {integrity: sha512-iTYpYo7a8X9RxiPbjjewIpm6XQPx2EOcF1dWCPRII9EFlmZ4bwnX+PDI36fIo9oVs8TIKXmwNGODU9nsg7CSAw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1398,12 +1708,12 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/service-error-classification/3.292.0:
+  /@aws-sdk/service-error-classification@3.292.0:
     resolution: {integrity: sha512-X1k3sixCeC45XSNHBe+kRBQBwPDyTFtFITb8O5Qw4dS9XWGhrUJT4CX0qE5aj8qP3F9U5nRizs9c2mBVVP0Caw==}
     engines: {node: '>=14.0.0'}
     dev: false
 
-  /@aws-sdk/shared-ini-file-loader/3.292.0:
+  /@aws-sdk/shared-ini-file-loader@3.292.0:
     resolution: {integrity: sha512-Av2TTYg1Jig2kbkD56ybiqZJB6vVrYjv1W5UQwY/q3nA/T2mcrgQ20ByCOt5Bv9VvY7FSgC+znj+L4a7RLGmBg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1411,7 +1721,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/signature-v4-multi-region/3.292.0:
+  /@aws-sdk/signature-v4-multi-region@3.292.0:
     resolution: {integrity: sha512-MjWEIjbAr7n9vsFeLpoRzNSYFgWOROf1mLj6Db8TfRowaortUBO7PbleLV4n3SPujSnxhaVBzlmnCY2AjatH9g==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -1427,7 +1737,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/signature-v4/3.292.0:
+  /@aws-sdk/signature-v4@3.292.0:
     resolution: {integrity: sha512-+rw47VY5mvBecn13tDQTl1ipGWg5tE63faWgmZe68HoBL87ZiDzsd7bUKOvjfW21iMgWlwAppkaNNQayYRb2zg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1440,7 +1750,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/smithy-client/3.292.0:
+  /@aws-sdk/smithy-client@3.292.0:
     resolution: {integrity: sha512-S8PKzjPkZ6SXYZuZiU787dMsvQ0d/LFEhw2OI4Oe2An9Fc2IwJ2FYukyHoQJOV2tV0DiuMebPo7eMyQyjKElvA==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1449,7 +1759,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/token-providers/3.294.0:
+  /@aws-sdk/token-providers@3.294.0:
     resolution: {integrity: sha512-6nwO04LtC5f4AsUvGZXyjaswuEK4Rr2VsuANpMKrPCgunRfI58a8YXLniudOSXN6e7CFJ6M3uo/h5YXqtnzGug==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1462,14 +1772,14 @@ packages:
       - aws-crt
     dev: false
 
-  /@aws-sdk/types/3.292.0:
+  /@aws-sdk/types@3.292.0:
     resolution: {integrity: sha512-1teYAY2M73UXZxMAxqZxVS2qwXjQh0OWtt7qyLfha0TtIk/fZ1hRwFgxbDCHUFcdNBSOSbKH/ESor90KROXLCQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/url-parser/3.292.0:
+  /@aws-sdk/url-parser@3.292.0:
     resolution: {integrity: sha512-NZeAuZCk1x6TIiWuRfbOU6wHPBhf0ly2qOHzWut4BCH+b4RrDmFF8EmXcH1auEfGhE7yRyR6XqIN0t3S+hYACA==}
     dependencies:
       '@aws-sdk/querystring-parser': 3.292.0
@@ -1477,14 +1787,14 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-arn-parser/3.292.0:
+  /@aws-sdk/util-arn-parser@3.292.0:
     resolution: {integrity: sha512-xfE4U94TfjMC2WNNDte/kDByf16GrQKaS0BKsm+Fk/PaeHUofEp8suOEz/EVdEoa3Ayy2Uc5QdhrGnlqf8MxeA==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-base64/3.292.0:
+  /@aws-sdk/util-base64@3.292.0:
     resolution: {integrity: sha512-zjNCwNdy617yFvEjZorepNWXB2sQCVfsShCwFy/kIQ5iW5tT2jQKaqc0K77diU9atkooxw9p1W9m9sOgrkOFNw==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1492,20 +1802,20 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-body-length-browser/3.292.0:
+  /@aws-sdk/util-body-length-browser@3.292.0:
     resolution: {integrity: sha512-Wd/BM+JsMiKvKs/bN3z6TredVEHh2pKudGfg3CSjTRpqFpOG903KDfyHBD42yg5PuCHoHoewJvTPKwgn7/vhaw==}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-body-length-node/3.292.0:
+  /@aws-sdk/util-body-length-node@3.292.0:
     resolution: {integrity: sha512-BBgipZ2P6RhogWE/qj0oqpdlyd3iSBYmb+aD/TBXwB2lA/X8A99GxweBd/kp06AmcJRoMS9WIXgbWkiiBlRlSA==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-buffer-from/3.292.0:
+  /@aws-sdk/util-buffer-from@3.292.0:
     resolution: {integrity: sha512-RxNZjLoXNxHconH9TYsk5RaEBjSgTtozHeyIdacaHPj5vlQKi4hgL2hIfKeeNiAfQEVjaUFF29lv81xpNMzVMQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1513,14 +1823,14 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-config-provider/3.292.0:
+  /@aws-sdk/util-config-provider@3.292.0:
     resolution: {integrity: sha512-t3noYll6bPRSxeeNNEkC5czVjAiTPcsq00OwfJ2xyUqmquhLEfLwoJKmrT1uP7DjIEXdUtfoIQ2jWiIVm/oO5A==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-defaults-mode-browser/3.292.0:
+  /@aws-sdk/util-defaults-mode-browser@3.292.0:
     resolution: {integrity: sha512-7+zVUlMGfa8/KT++9humHo6IDxTnxMCmWUj5jVNlkpk6h7Ecmppf7aXotviyVIA43lhtz0p2AErs0N0ekEUK+w==}
     engines: {node: '>= 10.0.0'}
     dependencies:
@@ -1530,7 +1840,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-defaults-mode-node/3.292.0:
+  /@aws-sdk/util-defaults-mode-node@3.292.0:
     resolution: {integrity: sha512-SSIw85eF4BVs0fOJRyshT+R3b/UmBPhiVKCUZm2rq6+lIGkDPiSwQU3d/80AhXtiL5SFT/IzAKKgQd8qMa7q3A==}
     engines: {node: '>= 10.0.0'}
     dependencies:
@@ -1542,7 +1852,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-endpoints/3.293.0:
+  /@aws-sdk/util-endpoints@3.293.0:
     resolution: {integrity: sha512-R/99aNV49Refpv5guiUjEUrZYlvnfaNBniB+/ZtMO3ixxUopapssCrUivuJrmhccmrYaTCZw7dRzIWjU1jJhKg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1550,28 +1860,28 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-hex-encoding/3.292.0:
+  /@aws-sdk/util-hex-encoding@3.292.0:
     resolution: {integrity: sha512-qBd5KFIUywQ3qSSbj814S2srk0vfv8A6QMI+Obs1y2LHZFdQN5zViptI4UhXhKOHe+NnrHWxSuLC/LMH6q3SmA==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-locate-window/3.208.0:
+  /@aws-sdk/util-locate-window@3.208.0:
     resolution: {integrity: sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-middleware/3.292.0:
+  /@aws-sdk/util-middleware@3.292.0:
     resolution: {integrity: sha512-KjhS7flfoBKDxbiBZjLjMvEizXgjfQb7GQEItgzGoI9rfGCmZtvqCcqQQoIlxb8bIzGRggAUHtBGWnlLbpb+GQ==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-retry/3.292.0:
+  /@aws-sdk/util-retry@3.292.0:
     resolution: {integrity: sha512-JEHyF7MpVeRF5uR4LDYgpOKcFpOPiAj8TqN46SVOQQcL1K+V7cSr7O7N7J6MwJaN9XOzAcBadeIupMm7/BFbgw==}
     engines: {node: '>= 14.0.0'}
     dependencies:
@@ -1579,7 +1889,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-stream-browser/3.292.0:
+  /@aws-sdk/util-stream-browser@3.292.0:
     resolution: {integrity: sha512-yzwpjq18oefyp/Sv+Z0VWh7ziRPp+qM0pDUrTfuAnXg+mrlxaPDXJOhp5LoY8AVHcDPOEdIbzz0b00G48FabIg==}
     dependencies:
       '@aws-sdk/fetch-http-handler': 3.292.0
@@ -1590,7 +1900,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-stream-node/3.292.0:
+  /@aws-sdk/util-stream-node@3.292.0:
     resolution: {integrity: sha512-p3DHXvWo4Zdka75HwewUnWjpFp/gOT4SYYEOAsv3BwuZGxfmnojK9OVCkUBJ7s6LeHMKTgGqQPwAnVFu7iIZNg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1600,14 +1910,14 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-uri-escape/3.292.0:
+  /@aws-sdk/util-uri-escape@3.292.0:
     resolution: {integrity: sha512-hOQtUMQ4VcQ9iwKz50AoCp1XBD5gJ9nly/gJZccAM7zSA5mOO8RRKkbdonqquVHxrO0CnYgiFeCh3V35GFecUw==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-user-agent-browser/3.292.0:
+  /@aws-sdk/util-user-agent-browser@3.292.0:
     resolution: {integrity: sha512-dld+lpC3QdmTQHdBWJ0WFDkXDSrJgfz03q6mQ8+7H+BC12ZhT0I0g9iuvUjolqy7QR00OxOy47Y9FVhq8EC0Gg==}
     dependencies:
       '@aws-sdk/types': 3.292.0
@@ -1615,7 +1925,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-user-agent-node/3.292.0:
+  /@aws-sdk/util-user-agent-node@3.292.0:
     resolution: {integrity: sha512-f+NfIMal5E61MDc5WGhUEoicr7b1eNNhA+GgVdSB/Hg5fYhEZvFK9RZizH5rrtsLjjgcr9nPYSR7/nDKCJLumw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -1629,13 +1939,13 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-utf8-browser/3.259.0:
+  /@aws-sdk/util-utf8-browser@3.259.0:
     resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-utf8/3.292.0:
+  /@aws-sdk/util-utf8@3.292.0:
     resolution: {integrity: sha512-FPkj+Z59/DQWvoVu2wFaRncc3KVwe/pgK3MfVb0Lx+Ibey5KUx+sNpJmYcVYHUAe/Nv/JeIpOtYuC96IXOnI6w==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1643,7 +1953,7 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/util-waiter/3.292.0:
+  /@aws-sdk/util-waiter@3.292.0:
     resolution: {integrity: sha512-+7j+mcWUY4GwU8nTK4MvLWpOzS34SJZL85qLxQ04pysoCSHkInyS51D1ejBVNlJdbUSFvIcU0WHU0y6MDDeJzg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -1652,33 +1962,33 @@ packages:
       tslib: 2.5.0
     dev: false
 
-  /@aws-sdk/xml-builder/3.292.0:
+  /@aws-sdk/xml-builder@3.292.0:
     resolution: {integrity: sha512-0zgnhdwUy30q/1NPXi5ekdzHQqCs3ZJaUeGbvYMO54osi4K5hygAyTsyWtv6oaJggRqZrB0LAZ9xN6hG+sA8/g==}
     engines: {node: '>=14.0.0'}
     dependencies:
       tslib: 2.5.0
     dev: false
 
-  /@babel/code-frame/7.18.6:
+  /@babel/code-frame@7.18.6:
     resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/highlight': 7.18.6
     dev: true
 
-  /@babel/compat-data/7.20.10:
+  /@babel/compat-data@7.20.10:
     resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/core/7.21.3:
+  /@babel/core@7.21.3:
     resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@ampproject/remapping': 2.2.0
       '@babel/code-frame': 7.18.6
       '@babel/generator': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-module-transforms': 7.21.2
       '@babel/helpers': 7.21.0
       '@babel/parser': 7.21.3
@@ -1686,7 +1996,7 @@ packages:
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
       convert-source-map: 1.9.0
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       gensync: 1.0.0-beta.2
       json5: 2.2.3
       semver: 6.3.0
@@ -1694,7 +2004,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/generator/7.21.3:
+  /@babel/generator@7.21.3:
     resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1704,14 +2014,14 @@ packages:
       jsesc: 2.5.2
     dev: true
 
-  /@babel/helper-annotate-as-pure/7.18.6:
+  /@babel/helper-annotate-as-pure@7.18.6:
     resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
+  /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9:
     resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1719,7 +2029,7 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3:
+  /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1733,7 +2043,7 @@ packages:
       semver: 6.3.0
     dev: true
 
-  /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.3:
+  /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1752,7 +2062,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.3:
+  /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1763,15 +2073,15 @@ packages:
       regexpu-core: 5.3.2
     dev: true
 
-  /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3:
+  /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
     peerDependencies:
       '@babel/core': ^7.4.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       lodash.debounce: 4.0.8
       resolve: 1.22.1
       semver: 6.3.0
@@ -1779,19 +2089,19 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-environment-visitor/7.18.9:
+  /@babel/helper-environment-visitor@7.18.9:
     resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-explode-assignable-expression/7.18.6:
+  /@babel/helper-explode-assignable-expression@7.18.6:
     resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-function-name/7.21.0:
+  /@babel/helper-function-name@7.21.0:
     resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1799,28 +2109,28 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-hoist-variables/7.18.6:
+  /@babel/helper-hoist-variables@7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-member-expression-to-functions/7.21.0:
+  /@babel/helper-member-expression-to-functions@7.21.0:
     resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-module-imports/7.18.6:
+  /@babel/helper-module-imports@7.18.6:
     resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-module-transforms/7.21.2:
+  /@babel/helper-module-transforms@7.21.2:
     resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1836,19 +2146,19 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-optimise-call-expression/7.18.6:
+  /@babel/helper-optimise-call-expression@7.18.6:
     resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-plugin-utils/7.20.2:
+  /@babel/helper-plugin-utils@7.20.2:
     resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3:
+  /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1863,7 +2173,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-replace-supers/7.20.7:
+  /@babel/helper-replace-supers@7.20.7:
     resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1877,41 +2187,41 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helper-simple-access/7.20.2:
+  /@babel/helper-simple-access@7.20.2:
     resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-skip-transparent-expression-wrappers/7.20.0:
+  /@babel/helper-skip-transparent-expression-wrappers@7.20.0:
     resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-split-export-declaration/7.18.6:
+  /@babel/helper-split-export-declaration@7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-string-parser/7.19.4:
+  /@babel/helper-string-parser@7.19.4:
     resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-identifier/7.19.1:
+  /@babel/helper-validator-identifier@7.19.1:
     resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-option/7.21.0:
+  /@babel/helper-validator-option@7.21.0:
     resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-wrap-function/7.20.5:
+  /@babel/helper-wrap-function@7.20.5:
     resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1923,7 +2233,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/helpers/7.21.0:
+  /@babel/helpers@7.21.0:
     resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1934,7 +2244,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/highlight/7.18.6:
+  /@babel/highlight@7.18.6:
     resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -1943,21 +2253,21 @@ packages:
       js-tokens: 4.0.0
     dev: true
 
-  /@babel/parser/7.20.7:
+  /@babel/parser@7.20.7:
     resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==}
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
       '@babel/types': 7.21.3
 
-  /@babel/parser/7.21.3:
+  /@babel/parser@7.21.3:
     resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
       '@babel/types': 7.21.3
 
-  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1967,7 +2277,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1976,10 +2286,10 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -1988,40 +2298,40 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
+      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.12.0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2029,10 +2339,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2040,10 +2350,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2051,10 +2361,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2062,10 +2372,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2073,10 +2383,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2084,10 +2394,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2095,13 +2405,13 @@ packages:
     dependencies:
       '@babel/compat-data': 7.20.10
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2109,10 +2419,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2121,23 +2431,23 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2145,25 +2455,25 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
     engines: {node: '>=4'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3:
+  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2172,7 +2482,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2181,7 +2491,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3:
+  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3):
     resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2190,7 +2500,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3:
+  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2200,7 +2510,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2209,7 +2519,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2218,7 +2528,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2228,7 +2538,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.3:
+  /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2238,7 +2548,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3:
+  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2247,7 +2557,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2256,7 +2566,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2266,7 +2576,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3:
+  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2275,7 +2585,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2284,7 +2594,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3:
+  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2293,7 +2603,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2302,7 +2612,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2311,7 +2621,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3:
+  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -2320,7 +2630,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3:
+  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2330,7 +2640,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3:
+  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2340,7 +2650,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.3:
+  /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2350,7 +2660,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2360,7 +2670,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2369,12 +2679,12 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-module-imports': 7.18.6
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3
+      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2384,7 +2694,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2394,7 +2704,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2402,7 +2712,7 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-optimise-call-expression': 7.18.6
@@ -2414,7 +2724,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2425,7 +2735,7 @@ packages:
       '@babel/template': 7.20.7
     dev: true
 
-  /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.3:
+  /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2435,18 +2745,18 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2456,7 +2766,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2467,7 +2777,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2475,10 +2785,10 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.21.3)
     dev: true
 
-  /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2488,19 +2798,19 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2510,7 +2820,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2520,7 +2830,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.3:
+  /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.3):
     resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2533,7 +2843,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.3:
+  /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3):
     resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2547,7 +2857,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.3:
+  /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.3):
     resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2562,7 +2872,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2575,18 +2885,18 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.3:
+  /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2596,7 +2906,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2609,7 +2919,7 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.3:
+  /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2619,7 +2929,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2629,7 +2939,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2639,7 +2949,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2649,7 +2959,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.21.3:
+  /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2659,11 +2969,11 @@ packages:
       '@babel/helper-annotate-as-pure': 7.18.6
       '@babel/helper-module-imports': 7.18.6
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.3:
+  /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2674,7 +2984,7 @@ packages:
       regenerator-transform: 0.15.1
     dev: true
 
-  /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2684,7 +2994,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2694,7 +3004,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.3:
+  /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2705,7 +3015,7 @@ packages:
       '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
     dev: true
 
-  /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2715,7 +3025,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2725,7 +3035,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3:
+  /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3):
     resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2735,7 +3045,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.3:
+  /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2743,14 +3053,14 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3
+      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3:
+  /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3):
     resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2760,18 +3070,18 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3:
+  /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/preset-env/7.20.2_@babel+core@7.21.3:
+  /@babel/preset-env@7.20.2(@babel/core@7.21.3):
     resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2779,85 +3089,85 @@ packages:
     dependencies:
       '@babel/compat-data': 7.20.10
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3
-      '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3
-      '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.3
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3
-      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3
-      '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.3
-      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.3
-      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3
-      '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.3
-      '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.3
-      '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3
-      '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.3
-      '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.3
-      '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.3
-      '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.3
-      '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3
-      '@babel/preset-modules': 0.1.5_@babel+core@7.21.3
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-modules': 0.1.5(@babel/core@7.21.3)
       '@babel/types': 7.21.3
-      babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3
-      babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3
-      babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3
+      babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
+      babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
+      babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
       core-js-compat: 3.29.1
       semver: 6.3.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/preset-flow/7.18.6_@babel+core@7.21.3:
+  /@babel/preset-flow@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2866,23 +3176,23 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.3)
     dev: true
 
-  /@babel/preset-modules/0.1.5_@babel+core@7.21.3:
+  /@babel/preset-modules@0.1.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
       '@babel/types': 7.21.3
       esutils: 2.0.3
     dev: true
 
-  /@babel/preset-typescript/7.21.0_@babel+core@7.21.3:
+  /@babel/preset-typescript@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2891,12 +3201,12 @@ packages:
       '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.21.3
+      '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/register/7.21.0_@babel+core@7.21.3:
+  /@babel/register@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
@@ -2910,17 +3220,17 @@ packages:
       source-map-support: 0.5.21
     dev: true
 
-  /@babel/regjsgen/0.8.0:
+  /@babel/regjsgen@0.8.0:
     resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
     dev: true
 
-  /@babel/runtime/7.20.7:
+  /@babel/runtime@7.20.7:
     resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
       regenerator-runtime: 0.13.11
 
-  /@babel/template/7.20.7:
+  /@babel/template@7.20.7:
     resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -2929,7 +3239,7 @@ packages:
       '@babel/types': 7.21.3
     dev: true
 
-  /@babel/traverse/7.21.3:
+  /@babel/traverse@7.21.3:
     resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -2941,13 +3251,13 @@ packages:
       '@babel/helper-split-export-declaration': 7.18.6
       '@babel/parser': 7.21.3
       '@babel/types': 7.21.3
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/types/7.21.3:
+  /@babel/types@7.21.3:
     resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
     engines: {node: '>=6.9.0'}
     dependencies:
@@ -2955,21 +3265,21 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
-  /@base2/pretty-print-object/1.0.1:
+  /@base2/pretty-print-object@1.0.1:
     resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
     dev: true
 
-  /@bcoe/v8-coverage/0.2.3:
+  /@bcoe/v8-coverage@0.2.3:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: true
 
-  /@bull-board/api/5.0.0:
+  /@bull-board/api@5.0.0:
     resolution: {integrity: sha512-nOB8TUSeX8h2wgMxmPZwy0p3XqRX/DotR71M5FT5OS/bZCZIKRpEc36TIeKPimZli6voFyX+rsEqVhGenpIKUQ==}
     dependencies:
       redis-info: 3.1.0
     dev: false
 
-  /@bull-board/fastify/5.0.0:
+  /@bull-board/fastify@5.0.0:
     resolution: {integrity: sha512-g7eLQhap9HiRjWv3NkgbVrdiG8RDUwyA3qDW2jES1dRcpWPBD9/3rxESwzuIoxa2h0OJ34VLY9hsgpu0vRyhZg==}
     dependencies:
       '@bull-board/api': 5.0.0
@@ -2979,56 +3289,56 @@ packages:
       ejs: 3.1.8
     dev: false
 
-  /@bull-board/ui/5.0.0:
+  /@bull-board/ui@5.0.0:
     resolution: {integrity: sha512-WznLX8dGthUWimZDqN5Zft3Axp6SStlI244BhiQYXB7xXZRMgaihNZxh7vgpwg0Osmw/gPFvAI+NFVGc3tvj9g==}
     dependencies:
       '@bull-board/api': 5.0.0
     dev: false
 
-  /@canvas/image-data/1.0.0:
+  /@canvas/image-data@1.0.0:
     resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==}
     dev: false
 
-  /@chainsafe/is-ip/2.0.1:
+  /@chainsafe/is-ip@2.0.1:
     resolution: {integrity: sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==}
     dev: false
 
-  /@colors/colors/1.5.0:
+  /@colors/colors@1.5.0:
     resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
     engines: {node: '>=0.1.90'}
     requiresBuild: true
     dev: true
     optional: true
 
-  /@cropper/element-canvas/2.0.0-beta.2:
+  /@cropper/element-canvas@2.0.0-beta.2:
     resolution: {integrity: sha512-LZcnMwv7M3ZxUKX9YrYGxqbf8YsYfeIUFREaB/IkKsm7E7ASaDrrjdc996QYMjdjUNcWdJjxhsoucPNEvl/DXA==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-crosshair/2.0.0-beta.2:
+  /@cropper/element-crosshair@2.0.0-beta.2:
     resolution: {integrity: sha512-kBxZ2zZ7uR7XlQcnUbudq7562XwtTOqbGNYg5VWem/ukcAAKwYmPlapNlv7n228DSUGEz5FxKW8GSwLucJlQ0Q==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-grid/2.0.0-beta.2:
+  /@cropper/element-grid@2.0.0-beta.2:
     resolution: {integrity: sha512-rWMOjlj+eq9L2oxAthNYdGxbV3sYyV+tra6VAuooZl+RbdQZ9XCnG0Pitb/RfgPZb860ia0q8biE5zEq4Uc8fA==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-handle/2.0.0-beta.2:
+  /@cropper/element-handle@2.0.0-beta.2:
     resolution: {integrity: sha512-IAFyqldnB57ZGzvf3VuE7Y9UAaq9IMmun15v17cAWX1q4ZCVqdFrugAWpRF+V5WgHBL2doxHUOQlfy7LznzRmg==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-image/2.0.0-beta.2:
+  /@cropper/element-image@2.0.0-beta.2:
     resolution: {integrity: sha512-FgYb+GfcxdewH6VKgw6Ltws8fw3TSP8d0HMH/WZubBC2w/NNAvp92EonwgjDoTLEFFJKbj5P2aKTFY0aO70R0Q==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
@@ -3036,7 +3346,7 @@ packages:
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-selection/2.0.0-beta.2:
+  /@cropper/element-selection@2.0.0-beta.2:
     resolution: {integrity: sha512-O/fxpJe/WB5H+mELSVfp4tOAAa7yMVa+wn35DCRxaDPb/1Um55E7OT1G3puAL9Elm7NFA/CCMYuHohl9emE25A==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
@@ -3045,7 +3355,7 @@ packages:
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-shade/2.0.0-beta.2:
+  /@cropper/element-shade@2.0.0-beta.2:
     resolution: {integrity: sha512-aY5RP2ygteq51ZDU3+rAj+f+0hSgEf+vRAdJ1YO2bJ1n25TpOaz2klO5COdHxn3unLVjYK97khIZGs7ClbV0rQ==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
@@ -3054,7 +3364,7 @@ packages:
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element-viewer/2.0.0-beta.2:
+  /@cropper/element-viewer@2.0.0-beta.2:
     resolution: {integrity: sha512-/2BhLFr2Ti5LnRvcIlLlR3NDSF3x9w9BvYukFbnCxoTLIbGvwM02YQV2Qx+al8C0mBoW0ab6uF5ykl6W8i9WkQ==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
@@ -3064,13 +3374,13 @@ packages:
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/element/2.0.0-beta.2:
+  /@cropper/element@2.0.0-beta.2:
     resolution: {integrity: sha512-i3wfelk5d4MLNgAcQpRa/jOaxWAcDLRAUkiHmU6CMl7xvOAD/4TFQGB3qSpzgx3NK4hUDLn80/gp7gM2nvrBWg==}
     dependencies:
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /@cropper/elements/2.0.0-beta.2:
+  /@cropper/elements@2.0.0-beta.2:
     resolution: {integrity: sha512-l08CmeOvLJ8XLJ95OQ+kSHSbf7+pHcsu3pvQYjustbrUj0H1vzBiWT8VygPjkCUMoVIfsBpYmBNpWVGJvjoy2Q==}
     dependencies:
       '@cropper/element': 2.0.0-beta.2
@@ -3084,11 +3394,11 @@ packages:
       '@cropper/element-viewer': 2.0.0-beta.2
     dev: false
 
-  /@cropper/utils/2.0.0-beta.2:
+  /@cropper/utils@2.0.0-beta.2:
     resolution: {integrity: sha512-RJu5IWzH6vcygwLsx9KEqzwjnEqApPkSFViMzxCRbe0IuAXt2ZlSUmYKgLFZY+YJIdaZ+/P7PwiUcZ7GYH3Msw==}
     dev: false
 
-  /@cypress/request/2.88.11:
+  /@cypress/request@2.88.11:
     resolution: {integrity: sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==}
     engines: {node: '>= 6'}
     dependencies:
@@ -3112,27 +3422,27 @@ packages:
       uuid: 8.3.2
     dev: true
 
-  /@cypress/xvfb/1.2.4_supports-color@8.1.1:
+  /@cypress/xvfb@1.2.4(supports-color@8.1.1):
     resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==}
     dependencies:
-      debug: 3.2.7_supports-color@8.1.1
+      debug: 3.2.7(supports-color@8.1.1)
       lodash.once: 4.1.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@digitalbazaar/http-client/3.2.0:
+  /@digitalbazaar/http-client@3.2.0:
     resolution: {integrity: sha512-NhYXcWE/JDE7AnJikNX7q0S6zNuUPA2NuIoRdUpmvHlarjmRqyr6hIO3Awu2FxlUzbdiI1uzuWrZyB9mD1tTvw==}
     engines: {node: '>=14.0'}
     dependencies:
       ky: 0.30.0
-      ky-universal: 0.10.1_ky@0.30.0
+      ky-universal: 0.10.1(ky@0.30.0)
       undici: 5.16.0
     transitivePeerDependencies:
       - web-streams-polyfill
     dev: false
 
-  /@discordapp/twemoji/14.0.2:
+  /@discordapp/twemoji@14.0.2:
     resolution: {integrity: sha512-eYJpFsjViDTYwq3f6v+tRu8iRc+yLAeGrlh6kmNRvvC6rroUE2bMlBfEQ/WNh+2Q1FtSEFXpxzuQPOHzRzbAyA==}
     dependencies:
       fs-extra: 8.1.0
@@ -3141,12 +3451,12 @@ packages:
       universalify: 0.1.2
     dev: false
 
-  /@discoveryjs/json-ext/0.5.7:
+  /@discoveryjs/json-ext@0.5.7:
     resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
     engines: {node: '>=10.0.0'}
     dev: true
 
-  /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@18.2.0:
+  /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0):
     resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==}
     peerDependencies:
       react: '>=16.8.0'
@@ -3154,15 +3464,7 @@ packages:
       react: 18.2.0
     dev: true
 
-  /@esbuild/android-arm/0.16.17:
-    resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/android-arm64/0.16.17:
+  /@esbuild/android-arm64@0.16.17:
     resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -3170,7 +3472,33 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/android-x64/0.16.17:
+  /@esbuild/android-arm64@0.17.14:
+    resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm@0.16.17:
+    resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    optional: true
+
+  /@esbuild/android-arm@0.17.14:
+    resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-x64@0.16.17:
     resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3178,7 +3506,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/darwin-arm64/0.16.17:
+  /@esbuild/android-x64@0.17.14:
+    resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-arm64@0.16.17:
     resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -3186,7 +3523,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/darwin-x64/0.16.17:
+  /@esbuild/darwin-arm64@0.17.14:
+    resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-x64@0.16.17:
     resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3194,7 +3540,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/freebsd-arm64/0.16.17:
+  /@esbuild/darwin-x64@0.17.14:
+    resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-arm64@0.16.17:
     resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -3202,7 +3557,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/freebsd-x64/0.16.17:
+  /@esbuild/freebsd-arm64@0.17.14:
+    resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-x64@0.16.17:
     resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3210,15 +3574,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-arm/0.16.17:
-    resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
+  /@esbuild/freebsd-x64@0.17.14:
+    resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==}
     engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
+    cpu: [x64]
+    os: [freebsd]
     requiresBuild: true
+    dev: true
     optional: true
 
-  /@esbuild/linux-arm64/0.16.17:
+  /@esbuild/linux-arm64@0.16.17:
     resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -3226,7 +3591,33 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-ia32/0.16.17:
+  /@esbuild/linux-arm64@0.17.14:
+    resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm@0.16.17:
+    resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    optional: true
+
+  /@esbuild/linux-arm@0.17.14:
+    resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ia32@0.16.17:
     resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
     engines: {node: '>=12'}
     cpu: [ia32]
@@ -3234,7 +3625,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-loong64/0.16.17:
+  /@esbuild/linux-ia32@0.17.14:
+    resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-loong64@0.16.17:
     resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
     engines: {node: '>=12'}
     cpu: [loong64]
@@ -3242,7 +3642,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-mips64el/0.16.17:
+  /@esbuild/linux-loong64@0.17.14:
+    resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-mips64el@0.16.17:
     resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
     engines: {node: '>=12'}
     cpu: [mips64el]
@@ -3250,7 +3659,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-ppc64/0.16.17:
+  /@esbuild/linux-mips64el@0.17.14:
+    resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ppc64@0.16.17:
     resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
     engines: {node: '>=12'}
     cpu: [ppc64]
@@ -3258,7 +3676,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-riscv64/0.16.17:
+  /@esbuild/linux-ppc64@0.17.14:
+    resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-riscv64@0.16.17:
     resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
     engines: {node: '>=12'}
     cpu: [riscv64]
@@ -3266,7 +3693,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-s390x/0.16.17:
+  /@esbuild/linux-riscv64@0.17.14:
+    resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-s390x@0.16.17:
     resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
     engines: {node: '>=12'}
     cpu: [s390x]
@@ -3274,7 +3710,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/linux-x64/0.16.17:
+  /@esbuild/linux-s390x@0.17.14:
+    resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-x64@0.16.17:
     resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3282,7 +3727,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/netbsd-x64/0.16.17:
+  /@esbuild/linux-x64@0.17.14:
+    resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/netbsd-x64@0.16.17:
     resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3290,7 +3744,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/openbsd-x64/0.16.17:
+  /@esbuild/netbsd-x64@0.17.14:
+    resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/openbsd-x64@0.16.17:
     resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3298,7 +3761,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/sunos-x64/0.16.17:
+  /@esbuild/openbsd-x64@0.17.14:
+    resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/sunos-x64@0.16.17:
     resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3306,7 +3778,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/win32-arm64/0.16.17:
+  /@esbuild/sunos-x64@0.17.14:
+    resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-arm64@0.16.17:
     resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -3314,7 +3795,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/win32-ia32/0.16.17:
+  /@esbuild/win32-arm64@0.17.14:
+    resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-ia32@0.16.17:
     resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
     engines: {node: '>=12'}
     cpu: [ia32]
@@ -3322,7 +3812,16 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@esbuild/win32-x64/0.16.17:
+  /@esbuild/win32-ia32@0.17.14:
+    resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-x64@0.16.17:
     resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -3330,12 +3829,21 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@eslint/eslintrc/1.4.1:
+  /@esbuild/win32-x64@0.17.14:
+    resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@eslint/eslintrc@1.4.1:
     resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
       ajv: 6.12.6
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       espree: 9.4.1
       globals: 13.19.0
       ignore: 5.2.4
@@ -3347,12 +3855,12 @@ packages:
       - supports-color
     dev: true
 
-  /@eslint/eslintrc/2.0.0:
+  /@eslint/eslintrc@2.0.0:
     resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
       ajv: 6.12.6
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       espree: 9.4.1
       globals: 13.19.0
       ignore: 5.2.4
@@ -3364,71 +3872,71 @@ packages:
       - supports-color
     dev: true
 
-  /@eslint/js/8.35.0:
+  /@eslint/js@8.35.0:
     resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /@fal-works/esbuild-plugin-global-externals/2.1.2:
+  /@fal-works/esbuild-plugin-global-externals@2.1.2:
     resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
     dev: true
 
-  /@fastify/accept-negotiator/1.0.0:
+  /@fastify/accept-negotiator@1.0.0:
     resolution: {integrity: sha512-4R/N2KfYeld7A5LGkai+iUFMahXcxxYbDp+XS2B1yuL3cdmZLJ9TlCnNzT3q5xFTqsYm0GPpinLUwfSwjcVjyA==}
     engines: {node: '>=14'}
     dev: false
 
-  /@fastify/accepts/4.1.0:
+  /@fastify/accepts@4.1.0:
     resolution: {integrity: sha512-oURKietAW2iXxtQCS8oaTSMHaJ0PQ7M+NymOr8RgX65fOi+xGWsZ9Fu6hep/9oyeOUD0PA07Ofg03g9f+GvHLg==}
     dependencies:
       accepts: 1.3.8
       fastify-plugin: 4.5.0
     dev: false
 
-  /@fastify/ajv-compiler/3.5.0:
+  /@fastify/ajv-compiler@3.5.0:
     resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==}
     dependencies:
       ajv: 8.12.0
-      ajv-formats: 2.1.1_ajv@8.12.0
+      ajv-formats: 2.1.1(ajv@8.12.0)
       fast-uri: 2.2.0
     dev: false
 
-  /@fastify/busboy/1.1.0:
+  /@fastify/busboy@1.1.0:
     resolution: {integrity: sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==}
     engines: {node: '>=10.17.0'}
     dependencies:
       text-decoding: 1.0.0
     dev: false
 
-  /@fastify/cookie/8.3.0:
+  /@fastify/cookie@8.3.0:
     resolution: {integrity: sha512-P9hY9GO11L20TnZ33XN3i0bt+3x0zaT7S0ohAzWO950E9PB2xnNhLYzPFJIGFi5AVN0yr5+/iZhWxeYvR6KCzg==}
     dependencies:
       cookie: 0.5.0
       fastify-plugin: 4.5.0
     dev: false
 
-  /@fastify/cors/8.2.0:
+  /@fastify/cors@8.2.0:
     resolution: {integrity: sha512-qDgwpmg6C4D0D3nh8MTMuRXWyEwPnDZDBODaJv90FP2o9ukbahJByW4FtrM5Bpod5KbTf1oIExBmpItbUTQmHg==}
     dependencies:
       fastify-plugin: 4.5.0
       mnemonist: 0.39.5
     dev: false
 
-  /@fastify/deepmerge/1.3.0:
+  /@fastify/deepmerge@1.3.0:
     resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==}
     dev: false
 
-  /@fastify/error/3.2.0:
+  /@fastify/error@3.2.0:
     resolution: {integrity: sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ==}
     dev: false
 
-  /@fastify/fast-json-stringify-compiler/4.2.0:
+  /@fastify/fast-json-stringify-compiler@4.2.0:
     resolution: {integrity: sha512-ypZynRvXA3dibfPykQN3RB5wBdEUgSGgny8Qc6k163wYPLD4mEGEDkACp+00YmqkGvIm8D/xYoHajwyEdWD/eg==}
     dependencies:
       fast-json-stringify: 5.5.0
     dev: false
 
-  /@fastify/http-proxy/8.4.0:
+  /@fastify/http-proxy@8.4.0:
     resolution: {integrity: sha512-H8nwsmawFtKKRE6uhh1BtF1gQi/l147SmLsDGxB0HdYTHzjXz6uSQO3lEVmY7unKMzbArRjdoJQkEGpScszdSw==}
     dependencies:
       '@fastify/reply-from': 8.3.1
@@ -3438,7 +3946,7 @@ packages:
       - utf-8-validate
     dev: false
 
-  /@fastify/multipart/7.4.2:
+  /@fastify/multipart@7.4.2:
     resolution: {integrity: sha512-jrPoQ8I2Mpd92vVR/XE1DKBa+h7EiXaLL5TvHIUTtHiF7/0FChjP7spBQ9ROItpNrNKdKGB8uSJHmPIjRK/24A==}
     dependencies:
       '@fastify/busboy': 1.1.0
@@ -3451,7 +3959,7 @@ packages:
       stream-wormhole: 1.1.0
     dev: false
 
-  /@fastify/reply-from/8.3.1:
+  /@fastify/reply-from@8.3.1:
     resolution: {integrity: sha512-fRByAvTMXuBuYIimcinukOB3YdmqtYPeoybXIBNY0aPVgetHkmCVffBo/M4pEOib9Pes8wuoYL4VawI65aHl4w==}
     dependencies:
       '@fastify/error': 3.2.0
@@ -3463,7 +3971,7 @@ packages:
       undici: 5.16.0
     dev: false
 
-  /@fastify/send/2.0.1:
+  /@fastify/send@2.0.1:
     resolution: {integrity: sha512-8jdouu0o5d0FMq1+zCKeKXc1tmOQ5tTGYdQP3MpyF9+WWrZT1KCBdh6hvoEYxOm3oJG/akdE9BpehLiJgYRvGw==}
     dependencies:
       '@lukeed/ms': 2.0.1
@@ -3473,7 +3981,7 @@ packages:
       mime: 3.0.0
     dev: false
 
-  /@fastify/static/6.9.0:
+  /@fastify/static@6.9.0:
     resolution: {integrity: sha512-9SBVNJi2+KTnfiW1WjiVXDsmUxliNI54OF1eOiaop264dh8FwXSuLmO62JXvx7+VD0vQXEqsyRbFCYUJ9aJxng==}
     dependencies:
       '@fastify/accept-negotiator': 1.0.0
@@ -3485,51 +3993,51 @@ packages:
       readable-stream: 4.3.0
     dev: false
 
-  /@fastify/view/7.4.1:
+  /@fastify/view@7.4.1:
     resolution: {integrity: sha512-ahmRmSbNVM8bIoz0BAFnY0jNigom+xbPQ9Q1ZjmNOtGVVT3nYXCxw2OMkTr9iXwrJ4Le3EtWDHlFkZ2fCQ2hJA==}
     dependencies:
       fastify-plugin: 4.5.0
       hashlru: 2.3.0
     dev: false
 
-  /@gar/promisify/1.1.3:
+  /@gar/promisify@1.1.3:
     resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
     dev: false
 
-  /@hapi/hoek/9.3.0:
+  /@hapi/hoek@9.3.0:
     resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
     dev: true
 
-  /@hapi/topo/5.1.0:
+  /@hapi/topo@5.1.0:
     resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
     dependencies:
       '@hapi/hoek': 9.3.0
     dev: true
 
-  /@humanwhocodes/config-array/0.11.8:
+  /@humanwhocodes/config-array@0.11.8:
     resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
     engines: {node: '>=10.10.0'}
     dependencies:
       '@humanwhocodes/object-schema': 1.2.1
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       minimatch: 3.1.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@humanwhocodes/module-importer/1.0.1:
+  /@humanwhocodes/module-importer@1.0.1:
     resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
     engines: {node: '>=12.22'}
     dev: true
 
-  /@humanwhocodes/object-schema/1.2.1:
+  /@humanwhocodes/object-schema@1.2.1:
     resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
     dev: true
 
-  /@ioredis/commands/1.2.0:
+  /@ioredis/commands@1.2.0:
     resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
 
-  /@istanbuljs/load-nyc-config/1.1.0:
+  /@istanbuljs/load-nyc-config@1.1.0:
     resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
     engines: {node: '>=8'}
     dependencies:
@@ -3540,12 +4048,12 @@ packages:
       resolve-from: 5.0.0
     dev: true
 
-  /@istanbuljs/schema/0.1.3:
+  /@istanbuljs/schema@0.1.3:
     resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
     engines: {node: '>=8'}
     dev: true
 
-  /@jest/console/29.5.0:
+  /@jest/console@29.5.0:
     resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3557,7 +4065,7 @@ packages:
       slash: 3.0.0
     dev: true
 
-  /@jest/core/29.5.0:
+  /@jest/core@29.5.0:
     resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -3578,7 +4086,7 @@ packages:
       exit: 0.1.2
       graceful-fs: 4.2.10
       jest-changed-files: 29.5.0
-      jest-config: 29.5.0_@types+node@18.15.0
+      jest-config: 29.5.0(@types/node@18.15.0)
       jest-haste-map: 29.5.0
       jest-message-util: 29.5.0
       jest-regex-util: 29.4.3
@@ -3599,14 +4107,14 @@ packages:
       - ts-node
     dev: true
 
-  /@jest/create-cache-key-function/27.5.1:
+  /@jest/create-cache-key-function@27.5.1:
     resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==}
     engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
     dependencies:
       '@jest/types': 27.5.1
     dev: true
 
-  /@jest/environment/29.5.0:
+  /@jest/environment@29.5.0:
     resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3616,14 +4124,14 @@ packages:
       jest-mock: 29.5.0
     dev: true
 
-  /@jest/expect-utils/29.5.0:
+  /@jest/expect-utils@29.5.0:
     resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       jest-get-type: 29.4.3
     dev: true
 
-  /@jest/expect/29.5.0:
+  /@jest/expect@29.5.0:
     resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3633,7 +4141,7 @@ packages:
       - supports-color
     dev: true
 
-  /@jest/fake-timers/29.5.0:
+  /@jest/fake-timers@29.5.0:
     resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3645,7 +4153,7 @@ packages:
       jest-util: 29.5.0
     dev: true
 
-  /@jest/globals/29.5.0:
+  /@jest/globals@29.5.0:
     resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3657,7 +4165,7 @@ packages:
       - supports-color
     dev: true
 
-  /@jest/reporters/29.5.0:
+  /@jest/reporters@29.5.0:
     resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -3694,14 +4202,14 @@ packages:
       - supports-color
     dev: true
 
-  /@jest/schemas/29.4.3:
+  /@jest/schemas@29.4.3:
     resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@sinclair/typebox': 0.25.21
     dev: true
 
-  /@jest/source-map/29.4.3:
+  /@jest/source-map@29.4.3:
     resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3710,7 +4218,7 @@ packages:
       graceful-fs: 4.2.11
     dev: true
 
-  /@jest/test-result/29.5.0:
+  /@jest/test-result@29.5.0:
     resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3720,7 +4228,7 @@ packages:
       collect-v8-coverage: 1.0.1
     dev: true
 
-  /@jest/test-sequencer/29.5.0:
+  /@jest/test-sequencer@29.5.0:
     resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3730,7 +4238,7 @@ packages:
       slash: 3.0.0
     dev: true
 
-  /@jest/transform/29.5.0:
+  /@jest/transform@29.5.0:
     resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3753,7 +4261,7 @@ packages:
       - supports-color
     dev: true
 
-  /@jest/types/27.5.1:
+  /@jest/types@27.5.1:
     resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==}
     engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
     dependencies:
@@ -3764,7 +4272,7 @@ packages:
       chalk: 4.1.2
     dev: true
 
-  /@jest/types/29.5.0:
+  /@jest/types@29.5.0:
     resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -3776,7 +4284,7 @@ packages:
       chalk: 4.1.2
     dev: true
 
-  /@joshwooding/vite-plugin-react-docgen-typescript/0.2.1_vwvfc4ezh6jlf6pa67auy3eulu:
+  /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@4.9.5)(vite@4.1.4):
     resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==}
     peerDependencies:
       typescript: '>= 4.3.x'
@@ -3786,14 +4294,14 @@ packages:
         optional: true
     dependencies:
       glob: 7.2.3
-      glob-promise: 4.2.2_glob@7.2.3
+      glob-promise: 4.2.2(glob@7.2.3)
       magic-string: 0.27.0
-      react-docgen-typescript: 2.2.2_typescript@4.9.5
+      react-docgen-typescript: 2.2.2(typescript@4.9.5)
       typescript: 4.9.5
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     dev: true
 
-  /@jridgewell/gen-mapping/0.1.1:
+  /@jridgewell/gen-mapping@0.1.1:
     resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
     engines: {node: '>=6.0.0'}
     dependencies:
@@ -3801,7 +4309,7 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.14
     dev: true
 
-  /@jridgewell/gen-mapping/0.3.2:
+  /@jridgewell/gen-mapping@0.3.2:
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
     engines: {node: '>=6.0.0'}
     dependencies:
@@ -3809,49 +4317,49 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.14
       '@jridgewell/trace-mapping': 0.3.17
 
-  /@jridgewell/resolve-uri/3.1.0:
+  /@jridgewell/resolve-uri@3.1.0:
     resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
     engines: {node: '>=6.0.0'}
 
-  /@jridgewell/set-array/1.1.2:
+  /@jridgewell/set-array@1.1.2:
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
 
-  /@jridgewell/source-map/0.3.2:
+  /@jridgewell/source-map@0.3.2:
     resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
     dependencies:
       '@jridgewell/gen-mapping': 0.3.2
       '@jridgewell/trace-mapping': 0.3.17
     dev: false
 
-  /@jridgewell/sourcemap-codec/1.4.14:
+  /@jridgewell/sourcemap-codec@1.4.14:
     resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
 
-  /@jridgewell/trace-mapping/0.3.17:
+  /@jridgewell/trace-mapping@0.3.17:
     resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
     dependencies:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
 
-  /@juggle/resize-observer/3.4.0:
+  /@juggle/resize-observer@3.4.0:
     resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
     dev: true
 
-  /@kurkle/color/0.3.2:
+  /@kurkle/color@0.3.2:
     resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
     dev: false
 
-  /@lukeed/csprng/1.0.1:
+  /@lukeed/csprng@1.0.1:
     resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==}
     engines: {node: '>=8'}
     dev: false
 
-  /@lukeed/ms/2.0.1:
+  /@lukeed/ms@2.0.1:
     resolution: {integrity: sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==}
     engines: {node: '>=8'}
     dev: false
 
-  /@mapbox/node-pre-gyp/1.0.9:
+  /@mapbox/node-pre-gyp@1.0.9:
     resolution: {integrity: sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==}
     dependencies:
       detect-libc: 2.0.1
@@ -3869,7 +4377,7 @@ packages:
     dev: false
     optional: true
 
-  /@mdx-js/react/2.3.0_react@18.2.0:
+  /@mdx-js/react@2.3.0(react@18.2.0):
     resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
     peerDependencies:
       react: '>=16'
@@ -3879,7 +4387,7 @@ packages:
       react: 18.2.0
     dev: true
 
-  /@mole-inc/bin-wrapper/8.0.1:
+  /@mole-inc/bin-wrapper@8.0.1:
     resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
@@ -3893,49 +4401,49 @@ packages:
       os-filter-obj: 2.0.0
     dev: false
 
-  /@msgpackr-extract/msgpackr-extract-darwin-arm64/2.2.0:
+  /@msgpackr-extract/msgpackr-extract-darwin-arm64@2.2.0:
     resolution: {integrity: sha512-Z9LFPzfoJi4mflGWV+rv7o7ZbMU5oAU9VmzCgL240KnqDW65Y2HFCT3MW06/ITJSnbVLacmcEJA8phywK7JinQ==}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     optional: true
 
-  /@msgpackr-extract/msgpackr-extract-darwin-x64/2.2.0:
+  /@msgpackr-extract/msgpackr-extract-darwin-x64@2.2.0:
     resolution: {integrity: sha512-vq0tT8sjZsy4JdSqmadWVw6f66UXqUCabLmUVHZwUFzMgtgoIIQjT4VVRHKvlof3P/dMCkbMJ5hB1oJ9OWHaaw==}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     optional: true
 
-  /@msgpackr-extract/msgpackr-extract-linux-arm/2.2.0:
-    resolution: {integrity: sha512-SaJ3Qq4lX9Syd2xEo9u3qPxi/OB+5JO/ngJKK97XDpa1C587H9EWYO6KD8995DAjSinWvdHKRrCOXVUC5fvGOg==}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@msgpackr-extract/msgpackr-extract-linux-arm64/2.2.0:
+  /@msgpackr-extract/msgpackr-extract-linux-arm64@2.2.0:
     resolution: {integrity: sha512-hlxxLdRmPyq16QCutUtP8Tm6RDWcyaLsRssaHROatgnkOxdleMTgetf9JsdncL8vLh7FVy/RN9i3XR5dnb9cRA==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@msgpackr-extract/msgpackr-extract-linux-x64/2.2.0:
+  /@msgpackr-extract/msgpackr-extract-linux-arm@2.2.0:
+    resolution: {integrity: sha512-SaJ3Qq4lX9Syd2xEo9u3qPxi/OB+5JO/ngJKK97XDpa1C587H9EWYO6KD8995DAjSinWvdHKRrCOXVUC5fvGOg==}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    optional: true
+
+  /@msgpackr-extract/msgpackr-extract-linux-x64@2.2.0:
     resolution: {integrity: sha512-94y5PJrSOqUNcFKmOl7z319FelCLAE0rz/jPCWS+UtdMZvpa4jrQd+cJPQCLp2Fes1yAW/YUQj/Di6YVT3c3Iw==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@msgpackr-extract/msgpackr-extract-win32-x64/2.2.0:
+  /@msgpackr-extract/msgpackr-extract-win32-x64@2.2.0:
     resolution: {integrity: sha512-XrC0JzsqQSvOyM3t04FMLO6z5gCuhPE6k4FXuLK5xf52ZbdvcFe1yBmo7meCew9B8G2f0T9iu9t3kfTYRYROgA==}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
     optional: true
 
-  /@mswjs/cookies/0.2.2:
+  /@mswjs/cookies@0.2.2:
     resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==}
     engines: {node: '>=14'}
     dependencies:
@@ -3943,14 +4451,14 @@ packages:
       set-cookie-parser: 2.5.1
     dev: true
 
-  /@mswjs/interceptors/0.17.9:
+  /@mswjs/interceptors@0.17.9:
     resolution: {integrity: sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==}
     engines: {node: '>=14'}
     dependencies:
       '@open-draft/until': 1.0.3
       '@types/debug': 4.1.7
       '@xmldom/xmldom': 0.8.6
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       headers-polyfill: 3.1.2
       outvariant: 1.3.0
       strict-event-emitter: 0.2.8
@@ -3959,7 +4467,7 @@ packages:
       - supports-color
     dev: true
 
-  /@ndelangen/get-tarball/3.0.7:
+  /@ndelangen/get-tarball@3.0.7:
     resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==}
     dependencies:
       gunzip-maybe: 1.4.2
@@ -3967,7 +4475,7 @@ packages:
       tar-fs: 2.1.1
     dev: true
 
-  /@nestjs/common/9.3.9_mnr6j2del53muneqly5h4y27ai:
+  /@nestjs/common@9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0):
     resolution: {integrity: sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==}
     peerDependencies:
       cache-manager: <=5
@@ -3990,7 +4498,7 @@ packages:
       uid: 2.0.1
     dev: false
 
-  /@nestjs/core/9.3.9_jrq2rdgfp2sx67wmylmrqliwxe:
+  /@nestjs/core@9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0):
     resolution: {integrity: sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==}
     requiresBuild: true
     peerDependencies:
@@ -4008,7 +4516,7 @@ packages:
       '@nestjs/websockets':
         optional: true
     dependencies:
-      '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai
+      '@nestjs/common': 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0)
       '@nuxtjs/opencollective': 0.3.2
       fast-safe-stringify: 2.1.1
       iterare: 1.2.1
@@ -4021,7 +4529,7 @@ packages:
       - encoding
     dev: false
 
-  /@nestjs/testing/9.3.9_77foi4w27ghy47yutmnzv7krjy:
+  /@nestjs/testing@9.3.9(@nestjs/common@9.3.9)(@nestjs/core@9.3.9):
     resolution: {integrity: sha512-+mPvSVvSC2SAkYgZZv1mOI2xsdGc1pmq7/sem7iin/JDoFtlvoGSK+pfZHD3IV3EpYtq1v/8/5gi+UFH9yZnDg==}
     peerDependencies:
       '@nestjs/common': ^9.0.0
@@ -4034,30 +4542,30 @@ packages:
       '@nestjs/platform-express':
         optional: true
     dependencies:
-      '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai
-      '@nestjs/core': 9.3.9_jrq2rdgfp2sx67wmylmrqliwxe
+      '@nestjs/common': 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0)
+      '@nestjs/core': 9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0)
       tslib: 2.5.0
     dev: false
 
-  /@nodelib/fs.scandir/2.1.5:
+  /@nodelib/fs.scandir@2.1.5:
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
     dependencies:
       '@nodelib/fs.stat': 2.0.5
       run-parallel: 1.2.0
 
-  /@nodelib/fs.stat/2.0.5:
+  /@nodelib/fs.stat@2.0.5:
     resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
     engines: {node: '>= 8'}
 
-  /@nodelib/fs.walk/1.2.8:
+  /@nodelib/fs.walk@1.2.8:
     resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
     engines: {node: '>= 8'}
     dependencies:
       '@nodelib/fs.scandir': 2.1.5
       fastq: 1.15.0
 
-  /@npmcli/fs/2.1.2:
+  /@npmcli/fs@2.1.2:
     resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -4065,7 +4573,7 @@ packages:
       semver: 7.3.8
     dev: false
 
-  /@npmcli/move-file/2.0.1:
+  /@npmcli/move-file@2.0.1:
     resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -4073,7 +4581,7 @@ packages:
       rimraf: 3.0.2
     dev: false
 
-  /@nsfw-filter/gif-frames/1.0.2:
+  /@nsfw-filter/gif-frames@1.0.2:
     resolution: {integrity: sha512-XZrbJWEN8YfVla5i+PD4Wj51rRlJ8OgnXiPjjOt/OsrbsCR9GZRD4jr953oNWcwiRaoIcOCFWQNMQukO7Yb1dA==}
     dependencies:
       '@nsfw-filter/save-pixels': 2.3.4
@@ -4081,7 +4589,7 @@ packages:
       multi-integer-range: 3.0.0
     dev: false
 
-  /@nsfw-filter/save-pixels/2.3.4:
+  /@nsfw-filter/save-pixels@2.3.4:
     resolution: {integrity: sha512-dRZXwrXadMvxwJYKChrDBqC6GNvxVqlmdkyvZJO5DV65qyBsHZw8bPg9CnX7EgpxGl6+4ba/MAdHDLxs2XoD0Q==}
     dependencies:
       gif-encoder: 0.4.1
@@ -4091,7 +4599,7 @@ packages:
       through: 2.3.4
     dev: false
 
-  /@nuxtjs/opencollective/0.3.2:
+  /@nuxtjs/opencollective@0.3.2:
     resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==}
     engines: {node: '>=8.0.0', npm: '>=5.0.0'}
     dependencies:
@@ -4102,11 +4610,11 @@ packages:
       - encoding
     dev: false
 
-  /@open-draft/until/1.0.3:
+  /@open-draft/until@1.0.3:
     resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==}
     dev: true
 
-  /@peertube/http-signature/1.7.0:
+  /@peertube/http-signature@1.7.0:
     resolution: {integrity: sha512-aGQIwo6/sWtyyqhVK4e1MtxYz4N1X8CNt6SOtCc+Wnczs5S5ONaLHDDR8LYaGn0MgOwvGgXyuZ5sJIfd7iyoUw==}
     engines: {node: '>=0.10'}
     dependencies:
@@ -4115,7 +4623,7 @@ packages:
       sshpk: 1.17.0
     dev: false
 
-  /@redis/bloom/1.1.0_@redis+client@1.4.2:
+  /@redis/bloom@1.1.0(@redis/client@1.4.2):
     resolution: {integrity: sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==}
     peerDependencies:
       '@redis/client': ^1.0.0
@@ -4123,7 +4631,7 @@ packages:
       '@redis/client': 1.4.2
     dev: true
 
-  /@redis/client/1.4.2:
+  /@redis/client@1.4.2:
     resolution: {integrity: sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==}
     engines: {node: '>=14'}
     dependencies:
@@ -4132,7 +4640,7 @@ packages:
       yallist: 4.0.0
     dev: true
 
-  /@redis/graph/1.1.0_@redis+client@1.4.2:
+  /@redis/graph@1.1.0(@redis/client@1.4.2):
     resolution: {integrity: sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==}
     peerDependencies:
       '@redis/client': ^1.0.0
@@ -4140,7 +4648,7 @@ packages:
       '@redis/client': 1.4.2
     dev: true
 
-  /@redis/json/1.0.4_@redis+client@1.4.2:
+  /@redis/json@1.0.4(@redis/client@1.4.2):
     resolution: {integrity: sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==}
     peerDependencies:
       '@redis/client': ^1.0.0
@@ -4148,7 +4656,7 @@ packages:
       '@redis/client': 1.4.2
     dev: true
 
-  /@redis/search/1.1.0_@redis+client@1.4.2:
+  /@redis/search@1.1.0(@redis/client@1.4.2):
     resolution: {integrity: sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==}
     peerDependencies:
       '@redis/client': ^1.0.0
@@ -4156,7 +4664,7 @@ packages:
       '@redis/client': 1.4.2
     dev: true
 
-  /@redis/time-series/1.0.4_@redis+client@1.4.2:
+  /@redis/time-series@1.0.4(@redis/client@1.4.2):
     resolution: {integrity: sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==}
     peerDependencies:
       '@redis/client': ^1.0.0
@@ -4164,7 +4672,7 @@ packages:
       '@redis/client': 1.4.2
     dev: true
 
-  /@rollup/plugin-alias/4.0.3_rollup@3.19.0:
+  /@rollup/plugin-alias@4.0.3(rollup@3.19.0):
     resolution: {integrity: sha512-ZuDWE1q4PQDhvm/zc5Prun8sBpLJy41DMptYrS6MhAy9s9kL/doN1613BWfEchGVfKxzliJ3BjbOPizXX38DbQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -4177,7 +4685,7 @@ packages:
       slash: 4.0.0
     dev: false
 
-  /@rollup/plugin-json/6.0.0_rollup@3.19.0:
+  /@rollup/plugin-json@6.0.0(rollup@3.19.0):
     resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -4186,11 +4694,11 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.0.2_rollup@3.19.0
+      '@rollup/pluginutils': 5.0.2(rollup@3.19.0)
       rollup: 3.19.0
     dev: false
 
-  /@rollup/pluginutils/4.2.1:
+  /@rollup/pluginutils@4.2.1:
     resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
     engines: {node: '>= 8.0.0'}
     dependencies:
@@ -4198,7 +4706,7 @@ packages:
       picomatch: 2.3.1
     dev: true
 
-  /@rollup/pluginutils/5.0.2_rollup@3.19.0:
+  /@rollup/pluginutils@5.0.2(rollup@3.19.0):
     resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -4213,56 +4721,56 @@ packages:
       rollup: 3.19.0
     dev: false
 
-  /@sideway/address/4.1.4:
+  /@sideway/address@4.1.4:
     resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==}
     dependencies:
       '@hapi/hoek': 9.3.0
     dev: true
 
-  /@sideway/formula/3.0.1:
+  /@sideway/formula@3.0.1:
     resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
     dev: true
 
-  /@sideway/pinpoint/2.0.0:
+  /@sideway/pinpoint@2.0.0:
     resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
     dev: true
 
-  /@sinclair/typebox/0.25.21:
+  /@sinclair/typebox@0.25.21:
     resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==}
     dev: true
 
-  /@sindresorhus/is/4.6.0:
+  /@sindresorhus/is@4.6.0:
     resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
     engines: {node: '>=10'}
     dev: false
 
-  /@sindresorhus/is/5.3.0:
+  /@sindresorhus/is@5.3.0:
     resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
     engines: {node: '>=14.16'}
 
-  /@sinonjs/commons/1.8.6:
+  /@sinonjs/commons@1.8.6:
     resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==}
     dependencies:
       type-detect: 4.0.8
     dev: true
 
-  /@sinonjs/commons/2.0.0:
+  /@sinonjs/commons@2.0.0:
     resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==}
     dependencies:
       type-detect: 4.0.8
 
-  /@sinonjs/fake-timers/10.0.2:
+  /@sinonjs/fake-timers@10.0.2:
     resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==}
     dependencies:
       '@sinonjs/commons': 2.0.0
 
-  /@sinonjs/fake-timers/9.1.2:
+  /@sinonjs/fake-timers@9.1.2:
     resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==}
     dependencies:
       '@sinonjs/commons': 1.8.6
     dev: true
 
-  /@sinonjs/samsam/7.0.1:
+  /@sinonjs/samsam@7.0.1:
     resolution: {integrity: sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==}
     dependencies:
       '@sinonjs/commons': 2.0.0
@@ -4270,16 +4778,16 @@ packages:
       type-detect: 4.0.8
     dev: true
 
-  /@sinonjs/text-encoding/0.7.2:
+  /@sinonjs/text-encoding@0.7.2:
     resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==}
     dev: true
 
-  /@sqltools/formatter/1.2.5:
+  /@sqltools/formatter@1.2.5:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
 
-  /@storybook/addon-actions/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-MNtr4OIiwA6f9WBEcY6OfHPxRVIWj4TSA0kffTKq77AHwKbCCi4NXE1mjkW9wARnqil3N6/lxHB5QEbFTeDTuw==}
+  /@storybook/addon-actions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-n7QVyN4qaMMjuu2HyT94VO8DklCgQLqw3tHVMZgSOUEtK5JhS5+OqPCWt1juwQjNyQiDqjrVwrkbJNbuMld4IA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4289,28 +4797,28 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       dequal: 2.0.3
       lodash: 4.17.21
       polished: 4.2.2
       prop-types: 15.8.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      react-inspector: 6.0.1_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-inspector: 6.0.1(react@18.2.0)
       telejson: 7.0.4
       ts-dedent: 2.2.0
       uuid-browser: 3.1.0
     dev: true
 
-  /@storybook/addon-backgrounds/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-wtXRvyZXZEcThCU7K7upvEufLxvVX/bE7XN4Z7RRKdKbM6aNMdYHPP3a+OMXq9l0CsscIb+qXZiuFr71MZ1oxQ==}
+  /@storybook/addon-backgrounds@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-7hW961WzTV29jbVM051IzN7pNYTRrk5njDMV6eMsKD7KyzGDiqBAX3QuXnv95s8MLWUKSee7UZa4DUgQYfjxRg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4320,22 +4828,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-controls/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-NgzrW1lSNAOVp77ySI+GM9waGcTLlAGigTq4qIdOc/pR2LFSOniLIjBk3x98WgOp6jMBCbycLBwG18yS3wRa3w==}
+  /@storybook/addon-controls@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-25lH3wRmCHtW4N9PN9v12XsCttpi8rU80ZL+qzlAvak/bmdT7xXidNi9MTZHDZxbqDeBcs8N49wbymqixvEfMQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4345,25 +4853,25 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       lodash: 4.17.21
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/addon-docs/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-UJIlW6hR8esItOtvgRPO6PqtUWm8bmJUvpOGWZ1MX0tVCOZZVZiLxwl1dN/w869LSwZTjwq8kIZKT6/uGIxqKQ==}
+  /@storybook/addon-docs@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-TT85AUqPRqH9Ry9Y80aVI+GoRCyLYC4xg0hWpNfhP3vdez4c2cpTHVGKY1aUIes0blj/iLd5eWv0IpAO9Jmg9g==}
     peerDependencies:
       '@storybook/mdx1-csf': '>=1.0.0-0'
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4373,25 +4881,25 @@ packages:
         optional: true
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3
+      '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3)
       '@jest/transform': 29.5.0
-      '@mdx-js/react': 2.3.0_react@18.2.0
-      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/csf-plugin': 7.0.0-rc.6
-      '@storybook/csf-tools': 7.0.0-rc.6
+      '@mdx-js/react': 2.3.0(react@18.2.0)
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/csf-plugin': 7.0.0-rc.10
+      '@storybook/csf-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
       '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/postinstall': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/react-dom-shim': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/postinstall': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       fs-extra: 11.1.0
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       remark-external-links: 8.0.0
       remark-slug: 6.1.0
       ts-dedent: 2.2.0
@@ -4399,43 +4907,43 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-essentials/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-gSxt7Jf6v6teDz3CAL7AONjL9B3FcM3Us5sbdLb5KeBwn5em5i7DgdjhsPwGnOnl4LvIpcmM2o8i95q9zYxk6Q==}
+  /@storybook/addon-essentials@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-a4Tnfu+v1yneou2oYrDikAmNHsv4z7jAjyS4npuJTEW2a1WW+WPw8340BfZBI/y89nFYM6zyZGqy26Gie/QqVA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/addon-actions': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-backgrounds': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-controls': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-docs': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-highlight': 7.0.0-rc.6
-      '@storybook/addon-measure': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-outline': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-toolbars': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/addon-viewport': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/addon-actions': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-backgrounds': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-controls': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-docs': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-highlight': 7.0.0-rc.10
+      '@storybook/addon-measure': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-outline': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-toolbars': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-viewport': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     transitivePeerDependencies:
       - '@storybook/mdx1-csf'
       - supports-color
     dev: true
 
-  /@storybook/addon-highlight/7.0.0-rc.6:
-    resolution: {integrity: sha512-cUy+ltq6m1E1Tc84renFDu2XJXSHoh6md65WSfzbHLf795qI0vIvOK+R27o5tGfHiaj+wCa3yhow4pKYjHrZqA==}
+  /@storybook/addon-highlight@7.0.0-rc.10:
+    resolution: {integrity: sha512-AvCElbBqs2nS6W5wh79zkeRINEAL3LH3RFcT3oLFwSR5sI3NiWAuADN37XK+HN2RGf6E6Z7/ue3EcqELZAgCLw==}
     dependencies:
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.10
     dev: true
 
-  /@storybook/addon-interactions/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-daR1TYECe+KQAswtwUc4XnddOjtosSNTS5liRGLQUrYv7f0uai/DKDL3MPItDY/MuxYa4VSJ4uEsoYc7ffz5Cw==}
+  /@storybook/addon-interactions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-6MdBhlZ+vmS7tPoHPZn8hB5BJOw38ii670TvTy005UGj92+VeQRqlf9gVT5X7vnynmq6h/sj8MgSkSuqxL+3XA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4445,27 +4953,27 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/instrumenter': 7.0.0-rc.6
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/instrumenter': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       jest-mock: 27.5.1
       polished: 4.2.2
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/addon-links/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-R4viNYpeX6NUuW6rYMTAcepAEGzmNBnXqR9sD1liM/kxhLz+9mFDdBAeVOR2dL4Xz1MsLtMhoIWX4HnbUw1ylw==}
+  /@storybook/addon-links@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Xgrm7o4RAqdnLwh/wGKyk7tL12eqQDLiyR2uahQrNUYG+MFz9hJCHzbBs/pVcOW2gdHRmdYMD6ZrZsk4/NehLA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4475,22 +4983,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       prop-types: 15.8.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-measure/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-BzkLPHXm5+UeoBPDLVWUNHe2+dvlDwYq5PBGgSTSrYfxT3rrrYQ44aVYljFonzcvvu3xJXGDDkS/tfOZl/iP+Q==}
+  /@storybook/addon-measure@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-GRjJPmjOcG0vLfJ5HvCoXq6GTjgR/Yxe8IXiC84aoUcwFTzMBHOb8J7doAY30SOqfuqBM3MTmTi7PBCHhFY6Cw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4500,19 +5008,19 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-outline/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-lRuMw1HaPKRIYWoUOc8a5xU2AcJI/xljwB8ruwxWM0apsZXYdwbyc7w9Qfr5NuG1Xu6SYTuEiOwZqbmINGOEPg==}
+  /@storybook/addon-outline@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Om+MFhkROJRtxHlVJ+DpLg+ROzdtFyNtWXgkQVH9YAo44SBkrBJbAAUj+0XmeWxr2gO3HEdLhRS4whoWBKAVbg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4522,20 +5030,20 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-storysource/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-7QFVUW3qHTAdP0PWS+OqzFey8ObTqcws/6Vm5HSzRlQlI50SjnOhjglPzLbZaTpDiBeLhRU1tGTFZqUuMrYxPQ==}
+  /@storybook/addon-storysource@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-wJnPzQU5ZMxL9aK+gfi155pTXdXqSnWIMoVWx0HQXXhhXJNbT5l+y1T+VEC/8hcgqcj709MZAvGl48xmgL/qlQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4545,22 +5053,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/source-loader': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/source-loader': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       estraverse: 5.3.0
       prop-types: 15.8.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      react-syntax-highlighter: 15.5.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-syntax-highlighter: 15.5.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-toolbars/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-BqaHm1ZVy3DSZ9tGYHE2fwUXxsJmelB0yR+Fgze9hfff2j+fIwwVQ8GHMYfUuTwEZSL3I3qDnwtQCW+OBdpRkg==}
+  /@storybook/addon-toolbars@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-zpCFJKO5TOfEcVPRWj9oyftgsONJltFndLVtuWwVGaILcL0bGSahFtVhtwen3geCm+mi3AISgmsbCz5ABbsPyg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4570,17 +5078,17 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-viewport/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-P7/hCMypT/mzO0NVzUImI9NBFMshM8ClukovteeM5pI01hSRAlOjXirCCVYQJbena3BpL+unwMt57QfxHy/S8g==}
+  /@storybook/addon-viewport@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-aAEp2TEFSTjVmAfpWll3Kb0/tMFezWVEGI3WKlx2M5ladEC+jDygZrGovb4BpnknDQaHkrN0s9dsjUWTLmslww==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4590,54 +5098,54 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       memoizerific: 1.11.3
       prop-types: 15.8.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addons/6.5.16_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/addons@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/api': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/api': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@storybook/channels': 6.5.16
       '@storybook/client-logger': 6.5.16
       '@storybook/core-events': 6.5.16
       '@storybook/csf': 0.0.2--canary.4566f4d.1
-      '@storybook/router': 6.5.16_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@types/webpack-env': 1.18.0
       core-js: 3.29.1
       global: 4.4.0
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       regenerator-runtime: 0.13.11
     dev: true
 
-  /@storybook/addons/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/addons@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-KDSoMW/y39eAMbeSmwmYEiYu3KomabJCYdsfmD65i0DqwuOFrkG3im3wPkF3F88rZDuzWzVZMl3Z15n56uVXKA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/manager-api': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/manager-api': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
       '@storybook/preview-api': 7.0.0-rc.5
       '@storybook/types': 7.0.0-rc.5
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/api/6.5.16_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/api@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4647,16 +5155,16 @@ packages:
       '@storybook/client-logger': 6.5.16
       '@storybook/core-events': 6.5.16
       '@storybook/csf': 0.0.2--canary.4566f4d.1
-      '@storybook/router': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@storybook/semver': 7.3.2
-      '@storybook/theming': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       core-js: 3.29.1
       fast-deep-equal: 3.1.3
       global: 4.4.0
       lodash: 4.17.21
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       regenerator-runtime: 0.13.11
       store2: 2.14.2
       telejson: 6.0.8
@@ -4664,33 +5172,33 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/blocks/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-3+9Aki5+tBqcTqZx+aDlQfVKdMflTwchr1DlBZODkd/dMKp8+sM7nHfH4hH0GipgppY8u+MxS0AmxsbwaF0xgA==}
+  /@storybook/blocks@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-E+v4EjHaSaHbFK2hiFcBW3X2Yz8+xANmioT94jr2AxvywAELMh5eOLByFwVdNK7e9umv7Qo2/icNvAzpaJdmrw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/docs-tools': 7.0.0-rc.6
+      '@storybook/docs-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       '@types/lodash': 4.14.191
       color-convert: 2.0.1
       dequal: 2.0.3
       lodash: 4.17.21
-      markdown-to-jsx: 7.2.0_react@18.2.0
+      markdown-to-jsx: 7.2.0(react@18.2.0)
       memoizerific: 1.11.3
       polished: 4.2.2
       react: 18.2.0
-      react-colorful: 5.6.1_biqbaboplfbrettd7655fr4n2y
-      react-dom: 18.2.0_react@18.2.0
+      react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0)
+      react-dom: 18.2.0(react@18.2.0)
       telejson: 7.0.4
       ts-dedent: 2.2.0
       util-deprecate: 1.0.2
@@ -4698,32 +5206,31 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-manager/7.0.0-rc.6:
-    resolution: {integrity: sha512-EHozHI9bzcOejA4GFPNVsvqj2ZLW5hst8vZOElcK4GVmlJ/0z/1Cwffyz+Agc9sKwIDow9LrCWWXso8/zvuHsg==}
+  /@storybook/builder-manager@7.0.0-rc.10:
+    resolution: {integrity: sha512-uAlbCZcbtVNQOSqzeddGG6Xdrz6cNmXbrV9aN1Jbua7HPAvq/p4SenJuf9YQLt7i2KAkMsNLcfM5kf9HHyPzIw==}
     dependencies:
       '@fal-works/esbuild-plugin-global-externals': 2.1.2
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/manager': 7.0.0-rc.6
-      '@storybook/node-logger': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
       '@types/ejs': 3.1.2
       '@types/find-cache-dir': 3.2.1
-      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15_esbuild@0.16.17
+      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.14)
       browser-assert: 1.2.1
       ejs: 3.1.8
-      esbuild: 0.16.17
+      esbuild: 0.17.14
       esbuild-plugin-alias: 0.2.1
       express: 4.18.2
       find-cache-dir: 3.3.2
       fs-extra: 11.1.0
       process: 0.11.10
-      slash: 3.0.0
       util: 0.12.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/builder-vite/7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu:
-    resolution: {integrity: sha512-96+OB4ZWf3HkRUmkQr+vnSKOss4W+05RSyogShqMsqrsx7dqSTUzXvASLKN6/+ptl9Qem4TQwujthBKgmYK19A==}
+  /@storybook/builder-vite@7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4):
+    resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==}
     peerDependencies:
       '@preact/preset-vite': '*'
       '@storybook/mdx1-csf': '>=1.0.0-next.1'
@@ -4740,32 +5247,44 @@ packages:
       vite-plugin-glimmerx:
         optional: true
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.6
-      '@storybook/channel-websocket': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/csf-plugin': 7.0.0-rc.6
+      '@storybook/channel-postmessage': 7.0.0-rc.10
+      '@storybook/channel-websocket': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/csf-plugin': 7.0.0-rc.10
       '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/preview': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       browser-assert: 1.2.1
       es-module-lexer: 0.9.3
       express: 4.18.2
       fs-extra: 11.1.0
       glob: 8.1.0
-      glob-promise: 6.0.2_glob@8.1.0
+      glob-promise: 6.0.2(glob@8.1.0)
       magic-string: 0.27.0
+      remark-external-links: 9.0.1
+      remark-slug: 7.0.1
       rollup: 3.19.0
-      slash: 3.0.0
       typescript: 4.9.5
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/channel-postmessage/7.0.0-rc.5:
+  /@storybook/channel-postmessage@7.0.0-rc.10:
+    resolution: {integrity: sha512-U7jx10NwqXiQRMnsY+Dwl8Lkc7a1zAA6fHHDMxxa1AKE7ISDoRi4dIrWs5BmOgi2IdFo52bexIE9RTOgPTuUew==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      qs: 6.11.1
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channel-postmessage@7.0.0-rc.5:
     resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
     dependencies:
       '@storybook/channels': 7.0.0-rc.5
@@ -4776,38 +5295,16 @@ packages:
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-postmessage/7.0.0-rc.6:
-    resolution: {integrity: sha512-FXLben722pbLeoGiTMAWo3ngtamNjqmlCrsdc6f6nS2EFPAgHZ9U0acFmJ5HcJsh//VS38/4UQd9O7v8UXc9fg==}
+  /@storybook/channel-websocket@7.0.0-rc.10:
+    resolution: {integrity: sha512-18xZYdV3CqiGpxIF8os5Vm+T76p+5lx0t8fRTpiPuOfuPF72QYdqmUuXF/tLH4hzj/qwPp56y6Nb7My7pcGPug==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/global': 5.0.0
-      qs: 6.11.1
-      telejson: 7.0.4
-    dev: true
-
-  /@storybook/channel-postmessage/7.0.0-rc.8:
-    resolution: {integrity: sha512-SHx9X5HtNV7/XzcjxzEYFM/3Xxn2pIsNtzFMIpe9YhfMQLGKXgmm9Hv5o5s4GXZquJN6w646XE90eOol6cwTDg==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.8
-      '@storybook/client-logger': 7.0.0-rc.8
-      '@storybook/core-events': 7.0.0-rc.8
-      '@storybook/global': 5.0.0
-      qs: 6.11.1
-      telejson: 7.0.4
-    dev: true
-
-  /@storybook/channel-websocket/7.0.0-rc.6:
-    resolution: {integrity: sha512-onACSEWj2BMLT4ZsOTiRuKliDgjhNGa/4rYAs1BV+AbCUeqD6t9WxYYa2Msc6VIwHPqQ6lrmazix0YYJsJCXLQ==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/global': 5.0.0
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channels/6.5.16:
+  /@storybook/channels@6.5.16:
     resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==}
     dependencies:
       core-js: 3.29.1
@@ -4815,32 +5312,28 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/channels/7.0.0-rc.5:
+  /@storybook/channels@7.0.0-rc.10:
+    resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==}
+    dev: true
+
+  /@storybook/channels@7.0.0-rc.5:
     resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
     dev: true
 
-  /@storybook/channels/7.0.0-rc.6:
-    resolution: {integrity: sha512-DkAr34GeLH6978du2zIz6ulyZMGkuzQfErV0v4Fqo2ZaXHV41MxgVubkEoX/pED4ksNUlTE85ZtxFPcF1PYIQw==}
-    dev: true
-
-  /@storybook/channels/7.0.0-rc.8:
-    resolution: {integrity: sha512-2tI/ECbQcXjncYGLVdrttNT8adIp6kV/bnQGJWmF5hBXZ7Izwyq1WRPTgPT++RihmOOTHvkRx4GCKfwluOrNpA==}
-    dev: true
-
-  /@storybook/cli/7.0.0-rc.6:
-    resolution: {integrity: sha512-c93IiDGiaEOQjneVQXW+eDaaatW6TzIn89CdFGOxn/Ol7kvScb1+utrpp1Qvv3guMbm/Se4EWNMiP4ID9+B4fg==}
+  /@storybook/cli@7.0.0-rc.10:
+    resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==}
     hasBin: true
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
       '@ndelangen/get-tarball': 3.0.7
-      '@storybook/codemod': 7.0.0-rc.6
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/core-server': 7.0.0-rc.6
-      '@storybook/csf-tools': 7.0.0-rc.6
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/telemetry': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/codemod': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-server': 7.0.0-rc.10
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/telemetry': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       '@types/semver': 7.3.13
       boxen: 5.1.2
       chalk: 4.1.2
@@ -4856,7 +5349,7 @@ packages:
       get-port: 5.1.1
       giget: 1.1.2
       globby: 11.1.0
-      jscodeshift: 0.14.0_@babel+preset-env@7.20.2
+      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
       leven: 3.1.0
       prettier: 2.8.4
       prompts: 2.4.2
@@ -4876,44 +5369,38 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/client-logger/6.5.16:
+  /@storybook/client-logger@6.5.16:
     resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==}
     dependencies:
       core-js: 3.29.1
       global: 4.4.0
     dev: true
 
-  /@storybook/client-logger/7.0.0-rc.5:
+  /@storybook/client-logger@7.0.0-rc.10:
+    resolution: {integrity: sha512-K+3SySLua2tcALuk0Mco/o37bX4CeugA9aQClqDyXmVB+Fh6rg8A+uwiraDPooeq+P8AtMxuFc/dKwRejGicLg==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/client-logger@7.0.0-rc.5:
     resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/client-logger/7.0.0-rc.6:
-    resolution: {integrity: sha512-bT0PbEsHII2zeQQ93YBaoYl8PGJZioowlUYnLl6XchSloYVwWfQIveSwsM70jgA4e99L6/Sbnp0V+2SrxKHw6A==}
-    dependencies:
-      '@storybook/global': 5.0.0
-    dev: true
-
-  /@storybook/client-logger/7.0.0-rc.8:
-    resolution: {integrity: sha512-6pBwnK0vB0mgkO8opiHbZxBVGyaKFSpJXglfx8F15gIwA3r1njgtOZvvYx+03DCz0ExaTiSXrrbWp39mI8mo5w==}
-    dependencies:
-      '@storybook/global': 5.0.0
-    dev: true
-
-  /@storybook/codemod/7.0.0-rc.6:
-    resolution: {integrity: sha512-iXQES8xBhFNkC/dk6Lu7OMwssTPVcNQ77MUtcgXyH9MFcJSt3hhWeT5xp5fQmGTK1HhZDXYWdC/XhopXm8FfdA==}
+  /@storybook/codemod@7.0.0-rc.10:
+    resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==}
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
       '@babel/types': 7.21.3
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/csf-tools': 7.0.0-rc.6
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       cross-spawn: 7.0.3
       globby: 11.1.0
-      jscodeshift: 0.14.0_@babel+preset-env@7.20.2
+      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
       lodash: 4.17.21
       prettier: 2.8.4
       recast: 0.23.1
@@ -4921,93 +5408,88 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/components/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-zY09QHIzVqz4j3DF3b57YcbTFI2euojIQ5LPFY/aKdGtuftXLTK3x7I4CtCmJ4TeFcC9el7STZpEwhMpjqQ/mw==}
+  /@storybook/components@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-iCJnu+cXAZ+4nz+3iObhH0LLB8PjakgvSeeG4puRQ8pYu2tTtJvEoQKjZQ1h7om6sv2sjHcnyz38Slb1CdmYQw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y
+      react-dom: 18.2.0(react@18.2.0)
+      use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/core-client/7.0.0-rc.6:
-    resolution: {integrity: sha512-CkCDBu2s/nGVpoIE4gH9Dy+H5/JJUs1cPp4RPnOlSsoFIg+Gh+t1JZtEe7NFFmMsGfVqCgOKzBtJvPzaHSUSXQ==}
+  /@storybook/core-client@7.0.0-rc.10:
+    resolution: {integrity: sha512-Z1zhznMt0NA9PNvBB/JplGAubZp3OszVseIYKj52WmPJHhD/VSlrCMGh9AVkSUsVunF4ciK92GvyMBPuYE/5LA==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
     dev: true
 
-  /@storybook/core-common/7.0.0-rc.6:
-    resolution: {integrity: sha512-pKjFr7RqGSFX0lrXKe8Z0Cur9fQpqiP6W5mL9hQNhNlzkwc/UXumGJKDlwYZCNoygirQ/9TaTGp+bSOzJ5INUw==}
+  /@storybook/core-common@7.0.0-rc.10:
+    resolution: {integrity: sha512-csHdcVH7+YMj13WQ68OU6+6H9eYF9Sjhj84RDvlOuwJ0reXftf0RLFJwNrazwLPi7Wypxd0K/MhiM/mZOoY2+A==}
     dependencies:
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       '@types/node': 16.18.16
       '@types/pretty-hrtime': 1.0.1
       chalk: 4.1.2
-      esbuild: 0.16.17
-      esbuild-register: 3.4.2_esbuild@0.16.17
+      esbuild: 0.17.14
+      esbuild-register: 3.4.2(esbuild@0.17.14)
       file-system-cache: 2.0.2
       find-up: 5.0.0
       fs-extra: 11.1.0
       glob: 8.1.0
-      glob-promise: 6.0.2_glob@8.1.0
+      glob-promise: 6.0.2(glob@8.1.0)
       handlebars: 4.7.7
       lazy-universal-dotenv: 4.0.0
       picomatch: 2.3.1
       pkg-dir: 5.0.0
       pretty-hrtime: 1.0.3
       resolve-from: 5.0.0
-      slash: 3.0.0
       ts-dedent: 2.2.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/core-events/6.5.16:
+  /@storybook/core-events@6.5.16:
     resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==}
     dependencies:
       core-js: 3.29.1
     dev: true
 
-  /@storybook/core-events/7.0.0-rc.5:
+  /@storybook/core-events@7.0.0-rc.10:
+    resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==}
+    dev: true
+
+  /@storybook/core-events@7.0.0-rc.5:
     resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
     dev: true
 
-  /@storybook/core-events/7.0.0-rc.6:
-    resolution: {integrity: sha512-BOe6r//QEn/R9BXMiJsFM69jVUzgXGlPTfjECSIxdCEpUnCezwFA3LWPC8f4tDpL2uONqATkO9LQeQsGGapmCw==}
-    dev: true
-
-  /@storybook/core-events/7.0.0-rc.8:
-    resolution: {integrity: sha512-KsKf+Ob6zQ8+IJ9oDD5xqASwYGzcjT08azBjSt4yocHIJ3mY741h88YDS0wcwnM+JrV6iFYlY0hiK35lnBEddA==}
-    dev: true
-
-  /@storybook/core-server/7.0.0-rc.6:
-    resolution: {integrity: sha512-j00ehdSMWH3sQLv/YNHcGnWlHJd273WvCZsJrmY5rEoGOgpfMLTH1569yPAbghvHrFwOWyevPYjwiIOqaQCo3g==}
+  /@storybook/core-server@7.0.0-rc.10:
+    resolution: {integrity: sha512-S+E8WRU4vik+lNbXukVSsZPrRgsujFpy9RvgLckH/QI4T2SYe94mAuKGVkW/720jBD4DNss+IUGQQvkafLPl5A==}
     dependencies:
       '@aw-web-design/x-default-browser': 1.4.88
       '@discoveryjs/json-ext': 0.5.7
-      '@storybook/builder-manager': 7.0.0-rc.6
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/builder-manager': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/csf-tools': 7.0.0-rc.6
+      '@storybook/csf-tools': 7.0.0-rc.10
       '@storybook/docs-mdx': 0.0.1-next.6
       '@storybook/global': 5.0.0
-      '@storybook/manager': 7.0.0-rc.6
-      '@storybook/node-logger': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/telemetry': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/manager': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/telemetry': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       '@types/detect-port': 1.3.2
       '@types/node': 16.18.16
       '@types/node-fetch': 2.6.2
@@ -5031,7 +5513,6 @@ packages:
       read-pkg-up: 7.0.1
       semver: 7.3.8
       serve-favicon: 2.5.0
-      slash: 3.0.0
       telejson: 7.0.4
       ts-dedent: 2.2.0
       util-deprecate: 1.0.2
@@ -5044,24 +5525,24 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/csf-plugin/7.0.0-rc.6:
-    resolution: {integrity: sha512-AEQn16YgcgExMrS8GNdS3wVTQCc8L+RLc0IaT/EMAf8okM1brjfgEqkIYngci9ZUWQdbphF4qA6j4U7DTvVw1A==}
+  /@storybook/csf-plugin@7.0.0-rc.10:
+    resolution: {integrity: sha512-+o8eQ1FFV7JXWh17pi5oFhuuSSpzsIP+5+/qY2ugE5JJBuVL8fM3jW0bFClZy9qpOeXYDgtfqMNlk9qSjvCQDw==}
     dependencies:
-      '@storybook/csf-tools': 7.0.0-rc.6
+      '@storybook/csf-tools': 7.0.0-rc.10
       unplugin: 0.10.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/csf-tools/7.0.0-rc.6:
-    resolution: {integrity: sha512-jnt8svjJxDUg0ZPwck+EMg5DQwlc48KJfy2ZwjC2pUoCRNIUddifunHcFEMDrg8zhbHPcRAZq8mah3y1+fIHbw==}
+  /@storybook/csf-tools@7.0.0-rc.10:
+    resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==}
     dependencies:
       '@babel/generator': 7.21.3
       '@babel/parser': 7.21.3
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.10
       fs-extra: 11.1.0
       recast: 0.23.1
       ts-dedent: 2.2.0
@@ -5069,29 +5550,29 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/csf/0.0.2--canary.4566f4d.1:
+  /@storybook/csf@0.0.2--canary.4566f4d.1:
     resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==}
     dependencies:
       lodash: 4.17.21
     dev: true
 
-  /@storybook/csf/0.0.2-next.10:
+  /@storybook/csf@0.0.2-next.10:
     resolution: {integrity: sha512-m2PFgBP/xRIF85VrDhvesn9ktaD2pN3VUjvMqkAL/cINp/3qXsCyI81uw7N5VEOkQAbWrY2FcydnvEPDEdE8fA==}
     dependencies:
       type-fest: 2.19.0
     dev: true
 
-  /@storybook/docs-mdx/0.0.1-next.6:
+  /@storybook/docs-mdx@0.0.1-next.6:
     resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
     dev: true
 
-  /@storybook/docs-tools/7.0.0-rc.6:
-    resolution: {integrity: sha512-zdZCKNWCM8L3LA2SsEH/03Pyk4BJCos7ypsu2lJJKbfn7EjMmsqcMzoc7CS3DR5YJ0zmTxGCKDmJgSJTmViuQQ==}
+  /@storybook/docs-tools@7.0.0-rc.10:
+    resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==}
     dependencies:
       '@babel/core': 7.21.3
-      '@storybook/core-common': 7.0.0-rc.6
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       '@types/doctrine': 0.0.3
       doctrine: 3.0.0
       lodash: 4.17.21
@@ -5099,20 +5580,20 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/expect/27.5.2-0:
+  /@storybook/expect@27.5.2-0:
     resolution: {integrity: sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==}
     dependencies:
       '@types/jest': 29.4.0
     dev: true
 
-  /@storybook/global/5.0.0:
+  /@storybook/global@5.0.0:
     resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
 
-  /@storybook/instrumenter/6.5.16_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/instrumenter@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-q8/GaBk8PA/cL7m5OW+ec5t63+Zja9YvYSPGXrYtW17koSv7OnNPmk6RvI7tIHHO0mODBYnaHjF4zQfEGoyR5Q==}
     dependencies:
-      '@storybook/addons': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/addons': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@storybook/client-logger': 6.5.16
       '@storybook/core-events': 6.5.16
       core-js: 3.29.1
@@ -5122,31 +5603,21 @@ packages:
       - react-dom
     dev: true
 
-  /@storybook/instrumenter/7.0.0-rc.6:
-    resolution: {integrity: sha512-hveboySEYxBtLYSgxHm2PI0Sa1DD/M6zkuCYqP4MXIoftRd437U1KzAtPrklnCoKrzUWPAXMJ8GUjwbM40RyGg==}
+  /@storybook/instrumenter@7.0.0-rc.10:
+    resolution: {integrity: sha512-XaU6pxbcUnGgM7OywPs8E/k3H6Up/mf2kPfrHp9qhztx7ypKsKZi2lfxpOlmORy/s6JZl8kZATDyfgAGmVnbvg==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.10
     dev: true
 
-  /@storybook/instrumenter/7.0.0-rc.8:
-    resolution: {integrity: sha512-esRTjLLJJAKsTun/8u/wvsS+OPlwB2eal+ZAo0cBo+YTpkw0A6R+HunhNU1elZ8ztbJsZxP2drPprrFGXgeaLQ==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.8
-      '@storybook/client-logger': 7.0.0-rc.8
-      '@storybook/core-events': 7.0.0-rc.8
-      '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.8
-    dev: true
-
-  /@storybook/jest/0.0.10_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/jest@0.0.10(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==}
     dependencies:
       '@storybook/expect': 27.5.2-0
-      '@storybook/instrumenter': 6.5.16_biqbaboplfbrettd7655fr4n2y
+      '@storybook/instrumenter': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@testing-library/jest-dom': 5.16.5
       jest-mock: 27.5.1
     transitivePeerDependencies:
@@ -5154,7 +5625,32 @@ packages:
       - react-dom
     dev: true
 
-  /@storybook/manager-api/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-sWMifsQKFEEnjgrmi4cuRTXaX1KfmbIDqCaBg+9A8PeqKbk/sBaapk/istUj2vXz0tTxh7P5cosoXr8K2q5IhA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/manager-api@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-MsNj/cPIOlL7HJ8ReYahUvJVfvZDtNfacUYSFuQjQwdnp0u3pbC5mGZPd32tAGj7lLaLzcqqo1yR+NAgwpZUBw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5165,55 +5661,30 @@ packages:
       '@storybook/core-events': 7.0.0-rc.5
       '@storybook/csf': 0.0.2-next.10
       '@storybook/global': 5.0.0
-      '@storybook/router': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y
+      '@storybook/router': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
       '@storybook/types': 7.0.0-rc.5
       dequal: 2.0.3
       lodash: 4.17.21
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       semver: 7.3.8
       store2: 2.14.2
       telejson: 7.0.4
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/manager-api/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-UB3Wk/7mW966Nvvs3vv0y9irTYc77fIOeLkU8CIIMJ4eYTHkokycWr8GxL4goEm294tPVO56YLdUq5Xkwf8ouA==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/router': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      semver: 7.3.8
-      store2: 2.14.2
-      telejson: 7.0.4
-      ts-dedent: 2.2.0
+  /@storybook/manager@7.0.0-rc.10:
+    resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==}
     dev: true
 
-  /@storybook/manager/7.0.0-rc.6:
-    resolution: {integrity: sha512-GBi9wzPF4OmwSvJLlelEgdEobZYG73eSx6dl/isHNNJ+P1WwLDR7/5h5b6fsJh1hkzWuR7nywzHi/gYgQwV+Dg==}
-    dev: true
-
-  /@storybook/mdx2-csf/1.0.0-next.6:
+  /@storybook/mdx2-csf@1.0.0-next.6:
     resolution: {integrity: sha512-m6plojocU/rmrqWd26yvm8D+oHZPZ6PtSSFmZIgpNDEPVmc8s4fBD6LXOAB5MiPI5f8KLUr2HVhOMZ97o5pDTw==}
     dev: true
 
-  /@storybook/node-logger/7.0.0-rc.6:
-    resolution: {integrity: sha512-D551vFd899i5kdk0yvvhb2mbt9PHFvdcbGWGqC3jKjbHRyJzmv/wedYdlPrUPmLsMJHLXiILwfNsDIhHYbZREQ==}
+  /@storybook/node-logger@7.0.0-rc.10:
+    resolution: {integrity: sha512-C+NEudQz8t0VS5U5bOUbIXtz/FL8y2Za/qcG7hI7fa9NglQvtdBYpNzwg8M4YSOUvOoa3eEqoD26tnjAkEfEQQ==}
     dependencies:
       '@types/npmlog': 4.1.4
       chalk: 4.1.2
@@ -5221,11 +5692,31 @@ packages:
       pretty-hrtime: 1.0.3
     dev: true
 
-  /@storybook/postinstall/7.0.0-rc.6:
-    resolution: {integrity: sha512-z7GfdzJo3gGNUldqkHFEPJ60CPaLrP+9EjfWv7+5zXtsp5g7DOuO8Lm/aQHsgcSNKempAmis1IhRZvE+0HLQ/Q==}
+  /@storybook/postinstall@7.0.0-rc.10:
+    resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==}
     dev: true
 
-  /@storybook/preview-api/7.0.0-rc.5:
+  /@storybook/preview-api@7.0.0-rc.10:
+    resolution: {integrity: sha512-3oBm6Che7ctbOLS3TTbuySbLdxA1xqLDgn8AaOadCd4SmCfhxZNor35RO1TlN8S8pQPsGlT9UBWB4xKxhq0e2A==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.10
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.10
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0-rc.10
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/preview-api@7.0.0-rc.5:
     resolution: {integrity: sha512-cuyFIT/4MXfoqN6d5AK/KH7Yp0cifuOmcBj4+9xrmrPK47m4F8eHZ/mX6rXE6rVFNsWv65Al5An6WCM1CDImJg==}
     dependencies:
       '@storybook/channel-postmessage': 7.0.0-rc.5
@@ -5246,81 +5737,39 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview-api/7.0.0-rc.6:
-    resolution: {integrity: sha512-p+UcJW6KZfDbJoSJStijxNaMOsDG4KMlv5tZmEzca54NGt6+AWzpdGPTTM8+wP0r/OoDOeTRs0BxinYjbf7ZHQ==}
-    dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.6
-      '@storybook/channels': 7.0.0-rc.6
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.6
-      '@types/qs': 6.9.7
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      slash: 3.0.0
-      synchronous-promise: 2.0.17
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
+  /@storybook/preview@7.0.0-rc.10:
+    resolution: {integrity: sha512-885uU20XL54s31lAyIu5MaiD4t23gJ0X/JEMz2/LTvfluYDtQg66gXhMibKqEPgMHcPOND5ZrGoYPdaLDG20Dw==}
     dev: true
 
-  /@storybook/preview-api/7.0.0-rc.8:
-    resolution: {integrity: sha512-K45I81s2ZOoeAmKC8DP0HPhR67tr94pkgKddaoWLQJHBgVq9GKuy7QCcnn2zYKOFd1d/uqcnrQyg4AkmcjkVCg==}
-    dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.8
-      '@storybook/channels': 7.0.0-rc.8
-      '@storybook/client-logger': 7.0.0-rc.8
-      '@storybook/core-events': 7.0.0-rc.8
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.8
-      '@types/qs': 6.9.7
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      slash: 3.0.0
-      synchronous-promise: 2.0.17
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
-    dev: true
-
-  /@storybook/preview/7.0.0-rc.6:
-    resolution: {integrity: sha512-BiI2h6vFQ3VtT5BbYlW4Lw+9QDdM8R5KtiqPLUDzS7h7fsrZxZmCCybeNP/mz2LNUkk5B4XENY+dx/lM3QSLaQ==}
-    dev: true
-
-  /@storybook/react-dom-shim/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-Pp7mrLlGhGSeI00RGiS0JpbEbcJunNUDsIY+5mythOlYD1B+7daY8EnHuHK+3uYthSgngjOr8QCqubPXWvM7zQ==}
+  /@storybook/react-dom-shim@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-oRmjN4HLo/gumufM6xrCYMncggbsNQ2UC+0Wju2zs86v6mLmoG8CCVnTE2nyUBiy5IDZ464nBhdGYkkuUEYzrg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/react-vite/7.0.0-rc.6_ndsstb2ob2rgr4m75wxvpqsrpi:
-    resolution: {integrity: sha512-palDThwDlR2kDslnM5nrC3ODy1kiMoFEszbWxS2BJ9582+3gILbWMgGjjTlI8/i7oMtADKpkOp67dxSIMUDfqw==}
+  /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4):
+    resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==}
     engines: {node: '>=16'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
       vite: ^3.0.0 || ^4.0.0
     dependencies:
-      '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1_vwvfc4ezh6jlf6pa67auy3eulu
+      '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.1.4)
       '@rollup/pluginutils': 4.2.1
-      '@storybook/builder-vite': 7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu
-      '@storybook/react': 7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq
-      '@vitejs/plugin-react': 3.1.0_vite@4.1.4
+      '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4)
+      '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
+      '@vitejs/plugin-react': 3.1.0(vite@4.1.4)
       ast-types: 0.14.2
       magic-string: 0.27.0
       react: 18.2.0
       react-docgen: 6.0.0-alpha.3
-      react-dom: 18.2.0_react@18.2.0
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      react-dom: 18.2.0(react@18.2.0)
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     transitivePeerDependencies:
       - '@preact/preset-vite'
       - '@storybook/mdx1-csf'
@@ -5329,8 +5778,8 @@ packages:
       - vite-plugin-glimmerx
     dev: true
 
-  /@storybook/react/7.0.0-rc.6_ygqkwb4gg3aean7xjfdauovyqq:
-    resolution: {integrity: sha512-RmHXOxNW6gGqkotTIudWxPB909btJ2pr0daWxFgVKzJFko2ZA+z4Bzdn35COVj3/6vNk1/bq1TzDStFbjDLjmw==}
+  /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5):
+    resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5340,26 +5789,26 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-client': 7.0.0-rc.6
-      '@storybook/docs-tools': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-client': 7.0.0-rc.10
+      '@storybook/docs-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/react-dom-shim': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       '@types/escodegen': 0.0.6
       '@types/estree': 0.0.51
       '@types/node': 16.18.16
       acorn: 7.4.1
-      acorn-jsx: 5.3.2_acorn@7.4.1
+      acorn-jsx: 5.3.2(acorn@7.4.1)
       acorn-walk: 7.2.0
       escodegen: 2.0.0
       html-tags: 3.2.0
       lodash: 4.17.21
       prop-types: 15.8.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      react-element-to-jsx-string: 15.0.0_biqbaboplfbrettd7655fr4n2y
+      react-dom: 18.2.0(react@18.2.0)
+      react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0)
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       typescript: 4.9.5
@@ -5368,7 +5817,7 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/router/6.5.16_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/router@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5379,11 +5828,24 @@ packages:
       memoizerific: 1.11.3
       qs: 6.11.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       regenerator-runtime: 0.13.11
     dev: true
 
-  /@storybook/router/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/router@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-wg8tMCPFXKf90U4Y8Gpkc347wgWlNiX+FJN2UmiTIpyFkOc+GI+9mWBqcSZDfhgQpBjmxCGgJaD/Uz03Y+vIVg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/router@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-s23O2OOQ4+CvySk3QC/PXhDJChc4jjyQu/h3gLMKF7bfWx0bd5KR4LnP3rCKLIMkxoJYFPUayPMgwEEeN/ENSw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5393,23 +5855,10 @@ packages:
       memoizerific: 1.11.3
       qs: 6.11.1
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/router/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-qK53NWIQo9Q2pg5kFlT3YhSKiqO99HGiwN4wIX5W/T8p0+fJYrNgtcydcNWInQEO9p+ryA2B59hADpqqh86c8A==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-    dev: true
-
-  /@storybook/semver/7.3.2:
+  /@storybook/semver@7.3.2:
     resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
     engines: {node: '>=10'}
     hasBin: true
@@ -5418,26 +5867,26 @@ packages:
       find-up: 4.1.0
     dev: true
 
-  /@storybook/source-loader/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-oEHEL26kOXRnTnBdZrMwUZAM2F8X9aFoqVmNIbLESx5QAlHGY04YLzKhi/tp31ZxoalxR7GveQ0GDzSDc62sCw==}
+  /@storybook/source-loader@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-8DJtoNoFfBuw2ZnWWvyvX3r7NnKSvdSAIk1XJGcZybLsQnOSVyXAQhZNfG5Ah5E6V2/7IksDDST9h5HNUAdU7A==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
       '@storybook/csf': 0.0.2-next.10
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/types': 7.0.0-rc.10
       estraverse: 5.3.0
       lodash: 4.17.21
       prettier: 2.8.4
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/telemetry/7.0.0-rc.6:
-    resolution: {integrity: sha512-OK8aLVuLPokZMGiSqJKSCvroNKyAXh0w9s0XWGbXuMZHDsMn5XCS/Mc8NrWTV4v37xM6mHe4BQSMnX1EWFOYpA==}
+  /@storybook/telemetry@7.0.0-rc.10:
+    resolution: {integrity: sha512-ZikQZtTzBIVJfEvLUNQ0jMEjhE4naTnjRAHfpEdLWwmd41s5L4kH4YNhyJthdc8K72RdEMA1uQey6aLjjDFa+A==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/core-common': 7.0.0-rc.6
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
       chalk: 4.1.2
       detect-package-manager: 2.0.1
       fetch-retry: 5.0.4
@@ -5450,17 +5899,17 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/testing-library/0.0.14-next.1:
+  /@storybook/testing-library@0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.8
-      '@storybook/instrumenter': 7.0.0-rc.8
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/instrumenter': 7.0.0-rc.10
       '@testing-library/dom': 8.20.0
-      '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm
+      '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/theming/6.5.16_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/theming@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5470,39 +5919,48 @@ packages:
       core-js: 3.29.1
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       regenerator-runtime: 0.13.11
     dev: true
 
-  /@storybook/theming/7.0.0-rc.5_biqbaboplfbrettd7655fr4n2y:
+  /@storybook/theming@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-hzUaqmDcFJKgFfY+tec9Q06d9TTgDHBByCNIE2WxUu7U+NWZQe9kFVoEwLTSlrYU2aG6/LYhTC4oJBtQ9FSCyQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/theming@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-OzwybDA2+4FWg85tcTNQkVI0JnHkwCRG9HM1qx9hOZJHNRfxmJFjJePOnBoXM6CjVlz0S1PJUwCmMHNH8OTvEw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
       '@storybook/client-logger': 7.0.0-rc.5
       '@storybook/global': 5.0.0
       memoizerific: 1.11.3
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/theming/7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-/pBo3xJ/PxC01WgBd7WutNTprKWXaCS+Ei+NuTLOJQGTwCaTtyd2dI5i0t9UZFB8FBRo8pcrmwjos9ZuQrekKg==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+  /@storybook/types@7.0.0-rc.10:
+    resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==}
     dependencies:
-      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0
-      '@storybook/client-logger': 7.0.0-rc.6
-      '@storybook/global': 5.0.0
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      '@storybook/channels': 7.0.0-rc.10
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/types/7.0.0-rc.5:
+  /@storybook/types@7.0.0-rc.5:
     resolution: {integrity: sha512-gLKUY7EfPYenz0Y1jw90AUAUlKTHOj9p7J3d8GcI5x5buHdU+M7Q1jotPWzDwRFI24y3Ob31oyCBhysIw8S2Aw==}
     dependencies:
       '@storybook/channels': 7.0.0-rc.5
@@ -5511,41 +5969,23 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/types/7.0.0-rc.6:
-    resolution: {integrity: sha512-miG7HXDgMSMJ/IMQTYqmelqTtPTbMTml1zOP3PXgswvrCY8RFYytNp7DM6dpADRU7wsAOo1BwnEUSYkS3CKxUQ==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.6
-      '@types/babel__core': 7.20.0
-      '@types/express': 4.17.17
-      file-system-cache: 2.0.2
-    dev: true
-
-  /@storybook/types/7.0.0-rc.8:
-    resolution: {integrity: sha512-Jz3MLLKs+Jy8dZVd+HVHuKAbxa7xcF/MLfUNldu0HxtJr3b7ybUlvjWjT5h2I60V5TYkWGf9wcKmegI6TGiJXQ==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.8
-      '@types/babel__core': 7.20.0
-      '@types/express': 4.17.17
-      file-system-cache: 2.0.2
-    dev: true
-
-  /@storybook/vue3-vite/7.0.0-rc.6_y344amzr55z4s7r3flz6cvxaae:
-    resolution: {integrity: sha512-hmG7MhnXx1AuIEhpQ+73uRwBpG887zyQnTle3OxA1MnntUGSHgFrdev17zT5q3TUn6XXnw+cMJj3AXAE/kGCCw==}
+  /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4)(vue@3.2.47):
+    resolution: {integrity: sha512-gNUlREXPv9C61VqmLW9MmlAFAgki9o60+CKwMDLp3Ey/WxEwH+JGOmhc5ne6H4du9FZLnDbBa3zphkS0Ve7qWw==}
     engines: {node: ^14.18 || >=16}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
       vite: ^3.0.0 || ^4.0.0
     dependencies:
-      '@storybook/builder-vite': 7.0.0-rc.6_vwvfc4ezh6jlf6pa67auy3eulu
-      '@storybook/core-server': 7.0.0-rc.6
-      '@storybook/vue3': 7.0.0-rc.6_vue@3.2.47
-      '@vitejs/plugin-vue': 4.0.0_vite@4.1.4+vue@3.2.47
+      '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4)
+      '@storybook/core-server': 7.0.0-rc.10
+      '@storybook/vue3': 7.0.0-rc.10(vue@3.2.47)
+      '@vitejs/plugin-vue': 4.0.0(vite@4.1.4)(vue@3.2.47)
       magic-string: 0.27.0
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
-      vue-docgen-api: 4.64.1_vue@3.2.47
+      react-dom: 18.2.0(react@18.2.0)
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
+      vue-docgen-api: 4.64.1(vue@3.2.47)
     transitivePeerDependencies:
       - '@preact/preset-vite'
       - '@storybook/mdx1-csf'
@@ -5558,17 +5998,17 @@ packages:
       - vue
     dev: true
 
-  /@storybook/vue3/7.0.0-rc.6_vue@3.2.47:
-    resolution: {integrity: sha512-/PermfD1zNJbzFbgVS7oFKYvLxsF4XjH+sNPHC7pVROuxQ4VPNl5pjLgsQbZ4zRBbtnz5yf3loHijEeOiM+MFA==}
+  /@storybook/vue3@7.0.0-rc.10(vue@3.2.47):
+    resolution: {integrity: sha512-v34ZvjQy3B8it6FNzdCEbT8KDsDeySOCGWZcGGZZ+aQALmXwVM4Kpo76AaOR6APt0gMppegEuYqtMY9PfkcELQ==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       vue: ^3.0.0
     dependencies:
-      '@storybook/core-client': 7.0.0-rc.6
-      '@storybook/docs-tools': 7.0.0-rc.6
+      '@storybook/core-client': 7.0.0-rc.10
+      '@storybook/docs-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       vue: 3.2.47
@@ -5576,7 +6016,7 @@ packages:
       - supports-color
     dev: true
 
-  /@swc/cli/0.1.62_2u6773zfichz7q5gjuzddfwg7q:
+  /@swc/cli@0.1.62(@swc/core@1.3.38)(chokidar@3.5.3):
     resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
     engines: {node: '>= 12.13'}
     hasBin: true
@@ -5597,7 +6037,7 @@ packages:
       source-map: 0.7.4
     dev: false
 
-  /@swc/core-android-arm64/1.3.11:
+  /@swc/core-android-arm64@1.3.11:
     resolution: {integrity: sha512-M7FamR3kFpVTyTw73FzKcOZmS7/TWHX75eqtwBTaU9fW4shf0KTLr/h9DnMxNKAnwUMeub/lqlINUe5EKFIKwQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
@@ -5608,7 +6048,7 @@ packages:
     dev: false
     optional: true
 
-  /@swc/core-darwin-arm64/1.3.38:
+  /@swc/core-darwin-arm64@1.3.38:
     resolution: {integrity: sha512-4ZTJJ/cR0EsXW5UxFCifZoGfzQ07a8s4ayt1nLvLQ5QoB1GTAf9zsACpvWG8e7cmCR0L76R5xt8uJuyr+noIXA==}
     engines: {node: '>=10'}
     cpu: [arm64]
@@ -5616,7 +6056,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-darwin-x64/1.3.38:
+  /@swc/core-darwin-x64@1.3.38:
     resolution: {integrity: sha512-Kim727rNo4Dl8kk0CR8aJQe4zFFtsT1TZGlNrNMUgN1WC3CRX7dLZ6ZJi/VVcTG1cbHp5Fp3mUzwHsMxEh87Mg==}
     engines: {node: '>=10'}
     cpu: [x64]
@@ -5624,7 +6064,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-arm-gnueabihf/1.3.38:
+  /@swc/core-linux-arm-gnueabihf@1.3.38:
     resolution: {integrity: sha512-yaRdnPNU2enlJDRcIMvYVSyodY+Amhf5QuXdUbAj6rkDD6wUs/s9C6yPYrFDmoTltrG+nBv72mUZj+R46wVfSw==}
     engines: {node: '>=10'}
     cpu: [arm]
@@ -5632,7 +6072,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-arm64-gnu/1.3.38:
+  /@swc/core-linux-arm64-gnu@1.3.38:
     resolution: {integrity: sha512-iNY1HqKo/wBSu3QOGBUlZaLdBP/EHcwNjBAqIzpb8J64q2jEN02RizqVW0mDxyXktJ3lxr3g7VW9uqklMeXbjQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
@@ -5640,7 +6080,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-arm64-musl/1.3.38:
+  /@swc/core-linux-arm64-musl@1.3.38:
     resolution: {integrity: sha512-LJCFgLZoPRkPCPmux+Q5ctgXRp6AsWhvWuY61bh5bIPBDlaG9pZk94DeHyvtiwT0syhTtXb2LieBOx6NqN3zeA==}
     engines: {node: '>=10'}
     cpu: [arm64]
@@ -5648,7 +6088,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-x64-gnu/1.3.38:
+  /@swc/core-linux-x64-gnu@1.3.38:
     resolution: {integrity: sha512-hRQGRIWHmv2PvKQM/mMV45mVXckM2+xLB8TYLLgUG66mmtyGTUJPyxjnJkbI86WNGqo18k+lAuMG2mn6QmzYwQ==}
     engines: {node: '>=10'}
     cpu: [x64]
@@ -5656,7 +6096,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-x64-musl/1.3.38:
+  /@swc/core-linux-x64-musl@1.3.38:
     resolution: {integrity: sha512-PTYSqtsIfPHLKDDNbueI5e0sc130vyHRiFOeeC6qqzA2FAiVvIxuvXHLr0soPvKAR1WyhtYmFB9QarcctemL2w==}
     engines: {node: '>=10'}
     cpu: [x64]
@@ -5664,7 +6104,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-arm64-msvc/1.3.38:
+  /@swc/core-win32-arm64-msvc@1.3.38:
     resolution: {integrity: sha512-9lHfs5TPNs+QdkyZFhZledSmzBEbqml/J1rqPSb9Fy8zB6QlspixE6OLZ3nTlUOdoGWkcTTdrOn77Sd7YGf1AA==}
     engines: {node: '>=10'}
     cpu: [arm64]
@@ -5672,7 +6112,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-ia32-msvc/1.3.38:
+  /@swc/core-win32-ia32-msvc@1.3.38:
     resolution: {integrity: sha512-SbL6pfA2lqvDKnwTHwOfKWvfHAdcbAwJS4dBkFidr7BiPTgI5Uk8wAPcRb8mBECpmIa9yFo+N0cAFRvMnf+cNw==}
     engines: {node: '>=10'}
     cpu: [ia32]
@@ -5680,7 +6120,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-x64-msvc/1.3.38:
+  /@swc/core-win32-x64-msvc@1.3.38:
     resolution: {integrity: sha512-UFveLrL6eGvViOD8OVqUQa6QoQwdqwRvLtL5elF304OT8eCPZa8BhuXnWk25X8UcOyns8gFcb8Fhp3oaLi/Rlw==}
     engines: {node: '>=10'}
     cpu: [x64]
@@ -5688,7 +6128,7 @@ packages:
     requiresBuild: true
     optional: true
 
-  /@swc/core/1.3.38:
+  /@swc/core@1.3.38:
     resolution: {integrity: sha512-AiEVehRFws//AiiLx9DPDp1WDXt+yAoGD1kMYewhoF6QLdTz8AtYu6i8j/yAxk26L8xnegy0CDwcNnub9qenyQ==}
     engines: {node: '>=10'}
     requiresBuild: true
@@ -5704,7 +6144,7 @@ packages:
       '@swc/core-win32-ia32-msvc': 1.3.38
       '@swc/core-win32-x64-msvc': 1.3.38
 
-  /@swc/jest/0.2.24_@swc+core@1.3.38:
+  /@swc/jest@0.2.24(@swc/core@1.3.38):
     resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==}
     engines: {npm: '>= 7.0.0'}
     peerDependencies:
@@ -5715,13 +6155,13 @@ packages:
       jsonc-parser: 3.2.0
     dev: true
 
-  /@swc/wasm/1.2.130:
+  /@swc/wasm@1.2.130:
     resolution: {integrity: sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==}
     requiresBuild: true
     dev: false
     optional: true
 
-  /@syuilo/aiscript/0.13.1:
+  /@syuilo/aiscript@0.13.1:
     resolution: {integrity: sha512-WJduqlsm7pq8r1oYbPSAf5cqR6Pve6ipGoPUUSgti51dMytMnxE2dn7d7i8759RF3yftyoclZbL/DC7IjPsTng==}
     dependencies:
       autobind-decorator: 2.4.0
@@ -5730,30 +6170,30 @@ packages:
       uuid: 9.0.0
     dev: false
 
-  /@szmarczak/http-timer/4.0.6:
+  /@szmarczak/http-timer@4.0.6:
     resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
     engines: {node: '>=10'}
     dependencies:
       defer-to-connect: 2.0.1
     dev: false
 
-  /@szmarczak/http-timer/5.0.1:
+  /@szmarczak/http-timer@5.0.1:
     resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
     engines: {node: '>=14.16'}
     dependencies:
       defer-to-connect: 2.0.1
 
-  /@tabler/icons-webfont/2.10.0:
+  /@tabler/icons-webfont@2.10.0:
     resolution: {integrity: sha512-5WvGhztlM3la7NWf8Y6ktT+KD7zb/Hz/zdMeFjExXvEFupGvuANEnbGo1wXI4ADdSWUaRDtnQHcSGIjZ+gZ+OQ==}
     dependencies:
       '@tabler/icons': 2.10.0
     dev: false
 
-  /@tabler/icons/2.10.0:
+  /@tabler/icons@2.10.0:
     resolution: {integrity: sha512-rj9xrHTSw7bPpylx8g9xhhUgO9NYKX1wGnGrMaFS5CQ9KS+jhwhKFqbZaQKhXNhpvI0cLEEW6GaRXdrC3iBs1A==}
     dev: false
 
-  /@tensorflow/tfjs-backend-cpu/4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y:
+  /@tensorflow/tfjs-backend-cpu@4.2.0(@tensorflow/tfjs-core@4.2.0):
     resolution: {integrity: sha512-8HWg9J69m0Ovc6w8TVhhixMOcwA3t/NPXLblOA/sgJ+/JD5gsbpLWJk4QISQyb1RnpSVzw6PX3BSMTJU7hWVOg==}
     engines: {yarn: '>= 1.3.2'}
     peerDependencies:
@@ -5764,13 +6204,13 @@ packages:
       seedrandom: 3.0.5
     dev: false
 
-  /@tensorflow/tfjs-backend-webgl/4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y:
+  /@tensorflow/tfjs-backend-webgl@4.2.0(@tensorflow/tfjs-core@4.2.0):
     resolution: {integrity: sha512-Qvf+hD5pSh+xi48kChSGzcDKJemkc4EKfoVVjuxl4k25ZUPwuEd7zZUAtinkLu1dzgHNyvePZY8k+9rVm59HJA==}
     engines: {yarn: '>= 1.3.2'}
     peerDependencies:
       '@tensorflow/tfjs-core': 4.2.0
     dependencies:
-      '@tensorflow/tfjs-backend-cpu': 4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y
+      '@tensorflow/tfjs-backend-cpu': 4.2.0(@tensorflow/tfjs-core@4.2.0)
       '@tensorflow/tfjs-core': 4.2.0
       '@types/offscreencanvas': 2019.3.0
       '@types/seedrandom': 2.4.30
@@ -5778,7 +6218,7 @@ packages:
       seedrandom: 3.0.5
     dev: false
 
-  /@tensorflow/tfjs-converter/4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y:
+  /@tensorflow/tfjs-converter@4.2.0(@tensorflow/tfjs-core@4.2.0):
     resolution: {integrity: sha512-m+E2KJM6yGQdi8ElzWpChdD/JaqhWMCi9yK70v/ndkOaCL2q2UN48nYP2T5S15vkDvMIgzAQyZfh7hxQsMuvRQ==}
     peerDependencies:
       '@tensorflow/tfjs-core': 4.2.0
@@ -5786,7 +6226,7 @@ packages:
       '@tensorflow/tfjs-core': 4.2.0
     dev: false
 
-  /@tensorflow/tfjs-core/4.2.0:
+  /@tensorflow/tfjs-core@4.2.0:
     resolution: {integrity: sha512-uuHkiWVC8b00ngFbHvAV7J7haRlN/9PEdeenCi0CzBjgKd7aN25wPWaoN0TSQcU+GT4FJ8mofMZ9VBYZ/s/WLg==}
     engines: {yarn: '>= 1.3.2'}
     requiresBuild: true
@@ -5803,7 +6243,7 @@ packages:
       - encoding
     dev: false
 
-  /@tensorflow/tfjs-data/4.2.0_qsavyspjcgrxymzlcpasp6rzxe:
+  /@tensorflow/tfjs-data@4.2.0(@tensorflow/tfjs-core@4.2.0)(seedrandom@3.0.5):
     resolution: {integrity: sha512-11t7Q+ikseduJgkd9iSeRrtor1aA3o5PVCFhC5yYvR3JLO55ic1+4Ryo0EJfhRoismS6zBUJrpzX4K0zlLbIfw==}
     peerDependencies:
       '@tensorflow/tfjs-core': 4.2.0
@@ -5818,7 +6258,7 @@ packages:
       - encoding
     dev: false
 
-  /@tensorflow/tfjs-layers/4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y:
+  /@tensorflow/tfjs-layers@4.2.0(@tensorflow/tfjs-core@4.2.0):
     resolution: {integrity: sha512-SO0KTmCFOjrW+PlP9nKYXz07XGFq6uE7am9yH2bRaRPWpEeaKT/+k0C9vFMxI/GzRwY8AK4sLe4U+jE1mhYxGw==}
     peerDependencies:
       '@tensorflow/tfjs-core': 4.2.0
@@ -5826,13 +6266,13 @@ packages:
       '@tensorflow/tfjs-core': 4.2.0
     dev: false
 
-  /@tensorflow/tfjs-node/4.2.0_seedrandom@3.0.5:
+  /@tensorflow/tfjs-node@4.2.0(seedrandom@3.0.5):
     resolution: {integrity: sha512-dkyExfqTjMVDpKLBzHH2b7JWzGK+QORtYswvoNHbeHwx7kvYYRAQeiHxp+xrgry6LdbWfZs88IWCwNGoOiZ21w==}
     engines: {node: '>=8.11.0'}
     requiresBuild: true
     dependencies:
       '@mapbox/node-pre-gyp': 1.0.9
-      '@tensorflow/tfjs': 4.2.0_seedrandom@3.0.5
+      '@tensorflow/tfjs': 4.2.0(seedrandom@3.0.5)
       adm-zip: 0.5.10
       google-protobuf: 3.21.2
       https-proxy-agent: 2.2.4
@@ -5846,15 +6286,15 @@ packages:
     dev: false
     optional: true
 
-  /@tensorflow/tfjs/4.2.0_seedrandom@3.0.5:
+  /@tensorflow/tfjs@4.2.0(seedrandom@3.0.5):
     resolution: {integrity: sha512-iZmtyGC9IJkx+TpFnkgDol8BHv2BU3zJ01HyNcuvnm1w1EqoNe+1n8bwvLzI/sxHMcHTqzuu7VugMaphryxE+A==}
     dependencies:
-      '@tensorflow/tfjs-backend-cpu': 4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y
-      '@tensorflow/tfjs-backend-webgl': 4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y
-      '@tensorflow/tfjs-converter': 4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y
+      '@tensorflow/tfjs-backend-cpu': 4.2.0(@tensorflow/tfjs-core@4.2.0)
+      '@tensorflow/tfjs-backend-webgl': 4.2.0(@tensorflow/tfjs-core@4.2.0)
+      '@tensorflow/tfjs-converter': 4.2.0(@tensorflow/tfjs-core@4.2.0)
       '@tensorflow/tfjs-core': 4.2.0
-      '@tensorflow/tfjs-data': 4.2.0_qsavyspjcgrxymzlcpasp6rzxe
-      '@tensorflow/tfjs-layers': 4.2.0_tkoh6rxfpzme3tc2ndqbqcrg7y
+      '@tensorflow/tfjs-data': 4.2.0(@tensorflow/tfjs-core@4.2.0)(seedrandom@3.0.5)
+      '@tensorflow/tfjs-layers': 4.2.0(@tensorflow/tfjs-core@4.2.0)
       argparse: 1.0.10
       chalk: 4.1.2
       core-js: 3.27.1
@@ -5865,7 +6305,7 @@ packages:
       - seedrandom
     dev: false
 
-  /@testing-library/dom/8.20.0:
+  /@testing-library/dom@8.20.0:
     resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==}
     engines: {node: '>=12'}
     dependencies:
@@ -5879,7 +6319,7 @@ packages:
       pretty-format: 27.5.1
     dev: true
 
-  /@testing-library/jest-dom/5.16.5:
+  /@testing-library/jest-dom@5.16.5:
     resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==}
     engines: {node: '>=8', npm: '>=6', yarn: '>=1'}
     dependencies:
@@ -5894,7 +6334,7 @@ packages:
       redent: 3.0.0
     dev: true
 
-  /@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm:
+  /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0):
     resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==}
     engines: {node: '>=10', npm: '>=6'}
     peerDependencies:
@@ -5904,7 +6344,7 @@ packages:
       '@testing-library/dom': 8.20.0
     dev: true
 
-  /@testing-library/vue/6.6.1_a2ihsjreowava2sm4iorpgwkom:
+  /@testing-library/vue@6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47):
     resolution: {integrity: sha512-vpyBPrHzKTwEGS7ehUC8/IXgnqTBEMk6jd52Gouf51arG2jUorPhmkbsxUwJOyxz6L0gj2ZcmWnznG1OJcTCDQ==}
     engines: {node: '>=12'}
     peerDependencies:
@@ -5914,36 +6354,36 @@ packages:
       '@babel/runtime': 7.20.7
       '@testing-library/dom': 8.20.0
       '@vue/compiler-sfc': 3.2.47
-      '@vue/test-utils': 2.3.0_vue@3.2.47
+      '@vue/test-utils': 2.3.0(vue@3.2.47)
       vue: 3.2.47
     dev: true
 
-  /@tokenizer/token/0.3.0:
+  /@tokenizer/token@0.3.0:
     resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
     dev: false
 
-  /@tootallnate/once/2.0.0:
+  /@tootallnate/once@2.0.0:
     resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
     engines: {node: '>= 10'}
     dev: false
 
-  /@types/accepts/1.3.5:
+  /@types/accepts@1.3.5:
     resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/archiver/5.3.1:
+  /@types/archiver@5.3.1:
     resolution: {integrity: sha512-wKYZaSXaDvTZuInAWjCeGG7BEAgTWG2zZW0/f7IYFcoHB2X2d9lkVFnrOlXl3W6NrvO6Ml3FLLu8Uksyymcpnw==}
     dependencies:
       '@types/glob': 8.0.0
     dev: true
 
-  /@types/aria-query/5.0.1:
+  /@types/aria-query@5.0.1:
     resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==}
     dev: true
 
-  /@types/babel__core/7.20.0:
+  /@types/babel__core@7.20.0:
     resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
     dependencies:
       '@babel/parser': 7.21.3
@@ -5953,37 +6393,37 @@ packages:
       '@types/babel__traverse': 7.18.3
     dev: true
 
-  /@types/babel__generator/7.6.4:
+  /@types/babel__generator@7.6.4:
     resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@types/babel__template/7.4.1:
+  /@types/babel__template@7.4.1:
     resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
     dependencies:
       '@babel/parser': 7.21.3
       '@babel/types': 7.21.3
     dev: true
 
-  /@types/babel__traverse/7.18.3:
+  /@types/babel__traverse@7.18.3:
     resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
     dependencies:
       '@babel/types': 7.21.3
     dev: true
 
-  /@types/bcryptjs/2.4.2:
+  /@types/bcryptjs@2.4.2:
     resolution: {integrity: sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==}
     dev: true
 
-  /@types/body-parser/1.19.2:
+  /@types/body-parser@1.19.2:
     resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
     dependencies:
       '@types/connect': 3.4.35
       '@types/node': 18.15.0
     dev: true
 
-  /@types/bull/4.10.0:
+  /@types/bull@4.10.0:
     resolution: {integrity: sha512-RkYW8K2H3J76HT6twmHYbzJ0GtLDDotpLP9ah9gtiA7zfF6peBH1l5fEiK0oeIZ3/642M7Jcb9sPmor8Vf4w6g==}
     dependencies:
       bull: 4.10.4
@@ -5991,7 +6431,7 @@ packages:
       - supports-color
     dev: true
 
-  /@types/cacheable-request/6.0.3:
+  /@types/cacheable-request@6.0.3:
     resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
     dependencies:
       '@types/http-cache-semantics': 4.0.1
@@ -6000,87 +6440,87 @@ packages:
       '@types/responselike': 1.0.0
     dev: false
 
-  /@types/cbor/6.0.0:
+  /@types/cbor@6.0.0:
     resolution: {integrity: sha512-mGQ1lbYOwVti5Xlarn1bTeBZqgY0kstsdjnkoEovgohYKdBjGejHyNGXHdMBeqyQazIv32Jjp33+5pBEaSRy2w==}
     dependencies:
       cbor: 8.1.0
     dev: true
 
-  /@types/chai-subset/1.3.3:
+  /@types/chai-subset@1.3.3:
     resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
     dependencies:
       '@types/chai': 4.3.4
     dev: true
 
-  /@types/chai/4.3.4:
+  /@types/chai@4.3.4:
     resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
     dev: true
 
-  /@types/color-convert/2.0.0:
+  /@types/color-convert@2.0.0:
     resolution: {integrity: sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==}
     dependencies:
       '@types/color-name': 1.1.1
     dev: true
 
-  /@types/color-name/1.1.1:
+  /@types/color-name@1.1.1:
     resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==}
     dev: true
 
-  /@types/connect/3.4.35:
+  /@types/connect@3.4.35:
     resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/content-disposition/0.5.5:
+  /@types/content-disposition@0.5.5:
     resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
     dev: true
 
-  /@types/cookie/0.4.1:
+  /@types/cookie@0.4.1:
     resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
     dev: true
 
-  /@types/debug/4.1.7:
+  /@types/debug@4.1.7:
     resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
     dependencies:
       '@types/ms': 0.7.31
     dev: true
 
-  /@types/detect-port/1.3.2:
+  /@types/detect-port@1.3.2:
     resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==}
     dev: true
 
-  /@types/disposable-email-domains/1.0.2:
+  /@types/disposable-email-domains@1.0.2:
     resolution: {integrity: sha512-SDKwyYTjk3y5aZBxxc38yRecpJPjsqn57STz1bNxYYlv4k11bBe7QB8w4llXDTmQXKT1mFvgGmJv+8Zdu3YmJw==}
     dev: false
 
-  /@types/doctrine/0.0.3:
+  /@types/doctrine@0.0.3:
     resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==}
     dev: true
 
-  /@types/ejs/3.1.2:
+  /@types/ejs@3.1.2:
     resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==}
     dev: true
 
-  /@types/escape-regexp/0.0.1:
+  /@types/escape-regexp@0.0.1:
     resolution: {integrity: sha512-ogj/ZTIdeFkiuxDwawYuZSIgC6suFGgBeZPr6Xs5lHEcvIXTjXGtH+/n8f1XhZhespaUwJ5LIGRICPji972FLw==}
     dev: true
 
-  /@types/escodegen/0.0.6:
+  /@types/escodegen@0.0.6:
     resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}
     dev: true
 
-  /@types/estree/0.0.51:
+  /@types/estree@0.0.51:
     resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
     dev: true
 
-  /@types/estree/1.0.0:
+  /@types/estree@1.0.0:
     resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
 
-  /@types/expect/1.20.4:
+  /@types/expect@1.20.4:
     resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==}
 
-  /@types/express-serve-static-core/4.17.33:
+  /@types/express-serve-static-core@4.17.33:
     resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
     dependencies:
       '@types/node': 18.15.0
@@ -6088,7 +6528,7 @@ packages:
       '@types/range-parser': 1.2.4
     dev: true
 
-  /@types/express/4.17.17:
+  /@types/express@4.17.17:
     resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
     dependencies:
       '@types/body-parser': 1.19.2
@@ -6097,58 +6537,58 @@ packages:
       '@types/serve-static': 1.15.1
     dev: true
 
-  /@types/find-cache-dir/3.2.1:
+  /@types/find-cache-dir@3.2.1:
     resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==}
     dev: true
 
-  /@types/fluent-ffmpeg/2.1.21:
+  /@types/fluent-ffmpeg@2.1.21:
     resolution: {integrity: sha512-+n3dy/Tegt6n+YwGZUiGq6i8Jrnt8+MoyPiW1L6J5EWUl7GSt18a/VyReecfCsvTTNBXNMIKOMHDstiQM8nJLA==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/glob-stream/6.1.1:
+  /@types/glob-stream@6.1.1:
     resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==}
     dependencies:
       '@types/glob': 8.0.1
       '@types/node': 18.15.0
     dev: true
 
-  /@types/glob/7.2.0:
+  /@types/glob@7.2.0:
     resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
     dependencies:
       '@types/minimatch': 5.1.2
       '@types/node': 18.15.0
     dev: true
 
-  /@types/glob/8.0.0:
+  /@types/glob@8.0.0:
     resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==}
     dependencies:
       '@types/minimatch': 5.1.2
       '@types/node': 18.15.0
     dev: true
 
-  /@types/glob/8.0.1:
+  /@types/glob@8.0.1:
     resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==}
     dependencies:
       '@types/minimatch': 5.1.2
       '@types/node': 18.15.0
     dev: true
 
-  /@types/graceful-fs/4.1.6:
+  /@types/graceful-fs@4.1.6:
     resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/gulp-rename/2.0.1:
+  /@types/gulp-rename@2.0.1:
     resolution: {integrity: sha512-9ZjeS2RHEnmBmTcyi2+oeye3BgCsWhvi4uv3qCnAg8i6plOuRdaeNxjOves0ELysEXYLBl7bCl5fbVs7AZtgTA==}
     dependencies:
       '@types/node': 18.11.18
       '@types/vinyl': 2.0.7
     dev: true
 
-  /@types/gulp/4.0.10:
+  /@types/gulp@4.0.10:
     resolution: {integrity: sha512-spgZHJFqiEJGwqGlf7T/k4nkBpBcLgP7T0EfN6G2vvnhUfvd4uO1h8RwpXOE8x/54DVYUs1XCAtBHkX/R3axAQ==}
     dependencies:
       '@types/undertaker': 1.2.8
@@ -6156,57 +6596,57 @@ packages:
       chokidar: 3.5.3
     dev: true
 
-  /@types/hast/2.3.4:
+  /@types/hast@2.3.4:
     resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
     dependencies:
       '@types/unist': 2.0.6
     dev: true
 
-  /@types/http-cache-semantics/4.0.1:
+  /@types/http-cache-semantics@4.0.1:
     resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
 
-  /@types/ioredis/4.28.10:
+  /@types/ioredis@4.28.10:
     resolution: {integrity: sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/is-function/1.0.1:
+  /@types/is-function@1.0.1:
     resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==}
     dev: true
 
-  /@types/istanbul-lib-coverage/2.0.4:
+  /@types/istanbul-lib-coverage@2.0.4:
     resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
     dev: true
 
-  /@types/istanbul-lib-report/3.0.0:
+  /@types/istanbul-lib-report@3.0.0:
     resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
     dependencies:
       '@types/istanbul-lib-coverage': 2.0.4
     dev: true
 
-  /@types/istanbul-reports/3.0.1:
+  /@types/istanbul-reports@3.0.1:
     resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
     dependencies:
       '@types/istanbul-lib-report': 3.0.0
     dev: true
 
-  /@types/jest/29.4.0:
+  /@types/jest@29.4.0:
     resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==}
     dependencies:
       expect: 29.5.0
       pretty-format: 29.5.0
     dev: true
 
-  /@types/js-levenshtein/1.1.1:
+  /@types/js-levenshtein@1.1.1:
     resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==}
     dev: true
 
-  /@types/js-yaml/4.0.5:
+  /@types/js-yaml@4.0.5:
     resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
     dev: true
 
-  /@types/jsdom/21.1.0:
+  /@types/jsdom@21.1.0:
     resolution: {integrity: sha512-leWreJOdnuIxq9Y70tBVm/bvTuh31DSlF/r4l7Cfi4uhVQqLHD0Q4v301GMisEMwwbMgF7ZKxuZ+Jbd4NcdmRw==}
     dependencies:
       '@types/node': 18.15.0
@@ -6214,115 +6654,121 @@ packages:
       parse5: 7.1.2
     dev: true
 
-  /@types/json-schema/7.0.11:
+  /@types/json-schema@7.0.11:
     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
     dev: true
 
-  /@types/json5/0.0.29:
+  /@types/json5@0.0.29:
     resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
     dev: true
 
-  /@types/jsonld/1.5.8:
+  /@types/jsonld@1.5.8:
     resolution: {integrity: sha512-4l5t/jDnJpqZ+i7CLTTgPcT5BYXnAnwJupb07aAokPufCV0SjDHcwctUkSTuhIuSU9yHok+WOOngIGCtpL96gw==}
     dev: true
 
-  /@types/jsrsasign/10.5.5:
+  /@types/jsrsasign@10.5.5:
     resolution: {integrity: sha512-M2Et4hgTigFoArTu6ylK3hYFEH+UuXfgFXRXZ+flpCfux8j7fQ2D+0zEwiu6ehx0h5otaauhLSFzMzEtNA784A==}
     dev: true
 
-  /@types/keyv/3.1.4:
+  /@types/keyv@3.1.4:
     resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
     dependencies:
       '@types/node': 18.15.0
     dev: false
 
-  /@types/lodash/4.14.191:
+  /@types/lodash@4.14.191:
     resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
     dev: true
 
-  /@types/long/4.0.2:
+  /@types/long@4.0.2:
     resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
     dev: false
 
-  /@types/matter-js/0.18.2:
+  /@types/matter-js@0.18.2:
     resolution: {integrity: sha512-W9UC9DOPNBRTUocqqPZmzX3cbHmlZBI9jLn6SuxZz0n5QrPk382Ig3hbBWHqYU8TRUmTCJJhuanXeyMTavF7Mg==}
     dev: true
 
-  /@types/mdx/2.0.3:
+  /@types/mdast@3.0.11:
+    resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /@types/mdx@2.0.3:
     resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
     dev: true
 
-  /@types/mime-types/2.1.1:
+  /@types/mime-types@2.1.1:
     resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==}
     dev: true
 
-  /@types/mime/3.0.1:
+  /@types/mime@3.0.1:
     resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
     dev: true
 
-  /@types/minimatch/5.1.2:
+  /@types/minimatch@5.1.2:
     resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
     dev: true
 
-  /@types/ms/0.7.31:
+  /@types/ms@0.7.31:
     resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
     dev: true
 
-  /@types/node-fetch/2.6.2:
+  /@types/node-fetch@2.6.2:
     resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
     dependencies:
       '@types/node': 18.15.0
       form-data: 3.0.1
 
-  /@types/node-fetch/3.0.3:
+  /@types/node-fetch@3.0.3:
     resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==}
     dependencies:
       node-fetch: 3.3.0
     dev: true
 
-  /@types/node/14.18.36:
+  /@types/node@14.18.36:
     resolution: {integrity: sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==}
     dev: true
 
-  /@types/node/16.18.16:
+  /@types/node@16.18.16:
     resolution: {integrity: sha512-ZOzvDRWp8dCVBmgnkIqYCArgdFOO9YzocZp8Ra25N/RStKiWvMOXHMz+GjSeVNe5TstaTmTWPucGJkDw0XXJWA==}
     dev: true
 
-  /@types/node/18.11.18:
+  /@types/node@18.11.18:
     resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
 
-  /@types/node/18.15.0:
+  /@types/node@18.15.0:
     resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==}
 
-  /@types/nodemailer/6.4.7:
+  /@types/nodemailer@6.4.7:
     resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/normalize-package-data/2.4.1:
+  /@types/normalize-package-data@2.4.1:
     resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
     dev: true
 
-  /@types/npmlog/4.1.4:
+  /@types/npmlog@4.1.4:
     resolution: {integrity: sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==}
     dev: true
 
-  /@types/oauth/0.9.1:
+  /@types/oauth@0.9.1:
     resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/offscreencanvas/2019.3.0:
+  /@types/offscreencanvas@2019.3.0:
     resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==}
     dev: false
 
-  /@types/offscreencanvas/2019.7.0:
+  /@types/offscreencanvas@2019.7.0:
     resolution: {integrity: sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==}
     dev: false
 
-  /@types/pg/8.6.6:
+  /@types/pg@8.6.6:
     resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
     dependencies:
       '@types/node': 18.15.0
@@ -6330,49 +6776,49 @@ packages:
       pg-types: 2.2.0
     dev: true
 
-  /@types/prettier/2.7.2:
+  /@types/prettier@2.7.2:
     resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==}
     dev: true
 
-  /@types/pretty-hrtime/1.0.1:
+  /@types/pretty-hrtime@1.0.1:
     resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==}
     dev: true
 
-  /@types/prop-types/15.7.5:
+  /@types/prop-types@15.7.5:
     resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
     dev: true
 
-  /@types/pug/2.0.6:
+  /@types/pug@2.0.6:
     resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
     dev: true
 
-  /@types/punycode/2.1.0:
+  /@types/punycode@2.1.0:
     resolution: {integrity: sha512-PG5aLpW6PJOeV2fHRslP4IOMWn+G+Uq8CfnyJ+PDS8ndCbU+soO+fB3NKCKo0p/Jh2Y4aPaiQZsrOXFdzpcA6g==}
     dev: true
 
-  /@types/qrcode/1.5.0:
+  /@types/qrcode@1.5.0:
     resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/qs/6.9.7:
+  /@types/qs@6.9.7:
     resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
     dev: true
 
-  /@types/random-seed/0.3.3:
+  /@types/random-seed@0.3.3:
     resolution: {integrity: sha512-kHsCbIRHNXJo6EN5W8EA5b4i1hdT6jaZke5crBPLUcLqaLdZ0QBq8QVMbafHzhjFF83Cl9qlee2dChD18d/kPg==}
     dev: true
 
-  /@types/range-parser/1.2.4:
+  /@types/range-parser@1.2.4:
     resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
     dev: true
 
-  /@types/ratelimiter/3.4.4:
+  /@types/ratelimiter@3.4.4:
     resolution: {integrity: sha512-GSMb93iSA8KKFDgVL2Wzs/kqrHMJcU8xhLdwI5omoACcj7K18SacklLtY1C4G02HC5drd6GygtsIaGbfxJSe0g==}
     dev: true
 
-  /@types/react/18.0.28:
+  /@types/react@18.0.28:
     resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
     dependencies:
       '@types/prop-types': 15.7.5
@@ -6380,116 +6826,116 @@ packages:
       csstype: 3.1.1
     dev: true
 
-  /@types/redis/4.0.11:
+  /@types/redis@4.0.11:
     resolution: {integrity: sha512-bI+gth8La8Wg/QCR1+V1fhrL9+LZUSWfcqpOj2Kc80ZQ4ffbdL173vQd5wovmoV9i071FU9oP2g6etLuEwb6Rg==}
     dependencies:
       redis: 4.5.1
     dev: true
 
-  /@types/rename/1.0.4:
+  /@types/rename@1.0.4:
     resolution: {integrity: sha512-eV81+6bVv2mdCBahkMefjEUwAjKDAP3AuyhqWCWRxcRaeVdUeHUBaoq2zSz+5HNHF2jzTajMcfLvJsy4K3cbwA==}
     dev: true
 
-  /@types/responselike/1.0.0:
+  /@types/responselike@1.0.0:
     resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
     dependencies:
       '@types/node': 18.15.0
     dev: false
 
-  /@types/sanitize-html/2.8.1:
+  /@types/sanitize-html@2.8.1:
     resolution: {integrity: sha512-Q6kMAbBBaXA5IagoipeSr4Y/zuGyh4BZ5lewgb3cYe3OYqy0k/d67iMsC4O895eks676bVAe9G+0y1i0k2ZlnA==}
     dependencies:
       htmlparser2: 8.0.1
     dev: true
 
-  /@types/scheduler/0.16.2:
+  /@types/scheduler@0.16.2:
     resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
     dev: true
 
-  /@types/seedrandom/2.4.30:
+  /@types/seedrandom@2.4.30:
     resolution: {integrity: sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==}
     dev: false
 
-  /@types/seedrandom/3.0.5:
+  /@types/seedrandom@3.0.5:
     resolution: {integrity: sha512-kopEpYpFQvQdYsZkZVwht/0THHmTFFYXDaqV/lM45eweJ8kcGVDgZHs0RVTolSq55UPZNmjhKc9r7UvLu/mQQg==}
     dev: true
 
-  /@types/semver/7.3.13:
+  /@types/semver@7.3.13:
     resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
     dev: true
 
-  /@types/serve-static/1.15.1:
+  /@types/serve-static@1.15.1:
     resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
     dependencies:
       '@types/mime': 3.0.1
       '@types/node': 18.15.0
     dev: true
 
-  /@types/serviceworker/0.0.62:
+  /@types/serviceworker@0.0.62:
     resolution: {integrity: sha512-DVoelQjcHaPshqyg0duirwuuaZ/teG4E3QGiQXbzso8akd12VRtgGYCao8viRFXHVLJOlo/Elh1nfbMsRQJXVA==}
     dev: true
 
-  /@types/set-cookie-parser/2.4.2:
+  /@types/set-cookie-parser@2.4.2:
     resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/sharp/0.31.1:
+  /@types/sharp@0.31.1:
     resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/sinon/10.0.13:
+  /@types/sinon@10.0.13:
     resolution: {integrity: sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==}
     dependencies:
       '@types/sinonjs__fake-timers': 8.1.2
     dev: true
 
-  /@types/sinonjs__fake-timers/8.1.1:
+  /@types/sinonjs__fake-timers@8.1.1:
     resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
     dev: true
 
-  /@types/sinonjs__fake-timers/8.1.2:
+  /@types/sinonjs__fake-timers@8.1.2:
     resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==}
     dev: true
 
-  /@types/sizzle/2.3.3:
+  /@types/sizzle@2.3.3:
     resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==}
     dev: true
 
-  /@types/stack-utils/2.0.1:
+  /@types/stack-utils@2.0.1:
     resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
     dev: true
 
-  /@types/testing-library__jest-dom/5.14.5:
+  /@types/testing-library__jest-dom@5.14.5:
     resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==}
     dependencies:
       '@types/jest': 29.4.0
     dev: true
 
-  /@types/throttle-debounce/5.0.0:
+  /@types/throttle-debounce@5.0.0:
     resolution: {integrity: sha512-Pb7k35iCGFcGPECoNE4DYp3Oyf2xcTd3FbFQxXUI9hEYKUl6YX+KLf7HrBmgVcD05nl50LIH6i+80js4iYmWbw==}
     dev: true
 
-  /@types/tinycolor2/1.4.3:
+  /@types/tinycolor2@1.4.3:
     resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==}
     dev: true
 
-  /@types/tmp/0.2.3:
+  /@types/tmp@0.2.3:
     resolution: {integrity: sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==}
     dev: true
 
-  /@types/tough-cookie/4.0.2:
+  /@types/tough-cookie@4.0.2:
     resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
     dev: true
 
-  /@types/undertaker-registry/1.0.1:
+  /@types/undertaker-registry@1.0.1:
     resolution: {integrity: sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==}
     dev: true
 
-  /@types/undertaker/1.2.8:
+  /@types/undertaker@1.2.8:
     resolution: {integrity: sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==}
     dependencies:
       '@types/node': 18.15.0
@@ -6497,27 +6943,27 @@ packages:
       async-done: 1.3.2
     dev: true
 
-  /@types/unist/2.0.6:
+  /@types/unist@2.0.6:
     resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
     dev: true
 
-  /@types/unzipper/0.10.5:
+  /@types/unzipper@0.10.5:
     resolution: {integrity: sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/uuid/9.0.1:
+  /@types/uuid@9.0.1:
     resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==}
     dev: true
 
-  /@types/vary/1.1.0:
+  /@types/vary@1.1.0:
     resolution: {integrity: sha512-LQWqrIa0dvEOOH37lGksMEXbypRLUFqu6Gx0pmX7zIUisD2I/qaVgEX/vJ/PSVSW0Hk6yz1BNkFpqg6dZm3Wug==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/vinyl-fs/2.4.12:
+  /@types/vinyl-fs@2.4.12:
     resolution: {integrity: sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==}
     dependencies:
       '@types/glob-stream': 6.1.1
@@ -6525,55 +6971,55 @@ packages:
       '@types/vinyl': 2.0.7
     dev: true
 
-  /@types/vinyl/2.0.7:
+  /@types/vinyl@2.0.7:
     resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==}
     dependencies:
       '@types/expect': 1.20.4
       '@types/node': 18.15.0
 
-  /@types/web-push/3.3.2:
+  /@types/web-push@3.3.2:
     resolution: {integrity: sha512-JxWGVL/m7mWTIg4mRYO+A6s0jPmBkr4iJr39DqJpRJAc+jrPiEe1/asmkwerzRon8ZZDxaZJpsxpv0Z18Wo9gw==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/webgl-ext/0.0.30:
+  /@types/webgl-ext@0.0.30:
     resolution: {integrity: sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==}
     dev: false
 
-  /@types/webpack-env/1.18.0:
+  /@types/webpack-env@1.18.0:
     resolution: {integrity: sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==}
     dev: true
 
-  /@types/websocket/1.0.5:
+  /@types/websocket@1.0.5:
     resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/ws/8.5.4:
+  /@types/ws@8.5.4:
     resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==}
     dependencies:
       '@types/node': 18.15.0
     dev: true
 
-  /@types/yargs-parser/21.0.0:
+  /@types/yargs-parser@21.0.0:
     resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
     dev: true
 
-  /@types/yargs/16.0.5:
+  /@types/yargs@16.0.5:
     resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==}
     dependencies:
       '@types/yargs-parser': 21.0.0
     dev: true
 
-  /@types/yargs/17.0.19:
+  /@types/yargs@17.0.19:
     resolution: {integrity: sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==}
     dependencies:
       '@types/yargs-parser': 21.0.0
     dev: true
 
-  /@types/yauzl/2.10.0:
+  /@types/yauzl@2.10.0:
     resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
     requiresBuild: true
     dependencies:
@@ -6581,7 +7027,7 @@ packages:
     dev: true
     optional: true
 
-  /@typescript-eslint/eslint-plugin/5.54.1_mlk7dnz565t663n4razh6a6v6i:
+  /@typescript-eslint/eslint-plugin@5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5):
     resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6592,24 +7038,24 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
+      '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
       '@typescript-eslint/scope-manager': 5.54.1
-      '@typescript-eslint/type-utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      debug: 4.3.4
+      '@typescript-eslint/type-utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.35.0
       grapheme-splitter: 1.0.4
       ignore: 5.2.4
       natural-compare-lite: 1.4.0
       regexpp: 3.2.0
       semver: 7.3.8
-      tsutils: 3.21.0_typescript@4.9.5
+      tsutils: 3.21.0(typescript@4.9.5)
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/parser/5.52.0_7kw3g6rralp5ps6mg3uyzz6azm:
+  /@typescript-eslint/parser@5.52.0(eslint@8.34.0)(typescript@4.9.5):
     resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6621,15 +7067,15 @@ packages:
     dependencies:
       '@typescript-eslint/scope-manager': 5.52.0
       '@typescript-eslint/types': 5.52.0
-      '@typescript-eslint/typescript-estree': 5.52.0_typescript@4.9.5
-      debug: 4.3.4
+      '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.9.5)
+      debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.34.0
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/parser/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
+  /@typescript-eslint/parser@5.54.1(eslint@8.35.0)(typescript@4.9.5):
     resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6641,15 +7087,15 @@ packages:
     dependencies:
       '@typescript-eslint/scope-manager': 5.54.1
       '@typescript-eslint/types': 5.54.1
-      '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
-      debug: 4.3.4
+      '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5)
+      debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.35.0
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/scope-manager/5.52.0:
+  /@typescript-eslint/scope-manager@5.52.0:
     resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -6657,7 +7103,7 @@ packages:
       '@typescript-eslint/visitor-keys': 5.52.0
     dev: true
 
-  /@typescript-eslint/scope-manager/5.54.1:
+  /@typescript-eslint/scope-manager@5.54.1:
     resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -6665,7 +7111,7 @@ packages:
       '@typescript-eslint/visitor-keys': 5.54.1
     dev: true
 
-  /@typescript-eslint/type-utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
+  /@typescript-eslint/type-utils@5.54.1(eslint@8.35.0)(typescript@4.9.5):
     resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6675,27 +7121,27 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
-      '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      debug: 4.3.4
+      '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5)
+      '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.35.0
-      tsutils: 3.21.0_typescript@4.9.5
+      tsutils: 3.21.0(typescript@4.9.5)
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/types/5.52.0:
+  /@typescript-eslint/types@5.52.0:
     resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /@typescript-eslint/types/5.54.1:
+  /@typescript-eslint/types@5.54.1:
     resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.5:
+  /@typescript-eslint/typescript-estree@5.52.0(typescript@4.9.5):
     resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6706,17 +7152,17 @@ packages:
     dependencies:
       '@typescript-eslint/types': 5.52.0
       '@typescript-eslint/visitor-keys': 5.52.0
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       globby: 11.1.0
       is-glob: 4.0.3
       semver: 7.3.8
-      tsutils: 3.21.0_typescript@4.9.5
+      tsutils: 3.21.0(typescript@4.9.5)
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.5:
+  /@typescript-eslint/typescript-estree@5.54.1(typescript@4.9.5):
     resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6727,17 +7173,17 @@ packages:
     dependencies:
       '@typescript-eslint/types': 5.54.1
       '@typescript-eslint/visitor-keys': 5.54.1
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       globby: 11.1.0
       is-glob: 4.0.3
       semver: 7.3.8
-      tsutils: 3.21.0_typescript@4.9.5
+      tsutils: 3.21.0(typescript@4.9.5)
       typescript: 4.9.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@typescript-eslint/utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
+  /@typescript-eslint/utils@5.54.1(eslint@8.35.0)(typescript@4.9.5):
     resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -6747,17 +7193,17 @@ packages:
       '@types/semver': 7.3.13
       '@typescript-eslint/scope-manager': 5.54.1
       '@typescript-eslint/types': 5.54.1
-      '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
+      '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5)
       eslint: 8.35.0
       eslint-scope: 5.1.1
-      eslint-utils: 3.0.0_eslint@8.35.0
+      eslint-utils: 3.0.0(eslint@8.35.0)
       semver: 7.3.8
     transitivePeerDependencies:
       - supports-color
       - typescript
     dev: true
 
-  /@typescript-eslint/visitor-keys/5.52.0:
+  /@typescript-eslint/visitor-keys@5.52.0:
     resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -6765,7 +7211,7 @@ packages:
       eslint-visitor-keys: 3.3.0
     dev: true
 
-  /@typescript-eslint/visitor-keys/5.54.1:
+  /@typescript-eslint/visitor-keys@5.54.1:
     resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -6773,33 +7219,33 @@ packages:
       eslint-visitor-keys: 3.3.0
     dev: true
 
-  /@vitejs/plugin-react/3.1.0_vite@4.1.4:
+  /@vitejs/plugin-react@3.1.0(vite@4.1.4):
     resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       vite: ^4.1.0-beta.0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/plugin-transform-react-jsx-self': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.21.3
+      '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.3)
       magic-string: 0.27.0
       react-refresh: 0.14.0
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@vitejs/plugin-vue/4.0.0_vite@4.1.4+vue@3.2.47:
+  /@vitejs/plugin-vue@4.0.0(vite@4.1.4)(vue@3.2.47):
     resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       vite: ^4.0.0
       vue: ^3.2.25
     dependencies:
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
       vue: 3.2.47
 
-  /@vitest/coverage-c8/0.29.2_vitest@0.29.2:
+  /@vitest/coverage-c8@0.29.2(vitest@0.29.2):
     resolution: {integrity: sha512-NmD3WirQCeQjjKfHu4iEq18DVOBFbLn9TKVdMpyi5YW2EtnS+K22/WE+9/wRrepOhyeTxuEFgxUVkCAE1GhbnQ==}
     peerDependencies:
       vitest: '>=0.29.0 <1'
@@ -6807,10 +7253,10 @@ packages:
       c8: 7.13.0
       picocolors: 1.0.0
       std-env: 3.3.2
-      vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
+      vitest: 0.29.2(happy-dom@8.9.0)(sass@1.58.3)
     dev: true
 
-  /@vitest/expect/0.29.2:
+  /@vitest/expect@0.29.2:
     resolution: {integrity: sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA==}
     dependencies:
       '@vitest/spy': 0.29.2
@@ -6818,7 +7264,7 @@ packages:
       chai: 4.3.7
     dev: true
 
-  /@vitest/runner/0.29.2:
+  /@vitest/runner@0.29.2:
     resolution: {integrity: sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA==}
     dependencies:
       '@vitest/utils': 0.29.2
@@ -6826,13 +7272,13 @@ packages:
       pathe: 1.1.0
     dev: true
 
-  /@vitest/spy/0.29.2:
+  /@vitest/spy@0.29.2:
     resolution: {integrity: sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw==}
     dependencies:
       tinyspy: 1.1.1
     dev: true
 
-  /@vitest/utils/0.29.2:
+  /@vitest/utils@0.29.2:
     resolution: {integrity: sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ==}
     dependencies:
       cli-truncate: 3.1.0
@@ -6842,25 +7288,25 @@ packages:
       pretty-format: 27.5.1
     dev: true
 
-  /@volar/language-core/1.3.0-alpha.0:
+  /@volar/language-core@1.3.0-alpha.0:
     resolution: {integrity: sha512-W3uMzecHPcbwddPu4SJpUcPakRBK/y/BP+U0U6NiPpUX1tONLC4yCawt+QBJqtgJ+sfD6ztf5PyvPL3hQRqfOA==}
     dependencies:
       '@volar/source-map': 1.3.0-alpha.0
     dev: true
 
-  /@volar/source-map/1.3.0-alpha.0:
+  /@volar/source-map@1.3.0-alpha.0:
     resolution: {integrity: sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==}
     dependencies:
       muggle-string: 0.2.2
     dev: true
 
-  /@volar/typescript/1.3.0-alpha.0:
+  /@volar/typescript@1.3.0-alpha.0:
     resolution: {integrity: sha512-5UItyW2cdH2mBLu4RrECRNJRgtvvzKrSCn2y3v/D61QwIDkGx4aeil6x8RFuUL5TFtV6QvVHXnsOHxNgd+sCow==}
     dependencies:
       '@volar/language-core': 1.3.0-alpha.0
     dev: true
 
-  /@volar/vue-language-core/1.2.0:
+  /@volar/vue-language-core@1.2.0:
     resolution: {integrity: sha512-w7yEiaITh2WzKe6u8ZdeLKCUz43wdmY/OqAmsB/PGDvvhTcVhCJ6f0W/RprZL1IhqH8wALoWiwEh/Wer7ZviMQ==}
     dependencies:
       '@volar/language-core': 1.3.0-alpha.0
@@ -6874,14 +7320,14 @@ packages:
       vue-template-compiler: 2.7.14
     dev: true
 
-  /@volar/vue-typescript/1.2.0:
+  /@volar/vue-typescript@1.2.0:
     resolution: {integrity: sha512-zjmRi9y3J1EkG+pfuHp8IbHmibihrKK485cfzsHjiuvJMGrpkWvlO5WVEk8oslMxxeGC5XwBFE9AOlvh378EPA==}
     dependencies:
       '@volar/typescript': 1.3.0-alpha.0
       '@volar/vue-language-core': 1.2.0
     dev: true
 
-  /@vue/compiler-core/3.2.47:
+  /@vue/compiler-core@3.2.47:
     resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
     dependencies:
       '@babel/parser': 7.21.3
@@ -6889,13 +7335,13 @@ packages:
       estree-walker: 2.0.2
       source-map: 0.6.1
 
-  /@vue/compiler-dom/3.2.47:
+  /@vue/compiler-dom@3.2.47:
     resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
     dependencies:
       '@vue/compiler-core': 3.2.47
       '@vue/shared': 3.2.47
 
-  /@vue/compiler-sfc/2.7.14:
+  /@vue/compiler-sfc@2.7.14:
     resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
     dependencies:
       '@babel/parser': 7.21.3
@@ -6903,7 +7349,7 @@ packages:
       source-map: 0.6.1
     dev: false
 
-  /@vue/compiler-sfc/3.2.47:
+  /@vue/compiler-sfc@3.2.47:
     resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
     dependencies:
       '@babel/parser': 7.20.7
@@ -6917,13 +7363,13 @@ packages:
       postcss: 8.4.21
       source-map: 0.6.1
 
-  /@vue/compiler-ssr/3.2.47:
+  /@vue/compiler-ssr@3.2.47:
     resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
     dependencies:
       '@vue/compiler-dom': 3.2.47
       '@vue/shared': 3.2.47
 
-  /@vue/reactivity-transform/3.2.47:
+  /@vue/reactivity-transform@3.2.47:
     resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
     dependencies:
       '@babel/parser': 7.21.3
@@ -6932,25 +7378,25 @@ packages:
       estree-walker: 2.0.2
       magic-string: 0.25.9
 
-  /@vue/reactivity/3.2.47:
+  /@vue/reactivity@3.2.47:
     resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
     dependencies:
       '@vue/shared': 3.2.47
 
-  /@vue/runtime-core/3.2.47:
+  /@vue/runtime-core@3.2.47:
     resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
     dependencies:
       '@vue/reactivity': 3.2.47
       '@vue/shared': 3.2.47
 
-  /@vue/runtime-dom/3.2.47:
+  /@vue/runtime-dom@3.2.47:
     resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
     dependencies:
       '@vue/runtime-core': 3.2.47
       '@vue/shared': 3.2.47
       csstype: 2.6.21
 
-  /@vue/server-renderer/3.2.47_vue@3.2.47:
+  /@vue/server-renderer@3.2.47(vue@3.2.47):
     resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
     peerDependencies:
       vue: 3.2.47
@@ -6959,10 +7405,10 @@ packages:
       '@vue/shared': 3.2.47
       vue: 3.2.47
 
-  /@vue/shared/3.2.47:
+  /@vue/shared@3.2.47:
     resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
 
-  /@vue/test-utils/2.3.0_vue@3.2.47:
+  /@vue/test-utils@2.3.0(vue@3.2.47):
     resolution: {integrity: sha512-S8/9Z+B4VSsTUNtZtzS7J1TfxJbf10n+gcH9X8cASbG0Tp7qD6vqs/sUNlmpzk6i7+pP00ptauJp9rygyW89Ww==}
     peerDependencies:
       vue: ^3.0.1
@@ -6971,67 +7417,67 @@ packages:
       vue: 3.2.47
     optionalDependencies:
       '@vue/compiler-dom': 3.2.47
-      '@vue/server-renderer': 3.2.47_vue@3.2.47
+      '@vue/server-renderer': 3.2.47(vue@3.2.47)
     dev: true
 
-  /@webgpu/types/0.1.21:
+  /@webgpu/types@0.1.21:
     resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==}
     dev: false
 
-  /@xmldom/xmldom/0.8.6:
+  /@xmldom/xmldom@0.8.6:
     resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==}
     engines: {node: '>=10.0.0'}
     dev: true
 
-  /@yarnpkg/esbuild-plugin-pnp/3.0.0-rc.15_esbuild@0.16.17:
+  /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.14):
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
     engines: {node: '>=14.15.0'}
     peerDependencies:
       esbuild: '>=0.10.0'
     dependencies:
-      esbuild: 0.16.17
+      esbuild: 0.17.14
       tslib: 2.5.0
     dev: true
 
-  /@zxing/text-encoding/0.9.0:
+  /@zxing/text-encoding@0.9.0:
     resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
     requiresBuild: true
     dev: true
     optional: true
 
-  /abab/2.0.6:
+  /abab@2.0.6:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     dev: false
 
-  /abbrev/1.1.1:
+  /abbrev@1.1.1:
     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
 
-  /abort-controller/3.0.0:
+  /abort-controller@3.0.0:
     resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
     engines: {node: '>=6.5'}
     dependencies:
       event-target-shim: 5.0.1
     dev: false
 
-  /abstract-logging/2.0.1:
+  /abstract-logging@2.0.1:
     resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
     dev: false
 
-  /accepts/1.3.8:
+  /accepts@1.3.8:
     resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-types: 2.1.35
       negotiator: 0.6.3
 
-  /acorn-globals/7.0.1:
+  /acorn-globals@7.0.1:
     resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
     dependencies:
       acorn: 8.8.2
       acorn-walk: 8.2.0
     dev: false
 
-  /acorn-jsx/5.3.2_acorn@7.4.1:
+  /acorn-jsx@5.3.2(acorn@7.4.1):
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -7039,7 +7485,7 @@ packages:
       acorn: 7.4.1
     dev: true
 
-  /acorn-jsx/5.3.2_acorn@8.8.2:
+  /acorn-jsx@5.3.2(acorn@8.8.2):
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -7047,43 +7493,43 @@ packages:
       acorn: 8.8.2
     dev: true
 
-  /acorn-walk/7.2.0:
+  /acorn-walk@7.2.0:
     resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
     engines: {node: '>=0.4.0'}
     dev: true
 
-  /acorn-walk/8.2.0:
+  /acorn-walk@8.2.0:
     resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
     engines: {node: '>=0.4.0'}
 
-  /acorn/7.4.1:
+  /acorn@7.4.1:
     resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
-  /acorn/8.8.1:
+  /acorn@8.8.1:
     resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: false
 
-  /acorn/8.8.2:
+  /acorn@8.8.2:
     resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
-  /address/1.2.2:
+  /address@1.2.2:
     resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /adm-zip/0.5.10:
+  /adm-zip@0.5.10:
     resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==}
     engines: {node: '>=6.0'}
     dev: false
     optional: true
 
-  /agent-base/4.3.0:
+  /agent-base@4.3.0:
     resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==}
     engines: {node: '>= 4.0.0'}
     dependencies:
@@ -7091,38 +7537,38 @@ packages:
     dev: false
     optional: true
 
-  /agent-base/5.1.1:
+  /agent-base@5.1.1:
     resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==}
     engines: {node: '>= 6.0.0'}
     dev: true
 
-  /agent-base/6.0.2:
+  /agent-base@6.0.2:
     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
     engines: {node: '>= 6.0.0'}
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
 
-  /agentkeepalive/4.2.1:
+  /agentkeepalive@4.2.1:
     resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==}
     engines: {node: '>= 8.0.0'}
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       depd: 1.1.2
       humanize-ms: 1.2.1
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /aggregate-error/3.1.0:
+  /aggregate-error@3.1.0:
     resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
     engines: {node: '>=8'}
     dependencies:
       clean-stack: 2.2.0
       indent-string: 4.0.0
 
-  /ajv-formats/2.1.1_ajv@8.12.0:
+  /ajv-formats@2.1.1(ajv@8.12.0):
     resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
     peerDependencies:
       ajv: ^8.0.0
@@ -7133,7 +7579,7 @@ packages:
       ajv: 8.12.0
     dev: false
 
-  /ajv/6.12.6:
+  /ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
     dependencies:
       fast-deep-equal: 3.1.3
@@ -7141,7 +7587,7 @@ packages:
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
 
-  /ajv/8.12.0:
+  /ajv@8.12.0:
     resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
     dependencies:
       fast-deep-equal: 3.1.3
@@ -7150,94 +7596,94 @@ packages:
       uri-js: 4.4.1
     dev: false
 
-  /alphanum-sort/1.0.2:
+  /alphanum-sort@1.0.2:
     resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==}
     dev: false
 
-  /ansi-align/3.0.1:
+  /ansi-align@3.0.1:
     resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
     dependencies:
       string-width: 4.2.3
     dev: true
 
-  /ansi-colors/1.1.0:
+  /ansi-colors@1.1.0:
     resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       ansi-wrap: 0.1.0
     dev: false
 
-  /ansi-colors/4.1.3:
+  /ansi-colors@4.1.3:
     resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
     engines: {node: '>=6'}
     dev: true
 
-  /ansi-escapes/4.3.2:
+  /ansi-escapes@4.3.2:
     resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
     engines: {node: '>=8'}
     dependencies:
       type-fest: 0.21.3
     dev: true
 
-  /ansi-gray/0.1.1:
+  /ansi-gray@0.1.1:
     resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       ansi-wrap: 0.1.0
     dev: false
 
-  /ansi-regex/2.1.1:
+  /ansi-regex@2.1.1:
     resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /ansi-regex/5.0.1:
+  /ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
 
-  /ansi-regex/6.0.1:
+  /ansi-regex@6.0.1:
     resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
     engines: {node: '>=12'}
     dev: true
 
-  /ansi-styles/2.2.1:
+  /ansi-styles@2.2.1:
     resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /ansi-styles/3.2.1:
+  /ansi-styles@3.2.1:
     resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
     engines: {node: '>=4'}
     dependencies:
       color-convert: 1.9.3
     dev: true
 
-  /ansi-styles/4.3.0:
+  /ansi-styles@4.3.0:
     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
     engines: {node: '>=8'}
     dependencies:
       color-convert: 2.0.1
 
-  /ansi-styles/5.2.0:
+  /ansi-styles@5.2.0:
     resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
     engines: {node: '>=10'}
     dev: true
 
-  /ansi-styles/6.2.1:
+  /ansi-styles@6.2.1:
     resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
     engines: {node: '>=12'}
     dev: true
 
-  /ansi-wrap/0.1.0:
+  /ansi-wrap@0.1.0:
     resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /any-promise/1.3.0:
+  /any-promise@1.3.0:
     resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
     dev: false
 
-  /anymatch/2.0.0:
+  /anymatch@2.0.0:
     resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==}
     dependencies:
       micromatch: 3.1.10
@@ -7246,36 +7692,36 @@ packages:
       - supports-color
     dev: false
 
-  /anymatch/3.1.3:
+  /anymatch@3.1.3:
     resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
     engines: {node: '>= 8'}
     dependencies:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
-  /app-root-dir/1.0.2:
+  /app-root-dir@1.0.2:
     resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==}
     dev: true
 
-  /app-root-path/3.1.0:
+  /app-root-path@3.1.0:
     resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==}
     engines: {node: '>= 6.0.0'}
     dev: false
 
-  /append-buffer/1.0.2:
+  /append-buffer@1.0.2:
     resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       buffer-equal: 1.0.1
     dev: false
 
-  /aproba/2.0.0:
+  /aproba@2.0.0:
     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
 
-  /arch/2.2.0:
+  /arch@2.2.0:
     resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
 
-  /archiver-utils/2.1.0:
+  /archiver-utils@2.1.0:
     resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==}
     engines: {node: '>= 6'}
     dependencies:
@@ -7291,7 +7737,7 @@ packages:
       readable-stream: 2.3.7
     dev: false
 
-  /archiver/5.3.1:
+  /archiver@5.3.1:
     resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==}
     engines: {node: '>= 10'}
     dependencies:
@@ -7304,18 +7750,18 @@ packages:
       zip-stream: 4.1.0
     dev: false
 
-  /archy/1.0.0:
+  /archy@1.0.0:
     resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==}
     dev: false
 
-  /are-we-there-yet/2.0.0:
+  /are-we-there-yet@2.0.0:
     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
     engines: {node: '>=10'}
     dependencies:
       delegates: 1.0.0
       readable-stream: 3.6.0
 
-  /are-we-there-yet/3.0.1:
+  /are-we-there-yet@3.0.1:
     resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -7323,63 +7769,63 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
-  /arg/5.0.2:
+  /arg@5.0.2:
     resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
     dev: true
 
-  /argparse/1.0.10:
+  /argparse@1.0.10:
     resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
     dependencies:
       sprintf-js: 1.0.3
 
-  /argparse/2.0.1:
+  /argparse@2.0.1:
     resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 
-  /aria-query/5.1.3:
+  /aria-query@5.1.3:
     resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
     dependencies:
       deep-equal: 2.2.0
     dev: true
 
-  /arr-diff/4.0.0:
+  /arr-diff@4.0.0:
     resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /arr-filter/1.1.2:
+  /arr-filter@1.1.2:
     resolution: {integrity: sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       make-iterator: 1.0.1
     dev: false
 
-  /arr-flatten/1.1.0:
+  /arr-flatten@1.1.0:
     resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /arr-map/2.0.2:
+  /arr-map@2.0.2:
     resolution: {integrity: sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       make-iterator: 1.0.1
     dev: false
 
-  /arr-union/3.1.0:
+  /arr-union@3.1.0:
     resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /array-each/1.0.1:
+  /array-each@1.0.1:
     resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /array-flatten/1.1.1:
+  /array-flatten@1.1.1:
     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
     dev: true
 
-  /array-includes/3.1.6:
+  /array-includes@3.1.6:
     resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -7390,7 +7836,7 @@ packages:
       is-string: 1.0.7
     dev: true
 
-  /array-initial/1.1.0:
+  /array-initial@1.1.0:
     resolution: {integrity: sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -7398,19 +7844,19 @@ packages:
       is-number: 4.0.0
     dev: false
 
-  /array-last/1.3.0:
+  /array-last@1.3.0:
     resolution: {integrity: sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-number: 4.0.0
     dev: false
 
-  /array-slice/1.1.0:
+  /array-slice@1.1.0:
     resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /array-sort/1.0.0:
+  /array-sort@1.0.0:
     resolution: {integrity: sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -7419,16 +7865,16 @@ packages:
       kind-of: 5.1.0
     dev: false
 
-  /array-union/2.1.0:
+  /array-union@2.1.0:
     resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
     engines: {node: '>=8'}
 
-  /array-unique/0.3.2:
+  /array-unique@0.3.2:
     resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /array.prototype.flat/1.3.1:
+  /array.prototype.flat@1.3.1:
     resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -7438,7 +7884,7 @@ packages:
       es-shim-unscopables: 1.0.0
     dev: true
 
-  /array.prototype.flatmap/1.3.1:
+  /array.prototype.flatmap@1.3.1:
     resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -7448,10 +7894,10 @@ packages:
       es-shim-unscopables: 1.0.0
     dev: true
 
-  /asap/2.0.6:
+  /asap@2.0.6:
     resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
 
-  /asn1.js/5.4.1:
+  /asn1.js@5.4.1:
     resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
     dependencies:
       bn.js: 4.12.0
@@ -7460,19 +7906,19 @@ packages:
       safer-buffer: 2.1.2
     dev: false
 
-  /asn1/0.2.6:
+  /asn1@0.2.6:
     resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
     dependencies:
       safer-buffer: 2.1.2
 
-  /assert-never/1.2.1:
+  /assert-never@1.2.1:
     resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
 
-  /assert-plus/1.0.0:
+  /assert-plus@1.0.0:
     resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
     engines: {node: '>=0.8'}
 
-  /assert/2.0.0:
+  /assert@2.0.0:
     resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
     dependencies:
       es6-object-assign: 1.1.0
@@ -7481,47 +7927,47 @@ packages:
       util: 0.12.5
     dev: true
 
-  /assertion-error/1.1.0:
+  /assertion-error@1.1.0:
     resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
     dev: true
 
-  /assign-symbols/1.0.0:
+  /assign-symbols@1.0.0:
     resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /ast-types/0.14.2:
+  /ast-types@0.14.2:
     resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
     engines: {node: '>=4'}
     dependencies:
       tslib: 2.5.0
     dev: true
 
-  /ast-types/0.15.2:
+  /ast-types@0.15.2:
     resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==}
     engines: {node: '>=4'}
     dependencies:
       tslib: 2.5.0
     dev: true
 
-  /ast-types/0.16.1:
+  /ast-types@0.16.1:
     resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
     engines: {node: '>=4'}
     dependencies:
       tslib: 2.5.0
     dev: true
 
-  /astral-regex/2.0.0:
+  /astral-regex@2.0.0:
     resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
     engines: {node: '>=8'}
     dev: true
 
-  /astring/1.8.4:
+  /astring@1.8.4:
     resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==}
     hasBin: true
     dev: true
 
-  /async-done/1.3.2:
+  /async-done@1.3.2:
     resolution: {integrity: sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -7530,44 +7976,44 @@ packages:
       process-nextick-args: 2.0.1
       stream-exhaust: 1.0.2
 
-  /async-limiter/1.0.1:
+  /async-limiter@1.0.1:
     resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
     dev: true
 
-  /async-settle/1.0.0:
+  /async-settle@1.0.0:
     resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==}
     engines: {node: '>= 0.10'}
     dependencies:
       async-done: 1.3.2
     dev: false
 
-  /async/3.2.4:
+  /async@3.2.4:
     resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
 
-  /asynckit/0.4.0:
+  /asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
 
-  /at-least-node/1.0.0:
+  /at-least-node@1.0.0:
     resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
     engines: {node: '>= 4.0.0'}
     dev: true
 
-  /atob/2.1.2:
+  /atob@2.1.2:
     resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
     engines: {node: '>= 4.5.0'}
     dev: false
 
-  /atomic-sleep/1.0.0:
+  /atomic-sleep@1.0.0:
     resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
     engines: {node: '>=8.0.0'}
     dev: false
 
-  /autobind-decorator/2.4.0:
+  /autobind-decorator@2.4.0:
     resolution: {integrity: sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw==}
     engines: {node: '>=8.10', npm: '>=6.4.1'}
     dev: false
 
-  /autoprefixer/6.7.7:
+  /autoprefixer@6.7.7:
     resolution: {integrity: sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ==}
     dependencies:
       browserslist: 1.7.7
@@ -7578,32 +8024,32 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /autosize/5.0.2:
+  /autosize@5.0.2:
     resolution: {integrity: sha512-FPVt5ynkqUAA9gcMZnJHka1XfQgr1WNd/yRfIjmj5WGmjua+u5Hl9hn8M2nU5CNy2bEIcj1ZUwXq7IOHsfZG9w==}
     dev: false
 
-  /autwh/0.1.0:
+  /autwh@0.1.0:
     resolution: {integrity: sha512-IkGZ4kjVlZMkEmDiVtZpGG3lDGHPqsMBIh4IpQKN7idYOJ5EGedqKPO+ychNqh8zrJEEqYsN0NcBkcmoE2uFAw==}
     dependencies:
       oauth: 0.9.15
     dev: false
 
-  /available-typed-arrays/1.0.5:
+  /available-typed-arrays@1.0.5:
     resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
     engines: {node: '>= 0.4'}
     dev: true
 
-  /avvio/8.2.0:
+  /avvio@8.2.0:
     resolution: {integrity: sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==}
     dependencies:
       archy: 1.0.0
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       fastq: 1.15.0
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /aws-sdk-client-mock/2.1.1:
+  /aws-sdk-client-mock@2.1.1:
     resolution: {integrity: sha512-UuxXmICU4nmXTRm2BzLZdXmnyI+5NEBb5McRDkObasXVxXChvLm0Ci/PGENh4sCD+Es64SJiz70mtY48JROk0A==}
     dependencies:
       '@types/sinon': 10.0.13
@@ -7611,30 +8057,30 @@ packages:
       tslib: 2.5.0
     dev: true
 
-  /aws-sign2/0.7.0:
+  /aws-sign2@0.7.0:
     resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
 
-  /aws4/1.12.0:
+  /aws4@1.12.0:
     resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
 
-  /axios/0.24.0:
+  /axios@0.24.0:
     resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==}
     dependencies:
-      follow-redirects: 1.15.2
+      follow-redirects: 1.15.2(debug@4.3.4)
     transitivePeerDependencies:
       - debug
     dev: false
 
-  /axios/0.27.2_debug@4.3.4:
+  /axios@0.27.2(debug@4.3.4):
     resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
     dependencies:
-      follow-redirects: 1.15.2_debug@4.3.4
+      follow-redirects: 1.15.2(debug@4.3.4)
       form-data: 4.0.0
     transitivePeerDependencies:
       - debug
     dev: true
 
-  /babel-core/7.0.0-bridge.0_@babel+core@7.21.3:
+  /babel-core@7.0.0-bridge.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -7642,7 +8088,7 @@ packages:
       '@babel/core': 7.21.3
     dev: true
 
-  /babel-jest/29.5.0_@babel+core@7.21.3:
+  /babel-jest@29.5.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -7652,7 +8098,7 @@ packages:
       '@jest/transform': 29.5.0
       '@types/babel__core': 7.20.0
       babel-plugin-istanbul: 6.1.1
-      babel-preset-jest: 29.5.0_@babel+core@7.21.3
+      babel-preset-jest: 29.5.0(@babel/core@7.21.3)
       chalk: 4.1.2
       graceful-fs: 4.2.11
       slash: 3.0.0
@@ -7660,7 +8106,7 @@ packages:
       - supports-color
     dev: true
 
-  /babel-plugin-istanbul/6.1.1:
+  /babel-plugin-istanbul@6.1.1:
     resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
     engines: {node: '>=8'}
     dependencies:
@@ -7673,7 +8119,7 @@ packages:
       - supports-color
     dev: true
 
-  /babel-plugin-jest-hoist/29.5.0:
+  /babel-plugin-jest-hoist@29.5.0:
     resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -7683,63 +8129,63 @@ packages:
       '@types/babel__traverse': 7.18.3
     dev: true
 
-  /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.3:
+  /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/compat-data': 7.20.10
       '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
       semver: 6.3.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3:
+  /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
       core-js-compat: 3.29.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3:
+  /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3):
     resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3:
+  /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.3):
     resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3
-      '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3
-      '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
     dev: true
 
-  /babel-preset-jest/29.5.0_@babel+core@7.21.3:
+  /babel-preset-jest@29.5.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -7747,16 +8193,16 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       babel-plugin-jest-hoist: 29.5.0
-      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3
+      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
     dev: true
 
-  /babel-walk/3.0.0-canary-5:
+  /babel-walk@3.0.0-canary-5:
     resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
     engines: {node: '>= 10.0.0'}
     dependencies:
       '@babel/types': 7.21.3
 
-  /bach/1.2.0:
+  /bach@1.2.0:
     resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -7771,14 +8217,21 @@ packages:
       now-and-later: 2.0.1
     dev: false
 
-  /balanced-match/0.4.2:
+  /bail@2.0.2:
+    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+    dev: true
+
+  /balanced-match@0.4.2:
     resolution: {integrity: sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==}
     dev: false
 
-  /balanced-match/1.0.2:
+  /balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 
-  /base/0.11.2:
+  /base64-js@1.5.1:
+    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+  /base@0.11.2:
     resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -7791,30 +8244,27 @@ packages:
       pascalcase: 0.1.1
     dev: false
 
-  /base64-js/1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
-  /bcrypt-pbkdf/1.0.2:
+  /bcrypt-pbkdf@1.0.2:
     resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
     dependencies:
       tweetnacl: 0.14.5
 
-  /bcryptjs/2.4.3:
+  /bcryptjs@2.4.3:
     resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
     dev: false
 
-  /better-opn/2.1.1:
+  /better-opn@2.1.1:
     resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==}
     engines: {node: '>8.0.0'}
     dependencies:
       open: 7.4.2
     dev: true
 
-  /big-integer/1.6.51:
+  /big-integer@1.6.51:
     resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
     engines: {node: '>=0.6'}
 
-  /bin-check/4.1.0:
+  /bin-check@4.1.0:
     resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
     engines: {node: '>=4'}
     dependencies:
@@ -7822,7 +8272,7 @@ packages:
       executable: 4.1.1
     dev: false
 
-  /bin-version-check/5.0.0:
+  /bin-version-check@5.0.0:
     resolution: {integrity: sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==}
     engines: {node: '>=12'}
     dependencies:
@@ -7831,7 +8281,7 @@ packages:
       semver-truncate: 2.0.0
     dev: false
 
-  /bin-version/6.0.0:
+  /bin-version@6.0.0:
     resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==}
     engines: {node: '>=12'}
     dependencies:
@@ -7839,50 +8289,50 @@ packages:
       find-versions: 5.1.0
     dev: false
 
-  /binary-extensions/2.2.0:
+  /binary-extensions@2.2.0:
     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
     engines: {node: '>=8'}
 
-  /binary/0.3.0:
+  /binary@0.3.0:
     resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==}
     dependencies:
       buffers: 0.1.1
       chainsaw: 0.1.0
     dev: false
 
-  /binaryextensions/2.3.0:
+  /binaryextensions@2.3.0:
     resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
     engines: {node: '>=0.8'}
     dev: false
 
-  /bl/4.1.0:
+  /bl@4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
     dependencies:
       buffer: 5.7.1
       inherits: 2.0.4
       readable-stream: 3.6.0
 
-  /blob-util/2.0.2:
+  /blob-util@2.0.2:
     resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
     dev: true
 
-  /bluebird/3.4.7:
+  /bluebird@3.4.7:
     resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==}
     dev: false
 
-  /bluebird/3.7.2:
+  /bluebird@3.7.2:
     resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
     dev: true
 
-  /blurhash/2.0.5:
+  /blurhash@2.0.5:
     resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==}
     dev: false
 
-  /bn.js/4.12.0:
+  /bn.js@4.12.0:
     resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
     dev: false
 
-  /body-parser/1.20.1:
+  /body-parser@1.20.1:
     resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
     dependencies:
@@ -7902,14 +8352,14 @@ packages:
       - supports-color
     dev: true
 
-  /boolbase/1.0.0:
+  /boolbase@1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
-  /bowser/2.11.0:
+  /bowser@2.11.0:
     resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
     dev: false
 
-  /boxen/5.1.2:
+  /boxen@5.1.2:
     resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -7923,25 +8373,25 @@ packages:
       wrap-ansi: 7.0.0
     dev: true
 
-  /bplist-parser/0.2.0:
+  /bplist-parser@0.2.0:
     resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
     engines: {node: '>= 5.10.0'}
     dependencies:
       big-integer: 1.6.51
     dev: true
 
-  /brace-expansion/1.1.11:
+  /brace-expansion@1.1.11:
     resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  /brace-expansion/2.0.1:
+  /brace-expansion@2.0.1:
     resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
     dependencies:
       balanced-match: 1.0.2
 
-  /braces/2.3.2:
+  /braces@2.3.2:
     resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -7959,13 +8409,13 @@ packages:
       - supports-color
     dev: false
 
-  /braces/3.0.2:
+  /braces@3.0.2:
     resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
     engines: {node: '>=8'}
     dependencies:
       fill-range: 7.0.1
 
-  /broadcast-channel/4.20.2:
+  /broadcast-channel@4.20.2:
     resolution: {integrity: sha512-v0lJgMzC+MX4e2KCFWYXChZ2mKTqm5mnJGId6tqJp3NfylggbNd8c2uKeP4MQxD2ucKOesY68aN98zwl9d6Tvg==}
     dependencies:
       '@babel/runtime': 7.20.7
@@ -7975,17 +8425,17 @@ packages:
       unload: 2.4.1
     dev: false
 
-  /browser-assert/1.2.1:
+  /browser-assert@1.2.1:
     resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
     dev: true
 
-  /browserify-zlib/0.1.4:
+  /browserify-zlib@0.1.4:
     resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
     dependencies:
       pako: 0.2.9
     dev: true
 
-  /browserslist/1.7.7:
+  /browserslist@1.7.7:
     resolution: {integrity: sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==}
     deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
     hasBin: true
@@ -7994,7 +8444,7 @@ packages:
       electron-to-chromium: 1.4.284
     dev: false
 
-  /browserslist/4.21.5:
+  /browserslist@4.21.5:
     resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
@@ -8002,66 +8452,66 @@ packages:
       caniuse-lite: 1.0.30001468
       electron-to-chromium: 1.4.284
       node-releases: 2.0.8
-      update-browserslist-db: 1.0.10_browserslist@4.21.5
+      update-browserslist-db: 1.0.10(browserslist@4.21.5)
     dev: true
 
-  /bser/2.1.1:
+  /bser@2.1.1:
     resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
     dependencies:
       node-int64: 0.4.0
     dev: true
 
-  /buffer-crc32/0.2.13:
+  /buffer-crc32@0.2.13:
     resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
 
-  /buffer-equal-constant-time/1.0.1:
+  /buffer-equal-constant-time@1.0.1:
     resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
     dev: false
 
-  /buffer-equal/1.0.1:
+  /buffer-equal@1.0.1:
     resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==}
     engines: {node: '>=0.4'}
     dev: false
 
-  /buffer-from/1.1.2:
+  /buffer-from@1.1.2:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
 
-  /buffer-indexof-polyfill/1.0.2:
+  /buffer-indexof-polyfill@1.0.2:
     resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==}
     engines: {node: '>=0.10'}
     dev: false
 
-  /buffer-writer/2.0.0:
+  /buffer-writer@2.0.0:
     resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==}
     engines: {node: '>=4'}
     dev: false
 
-  /buffer/5.6.0:
+  /buffer@5.6.0:
     resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==}
     dependencies:
       base64-js: 1.5.1
       ieee754: 1.2.1
     dev: false
 
-  /buffer/5.7.1:
+  /buffer@5.7.1:
     resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
     dependencies:
       base64-js: 1.5.1
       ieee754: 1.2.1
 
-  /buffer/6.0.3:
+  /buffer@6.0.3:
     resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
     dependencies:
       base64-js: 1.5.1
       ieee754: 1.2.1
     dev: false
 
-  /buffers/0.1.1:
+  /buffers@0.1.1:
     resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==}
     engines: {node: '>=0.2.0'}
     dev: false
 
-  /bufferutil/4.0.7:
+  /bufferutil@4.0.7:
     resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==}
     engines: {node: '>=6.14.2'}
     requiresBuild: true
@@ -8069,7 +8519,7 @@ packages:
       node-gyp-build: 4.6.0
     dev: false
 
-  /bull/4.10.4:
+  /bull@4.10.4:
     resolution: {integrity: sha512-o9m/7HjS/Or3vqRd59evBlWCXd9Lp+ALppKseoSKHaykK46SmRjAilX98PgmOz1yeVaurt8D5UtvEt4bUjM3eA==}
     engines: {node: '>=12'}
     dependencies:
@@ -8084,24 +8534,24 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /busboy/1.6.0:
+  /busboy@1.6.0:
     resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
     engines: {node: '>=10.16.0'}
     dependencies:
       streamsearch: 1.1.0
     dev: false
 
-  /bytes/3.0.0:
+  /bytes@3.0.0:
     resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /bytes/3.1.2:
+  /bytes@3.1.2:
     resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /c8/7.13.0:
+  /c8@7.13.0:
     resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==}
     engines: {node: '>=10.12.0'}
     hasBin: true
@@ -8120,12 +8570,12 @@ packages:
       yargs-parser: 20.2.9
     dev: true
 
-  /cac/6.7.14:
+  /cac@6.7.14:
     resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
     engines: {node: '>=8'}
     dev: true
 
-  /cacache/16.1.3:
+  /cacache@16.1.3:
     resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -8151,7 +8601,7 @@ packages:
       - bluebird
     dev: false
 
-  /cache-base/1.0.1:
+  /cache-base@1.0.1:
     resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -8166,21 +8616,21 @@ packages:
       unset-value: 1.0.0
     dev: false
 
-  /cacheable-lookup/5.0.4:
+  /cacheable-lookup@5.0.4:
     resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
     engines: {node: '>=10.6.0'}
     dev: false
 
-  /cacheable-lookup/6.1.0:
+  /cacheable-lookup@6.1.0:
     resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==}
     engines: {node: '>=10.6.0'}
     dev: false
 
-  /cacheable-lookup/7.0.0:
+  /cacheable-lookup@7.0.0:
     resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
     engines: {node: '>=14.16'}
 
-  /cacheable-request/10.2.8:
+  /cacheable-request@10.2.8:
     resolution: {integrity: sha512-IDVO5MJ4LItE6HKFQTqT2ocAQsisOoCTUDu1ddCmnhyiwFQjXNPp4081Xj23N4tO+AFEFNzGuNEf/c8Gwwt15A==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -8192,7 +8642,7 @@ packages:
       normalize-url: 8.0.0
       responselike: 3.0.0
 
-  /cacheable-request/7.0.2:
+  /cacheable-request@7.0.2:
     resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==}
     engines: {node: '>=8'}
     dependencies:
@@ -8205,37 +8655,37 @@ packages:
       responselike: 2.0.1
     dev: false
 
-  /cachedir/2.3.0:
+  /cachedir@2.3.0:
     resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
     engines: {node: '>=6'}
     dev: true
 
-  /call-bind/1.0.2:
+  /call-bind@1.0.2:
     resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
     dependencies:
       function-bind: 1.1.1
       get-intrinsic: 1.2.0
 
-  /callsites/3.1.0:
+  /callsites@3.1.0:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
     engines: {node: '>=6'}
     dev: true
 
-  /camelcase/3.0.0:
+  /camelcase@3.0.0:
     resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /camelcase/5.3.1:
+  /camelcase@5.3.1:
     resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
     engines: {node: '>=6'}
 
-  /camelcase/6.3.0:
+  /camelcase@6.3.0:
     resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
     engines: {node: '>=10'}
     dev: true
 
-  /caniuse-api/1.6.1:
+  /caniuse-api@1.6.1:
     resolution: {integrity: sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q==}
     dependencies:
       browserslist: 1.7.7
@@ -8244,32 +8694,32 @@ packages:
       lodash.uniq: 4.5.0
     dev: false
 
-  /caniuse-db/1.0.30001443:
+  /caniuse-db@1.0.30001443:
     resolution: {integrity: sha512-4KKthVYyooNIOhO1w0OJ13EhEwOGECMrZdkeyDydhvYXaTDA3WdhR8amoJnAgpSgcCR26aOAWk6N9ANVYlv2oQ==}
     dev: false
 
-  /caniuse-lite/1.0.30001468:
+  /caniuse-lite@1.0.30001468:
     resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==}
     dev: true
 
-  /canonicalize/1.0.8:
+  /canonicalize@1.0.8:
     resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==}
     dev: false
 
-  /canvas-confetti/1.6.0:
+  /canvas-confetti@1.6.0:
     resolution: {integrity: sha512-ej+w/m8Jzpv9Z7W7uJZer14Ke8P2ogsjg4ZMGIuq4iqUOqY2Jq8BNW42iGmNfRwREaaEfFIczLuZZiEVSYNHAA==}
     dev: false
 
-  /caseless/0.12.0:
+  /caseless@0.12.0:
     resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
 
-  /cbor/8.1.0:
+  /cbor@8.1.0:
     resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==}
     engines: {node: '>=12.19'}
     dependencies:
       nofilter: 3.1.0
 
-  /chai/4.3.7:
+  /chai@4.3.7:
     resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
     engines: {node: '>=4'}
     dependencies:
@@ -8282,20 +8732,20 @@ packages:
       type-detect: 4.0.8
     dev: true
 
-  /chainsaw/0.1.0:
+  /chainsaw@0.1.0:
     resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==}
     dependencies:
       traverse: 0.3.9
     dev: false
 
-  /chalk-template/0.4.0:
+  /chalk-template@0.4.0:
     resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==}
     engines: {node: '>=12'}
     dependencies:
       chalk: 4.1.2
     dev: false
 
-  /chalk/1.1.3:
+  /chalk@1.1.3:
     resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -8306,7 +8756,7 @@ packages:
       supports-color: 2.0.0
     dev: false
 
-  /chalk/2.4.2:
+  /chalk@2.4.2:
     resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
     engines: {node: '>=4'}
     dependencies:
@@ -8315,7 +8765,7 @@ packages:
       supports-color: 5.5.0
     dev: true
 
-  /chalk/3.0.0:
+  /chalk@3.0.0:
     resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
     engines: {node: '>=8'}
     dependencies:
@@ -8323,7 +8773,7 @@ packages:
       supports-color: 7.2.0
     dev: true
 
-  /chalk/4.1.1:
+  /chalk@4.1.1:
     resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
     engines: {node: '>=10'}
     dependencies:
@@ -8331,51 +8781,51 @@ packages:
       supports-color: 7.2.0
     dev: true
 
-  /chalk/4.1.2:
+  /chalk@4.1.2:
     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
     engines: {node: '>=10'}
     dependencies:
       ansi-styles: 4.3.0
       supports-color: 7.2.0
 
-  /chalk/5.2.0:
+  /chalk@5.2.0:
     resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
     engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
     dev: false
 
-  /char-regex/1.0.2:
+  /char-regex@1.0.2:
     resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
     engines: {node: '>=10'}
 
-  /character-entities-legacy/1.1.4:
+  /character-entities-legacy@1.1.4:
     resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
     dev: true
 
-  /character-entities/1.2.4:
+  /character-entities@1.2.4:
     resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
     dev: true
 
-  /character-parser/2.2.0:
+  /character-parser@2.2.0:
     resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
     dependencies:
       is-regex: 1.1.4
 
-  /character-reference-invalid/1.1.4:
+  /character-reference-invalid@1.1.4:
     resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
     dev: true
 
-  /chardet/0.7.0:
+  /chardet@0.7.0:
     resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
     dev: true
 
-  /chart.js/4.2.1:
+  /chart.js@4.2.1:
     resolution: {integrity: sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==}
     engines: {pnpm: ^7.0.0}
     dependencies:
       '@kurkle/color': 0.3.2
     dev: false
 
-  /chartjs-adapter-date-fns/3.0.0_rid3rx6orfiwps7kg2r43n6mvu:
+  /chartjs-adapter-date-fns@3.0.0(chart.js@4.2.1)(date-fns@2.29.3):
     resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==}
     peerDependencies:
       chart.js: '>=2.8.0'
@@ -8385,7 +8835,7 @@ packages:
       date-fns: 2.29.3
     dev: false
 
-  /chartjs-chart-matrix/2.0.1_chart.js@4.2.1:
+  /chartjs-chart-matrix@2.0.1(chart.js@4.2.1):
     resolution: {integrity: sha512-BGfeY+/PHnITyDlc7WfnKJ1RyOfgOzIqWp/gxzzl7pUjyoGzHDcw51qd2xJF9gdT9Def7ZwOnOMm8GJUXDxI0w==}
     peerDependencies:
       chart.js: '>=3.0.0'
@@ -8393,7 +8843,7 @@ packages:
       chart.js: 4.2.1
     dev: false
 
-  /chartjs-plugin-gradient/0.6.1_chart.js@4.2.1:
+  /chartjs-plugin-gradient@0.6.1(chart.js@4.2.1):
     resolution: {integrity: sha512-TGHNIh8KqQMLdb+UfY80cBHYRyOC47eeokmgkeajRdKGbFt462lJiyiq4ZJ25fiM7BGsmzoBLhmVyEw4B3gQxw==}
     peerDependencies:
       chart.js: '>=2.6.0'
@@ -8401,7 +8851,7 @@ packages:
       chart.js: 4.2.1
     dev: false
 
-  /chartjs-plugin-zoom/2.0.0_chart.js@4.2.1:
+  /chartjs-plugin-zoom@2.0.0(chart.js@4.2.1):
     resolution: {integrity: sha512-bqpi7DGy9a5hX7ThKl/xQaLzXvneSwhS0w/lNimZ8AJaoRVMKz5JfUoqwciJYV5ixKXJbgyvwC9HcJnyVsYmjg==}
     peerDependencies:
       chart.js: '>=3.2.0'
@@ -8410,16 +8860,16 @@ packages:
       hammerjs: 2.0.8
     dev: false
 
-  /check-error/1.0.2:
+  /check-error@1.0.2:
     resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
     dev: true
 
-  /check-more-types/2.24.0:
+  /check-more-types@2.24.0:
     resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
     engines: {node: '>= 0.8.0'}
     dev: true
 
-  /cheerio-select/2.1.0:
+  /cheerio-select@2.1.0:
     resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
     dependencies:
       boolbase: 1.0.0
@@ -8429,7 +8879,7 @@ packages:
       domhandler: 5.0.3
       domutils: 3.0.1
 
-  /cheerio/1.0.0-rc.12:
+  /cheerio@1.0.0-rc.12:
     resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
     engines: {node: '>= 6'}
     dependencies:
@@ -8441,7 +8891,7 @@ packages:
       parse5: 7.1.2
       parse5-htmlparser2-tree-adapter: 7.0.0
 
-  /chokidar/3.5.3:
+  /chokidar@3.5.3:
     resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
     engines: {node: '>= 8.10.0'}
     dependencies:
@@ -8455,30 +8905,30 @@ packages:
     optionalDependencies:
       fsevents: 2.3.2
 
-  /chownr/1.1.4:
+  /chownr@1.1.4:
     resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
 
-  /chownr/2.0.0:
+  /chownr@2.0.0:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
     engines: {node: '>=10'}
 
-  /ci-info/3.7.1:
+  /ci-info@3.7.1:
     resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
     engines: {node: '>=8'}
     dev: true
 
-  /cjs-module-lexer/1.2.2:
+  /cjs-module-lexer@1.2.2:
     resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==}
     dev: true
 
-  /clap/1.2.3:
+  /clap@1.2.3:
     resolution: {integrity: sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       chalk: 1.1.3
     dev: false
 
-  /class-utils/0.3.6:
+  /class-utils@0.3.6:
     resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -8488,23 +8938,23 @@ packages:
       static-extend: 0.1.2
     dev: false
 
-  /clean-stack/2.2.0:
+  /clean-stack@2.2.0:
     resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
     engines: {node: '>=6'}
 
-  /cli-boxes/2.2.1:
+  /cli-boxes@2.2.1:
     resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
     engines: {node: '>=6'}
     dev: true
 
-  /cli-cursor/3.1.0:
+  /cli-cursor@3.1.0:
     resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
     engines: {node: '>=8'}
     dependencies:
       restore-cursor: 3.1.0
     dev: true
 
-  /cli-highlight/2.1.11:
+  /cli-highlight@2.1.11:
     resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==}
     engines: {node: '>=8.0.0', npm: '>=5.0.0'}
     dependencies:
@@ -8516,12 +8966,12 @@ packages:
       yargs: 16.2.0
     dev: false
 
-  /cli-spinners/2.7.0:
+  /cli-spinners@2.7.0:
     resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
     engines: {node: '>=6'}
     dev: true
 
-  /cli-table3/0.6.3:
+  /cli-table3@0.6.3:
     resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
     engines: {node: 10.* || >= 12.*}
     dependencies:
@@ -8530,7 +8980,7 @@ packages:
       '@colors/colors': 1.5.0
     dev: true
 
-  /cli-truncate/2.1.0:
+  /cli-truncate@2.1.0:
     resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
     engines: {node: '>=8'}
     dependencies:
@@ -8538,7 +8988,7 @@ packages:
       string-width: 4.2.3
     dev: true
 
-  /cli-truncate/3.1.0:
+  /cli-truncate@3.1.0:
     resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
@@ -8546,12 +8996,12 @@ packages:
       string-width: 5.1.2
     dev: true
 
-  /cli-width/3.0.0:
+  /cli-width@3.0.0:
     resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
     engines: {node: '>= 10'}
     dev: true
 
-  /cliui/3.2.0:
+  /cliui@3.2.0:
     resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
     dependencies:
       string-width: 1.0.2
@@ -8559,7 +9009,7 @@ packages:
       wrap-ansi: 2.1.0
     dev: false
 
-  /cliui/6.0.0:
+  /cliui@6.0.0:
     resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
     dependencies:
       string-width: 4.2.3
@@ -8567,14 +9017,14 @@ packages:
       wrap-ansi: 6.2.0
     dev: false
 
-  /cliui/7.0.4:
+  /cliui@7.0.4:
     resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
     dependencies:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
 
-  /cliui/8.0.1:
+  /cliui@8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -8582,12 +9032,12 @@ packages:
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
 
-  /clone-buffer/1.0.0:
+  /clone-buffer@1.0.0:
     resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /clone-deep/4.0.1:
+  /clone-deep@4.0.1:
     resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -8596,26 +9046,26 @@ packages:
       shallow-clone: 3.0.1
     dev: true
 
-  /clone-response/1.0.3:
+  /clone-response@1.0.3:
     resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
     dependencies:
       mimic-response: 1.0.1
     dev: false
 
-  /clone-stats/1.0.0:
+  /clone-stats@1.0.0:
     resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
     dev: false
 
-  /clone/1.0.4:
+  /clone@1.0.4:
     resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
     engines: {node: '>=0.8'}
 
-  /clone/2.1.2:
+  /clone@2.1.2:
     resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
     engines: {node: '>=0.8'}
     dev: false
 
-  /cloneable-readable/1.1.3:
+  /cloneable-readable@1.1.3:
     resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
     dependencies:
       inherits: 2.0.4
@@ -8623,37 +9073,37 @@ packages:
       readable-stream: 2.3.7
     dev: false
 
-  /cluster-key-slot/1.1.1:
+  /cluster-key-slot@1.1.1:
     resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /cluster-key-slot/1.1.2:
+  /cluster-key-slot@1.1.2:
     resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
     engines: {node: '>=0.10.0'}
 
-  /co/4.6.0:
+  /co@4.6.0:
     resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
     engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
     dev: true
 
-  /coa/1.0.4:
+  /coa@1.0.4:
     resolution: {integrity: sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==}
     engines: {node: '>= 0.8.0'}
     dependencies:
       q: 1.5.1
     dev: false
 
-  /code-point-at/1.1.0:
+  /code-point-at@1.1.0:
     resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /collect-v8-coverage/1.0.1:
+  /collect-v8-coverage@1.0.1:
     resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==}
     dev: true
 
-  /collection-map/1.0.0:
+  /collection-map@1.0.0:
     resolution: {integrity: sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -8662,7 +9112,7 @@ packages:
       make-iterator: 1.0.1
     dev: false
 
-  /collection-visit/1.0.0:
+  /collection-visit@1.0.0:
     resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -8670,41 +9120,41 @@ packages:
       object-visit: 1.0.1
     dev: false
 
-  /color-convert/1.9.3:
+  /color-convert@1.9.3:
     resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
     dependencies:
       color-name: 1.1.3
 
-  /color-convert/2.0.1:
+  /color-convert@2.0.1:
     resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
     engines: {node: '>=7.0.0'}
     dependencies:
       color-name: 1.1.4
 
-  /color-name/1.1.3:
+  /color-name@1.1.3:
     resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
 
-  /color-name/1.1.4:
+  /color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
 
-  /color-string/0.3.0:
+  /color-string@0.3.0:
     resolution: {integrity: sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==}
     dependencies:
       color-name: 1.1.4
     dev: false
 
-  /color-string/1.9.1:
+  /color-string@1.9.1:
     resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
     dependencies:
       color-name: 1.1.4
       simple-swizzle: 0.2.2
     dev: false
 
-  /color-support/1.1.3:
+  /color-support@1.1.3:
     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
     hasBin: true
 
-  /color/0.11.4:
+  /color@0.11.4:
     resolution: {integrity: sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==}
     dependencies:
       clone: 1.0.4
@@ -8712,7 +9162,7 @@ packages:
       color-string: 0.3.0
     dev: false
 
-  /color/4.2.3:
+  /color@4.2.3:
     resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
     engines: {node: '>=12.5.0'}
     dependencies:
@@ -8720,11 +9170,11 @@ packages:
       color-string: 1.9.1
     dev: false
 
-  /colorette/2.0.19:
+  /colorette@2.0.19:
     resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
     dev: true
 
-  /colormin/1.1.2:
+  /colormin@1.1.2:
     resolution: {integrity: sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ==}
     dependencies:
       color: 0.11.4
@@ -8732,62 +9182,62 @@ packages:
       has: 1.0.3
     dev: false
 
-  /colors/1.1.2:
+  /colors@1.1.2:
     resolution: {integrity: sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==}
     engines: {node: '>=0.1.90'}
     dev: false
 
-  /combined-stream/1.0.8:
+  /combined-stream@1.0.8:
     resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     engines: {node: '>= 0.8'}
     dependencies:
       delayed-stream: 1.0.0
 
-  /comma-separated-tokens/1.0.8:
+  /comma-separated-tokens@1.0.8:
     resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
     dev: true
 
-  /commander/2.20.3:
+  /commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
-  /commander/5.1.0:
+  /commander@5.1.0:
     resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
     engines: {node: '>= 6'}
     dev: true
 
-  /commander/6.2.1:
+  /commander@6.2.1:
     resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
     engines: {node: '>= 6'}
     dev: true
 
-  /commander/7.2.0:
+  /commander@7.2.0:
     resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
     engines: {node: '>= 10'}
     dev: false
 
-  /commander/9.5.0:
+  /commander@9.5.0:
     resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
     engines: {node: ^12.20.0 || >=14}
     dev: false
 
-  /common-tags/1.8.2:
+  /common-tags@1.8.2:
     resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
     engines: {node: '>=4.0.0'}
     dev: true
 
-  /commondir/1.0.1:
+  /commondir@1.0.1:
     resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
     dev: true
 
-  /compare-versions/5.0.1:
+  /compare-versions@5.0.1:
     resolution: {integrity: sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==}
     dev: false
 
-  /component-emitter/1.3.0:
+  /component-emitter@1.3.0:
     resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
     dev: false
 
-  /compress-commons/4.1.1:
+  /compress-commons@4.1.1:
     resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==}
     engines: {node: '>= 10'}
     dependencies:
@@ -8797,14 +9247,14 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
-  /compressible/2.0.18:
+  /compressible@2.0.18:
     resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-db: 1.52.0
     dev: true
 
-  /compression/1.7.4:
+  /compression@1.7.4:
     resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -8819,10 +9269,10 @@ packages:
       - supports-color
     dev: true
 
-  /concat-map/0.0.1:
+  /concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  /concat-stream/1.6.2:
+  /concat-stream@1.6.2:
     resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
     engines: {'0': node >= 0.8}
     dependencies:
@@ -8831,96 +9281,96 @@ packages:
       readable-stream: 2.3.7
       typedarray: 0.0.6
 
-  /config-chain/1.1.13:
+  /config-chain@1.1.13:
     resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
     dependencies:
       ini: 1.3.8
       proto-list: 1.2.4
     dev: true
 
-  /consola/2.15.3:
+  /consola@2.15.3:
     resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
     dev: false
 
-  /console-control-strings/1.1.0:
+  /console-control-strings@1.1.0:
     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
 
-  /constantinople/4.0.1:
+  /constantinople@4.0.1:
     resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
     dependencies:
       '@babel/parser': 7.21.3
       '@babel/types': 7.21.3
 
-  /content-disposition/0.5.4:
+  /content-disposition@0.5.4:
     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
     engines: {node: '>= 0.6'}
     dependencies:
       safe-buffer: 5.2.1
 
-  /content-type/1.0.5:
+  /content-type@1.0.5:
     resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /convert-source-map/1.9.0:
+  /convert-source-map@1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
 
-  /convert-source-map/2.0.0:
+  /convert-source-map@2.0.0:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
     dev: true
 
-  /cookie-signature/1.0.6:
+  /cookie-signature@1.0.6:
     resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
     dev: true
 
-  /cookie/0.4.2:
+  /cookie@0.4.2:
     resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /cookie/0.5.0:
+  /cookie@0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
 
-  /copy-descriptor/0.1.1:
+  /copy-descriptor@0.1.1:
     resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /copy-props/2.0.5:
+  /copy-props@2.0.5:
     resolution: {integrity: sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==}
     dependencies:
       each-props: 1.3.2
       is-plain-object: 5.0.0
     dev: false
 
-  /core-js-compat/3.29.1:
+  /core-js-compat@3.29.1:
     resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==}
     dependencies:
       browserslist: 4.21.5
     dev: true
 
-  /core-js/3.27.1:
+  /core-js@3.27.1:
     resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==}
     requiresBuild: true
     dev: false
 
-  /core-js/3.29.1:
+  /core-js@3.29.1:
     resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
     requiresBuild: true
 
-  /core-util-is/1.0.2:
+  /core-util-is@1.0.2:
     resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
 
-  /core-util-is/1.0.3:
+  /core-util-is@1.0.3:
     resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
 
-  /crc-32/1.2.2:
+  /crc-32@1.2.2:
     resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
     engines: {node: '>=0.8'}
     dev: false
 
-  /crc32-stream/4.0.2:
+  /crc32-stream@4.0.2:
     resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==}
     engines: {node: '>= 10'}
     dependencies:
@@ -8928,27 +9378,27 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
-  /cron-parser/4.7.1:
+  /cron-parser@4.7.1:
     resolution: {integrity: sha512-WguFaoQ0hQ61SgsCZLHUcNbAvlK0lypKXu62ARguefYmjzaOXIVRNrAmyXzabTwUn4sQvQLkk6bjH+ipGfw8bA==}
     engines: {node: '>=12.0.0'}
     dependencies:
       luxon: 3.2.1
 
-  /cropperjs/2.0.0-beta.2:
+  /cropperjs@2.0.0-beta.2:
     resolution: {integrity: sha512-jDRSODDGKmi9vp3p/+WXkxMqV/AE+GpSld1U3cHZDRdLy9UykRzurSe8k1dR0TExn45ygCMrv31qkg+K3EeXXw==}
     dependencies:
       '@cropper/elements': 2.0.0-beta.2
       '@cropper/utils': 2.0.0-beta.2
     dev: false
 
-  /cross-env/7.0.3:
+  /cross-env@7.0.3:
     resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
     engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
     dependencies:
       cross-spawn: 7.0.3
     dev: true
 
-  /cross-fetch/3.1.5:
+  /cross-fetch@3.1.5:
     resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==}
     dependencies:
       node-fetch: 2.6.7
@@ -8956,7 +9406,7 @@ packages:
       - encoding
     dev: true
 
-  /cross-spawn/5.1.0:
+  /cross-spawn@5.1.0:
     resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
     dependencies:
       lru-cache: 4.1.5
@@ -8964,7 +9414,7 @@ packages:
       which: 1.3.1
     dev: false
 
-  /cross-spawn/7.0.3:
+  /cross-spawn@7.0.3:
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     engines: {node: '>= 8'}
     dependencies:
@@ -8972,16 +9422,16 @@ packages:
       shebang-command: 2.0.0
       which: 2.0.2
 
-  /crypto-random-string/2.0.0:
+  /crypto-random-string@2.0.0:
     resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
     engines: {node: '>=8'}
     dev: true
 
-  /css-color-names/0.0.4:
+  /css-color-names@0.0.4:
     resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==}
     dev: false
 
-  /css-select/5.1.0:
+  /css-select@5.1.0:
     resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
     dependencies:
       boolbase: 1.0.0
@@ -8990,19 +9440,19 @@ packages:
       domutils: 3.0.1
       nth-check: 2.1.1
 
-  /css-what/6.1.0:
+  /css-what@6.1.0:
     resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
     engines: {node: '>= 6'}
 
-  /css.escape/1.5.1:
+  /css.escape@1.5.1:
     resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
 
-  /cssesc/3.0.0:
+  /cssesc@3.0.0:
     resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
     engines: {node: '>=4'}
     dev: true
 
-  /cssnano/3.10.0:
+  /cssnano@3.10.0:
     resolution: {integrity: sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg==}
     dependencies:
       autoprefixer: 6.7.7
@@ -9039,7 +9489,7 @@ packages:
       postcss-zindex: 2.2.0
     dev: false
 
-  /csso/2.3.2:
+  /csso@2.3.2:
     resolution: {integrity: sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -9047,45 +9497,45 @@ packages:
       source-map: 0.5.7
     dev: false
 
-  /cssom/0.3.8:
+  /cssom@0.3.8:
     resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
     dev: false
 
-  /cssom/0.5.0:
+  /cssom@0.5.0:
     resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
     dev: false
 
-  /cssstyle/2.3.0:
+  /cssstyle@2.3.0:
     resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
     engines: {node: '>=8'}
     dependencies:
       cssom: 0.3.8
     dev: false
 
-  /csstype/2.6.21:
+  /csstype@2.6.21:
     resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
 
-  /csstype/3.1.1:
+  /csstype@3.1.1:
     resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
 
-  /custom-event-polyfill/1.0.7:
+  /custom-event-polyfill@1.0.7:
     resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
     dev: false
 
-  /cwise-compiler/1.1.3:
+  /cwise-compiler@1.1.3:
     resolution: {integrity: sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==}
     dependencies:
       uniq: 1.0.1
     dev: false
 
-  /cypress/12.7.0:
+  /cypress@12.7.0:
     resolution: {integrity: sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA==}
     engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
     hasBin: true
     requiresBuild: true
     dependencies:
       '@cypress/request': 2.88.11
-      '@cypress/xvfb': 1.2.4_supports-color@8.1.1
+      '@cypress/xvfb': 1.2.4(supports-color@8.1.1)
       '@types/node': 14.18.36
       '@types/sinonjs__fake-timers': 8.1.1
       '@types/sizzle': 2.3.3
@@ -9101,19 +9551,19 @@ packages:
       commander: 5.1.0
       common-tags: 1.8.2
       dayjs: 1.11.7
-      debug: 4.3.4_supports-color@8.1.1
+      debug: 4.3.4(supports-color@8.1.1)
       enquirer: 2.3.6
       eventemitter2: 6.4.7
       execa: 4.1.0
       executable: 4.1.1
-      extract-zip: 2.0.1_supports-color@8.1.1
+      extract-zip: 2.0.1(supports-color@8.1.1)
       figures: 3.2.0
       fs-extra: 9.1.0
       getos: 3.2.1
       is-ci: 3.0.1
       is-installed-globally: 0.4.0
       lazy-ass: 1.6.0
-      listr2: 3.14.0_enquirer@2.3.6
+      listr2: 3.14.0(enquirer@2.3.6)
       lodash: 4.17.21
       log-symbols: 4.1.0
       minimist: 1.2.7
@@ -9128,28 +9578,28 @@ packages:
       yauzl: 2.10.0
     dev: true
 
-  /d/1.0.1:
+  /d@1.0.1:
     resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
     dependencies:
       es5-ext: 0.10.62
       type: 1.2.0
     dev: false
 
-  /dashdash/1.14.1:
+  /dashdash@1.14.1:
     resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
     engines: {node: '>=0.10'}
     dependencies:
       assert-plus: 1.0.0
 
-  /data-uri-to-buffer/0.0.3:
+  /data-uri-to-buffer@0.0.3:
     resolution: {integrity: sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw==}
     dev: false
 
-  /data-uri-to-buffer/4.0.0:
+  /data-uri-to-buffer@4.0.0:
     resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
     engines: {node: '>= 12'}
 
-  /data-urls/3.0.2:
+  /data-urls@3.0.2:
     resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -9158,20 +9608,20 @@ packages:
       whatwg-url: 11.0.0
     dev: false
 
-  /date-fns/2.29.3:
+  /date-fns@2.29.3:
     resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==}
     engines: {node: '>=0.11'}
     dev: false
 
-  /dayjs/1.11.7:
+  /dayjs@1.11.7:
     resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
     dev: true
 
-  /de-indent/1.0.2:
+  /de-indent@1.0.2:
     resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
     dev: true
 
-  /debug/2.6.9:
+  /debug@2.6.9:
     resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
     peerDependencies:
       supports-color: '*'
@@ -9181,17 +9631,7 @@ packages:
     dependencies:
       ms: 2.0.0
 
-  /debug/3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: 2.1.3
-
-  /debug/3.2.7_supports-color@8.1.1:
+  /debug@3.2.7(supports-color@8.1.1):
     resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
     peerDependencies:
       supports-color: '*'
@@ -9201,20 +9641,8 @@ packages:
     dependencies:
       ms: 2.1.3
       supports-color: 8.1.1
-    dev: true
 
-  /debug/4.3.4:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: 2.1.2
-
-  /debug/4.3.4_supports-color@8.1.1:
+  /debug@4.3.4(supports-color@8.1.1):
     resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
     engines: {node: '>=6.0'}
     peerDependencies:
@@ -9225,21 +9653,20 @@ packages:
     dependencies:
       ms: 2.1.2
       supports-color: 8.1.1
-    dev: true
 
-  /debuglog/1.0.1:
+  /debuglog@1.0.1:
     resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==}
 
-  /decamelize/1.2.0:
+  /decamelize@1.2.0:
     resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /decimal.js/10.4.2:
+  /decimal.js@10.4.2:
     resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==}
     dev: false
 
-  /decode-bmp/0.2.1:
+  /decode-bmp@0.2.1:
     resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==}
     engines: {node: '>=8.6.0'}
     dependencies:
@@ -9247,7 +9674,7 @@ packages:
       to-data-view: 1.1.0
     dev: false
 
-  /decode-ico/0.4.1:
+  /decode-ico@0.4.1:
     resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==}
     engines: {node: '>=8.6'}
     dependencies:
@@ -9256,22 +9683,22 @@ packages:
       to-data-view: 1.1.0
     dev: false
 
-  /decode-uri-component/0.2.2:
+  /decode-uri-component@0.2.2:
     resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
     engines: {node: '>=0.10'}
     dev: false
 
-  /decompress-response/6.0.0:
+  /decompress-response@6.0.0:
     resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
     engines: {node: '>=10'}
     dependencies:
       mimic-response: 3.1.0
 
-  /dedent/0.7.0:
+  /dedent@0.7.0:
     resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
     dev: true
 
-  /deep-email-validator/0.1.21:
+  /deep-email-validator@0.1.21:
     resolution: {integrity: sha512-DBAmMzbr+MAubXQ+TS9tZuPwLcdKscb8YzKZiwoLqF3NmaeEgXvSSHhZ0EXOFeKFE2FNWC4mNXCyiQ/JdFXUwg==}
     dependencies:
       '@types/disposable-email-domains': 1.0.2
@@ -9282,14 +9709,14 @@ packages:
       - debug
     dev: false
 
-  /deep-eql/4.1.3:
+  /deep-eql@4.1.3:
     resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
     engines: {node: '>=6'}
     dependencies:
       type-detect: 4.0.8
     dev: true
 
-  /deep-equal/2.2.0:
+  /deep-equal@2.2.0:
     resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==}
     dependencies:
       call-bind: 1.0.2
@@ -9311,19 +9738,19 @@ packages:
       which-typed-array: 1.1.9
     dev: true
 
-  /deep-extend/0.6.0:
+  /deep-extend@0.6.0:
     resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
     engines: {node: '>=4.0.0'}
     dev: false
 
-  /deep-is/0.1.4:
+  /deep-is@0.1.4:
     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
 
-  /deepmerge/4.2.2:
+  /deepmerge@4.2.2:
     resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
     engines: {node: '>=0.10.0'}
 
-  /default-browser-id/3.0.0:
+  /default-browser-id@3.0.0:
     resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
     engines: {node: '>=12'}
     dependencies:
@@ -9331,55 +9758,55 @@ packages:
       untildify: 4.0.0
     dev: true
 
-  /default-compare/1.0.0:
+  /default-compare@1.0.0:
     resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 5.1.0
     dev: false
 
-  /default-resolution/2.0.0:
+  /default-resolution@2.0.0:
     resolution: {integrity: sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /defaults/1.0.4:
+  /defaults@1.0.4:
     resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
     dependencies:
       clone: 1.0.4
     dev: true
 
-  /defer-to-connect/2.0.1:
+  /defer-to-connect@2.0.1:
     resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
     engines: {node: '>=10'}
 
-  /define-lazy-prop/2.0.0:
+  /define-lazy-prop@2.0.0:
     resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
     engines: {node: '>=8'}
     dev: true
 
-  /define-properties/1.1.4:
+  /define-properties@1.1.4:
     resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-property-descriptors: 1.0.0
       object-keys: 1.1.1
 
-  /define-property/0.2.5:
+  /define-property@0.2.5:
     resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-descriptor: 0.1.6
     dev: false
 
-  /define-property/1.0.0:
+  /define-property@1.0.0:
     resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-descriptor: 1.0.2
     dev: false
 
-  /define-property/2.0.2:
+  /define-property@2.0.2:
     resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -9387,15 +9814,15 @@ packages:
       isobject: 3.0.1
     dev: false
 
-  /defined/1.0.1:
+  /defined@1.0.1:
     resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
     dev: false
 
-  /defu/6.1.2:
+  /defu@6.1.2:
     resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
     dev: true
 
-  /del/6.1.1:
+  /del@6.1.1:
     resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
     engines: {node: '>=10'}
     dependencies:
@@ -9409,177 +9836,177 @@ packages:
       slash: 3.0.0
     dev: true
 
-  /delayed-stream/1.0.0:
+  /delayed-stream@1.0.0:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
 
-  /delegates/1.0.0:
+  /delegates@1.0.0:
     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
 
-  /denque/1.5.1:
+  /denque@1.5.1:
     resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==}
     engines: {node: '>=0.10'}
     dev: false
 
-  /denque/2.1.0:
+  /denque@2.1.0:
     resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
     engines: {node: '>=0.10'}
 
-  /depd/1.1.2:
+  /depd@1.1.2:
     resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
     engines: {node: '>= 0.6'}
     dev: false
 
-  /depd/2.0.0:
+  /depd@2.0.0:
     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
     engines: {node: '>= 0.8'}
 
-  /dequal/2.0.3:
+  /dequal@2.0.3:
     resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
     engines: {node: '>=6'}
     dev: true
 
-  /destroy/1.2.0:
+  /destroy@1.2.0:
     resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
     dev: true
 
-  /detect-file/1.0.0:
+  /detect-file@1.0.0:
     resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /detect-indent/6.1.0:
+  /detect-indent@6.1.0:
     resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
     engines: {node: '>=8'}
     dev: true
 
-  /detect-libc/2.0.1:
+  /detect-libc@2.0.1:
     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
     engines: {node: '>=8'}
     dev: false
 
-  /detect-newline/3.1.0:
+  /detect-newline@3.1.0:
     resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
     engines: {node: '>=8'}
     dev: true
 
-  /detect-package-manager/2.0.1:
+  /detect-package-manager@2.0.1:
     resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==}
     engines: {node: '>=12'}
     dependencies:
       execa: 5.1.1
     dev: true
 
-  /detect-port/1.5.1:
+  /detect-port@1.5.1:
     resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==}
     hasBin: true
     dependencies:
       address: 1.2.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /diff-sequences/29.4.3:
+  /diff-sequences@29.4.3:
     resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
-  /diff/5.1.0:
+  /diff@5.1.0:
     resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
     engines: {node: '>=0.3.1'}
     dev: true
 
-  /dijkstrajs/1.0.2:
+  /dijkstrajs@1.0.2:
     resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==}
     dev: false
 
-  /dir-glob/3.0.1:
+  /dir-glob@3.0.1:
     resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
     engines: {node: '>=8'}
     dependencies:
       path-type: 4.0.0
 
-  /disposable-email-domains/1.0.62:
+  /disposable-email-domains@1.0.62:
     resolution: {integrity: sha512-LBQvhRw7mznQTPoyZbsmYeNOZt1pN5aCsx4BAU/3siVFuiM9f2oyKzUaB8v1jbxFjE3aYqYiMo63kAL4pHgfWQ==}
     dev: false
 
-  /doctrine/2.1.0:
+  /doctrine@2.1.0:
     resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       esutils: 2.0.3
     dev: true
 
-  /doctrine/3.0.0:
+  /doctrine@3.0.0:
     resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
     engines: {node: '>=6.0.0'}
     dependencies:
       esutils: 2.0.3
     dev: true
 
-  /doctypes/1.1.0:
+  /doctypes@1.1.0:
     resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==}
 
-  /dom-accessibility-api/0.5.16:
+  /dom-accessibility-api@0.5.16:
     resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
     dev: true
 
-  /dom-serializer/2.0.0:
+  /dom-serializer@2.0.0:
     resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
     dependencies:
       domelementtype: 2.3.0
       domhandler: 5.0.3
       entities: 4.4.0
 
-  /dom-walk/0.1.2:
+  /dom-walk@0.1.2:
     resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
     dev: true
 
-  /domelementtype/2.3.0:
+  /domelementtype@2.3.0:
     resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
 
-  /domexception/4.0.0:
+  /domexception@4.0.0:
     resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
     engines: {node: '>=12'}
     dependencies:
       webidl-conversions: 7.0.0
     dev: false
 
-  /domhandler/5.0.3:
+  /domhandler@5.0.3:
     resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
     engines: {node: '>= 4'}
     dependencies:
       domelementtype: 2.3.0
 
-  /domutils/3.0.1:
+  /domutils@3.0.1:
     resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==}
     dependencies:
       dom-serializer: 2.0.0
       domelementtype: 2.3.0
       domhandler: 5.0.3
 
-  /dotenv-expand/10.0.0:
+  /dotenv-expand@10.0.0:
     resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
     engines: {node: '>=12'}
     dev: true
 
-  /dotenv/16.0.3:
+  /dotenv@16.0.3:
     resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
     engines: {node: '>=12'}
 
-  /duplexer/0.1.2:
-    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-    dev: true
-
-  /duplexer2/0.1.4:
+  /duplexer2@0.1.4:
     resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
     dependencies:
       readable-stream: 2.3.7
     dev: false
 
-  /duplexify/3.7.1:
+  /duplexer@0.1.2:
+    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+    dev: true
+
+  /duplexify@3.7.1:
     resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
     dependencies:
       end-of-stream: 1.4.4
@@ -9587,30 +10014,30 @@ packages:
       readable-stream: 2.3.7
       stream-shift: 1.0.1
 
-  /each-props/1.3.2:
+  /each-props@1.3.2:
     resolution: {integrity: sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==}
     dependencies:
       is-plain-object: 2.0.4
       object.defaults: 1.1.0
     dev: false
 
-  /eastasianwidth/0.2.0:
+  /eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
     dev: true
 
-  /ecc-jsbn/0.1.2:
+  /ecc-jsbn@0.1.2:
     resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
     dependencies:
       jsbn: 0.1.1
       safer-buffer: 2.1.2
 
-  /ecdsa-sig-formatter/1.0.11:
+  /ecdsa-sig-formatter@1.0.11:
     resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
     dependencies:
       safe-buffer: 5.2.1
     dev: false
 
-  /editorconfig/0.15.3:
+  /editorconfig@0.15.3:
     resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==}
     hasBin: true
     dependencies:
@@ -9620,42 +10047,42 @@ packages:
       sigmund: 1.0.1
     dev: true
 
-  /ee-first/1.1.1:
+  /ee-first@1.1.1:
     resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
     dev: true
 
-  /ejs/3.1.8:
+  /ejs@3.1.8:
     resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
     engines: {node: '>=0.10.0'}
     hasBin: true
     dependencies:
       jake: 10.8.5
 
-  /electron-to-chromium/1.4.284:
+  /electron-to-chromium@1.4.284:
     resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
 
-  /emittery/0.13.1:
+  /emittery@0.13.1:
     resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
     engines: {node: '>=12'}
     dev: true
 
-  /emoji-regex/8.0.0:
+  /emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
-  /emoji-regex/9.2.2:
+  /emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
     dev: true
 
-  /encode-utf8/1.0.3:
+  /encode-utf8@1.0.3:
     resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
     dev: false
 
-  /encodeurl/1.0.2:
+  /encodeurl@1.0.2:
     resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /encoding/0.1.13:
+  /encoding@0.1.13:
     resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
     requiresBuild: true
     dependencies:
@@ -9663,47 +10090,47 @@ packages:
     dev: false
     optional: true
 
-  /end-of-stream/1.4.4:
+  /end-of-stream@1.4.4:
     resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
     dependencies:
       once: 1.4.0
 
-  /enquirer/2.3.6:
+  /enquirer@2.3.6:
     resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
     engines: {node: '>=8.6'}
     dependencies:
       ansi-colors: 4.1.3
     dev: true
 
-  /entities/2.2.0:
+  /entities@2.2.0:
     resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
     dev: false
 
-  /entities/4.4.0:
+  /entities@4.4.0:
     resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
     engines: {node: '>=0.12'}
 
-  /env-paths/2.2.1:
+  /env-paths@2.2.1:
     resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
     engines: {node: '>=6'}
     dev: false
 
-  /envinfo/7.8.1:
+  /envinfo@7.8.1:
     resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
     engines: {node: '>=4'}
     hasBin: true
     dev: true
 
-  /err-code/2.0.3:
+  /err-code@2.0.3:
     resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
     dev: false
 
-  /error-ex/1.3.2:
+  /error-ex@1.3.2:
     resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
     dependencies:
       is-arrayish: 0.2.1
 
-  /es-abstract/1.20.4:
+  /es-abstract@1.20.4:
     resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -9733,7 +10160,7 @@ packages:
       unbox-primitive: 1.0.2
     dev: true
 
-  /es-get-iterator/1.1.3:
+  /es-get-iterator@1.1.3:
     resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
     dependencies:
       call-bind: 1.0.2
@@ -9747,17 +10174,17 @@ packages:
       stop-iteration-iterator: 1.0.0
     dev: true
 
-  /es-module-lexer/0.9.3:
+  /es-module-lexer@0.9.3:
     resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
     dev: true
 
-  /es-shim-unscopables/1.0.0:
+  /es-shim-unscopables@1.0.0:
     resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
     dependencies:
       has: 1.0.3
     dev: true
 
-  /es-to-primitive/1.2.1:
+  /es-to-primitive@1.2.1:
     resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -9766,7 +10193,7 @@ packages:
       is-symbol: 1.0.4
     dev: true
 
-  /es5-ext/0.10.62:
+  /es5-ext@0.10.62:
     resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==}
     engines: {node: '>=0.10'}
     requiresBuild: true
@@ -9776,7 +10203,7 @@ packages:
       next-tick: 1.1.0
     dev: false
 
-  /es6-iterator/2.0.3:
+  /es6-iterator@2.0.3:
     resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
     dependencies:
       d: 1.0.1
@@ -9784,30 +10211,30 @@ packages:
       es6-symbol: 3.1.3
     dev: false
 
-  /es6-object-assign/1.1.0:
+  /es6-object-assign@1.1.0:
     resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
     dev: true
 
-  /es6-promise/4.2.8:
+  /es6-promise@4.2.8:
     resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
     dev: false
     optional: true
 
-  /es6-promisify/5.0.0:
+  /es6-promisify@5.0.0:
     resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
     dependencies:
       es6-promise: 4.2.8
     dev: false
     optional: true
 
-  /es6-symbol/3.1.3:
+  /es6-symbol@3.1.3:
     resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==}
     dependencies:
       d: 1.0.1
       ext: 1.7.0
     dev: false
 
-  /es6-weak-map/2.0.3:
+  /es6-weak-map@2.0.3:
     resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==}
     dependencies:
       d: 1.0.1
@@ -9816,7 +10243,7 @@ packages:
       es6-symbol: 3.1.3
     dev: false
 
-  /esbuild-android-64/0.14.42:
+  /esbuild-android-64@0.14.42:
     resolution: {integrity: sha512-P4Y36VUtRhK/zivqGVMqhptSrFILAGlYp0Z8r9UQqHJ3iWztRCNWnlBzD9HRx0DbueXikzOiwyOri+ojAFfW6A==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9825,7 +10252,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-android-arm64/0.14.42:
+  /esbuild-android-arm64@0.14.42:
     resolution: {integrity: sha512-0cOqCubq+RWScPqvtQdjXG3Czb3AWI2CaKw3HeXry2eoA2rrPr85HF7IpdU26UWdBXgPYtlTN1LUiuXbboROhg==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -9834,7 +10261,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-darwin-64/0.14.42:
+  /esbuild-darwin-64@0.14.42:
     resolution: {integrity: sha512-ipiBdCA3ZjYgRfRLdQwP82rTiv/YVMtW36hTvAN5ZKAIfxBOyPXY7Cejp3bMXWgzKD8B6O+zoMzh01GZsCuEIA==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9843,7 +10270,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-darwin-arm64/0.14.42:
+  /esbuild-darwin-arm64@0.14.42:
     resolution: {integrity: sha512-bU2tHRqTPOaoH/4m0zYHbFWpiYDmaA0gt90/3BMEFaM0PqVK/a6MA2V/ypV5PO0v8QxN6gH5hBPY4YJ2lopXgA==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -9852,7 +10279,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-freebsd-64/0.14.42:
+  /esbuild-freebsd-64@0.14.42:
     resolution: {integrity: sha512-75h1+22Ivy07+QvxHyhVqOdekupiTZVLN1PMwCDonAqyXd8TVNJfIRFrdL8QmSJrOJJ5h8H1I9ETyl2L8LQDaw==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9861,7 +10288,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-freebsd-arm64/0.14.42:
+  /esbuild-freebsd-arm64@0.14.42:
     resolution: {integrity: sha512-W6Jebeu5TTDQMJUJVarEzRU9LlKpNkPBbjqSu+GUPTHDCly5zZEQq9uHkmHHl7OKm+mQ2zFySN83nmfCeZCyNA==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -9870,7 +10297,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-32/0.14.42:
+  /esbuild-linux-32@0.14.42:
     resolution: {integrity: sha512-Ooy/Bj+mJ1z4jlWcK5Dl6SlPlCgQB9zg1UrTCeY8XagvuWZ4qGPyYEWGkT94HUsRi2hKsXvcs6ThTOjBaJSMfg==}
     engines: {node: '>=12'}
     cpu: [ia32]
@@ -9879,7 +10306,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-64/0.14.42:
+  /esbuild-linux-64@0.14.42:
     resolution: {integrity: sha512-2L0HbzQfbTuemUWfVqNIjOfaTRt9zsvjnme6lnr7/MO9toz/MJ5tZhjqrG6uDWDxhsaHI2/nsDgrv8uEEN2eoA==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9888,16 +10315,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-arm/0.14.42:
-    resolution: {integrity: sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: false
-    optional: true
-
-  /esbuild-linux-arm64/0.14.42:
+  /esbuild-linux-arm64@0.14.42:
     resolution: {integrity: sha512-c3Ug3e9JpVr8jAcfbhirtpBauLxzYPpycjWulD71CF6ZSY26tvzmXMJYooQ2YKqDY4e/fPu5K8bm7MiXMnyxuA==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -9906,7 +10324,16 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-mips64le/0.14.42:
+  /esbuild-linux-arm@0.14.42:
+    resolution: {integrity: sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /esbuild-linux-mips64le@0.14.42:
     resolution: {integrity: sha512-QuvpHGbYlkyXWf2cGm51LBCHx6eUakjaSrRpUqhPwjh/uvNUYvLmz2LgPTTPwCqaKt0iwL+OGVL0tXA5aDbAbg==}
     engines: {node: '>=12'}
     cpu: [mips64el]
@@ -9915,7 +10342,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-ppc64le/0.14.42:
+  /esbuild-linux-ppc64le@0.14.42:
     resolution: {integrity: sha512-8ohIVIWDbDT+i7lCx44YCyIRrOW1MYlks9fxTo0ME2LS/fxxdoJBwHWzaDYhjvf8kNpA+MInZvyOEAGoVDrMHg==}
     engines: {node: '>=12'}
     cpu: [ppc64]
@@ -9924,7 +10351,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-riscv64/0.14.42:
+  /esbuild-linux-riscv64@0.14.42:
     resolution: {integrity: sha512-DzDqK3TuoXktPyG1Lwx7vhaF49Onv3eR61KwQyxYo4y5UKTpL3NmuarHSIaSVlTFDDpcIajCDwz5/uwKLLgKiQ==}
     engines: {node: '>=12'}
     cpu: [riscv64]
@@ -9933,7 +10360,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-linux-s390x/0.14.42:
+  /esbuild-linux-s390x@0.14.42:
     resolution: {integrity: sha512-YFRhPCxl8nb//Wn6SiS5pmtplBi4z9yC2gLrYoYI/tvwuB1jldir9r7JwAGy1Ck4D7sE7wBN9GFtUUX/DLdcEQ==}
     engines: {node: '>=12'}
     cpu: [s390x]
@@ -9942,7 +10369,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-netbsd-64/0.14.42:
+  /esbuild-netbsd-64@0.14.42:
     resolution: {integrity: sha512-QYSD2k+oT9dqB/4eEM9c+7KyNYsIPgzYOSrmfNGDIyJrbT1d+CFVKvnKahDKNJLfOYj8N4MgyFaU9/Ytc6w5Vw==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9951,7 +10378,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-openbsd-64/0.14.42:
+  /esbuild-openbsd-64@0.14.42:
     resolution: {integrity: sha512-M2meNVIKWsm2HMY7+TU9AxM7ZVwI9havdsw6m/6EzdXysyCFFSoaTQ/Jg03izjCsK17FsVRHqRe26Llj6x0MNA==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9960,22 +10387,22 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-plugin-alias/0.2.1:
+  /esbuild-plugin-alias@0.2.1:
     resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==}
     dev: true
 
-  /esbuild-register/3.4.2_esbuild@0.16.17:
+  /esbuild-register@3.4.2(esbuild@0.17.14):
     resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==}
     peerDependencies:
       esbuild: '>=0.12 <1'
     dependencies:
-      debug: 4.3.4
-      esbuild: 0.16.17
+      debug: 4.3.4(supports-color@8.1.1)
+      esbuild: 0.17.14
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /esbuild-sunos-64/0.14.42:
+  /esbuild-sunos-64@0.14.42:
     resolution: {integrity: sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -9984,7 +10411,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-windows-32/0.14.42:
+  /esbuild-windows-32@0.14.42:
     resolution: {integrity: sha512-4iw/8qWmRICWi9ZOnJJf9sYt6wmtp3hsN4TdI5NqgjfOkBVMxNdM9Vt3626G1Rda9ya2Q0hjQRD9W1o+m6Lz6g==}
     engines: {node: '>=12'}
     cpu: [ia32]
@@ -9993,7 +10420,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-windows-64/0.14.42:
+  /esbuild-windows-64@0.14.42:
     resolution: {integrity: sha512-j3cdK+Y3+a5H0wHKmLGTJcq0+/2mMBHPWkItR3vytp/aUGD/ua/t2BLdfBIzbNN9nLCRL9sywCRpOpFMx3CxzA==}
     engines: {node: '>=12'}
     cpu: [x64]
@@ -10002,7 +10429,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild-windows-arm64/0.14.42:
+  /esbuild-windows-arm64@0.14.42:
     resolution: {integrity: sha512-+lRAARnF+hf8J0mN27ujO+VbhPbDqJ8rCcJKye4y7YZLV6C4n3pTRThAb388k/zqF5uM0lS5O201u0OqoWSicw==}
     engines: {node: '>=12'}
     cpu: [arm64]
@@ -10011,7 +10438,7 @@ packages:
     dev: false
     optional: true
 
-  /esbuild/0.14.42:
+  /esbuild@0.14.42:
     resolution: {integrity: sha512-V0uPZotCEHokJdNqyozH6qsaQXqmZEOiZWrXnds/zaH/0SyrIayRXWRB98CENO73MIZ9T3HBIOsmds5twWtmgw==}
     engines: {node: '>=12'}
     requiresBuild: true
@@ -10038,7 +10465,7 @@ packages:
       esbuild-windows-arm64: 0.14.42
     dev: false
 
-  /esbuild/0.16.17:
+  /esbuild@0.16.17:
     resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
     engines: {node: '>=12'}
     hasBin: true
@@ -10067,35 +10494,65 @@ packages:
       '@esbuild/win32-ia32': 0.16.17
       '@esbuild/win32-x64': 0.16.17
 
-  /escalade/3.1.1:
+  /esbuild@0.17.14:
+    resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==}
+    engines: {node: '>=12'}
+    hasBin: true
+    requiresBuild: true
+    optionalDependencies:
+      '@esbuild/android-arm': 0.17.14
+      '@esbuild/android-arm64': 0.17.14
+      '@esbuild/android-x64': 0.17.14
+      '@esbuild/darwin-arm64': 0.17.14
+      '@esbuild/darwin-x64': 0.17.14
+      '@esbuild/freebsd-arm64': 0.17.14
+      '@esbuild/freebsd-x64': 0.17.14
+      '@esbuild/linux-arm': 0.17.14
+      '@esbuild/linux-arm64': 0.17.14
+      '@esbuild/linux-ia32': 0.17.14
+      '@esbuild/linux-loong64': 0.17.14
+      '@esbuild/linux-mips64el': 0.17.14
+      '@esbuild/linux-ppc64': 0.17.14
+      '@esbuild/linux-riscv64': 0.17.14
+      '@esbuild/linux-s390x': 0.17.14
+      '@esbuild/linux-x64': 0.17.14
+      '@esbuild/netbsd-x64': 0.17.14
+      '@esbuild/openbsd-x64': 0.17.14
+      '@esbuild/sunos-x64': 0.17.14
+      '@esbuild/win32-arm64': 0.17.14
+      '@esbuild/win32-ia32': 0.17.14
+      '@esbuild/win32-x64': 0.17.14
+    dev: true
+
+  /escalade@3.1.1:
     resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
     engines: {node: '>=6'}
 
-  /escape-html/1.0.3:
+  /escape-html@1.0.3:
     resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
 
-  /escape-regexp/0.0.1:
+  /escape-regexp@0.0.1:
     resolution: {integrity: sha512-jVgdsYRa7RKxTT6MKNC3gdT+BF0Gfhpel19+HMRZJC2L0PufB0XOBuXBoXj29NKHwuktnAXd1Z1lyiH/8vOTpw==}
 
-  /escape-string-regexp/1.0.5:
+  /escape-string-regexp@1.0.5:
     resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
     engines: {node: '>=0.8.0'}
 
-  /escape-string-regexp/2.0.0:
+  /escape-string-regexp@2.0.0:
     resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
     engines: {node: '>=8'}
     dev: true
 
-  /escape-string-regexp/4.0.0:
+  /escape-string-regexp@4.0.0:
     resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
     engines: {node: '>=10'}
 
-  /escape-string-regexp/5.0.0:
+  /escape-string-regexp@5.0.0:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
     engines: {node: '>=12'}
     dev: false
 
-  /escodegen/2.0.0:
+  /escodegen@2.0.0:
     resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
     engines: {node: '>=6.0'}
     hasBin: true
@@ -10107,17 +10564,17 @@ packages:
     optionalDependencies:
       source-map: 0.6.1
 
-  /eslint-import-resolver-node/0.3.7:
+  /eslint-import-resolver-node@0.3.7:
     resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
     dependencies:
-      debug: 3.2.7
+      debug: 3.2.7(supports-color@8.1.1)
       is-core-module: 2.11.0
       resolve: 1.22.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-module-utils/2.7.4_npjqex3ey3rgd34fjcuucz7la4:
+  /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-node@0.3.7)(eslint@8.34.0):
     resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -10138,15 +10595,15 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.52.0_7kw3g6rralp5ps6mg3uyzz6azm
-      debug: 3.2.7
+      '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5)
+      debug: 3.2.7(supports-color@8.1.1)
       eslint: 8.34.0
       eslint-import-resolver-node: 0.3.7
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-module-utils/2.7.4_spn4godk7g7ml4zhqabnc6rdgi:
+  /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint@8.35.0):
     resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -10167,15 +10624,15 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
-      debug: 3.2.7
+      '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
+      debug: 3.2.7(supports-color@8.1.1)
       eslint: 8.35.0
       eslint-import-resolver-node: 0.3.7
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-plugin-import/2.27.5_mcvs2y73sfmcxqzpjj5lr7a2m4:
+  /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.52.0)(eslint@8.34.0):
     resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -10185,15 +10642,15 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.52.0_7kw3g6rralp5ps6mg3uyzz6azm
+      '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5)
       array-includes: 3.1.6
       array.prototype.flat: 1.3.1
       array.prototype.flatmap: 1.3.1
-      debug: 3.2.7
+      debug: 3.2.7(supports-color@8.1.1)
       doctrine: 2.1.0
       eslint: 8.34.0
       eslint-import-resolver-node: 0.3.7
-      eslint-module-utils: 2.7.4_npjqex3ey3rgd34fjcuucz7la4
+      eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-node@0.3.7)(eslint@8.34.0)
       has: 1.0.3
       is-core-module: 2.11.0
       is-glob: 4.0.3
@@ -10208,7 +10665,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-import/2.27.5_uyiasnnzcqrxqkfvjklwnmwcha:
+  /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0):
     resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -10218,15 +10675,15 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
+      '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5)
       array-includes: 3.1.6
       array.prototype.flat: 1.3.1
       array.prototype.flatmap: 1.3.1
-      debug: 3.2.7
+      debug: 3.2.7(supports-color@8.1.1)
       doctrine: 2.1.0
       eslint: 8.35.0
       eslint-import-resolver-node: 0.3.7
-      eslint-module-utils: 2.7.4_spn4godk7g7ml4zhqabnc6rdgi
+      eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint@8.35.0)
       has: 1.0.3
       is-core-module: 2.11.0
       is-glob: 4.0.3
@@ -10241,25 +10698,25 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-vue/9.9.0_eslint@8.35.0:
+  /eslint-plugin-vue@9.9.0(eslint@8.35.0):
     resolution: {integrity: sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
     dependencies:
       eslint: 8.35.0
-      eslint-utils: 3.0.0_eslint@8.35.0
+      eslint-utils: 3.0.0(eslint@8.35.0)
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.0.11
       semver: 7.3.8
-      vue-eslint-parser: 9.1.0_eslint@8.35.0
+      vue-eslint-parser: 9.1.0(eslint@8.35.0)
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-scope/5.1.1:
+  /eslint-scope@5.1.1:
     resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
     engines: {node: '>=8.0.0'}
     dependencies:
@@ -10267,7 +10724,7 @@ packages:
       estraverse: 4.3.0
     dev: true
 
-  /eslint-scope/7.1.1:
+  /eslint-scope@7.1.1:
     resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -10275,7 +10732,7 @@ packages:
       estraverse: 5.3.0
     dev: true
 
-  /eslint-utils/3.0.0_eslint@8.34.0:
+  /eslint-utils@3.0.0(eslint@8.34.0):
     resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
     engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
     peerDependencies:
@@ -10285,7 +10742,7 @@ packages:
       eslint-visitor-keys: 2.1.0
     dev: true
 
-  /eslint-utils/3.0.0_eslint@8.35.0:
+  /eslint-utils@3.0.0(eslint@8.35.0):
     resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
     engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
     peerDependencies:
@@ -10295,17 +10752,17 @@ packages:
       eslint-visitor-keys: 2.1.0
     dev: true
 
-  /eslint-visitor-keys/2.1.0:
+  /eslint-visitor-keys@2.1.0:
     resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
     engines: {node: '>=10'}
     dev: true
 
-  /eslint-visitor-keys/3.3.0:
+  /eslint-visitor-keys@3.3.0:
     resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /eslint/8.34.0:
+  /eslint@8.34.0:
     resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -10316,11 +10773,11 @@ packages:
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.3
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       doctrine: 3.0.0
       escape-string-regexp: 4.0.0
       eslint-scope: 7.1.1
-      eslint-utils: 3.0.0_eslint@8.34.0
+      eslint-utils: 3.0.0(eslint@8.34.0)
       eslint-visitor-keys: 3.3.0
       espree: 9.4.1
       esquery: 1.4.0
@@ -10352,7 +10809,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint/8.35.0:
+  /eslint@8.35.0:
     resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     hasBin: true
@@ -10365,11 +10822,11 @@ packages:
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.3
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       doctrine: 3.0.0
       escape-string-regexp: 4.0.0
       eslint-scope: 7.1.1
-      eslint-utils: 3.0.0_eslint@8.35.0
+      eslint-utils: 3.0.0(eslint@8.35.0)
       eslint-visitor-keys: 3.3.0
       espree: 9.4.1
       esquery: 1.4.2
@@ -10401,57 +10858,57 @@ packages:
       - supports-color
     dev: true
 
-  /espree/9.4.1:
+  /espree@9.4.1:
     resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
       acorn: 8.8.2
-      acorn-jsx: 5.3.2_acorn@8.8.2
+      acorn-jsx: 5.3.2(acorn@8.8.2)
       eslint-visitor-keys: 3.3.0
     dev: true
 
-  /esprima/2.7.3:
+  /esprima@2.7.3:
     resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==}
     engines: {node: '>=0.10.0'}
     hasBin: true
     dev: false
 
-  /esprima/4.0.1:
+  /esprima@4.0.1:
     resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
     engines: {node: '>=4'}
     hasBin: true
 
-  /esquery/1.4.0:
+  /esquery@1.4.0:
     resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
     engines: {node: '>=0.10'}
     dependencies:
       estraverse: 5.3.0
     dev: true
 
-  /esquery/1.4.2:
+  /esquery@1.4.2:
     resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==}
     engines: {node: '>=0.10'}
     dependencies:
       estraverse: 5.3.0
     dev: true
 
-  /esrecurse/4.3.0:
+  /esrecurse@4.3.0:
     resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
     engines: {node: '>=4.0'}
     dependencies:
       estraverse: 5.3.0
     dev: true
 
-  /estraverse/4.3.0:
+  /estraverse@4.3.0:
     resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
     engines: {node: '>=4.0'}
     dev: true
 
-  /estraverse/5.3.0:
+  /estraverse@5.3.0:
     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
     engines: {node: '>=4.0'}
 
-  /estree-to-babel/3.2.1:
+  /estree-to-babel@3.2.1:
     resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==}
     engines: {node: '>=8.3.0'}
     dependencies:
@@ -10462,19 +10919,19 @@ packages:
       - supports-color
     dev: true
 
-  /estree-walker/2.0.2:
+  /estree-walker@2.0.2:
     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
-  /esutils/2.0.3:
+  /esutils@2.0.3:
     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
     engines: {node: '>=0.10.0'}
 
-  /etag/1.8.1:
+  /etag@1.8.1:
     resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /event-stream/3.3.4:
+  /event-stream@3.3.4:
     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
     dependencies:
       duplexer: 0.1.2
@@ -10486,28 +10943,28 @@ packages:
       through: 2.3.8
     dev: true
 
-  /event-target-shim/5.0.1:
+  /event-target-shim@5.0.1:
     resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
     engines: {node: '>=6'}
     dev: false
 
-  /eventemitter2/6.4.7:
+  /eventemitter2@6.4.7:
     resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
     dev: true
 
-  /eventemitter3/4.0.7:
+  /eventemitter3@4.0.7:
     resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
     dev: false
 
-  /eventemitter3/5.0.0:
+  /eventemitter3@5.0.0:
     resolution: {integrity: sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==}
     dev: false
 
-  /events/3.3.0:
+  /events@3.3.0:
     resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
     engines: {node: '>=0.8.x'}
 
-  /execa/0.7.0:
+  /execa@0.7.0:
     resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
     engines: {node: '>=4'}
     dependencies:
@@ -10520,7 +10977,7 @@ packages:
       strip-eof: 1.0.0
     dev: false
 
-  /execa/4.1.0:
+  /execa@4.1.0:
     resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
     engines: {node: '>=10'}
     dependencies:
@@ -10535,7 +10992,7 @@ packages:
       strip-final-newline: 2.0.0
     dev: true
 
-  /execa/5.1.1:
+  /execa@5.1.1:
     resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
     engines: {node: '>=10'}
     dependencies:
@@ -10549,7 +11006,7 @@ packages:
       signal-exit: 3.0.7
       strip-final-newline: 2.0.0
 
-  /execa/6.1.0:
+  /execa@6.1.0:
     resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
@@ -10564,18 +11021,18 @@ packages:
       strip-final-newline: 3.0.0
     dev: true
 
-  /executable/4.1.1:
+  /executable@4.1.1:
     resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
     engines: {node: '>=4'}
     dependencies:
       pify: 2.3.0
 
-  /exit/0.1.2:
+  /exit@0.1.2:
     resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
     engines: {node: '>= 0.8.0'}
     dev: true
 
-  /expand-brackets/2.1.4:
+  /expand-brackets@2.1.4:
     resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -10590,19 +11047,19 @@ packages:
       - supports-color
     dev: false
 
-  /expand-template/2.0.3:
+  /expand-template@2.0.3:
     resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
     engines: {node: '>=6'}
     dev: false
 
-  /expand-tilde/2.0.2:
+  /expand-tilde@2.0.2:
     resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       homedir-polyfill: 1.0.3
     dev: false
 
-  /expect/29.5.0:
+  /expect@29.5.0:
     resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -10613,7 +11070,7 @@ packages:
       jest-util: 29.5.0
     dev: true
 
-  /express/4.18.2:
+  /express@4.18.2:
     resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
     engines: {node: '>= 0.10.0'}
     dependencies:
@@ -10652,14 +11109,14 @@ packages:
       - supports-color
     dev: true
 
-  /ext-list/2.2.2:
+  /ext-list@2.2.2:
     resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       mime-db: 1.52.0
     dev: false
 
-  /ext-name/5.0.0:
+  /ext-name@5.0.0:
     resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==}
     engines: {node: '>=4'}
     dependencies:
@@ -10667,20 +11124,20 @@ packages:
       sort-keys-length: 1.0.1
     dev: false
 
-  /ext/1.7.0:
+  /ext@1.7.0:
     resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
     dependencies:
       type: 2.7.2
     dev: false
 
-  /extend-shallow/2.0.1:
+  /extend-shallow@2.0.1:
     resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-extendable: 0.1.1
     dev: false
 
-  /extend-shallow/3.0.2:
+  /extend-shallow@3.0.2:
     resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -10688,10 +11145,10 @@ packages:
       is-extendable: 1.0.1
     dev: false
 
-  /extend/3.0.2:
+  /extend@3.0.2:
     resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
 
-  /external-editor/3.1.0:
+  /external-editor@3.1.0:
     resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
     engines: {node: '>=4'}
     dependencies:
@@ -10700,7 +11157,7 @@ packages:
       tmp: 0.0.33
     dev: true
 
-  /extglob/2.0.4:
+  /extglob@2.0.4:
     resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -10716,7 +11173,7 @@ packages:
       - supports-color
     dev: false
 
-  /extract-zip/1.7.0:
+  /extract-zip@1.7.0:
     resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==}
     hasBin: true
     dependencies:
@@ -10728,12 +11185,12 @@ packages:
       - supports-color
     dev: true
 
-  /extract-zip/2.0.1_supports-color@8.1.1:
+  /extract-zip@2.0.1(supports-color@8.1.1):
     resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
     engines: {node: '>= 10.17.0'}
     hasBin: true
     dependencies:
-      debug: 4.3.4_supports-color@8.1.1
+      debug: 4.3.4(supports-color@8.1.1)
       get-stream: 5.2.0
       yauzl: 2.10.0
     optionalDependencies:
@@ -10742,11 +11199,11 @@ packages:
       - supports-color
     dev: true
 
-  /extsprintf/1.3.0:
+  /extsprintf@1.3.0:
     resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
     engines: {'0': node >=0.6.0}
 
-  /fancy-log/1.3.3:
+  /fancy-log@1.3.3:
     resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -10756,18 +11213,18 @@ packages:
       time-stamp: 1.1.0
     dev: false
 
-  /fast-content-type-parse/1.0.0:
+  /fast-content-type-parse@1.0.0:
     resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==}
     dev: false
 
-  /fast-decode-uri-component/1.0.1:
+  /fast-decode-uri-component@1.0.1:
     resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
     dev: false
 
-  /fast-deep-equal/3.1.3:
+  /fast-deep-equal@3.1.3:
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 
-  /fast-glob/3.2.12:
+  /fast-glob@3.2.12:
     resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
     engines: {node: '>=8.6.0'}
     dependencies:
@@ -10777,64 +11234,64 @@ packages:
       merge2: 1.4.1
       micromatch: 4.0.5
 
-  /fast-json-stable-stringify/2.1.0:
+  /fast-json-stable-stringify@2.1.0:
     resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
 
-  /fast-json-stringify/5.5.0:
+  /fast-json-stringify@5.5.0:
     resolution: {integrity: sha512-rmw2Z8/mLkND8zI+3KTYIkNPEoF5v6GqDP/o+g7H3vjdWjBwuKpgAYFHIzL6ORRB+iqDjjtJnLIW9Mzxn5szOA==}
     dependencies:
       '@fastify/deepmerge': 1.3.0
       ajv: 8.12.0
-      ajv-formats: 2.1.1_ajv@8.12.0
+      ajv-formats: 2.1.1(ajv@8.12.0)
       fast-deep-equal: 3.1.3
       fast-uri: 2.2.0
       rfdc: 1.3.0
     dev: false
 
-  /fast-levenshtein/1.1.4:
+  /fast-levenshtein@1.1.4:
     resolution: {integrity: sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==}
     dev: false
 
-  /fast-levenshtein/2.0.6:
+  /fast-levenshtein@2.0.6:
     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
 
-  /fast-querystring/1.1.0:
+  /fast-querystring@1.1.0:
     resolution: {integrity: sha512-LWkjBCZlxjnSanuPpZ6mHswjy8hQv3VcPJsQB3ltUF2zjvrycr0leP3TSTEEfvQ1WEMSRl5YNsGqaft9bjLqEw==}
     dependencies:
       fast-decode-uri-component: 1.0.1
     dev: false
 
-  /fast-redact/3.1.2:
+  /fast-redact@3.1.2:
     resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==}
     engines: {node: '>=6'}
     dev: false
 
-  /fast-safe-stringify/2.1.1:
+  /fast-safe-stringify@2.1.1:
     resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
     dev: false
 
-  /fast-uri/2.2.0:
+  /fast-uri@2.2.0:
     resolution: {integrity: sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==}
     dev: false
 
-  /fast-xml-parser/3.21.1:
+  /fast-xml-parser@3.21.1:
     resolution: {integrity: sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==}
     dependencies:
       strnum: 1.0.5
     dev: false
 
-  /fast-xml-parser/4.1.2:
+  /fast-xml-parser@4.1.2:
     resolution: {integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==}
     hasBin: true
     dependencies:
       strnum: 1.0.5
     dev: false
 
-  /fastify-plugin/4.5.0:
+  /fastify-plugin@4.5.0:
     resolution: {integrity: sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==}
     dev: false
 
-  /fastify/4.14.1:
+  /fastify@4.14.1:
     resolution: {integrity: sha512-yjrDeXe77j9gRlSV2UJry8mcFWbD0NQ5JYjnPi4tkFjHZVaG3/BD5wxOmRzGnHPC0YvaBJ0XWrIfFPl2IHRa1w==}
     dependencies:
       '@fastify/ajv-compiler': 3.5.0
@@ -10856,69 +11313,69 @@ packages:
       - supports-color
     dev: false
 
-  /fastq/1.15.0:
+  /fastq@1.15.0:
     resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
     dependencies:
       reusify: 1.0.4
 
-  /fault/1.0.4:
+  /fault@1.0.4:
     resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
     dependencies:
       format: 0.2.2
     dev: true
 
-  /fb-watchman/2.0.2:
+  /fb-watchman@2.0.2:
     resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
     dependencies:
       bser: 2.1.1
     dev: true
 
-  /fd-slicer/1.1.0:
+  /fd-slicer@1.1.0:
     resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
     dependencies:
       pend: 1.2.0
     dev: true
 
-  /feed/4.2.2:
+  /feed@4.2.2:
     resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
     engines: {node: '>=0.4.0'}
     dependencies:
       xml-js: 1.6.11
     dev: false
 
-  /fetch-blob/3.2.0:
+  /fetch-blob@3.2.0:
     resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
     engines: {node: ^12.20 || >= 14.13}
     dependencies:
       node-domexception: 1.0.0
       web-streams-polyfill: 3.2.1
 
-  /fetch-retry/5.0.4:
+  /fetch-retry@5.0.4:
     resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==}
     dev: true
 
-  /figures/3.2.0:
+  /figures@3.2.0:
     resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
     engines: {node: '>=8'}
     dependencies:
       escape-string-regexp: 1.0.5
     dev: true
 
-  /file-entry-cache/6.0.1:
+  /file-entry-cache@6.0.1:
     resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
     engines: {node: ^10.12.0 || >=12.0.0}
     dependencies:
       flat-cache: 3.0.4
     dev: true
 
-  /file-system-cache/2.0.2:
+  /file-system-cache@2.0.2:
     resolution: {integrity: sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA==}
     dependencies:
       fs-extra: 11.1.0
       ramda: 0.28.0
     dev: true
 
-  /file-type/17.1.6:
+  /file-type@17.1.6:
     resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
@@ -10927,7 +11384,7 @@ packages:
       token-types: 5.0.1
     dev: false
 
-  /file-type/18.2.1:
+  /file-type@18.2.1:
     resolution: {integrity: sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -10936,17 +11393,17 @@ packages:
       token-types: 5.0.1
     dev: false
 
-  /filelist/1.0.4:
+  /filelist@1.0.4:
     resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
     dependencies:
       minimatch: 5.1.2
 
-  /filename-reserved-regex/3.0.0:
+  /filename-reserved-regex@3.0.0:
     resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dev: false
 
-  /filenamify/5.1.1:
+  /filenamify@5.1.1:
     resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==}
     engines: {node: '>=12.20'}
     dependencies:
@@ -10955,7 +11412,7 @@ packages:
       trim-repeated: 2.0.0
     dev: false
 
-  /fill-range/4.0.0:
+  /fill-range@4.0.0:
     resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -10965,13 +11422,13 @@ packages:
       to-regex-range: 2.1.1
     dev: false
 
-  /fill-range/7.0.1:
+  /fill-range@7.0.1:
     resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
     engines: {node: '>=8'}
     dependencies:
       to-regex-range: 5.0.1
 
-  /finalhandler/1.2.0:
+  /finalhandler@1.2.0:
     resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
     engines: {node: '>= 0.8'}
     dependencies:
@@ -10986,7 +11443,7 @@ packages:
       - supports-color
     dev: true
 
-  /find-cache-dir/2.1.0:
+  /find-cache-dir@2.1.0:
     resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -10995,7 +11452,7 @@ packages:
       pkg-dir: 3.0.0
     dev: true
 
-  /find-cache-dir/3.3.2:
+  /find-cache-dir@3.3.2:
     resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
     engines: {node: '>=8'}
     dependencies:
@@ -11004,7 +11461,7 @@ packages:
       pkg-dir: 4.2.0
     dev: true
 
-  /find-my-way/7.4.0:
+  /find-my-way@7.4.0:
     resolution: {integrity: sha512-JFT7eURLU5FumlZ3VBGnveId82cZz7UR7OUu+THQJOwdQXxmS/g8v0KLoFhv97HreycOrmAbqjXD/4VG2j0uMQ==}
     engines: {node: '>=14'}
     dependencies:
@@ -11013,7 +11470,7 @@ packages:
       safe-regex2: 2.0.0
     dev: false
 
-  /find-up/1.1.2:
+  /find-up@1.1.2:
     resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11021,21 +11478,21 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
-  /find-up/3.0.0:
+  /find-up@3.0.0:
     resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
     engines: {node: '>=6'}
     dependencies:
       locate-path: 3.0.0
     dev: true
 
-  /find-up/4.1.0:
+  /find-up@4.1.0:
     resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
     engines: {node: '>=8'}
     dependencies:
       locate-path: 5.0.0
       path-exists: 4.0.0
 
-  /find-up/5.0.0:
+  /find-up@5.0.0:
     resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
     engines: {node: '>=10'}
     dependencies:
@@ -11043,14 +11500,14 @@ packages:
       path-exists: 4.0.0
     dev: true
 
-  /find-versions/5.1.0:
+  /find-versions@5.1.0:
     resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==}
     engines: {node: '>=12'}
     dependencies:
       semver-regex: 4.0.5
     dev: false
 
-  /findup-sync/2.0.0:
+  /findup-sync@2.0.0:
     resolution: {integrity: sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11062,7 +11519,7 @@ packages:
       - supports-color
     dev: false
 
-  /findup-sync/3.0.0:
+  /findup-sync@3.0.0:
     resolution: {integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11074,7 +11531,7 @@ packages:
       - supports-color
     dev: false
 
-  /fined/1.2.0:
+  /fined@1.2.0:
     resolution: {integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11085,12 +11542,12 @@ packages:
       parse-filepath: 1.0.2
     dev: false
 
-  /flagged-respawn/1.0.1:
+  /flagged-respawn@1.0.1:
     resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /flat-cache/3.0.4:
+  /flat-cache@3.0.4:
     resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
     engines: {node: ^10.12.0 || >=12.0.0}
     dependencies:
@@ -11098,20 +11555,20 @@ packages:
       rimraf: 3.0.2
     dev: true
 
-  /flatted/3.2.7:
+  /flatted@3.2.7:
     resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
     dev: true
 
-  /flatten/1.0.3:
+  /flatten@1.0.3:
     resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==}
     dev: false
 
-  /flow-parser/0.202.0:
+  /flow-parser@0.202.0:
     resolution: {integrity: sha512-ZiXxSIXK3zPmY3zrzCofFonM2T+/3Jz5QZKJyPVtUERQEJUnYkXBQ+0H3FzyqiyJs+VXqb/UNU6/K6sziVYdxw==}
     engines: {node: '>=0.4.0'}
     dev: true
 
-  /fluent-ffmpeg/2.1.2:
+  /fluent-ffmpeg@2.1.2:
     resolution: {integrity: sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==}
     engines: {node: '>=0.8.0'}
     dependencies:
@@ -11119,24 +11576,14 @@ packages:
       which: 1.3.1
     dev: false
 
-  /flush-write-stream/1.1.1:
+  /flush-write-stream@1.1.1:
     resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==}
     dependencies:
       inherits: 2.0.4
       readable-stream: 2.3.7
     dev: false
 
-  /follow-redirects/1.15.2:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-    dev: false
-
-  /follow-redirects/1.15.2_debug@4.3.4:
+  /follow-redirects@1.15.2(debug@4.3.4):
     resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
     engines: {node: '>=4.0'}
     peerDependencies:
@@ -11145,28 +11592,27 @@ packages:
       debug:
         optional: true
     dependencies:
-      debug: 4.3.4
-    dev: true
+      debug: 4.3.4(supports-color@8.1.1)
 
-  /for-each/0.3.3:
+  /for-each@0.3.3:
     resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
     dependencies:
       is-callable: 1.2.7
     dev: true
 
-  /for-in/1.0.2:
+  /for-in@1.0.2:
     resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /for-own/1.0.0:
+  /for-own@1.0.0:
     resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       for-in: 1.0.2
     dev: false
 
-  /foreground-child/2.0.0:
+  /foreground-child@2.0.0:
     resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
     engines: {node: '>=8.0.0'}
     dependencies:
@@ -11174,14 +11620,14 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
-  /forever-agent/0.6.1:
+  /forever-agent@0.6.1:
     resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
 
-  /form-data-encoder/2.1.4:
+  /form-data-encoder@2.1.4:
     resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
     engines: {node: '>= 14.17'}
 
-  /form-data/2.3.3:
+  /form-data@2.3.3:
     resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
     engines: {node: '>= 0.12'}
     dependencies:
@@ -11189,7 +11635,7 @@ packages:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
-  /form-data/3.0.1:
+  /form-data@3.0.1:
     resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==}
     engines: {node: '>= 6'}
     dependencies:
@@ -11197,7 +11643,7 @@ packages:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
-  /form-data/4.0.0:
+  /form-data@4.0.0:
     resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
     engines: {node: '>= 6'}
     dependencies:
@@ -11205,41 +11651,41 @@ packages:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
-  /format/0.2.2:
+  /format@0.2.2:
     resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
     engines: {node: '>=0.4.x'}
     dev: true
 
-  /formdata-polyfill/4.0.10:
+  /formdata-polyfill@4.0.10:
     resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
     engines: {node: '>=12.20.0'}
     dependencies:
       fetch-blob: 3.2.0
 
-  /forwarded/0.2.0:
+  /forwarded@0.2.0:
     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
     engines: {node: '>= 0.6'}
 
-  /fragment-cache/0.2.1:
+  /fragment-cache@0.2.1:
     resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       map-cache: 0.2.2
     dev: false
 
-  /fresh/0.5.2:
+  /fresh@0.5.2:
     resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /from/0.1.7:
+  /from@0.1.7:
     resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
     dev: true
 
-  /fs-constants/1.0.0:
+  /fs-constants@1.0.0:
     resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
 
-  /fs-extra/11.1.0:
+  /fs-extra@11.1.0:
     resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
     engines: {node: '>=14.14'}
     dependencies:
@@ -11248,7 +11694,7 @@ packages:
       universalify: 2.0.0
     dev: true
 
-  /fs-extra/8.1.0:
+  /fs-extra@8.1.0:
     resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
     engines: {node: '>=6 <7 || >=8'}
     dependencies:
@@ -11257,7 +11703,7 @@ packages:
       universalify: 0.1.2
     dev: false
 
-  /fs-extra/9.1.0:
+  /fs-extra@9.1.0:
     resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -11267,20 +11713,20 @@ packages:
       universalify: 2.0.0
     dev: true
 
-  /fs-minipass/1.2.7:
+  /fs-minipass@1.2.7:
     resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==}
     dependencies:
       minipass: 2.9.0
     dev: false
     optional: true
 
-  /fs-minipass/2.1.0:
+  /fs-minipass@2.1.0:
     resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
 
-  /fs-mkdirp-stream/1.0.0:
+  /fs-mkdirp-stream@1.0.0:
     resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11288,17 +11734,17 @@ packages:
       through2: 2.0.5
     dev: false
 
-  /fs.realpath/1.0.0:
+  /fs.realpath@1.0.0:
     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
 
-  /fsevents/2.3.2:
+  /fsevents@2.3.2:
     resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
     os: [darwin]
     requiresBuild: true
     optional: true
 
-  /fstream/1.0.12:
+  /fstream@1.0.12:
     resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
     engines: {node: '>=0.6'}
     dependencies:
@@ -11308,10 +11754,10 @@ packages:
       rimraf: 2.7.1
     dev: false
 
-  /function-bind/1.1.1:
+  /function-bind@1.1.1:
     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
 
-  /function.prototype.name/1.1.5:
+  /function.prototype.name@1.1.5:
     resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -11321,11 +11767,11 @@ packages:
       functions-have-names: 1.2.3
     dev: true
 
-  /functions-have-names/1.2.3:
+  /functions-have-names@1.2.3:
     resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
     dev: true
 
-  /gauge/3.0.2:
+  /gauge@3.0.2:
     resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
     engines: {node: '>=10'}
     dependencies:
@@ -11339,7 +11785,7 @@ packages:
       strip-ansi: 6.0.1
       wide-align: 1.1.5
 
-  /gauge/4.0.4:
+  /gauge@4.0.4:
     resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -11353,46 +11799,46 @@ packages:
       wide-align: 1.1.5
     dev: false
 
-  /generic-pool/3.9.0:
+  /generic-pool@3.9.0:
     resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==}
     engines: {node: '>= 4'}
     dev: true
 
-  /gensync/1.0.0-beta.2:
+  /gensync@1.0.0-beta.2:
     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /get-caller-file/1.0.3:
+  /get-caller-file@1.0.3:
     resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==}
     dev: false
 
-  /get-caller-file/2.0.5:
+  /get-caller-file@2.0.5:
     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
     engines: {node: 6.* || 8.* || >= 10.*}
 
-  /get-func-name/2.0.0:
+  /get-func-name@2.0.0:
     resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
     dev: true
 
-  /get-intrinsic/1.2.0:
+  /get-intrinsic@1.2.0:
     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
     dependencies:
       function-bind: 1.1.1
       has: 1.0.3
       has-symbols: 1.0.3
 
-  /get-npm-tarball-url/2.0.3:
+  /get-npm-tarball-url@2.0.3:
     resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==}
     engines: {node: '>=12.17'}
     dev: true
 
-  /get-package-type/0.1.0:
+  /get-package-type@0.1.0:
     resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
     engines: {node: '>=8.0.0'}
     dev: true
 
-  /get-pixels-frame-info-update/3.3.2:
+  /get-pixels-frame-info-update@3.3.2:
     resolution: {integrity: sha512-LzVij57X/gK4Y6LpcDdqj+R9WCpD6Sv3ZH85GMA+S3xgPGCz81mHql4GiSnF4GijRjk7TE0ja2sDr8FFYKLe2g==}
     dependencies:
       data-uri-to-buffer: 0.0.3
@@ -11408,26 +11854,26 @@ packages:
       through: 2.3.8
     dev: false
 
-  /get-port/5.1.1:
+  /get-port@5.1.1:
     resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
     engines: {node: '>=8'}
 
-  /get-stream/3.0.0:
+  /get-stream@3.0.0:
     resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
     engines: {node: '>=4'}
     dev: false
 
-  /get-stream/5.2.0:
+  /get-stream@5.2.0:
     resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
     engines: {node: '>=8'}
     dependencies:
       pump: 3.0.0
 
-  /get-stream/6.0.1:
+  /get-stream@6.0.1:
     resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
     engines: {node: '>=10'}
 
-  /get-symbol-description/1.0.0:
+  /get-symbol-description@1.0.0:
     resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -11435,30 +11881,30 @@ packages:
       get-intrinsic: 1.2.0
     dev: true
 
-  /get-value/2.0.6:
+  /get-value@2.0.6:
     resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /getos/3.2.1:
+  /getos@3.2.1:
     resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
     dependencies:
       async: 3.2.4
     dev: true
 
-  /getpass/0.1.7:
+  /getpass@0.1.7:
     resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
     dependencies:
       assert-plus: 1.0.0
 
-  /gif-encoder/0.4.1:
+  /gif-encoder@0.4.1:
     resolution: {integrity: sha512-++rNGpDBgWQ9eXj9JfTBLHMUEd7lDOdzIvFyHQM9yL8ffxkcg4G6jWmsgu/r59Uq6nHc3wcVwtgy3geLnIWunQ==}
     engines: {node: '>= 0.8.0'}
     dependencies:
       readable-stream: 1.1.14
     dev: false
 
-  /giget/1.1.2:
+  /giget@1.1.2:
     resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
     hasBin: true
     dependencies:
@@ -11473,35 +11919,35 @@ packages:
       - supports-color
     dev: true
 
-  /github-from-package/0.0.0:
+  /github-from-package@0.0.0:
     resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
     dev: false
 
-  /github-slugger/1.5.0:
+  /github-slugger@1.5.0:
     resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
     dev: true
 
-  /glob-parent/3.1.0:
+  /glob-parent@3.1.0:
     resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
     dependencies:
       is-glob: 3.1.0
       path-dirname: 1.0.2
     dev: false
 
-  /glob-parent/5.1.2:
+  /glob-parent@5.1.2:
     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
     engines: {node: '>= 6'}
     dependencies:
       is-glob: 4.0.3
 
-  /glob-parent/6.0.2:
+  /glob-parent@6.0.2:
     resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
     engines: {node: '>=10.13.0'}
     dependencies:
       is-glob: 4.0.3
     dev: true
 
-  /glob-promise/4.2.2_glob@7.2.3:
+  /glob-promise@4.2.2(glob@7.2.3):
     resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==}
     engines: {node: '>=12'}
     peerDependencies:
@@ -11511,7 +11957,7 @@ packages:
       glob: 7.2.3
     dev: true
 
-  /glob-promise/6.0.2_glob@8.1.0:
+  /glob-promise@6.0.2(glob@8.1.0):
     resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==}
     engines: {node: '>=16'}
     peerDependencies:
@@ -11521,7 +11967,7 @@ packages:
       glob: 8.1.0
     dev: true
 
-  /glob-stream/6.1.0:
+  /glob-stream@6.1.0:
     resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11537,11 +11983,11 @@ packages:
       unique-stream: 2.3.1
     dev: false
 
-  /glob-to-regexp/0.4.1:
+  /glob-to-regexp@0.4.1:
     resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
     dev: true
 
-  /glob-watcher/5.0.5:
+  /glob-watcher@5.0.5:
     resolution: {integrity: sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11556,7 +12002,7 @@ packages:
       - supports-color
     dev: false
 
-  /glob/7.2.3:
+  /glob@7.2.3:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
     dependencies:
       fs.realpath: 1.0.0
@@ -11566,7 +12012,7 @@ packages:
       once: 1.4.0
       path-is-absolute: 1.0.1
 
-  /glob/8.1.0:
+  /glob@8.1.0:
     resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -11576,14 +12022,14 @@ packages:
       minimatch: 5.1.2
       once: 1.4.0
 
-  /global-dirs/3.0.1:
+  /global-dirs@3.0.1:
     resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
     engines: {node: '>=10'}
     dependencies:
       ini: 2.0.0
     dev: true
 
-  /global-modules/1.0.0:
+  /global-modules@1.0.0:
     resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11592,7 +12038,7 @@ packages:
       resolve-dir: 1.0.1
     dev: false
 
-  /global-prefix/1.0.2:
+  /global-prefix@1.0.2:
     resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11603,26 +12049,26 @@ packages:
       which: 1.3.1
     dev: false
 
-  /global/4.4.0:
+  /global@4.4.0:
     resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
     dependencies:
       min-document: 2.19.0
       process: 0.11.10
     dev: true
 
-  /globals/11.12.0:
+  /globals@11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
     engines: {node: '>=4'}
     dev: true
 
-  /globals/13.19.0:
+  /globals@13.19.0:
     resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==}
     engines: {node: '>=8'}
     dependencies:
       type-fest: 0.20.2
     dev: true
 
-  /globby/11.1.0:
+  /globby@11.1.0:
     resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
     engines: {node: '>=10'}
     dependencies:
@@ -11633,25 +12079,25 @@ packages:
       merge2: 1.4.1
       slash: 3.0.0
 
-  /glogg/1.0.2:
+  /glogg@1.0.2:
     resolution: {integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==}
     engines: {node: '>= 0.10'}
     dependencies:
       sparkles: 1.0.1
     dev: false
 
-  /google-protobuf/3.21.2:
+  /google-protobuf@3.21.2:
     resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==}
     dev: false
     optional: true
 
-  /gopd/1.0.1:
+  /gopd@1.0.1:
     resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
     dependencies:
       get-intrinsic: 1.2.0
     dev: true
 
-  /got/11.8.5:
+  /got@11.8.5:
     resolution: {integrity: sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==}
     engines: {node: '>=10.19.0'}
     dependencies:
@@ -11668,7 +12114,7 @@ packages:
       responselike: 2.0.1
     dev: false
 
-  /got/12.6.0:
+  /got@12.6.0:
     resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -11684,26 +12130,26 @@ packages:
       p-cancelable: 3.0.0
       responselike: 3.0.0
 
-  /graceful-fs/4.2.10:
+  /graceful-fs@4.2.10:
     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
 
-  /graceful-fs/4.2.11:
+  /graceful-fs@4.2.11:
     resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
 
-  /grapheme-splitter/1.0.4:
+  /grapheme-splitter@1.0.4:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
     dev: true
 
-  /graphql/16.6.0:
+  /graphql@16.6.0:
     resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==}
     engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
     dev: true
 
-  /gsap/3.11.4:
+  /gsap@3.11.4:
     resolution: {integrity: sha512-McHhEguHyExMMnjqKA8G+7TvxmlKQGMbjgwAilnFe1e4id7V/tFveRQ2YMZhTYu0oxHGWvbPltdVYQOu3z1SCA==}
     dev: false
 
-  /gulp-cli/2.3.0:
+  /gulp-cli@2.3.0:
     resolution: {integrity: sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11729,7 +12175,7 @@ packages:
       - supports-color
     dev: false
 
-  /gulp-cssnano/2.1.3:
+  /gulp-cssnano@2.1.3:
     resolution: {integrity: sha512-r8qdX5pTXsBb/IRm9loE8Ijz8UiPW/URMC/bKJe4FPNHRaz4aEx8Bev03L0FYHd/7BSGu/ebmfumAkpGuTdenA==}
     dependencies:
       buffer-from: 1.1.2
@@ -11739,12 +12185,12 @@ packages:
       vinyl-sourcemaps-apply: 0.2.1
     dev: false
 
-  /gulp-rename/2.0.0:
+  /gulp-rename@2.0.0:
     resolution: {integrity: sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==}
     engines: {node: '>=4'}
     dev: false
 
-  /gulp-replace/1.1.4:
+  /gulp-replace@1.1.4:
     resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==}
     engines: {node: '>=10'}
     dependencies:
@@ -11755,7 +12201,7 @@ packages:
       yargs-parser: 21.1.1
     dev: false
 
-  /gulp-terser/2.1.0:
+  /gulp-terser@2.1.0:
     resolution: {integrity: sha512-lQ3+JUdHDVISAlUIUSZ/G9Dz/rBQHxOiYDQ70IVWFQeh4b33TC1MCIU+K18w07PS3rq/CVc34aQO4SUbdaNMPQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -11765,7 +12211,7 @@ packages:
       vinyl-sourcemaps-apply: 0.2.1
     dev: false
 
-  /gulp/4.0.2:
+  /gulp@4.0.2:
     resolution: {integrity: sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -11777,14 +12223,14 @@ packages:
       - supports-color
     dev: false
 
-  /gulplog/1.0.0:
+  /gulplog@1.0.0:
     resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==}
     engines: {node: '>= 0.10'}
     dependencies:
       glogg: 1.0.2
     dev: false
 
-  /gunzip-maybe/1.4.2:
+  /gunzip-maybe@1.4.2:
     resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
     hasBin: true
     dependencies:
@@ -11796,12 +12242,12 @@ packages:
       through2: 2.0.5
     dev: true
 
-  /hammerjs/2.0.8:
+  /hammerjs@2.0.8:
     resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
     engines: {node: '>=0.8.0'}
     dev: false
 
-  /handlebars/4.7.7:
+  /handlebars@4.7.7:
     resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
     engines: {node: '>=0.4.7'}
     hasBin: true
@@ -11814,7 +12260,7 @@ packages:
       uglify-js: 3.17.4
     dev: true
 
-  /happy-dom/8.9.0:
+  /happy-dom@8.9.0:
     resolution: {integrity: sha512-JZwJuGdR7ko8L61136YzmrLv7LgTh5b8XaEM3P709mLjyQuXJ3zHTDXvUtBBahRjGlcYW0zGjIiEWizoTUGKfA==}
     dependencies:
       css.escape: 1.5.1
@@ -11827,12 +12273,12 @@ packages:
     transitivePeerDependencies:
       - encoding
 
-  /har-schema/2.0.0:
+  /har-schema@2.0.0:
     resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
     engines: {node: '>=4'}
     dev: false
 
-  /har-validator/5.1.5:
+  /har-validator@5.1.5:
     resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
     engines: {node: '>=6'}
     dependencies:
@@ -11840,50 +12286,50 @@ packages:
       har-schema: 2.0.0
     dev: false
 
-  /has-ansi/2.0.0:
+  /has-ansi@2.0.0:
     resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       ansi-regex: 2.1.1
     dev: false
 
-  /has-bigints/1.0.2:
+  /has-bigints@1.0.2:
     resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
     dev: true
 
-  /has-flag/1.0.0:
+  /has-flag@1.0.0:
     resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /has-flag/3.0.0:
+  /has-flag@3.0.0:
     resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
     engines: {node: '>=4'}
     dev: true
 
-  /has-flag/4.0.0:
+  /has-flag@4.0.0:
     resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
     engines: {node: '>=8'}
 
-  /has-property-descriptors/1.0.0:
+  /has-property-descriptors@1.0.0:
     resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
     dependencies:
       get-intrinsic: 1.2.0
 
-  /has-symbols/1.0.3:
+  /has-symbols@1.0.3:
     resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
     engines: {node: '>= 0.4'}
 
-  /has-tostringtag/1.0.0:
+  /has-tostringtag@1.0.0:
     resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-symbols: 1.0.3
 
-  /has-unicode/2.0.1:
+  /has-unicode@2.0.1:
     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
 
-  /has-value/0.3.1:
+  /has-value@0.3.1:
     resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11892,7 +12338,7 @@ packages:
       isobject: 2.1.0
     dev: false
 
-  /has-value/1.0.0:
+  /has-value@1.0.0:
     resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11901,12 +12347,12 @@ packages:
       isobject: 3.0.1
     dev: false
 
-  /has-values/0.1.4:
+  /has-values@0.1.4:
     resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /has-values/1.0.0:
+  /has-values@1.0.0:
     resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -11914,25 +12360,25 @@ packages:
       kind-of: 4.0.0
     dev: false
 
-  /has/1.0.3:
+  /has@1.0.3:
     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
     engines: {node: '>= 0.4.0'}
     dependencies:
       function-bind: 1.1.1
 
-  /hash-sum/2.0.0:
+  /hash-sum@2.0.0:
     resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
     dev: true
 
-  /hashlru/2.3.0:
+  /hashlru@2.3.0:
     resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==}
     dev: false
 
-  /hast-util-parse-selector/2.2.5:
+  /hast-util-parse-selector@2.2.5:
     resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
     dev: true
 
-  /hastscript/6.0.0:
+  /hastscript@6.0.0:
     resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
     dependencies:
       '@types/hast': 2.3.4
@@ -11942,61 +12388,61 @@ packages:
       space-separated-tokens: 1.1.5
     dev: true
 
-  /he/1.2.0:
+  /he@1.2.0:
     resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
     hasBin: true
 
-  /headers-polyfill/3.1.2:
+  /headers-polyfill@3.1.2:
     resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==}
     dev: true
 
-  /hexoid/1.0.0:
+  /hexoid@1.0.0:
     resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
     engines: {node: '>=8'}
     dev: false
 
-  /highlight.js/10.7.3:
+  /highlight.js@10.7.3:
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
 
-  /homedir-polyfill/1.0.3:
+  /homedir-polyfill@1.0.3:
     resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       parse-passwd: 1.0.0
     dev: false
 
-  /hosted-git-info/2.8.9:
+  /hosted-git-info@2.8.9:
     resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
 
-  /hpagent/1.2.0:
+  /hpagent@1.2.0:
     resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==}
     engines: {node: '>=14'}
     dev: false
 
-  /html-comment-regex/1.1.2:
+  /html-comment-regex@1.1.2:
     resolution: {integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==}
     dev: false
 
-  /html-encoding-sniffer/3.0.0:
+  /html-encoding-sniffer@3.0.0:
     resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
     engines: {node: '>=12'}
     dependencies:
       whatwg-encoding: 2.0.0
     dev: false
 
-  /html-entities/2.3.2:
+  /html-entities@2.3.2:
     resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==}
 
-  /html-escaper/2.0.2:
+  /html-escaper@2.0.2:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
     dev: true
 
-  /html-tags/3.2.0:
+  /html-tags@3.2.0:
     resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
     engines: {node: '>=8'}
     dev: true
 
-  /htmlparser2/8.0.1:
+  /htmlparser2@8.0.1:
     resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
     dependencies:
       domelementtype: 2.3.0
@@ -12004,10 +12450,10 @@ packages:
       domutils: 3.0.1
       entities: 4.4.0
 
-  /http-cache-semantics/4.1.1:
+  /http-cache-semantics@4.1.1:
     resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
 
-  /http-errors/2.0.0:
+  /http-errors@2.0.0:
     resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
     engines: {node: '>= 0.8'}
     dependencies:
@@ -12017,18 +12463,18 @@ packages:
       statuses: 2.0.1
       toidentifier: 1.0.1
 
-  /http-proxy-agent/5.0.0:
+  /http-proxy-agent@5.0.0:
     resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
     engines: {node: '>= 6'}
     dependencies:
       '@tootallnate/once': 2.0.0
       agent-base: 6.0.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /http-signature/1.2.0:
+  /http-signature@1.2.0:
     resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
     engines: {node: '>=0.8', npm: '>=1.3.7'}
     dependencies:
@@ -12037,7 +12483,7 @@ packages:
       sshpk: 1.17.0
     dev: false
 
-  /http-signature/1.3.6:
+  /http-signature@1.3.6:
     resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
     engines: {node: '>=0.10'}
     dependencies:
@@ -12046,7 +12492,7 @@ packages:
       sshpk: 1.17.0
     dev: true
 
-  /http2-wrapper/1.0.3:
+  /http2-wrapper@1.0.3:
     resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
     engines: {node: '>=10.19.0'}
     dependencies:
@@ -12054,99 +12500,99 @@ packages:
       resolve-alpn: 1.2.1
     dev: false
 
-  /http2-wrapper/2.2.0:
+  /http2-wrapper@2.2.0:
     resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==}
     engines: {node: '>=10.19.0'}
     dependencies:
       quick-lru: 5.1.1
       resolve-alpn: 1.2.1
 
-  /http_ece/1.1.0:
+  /http_ece@1.1.0:
     resolution: {integrity: sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==}
     engines: {node: '>=4'}
     dependencies:
       urlsafe-base64: 1.0.0
     dev: false
 
-  /https-proxy-agent/2.2.4:
+  /https-proxy-agent@2.2.4:
     resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==}
     engines: {node: '>= 4.5.0'}
     dependencies:
       agent-base: 4.3.0
-      debug: 3.2.7
+      debug: 3.2.7(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
     dev: false
     optional: true
 
-  /https-proxy-agent/4.0.0:
+  /https-proxy-agent@4.0.0:
     resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==}
     engines: {node: '>= 6.0.0'}
     dependencies:
       agent-base: 5.1.1
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /https-proxy-agent/5.0.1:
+  /https-proxy-agent@5.0.1:
     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
     engines: {node: '>= 6'}
     dependencies:
       agent-base: 6.0.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
 
-  /human-signals/1.1.1:
+  /human-signals@1.1.1:
     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
     engines: {node: '>=8.12.0'}
     dev: true
 
-  /human-signals/2.1.0:
+  /human-signals@2.1.0:
     resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
     engines: {node: '>=10.17.0'}
 
-  /human-signals/3.0.1:
+  /human-signals@3.0.1:
     resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
     engines: {node: '>=12.20.0'}
     dev: true
 
-  /humanize-ms/1.2.1:
+  /humanize-ms@1.2.1:
     resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
     dependencies:
       ms: 2.1.3
     dev: false
 
-  /iconv-lite/0.4.24:
+  /iconv-lite@0.4.24:
     resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       safer-buffer: 2.1.2
 
-  /iconv-lite/0.6.3:
+  /iconv-lite@0.6.3:
     resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       safer-buffer: 2.1.2
 
-  /idb-keyval/6.2.0:
+  /idb-keyval@6.2.0:
     resolution: {integrity: sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==}
     dependencies:
       safari-14-idb-fix: 3.0.0
     dev: false
 
-  /ieee754/1.2.1:
+  /ieee754@1.2.1:
     resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
 
-  /ignore/5.2.4:
+  /ignore@5.2.4:
     resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
     engines: {node: '>= 4'}
 
-  /immutable/4.2.2:
+  /immutable@4.2.2:
     resolution: {integrity: sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==}
 
-  /import-fresh/3.3.0:
+  /import-fresh@3.3.0:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
     engines: {node: '>=6'}
     dependencies:
@@ -12154,7 +12600,7 @@ packages:
       resolve-from: 4.0.0
     dev: true
 
-  /import-local/3.1.0:
+  /import-local@3.1.0:
     resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
     engines: {node: '>=8'}
     hasBin: true
@@ -12163,40 +12609,40 @@ packages:
       resolve-cwd: 3.0.0
     dev: true
 
-  /imurmurhash/0.1.4:
+  /imurmurhash@0.1.4:
     resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
     engines: {node: '>=0.8.19'}
 
-  /indent-string/4.0.0:
+  /indent-string@4.0.0:
     resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
     engines: {node: '>=8'}
 
-  /indexes-of/1.0.1:
+  /indexes-of@1.0.1:
     resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==}
     dev: false
 
-  /infer-owner/1.0.4:
+  /infer-owner@1.0.4:
     resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
     dev: false
 
-  /inflight/1.0.6:
+  /inflight@1.0.6:
     resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
     dependencies:
       once: 1.4.0
       wrappy: 1.0.2
 
-  /inherits/2.0.4:
+  /inherits@2.0.4:
     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
 
-  /ini/1.3.8:
+  /ini@1.3.8:
     resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
 
-  /ini/2.0.0:
+  /ini@2.0.0:
     resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
     engines: {node: '>=10'}
     dev: true
 
-  /inquirer/8.2.5:
+  /inquirer@8.2.5:
     resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
     engines: {node: '>=12.0.0'}
     dependencies:
@@ -12217,15 +12663,15 @@ packages:
       wrap-ansi: 7.0.0
     dev: true
 
-  /insert-text-at-cursor/0.3.0:
+  /insert-text-at-cursor@0.3.0:
     resolution: {integrity: sha512-/nPtyeX9xPUvxZf+r0518B7uqNKlP+LqNJqSiXFEaa2T71rWIwTVXGH7hB9xO/EVdwa5/pWlFCPwShOW81XIxQ==}
     dev: false
 
-  /install-artifact-from-github/1.3.2:
+  /install-artifact-from-github@1.3.2:
     resolution: {integrity: sha512-yCFcLvqk0yQdxx0uJz4t9Z3adDMLAYrcGYv546uRXCSvxE+GqNYhhz/KmrGcUKGI/gVLR9n/e/zM9jX/+ASMJQ==}
     dev: false
 
-  /internal-slot/1.0.5:
+  /internal-slot@1.0.5:
     resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -12234,21 +12680,21 @@ packages:
       side-channel: 1.0.4
     dev: true
 
-  /interpret/1.4.0:
+  /interpret@1.4.0:
     resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
     engines: {node: '>= 0.10'}
 
-  /invert-kv/1.0.0:
+  /invert-kv@1.0.0:
     resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /ioredis/4.28.5:
+  /ioredis@4.28.5:
     resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==}
     engines: {node: '>=6'}
     dependencies:
       cluster-key-slot: 1.1.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       denque: 1.5.1
       lodash.defaults: 4.2.0
       lodash.flatten: 4.4.0
@@ -12262,13 +12708,13 @@ packages:
       - supports-color
     dev: false
 
-  /ioredis/5.2.4:
+  /ioredis@5.2.4:
     resolution: {integrity: sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==}
     engines: {node: '>=12.22.0'}
     dependencies:
       '@ioredis/commands': 1.2.0
       cluster-key-slot: 1.1.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       denque: 2.1.0
       lodash.defaults: 4.2.0
       lodash.isarguments: 3.1.0
@@ -12278,11 +12724,11 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /iota-array/1.0.0:
+  /iota-array@1.0.0:
     resolution: {integrity: sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==}
     dev: false
 
-  /ip-address/7.1.0:
+  /ip-address@7.1.0:
     resolution: {integrity: sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==}
     engines: {node: '>= 10'}
     dependencies:
@@ -12290,7 +12736,7 @@ packages:
       sprintf-js: 1.1.2
     dev: false
 
-  /ip-cidr/3.1.0:
+  /ip-cidr@3.1.0:
     resolution: {integrity: sha512-HUCn4snshEX1P8cja/IyU3qk8FVDW8T5zZcegDFbu4w7NojmAhk5NcOgj3M8+0fmumo1afJTPDtJlzsxLdOjtg==}
     engines: {node: '>=10.0.0'}
     dependencies:
@@ -12298,37 +12744,42 @@ packages:
       jsbn: 1.1.0
     dev: false
 
-  /ip-regex/4.3.0:
+  /ip-regex@4.3.0:
     resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
     engines: {node: '>=8'}
 
-  /ip-regex/5.0.0:
+  /ip-regex@5.0.0:
     resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dev: false
 
-  /ip/2.0.0:
+  /ip@2.0.0:
     resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
 
-  /ipaddr.js/1.9.1:
+  /ipaddr.js@1.9.1:
     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
     engines: {node: '>= 0.10'}
 
-  /ipaddr.js/2.0.1:
+  /ipaddr.js@2.0.1:
     resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==}
     engines: {node: '>= 10'}
 
-  /is-absolute-url/2.1.0:
+  /is-absolute-url@2.1.0:
     resolution: {integrity: sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-absolute-url/3.0.3:
+  /is-absolute-url@3.0.3:
     resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
     engines: {node: '>=8'}
     dev: true
 
-  /is-absolute/1.0.0:
+  /is-absolute-url@4.0.1:
+    resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    dev: true
+
+  /is-absolute@1.0.0:
     resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -12336,32 +12787,32 @@ packages:
       is-windows: 1.0.2
     dev: false
 
-  /is-accessor-descriptor/0.1.6:
+  /is-accessor-descriptor@0.1.6:
     resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 3.2.2
     dev: false
 
-  /is-accessor-descriptor/1.0.0:
+  /is-accessor-descriptor@1.0.0:
     resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 6.0.3
     dev: false
 
-  /is-alphabetical/1.0.4:
+  /is-alphabetical@1.0.4:
     resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
     dev: true
 
-  /is-alphanumerical/1.0.4:
+  /is-alphanumerical@1.0.4:
     resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
     dependencies:
       is-alphabetical: 1.0.4
       is-decimal: 1.0.4
     dev: true
 
-  /is-arguments/1.1.1:
+  /is-arguments@1.1.1:
     resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -12369,7 +12820,7 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-array-buffer/3.0.2:
+  /is-array-buffer@3.0.2:
     resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
     dependencies:
       call-bind: 1.0.2
@@ -12377,26 +12828,26 @@ packages:
       is-typed-array: 1.1.10
     dev: true
 
-  /is-arrayish/0.2.1:
+  /is-arrayish@0.2.1:
     resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
 
-  /is-arrayish/0.3.2:
+  /is-arrayish@0.3.2:
     resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
     dev: false
 
-  /is-bigint/1.0.4:
+  /is-bigint@1.0.4:
     resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
     dependencies:
       has-bigints: 1.0.2
     dev: true
 
-  /is-binary-path/2.1.0:
+  /is-binary-path@2.1.0:
     resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
     engines: {node: '>=8'}
     dependencies:
       binary-extensions: 2.2.0
 
-  /is-boolean-object/1.1.2:
+  /is-boolean-object@1.1.2:
     resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -12404,57 +12855,62 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-buffer/1.1.6:
+  /is-buffer@1.1.6:
     resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
     dev: false
 
-  /is-callable/1.2.7:
+  /is-buffer@2.0.5:
+    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /is-callable@1.2.7:
     resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
     engines: {node: '>= 0.4'}
     dev: true
 
-  /is-ci/3.0.1:
+  /is-ci@3.0.1:
     resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
     hasBin: true
     dependencies:
       ci-info: 3.7.1
     dev: true
 
-  /is-core-module/2.11.0:
+  /is-core-module@2.11.0:
     resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
     dependencies:
       has: 1.0.3
 
-  /is-data-descriptor/0.1.4:
+  /is-data-descriptor@0.1.4:
     resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 3.2.2
     dev: false
 
-  /is-data-descriptor/1.0.0:
+  /is-data-descriptor@1.0.0:
     resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 6.0.3
     dev: false
 
-  /is-date-object/1.0.5:
+  /is-date-object@1.0.5:
     resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-decimal/1.0.4:
+  /is-decimal@1.0.4:
     resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
     dev: true
 
-  /is-deflate/1.0.0:
+  /is-deflate@1.0.0:
     resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
     dev: true
 
-  /is-descriptor/0.1.6:
+  /is-descriptor@0.1.6:
     resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -12463,7 +12919,7 @@ packages:
       kind-of: 5.1.0
     dev: false
 
-  /is-descriptor/1.0.2:
+  /is-descriptor@1.0.2:
     resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -12472,93 +12928,93 @@ packages:
       kind-of: 6.0.3
     dev: false
 
-  /is-docker/2.2.1:
+  /is-docker@2.2.1:
     resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
     engines: {node: '>=8'}
     hasBin: true
     dev: true
 
-  /is-expression/4.0.0:
+  /is-expression@4.0.0:
     resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==}
     dependencies:
       acorn: 7.4.1
       object-assign: 4.1.1
 
-  /is-extendable/0.1.1:
+  /is-extendable@0.1.1:
     resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-extendable/1.0.1:
+  /is-extendable@1.0.1:
     resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-plain-object: 2.0.4
     dev: false
 
-  /is-extglob/2.1.1:
+  /is-extglob@2.1.1:
     resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
     engines: {node: '>=0.10.0'}
 
-  /is-file-animated/1.0.2:
+  /is-file-animated@1.0.2:
     resolution: {integrity: sha512-TAYDUkvyBmxqneRU26zzpeHLAgtzEOIsRQWrtDidPT/tFK3Yc0WKgtF3u4oOEAiN0kAuVfl7MTgbD0vXdFDztA==}
     dev: false
 
-  /is-fullwidth-code-point/1.0.0:
+  /is-fullwidth-code-point@1.0.0:
     resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       number-is-nan: 1.0.1
     dev: false
 
-  /is-fullwidth-code-point/3.0.0:
+  /is-fullwidth-code-point@3.0.0:
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     engines: {node: '>=8'}
 
-  /is-fullwidth-code-point/4.0.0:
+  /is-fullwidth-code-point@4.0.0:
     resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
     engines: {node: '>=12'}
     dev: true
 
-  /is-function/1.0.2:
+  /is-function@1.0.2:
     resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
     dev: true
 
-  /is-generator-fn/2.1.0:
+  /is-generator-fn@2.1.0:
     resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
     engines: {node: '>=6'}
     dev: true
 
-  /is-generator-function/1.0.10:
+  /is-generator-function@1.0.10:
     resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-glob/3.1.0:
+  /is-glob@3.1.0:
     resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-extglob: 2.1.1
     dev: false
 
-  /is-glob/4.0.3:
+  /is-glob@4.0.3:
     resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-extglob: 2.1.1
 
-  /is-gzip/1.0.0:
+  /is-gzip@1.0.0:
     resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /is-hexadecimal/1.0.4:
+  /is-hexadecimal@1.0.4:
     resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
     dev: true
 
-  /is-installed-globally/0.4.0:
+  /is-installed-globally@0.4.0:
     resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -12566,26 +13022,26 @@ packages:
       is-path-inside: 3.0.3
     dev: true
 
-  /is-interactive/1.0.0:
+  /is-interactive@1.0.0:
     resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
     engines: {node: '>=8'}
     dev: true
 
-  /is-ip/3.1.0:
+  /is-ip@3.1.0:
     resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
     engines: {node: '>=8'}
     dependencies:
       ip-regex: 4.3.0
 
-  /is-lambda/1.0.1:
+  /is-lambda@1.0.1:
     resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
     dev: false
 
-  /is-map/2.0.2:
+  /is-map@2.0.2:
     resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
     dev: true
 
-  /is-nan/1.3.2:
+  /is-nan@1.3.2:
     resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -12593,142 +13049,147 @@ packages:
       define-properties: 1.1.4
     dev: true
 
-  /is-negated-glob/1.0.0:
+  /is-negated-glob@1.0.0:
     resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-negative-zero/2.0.2:
+  /is-negative-zero@2.0.2:
     resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
     engines: {node: '>= 0.4'}
     dev: true
 
-  /is-node-process/1.0.1:
+  /is-node-process@1.0.1:
     resolution: {integrity: sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==}
     dev: true
 
-  /is-number-object/1.0.7:
+  /is-number-object@1.0.7:
     resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-number/3.0.0:
+  /is-number@3.0.0:
     resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 3.2.2
     dev: false
 
-  /is-number/4.0.0:
+  /is-number@4.0.0:
     resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-number/7.0.0:
+  /is-number@7.0.0:
     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
     engines: {node: '>=0.12.0'}
 
-  /is-path-cwd/2.2.0:
+  /is-path-cwd@2.2.0:
     resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
     engines: {node: '>=6'}
     dev: true
 
-  /is-path-inside/3.0.3:
+  /is-path-inside@3.0.3:
     resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
     engines: {node: '>=8'}
     dev: true
 
-  /is-plain-obj/1.1.0:
+  /is-plain-obj@1.1.0:
     resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-plain-object/2.0.4:
+  /is-plain-obj@4.1.0:
+    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+    engines: {node: '>=12'}
+    dev: true
+
+  /is-plain-object@2.0.4:
     resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
     engines: {node: '>=0.10.0'}
     dependencies:
       isobject: 3.0.1
 
-  /is-plain-object/5.0.0:
+  /is-plain-object@5.0.0:
     resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
     engines: {node: '>=0.10.0'}
 
-  /is-potential-custom-element-name/1.0.1:
+  /is-potential-custom-element-name@1.0.1:
     resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
     dev: false
 
-  /is-promise/2.2.2:
+  /is-promise@2.2.2:
     resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
 
-  /is-regex/1.1.4:
+  /is-regex@1.1.4:
     resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
       has-tostringtag: 1.0.0
 
-  /is-relative/1.0.0:
+  /is-relative@1.0.0:
     resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-unc-path: 1.0.0
     dev: false
 
-  /is-set/2.0.2:
+  /is-set@2.0.2:
     resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
     dev: true
 
-  /is-shared-array-buffer/1.0.2:
+  /is-shared-array-buffer@1.0.2:
     resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
     dependencies:
       call-bind: 1.0.2
     dev: true
 
-  /is-stream/1.1.0:
+  /is-stream@1.1.0:
     resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-stream/2.0.1:
+  /is-stream@2.0.1:
     resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
     engines: {node: '>=8'}
 
-  /is-stream/3.0.0:
+  /is-stream@3.0.0:
     resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dev: true
 
-  /is-string/1.0.7:
+  /is-string@1.0.7:
     resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-svg/2.1.0:
+  /is-svg@2.1.0:
     resolution: {integrity: sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       html-comment-regex: 1.1.2
     dev: false
 
-  /is-svg/4.3.2:
+  /is-svg@4.3.2:
     resolution: {integrity: sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw==}
     engines: {node: '>=6'}
     dependencies:
       fast-xml-parser: 3.21.1
     dev: false
 
-  /is-symbol/1.0.4:
+  /is-symbol@1.0.4:
     resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
     engines: {node: '>= 0.4'}
     dependencies:
       has-symbols: 1.0.3
     dev: true
 
-  /is-typed-array/1.1.10:
+  /is-typed-array@1.1.10:
     resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -12739,89 +13200,89 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
-  /is-typedarray/1.0.0:
+  /is-typedarray@1.0.0:
     resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
 
-  /is-unc-path/1.0.0:
+  /is-unc-path@1.0.0:
     resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       unc-path-regex: 0.1.2
     dev: false
 
-  /is-unicode-supported/0.1.0:
+  /is-unicode-supported@0.1.0:
     resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
     engines: {node: '>=10'}
     dev: true
 
-  /is-utf8/0.2.1:
+  /is-utf8@0.2.1:
     resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
     dev: false
 
-  /is-valid-glob/1.0.0:
+  /is-valid-glob@1.0.0:
     resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-weakmap/2.0.1:
+  /is-weakmap@2.0.1:
     resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
     dev: true
 
-  /is-weakref/1.0.2:
+  /is-weakref@1.0.2:
     resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
     dependencies:
       call-bind: 1.0.2
     dev: true
 
-  /is-weakset/2.0.2:
+  /is-weakset@2.0.2:
     resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
     dependencies:
       call-bind: 1.0.2
       get-intrinsic: 1.2.0
     dev: true
 
-  /is-windows/1.0.2:
+  /is-windows@1.0.2:
     resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /is-wsl/2.2.0:
+  /is-wsl@2.2.0:
     resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
     engines: {node: '>=8'}
     dependencies:
       is-docker: 2.2.1
     dev: true
 
-  /isarray/0.0.1:
+  /isarray@0.0.1:
     resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
 
-  /isarray/1.0.0:
+  /isarray@1.0.0:
     resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
 
-  /isarray/2.0.5:
+  /isarray@2.0.5:
     resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
     dev: true
 
-  /isexe/2.0.0:
+  /isexe@2.0.0:
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
 
-  /isobject/2.1.0:
+  /isobject@2.1.0:
     resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       isarray: 1.0.0
     dev: false
 
-  /isobject/3.0.1:
+  /isobject@3.0.1:
     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
     engines: {node: '>=0.10.0'}
 
-  /isobject/4.0.0:
+  /isobject@4.0.0:
     resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /isomorphic-unfetch/3.1.0:
+  /isomorphic-unfetch@3.1.0:
     resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
     dependencies:
       node-fetch: 2.6.7
@@ -12830,15 +13291,15 @@ packages:
       - encoding
     dev: true
 
-  /isstream/0.1.2:
+  /isstream@0.1.2:
     resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
 
-  /istanbul-lib-coverage/3.2.0:
+  /istanbul-lib-coverage@3.2.0:
     resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
     engines: {node: '>=8'}
     dev: true
 
-  /istanbul-lib-instrument/5.2.1:
+  /istanbul-lib-instrument@5.2.1:
     resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
     engines: {node: '>=8'}
     dependencies:
@@ -12851,7 +13312,7 @@ packages:
       - supports-color
     dev: true
 
-  /istanbul-lib-report/3.0.0:
+  /istanbul-lib-report@3.0.0:
     resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==}
     engines: {node: '>=8'}
     dependencies:
@@ -12860,18 +13321,18 @@ packages:
       supports-color: 7.2.0
     dev: true
 
-  /istanbul-lib-source-maps/4.0.1:
+  /istanbul-lib-source-maps@4.0.1:
     resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
     engines: {node: '>=10'}
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       istanbul-lib-coverage: 3.2.0
       source-map: 0.6.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /istanbul-reports/3.1.5:
+  /istanbul-reports@3.1.5:
     resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
     engines: {node: '>=8'}
     dependencies:
@@ -12879,7 +13340,7 @@ packages:
       istanbul-lib-report: 3.0.0
     dev: true
 
-  /istextorbinary/3.3.0:
+  /istextorbinary@3.3.0:
     resolution: {integrity: sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==}
     engines: {node: '>=8'}
     dependencies:
@@ -12887,12 +13348,12 @@ packages:
       textextensions: 3.3.0
     dev: false
 
-  /iterare/1.2.1:
+  /iterare@1.2.1:
     resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
     engines: {node: '>=6'}
     dev: false
 
-  /jake/10.8.5:
+  /jake@10.8.5:
     resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
     engines: {node: '>=10'}
     hasBin: true
@@ -12902,7 +13363,7 @@ packages:
       filelist: 1.0.4
       minimatch: 3.1.2
 
-  /jest-changed-files/29.5.0:
+  /jest-changed-files@29.5.0:
     resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -12910,7 +13371,7 @@ packages:
       p-limit: 3.1.0
     dev: true
 
-  /jest-circus/29.5.0:
+  /jest-circus@29.5.0:
     resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -12938,7 +13399,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-cli/29.5.0_@types+node@18.15.0:
+  /jest-cli@29.5.0(@types/node@18.15.0):
     resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -12955,7 +13416,7 @@ packages:
       exit: 0.1.2
       graceful-fs: 4.2.10
       import-local: 3.1.0
-      jest-config: 29.5.0_@types+node@18.15.0
+      jest-config: 29.5.0(@types/node@18.15.0)
       jest-util: 29.5.0
       jest-validate: 29.5.0
       prompts: 2.4.2
@@ -12966,7 +13427,7 @@ packages:
       - ts-node
     dev: true
 
-  /jest-config/29.5.0_@types+node@18.15.0:
+  /jest-config@29.5.0(@types/node@18.15.0):
     resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -12982,7 +13443,7 @@ packages:
       '@jest/test-sequencer': 29.5.0
       '@jest/types': 29.5.0
       '@types/node': 18.15.0
-      babel-jest: 29.5.0_@babel+core@7.21.3
+      babel-jest: 29.5.0(@babel/core@7.21.3)
       chalk: 4.1.2
       ci-info: 3.7.1
       deepmerge: 4.2.2
@@ -13005,7 +13466,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-diff/29.5.0:
+  /jest-diff@29.5.0:
     resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13015,14 +13476,14 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-docblock/29.4.3:
+  /jest-docblock@29.4.3:
     resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       detect-newline: 3.1.0
     dev: true
 
-  /jest-each/29.5.0:
+  /jest-each@29.5.0:
     resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13033,7 +13494,7 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-environment-node/29.5.0:
+  /jest-environment-node@29.5.0:
     resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13045,12 +13506,12 @@ packages:
       jest-util: 29.5.0
     dev: true
 
-  /jest-get-type/29.4.3:
+  /jest-get-type@29.4.3:
     resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
-  /jest-haste-map/29.5.0:
+  /jest-haste-map@29.5.0:
     resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13069,7 +13530,7 @@ packages:
       fsevents: 2.3.2
     dev: true
 
-  /jest-leak-detector/29.5.0:
+  /jest-leak-detector@29.5.0:
     resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13077,7 +13538,7 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-matcher-utils/29.5.0:
+  /jest-matcher-utils@29.5.0:
     resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13087,7 +13548,7 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-message-util/29.5.0:
+  /jest-message-util@29.5.0:
     resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13102,7 +13563,7 @@ packages:
       stack-utils: 2.0.6
     dev: true
 
-  /jest-mock/27.5.1:
+  /jest-mock@27.5.1:
     resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==}
     engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
     dependencies:
@@ -13110,7 +13571,7 @@ packages:
       '@types/node': 18.15.0
     dev: true
 
-  /jest-mock/29.5.0:
+  /jest-mock@29.5.0:
     resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13119,7 +13580,7 @@ packages:
       jest-util: 29.5.0
     dev: true
 
-  /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0:
+  /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0):
     resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
     engines: {node: '>=6'}
     peerDependencies:
@@ -13131,12 +13592,12 @@ packages:
       jest-resolve: 29.5.0
     dev: true
 
-  /jest-regex-util/29.4.3:
+  /jest-regex-util@29.4.3:
     resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
-  /jest-resolve-dependencies/29.5.0:
+  /jest-resolve-dependencies@29.5.0:
     resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13146,14 +13607,14 @@ packages:
       - supports-color
     dev: true
 
-  /jest-resolve/29.5.0:
+  /jest-resolve@29.5.0:
     resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       chalk: 4.1.2
       graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
-      jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0
+      jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0)
       jest-util: 29.5.0
       jest-validate: 29.5.0
       resolve: 1.22.1
@@ -13161,7 +13622,7 @@ packages:
       slash: 3.0.0
     dev: true
 
-  /jest-runner/29.5.0:
+  /jest-runner@29.5.0:
     resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13190,7 +13651,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-runtime/29.5.0:
+  /jest-runtime@29.5.0:
     resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13220,14 +13681,14 @@ packages:
       - supports-color
     dev: true
 
-  /jest-snapshot/29.5.0:
+  /jest-snapshot@29.5.0:
     resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@babel/core': 7.21.3
       '@babel/generator': 7.21.3
-      '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3
+      '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3)
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
       '@jest/expect-utils': 29.5.0
@@ -13235,7 +13696,7 @@ packages:
       '@jest/types': 29.5.0
       '@types/babel__traverse': 7.18.3
       '@types/prettier': 2.7.2
-      babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3
+      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
       chalk: 4.1.2
       expect: 29.5.0
       graceful-fs: 4.2.11
@@ -13251,7 +13712,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-util/29.5.0:
+  /jest-util@29.5.0:
     resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13263,7 +13724,7 @@ packages:
       picomatch: 2.3.1
     dev: true
 
-  /jest-validate/29.5.0:
+  /jest-validate@29.5.0:
     resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13275,7 +13736,7 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
-  /jest-watcher/29.5.0:
+  /jest-watcher@29.5.0:
     resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13289,7 +13750,7 @@ packages:
       string-length: 4.0.2
     dev: true
 
-  /jest-worker/29.5.0:
+  /jest-worker@29.5.0:
     resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -13299,7 +13760,7 @@ packages:
       supports-color: 8.1.1
     dev: true
 
-  /jest/29.5.0_@types+node@18.15.0:
+  /jest@29.5.0(@types/node@18.15.0):
     resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -13312,14 +13773,14 @@ packages:
       '@jest/core': 29.5.0
       '@jest/types': 29.5.0
       import-local: 3.1.0
-      jest-cli: 29.5.0_@types+node@18.15.0
+      jest-cli: 29.5.0(@types/node@18.15.0)
     transitivePeerDependencies:
       - '@types/node'
       - supports-color
       - ts-node
     dev: true
 
-  /joi/17.7.0:
+  /joi@17.7.0:
     resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==}
     dependencies:
       '@hapi/hoek': 9.3.0
@@ -13329,19 +13790,19 @@ packages:
       '@sideway/pinpoint': 2.0.0
     dev: true
 
-  /jpeg-js/0.3.7:
+  /jpeg-js@0.3.7:
     resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==}
     dev: false
 
-  /jpeg-js/0.4.4:
+  /jpeg-js@0.4.4:
     resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
     dev: false
 
-  /js-base64/2.6.4:
+  /js-base64@2.6.4:
     resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
     dev: false
 
-  /js-beautify/1.14.6:
+  /js-beautify@1.14.6:
     resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==}
     engines: {node: '>=10'}
     hasBin: true
@@ -13352,23 +13813,23 @@ packages:
       nopt: 6.0.0
     dev: true
 
-  /js-levenshtein/1.1.6:
+  /js-levenshtein@1.1.6:
     resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /js-sdsl/4.2.0:
+  /js-sdsl@4.2.0:
     resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
     dev: true
 
-  /js-stringify/1.0.2:
+  /js-stringify@1.0.2:
     resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
 
-  /js-tokens/4.0.0:
+  /js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
     dev: true
 
-  /js-yaml/3.14.1:
+  /js-yaml@3.14.1:
     resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
     hasBin: true
     dependencies:
@@ -13376,7 +13837,7 @@ packages:
       esprima: 4.0.1
     dev: true
 
-  /js-yaml/3.7.0:
+  /js-yaml@3.7.0:
     resolution: {integrity: sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==}
     hasBin: true
     dependencies:
@@ -13384,23 +13845,23 @@ packages:
       esprima: 2.7.3
     dev: false
 
-  /js-yaml/4.1.0:
+  /js-yaml@4.1.0:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
     dependencies:
       argparse: 2.0.1
 
-  /jsbn/0.1.1:
+  /jsbn@0.1.1:
     resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
 
-  /jsbn/1.1.0:
+  /jsbn@1.1.0:
     resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
     dev: false
 
-  /jschardet/3.0.0:
+  /jschardet@3.0.0:
     resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==}
     engines: {node: '>=0.1.90'}
 
-  /jscodeshift/0.14.0_@babel+preset-env@7.20.2:
+  /jscodeshift@0.14.0(@babel/preset-env@7.20.2):
     resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
     hasBin: true
     peerDependencies:
@@ -13408,15 +13869,15 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/parser': 7.21.3
-      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3
-      '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3
-      '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3
-      '@babel/preset-env': 7.20.2_@babel+core@7.21.3
-      '@babel/preset-flow': 7.18.6_@babel+core@7.21.3
-      '@babel/preset-typescript': 7.21.0_@babel+core@7.21.3
-      '@babel/register': 7.21.0_@babel+core@7.21.3
-      babel-core: 7.0.0-bridge.0_@babel+core@7.21.3
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/preset-flow': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-typescript': 7.21.0(@babel/core@7.21.3)
+      '@babel/register': 7.21.0(@babel/core@7.21.3)
+      babel-core: 7.0.0-bridge.0(@babel/core@7.21.3)
       chalk: 4.1.2
       flow-parser: 0.202.0
       graceful-fs: 4.2.11
@@ -13430,7 +13891,7 @@ packages:
       - supports-color
     dev: true
 
-  /jsdom/21.1.0:
+  /jsdom@21.1.0:
     resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==}
     engines: {node: '>=14'}
     peerDependencies:
@@ -13471,62 +13932,62 @@ packages:
       - utf-8-validate
     dev: false
 
-  /jsesc/0.5.0:
+  /jsesc@0.5.0:
     resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
     hasBin: true
     dev: true
 
-  /jsesc/2.5.2:
+  /jsesc@2.5.2:
     resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
     engines: {node: '>=4'}
     hasBin: true
     dev: true
 
-  /json-buffer/3.0.1:
+  /json-buffer@3.0.1:
     resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
 
-  /json-parse-even-better-errors/2.3.1:
+  /json-parse-even-better-errors@2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
     dev: true
 
-  /json-schema-traverse/0.4.1:
+  /json-schema-traverse@0.4.1:
     resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
 
-  /json-schema-traverse/1.0.0:
+  /json-schema-traverse@1.0.0:
     resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
     dev: false
 
-  /json-schema/0.4.0:
+  /json-schema@0.4.0:
     resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
 
-  /json-stable-stringify-without-jsonify/1.0.1:
+  /json-stable-stringify-without-jsonify@1.0.1:
     resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
 
-  /json-stringify-safe/5.0.1:
+  /json-stringify-safe@5.0.1:
     resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
 
-  /json5/1.0.1:
+  /json5@1.0.1:
     resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
     hasBin: true
     dependencies:
       minimist: 1.2.7
     dev: true
 
-  /json5/2.2.3:
+  /json5@2.2.3:
     resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
     engines: {node: '>=6'}
 
-  /jsonc-parser/3.2.0:
+  /jsonc-parser@3.2.0:
     resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
     dev: true
 
-  /jsonfile/4.0.0:
+  /jsonfile@4.0.0:
     resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
     optionalDependencies:
       graceful-fs: 4.2.11
     dev: false
 
-  /jsonfile/5.0.0:
+  /jsonfile@5.0.0:
     resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
     dependencies:
       universalify: 0.1.2
@@ -13534,7 +13995,7 @@ packages:
       graceful-fs: 4.2.11
     dev: false
 
-  /jsonfile/6.1.0:
+  /jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
     dependencies:
       universalify: 2.0.0
@@ -13542,7 +14003,7 @@ packages:
       graceful-fs: 4.2.11
     dev: true
 
-  /jsonld/8.1.1:
+  /jsonld@8.1.1:
     resolution: {integrity: sha512-TbtV1hlnoDYxbscazbxcS7seDGV+pc0yktxpMySh0OBFvnLw/TIth0jiQtP/9r+ywuCbtj10XjDNBIkRgiyeUg==}
     engines: {node: '>=14'}
     dependencies:
@@ -13554,7 +14015,7 @@ packages:
       - web-streams-polyfill
     dev: false
 
-  /jsprim/1.4.2:
+  /jsprim@1.4.2:
     resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
     engines: {node: '>=0.6.0'}
     dependencies:
@@ -13564,7 +14025,7 @@ packages:
       verror: 1.10.0
     dev: false
 
-  /jsprim/2.0.2:
+  /jsprim@2.0.2:
     resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
     engines: {'0': node >=0.6.0}
     dependencies:
@@ -13574,29 +14035,29 @@ packages:
       verror: 1.10.0
     dev: true
 
-  /jsrsasign/10.6.1:
+  /jsrsasign@10.6.1:
     resolution: {integrity: sha512-emiQ05haY9CRj1Ho/LiuCqr/+8RgJuWdiHYNglIg2Qjfz0n+pnUq9I2QHplXuOMO2EnAW1oCGC1++aU5VoWSlw==}
     dev: false
 
-  /jssha/3.3.0:
+  /jssha@3.3.0:
     resolution: {integrity: sha512-w9OtT4ALL+fbbwG3gw7erAO0jvS5nfvrukGPMWIAoea359B26ALXGpzy4YJSp9yGnpUvuvOw1nSjSoHDfWSr1w==}
     dev: false
 
-  /jstransformer/1.0.0:
+  /jstransformer@1.0.0:
     resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==}
     dependencies:
       is-promise: 2.2.2
       promise: 7.3.1
 
-  /just-debounce/1.1.0:
+  /just-debounce@1.1.0:
     resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==}
     dev: false
 
-  /just-extend/4.2.1:
+  /just-extend@4.2.1:
     resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==}
     dev: true
 
-  /jwa/2.0.0:
+  /jwa@2.0.0:
     resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
     dependencies:
       buffer-equal-constant-time: 1.0.1
@@ -13604,47 +14065,47 @@ packages:
       safe-buffer: 5.2.1
     dev: false
 
-  /jws/4.0.0:
+  /jws@4.0.0:
     resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
     dependencies:
       jwa: 2.0.0
       safe-buffer: 5.2.1
     dev: false
 
-  /keyv/4.5.2:
+  /keyv@4.5.2:
     resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==}
     dependencies:
       json-buffer: 3.0.1
 
-  /kind-of/3.2.2:
+  /kind-of@3.2.2:
     resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-buffer: 1.1.6
     dev: false
 
-  /kind-of/4.0.0:
+  /kind-of@4.0.0:
     resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-buffer: 1.1.6
     dev: false
 
-  /kind-of/5.1.0:
+  /kind-of@5.1.0:
     resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /kind-of/6.0.3:
+  /kind-of@6.0.3:
     resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
     engines: {node: '>=0.10.0'}
 
-  /kleur/3.0.3:
+  /kleur@3.0.3:
     resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
     engines: {node: '>=6'}
     dev: true
 
-  /ky-universal/0.10.1_ky@0.30.0:
+  /ky-universal@0.10.1(ky@0.30.0):
     resolution: {integrity: sha512-r8909k+ELKZAxhVA5c440x22hqw5XcMRwLRbgpPQk4JHy3/ddJnvzcnSo5Ww3HdKdNeS3Y8dBgcIYyVahMa46g==}
     engines: {node: '>=14'}
     peerDependencies:
@@ -13659,12 +14120,12 @@ packages:
       node-fetch: 3.3.0
     dev: false
 
-  /ky/0.30.0:
+  /ky@0.30.0:
     resolution: {integrity: sha512-X/u76z4JtDVq10u1JA5UQfatPxgPaVDMYTrgHyiTpGN2z4TMEJkIHsoSBBSg9SWZEIXTKsi9kHgiQ9o3Y/4yog==}
     engines: {node: '>=12'}
     dev: false
 
-  /last-run/1.1.1:
+  /last-run@1.1.1:
     resolution: {integrity: sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -13672,12 +14133,12 @@ packages:
       es6-weak-map: 2.0.3
     dev: false
 
-  /lazy-ass/1.6.0:
+  /lazy-ass@1.6.0:
     resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==}
     engines: {node: '> 0.8'}
     dev: true
 
-  /lazy-universal-dotenv/4.0.0:
+  /lazy-universal-dotenv@4.0.0:
     resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==}
     engines: {node: '>=14.0.0'}
     dependencies:
@@ -13686,40 +14147,40 @@ packages:
       dotenv-expand: 10.0.0
     dev: true
 
-  /lazystream/1.0.1:
+  /lazystream@1.0.1:
     resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
     engines: {node: '>= 0.6.3'}
     dependencies:
       readable-stream: 2.3.7
     dev: false
 
-  /lcid/1.0.0:
+  /lcid@1.0.0:
     resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       invert-kv: 1.0.0
     dev: false
 
-  /lead/1.0.0:
+  /lead@1.0.0:
     resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==}
     engines: {node: '>= 0.10'}
     dependencies:
       flush-write-stream: 1.1.1
     dev: false
 
-  /leven/3.1.0:
+  /leven@3.1.0:
     resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
     engines: {node: '>=6'}
     dev: true
 
-  /levn/0.3.0:
+  /levn@0.3.0:
     resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
     engines: {node: '>= 0.8.0'}
     dependencies:
       prelude-ls: 1.1.2
       type-check: 0.3.2
 
-  /levn/0.4.1:
+  /levn@0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -13727,7 +14188,7 @@ packages:
       type-check: 0.4.0
     dev: true
 
-  /liftoff/3.1.0:
+  /liftoff@3.1.0:
     resolution: {integrity: sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==}
     engines: {node: '>= 0.8'}
     dependencies:
@@ -13743,7 +14204,7 @@ packages:
       - supports-color
     dev: false
 
-  /light-my-request/5.8.0:
+  /light-my-request@5.8.0:
     resolution: {integrity: sha512-4BtD5C+VmyTpzlDPCZbsatZMJVgUIciSOwYhJDCbLffPZ35KoDkDj4zubLeHDEb35b4kkPeEv5imbh+RJxK/Pg==}
     dependencies:
       cookie: 0.5.0
@@ -13751,15 +14212,15 @@ packages:
       set-cookie-parser: 2.5.1
     dev: false
 
-  /lines-and-columns/1.2.4:
+  /lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
     dev: true
 
-  /listenercount/1.0.1:
+  /listenercount@1.0.1:
     resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==}
     dev: false
 
-  /listr2/3.14.0_enquirer@2.3.6:
+  /listr2@3.14.0(enquirer@2.3.6):
     resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
     engines: {node: '>=10.0.0'}
     peerDependencies:
@@ -13779,7 +14240,7 @@ packages:
       wrap-ansi: 7.0.0
     dev: true
 
-  /load-json-file/1.1.0:
+  /load-json-file@1.1.0:
     resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -13790,16 +14251,16 @@ packages:
       strip-bom: 2.0.0
     dev: false
 
-  /loadjs/4.2.0:
+  /loadjs@4.2.0:
     resolution: {integrity: sha512-AgQGZisAlTPbTEzrHPb6q+NYBMD+DP9uvGSIjSUM5uG+0jG15cb8axWpxuOIqrmQjn6scaaH8JwloiP27b2KXA==}
     dev: false
 
-  /local-pkg/0.4.3:
+  /local-pkg@0.4.3:
     resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
     engines: {node: '>=14'}
     dev: true
 
-  /locate-path/3.0.0:
+  /locate-path@3.0.0:
     resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
     engines: {node: '>=6'}
     dependencies:
@@ -13807,68 +14268,68 @@ packages:
       path-exists: 3.0.0
     dev: true
 
-  /locate-path/5.0.0:
+  /locate-path@5.0.0:
     resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
     engines: {node: '>=8'}
     dependencies:
       p-locate: 4.1.0
 
-  /locate-path/6.0.0:
+  /locate-path@6.0.0:
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
     dependencies:
       p-locate: 5.0.0
     dev: true
 
-  /lodash.debounce/4.0.8:
+  /lodash.debounce@4.0.8:
     resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
     dev: true
 
-  /lodash.defaults/4.2.0:
+  /lodash.defaults@4.2.0:
     resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
 
-  /lodash.difference/4.5.0:
+  /lodash.difference@4.5.0:
     resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
     dev: false
 
-  /lodash.flatten/4.4.0:
+  /lodash.flatten@4.4.0:
     resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
     dev: false
 
-  /lodash.get/4.4.2:
+  /lodash.get@4.4.2:
     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
     dev: true
 
-  /lodash.isarguments/3.1.0:
+  /lodash.isarguments@3.1.0:
     resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
 
-  /lodash.isplainobject/4.0.6:
+  /lodash.isplainobject@4.0.6:
     resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
     dev: false
 
-  /lodash.memoize/4.1.2:
+  /lodash.memoize@4.1.2:
     resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
     dev: false
 
-  /lodash.merge/4.6.2:
+  /lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
 
-  /lodash.once/4.1.1:
+  /lodash.once@4.1.1:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
     dev: true
 
-  /lodash.union/4.6.0:
+  /lodash.union@4.6.0:
     resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
     dev: false
 
-  /lodash.uniq/4.5.0:
+  /lodash.uniq@4.5.0:
     resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
     dev: false
 
-  /lodash/4.17.21:
+  /lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
-  /log-symbols/4.1.0:
+  /log-symbols@4.1.0:
     resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
     engines: {node: '>=10'}
     dependencies:
@@ -13876,7 +14337,7 @@ packages:
       is-unicode-supported: 0.1.0
     dev: true
 
-  /log-update/4.0.0:
+  /log-update@4.0.0:
     resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
     engines: {node: '>=10'}
     dependencies:
@@ -13886,93 +14347,93 @@ packages:
       wrap-ansi: 6.2.0
     dev: true
 
-  /long/4.0.0:
+  /long@4.0.0:
     resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
     dev: false
 
-  /loose-envify/1.4.0:
+  /loose-envify@1.4.0:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
     hasBin: true
     dependencies:
       js-tokens: 4.0.0
     dev: true
 
-  /loupe/2.3.6:
+  /loupe@2.3.6:
     resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
     dependencies:
       get-func-name: 2.0.0
     dev: true
 
-  /lowercase-keys/2.0.0:
+  /lowercase-keys@2.0.0:
     resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
     engines: {node: '>=8'}
     dev: false
 
-  /lowercase-keys/3.0.0:
+  /lowercase-keys@3.0.0:
     resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
-  /lowlight/1.20.0:
+  /lowlight@1.20.0:
     resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
     dependencies:
       fault: 1.0.4
       highlight.js: 10.7.3
     dev: true
 
-  /lru-cache/4.1.5:
+  /lru-cache@4.1.5:
     resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
     dependencies:
       pseudomap: 1.0.2
       yallist: 2.1.2
 
-  /lru-cache/5.1.1:
+  /lru-cache@5.1.1:
     resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
     dependencies:
       yallist: 3.1.1
     dev: true
 
-  /lru-cache/6.0.0:
+  /lru-cache@6.0.0:
     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
     engines: {node: '>=10'}
     dependencies:
       yallist: 4.0.0
 
-  /lru-cache/7.14.1:
+  /lru-cache@7.14.1:
     resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==}
     engines: {node: '>=12'}
     dev: false
 
-  /lru-cache/8.0.4:
+  /lru-cache@8.0.4:
     resolution: {integrity: sha512-E9FF6+Oc/uFLqZCuZwRKUzgFt5Raih6LfxknOSAVTjNkrCZkBf7DQCwJxZQgd9l4eHjIJDGR+E+1QKD1RhThPw==}
     engines: {node: '>=16.14'}
     dev: true
 
-  /luxon/3.2.1:
+  /luxon@3.2.1:
     resolution: {integrity: sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==}
     engines: {node: '>=12'}
 
-  /lz-string/1.5.0:
+  /lz-string@1.5.0:
     resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
     hasBin: true
     dev: true
 
-  /magic-string/0.25.9:
+  /magic-string@0.25.9:
     resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
     dependencies:
       sourcemap-codec: 1.4.8
 
-  /magic-string/0.27.0:
+  /magic-string@0.27.0:
     resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
     engines: {node: '>=12'}
     dependencies:
       '@jridgewell/sourcemap-codec': 1.4.14
     dev: true
 
-  /mailcheck/1.1.1:
+  /mailcheck@1.1.1:
     resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
     dev: false
 
-  /make-dir/2.1.0:
+  /make-dir@2.1.0:
     resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
     engines: {node: '>=6'}
     dependencies:
@@ -13980,13 +14441,13 @@ packages:
       semver: 5.7.1
     dev: true
 
-  /make-dir/3.1.0:
+  /make-dir@3.1.0:
     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
     engines: {node: '>=8'}
     dependencies:
       semver: 6.3.0
 
-  /make-fetch-happen/10.2.1:
+  /make-fetch-happen@10.2.1:
     resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -14011,40 +14472,40 @@ packages:
       - supports-color
     dev: false
 
-  /make-iterator/1.0.1:
+  /make-iterator@1.0.1:
     resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 6.0.3
     dev: false
 
-  /makeerror/1.0.12:
+  /makeerror@1.0.12:
     resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
     dependencies:
       tmpl: 1.0.5
     dev: true
 
-  /map-cache/0.2.2:
+  /map-cache@0.2.2:
     resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /map-or-similar/1.5.0:
+  /map-or-similar@1.5.0:
     resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
     dev: true
 
-  /map-stream/0.1.0:
+  /map-stream@0.1.0:
     resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
     dev: true
 
-  /map-visit/1.0.0:
+  /map-visit@1.0.0:
     resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
     engines: {node: '>=0.10.0'}
     dependencies:
       object-visit: 1.0.1
     dev: false
 
-  /markdown-to-jsx/7.2.0_react@18.2.0:
+  /markdown-to-jsx@7.2.0(react@18.2.0):
     resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==}
     engines: {node: '>= 10'}
     peerDependencies:
@@ -14053,7 +14514,7 @@ packages:
       react: 18.2.0
     dev: true
 
-  /matchdep/2.0.0:
+  /matchdep@2.0.0:
     resolution: {integrity: sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==}
     engines: {node: '>= 0.10.0'}
     dependencies:
@@ -14065,58 +14526,72 @@ packages:
       - supports-color
     dev: false
 
-  /math-expression-evaluator/1.4.0:
+  /math-expression-evaluator@1.4.0:
     resolution: {integrity: sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==}
     dev: false
 
-  /matter-js/0.19.0:
+  /matter-js@0.19.0:
     resolution: {integrity: sha512-v2huwvQGOHTGOkMqtHd2hercCG3f6QAObTisPPHg8TZqq2lz7eIY/5i/5YUV8Ibf3mEioFEmwibcPUF2/fnKKQ==}
     dev: false
 
-  /mdast-util-definitions/4.0.0:
+  /mdast-util-definitions@4.0.0:
     resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
     dependencies:
       unist-util-visit: 2.0.3
     dev: true
 
-  /mdast-util-to-string/1.1.0:
+  /mdast-util-definitions@5.1.2:
+    resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+    dependencies:
+      '@types/mdast': 3.0.11
+      '@types/unist': 2.0.6
+      unist-util-visit: 4.1.2
+    dev: true
+
+  /mdast-util-to-string@1.1.0:
     resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
     dev: true
 
-  /media-typer/0.3.0:
+  /mdast-util-to-string@3.1.1:
+    resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
+    dependencies:
+      '@types/mdast': 3.0.11
+    dev: true
+
+  /media-typer@0.3.0:
     resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /memoizerific/1.11.3:
+  /memoizerific@1.11.3:
     resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
     dependencies:
       map-or-similar: 1.5.0
     dev: true
 
-  /merge-descriptors/1.0.1:
+  /merge-descriptors@1.0.1:
     resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
     dev: true
 
-  /merge-stream/2.0.0:
+  /merge-stream@2.0.0:
     resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
 
-  /merge2/1.4.1:
+  /merge2@1.4.1:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
 
-  /methods/1.1.2:
+  /methods@1.1.2:
     resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /mfm-js/0.23.3:
+  /mfm-js@0.23.3:
     resolution: {integrity: sha512-o8scYmbey6rMUmWAlT3k3ntt6khaCLdxlmHhAWV5wTTMj2OK1atQvZfRUq0SIVm1Jig08qlZg/ps71xUqrScNA==}
     dependencies:
       twemoji-parser: 14.0.0
     dev: false
 
-  /micromatch/3.1.10:
+  /micromatch@3.1.10:
     resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14137,106 +14612,106 @@ packages:
       - supports-color
     dev: false
 
-  /micromatch/4.0.5:
+  /micromatch@4.0.5:
     resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
     engines: {node: '>=8.6'}
     dependencies:
       braces: 3.0.2
       picomatch: 2.3.1
 
-  /mime-db/1.52.0:
+  /mime-db@1.52.0:
     resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
     engines: {node: '>= 0.6'}
 
-  /mime-types/2.1.35:
+  /mime-types@2.1.35:
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-db: 1.52.0
 
-  /mime/1.6.0:
+  /mime@1.6.0:
     resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
     engines: {node: '>=4'}
     hasBin: true
     dev: true
 
-  /mime/2.6.0:
+  /mime@2.6.0:
     resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
     engines: {node: '>=4.0.0'}
     hasBin: true
     dev: true
 
-  /mime/3.0.0:
+  /mime@3.0.0:
     resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
     engines: {node: '>=10.0.0'}
     dev: false
 
-  /mimic-fn/2.1.0:
+  /mimic-fn@2.1.0:
     resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
     engines: {node: '>=6'}
 
-  /mimic-fn/4.0.0:
+  /mimic-fn@4.0.0:
     resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
     engines: {node: '>=12'}
     dev: true
 
-  /mimic-response/1.0.1:
+  /mimic-response@1.0.1:
     resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
     engines: {node: '>=4'}
     dev: false
 
-  /mimic-response/3.1.0:
+  /mimic-response@3.1.0:
     resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
     engines: {node: '>=10'}
 
-  /mimic-response/4.0.0:
+  /mimic-response@4.0.0:
     resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
-  /min-document/2.19.0:
+  /min-document@2.19.0:
     resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
     dependencies:
       dom-walk: 0.1.2
     dev: true
 
-  /min-indent/1.0.1:
+  /min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
     dev: true
 
-  /minimalistic-assert/1.0.1:
+  /minimalistic-assert@1.0.1:
     resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
     dev: false
 
-  /minimatch/3.1.2:
+  /minimatch@3.1.2:
     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
     dependencies:
       brace-expansion: 1.1.11
 
-  /minimatch/5.1.2:
+  /minimatch@5.1.2:
     resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==}
     engines: {node: '>=10'}
     dependencies:
       brace-expansion: 2.0.1
 
-  /minimatch/6.2.0:
+  /minimatch@6.2.0:
     resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==}
     engines: {node: '>=10'}
     dependencies:
       brace-expansion: 2.0.1
     dev: true
 
-  /minimist/1.2.7:
+  /minimist@1.2.7:
     resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
 
-  /minipass-collect/1.0.2:
+  /minipass-collect@1.0.2:
     resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
     dev: false
 
-  /minipass-fetch/2.1.2:
+  /minipass-fetch@2.1.2:
     resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -14247,28 +14722,28 @@ packages:
       encoding: 0.1.13
     dev: false
 
-  /minipass-flush/1.0.5:
+  /minipass-flush@1.0.5:
     resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
     dev: false
 
-  /minipass-pipeline/1.2.4:
+  /minipass-pipeline@1.2.4:
     resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
     engines: {node: '>=8'}
     dependencies:
       minipass: 3.3.6
     dev: false
 
-  /minipass-sized/1.0.3:
+  /minipass-sized@1.0.3:
     resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
     engines: {node: '>=8'}
     dependencies:
       minipass: 3.3.6
     dev: false
 
-  /minipass/2.9.0:
+  /minipass@2.9.0:
     resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==}
     dependencies:
       safe-buffer: 5.2.1
@@ -14276,33 +14751,33 @@ packages:
     dev: false
     optional: true
 
-  /minipass/3.3.6:
+  /minipass@3.3.6:
     resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
     engines: {node: '>=8'}
     dependencies:
       yallist: 4.0.0
 
-  /minipass/4.0.0:
+  /minipass@4.0.0:
     resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==}
     engines: {node: '>=8'}
     dependencies:
       yallist: 4.0.0
 
-  /minizlib/1.3.3:
+  /minizlib@1.3.3:
     resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==}
     dependencies:
       minipass: 2.9.0
     dev: false
     optional: true
 
-  /minizlib/2.1.2:
+  /minizlib@2.1.2:
     resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
       yallist: 4.0.0
 
-  /misskey-js/0.0.15:
+  /misskey-js@0.0.15:
     resolution: {integrity: sha512-sCfQcPooD5Tfe/5pDr5JojAthhGot+hlidw67tj+7+AtZO5He3kBhsjJydY0vru6w3RFM5mzYR6SYISSBR/1WQ==}
     dependencies:
       autobind-decorator: 2.4.0
@@ -14310,7 +14785,7 @@ packages:
       reconnecting-websocket: 4.4.0
     dev: false
 
-  /mixin-deep/1.3.2:
+  /mixin-deep@1.3.2:
     resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14318,21 +14793,21 @@ packages:
       is-extendable: 1.0.1
     dev: false
 
-  /mkdirp-classic/0.5.3:
+  /mkdirp-classic@0.5.3:
     resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
 
-  /mkdirp/0.5.6:
+  /mkdirp@0.5.6:
     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
     hasBin: true
     dependencies:
       minimist: 1.2.7
 
-  /mkdirp/1.0.4:
+  /mkdirp@1.0.4:
     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
     engines: {node: '>=10'}
     hasBin: true
 
-  /mlly/1.1.1:
+  /mlly@1.1.1:
     resolution: {integrity: sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==}
     dependencies:
       acorn: 8.8.2
@@ -14341,36 +14816,36 @@ packages:
       ufo: 1.1.1
     dev: true
 
-  /mnemonist/0.39.5:
+  /mnemonist@0.39.5:
     resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==}
     dependencies:
       obliterator: 2.0.4
     dev: false
 
-  /mri/1.2.0:
+  /mri@1.2.0:
     resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
     engines: {node: '>=4'}
     dev: true
 
-  /ms/2.0.0:
+  /ms@2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
 
-  /ms/2.1.1:
+  /ms@2.1.1:
     resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
     dev: true
 
-  /ms/2.1.2:
+  /ms@2.1.2:
     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
 
-  /ms/2.1.3:
+  /ms@2.1.3:
     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
 
-  /ms/3.0.0-canary.1:
+  /ms@3.0.0-canary.1:
     resolution: {integrity: sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==}
     engines: {node: '>=12.13'}
     dev: false
 
-  /msgpackr-extract/2.2.0:
+  /msgpackr-extract@2.2.0:
     resolution: {integrity: sha512-0YcvWSv7ZOGl9Od6Y5iJ3XnPww8O7WLcpYMDwX+PAA/uXLDtyw94PJv9GLQV/nnp3cWlDhMoyKZIQLrx33sWog==}
     requiresBuild: true
     dependencies:
@@ -14384,21 +14859,21 @@ packages:
       '@msgpackr-extract/msgpackr-extract-win32-x64': 2.2.0
     optional: true
 
-  /msgpackr/1.8.1:
+  /msgpackr@1.8.1:
     resolution: {integrity: sha512-05fT4J8ZqjYlR4QcRDIhLCYKUOHXk7C/xa62GzMKj74l3up9k2QZ3LgFc6qWdsPHl91QA2WLWqWc8b8t7GLNNw==}
     optionalDependencies:
       msgpackr-extract: 2.2.0
 
-  /msw-storybook-addon/1.8.0_msw@1.1.0:
+  /msw-storybook-addon@1.8.0(msw@1.1.0):
     resolution: {integrity: sha512-dw3vZwqjixmiur0vouRSOax7wPSu9Og2Hspy9JZFHf49bZRjwDiLF0Pfn2NXEkGviYJOJiGxS1ejoTiUwoSg4A==}
     peerDependencies:
       msw: '>=0.35.0 <2.0.0'
     dependencies:
       is-node-process: 1.0.1
-      msw: 1.1.0_typescript@4.9.5
+      msw: 1.1.0(typescript@4.9.5)
     dev: true
 
-  /msw/1.1.0_typescript@4.9.5:
+  /msw@1.1.0(typescript@4.9.5):
     resolution: {integrity: sha512-oqMvUXm1bMbwvGpoXAQVz8vXXQyQyx52HBDg3EDOK+dFXkQHssgkXEG4LfMwwZyr2Qt18I/w04XPaY4BkFTkzA==}
     engines: {node: '>=14'}
     hasBin: true
@@ -14434,29 +14909,29 @@ packages:
       - supports-color
     dev: true
 
-  /muggle-string/0.2.2:
+  /muggle-string@0.2.2:
     resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
     dev: true
 
-  /multi-integer-range/3.0.0:
+  /multi-integer-range@3.0.0:
     resolution: {integrity: sha512-uQzynjVJ8F7x5wjaK0g4Ybhy2TvO/pk96+YHyS5g1W4GuUEV6HMebZ8HcRwWgKIRCUT2MLbM5uCKwYcAqkS+8Q==}
     dev: false
 
-  /mute-stdout/1.0.1:
+  /mute-stdout@1.0.1:
     resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /mute-stream/0.0.8:
+  /mute-stream@0.0.8:
     resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
     dev: true
 
-  /mylas/2.1.13:
+  /mylas@2.1.13:
     resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==}
     engines: {node: '>=12.0.0'}
     dev: false
 
-  /mz/2.7.0:
+  /mz@2.7.0:
     resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
     dependencies:
       any-promise: 1.3.0
@@ -14464,16 +14939,16 @@ packages:
       thenify-all: 1.6.0
     dev: false
 
-  /nan/2.17.0:
+  /nan@2.17.0:
     resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==}
     dev: false
 
-  /nanoid/3.3.4:
+  /nanoid@3.3.4:
     resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  /nanomatch/1.2.13:
+  /nanomatch@1.2.13:
     resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14492,77 +14967,77 @@ packages:
       - supports-color
     dev: false
 
-  /napi-build-utils/1.0.2:
+  /napi-build-utils@1.0.2:
     resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
     dev: false
 
-  /natural-compare-lite/1.4.0:
+  /natural-compare-lite@1.4.0:
     resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
     dev: true
 
-  /natural-compare/1.4.0:
+  /natural-compare@1.4.0:
     resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
     dev: true
 
-  /ndarray-ops/1.2.2:
+  /ndarray-ops@1.2.2:
     resolution: {integrity: sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==}
     dependencies:
       cwise-compiler: 1.1.3
     dev: false
 
-  /ndarray-pack/1.2.1:
+  /ndarray-pack@1.2.1:
     resolution: {integrity: sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==}
     dependencies:
       cwise-compiler: 1.1.3
       ndarray: 1.0.19
     dev: false
 
-  /ndarray/1.0.18:
+  /ndarray@1.0.18:
     resolution: {integrity: sha512-jUz6G+CIsEsqs2VlB1EvaQSAA0Jkf8YKm7eFBleKyhiQjYWzTxXqHzWEOm3jFoGCpxGh4DnPUYHB4ECWE+n9SQ==}
     dependencies:
       iota-array: 1.0.0
       is-buffer: 1.1.6
     dev: false
 
-  /ndarray/1.0.19:
+  /ndarray@1.0.19:
     resolution: {integrity: sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==}
     dependencies:
       iota-array: 1.0.0
       is-buffer: 1.1.6
     dev: false
 
-  /needle/2.9.1:
+  /needle@2.9.1:
     resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
     engines: {node: '>= 4.4.x'}
     dependencies:
-      debug: 3.2.7
+      debug: 3.2.7(supports-color@8.1.1)
       iconv-lite: 0.4.24
       sax: 1.2.4
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /negotiator/0.6.3:
+  /negotiator@0.6.3:
     resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
     engines: {node: '>= 0.6'}
 
-  /neo-async/2.6.2:
+  /neo-async@2.6.2:
     resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
     dev: true
 
-  /nested-property/4.0.0:
+  /nested-property@4.0.0:
     resolution: {integrity: sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==}
     dev: false
 
-  /netmask/2.0.2:
+  /netmask@2.0.2:
     resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
     engines: {node: '>= 0.4.0'}
 
-  /next-tick/1.1.0:
+  /next-tick@1.1.0:
     resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
     dev: false
 
-  /nise/5.1.4:
+  /nise@5.1.4:
     resolution: {integrity: sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==}
     dependencies:
       '@sinonjs/commons': 2.0.0
@@ -14572,38 +15047,38 @@ packages:
       path-to-regexp: 1.8.0
     dev: true
 
-  /node-abi/3.31.0:
+  /node-abi@3.31.0:
     resolution: {integrity: sha512-eSKV6s+APenqVh8ubJyiu/YhZgxQpGP66ntzUb3lY1xB9ukSRaGnx0AIxI+IM+1+IVYC1oWobgG5L3Lt9ARykQ==}
     engines: {node: '>=10'}
     dependencies:
       semver: 7.3.8
     dev: false
 
-  /node-addon-api/5.0.0:
+  /node-addon-api@5.0.0:
     resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==}
     dev: false
 
-  /node-bitmap/0.0.1:
+  /node-bitmap@0.0.1:
     resolution: {integrity: sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==}
     engines: {node: '>=v0.6.5'}
     dev: false
 
-  /node-dir/0.1.17:
+  /node-dir@0.1.17:
     resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==}
     engines: {node: '>= 0.10.5'}
     dependencies:
       minimatch: 3.1.2
     dev: true
 
-  /node-domexception/1.0.0:
+  /node-domexception@1.0.0:
     resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
     engines: {node: '>=10.5.0'}
 
-  /node-fetch-native/1.0.2:
+  /node-fetch-native@1.0.2:
     resolution: {integrity: sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ==}
     dev: true
 
-  /node-fetch/2.6.7:
+  /node-fetch@2.6.7:
     resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
     engines: {node: 4.x || >=6.0.0}
     peerDependencies:
@@ -14614,7 +15089,7 @@ packages:
     dependencies:
       whatwg-url: 5.0.0
 
-  /node-fetch/3.3.0:
+  /node-fetch@3.3.0:
     resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
@@ -14622,15 +15097,15 @@ packages:
       fetch-blob: 3.2.0
       formdata-polyfill: 4.0.10
 
-  /node-gyp-build-optional-packages/5.0.3:
+  /node-gyp-build-optional-packages@5.0.3:
     resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==}
     optional: true
 
-  /node-gyp-build/4.6.0:
+  /node-gyp-build@4.6.0:
     resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==}
     dev: false
 
-  /node-gyp/9.3.1:
+  /node-gyp@9.3.1:
     resolution: {integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==}
     engines: {node: ^12.13 || ^14.13 || >=16}
     dependencies:
@@ -14649,24 +15124,24 @@ packages:
       - supports-color
     dev: false
 
-  /node-int64/0.4.0:
+  /node-int64@0.4.0:
     resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
     dev: true
 
-  /node-releases/2.0.8:
+  /node-releases@2.0.8:
     resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
     dev: true
 
-  /nodemailer/6.9.1:
+  /nodemailer@6.9.1:
     resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==}
     engines: {node: '>=6.0.0'}
     dev: false
 
-  /nofilter/3.1.0:
+  /nofilter@3.1.0:
     resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
     engines: {node: '>=12.19'}
 
-  /nopt/5.0.0:
+  /nopt@5.0.0:
     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -14674,14 +15149,14 @@ packages:
     dev: false
     optional: true
 
-  /nopt/6.0.0:
+  /nopt@6.0.0:
     resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     hasBin: true
     dependencies:
       abbrev: 1.1.1
 
-  /normalize-package-data/2.5.0:
+  /normalize-package-data@2.5.0:
     resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
     dependencies:
       hosted-git-info: 2.8.9
@@ -14689,23 +15164,23 @@ packages:
       semver: 5.7.1
       validate-npm-package-license: 3.0.4
 
-  /normalize-path/2.1.1:
+  /normalize-path@2.1.1:
     resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
     engines: {node: '>=0.10.0'}
     dependencies:
       remove-trailing-separator: 1.1.0
     dev: false
 
-  /normalize-path/3.0.0:
+  /normalize-path@3.0.0:
     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
     engines: {node: '>=0.10.0'}
 
-  /normalize-range/0.1.2:
+  /normalize-range@0.1.2:
     resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /normalize-url/1.9.1:
+  /normalize-url@1.9.1:
     resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==}
     engines: {node: '>=4'}
     dependencies:
@@ -14715,43 +15190,43 @@ packages:
       sort-keys: 1.1.2
     dev: false
 
-  /normalize-url/6.1.0:
+  /normalize-url@6.1.0:
     resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
     engines: {node: '>=10'}
     dev: false
 
-  /normalize-url/8.0.0:
+  /normalize-url@8.0.0:
     resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==}
     engines: {node: '>=14.16'}
 
-  /now-and-later/2.0.1:
+  /now-and-later@2.0.1:
     resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==}
     engines: {node: '>= 0.10'}
     dependencies:
       once: 1.4.0
     dev: false
 
-  /npm-run-path/2.0.2:
+  /npm-run-path@2.0.2:
     resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
     engines: {node: '>=4'}
     dependencies:
       path-key: 2.0.1
     dev: false
 
-  /npm-run-path/4.0.1:
+  /npm-run-path@4.0.1:
     resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
     engines: {node: '>=8'}
     dependencies:
       path-key: 3.1.1
 
-  /npm-run-path/5.1.0:
+  /npm-run-path@5.1.0:
     resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
       path-key: 4.0.0
     dev: true
 
-  /npmlog/5.0.1:
+  /npmlog@5.0.1:
     resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
     dependencies:
       are-we-there-yet: 2.0.0
@@ -14759,7 +15234,7 @@ packages:
       gauge: 3.0.2
       set-blocking: 2.0.0
 
-  /npmlog/6.0.2:
+  /npmlog@6.0.2:
     resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -14769,50 +15244,50 @@ packages:
       set-blocking: 2.0.0
     dev: false
 
-  /nsfwjs/2.4.2_@tensorflow+tfjs@4.2.0:
+  /nsfwjs@2.4.2(@tensorflow/tfjs@4.2.0):
     resolution: {integrity: sha512-i4Pp2yt59qPQgeZFyg3wXFBX52uSeu/hkDoqdZfe+sILRxNBUu0VDogj7Lmqak0GlrXviS/wLiVeIx40IDUu7A==}
     peerDependencies:
       '@tensorflow/tfjs': ^3.18.0
     dependencies:
       '@nsfw-filter/gif-frames': 1.0.2
-      '@tensorflow/tfjs': 4.2.0_seedrandom@3.0.5
+      '@tensorflow/tfjs': 4.2.0(seedrandom@3.0.5)
     dev: false
 
-  /nth-check/2.1.1:
+  /nth-check@2.1.1:
     resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
     dependencies:
       boolbase: 1.0.0
 
-  /num2fraction/1.2.2:
+  /num2fraction@1.2.2:
     resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==}
     dev: false
 
-  /number-is-nan/1.0.1:
+  /number-is-nan@1.0.1:
     resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /nwsapi/2.2.2:
+  /nwsapi@2.2.2:
     resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==}
     dev: false
 
-  /oauth-sign/0.9.0:
+  /oauth-sign@0.9.0:
     resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
     dev: false
 
-  /oauth/0.10.0:
+  /oauth@0.10.0:
     resolution: {integrity: sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==}
     dev: false
 
-  /oauth/0.9.15:
+  /oauth@0.9.15:
     resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
     dev: false
 
-  /object-assign/4.1.1:
+  /object-assign@4.1.1:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
 
-  /object-copy/0.1.0:
+  /object-copy@0.1.0:
     resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14821,11 +15296,11 @@ packages:
       kind-of: 3.2.2
     dev: false
 
-  /object-inspect/1.12.2:
+  /object-inspect@1.12.2:
     resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
     dev: true
 
-  /object-is/1.1.5:
+  /object-is@1.1.5:
     resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -14833,18 +15308,18 @@ packages:
       define-properties: 1.1.4
     dev: true
 
-  /object-keys/1.1.1:
+  /object-keys@1.1.1:
     resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
     engines: {node: '>= 0.4'}
 
-  /object-visit/1.0.1:
+  /object-visit@1.0.1:
     resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
     engines: {node: '>=0.10.0'}
     dependencies:
       isobject: 3.0.1
     dev: false
 
-  /object.assign/4.1.4:
+  /object.assign@4.1.4:
     resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -14853,7 +15328,7 @@ packages:
       has-symbols: 1.0.3
       object-keys: 1.1.1
 
-  /object.defaults/1.1.0:
+  /object.defaults@1.1.0:
     resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14863,7 +15338,7 @@ packages:
       isobject: 3.0.1
     dev: false
 
-  /object.map/1.0.1:
+  /object.map@1.0.1:
     resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14871,14 +15346,14 @@ packages:
       make-iterator: 1.0.1
     dev: false
 
-  /object.pick/1.3.0:
+  /object.pick@1.3.0:
     resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       isobject: 3.0.1
     dev: false
 
-  /object.reduce/1.0.1:
+  /object.reduce@1.0.1:
     resolution: {integrity: sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -14886,7 +15361,7 @@ packages:
       make-iterator: 1.0.1
     dev: false
 
-  /object.values/1.1.6:
+  /object.values@1.1.6:
     resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -14895,53 +15370,53 @@ packages:
       es-abstract: 1.20.4
     dev: true
 
-  /obliterator/2.0.4:
+  /obliterator@2.0.4:
     resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==}
     dev: false
 
-  /oblivious-set/1.1.1:
+  /oblivious-set@1.1.1:
     resolution: {integrity: sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==}
     dev: false
 
-  /omggif/1.0.10:
+  /omggif@1.0.10:
     resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==}
     dev: false
 
-  /on-exit-leak-free/2.1.0:
+  /on-exit-leak-free@2.1.0:
     resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
     dev: false
 
-  /on-finished/2.4.1:
+  /on-finished@2.4.1:
     resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
     engines: {node: '>= 0.8'}
     dependencies:
       ee-first: 1.1.1
     dev: true
 
-  /on-headers/1.0.2:
+  /on-headers@1.0.2:
     resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /once/1.4.0:
+  /once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
     dependencies:
       wrappy: 1.0.2
 
-  /onetime/5.1.2:
+  /onetime@5.1.2:
     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
     engines: {node: '>=6'}
     dependencies:
       mimic-fn: 2.1.0
 
-  /onetime/6.0.0:
+  /onetime@6.0.0:
     resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
     engines: {node: '>=12'}
     dependencies:
       mimic-fn: 4.0.0
     dev: true
 
-  /open/7.4.2:
+  /open@7.4.2:
     resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
     engines: {node: '>=8'}
     dependencies:
@@ -14949,7 +15424,7 @@ packages:
       is-wsl: 2.2.0
     dev: true
 
-  /open/8.4.2:
+  /open@8.4.2:
     resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -14958,11 +15433,11 @@ packages:
       is-wsl: 2.2.0
     dev: true
 
-  /opentype.js/0.4.11:
+  /opentype.js@0.4.11:
     resolution: {integrity: sha512-GthxucX/6aftfLdeU5Ho7o7zmQcC8uVtqdcelVq12X++ndxwBZG8Xb5rFEKT7nEcWDD2P1x+TNuJ70jtj1Mbpw==}
     dev: false
 
-  /optionator/0.8.3:
+  /optionator@0.8.3:
     resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -14973,7 +15448,7 @@ packages:
       type-check: 0.3.2
       word-wrap: 1.2.3
 
-  /optionator/0.9.1:
+  /optionator@0.9.1:
     resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -14985,7 +15460,7 @@ packages:
       word-wrap: 1.2.3
     dev: true
 
-  /ora/5.4.1:
+  /ora@5.4.1:
     resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -15000,114 +15475,114 @@ packages:
       wcwidth: 1.0.1
     dev: true
 
-  /ordered-read-streams/1.0.1:
+  /ordered-read-streams@1.0.1:
     resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==}
     dependencies:
       readable-stream: 2.3.7
     dev: false
 
-  /os-filter-obj/2.0.0:
+  /os-filter-obj@2.0.0:
     resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==}
     engines: {node: '>=4'}
     dependencies:
       arch: 2.2.0
     dev: false
 
-  /os-locale/1.4.0:
+  /os-locale@1.4.0:
     resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
     engines: {node: '>=0.10.0'}
     dependencies:
       lcid: 1.0.0
     dev: false
 
-  /os-tmpdir/1.0.2:
+  /os-tmpdir@1.0.2:
     resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /os-utils/0.0.14:
+  /os-utils@0.0.14:
     resolution: {integrity: sha512-ajB8csaHLBvJOYsHJkp8YdO2FvlBbf/ZxaYQwXXRDyQ84UoE+uTuLXxqd0shekXMX6Qr/pt/DDyLMRAMsgfWzg==}
     dev: false
 
-  /ospath/1.2.2:
+  /ospath@1.2.2:
     resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
     dev: true
 
-  /otpauth/9.0.2:
+  /otpauth@9.0.2:
     resolution: {integrity: sha512-0TzpkJYg24VvIK3/K91HKpTtMlwm73UoThhcGY8fZsXcwHDrqf008rfdOjj3NnQuyuT11+vHyyO//qRzi6OZ9A==}
     dependencies:
       jssha: 3.3.0
     dev: false
 
-  /outvariant/1.3.0:
+  /outvariant@1.3.0:
     resolution: {integrity: sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==}
     dev: true
 
-  /p-cancelable/2.1.1:
+  /p-cancelable@2.1.1:
     resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
     engines: {node: '>=8'}
     dev: false
 
-  /p-cancelable/3.0.0:
+  /p-cancelable@3.0.0:
     resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
     engines: {node: '>=12.20'}
 
-  /p-finally/1.0.0:
+  /p-finally@1.0.0:
     resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
     engines: {node: '>=4'}
     dev: false
 
-  /p-limit/2.3.0:
+  /p-limit@2.3.0:
     resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
     engines: {node: '>=6'}
     dependencies:
       p-try: 2.2.0
 
-  /p-limit/3.1.0:
+  /p-limit@3.1.0:
     resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
     engines: {node: '>=10'}
     dependencies:
       yocto-queue: 0.1.0
 
-  /p-limit/4.0.0:
+  /p-limit@4.0.0:
     resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
       yocto-queue: 1.0.0
     dev: true
 
-  /p-locate/3.0.0:
+  /p-locate@3.0.0:
     resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
     engines: {node: '>=6'}
     dependencies:
       p-limit: 2.3.0
     dev: true
 
-  /p-locate/4.1.0:
+  /p-locate@4.1.0:
     resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
     engines: {node: '>=8'}
     dependencies:
       p-limit: 2.3.0
 
-  /p-locate/5.0.0:
+  /p-locate@5.0.0:
     resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
     engines: {node: '>=10'}
     dependencies:
       p-limit: 3.1.0
     dev: true
 
-  /p-map/2.1.0:
+  /p-map@2.1.0:
     resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
     engines: {node: '>=6'}
     dev: false
 
-  /p-map/4.0.0:
+  /p-map@4.0.0:
     resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
     engines: {node: '>=10'}
     dependencies:
       aggregate-error: 3.1.0
 
-  /p-queue/6.6.2:
+  /p-queue@6.6.2:
     resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
     engines: {node: '>=8'}
     dependencies:
@@ -15115,39 +15590,39 @@ packages:
       p-timeout: 3.2.0
     dev: false
 
-  /p-timeout/3.2.0:
+  /p-timeout@3.2.0:
     resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
     engines: {node: '>=8'}
     dependencies:
       p-finally: 1.0.0
     dev: false
 
-  /p-try/2.2.0:
+  /p-try@2.2.0:
     resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
     engines: {node: '>=6'}
 
-  /packet-reader/1.0.0:
+  /packet-reader@1.0.0:
     resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==}
     dev: false
 
-  /pako/0.2.9:
+  /pako@0.2.9:
     resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
     dev: true
 
-  /parent-module/1.0.1:
+  /parent-module@1.0.1:
     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
     engines: {node: '>=6'}
     dependencies:
       callsites: 3.1.0
     dev: true
 
-  /parse-data-uri/0.2.0:
+  /parse-data-uri@0.2.0:
     resolution: {integrity: sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==}
     dependencies:
       data-uri-to-buffer: 0.0.3
     dev: false
 
-  /parse-entities/2.0.0:
+  /parse-entities@2.0.0:
     resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
     dependencies:
       character-entities: 1.2.4
@@ -15158,7 +15633,7 @@ packages:
       is-hexadecimal: 1.0.4
     dev: true
 
-  /parse-filepath/1.0.2:
+  /parse-filepath@1.0.2:
     resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
     engines: {node: '>=0.8'}
     dependencies:
@@ -15167,14 +15642,14 @@ packages:
       path-root: 0.1.1
     dev: false
 
-  /parse-json/2.2.0:
+  /parse-json@2.2.0:
     resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       error-ex: 1.3.2
     dev: false
 
-  /parse-json/5.2.0:
+  /parse-json@5.2.0:
     resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
     engines: {node: '>=8'}
     dependencies:
@@ -15184,127 +15659,127 @@ packages:
       lines-and-columns: 1.2.4
     dev: true
 
-  /parse-node-version/1.0.1:
+  /parse-node-version@1.0.1:
     resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /parse-passwd/1.0.0:
+  /parse-passwd@1.0.0:
     resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /parse-srcset/1.0.2:
+  /parse-srcset@1.0.2:
     resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==}
     dev: false
 
-  /parse5-htmlparser2-tree-adapter/6.0.1:
+  /parse5-htmlparser2-tree-adapter@6.0.1:
     resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
     dependencies:
       parse5: 6.0.1
     dev: false
 
-  /parse5-htmlparser2-tree-adapter/7.0.0:
+  /parse5-htmlparser2-tree-adapter@7.0.0:
     resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
     dependencies:
       domhandler: 5.0.3
       parse5: 7.1.2
 
-  /parse5/5.1.1:
+  /parse5@5.1.1:
     resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==}
     dev: false
 
-  /parse5/6.0.1:
+  /parse5@6.0.1:
     resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
     dev: false
 
-  /parse5/7.1.2:
+  /parse5@7.1.2:
     resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
     dependencies:
       entities: 4.4.0
 
-  /parseurl/1.3.3:
+  /parseurl@1.3.3:
     resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /pascalcase/0.1.1:
+  /pascalcase@0.1.1:
     resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /path-dirname/1.0.2:
+  /path-dirname@1.0.2:
     resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
     dev: false
 
-  /path-exists/2.1.0:
+  /path-exists@2.1.0:
     resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       pinkie-promise: 2.0.1
     dev: false
 
-  /path-exists/3.0.0:
+  /path-exists@3.0.0:
     resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
     engines: {node: '>=4'}
     dev: true
 
-  /path-exists/4.0.0:
+  /path-exists@4.0.0:
     resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
     engines: {node: '>=8'}
 
-  /path-is-absolute/1.0.1:
+  /path-is-absolute@1.0.1:
     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
     engines: {node: '>=0.10.0'}
 
-  /path-key/2.0.1:
+  /path-key@2.0.1:
     resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
     engines: {node: '>=4'}
     dev: false
 
-  /path-key/3.1.1:
+  /path-key@3.1.1:
     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
     engines: {node: '>=8'}
 
-  /path-key/4.0.0:
+  /path-key@4.0.0:
     resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
     engines: {node: '>=12'}
     dev: true
 
-  /path-parse/1.0.7:
+  /path-parse@1.0.7:
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
 
-  /path-root-regex/0.1.2:
+  /path-root-regex@0.1.2:
     resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /path-root/0.1.1:
+  /path-root@0.1.1:
     resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       path-root-regex: 0.1.2
     dev: false
 
-  /path-to-regexp/0.1.7:
+  /path-to-regexp@0.1.7:
     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
     dev: true
 
-  /path-to-regexp/1.8.0:
+  /path-to-regexp@1.8.0:
     resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==}
     dependencies:
       isarray: 0.0.1
     dev: true
 
-  /path-to-regexp/3.2.0:
+  /path-to-regexp@3.2.0:
     resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==}
     dev: false
 
-  /path-to-regexp/6.2.1:
+  /path-to-regexp@6.2.1:
     resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
     dev: true
 
-  /path-type/1.1.0:
+  /path-type@1.1.0:
     resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -15313,30 +15788,30 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
-  /path-type/4.0.0:
+  /path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
 
-  /pathe/1.1.0:
+  /pathe@1.1.0:
     resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
     dev: true
 
-  /pathval/1.1.1:
+  /pathval@1.1.1:
     resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
     dev: true
 
-  /pause-stream/0.0.11:
+  /pause-stream@0.0.11:
     resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
     dependencies:
       through: 2.3.8
     dev: true
 
-  /peek-readable/5.0.0:
+  /peek-readable@5.0.0:
     resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==}
     engines: {node: '>=14.16'}
     dev: false
 
-  /peek-stream/1.1.3:
+  /peek-stream@1.1.3:
     resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==}
     dependencies:
       buffer-from: 1.1.2
@@ -15344,22 +15819,22 @@ packages:
       through2: 2.0.5
     dev: true
 
-  /pend/1.2.0:
+  /pend@1.2.0:
     resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
     dev: true
 
-  /performance-now/2.1.0:
+  /performance-now@2.1.0:
     resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
 
-  /pg-connection-string/2.5.0:
+  /pg-connection-string@2.5.0:
     resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
     dev: false
 
-  /pg-int8/1.0.1:
+  /pg-int8@1.0.1:
     resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
     engines: {node: '>=4.0.0'}
 
-  /pg-pool/3.6.0_pg@8.10.0:
+  /pg-pool@3.6.0(pg@8.10.0):
     resolution: {integrity: sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==}
     peerDependencies:
       pg: '>=8.0'
@@ -15367,15 +15842,15 @@ packages:
       pg: 8.10.0
     dev: false
 
-  /pg-protocol/1.5.0:
+  /pg-protocol@1.5.0:
     resolution: {integrity: sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==}
     dev: true
 
-  /pg-protocol/1.6.0:
+  /pg-protocol@1.6.0:
     resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==}
     dev: false
 
-  /pg-types/2.2.0:
+  /pg-types@2.2.0:
     resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
     engines: {node: '>=4'}
     dependencies:
@@ -15385,7 +15860,7 @@ packages:
       postgres-date: 1.0.7
       postgres-interval: 1.2.0
 
-  /pg/8.10.0:
+  /pg@8.10.0:
     resolution: {integrity: sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ==}
     engines: {node: '>= 8.0.0'}
     peerDependencies:
@@ -15397,63 +15872,63 @@ packages:
       buffer-writer: 2.0.0
       packet-reader: 1.0.0
       pg-connection-string: 2.5.0
-      pg-pool: 3.6.0_pg@8.10.0
+      pg-pool: 3.6.0(pg@8.10.0)
       pg-protocol: 1.6.0
       pg-types: 2.2.0
       pgpass: 1.0.5
     dev: false
 
-  /pgpass/1.0.5:
+  /pgpass@1.0.5:
     resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
     dependencies:
       split2: 4.1.0
     dev: false
 
-  /photoswipe/5.3.6:
+  /photoswipe@5.3.6:
     resolution: {integrity: sha512-v7e8iMfaPUujTACYsK5HBCCtFoW9n2dMZmjIlbvFS2oSpTQmPrfc3PrWnGx8OGY3jNOKho8JC8L277+m+9ag9Q==}
     engines: {node: '>= 0.12.0'}
     dev: false
 
-  /picocolors/1.0.0:
+  /picocolors@1.0.0:
     resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
 
-  /picomatch/2.3.1:
+  /picomatch@2.3.1:
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
 
-  /pify/2.3.0:
+  /pify@2.3.0:
     resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
     engines: {node: '>=0.10.0'}
 
-  /pify/4.0.1:
+  /pify@4.0.1:
     resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
     engines: {node: '>=6'}
     dev: true
 
-  /pinkie-promise/2.0.1:
+  /pinkie-promise@2.0.1:
     resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       pinkie: 2.0.4
     dev: false
 
-  /pinkie/2.0.4:
+  /pinkie@2.0.4:
     resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /pino-abstract-transport/1.0.0:
+  /pino-abstract-transport@1.0.0:
     resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==}
     dependencies:
       readable-stream: 4.3.0
       split2: 4.1.0
     dev: false
 
-  /pino-std-serializers/6.1.0:
+  /pino-std-serializers@6.1.0:
     resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==}
     dev: false
 
-  /pino/8.8.0:
+  /pino@8.8.0:
     resolution: {integrity: sha512-cF8iGYeu2ODg2gIwgAHcPrtR63ILJz3f7gkogaHC/TXVVXxZgInmNYiIpDYEwgEkxZti2Se6P2W2DxlBIZe6eQ==}
     hasBin: true
     dependencies:
@@ -15470,33 +15945,33 @@ packages:
       thread-stream: 2.3.0
     dev: false
 
-  /pirates/4.0.5:
+  /pirates@4.0.5:
     resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
     engines: {node: '>= 6'}
     dev: true
 
-  /pkg-dir/3.0.0:
+  /pkg-dir@3.0.0:
     resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
     engines: {node: '>=6'}
     dependencies:
       find-up: 3.0.0
     dev: true
 
-  /pkg-dir/4.2.0:
+  /pkg-dir@4.2.0:
     resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
     engines: {node: '>=8'}
     dependencies:
       find-up: 4.1.0
     dev: true
 
-  /pkg-dir/5.0.0:
+  /pkg-dir@5.0.0:
     resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
     engines: {node: '>=10'}
     dependencies:
       find-up: 5.0.0
     dev: true
 
-  /pkg-types/1.0.2:
+  /pkg-types@1.0.2:
     resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
     dependencies:
       jsonc-parser: 3.2.0
@@ -15504,13 +15979,13 @@ packages:
       pathe: 1.1.0
     dev: true
 
-  /plimit-lit/1.5.0:
+  /plimit-lit@1.5.0:
     resolution: {integrity: sha512-Eb/MqCb1Iv/ok4m1FqIXqvUKPISufcjZ605hl3KM/n8GaX8zfhtgdLwZU3vKjuHGh2O9Rjog/bHTq8ofIShdng==}
     dependencies:
       queue-lit: 1.5.0
     dev: false
 
-  /plugin-error/1.0.1:
+  /plugin-error@1.0.1:
     resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -15520,34 +15995,34 @@ packages:
       extend-shallow: 3.0.2
     dev: false
 
-  /pngjs-nozlib/1.0.0:
+  /pngjs-nozlib@1.0.0:
     resolution: {integrity: sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==}
     engines: {iojs: '>= 1.0.0', node: '>=0.10.0'}
     dev: false
 
-  /pngjs/3.4.0:
+  /pngjs@3.4.0:
     resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
     engines: {node: '>=4.0.0'}
     dev: false
 
-  /pngjs/5.0.0:
+  /pngjs@5.0.0:
     resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
     engines: {node: '>=10.13.0'}
     dev: false
 
-  /polished/4.2.2:
+  /polished@4.2.2:
     resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
     engines: {node: '>=10'}
     dependencies:
       '@babel/runtime': 7.20.7
     dev: true
 
-  /posix-character-classes/0.1.1:
+  /posix-character-classes@0.1.1:
     resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /postcss-calc/5.3.1:
+  /postcss-calc@5.3.1:
     resolution: {integrity: sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q==}
     dependencies:
       postcss: 5.2.18
@@ -15555,7 +16030,7 @@ packages:
       reduce-css-calc: 1.3.0
     dev: false
 
-  /postcss-colormin/2.2.2:
+  /postcss-colormin@2.2.2:
     resolution: {integrity: sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w==}
     dependencies:
       colormin: 1.1.2
@@ -15563,51 +16038,51 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-convert-values/2.6.1:
+  /postcss-convert-values@2.6.1:
     resolution: {integrity: sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA==}
     dependencies:
       postcss: 5.2.18
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-discard-comments/2.0.4:
+  /postcss-discard-comments@2.0.4:
     resolution: {integrity: sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-discard-duplicates/2.1.0:
+  /postcss-discard-duplicates@2.1.0:
     resolution: {integrity: sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-discard-empty/2.1.0:
+  /postcss-discard-empty@2.1.0:
     resolution: {integrity: sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-discard-overridden/0.1.1:
+  /postcss-discard-overridden@0.1.1:
     resolution: {integrity: sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-discard-unused/2.2.3:
+  /postcss-discard-unused@2.2.3:
     resolution: {integrity: sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg==}
     dependencies:
       postcss: 5.2.18
       uniqs: 2.0.0
     dev: false
 
-  /postcss-filter-plugins/2.0.3:
+  /postcss-filter-plugins@2.0.3:
     resolution: {integrity: sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-merge-idents/2.1.7:
+  /postcss-merge-idents@2.1.7:
     resolution: {integrity: sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA==}
     dependencies:
       has: 1.0.3
@@ -15615,13 +16090,13 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-merge-longhand/2.0.2:
+  /postcss-merge-longhand@2.0.2:
     resolution: {integrity: sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-merge-rules/2.1.2:
+  /postcss-merge-rules@2.1.2:
     resolution: {integrity: sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q==}
     dependencies:
       browserslist: 1.7.7
@@ -15631,11 +16106,11 @@ packages:
       vendors: 1.0.4
     dev: false
 
-  /postcss-message-helpers/2.0.0:
+  /postcss-message-helpers@2.0.0:
     resolution: {integrity: sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA==}
     dev: false
 
-  /postcss-minify-font-values/1.0.5:
+  /postcss-minify-font-values@1.0.5:
     resolution: {integrity: sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ==}
     dependencies:
       object-assign: 4.1.1
@@ -15643,14 +16118,14 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-minify-gradients/1.0.5:
+  /postcss-minify-gradients@1.0.5:
     resolution: {integrity: sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q==}
     dependencies:
       postcss: 5.2.18
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-minify-params/1.2.2:
+  /postcss-minify-params@1.2.2:
     resolution: {integrity: sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow==}
     dependencies:
       alphanum-sort: 1.0.2
@@ -15659,7 +16134,7 @@ packages:
       uniqs: 2.0.0
     dev: false
 
-  /postcss-minify-selectors/2.1.1:
+  /postcss-minify-selectors@2.1.1:
     resolution: {integrity: sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA==}
     dependencies:
       alphanum-sort: 1.0.2
@@ -15668,13 +16143,13 @@ packages:
       postcss-selector-parser: 2.2.3
     dev: false
 
-  /postcss-normalize-charset/1.1.1:
+  /postcss-normalize-charset@1.1.1:
     resolution: {integrity: sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-normalize-url/3.0.8:
+  /postcss-normalize-url@3.0.8:
     resolution: {integrity: sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig==}
     dependencies:
       is-absolute-url: 2.1.0
@@ -15683,27 +16158,27 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-ordered-values/2.2.3:
+  /postcss-ordered-values@2.2.3:
     resolution: {integrity: sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg==}
     dependencies:
       postcss: 5.2.18
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-reduce-idents/2.4.0:
+  /postcss-reduce-idents@2.4.0:
     resolution: {integrity: sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w==}
     dependencies:
       postcss: 5.2.18
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-reduce-initial/1.0.1:
+  /postcss-reduce-initial@1.0.1:
     resolution: {integrity: sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA==}
     dependencies:
       postcss: 5.2.18
     dev: false
 
-  /postcss-reduce-transforms/1.0.4:
+  /postcss-reduce-transforms@1.0.4:
     resolution: {integrity: sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ==}
     dependencies:
       has: 1.0.3
@@ -15711,7 +16186,7 @@ packages:
       postcss-value-parser: 3.3.1
     dev: false
 
-  /postcss-selector-parser/2.2.3:
+  /postcss-selector-parser@2.2.3:
     resolution: {integrity: sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==}
     dependencies:
       flatten: 1.0.3
@@ -15719,7 +16194,7 @@ packages:
       uniq: 1.0.1
     dev: false
 
-  /postcss-selector-parser/6.0.11:
+  /postcss-selector-parser@6.0.11:
     resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
     engines: {node: '>=4'}
     dependencies:
@@ -15727,7 +16202,7 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /postcss-svgo/2.1.6:
+  /postcss-svgo@2.1.6:
     resolution: {integrity: sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ==}
     dependencies:
       is-svg: 2.1.0
@@ -15736,7 +16211,7 @@ packages:
       svgo: 0.7.2
     dev: false
 
-  /postcss-unique-selectors/2.0.2:
+  /postcss-unique-selectors@2.0.2:
     resolution: {integrity: sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g==}
     dependencies:
       alphanum-sort: 1.0.2
@@ -15744,11 +16219,11 @@ packages:
       uniqs: 2.0.0
     dev: false
 
-  /postcss-value-parser/3.3.1:
+  /postcss-value-parser@3.3.1:
     resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==}
     dev: false
 
-  /postcss-zindex/2.2.0:
+  /postcss-zindex@2.2.0:
     resolution: {integrity: sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w==}
     dependencies:
       has: 1.0.3
@@ -15756,7 +16231,7 @@ packages:
       uniqs: 2.0.0
     dev: false
 
-  /postcss/5.2.18:
+  /postcss@5.2.18:
     resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
     engines: {node: '>=0.12'}
     dependencies:
@@ -15766,7 +16241,7 @@ packages:
       supports-color: 3.2.3
     dev: false
 
-  /postcss/8.4.21:
+  /postcss@8.4.21:
     resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
     engines: {node: ^10 || ^12 || >=14}
     dependencies:
@@ -15774,25 +16249,25 @@ packages:
       picocolors: 1.0.0
       source-map-js: 1.0.2
 
-  /postgres-array/2.0.0:
+  /postgres-array@2.0.0:
     resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
     engines: {node: '>=4'}
 
-  /postgres-bytea/1.0.0:
+  /postgres-bytea@1.0.0:
     resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
     engines: {node: '>=0.10.0'}
 
-  /postgres-date/1.0.7:
+  /postgres-date@1.0.7:
     resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
     engines: {node: '>=0.10.0'}
 
-  /postgres-interval/1.2.0:
+  /postgres-interval@1.2.0:
     resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       xtend: 4.0.2
 
-  /prebuild-install/7.1.1:
+  /prebuild-install@7.1.1:
     resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
     engines: {node: '>=10'}
     dependencies:
@@ -15810,32 +16285,32 @@ packages:
       tunnel-agent: 0.6.0
     dev: false
 
-  /prelude-ls/1.1.2:
+  /prelude-ls@1.1.2:
     resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
     engines: {node: '>= 0.8.0'}
 
-  /prelude-ls/1.2.1:
+  /prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
     dev: true
 
-  /prepend-http/1.0.4:
+  /prepend-http@1.0.4:
     resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /prettier/2.8.4:
+  /prettier@2.8.4:
     resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==}
     engines: {node: '>=10.13.0'}
     hasBin: true
     dev: true
 
-  /pretty-bytes/5.6.0:
+  /pretty-bytes@5.6.0:
     resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
     engines: {node: '>=6'}
     dev: true
 
-  /pretty-format/27.5.1:
+  /pretty-format@27.5.1:
     resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
     engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
     dependencies:
@@ -15844,7 +16319,7 @@ packages:
       react-is: 17.0.2
     dev: true
 
-  /pretty-format/29.5.0:
+  /pretty-format@29.5.0:
     resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
@@ -15853,20 +16328,20 @@ packages:
       react-is: 18.2.0
     dev: true
 
-  /pretty-hrtime/1.0.3:
+  /pretty-hrtime@1.0.3:
     resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
     engines: {node: '>= 0.8'}
 
-  /prismjs/1.27.0:
+  /prismjs@1.27.0:
     resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
     engines: {node: '>=6'}
     dev: true
 
-  /prismjs/1.29.0:
+  /prismjs@1.29.0:
     resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
     engines: {node: '>=6'}
 
-  /private-ip/2.3.3:
+  /private-ip@2.3.3:
     resolution: {integrity: sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==}
     dependencies:
       ip-regex: 4.3.0
@@ -15874,7 +16349,7 @@ packages:
       is-ip: 3.1.0
       netmask: 2.0.2
 
-  /private-ip/3.0.0:
+  /private-ip@3.0.0:
     resolution: {integrity: sha512-HkMBs4nMtrP+cvcw0bDi2BAZIGgiKI4Zq8Oc+dMqNBpHS8iGL4+WO/pRtc8Bwnv9rjnV0QwMDwEBymFtqv7Kww==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -15884,7 +16359,7 @@ packages:
       netmask: 2.0.2
     dev: false
 
-  /probe-image-size/7.2.3:
+  /probe-image-size@7.2.3:
     resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==}
     dependencies:
       lodash.merge: 4.6.2
@@ -15894,22 +16369,22 @@ packages:
       - supports-color
     dev: false
 
-  /process-nextick-args/2.0.1:
+  /process-nextick-args@2.0.1:
     resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 
-  /process-warning/2.1.0:
+  /process-warning@2.1.0:
     resolution: {integrity: sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg==}
     dev: false
 
-  /process/0.11.10:
+  /process@0.11.10:
     resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
     engines: {node: '>= 0.6.0'}
 
-  /progress/2.0.3:
+  /progress@2.0.3:
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     engines: {node: '>=0.4.0'}
 
-  /promise-inflight/1.0.1:
+  /promise-inflight@1.0.1:
     resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
     peerDependencies:
       bluebird: '*'
@@ -15918,11 +16393,11 @@ packages:
         optional: true
     dev: false
 
-  /promise-limit/2.7.0:
+  /promise-limit@2.7.0:
     resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==}
     dev: false
 
-  /promise-retry/2.0.1:
+  /promise-retry@2.0.1:
     resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
     engines: {node: '>=10'}
     dependencies:
@@ -15930,12 +16405,12 @@ packages:
       retry: 0.12.0
     dev: false
 
-  /promise/7.3.1:
+  /promise@7.3.1:
     resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
     dependencies:
       asap: 2.0.6
 
-  /prompts/2.4.2:
+  /prompts@2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
     engines: {node: '>= 6'}
     dependencies:
@@ -15943,7 +16418,7 @@ packages:
       sisteransi: 1.0.5
     dev: true
 
-  /prop-types/15.8.1:
+  /prop-types@15.8.1:
     resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
     dependencies:
       loose-envify: 1.4.0
@@ -15951,28 +16426,28 @@ packages:
       react-is: 16.13.1
     dev: true
 
-  /property-information/5.6.0:
+  /property-information@5.6.0:
     resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
     dependencies:
       xtend: 4.0.2
     dev: true
 
-  /proto-list/1.2.4:
+  /proto-list@1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
     dev: true
 
-  /proxy-addr/2.0.7:
+  /proxy-addr@2.0.7:
     resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
     engines: {node: '>= 0.10'}
     dependencies:
       forwarded: 0.2.0
       ipaddr.js: 1.9.1
 
-  /proxy-from-env/1.0.0:
+  /proxy-from-env@1.0.0:
     resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
     dev: true
 
-  /ps-tree/1.2.0:
+  /ps-tree@1.2.0:
     resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
     engines: {node: '>= 0.10'}
     hasBin: true
@@ -15980,20 +16455,20 @@ packages:
       event-stream: 3.3.4
     dev: true
 
-  /pseudomap/1.0.2:
+  /pseudomap@1.0.2:
     resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
 
-  /psl/1.9.0:
+  /psl@1.9.0:
     resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
 
-  /pug-attrs/3.0.0:
+  /pug-attrs@3.0.0:
     resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==}
     dependencies:
       constantinople: 4.0.1
       js-stringify: 1.0.2
       pug-runtime: 3.0.1
 
-  /pug-code-gen/3.0.2:
+  /pug-code-gen@3.0.2:
     resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==}
     dependencies:
       constantinople: 4.0.1
@@ -16005,10 +16480,10 @@ packages:
       void-elements: 3.1.0
       with: 7.0.2
 
-  /pug-error/2.0.0:
+  /pug-error@2.0.0:
     resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==}
 
-  /pug-filters/4.0.0:
+  /pug-filters@4.0.0:
     resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==}
     dependencies:
       constantinople: 4.0.1
@@ -16017,43 +16492,43 @@ packages:
       pug-walk: 2.0.0
       resolve: 1.22.1
 
-  /pug-lexer/5.0.1:
+  /pug-lexer@5.0.1:
     resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==}
     dependencies:
       character-parser: 2.2.0
       is-expression: 4.0.0
       pug-error: 2.0.0
 
-  /pug-linker/4.0.0:
+  /pug-linker@4.0.0:
     resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==}
     dependencies:
       pug-error: 2.0.0
       pug-walk: 2.0.0
 
-  /pug-load/3.0.0:
+  /pug-load@3.0.0:
     resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==}
     dependencies:
       object-assign: 4.1.1
       pug-walk: 2.0.0
 
-  /pug-parser/6.0.0:
+  /pug-parser@6.0.0:
     resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==}
     dependencies:
       pug-error: 2.0.0
       token-stream: 1.0.0
 
-  /pug-runtime/3.0.1:
+  /pug-runtime@3.0.1:
     resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==}
 
-  /pug-strip-comments/2.0.0:
+  /pug-strip-comments@2.0.0:
     resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==}
     dependencies:
       pug-error: 2.0.0
 
-  /pug-walk/2.0.0:
+  /pug-walk@2.0.0:
     resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==}
 
-  /pug/3.0.2:
+  /pug@3.0.2:
     resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==}
     dependencies:
       pug-code-gen: 3.0.2
@@ -16065,35 +16540,35 @@ packages:
       pug-runtime: 3.0.1
       pug-strip-comments: 2.0.0
 
-  /pump/2.0.1:
+  /pump@2.0.1:
     resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
 
-  /pump/3.0.0:
+  /pump@3.0.0:
     resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
 
-  /pumpify/1.5.1:
+  /pumpify@1.5.1:
     resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
     dependencies:
       duplexify: 3.7.1
       inherits: 2.0.4
       pump: 2.0.1
 
-  /punycode/2.3.0:
+  /punycode@2.3.0:
     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
     engines: {node: '>=6'}
 
-  /puppeteer-core/2.1.1:
+  /puppeteer-core@2.1.1:
     resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==}
     engines: {node: '>=8.16.0'}
     dependencies:
       '@types/mime-types': 2.1.1
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       extract-zip: 1.7.0
       https-proxy-agent: 4.0.0
       mime: 2.6.0
@@ -16108,11 +16583,11 @@ packages:
       - utf-8-validate
     dev: true
 
-  /pure-rand/6.0.0:
+  /pure-rand@6.0.0:
     resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==}
     dev: true
 
-  /pureimage/0.3.17:
+  /pureimage@0.3.17:
     resolution: {integrity: sha512-JV4hfYF1BXxDwbSR8hjhVEhVTxwmAXos8uIXQ7Bw2eWrUEpLDJnQoQ8WLlWAO4TMGJ7mp9n6gvLKJ6MSaGUkXQ==}
     engines: {node: '>=0.8'}
     dependencies:
@@ -16121,12 +16596,12 @@ packages:
       pngjs: 3.4.0
     dev: false
 
-  /q/1.5.1:
+  /q@1.5.1:
     resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
     engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
     dev: false
 
-  /qrcode/1.5.1:
+  /qrcode@1.5.1:
     resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==}
     engines: {node: '>=10.13.0'}
     dependencies:
@@ -16136,33 +16611,33 @@ packages:
       yargs: 15.4.1
     dev: false
 
-  /qs/6.10.4:
+  /qs@6.10.4:
     resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
     engines: {node: '>=0.6'}
     dependencies:
       side-channel: 1.0.4
     dev: true
 
-  /qs/6.11.0:
+  /qs@6.11.0:
     resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
     engines: {node: '>=0.6'}
     dependencies:
       side-channel: 1.0.4
     dev: true
 
-  /qs/6.11.1:
+  /qs@6.11.1:
     resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==}
     engines: {node: '>=0.6'}
     dependencies:
       side-channel: 1.0.4
     dev: true
 
-  /qs/6.5.3:
+  /qs@6.5.3:
     resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
     engines: {node: '>=0.6'}
     dev: false
 
-  /query-string/4.3.4:
+  /query-string@4.3.4:
     resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16170,59 +16645,59 @@ packages:
       strict-uri-encode: 1.1.0
     dev: false
 
-  /querystring/0.2.1:
+  /querystring@0.2.1:
     resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==}
     engines: {node: '>=0.4.x'}
     dev: false
 
-  /querystringify/2.2.0:
+  /querystringify@2.2.0:
     resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
     dev: false
 
-  /queue-lit/1.5.0:
+  /queue-lit@1.5.0:
     resolution: {integrity: sha512-IslToJ4eiCEE9xwMzq3viOO5nH8sUWUCwoElrhNMozzr9IIt2qqvB4I+uHu/zJTQVqc9R5DFwok4ijNK1pU3fA==}
     dev: false
 
-  /queue-microtask/1.2.3:
+  /queue-microtask@1.2.3:
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
-  /quick-format-unescaped/4.0.4:
+  /quick-format-unescaped@4.0.4:
     resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
     dev: false
 
-  /quick-lru/5.1.1:
+  /quick-lru@5.1.1:
     resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
     engines: {node: '>=10'}
 
-  /ramda/0.28.0:
+  /ramda@0.28.0:
     resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==}
     dev: true
 
-  /random-seed/0.3.0:
+  /random-seed@0.3.0:
     resolution: {integrity: sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==}
     engines: {node: '>= 0.6.0'}
     dependencies:
       json-stringify-safe: 5.0.1
     dev: false
 
-  /range-parser/1.2.1:
+  /range-parser@1.2.1:
     resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
     engines: {node: '>= 0.6'}
     dev: true
 
-  /rangestr/0.0.1:
+  /rangestr@0.0.1:
     resolution: {integrity: sha512-9CRCUX/w4+fNMzlYgA8GeJz7BZwBPwaGm3FhAm9Hi50k8wNy2CyiJQa8awygWJay87uVVCV0/FwbLcD6+/A9KQ==}
     dev: false
 
-  /rangetouch/2.0.1:
+  /rangetouch@2.0.1:
     resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==}
     dev: false
 
-  /ratelimiter/3.4.1:
+  /ratelimiter@3.4.1:
     resolution: {integrity: sha512-5FJbRW/Jkkdk29ksedAfWFkQkhbUrMx3QJGwMKAypeIiQf4yrLW+gtPKZiaWt4zPrtw1uGufOjGO7UGM6VllsQ==}
     dev: false
 
-  /raw-body/2.5.1:
+  /raw-body@2.5.1:
     resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
     engines: {node: '>= 0.8'}
     dependencies:
@@ -16232,7 +16707,7 @@ packages:
       unpipe: 1.0.0
     dev: true
 
-  /rc/1.2.8:
+  /rc@1.2.8:
     resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
     dependencies:
       deep-extend: 0.6.0
@@ -16241,14 +16716,14 @@ packages:
       strip-json-comments: 2.0.1
     dev: false
 
-  /rdf-canonize/3.3.0:
+  /rdf-canonize@3.3.0:
     resolution: {integrity: sha512-gfSNkMua/VWC1eYbSkVaL/9LQhFeOh0QULwv7Or0f+po8pMgQ1blYQFe1r9Mv2GJZXw88Cz/drnAnB9UlNnHfQ==}
     engines: {node: '>=12'}
     dependencies:
       setimmediate: 1.0.5
     dev: false
 
-  /re2/1.18.0:
+  /re2@1.18.0:
     resolution: {integrity: sha512-MoCYZlJ9YUgksND9asyNF2/x532daXU/ARp1UeJbQ5flMY6ryKNEhrWt85aw3YluzOJlC3vXpGgK2a1jb0b4GA==}
     requiresBuild: true
     dependencies:
@@ -16260,17 +16735,17 @@ packages:
       - supports-color
     dev: false
 
-  /react-colorful/5.6.1_biqbaboplfbrettd7655fr4n2y:
+  /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
     peerDependencies:
       react: '>=16.8.0'
       react-dom: '>=16.8.0'
     dependencies:
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /react-docgen-typescript/2.2.2_typescript@4.9.5:
+  /react-docgen-typescript@2.2.2(typescript@4.9.5):
     resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
     peerDependencies:
       typescript: '>= 4.3.x'
@@ -16278,7 +16753,7 @@ packages:
       typescript: 4.9.5
     dev: true
 
-  /react-docgen/6.0.0-alpha.3:
+  /react-docgen@6.0.0-alpha.3:
     resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==}
     engines: {node: '>=12.0.0'}
     hasBin: true
@@ -16297,7 +16772,7 @@ packages:
       - supports-color
     dev: true
 
-  /react-dom/18.2.0_react@18.2.0:
+  /react-dom@18.2.0(react@18.2.0):
     resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
     peerDependencies:
       react: ^18.2.0
@@ -16307,7 +16782,7 @@ packages:
       scheduler: 0.23.0
     dev: true
 
-  /react-element-to-jsx-string/15.0.0_biqbaboplfbrettd7655fr4n2y:
+  /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==}
     peerDependencies:
       react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
@@ -16316,11 +16791,11 @@ packages:
       '@base2/pretty-print-object': 1.0.1
       is-plain-object: 5.0.0
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
       react-is: 18.1.0
     dev: true
 
-  /react-inspector/6.0.1_react@18.2.0:
+  /react-inspector@6.0.1(react@18.2.0):
     resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==}
     peerDependencies:
       react: ^16.8.4 || ^17.0.0 || ^18.0.0
@@ -16328,28 +16803,28 @@ packages:
       react: 18.2.0
     dev: true
 
-  /react-is/16.13.1:
+  /react-is@16.13.1:
     resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
     dev: true
 
-  /react-is/17.0.2:
+  /react-is@17.0.2:
     resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
     dev: true
 
-  /react-is/18.1.0:
+  /react-is@18.1.0:
     resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
     dev: true
 
-  /react-is/18.2.0:
+  /react-is@18.2.0:
     resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
     dev: true
 
-  /react-refresh/0.14.0:
+  /react-refresh@0.14.0:
     resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /react-syntax-highlighter/15.5.0_react@18.2.0:
+  /react-syntax-highlighter@15.5.0(react@18.2.0):
     resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
     peerDependencies:
       react: '>= 0.14.0'
@@ -16362,14 +16837,14 @@ packages:
       refractor: 3.6.0
     dev: true
 
-  /react/18.2.0:
+  /react@18.2.0:
     resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       loose-envify: 1.4.0
     dev: true
 
-  /read-pkg-up/1.0.1:
+  /read-pkg-up@1.0.1:
     resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16377,7 +16852,7 @@ packages:
       read-pkg: 1.1.0
     dev: false
 
-  /read-pkg-up/7.0.1:
+  /read-pkg-up@7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}
     dependencies:
@@ -16386,7 +16861,7 @@ packages:
       type-fest: 0.8.1
     dev: true
 
-  /read-pkg/1.1.0:
+  /read-pkg@1.1.0:
     resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16395,7 +16870,7 @@ packages:
       path-type: 1.1.0
     dev: false
 
-  /read-pkg/5.2.0:
+  /read-pkg@5.2.0:
     resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
     engines: {node: '>=8'}
     dependencies:
@@ -16405,7 +16880,7 @@ packages:
       type-fest: 0.6.0
     dev: true
 
-  /readable-stream/1.1.14:
+  /readable-stream@1.1.14:
     resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
     dependencies:
       core-util-is: 1.0.3
@@ -16414,7 +16889,7 @@ packages:
       string_decoder: 0.10.31
     dev: false
 
-  /readable-stream/2.3.7:
+  /readable-stream@2.3.7:
     resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
     dependencies:
       core-util-is: 1.0.3
@@ -16425,7 +16900,7 @@ packages:
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
 
-  /readable-stream/3.6.0:
+  /readable-stream@3.6.0:
     resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
     engines: {node: '>= 6'}
     dependencies:
@@ -16433,7 +16908,7 @@ packages:
       string_decoder: 1.3.0
       util-deprecate: 1.0.2
 
-  /readable-stream/4.3.0:
+  /readable-stream@4.3.0:
     resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
@@ -16443,31 +16918,31 @@ packages:
       process: 0.11.10
     dev: false
 
-  /readable-web-to-node-stream/3.0.2:
+  /readable-web-to-node-stream@3.0.2:
     resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==}
     engines: {node: '>=8'}
     dependencies:
       readable-stream: 3.6.0
     dev: false
 
-  /readdir-glob/1.1.2:
+  /readdir-glob@1.1.2:
     resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==}
     dependencies:
       minimatch: 5.1.2
     dev: false
 
-  /readdirp/3.6.0:
+  /readdirp@3.6.0:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
     dependencies:
       picomatch: 2.3.1
 
-  /real-require/0.2.0:
+  /real-require@0.2.0:
     resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
     engines: {node: '>= 12.13.0'}
     dev: false
 
-  /recast/0.21.5:
+  /recast@0.21.5:
     resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==}
     engines: {node: '>= 4'}
     dependencies:
@@ -16477,7 +16952,7 @@ packages:
       tslib: 2.5.0
     dev: true
 
-  /recast/0.22.0:
+  /recast@0.22.0:
     resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==}
     engines: {node: '>= 4'}
     dependencies:
@@ -16488,7 +16963,7 @@ packages:
       tslib: 2.5.0
     dev: true
 
-  /recast/0.23.1:
+  /recast@0.23.1:
     resolution: {integrity: sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==}
     engines: {node: '>= 4'}
     dependencies:
@@ -16499,17 +16974,17 @@ packages:
       tslib: 2.5.0
     dev: true
 
-  /rechoir/0.6.2:
+  /rechoir@0.6.2:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}
     dependencies:
       resolve: 1.22.1
 
-  /reconnecting-websocket/4.4.0:
+  /reconnecting-websocket@4.4.0:
     resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==}
     dev: false
 
-  /redent/3.0.0:
+  /redent@3.0.0:
     resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
     engines: {node: '>=8'}
     dependencies:
@@ -16517,43 +16992,43 @@ packages:
       strip-indent: 3.0.0
     dev: true
 
-  /redis-commands/1.7.0:
+  /redis-commands@1.7.0:
     resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==}
     dev: false
 
-  /redis-errors/1.2.0:
+  /redis-errors@1.2.0:
     resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
     engines: {node: '>=4'}
 
-  /redis-info/3.1.0:
+  /redis-info@3.1.0:
     resolution: {integrity: sha512-ER4L9Sh/vm63DkIE0bkSjxluQlioBiBgf5w1UuldaW/3vPcecdljVDisZhmnCMvsxHNiARTTDDHGg9cGwTfrKg==}
     dependencies:
       lodash: 4.17.21
     dev: false
 
-  /redis-lock/0.1.4:
+  /redis-lock@0.1.4:
     resolution: {integrity: sha512-7/+zu86XVQfJVx1nHTzux5reglDiyUCDwmW7TSlvVezfhH2YLc/Rc8NE0ejQG+8/0lwKzm29/u/4+ogKeLosiA==}
     engines: {node: '>=0.6'}
     dev: false
 
-  /redis-parser/3.0.0:
+  /redis-parser@3.0.0:
     resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
     engines: {node: '>=4'}
     dependencies:
       redis-errors: 1.2.0
 
-  /redis/4.5.1:
+  /redis@4.5.1:
     resolution: {integrity: sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==}
     dependencies:
-      '@redis/bloom': 1.1.0_@redis+client@1.4.2
+      '@redis/bloom': 1.1.0(@redis/client@1.4.2)
       '@redis/client': 1.4.2
-      '@redis/graph': 1.1.0_@redis+client@1.4.2
-      '@redis/json': 1.0.4_@redis+client@1.4.2
-      '@redis/search': 1.1.0_@redis+client@1.4.2
-      '@redis/time-series': 1.0.4_@redis+client@1.4.2
+      '@redis/graph': 1.1.0(@redis/client@1.4.2)
+      '@redis/json': 1.0.4(@redis/client@1.4.2)
+      '@redis/search': 1.1.0(@redis/client@1.4.2)
+      '@redis/time-series': 1.0.4(@redis/client@1.4.2)
     dev: true
 
-  /reduce-css-calc/1.3.0:
+  /reduce-css-calc@1.3.0:
     resolution: {integrity: sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==}
     dependencies:
       balanced-match: 0.4.2
@@ -16561,17 +17036,17 @@ packages:
       reduce-function-call: 1.0.3
     dev: false
 
-  /reduce-function-call/1.0.3:
+  /reduce-function-call@1.0.3:
     resolution: {integrity: sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==}
     dependencies:
       balanced-match: 1.0.2
     dev: false
 
-  /reflect-metadata/0.1.13:
+  /reflect-metadata@0.1.13:
     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
     dev: false
 
-  /refractor/3.6.0:
+  /refractor@3.6.0:
     resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
     dependencies:
       hastscript: 6.0.0
@@ -16579,27 +17054,27 @@ packages:
       prismjs: 1.27.0
     dev: true
 
-  /regenerate-unicode-properties/10.1.0:
+  /regenerate-unicode-properties@10.1.0:
     resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
     engines: {node: '>=4'}
     dependencies:
       regenerate: 1.4.2
     dev: true
 
-  /regenerate/1.4.2:
+  /regenerate@1.4.2:
     resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
     dev: true
 
-  /regenerator-runtime/0.13.11:
+  /regenerator-runtime@0.13.11:
     resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
 
-  /regenerator-transform/0.15.1:
+  /regenerator-transform@0.15.1:
     resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
     dependencies:
       '@babel/runtime': 7.20.7
     dev: true
 
-  /regex-not/1.0.2:
+  /regex-not@1.0.2:
     resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16607,7 +17082,7 @@ packages:
       safe-regex: 1.1.0
     dev: false
 
-  /regexp.prototype.flags/1.4.3:
+  /regexp.prototype.flags@1.4.3:
     resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -16616,12 +17091,12 @@ packages:
       functions-have-names: 1.2.3
     dev: true
 
-  /regexpp/3.2.0:
+  /regexpp@3.2.0:
     resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
     engines: {node: '>=8'}
     dev: true
 
-  /regexpu-core/5.3.2:
+  /regexpu-core@5.3.2:
     resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
     engines: {node: '>=4'}
     dependencies:
@@ -16633,14 +17108,14 @@ packages:
       unicode-match-property-value-ecmascript: 2.1.0
     dev: true
 
-  /regjsparser/0.9.1:
+  /regjsparser@0.9.1:
     resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
     hasBin: true
     dependencies:
       jsesc: 0.5.0
     dev: true
 
-  /remark-external-links/8.0.0:
+  /remark-external-links@8.0.0:
     resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==}
     dependencies:
       extend: 3.0.2
@@ -16650,7 +17125,20 @@ packages:
       unist-util-visit: 2.0.3
     dev: true
 
-  /remark-slug/6.1.0:
+  /remark-external-links@9.0.1:
+    resolution: {integrity: sha512-EYw+p8Zqy5oT5+W8iSKzInfRLY+zeKWHCf0ut+Q5SwnaSIDGXd2zzvp4SWqyAuVbinNmZ0zjMrDKaExWZnTYqQ==}
+    dependencies:
+      '@types/hast': 2.3.4
+      '@types/mdast': 3.0.11
+      extend: 3.0.2
+      is-absolute-url: 4.0.1
+      mdast-util-definitions: 5.1.2
+      space-separated-tokens: 2.0.2
+      unified: 10.1.2
+      unist-util-visit: 4.1.2
+    dev: true
+
+  /remark-slug@6.1.0:
     resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==}
     dependencies:
       github-slugger: 1.5.0
@@ -16658,7 +17146,18 @@ packages:
       unist-util-visit: 2.0.3
     dev: true
 
-  /remove-bom-buffer/3.0.0:
+  /remark-slug@7.0.1:
+    resolution: {integrity: sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==}
+    dependencies:
+      '@types/hast': 2.3.4
+      '@types/mdast': 3.0.11
+      github-slugger: 1.5.0
+      mdast-util-to-string: 3.1.1
+      unified: 10.1.2
+      unist-util-visit: 4.1.2
+    dev: true
+
+  /remove-bom-buffer@3.0.0:
     resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16666,7 +17165,7 @@ packages:
       is-utf8: 0.2.1
     dev: false
 
-  /remove-bom-stream/1.2.0:
+  /remove-bom-stream@1.2.0:
     resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -16675,11 +17174,11 @@ packages:
       through2: 2.0.5
     dev: false
 
-  /remove-trailing-separator/1.1.0:
+  /remove-trailing-separator@1.1.0:
     resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
     dev: false
 
-  /rename/1.0.4:
+  /rename@1.0.4:
     resolution: {integrity: sha512-YMM6Fn3lrFOCjhORKjj+z/yizj8WSzv3F3YUlpJA20fteWCb0HbJU19nvuRBPUM5dWgxJcHP+kix3M+5NowJyA==}
     dependencies:
       debug: 2.6.9
@@ -16687,22 +17186,22 @@ packages:
       - supports-color
     dev: false
 
-  /repeat-element/1.1.4:
+  /repeat-element@1.1.4:
     resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /repeat-string/1.6.1:
+  /repeat-string@1.6.1:
     resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
     engines: {node: '>=0.10'}
     dev: false
 
-  /replace-ext/1.0.1:
+  /replace-ext@1.0.1:
     resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /replace-homedir/1.0.0:
+  /replace-homedir@1.0.0:
     resolution: {integrity: sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -16711,7 +17210,7 @@ packages:
       remove-trailing-separator: 1.1.0
     dev: false
 
-  /replacestream/4.0.3:
+  /replacestream@4.0.3:
     resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==}
     dependencies:
       escape-string-regexp: 1.0.5
@@ -16719,13 +17218,13 @@ packages:
       readable-stream: 2.3.7
     dev: false
 
-  /request-progress/3.0.0:
+  /request-progress@3.0.0:
     resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
     dependencies:
       throttleit: 1.0.0
     dev: true
 
-  /request/2.88.2:
+  /request@2.88.2:
     resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
     engines: {node: '>= 6'}
     dependencies:
@@ -16751,38 +17250,38 @@ packages:
       uuid: 3.4.0
     dev: false
 
-  /require-directory/2.1.1:
+  /require-directory@2.1.1:
     resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
     engines: {node: '>=0.10.0'}
 
-  /require-from-string/2.0.2:
+  /require-from-string@2.0.2:
     resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /require-main-filename/1.0.1:
+  /require-main-filename@1.0.1:
     resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==}
     dev: false
 
-  /require-main-filename/2.0.0:
+  /require-main-filename@2.0.0:
     resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
     dev: false
 
-  /requires-port/1.0.0:
+  /requires-port@1.0.0:
     resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
     dev: false
 
-  /resolve-alpn/1.2.1:
+  /resolve-alpn@1.2.1:
     resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
 
-  /resolve-cwd/3.0.0:
+  /resolve-cwd@3.0.0:
     resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
     engines: {node: '>=8'}
     dependencies:
       resolve-from: 5.0.0
     dev: true
 
-  /resolve-dir/1.0.1:
+  /resolve-dir@1.0.1:
     resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -16790,33 +17289,33 @@ packages:
       global-modules: 1.0.0
     dev: false
 
-  /resolve-from/4.0.0:
+  /resolve-from@4.0.0:
     resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
     engines: {node: '>=4'}
     dev: true
 
-  /resolve-from/5.0.0:
+  /resolve-from@5.0.0:
     resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
     engines: {node: '>=8'}
     dev: true
 
-  /resolve-options/1.1.0:
+  /resolve-options@1.1.0:
     resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==}
     engines: {node: '>= 0.10'}
     dependencies:
       value-or-function: 3.0.0
     dev: false
 
-  /resolve-url/0.2.1:
+  /resolve-url@0.2.1:
     resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
     dev: false
 
-  /resolve.exports/2.0.0:
+  /resolve.exports@2.0.0:
     resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==}
     engines: {node: '>=10'}
     dev: true
 
-  /resolve/1.22.1:
+  /resolve@1.22.1:
     resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
     hasBin: true
     dependencies:
@@ -16824,19 +17323,19 @@ packages:
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
 
-  /responselike/2.0.1:
+  /responselike@2.0.1:
     resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
     dependencies:
       lowercase-keys: 2.0.0
     dev: false
 
-  /responselike/3.0.0:
+  /responselike@3.0.0:
     resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
     engines: {node: '>=14.16'}
     dependencies:
       lowercase-keys: 3.0.0
 
-  /restore-cursor/3.1.0:
+  /restore-cursor@3.1.0:
     resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
     engines: {node: '>=8'}
     dependencies:
@@ -16844,102 +17343,102 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
-  /ret/0.1.15:
+  /ret@0.1.15:
     resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
     engines: {node: '>=0.12'}
     dev: false
 
-  /ret/0.2.2:
+  /ret@0.2.2:
     resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==}
     engines: {node: '>=4'}
     dev: false
 
-  /retry/0.12.0:
+  /retry@0.12.0:
     resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
     engines: {node: '>= 4'}
     dev: false
 
-  /reusify/1.0.4:
+  /reusify@1.0.4:
     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
-  /rfdc/1.3.0:
+  /rfdc@1.3.0:
     resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
 
-  /rimraf/2.6.3:
+  /rimraf@2.6.3:
     resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
     hasBin: true
     dependencies:
       glob: 7.2.3
     dev: true
 
-  /rimraf/2.7.1:
+  /rimraf@2.7.1:
     resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
     hasBin: true
     dependencies:
       glob: 7.2.3
 
-  /rimraf/3.0.2:
+  /rimraf@3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
     hasBin: true
     dependencies:
       glob: 7.2.3
 
-  /rndstr/1.0.0:
+  /rndstr@1.0.0:
     resolution: {integrity: sha512-3KN+BHTiHcsyW1qjRw3Xhms8TQfTIN4fUVgqqJpj6FnmuCnto5/lLyppSmGfdTmOiKDWeuXU4XPp58I9fsoWFQ==}
     dependencies:
       rangestr: 0.0.1
       seedrandom: 2.4.2
     dev: false
 
-  /rollup/3.19.0:
+  /rollup@3.19.0:
     resolution: {integrity: sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==}
     engines: {node: '>=14.18.0', npm: '>=8.0.0'}
     hasBin: true
     optionalDependencies:
       fsevents: 2.3.2
 
-  /rss-parser/3.12.0:
+  /rss-parser@3.12.0:
     resolution: {integrity: sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==}
     dependencies:
       entities: 2.2.0
       xml2js: 0.4.23
     dev: false
 
-  /run-async/2.4.1:
+  /run-async@2.4.1:
     resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
     engines: {node: '>=0.12.0'}
     dev: true
 
-  /run-parallel/1.2.0:
+  /run-parallel@1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
     dependencies:
       queue-microtask: 1.2.3
 
-  /rxjs/7.8.0:
+  /rxjs@7.8.0:
     resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
     dependencies:
       tslib: 2.5.0
 
-  /s-age/1.1.2:
+  /s-age@1.1.2:
     resolution: {integrity: sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==}
     dev: false
 
-  /safari-14-idb-fix/3.0.0:
+  /safari-14-idb-fix@3.0.0:
     resolution: {integrity: sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==}
     dev: false
 
-  /safe-buffer/5.1.1:
+  /safe-buffer@5.1.1:
     resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==}
     dev: true
 
-  /safe-buffer/5.1.2:
+  /safe-buffer@5.1.2:
     resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
 
-  /safe-buffer/5.2.1:
+  /safe-buffer@5.2.1:
     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
 
-  /safe-regex-test/1.0.0:
+  /safe-regex-test@1.0.0:
     resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
     dependencies:
       call-bind: 1.0.2
@@ -16947,27 +17446,27 @@ packages:
       is-regex: 1.1.4
     dev: true
 
-  /safe-regex/1.1.0:
-    resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
-    dependencies:
-      ret: 0.1.15
-    dev: false
-
-  /safe-regex2/2.0.0:
+  /safe-regex2@2.0.0:
     resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==}
     dependencies:
       ret: 0.2.2
     dev: false
 
-  /safe-stable-stringify/2.4.2:
+  /safe-regex@1.1.0:
+    resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
+    dependencies:
+      ret: 0.1.15
+    dev: false
+
+  /safe-stable-stringify@2.4.2:
     resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==}
     engines: {node: '>=10'}
     dev: false
 
-  /safer-buffer/2.1.2:
+  /safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
-  /sanitize-html/2.10.0:
+  /sanitize-html@2.10.0:
     resolution: {integrity: sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ==}
     dependencies:
       deepmerge: 4.2.2
@@ -16978,7 +17477,7 @@ packages:
       postcss: 8.4.21
     dev: false
 
-  /sass/1.58.3:
+  /sass@1.58.3:
     resolution: {integrity: sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==}
     engines: {node: '>=12.0.0'}
     dependencies:
@@ -16986,75 +17485,75 @@ packages:
       immutable: 4.2.2
       source-map-js: 1.0.2
 
-  /sax/1.2.4:
+  /sax@1.2.4:
     resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
     dev: false
 
-  /saxes/6.0.0:
+  /saxes@6.0.0:
     resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
     engines: {node: '>=v12.22.7'}
     dependencies:
       xmlchars: 2.2.0
     dev: false
 
-  /scheduler/0.23.0:
+  /scheduler@0.23.0:
     resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
     dependencies:
       loose-envify: 1.4.0
     dev: true
 
-  /secure-json-parse/2.7.0:
+  /secure-json-parse@2.7.0:
     resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
     dev: false
 
-  /seedrandom/2.4.2:
+  /seedrandom@2.4.2:
     resolution: {integrity: sha512-uQ72txMoObtuJooiBLSVs5Yu2e9d/lHQz0boaqHjW8runXB9vR8nFtaZV54wYii613N0C8ZqTBLsfwDhAdpvqQ==}
     dev: false
 
-  /seedrandom/3.0.5:
+  /seedrandom@3.0.5:
     resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==}
     dev: false
 
-  /semver-greatest-satisfied-range/1.1.0:
+  /semver-greatest-satisfied-range@1.1.0:
     resolution: {integrity: sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==}
     engines: {node: '>= 0.10'}
     dependencies:
       sver-compat: 1.5.0
     dev: false
 
-  /semver-regex/4.0.5:
+  /semver-regex@4.0.5:
     resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==}
     engines: {node: '>=12'}
     dev: false
 
-  /semver-truncate/2.0.0:
+  /semver-truncate@2.0.0:
     resolution: {integrity: sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==}
     engines: {node: '>=8'}
     dependencies:
       semver: 6.3.0
     dev: false
 
-  /semver/5.7.1:
+  /semver@5.7.1:
     resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
     hasBin: true
 
-  /semver/6.3.0:
+  /semver@6.3.0:
     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
     hasBin: true
 
-  /semver/7.0.0:
+  /semver@7.0.0:
     resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
     hasBin: true
     dev: true
 
-  /semver/7.3.8:
+  /semver@7.3.8:
     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
     engines: {node: '>=10'}
     hasBin: true
     dependencies:
       lru-cache: 6.0.0
 
-  /send/0.18.0:
+  /send@0.18.0:
     resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -17075,7 +17574,7 @@ packages:
       - supports-color
     dev: true
 
-  /serve-favicon/2.5.0:
+  /serve-favicon@2.5.0:
     resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -17086,7 +17585,7 @@ packages:
       safe-buffer: 5.1.1
     dev: true
 
-  /serve-static/1.15.0:
+  /serve-static@1.15.0:
     resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
     engines: {node: '>= 0.8.0'}
     dependencies:
@@ -17098,13 +17597,13 @@ packages:
       - supports-color
     dev: true
 
-  /set-blocking/2.0.0:
+  /set-blocking@2.0.0:
     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
 
-  /set-cookie-parser/2.5.1:
+  /set-cookie-parser@2.5.1:
     resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
 
-  /set-value/2.0.1:
+  /set-value@2.0.1:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17114,28 +17613,28 @@ packages:
       split-string: 3.1.0
     dev: false
 
-  /setimmediate/1.0.5:
+  /setimmediate@1.0.5:
     resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
     dev: false
 
-  /setprototypeof/1.2.0:
+  /setprototypeof@1.2.0:
     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
 
-  /sha.js/2.4.11:
+  /sha.js@2.4.11:
     resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
     dependencies:
       inherits: 2.0.4
       safe-buffer: 5.2.1
     dev: false
 
-  /shallow-clone/3.0.1:
+  /shallow-clone@3.0.1:
     resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
     engines: {node: '>=8'}
     dependencies:
       kind-of: 6.0.3
     dev: true
 
-  /sharp/0.31.3:
+  /sharp@0.31.3:
     resolution: {integrity: sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==}
     engines: {node: '>=14.15.0'}
     requiresBuild: true
@@ -17150,29 +17649,29 @@ packages:
       tunnel-agent: 0.6.0
     dev: false
 
-  /shebang-command/1.2.0:
+  /shebang-command@1.2.0:
     resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       shebang-regex: 1.0.0
     dev: false
 
-  /shebang-command/2.0.0:
+  /shebang-command@2.0.0:
     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
     engines: {node: '>=8'}
     dependencies:
       shebang-regex: 3.0.0
 
-  /shebang-regex/1.0.0:
+  /shebang-regex@1.0.0:
     resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /shebang-regex/3.0.0:
+  /shebang-regex@3.0.0:
     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
     engines: {node: '>=8'}
 
-  /shelljs/0.8.5:
+  /shelljs@0.8.5:
     resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
     engines: {node: '>=4'}
     hasBin: true
@@ -17182,7 +17681,7 @@ packages:
       rechoir: 0.6.2
     dev: true
 
-  /side-channel/1.0.4:
+  /side-channel@1.0.4:
     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
     dependencies:
       call-bind: 1.0.2
@@ -17190,22 +17689,22 @@ packages:
       object-inspect: 1.12.2
     dev: true
 
-  /siginfo/2.0.0:
+  /siginfo@2.0.0:
     resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
     dev: true
 
-  /sigmund/1.0.1:
+  /sigmund@1.0.1:
     resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==}
     dev: true
 
-  /signal-exit/3.0.7:
+  /signal-exit@3.0.7:
     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
 
-  /simple-concat/1.0.1:
+  /simple-concat@1.0.1:
     resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
     dev: false
 
-  /simple-get/4.0.1:
+  /simple-get@4.0.1:
     resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
     dependencies:
       decompress-response: 6.0.0
@@ -17213,20 +17712,20 @@ packages:
       simple-concat: 1.0.1
     dev: false
 
-  /simple-swizzle/0.2.2:
+  /simple-swizzle@0.2.2:
     resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
     dependencies:
       is-arrayish: 0.3.2
     dev: false
 
-  /simple-update-notifier/1.1.0:
+  /simple-update-notifier@1.1.0:
     resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==}
     engines: {node: '>=8.10.0'}
     dependencies:
       semver: 7.0.0
     dev: true
 
-  /sinon/14.0.2:
+  /sinon@14.0.2:
     resolution: {integrity: sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==}
     dependencies:
       '@sinonjs/commons': 2.0.0
@@ -17237,20 +17736,20 @@ packages:
       supports-color: 7.2.0
     dev: true
 
-  /sisteransi/1.0.5:
+  /sisteransi@1.0.5:
     resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
     dev: true
 
-  /slash/3.0.0:
+  /slash@3.0.0:
     resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
     engines: {node: '>=8'}
 
-  /slash/4.0.0:
+  /slash@4.0.0:
     resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
     engines: {node: '>=12'}
     dev: false
 
-  /slice-ansi/3.0.0:
+  /slice-ansi@3.0.0:
     resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
     engines: {node: '>=8'}
     dependencies:
@@ -17259,7 +17758,7 @@ packages:
       is-fullwidth-code-point: 3.0.0
     dev: true
 
-  /slice-ansi/4.0.0:
+  /slice-ansi@4.0.0:
     resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -17268,7 +17767,7 @@ packages:
       is-fullwidth-code-point: 3.0.0
     dev: true
 
-  /slice-ansi/5.0.0:
+  /slice-ansi@5.0.0:
     resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -17276,12 +17775,12 @@ packages:
       is-fullwidth-code-point: 4.0.0
     dev: true
 
-  /smart-buffer/4.2.0:
+  /smart-buffer@4.2.0:
     resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
     engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
     dev: false
 
-  /snapdragon-node/2.1.1:
+  /snapdragon-node@2.1.1:
     resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17290,14 +17789,14 @@ packages:
       snapdragon-util: 3.0.1
     dev: false
 
-  /snapdragon-util/3.0.1:
+  /snapdragon-util@3.0.1:
     resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 3.2.2
     dev: false
 
-  /snapdragon/0.8.2:
+  /snapdragon@0.8.2:
     resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17313,18 +17812,18 @@ packages:
       - supports-color
     dev: false
 
-  /socks-proxy-agent/7.0.0:
+  /socks-proxy-agent@7.0.0:
     resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
     engines: {node: '>= 10'}
     dependencies:
       agent-base: 6.0.2
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       socks: 2.7.1
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /socks/2.7.1:
+  /socks@2.7.1:
     resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
     engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
     dependencies:
@@ -17332,35 +17831,35 @@ packages:
       smart-buffer: 4.2.0
     dev: false
 
-  /sonic-boom/3.2.1:
+  /sonic-boom@3.2.1:
     resolution: {integrity: sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A==}
     dependencies:
       atomic-sleep: 1.0.0
     dev: false
 
-  /sort-keys-length/1.0.1:
+  /sort-keys-length@1.0.1:
     resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       sort-keys: 1.1.2
     dev: false
 
-  /sort-keys/1.1.2:
+  /sort-keys@1.1.2:
     resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-plain-obj: 1.1.0
     dev: false
 
-  /sortablejs/1.14.0:
+  /sortablejs@1.14.0:
     resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
     dev: false
 
-  /source-map-js/1.0.2:
+  /source-map-js@1.0.2:
     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
 
-  /source-map-resolve/0.5.3:
+  /source-map-resolve@0.5.3:
     resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
     dependencies:
       atob: 2.1.2
@@ -17370,93 +17869,97 @@ packages:
       urix: 0.1.0
     dev: false
 
-  /source-map-support/0.5.13:
+  /source-map-support@0.5.13:
     resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
     dev: true
 
-  /source-map-support/0.5.21:
+  /source-map-support@0.5.21:
     resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
 
-  /source-map-url/0.4.1:
+  /source-map-url@0.4.1:
     resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
     dev: false
 
-  /source-map/0.5.7:
+  /source-map@0.5.7:
     resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /source-map/0.6.1:
+  /source-map@0.6.1:
     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
     engines: {node: '>=0.10.0'}
 
-  /source-map/0.7.4:
+  /source-map@0.7.4:
     resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
     engines: {node: '>= 8'}
     dev: false
 
-  /sourcemap-codec/1.4.8:
+  /sourcemap-codec@1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
 
-  /space-separated-tokens/1.1.5:
+  /space-separated-tokens@1.1.5:
     resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
     dev: true
 
-  /sparkles/1.0.1:
+  /space-separated-tokens@2.0.2:
+    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+    dev: true
+
+  /sparkles@1.0.1:
     resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /spdx-correct/3.1.1:
+  /spdx-correct@3.1.1:
     resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
     dependencies:
       spdx-expression-parse: 3.0.1
       spdx-license-ids: 3.0.12
 
-  /spdx-exceptions/2.3.0:
+  /spdx-exceptions@2.3.0:
     resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
 
-  /spdx-expression-parse/3.0.1:
+  /spdx-expression-parse@3.0.1:
     resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
     dependencies:
       spdx-exceptions: 2.3.0
       spdx-license-ids: 3.0.12
 
-  /spdx-license-ids/3.0.12:
+  /spdx-license-ids@3.0.12:
     resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
 
-  /split-string/3.1.0:
+  /split-string@3.1.0:
     resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
     engines: {node: '>=0.10.0'}
     dependencies:
       extend-shallow: 3.0.2
     dev: false
 
-  /split/0.3.3:
+  /split2@4.1.0:
+    resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==}
+    engines: {node: '>= 10.x'}
+    dev: false
+
+  /split@0.3.3:
     resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
     dependencies:
       through: 2.3.8
     dev: true
 
-  /split2/4.1.0:
-    resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==}
-    engines: {node: '>= 10.x'}
-    dev: false
-
-  /sprintf-js/1.0.3:
+  /sprintf-js@1.0.3:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
 
-  /sprintf-js/1.1.2:
+  /sprintf-js@1.1.2:
     resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
     dev: false
 
-  /sshpk/1.17.0:
+  /sshpk@1.17.0:
     resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17470,32 +17973,32 @@ packages:
       safer-buffer: 2.1.2
       tweetnacl: 0.14.5
 
-  /ssri/9.0.1:
+  /ssri@9.0.1:
     resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
       minipass: 3.3.6
     dev: false
 
-  /stack-trace/0.0.10:
+  /stack-trace@0.0.10:
     resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
     dev: false
 
-  /stack-utils/2.0.6:
+  /stack-utils@2.0.6:
     resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
     engines: {node: '>=10'}
     dependencies:
       escape-string-regexp: 2.0.0
     dev: true
 
-  /stackback/0.0.2:
+  /stackback@0.0.2:
     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
     dev: true
 
-  /standard-as-callback/2.1.0:
+  /standard-as-callback@2.1.0:
     resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
 
-  /start-server-and-test/2.0.0:
+  /start-server-and-test@2.0.0:
     resolution: {integrity: sha512-UqKLw0mJbfrsG1jcRLTUlvuRi9sjNuUiDOLI42r7R5fA9dsFoywAy9DoLXNYys9B886E4RCKb+qM1Gzu96h7DQ==}
     engines: {node: '>=6'}
     hasBin: true
@@ -17503,16 +18006,16 @@ packages:
       arg: 5.0.2
       bluebird: 3.7.2
       check-more-types: 2.24.0
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       execa: 5.1.1
       lazy-ass: 1.6.0
       ps-tree: 1.2.0
-      wait-on: 7.0.1_debug@4.3.4
+      wait-on: 7.0.1(debug@4.3.4)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /static-extend/0.1.2:
+  /static-extend@0.1.2:
     resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17520,30 +18023,30 @@ packages:
       object-copy: 0.1.0
     dev: false
 
-  /statuses/2.0.1:
+  /statuses@2.0.1:
     resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
     engines: {node: '>= 0.8'}
 
-  /std-env/3.3.2:
+  /std-env@3.3.2:
     resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
     dev: true
 
-  /stop-iteration-iterator/1.0.0:
+  /stop-iteration-iterator@1.0.0:
     resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
     engines: {node: '>= 0.4'}
     dependencies:
       internal-slot: 1.0.5
     dev: true
 
-  /store2/2.14.2:
+  /store2@2.14.2:
     resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
     dev: true
 
-  /storybook/7.0.0-rc.6:
-    resolution: {integrity: sha512-ZdQatRnVDzxsWbuP8dcue+W/sWRaQmyBQPlrSLLw6upYQq0+LmP9eNjroz+KmQaGwHt7T51ra/xaSTDb54Chbw==}
+  /storybook@7.0.0-rc.10:
+    resolution: {integrity: sha512-lVX1N8+VMs9E/mm+YLrCPfvFvKsJ4AVMfWg548MiJR7OZpPC2bDK8mSEnVDAeJaehIK6IprB4Y0W1FvvvjGIsw==}
     hasBin: true
     dependencies:
-      '@storybook/cli': 7.0.0-rc.6
+      '@storybook/cli': 7.0.0-rc.10
     transitivePeerDependencies:
       - bufferutil
       - encoding
@@ -17551,23 +18054,23 @@ packages:
       - utf-8-validate
     dev: true
 
-  /stream-browserify/3.0.0:
+  /stream-browserify@3.0.0:
     resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
     dependencies:
       inherits: 2.0.4
       readable-stream: 3.6.0
     dev: false
 
-  /stream-combiner/0.0.4:
+  /stream-combiner@0.0.4:
     resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
     dependencies:
       duplexer: 0.1.2
     dev: true
 
-  /stream-exhaust/1.0.2:
+  /stream-exhaust@1.0.2:
     resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==}
 
-  /stream-parser/0.3.1:
+  /stream-parser@0.3.1:
     resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
     dependencies:
       debug: 2.6.9
@@ -17575,39 +18078,39 @@ packages:
       - supports-color
     dev: false
 
-  /stream-shift/1.0.1:
+  /stream-shift@1.0.1:
     resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
 
-  /stream-wormhole/1.1.0:
+  /stream-wormhole@1.1.0:
     resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==}
     engines: {node: '>=4.0.0'}
     dev: false
 
-  /streamsearch/1.1.0:
+  /streamsearch@1.1.0:
     resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
     engines: {node: '>=10.0.0'}
     dev: false
 
-  /strict-event-emitter-types/2.0.0:
+  /strict-event-emitter-types@2.0.0:
     resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==}
     dev: false
 
-  /strict-event-emitter/0.2.8:
+  /strict-event-emitter@0.2.8:
     resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==}
     dependencies:
       events: 3.3.0
     dev: true
 
-  /strict-event-emitter/0.4.6:
+  /strict-event-emitter@0.4.6:
     resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==}
     dev: true
 
-  /strict-uri-encode/1.1.0:
+  /strict-uri-encode@1.1.0:
     resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /string-length/4.0.2:
+  /string-length@4.0.2:
     resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
     engines: {node: '>=10'}
     dependencies:
@@ -17615,7 +18118,7 @@ packages:
       strip-ansi: 6.0.1
     dev: true
 
-  /string-width/1.0.2:
+  /string-width@1.0.2:
     resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17624,7 +18127,7 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
-  /string-width/4.2.3:
+  /string-width@4.2.3:
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
     engines: {node: '>=8'}
     dependencies:
@@ -17632,7 +18135,7 @@ packages:
       is-fullwidth-code-point: 3.0.0
       strip-ansi: 6.0.1
 
-  /string-width/5.1.2:
+  /string-width@5.1.2:
     resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
     engines: {node: '>=12'}
     dependencies:
@@ -17641,7 +18144,7 @@ packages:
       strip-ansi: 7.0.1
     dev: true
 
-  /string.prototype.trimend/1.0.6:
+  /string.prototype.trimend@1.0.6:
     resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
     dependencies:
       call-bind: 1.0.2
@@ -17649,7 +18152,7 @@ packages:
       es-abstract: 1.20.4
     dev: true
 
-  /string.prototype.trimstart/1.0.6:
+  /string.prototype.trimstart@1.0.6:
     resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
     dependencies:
       call-bind: 1.0.2
@@ -17657,109 +18160,109 @@ packages:
       es-abstract: 1.20.4
     dev: true
 
-  /string_decoder/0.10.31:
+  /string_decoder@0.10.31:
     resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
     dev: false
 
-  /string_decoder/1.1.1:
+  /string_decoder@1.1.1:
     resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
     dependencies:
       safe-buffer: 5.1.2
 
-  /string_decoder/1.3.0:
+  /string_decoder@1.3.0:
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
     dependencies:
       safe-buffer: 5.2.1
 
-  /stringz/2.1.0:
+  /stringz@2.1.0:
     resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==}
     dependencies:
       char-regex: 1.0.2
     dev: false
 
-  /strip-ansi/3.0.1:
+  /strip-ansi@3.0.1:
     resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       ansi-regex: 2.1.1
     dev: false
 
-  /strip-ansi/6.0.1:
+  /strip-ansi@6.0.1:
     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
     engines: {node: '>=8'}
     dependencies:
       ansi-regex: 5.0.1
 
-  /strip-ansi/7.0.1:
+  /strip-ansi@7.0.1:
     resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
     engines: {node: '>=12'}
     dependencies:
       ansi-regex: 6.0.1
     dev: true
 
-  /strip-bom/2.0.0:
+  /strip-bom@2.0.0:
     resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-utf8: 0.2.1
     dev: false
 
-  /strip-bom/3.0.0:
+  /strip-bom@3.0.0:
     resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
     engines: {node: '>=4'}
 
-  /strip-bom/4.0.0:
+  /strip-bom@4.0.0:
     resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
     engines: {node: '>=8'}
     dev: true
 
-  /strip-eof/1.0.0:
+  /strip-eof@1.0.0:
     resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /strip-final-newline/2.0.0:
+  /strip-final-newline@2.0.0:
     resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
     engines: {node: '>=6'}
 
-  /strip-final-newline/3.0.0:
+  /strip-final-newline@3.0.0:
     resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
     engines: {node: '>=12'}
     dev: true
 
-  /strip-indent/3.0.0:
+  /strip-indent@3.0.0:
     resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
     engines: {node: '>=8'}
     dependencies:
       min-indent: 1.0.1
     dev: true
 
-  /strip-json-comments/2.0.1:
+  /strip-json-comments@2.0.1:
     resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /strip-json-comments/3.1.1:
+  /strip-json-comments@3.1.1:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
     dev: true
 
-  /strip-literal/1.0.1:
+  /strip-literal@1.0.1:
     resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
     dependencies:
       acorn: 8.8.2
     dev: true
 
-  /strip-outer/2.0.0:
+  /strip-outer@2.0.0:
     resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dev: false
 
-  /strnum/1.0.5:
+  /strnum@1.0.5:
     resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
     dev: false
 
-  /strtok3/7.0.0:
+  /strtok3@7.0.0:
     resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -17767,50 +18270,49 @@ packages:
       peek-readable: 5.0.0
     dev: false
 
-  /supports-color/2.0.0:
+  /supports-color@2.0.0:
     resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
     engines: {node: '>=0.8.0'}
     dev: false
 
-  /supports-color/3.2.3:
+  /supports-color@3.2.3:
     resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
     engines: {node: '>=0.8.0'}
     dependencies:
       has-flag: 1.0.0
     dev: false
 
-  /supports-color/5.5.0:
+  /supports-color@5.5.0:
     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
     engines: {node: '>=4'}
     dependencies:
       has-flag: 3.0.0
     dev: true
 
-  /supports-color/7.2.0:
+  /supports-color@7.2.0:
     resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
     engines: {node: '>=8'}
     dependencies:
       has-flag: 4.0.0
 
-  /supports-color/8.1.1:
+  /supports-color@8.1.1:
     resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
     engines: {node: '>=10'}
     dependencies:
       has-flag: 4.0.0
-    dev: true
 
-  /supports-preserve-symlinks-flag/1.0.0:
+  /supports-preserve-symlinks-flag@1.0.0:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
-  /sver-compat/1.5.0:
+  /sver-compat@1.5.0:
     resolution: {integrity: sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==}
     dependencies:
       es6-iterator: 2.0.3
       es6-symbol: 3.1.3
     dev: false
 
-  /svgo/0.7.2:
+  /svgo@0.7.2:
     resolution: {integrity: sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -17823,26 +18325,26 @@ packages:
       whet.extend: 0.9.9
     dev: false
 
-  /symbol-tree/3.2.4:
+  /symbol-tree@3.2.4:
     resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
     dev: false
 
-  /synchronous-promise/2.0.17:
+  /synchronous-promise@2.0.17:
     resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==}
     dev: true
 
-  /systeminformation/5.17.12:
+  /systeminformation@5.17.12:
     resolution: {integrity: sha512-I3pfMW2vue53u+X08BNxaJieaHkRoMMKjWetY9lbYJeWFaeWPO6P4FkNc4XOCX8F9vbQ0HqQ25RJoz3U/B7liw==}
     engines: {node: '>=8.0.0'}
     os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
     hasBin: true
     dev: false
 
-  /syuilo-password-strength/0.0.1:
+  /syuilo-password-strength@0.0.1:
     resolution: {integrity: sha512-g9rPT3V1Q4WjWFZ/t5BdGC1mT/FpYnsLdBl+M5e6MlRkuE1RSR+R43wcY/3mKI59B9KEr+vxdWCuWNMD3oNHKA==}
     dev: false
 
-  /tar-fs/2.1.1:
+  /tar-fs@2.1.1:
     resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
     dependencies:
       chownr: 1.1.4
@@ -17850,7 +18352,7 @@ packages:
       pump: 3.0.0
       tar-stream: 2.2.0
 
-  /tar-stream/2.2.0:
+  /tar-stream@2.2.0:
     resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -17860,7 +18362,7 @@ packages:
       inherits: 2.0.4
       readable-stream: 3.6.0
 
-  /tar/4.4.19:
+  /tar@4.4.19:
     resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==}
     engines: {node: '>=4.5'}
     dependencies:
@@ -17874,7 +18376,7 @@ packages:
     dev: false
     optional: true
 
-  /tar/6.1.13:
+  /tar@6.1.13:
     resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==}
     engines: {node: '>=10'}
     dependencies:
@@ -17885,7 +18387,7 @@ packages:
       mkdirp: 1.0.4
       yallist: 4.0.0
 
-  /telejson/6.0.8:
+  /telejson@6.0.8:
     resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==}
     dependencies:
       '@types/is-function': 1.0.1
@@ -17898,25 +18400,25 @@ packages:
       memoizerific: 1.11.3
     dev: true
 
-  /telejson/7.0.4:
+  /telejson@7.0.4:
     resolution: {integrity: sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA==}
     dependencies:
       memoizerific: 1.11.3
     dev: true
 
-  /temp-dir/2.0.0:
+  /temp-dir@2.0.0:
     resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
     engines: {node: '>=8'}
     dev: true
 
-  /temp/0.8.4:
+  /temp@0.8.4:
     resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
     engines: {node: '>=6.0.0'}
     dependencies:
       rimraf: 2.6.3
     dev: true
 
-  /tempy/1.0.1:
+  /tempy@1.0.1:
     resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==}
     engines: {node: '>=10'}
     dependencies:
@@ -17927,7 +18429,7 @@ packages:
       unique-string: 2.0.0
     dev: true
 
-  /terser/5.16.1:
+  /terser@5.16.1:
     resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==}
     engines: {node: '>=10'}
     dependencies:
@@ -17937,7 +18439,7 @@ packages:
       source-map-support: 0.5.21
     dev: false
 
-  /test-exclude/6.0.0:
+  /test-exclude@6.0.0:
     resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
     engines: {node: '>=8'}
     dependencies:
@@ -17946,127 +18448,127 @@ packages:
       minimatch: 3.1.2
     dev: true
 
-  /text-decoding/1.0.0:
+  /text-decoding@1.0.0:
     resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==}
     dev: false
 
-  /text-table/0.2.0:
+  /text-table@0.2.0:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     dev: true
 
-  /textarea-caret/3.1.0:
+  /textarea-caret@3.1.0:
     resolution: {integrity: sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q==}
     dev: false
 
-  /textextensions/3.3.0:
+  /textextensions@3.3.0:
     resolution: {integrity: sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==}
     engines: {node: '>=8'}
     dev: false
 
-  /thenify-all/1.6.0:
+  /thenify-all@1.6.0:
     resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
     engines: {node: '>=0.8'}
     dependencies:
       thenify: 3.3.1
     dev: false
 
-  /thenify/3.3.1:
+  /thenify@3.3.1:
     resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
     dependencies:
       any-promise: 1.3.0
     dev: false
 
-  /thread-stream/2.3.0:
+  /thread-stream@2.3.0:
     resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==}
     dependencies:
       real-require: 0.2.0
     dev: false
 
-  /three/0.150.1:
+  /three@0.150.1:
     resolution: {integrity: sha512-5C1MqKUWaHYo13BX0Q64qcdwImgnnjSOFgBscOzAo8MYCzEtqfQqorEKMcajnA3FHy1yVlIe9AmaMQ0OQracNA==}
     dev: false
 
-  /throttle-debounce/5.0.0:
+  /throttle-debounce@5.0.0:
     resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==}
     engines: {node: '>=12.22'}
     dev: false
 
-  /throttleit/1.0.0:
+  /throttleit@1.0.0:
     resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==}
     dev: true
 
-  /through/2.3.4:
-    resolution: {integrity: sha512-DwbmSAcABsMazNkLOJJSLRC3gfh4cPxUxJCn9npmvbcI6undhgoJ2ShvEOgZrW8BH62Gyr9jKboGbfFcmY5VsQ==}
-    dev: false
-
-  /through/2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-
-  /through2-filter/3.0.0:
+  /through2-filter@3.0.0:
     resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==}
     dependencies:
       through2: 2.0.5
       xtend: 4.0.2
     dev: false
 
-  /through2/2.0.5:
+  /through2@2.0.5:
     resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
     dependencies:
       readable-stream: 2.3.7
       xtend: 4.0.2
 
-  /through2/4.0.2:
+  /through2@4.0.2:
     resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
     dependencies:
       readable-stream: 3.6.0
     dev: false
 
-  /time-stamp/1.1.0:
+  /through@2.3.4:
+    resolution: {integrity: sha512-DwbmSAcABsMazNkLOJJSLRC3gfh4cPxUxJCn9npmvbcI6undhgoJ2ShvEOgZrW8BH62Gyr9jKboGbfFcmY5VsQ==}
+    dev: false
+
+  /through@2.3.8:
+    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+  /time-stamp@1.1.0:
     resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /tiny-lru/10.0.1:
+  /tiny-lru@10.0.1:
     resolution: {integrity: sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA==}
     engines: {node: '>=6'}
     dev: false
 
-  /tinybench/2.4.0:
+  /tinybench@2.4.0:
     resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==}
     dev: true
 
-  /tinycolor2/1.6.0:
+  /tinycolor2@1.6.0:
     resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
     dev: false
 
-  /tinypool/0.3.1:
+  /tinypool@0.3.1:
     resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==}
     engines: {node: '>=14.0.0'}
     dev: true
 
-  /tinyspy/1.1.1:
+  /tinyspy@1.1.1:
     resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==}
     engines: {node: '>=14.0.0'}
     dev: true
 
-  /tmp/0.0.33:
+  /tmp@0.0.33:
     resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
     engines: {node: '>=0.6.0'}
     dependencies:
       os-tmpdir: 1.0.2
     dev: true
 
-  /tmp/0.2.1:
+  /tmp@0.2.1:
     resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
     engines: {node: '>=8.17.0'}
     dependencies:
       rimraf: 3.0.2
 
-  /tmpl/1.0.5:
+  /tmpl@1.0.5:
     resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
     dev: true
 
-  /to-absolute-glob/2.0.2:
+  /to-absolute-glob@2.0.2:
     resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -18074,22 +18576,22 @@ packages:
       is-negated-glob: 1.0.0
     dev: false
 
-  /to-data-view/1.1.0:
+  /to-data-view@1.1.0:
     resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==}
     dev: false
 
-  /to-fast-properties/2.0.0:
+  /to-fast-properties@2.0.0:
     resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
     engines: {node: '>=4'}
 
-  /to-object-path/0.3.0:
+  /to-object-path@0.3.0:
     resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       kind-of: 3.2.2
     dev: false
 
-  /to-regex-range/2.1.1:
+  /to-regex-range@2.1.1:
     resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -18097,13 +18599,13 @@ packages:
       repeat-string: 1.6.1
     dev: false
 
-  /to-regex-range/5.0.1:
+  /to-regex-range@5.0.1:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
     engines: {node: '>=8.0'}
     dependencies:
       is-number: 7.0.0
 
-  /to-regex/3.0.2:
+  /to-regex@3.0.2:
     resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -18113,21 +18615,21 @@ packages:
       safe-regex: 1.1.0
     dev: false
 
-  /to-through/2.0.0:
+  /to-through@2.0.0:
     resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==}
     engines: {node: '>= 0.10'}
     dependencies:
       through2: 2.0.5
     dev: false
 
-  /toidentifier/1.0.1:
+  /toidentifier@1.0.1:
     resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
     engines: {node: '>=0.6'}
 
-  /token-stream/1.0.0:
+  /token-stream@1.0.0:
     resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
 
-  /token-types/5.0.1:
+  /token-types@5.0.1:
     resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==}
     engines: {node: '>=14.16'}
     dependencies:
@@ -18135,14 +18637,14 @@ packages:
       ieee754: 1.2.1
     dev: false
 
-  /tough-cookie/2.5.0:
+  /tough-cookie@2.5.0:
     resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
     engines: {node: '>=0.8'}
     dependencies:
       psl: 1.9.0
       punycode: 2.3.0
 
-  /tough-cookie/4.1.2:
+  /tough-cookie@4.1.2:
     resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -18152,40 +18654,44 @@ packages:
       url-parse: 1.5.10
     dev: false
 
-  /tr46/0.0.3:
+  /tr46@0.0.3:
     resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
 
-  /tr46/3.0.0:
+  /tr46@3.0.0:
     resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
     engines: {node: '>=12'}
     dependencies:
       punycode: 2.3.0
     dev: false
 
-  /trace-redirect/1.0.6:
+  /trace-redirect@1.0.6:
     resolution: {integrity: sha512-UUfa1DjjU5flcjMdaFIiIEGDTyu2y/IiMjOX4uGXa7meKBS4vD4f2Uy/tken9Qkd4Jsm4sRsfZcIIPqrRVF3Mg==}
 
-  /traverse/0.3.9:
+  /traverse@0.3.9:
     resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
     dev: false
 
-  /trim-repeated/2.0.0:
+  /trim-repeated@2.0.0:
     resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==}
     engines: {node: '>=12'}
     dependencies:
       escape-string-regexp: 5.0.0
     dev: false
 
-  /ts-dedent/2.2.0:
+  /trough@2.1.0:
+    resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
+    dev: true
+
+  /ts-dedent@2.2.0:
     resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
     engines: {node: '>=6.10'}
     dev: true
 
-  /ts-map/1.0.3:
+  /ts-map@1.0.3:
     resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==}
     dev: true
 
-  /tsc-alias/1.8.3:
+  /tsc-alias@1.8.3:
     resolution: {integrity: sha512-/9JARcmXBrEqSuLjdSOqxY7/xI/AnvmBi4CU9/Ba2oX6Oq8vnd0OGSQTk+PIwqWJ5ZxskV0X/x15yzxCNTHU+g==}
     hasBin: true
     dependencies:
@@ -18197,7 +18703,7 @@ packages:
       plimit-lit: 1.5.0
     dev: false
 
-  /tsconfig-paths/3.14.1:
+  /tsconfig-paths@3.14.1:
     resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
     dependencies:
       '@types/json5': 0.0.29
@@ -18206,7 +18712,7 @@ packages:
       strip-bom: 3.0.0
     dev: true
 
-  /tsconfig-paths/4.1.2:
+  /tsconfig-paths@4.1.2:
     resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==}
     engines: {node: '>=6'}
     dependencies:
@@ -18215,13 +18721,13 @@ packages:
       strip-bom: 3.0.0
     dev: false
 
-  /tslib/1.14.1:
+  /tslib@1.14.1:
     resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
 
-  /tslib/2.5.0:
+  /tslib@2.5.0:
     resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
 
-  /tsutils/3.21.0_typescript@4.9.5:
+  /tsutils@3.21.0(typescript@4.9.5):
     resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
     engines: {node: '>= 6'}
     peerDependencies:
@@ -18231,66 +18737,66 @@ packages:
       typescript: 4.9.5
     dev: true
 
-  /tunnel-agent/0.6.0:
+  /tunnel-agent@0.6.0:
     resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
     dependencies:
       safe-buffer: 5.2.1
 
-  /tweetnacl/0.14.5:
+  /tweetnacl@0.14.5:
     resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
 
-  /twemoji-parser/14.0.0:
+  /twemoji-parser@14.0.0:
     resolution: {integrity: sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA==}
     dev: false
 
-  /type-check/0.3.2:
+  /type-check@0.3.2:
     resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
     engines: {node: '>= 0.8.0'}
     dependencies:
       prelude-ls: 1.1.2
 
-  /type-check/0.4.0:
+  /type-check@0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
     engines: {node: '>= 0.8.0'}
     dependencies:
       prelude-ls: 1.2.1
     dev: true
 
-  /type-detect/4.0.8:
+  /type-detect@4.0.8:
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     engines: {node: '>=4'}
 
-  /type-fest/0.16.0:
+  /type-fest@0.16.0:
     resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
     engines: {node: '>=10'}
     dev: true
 
-  /type-fest/0.20.2:
+  /type-fest@0.20.2:
     resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
     engines: {node: '>=10'}
     dev: true
 
-  /type-fest/0.21.3:
+  /type-fest@0.21.3:
     resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
     engines: {node: '>=10'}
     dev: true
 
-  /type-fest/0.6.0:
+  /type-fest@0.6.0:
     resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
     engines: {node: '>=8'}
     dev: true
 
-  /type-fest/0.8.1:
+  /type-fest@0.8.1:
     resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
     engines: {node: '>=8'}
     dev: true
 
-  /type-fest/2.19.0:
+  /type-fest@2.19.0:
     resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
     engines: {node: '>=12.20'}
     dev: true
 
-  /type-is/1.6.18:
+  /type-is@1.6.18:
     resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
     engines: {node: '>= 0.6'}
     dependencies:
@@ -18298,24 +18804,24 @@ packages:
       mime-types: 2.1.35
     dev: true
 
-  /type/1.2.0:
+  /type@1.2.0:
     resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
     dev: false
 
-  /type/2.7.2:
+  /type@2.7.2:
     resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
     dev: false
 
-  /typedarray-to-buffer/3.1.5:
+  /typedarray-to-buffer@3.1.5:
     resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
     dependencies:
       is-typedarray: 1.0.0
     dev: false
 
-  /typedarray/0.0.6:
+  /typedarray@0.0.6:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
 
-  /typeorm/0.3.11_ioredis@4.28.5+pg@8.10.0:
+  /typeorm@0.3.11(ioredis@4.28.5)(pg@8.10.0):
     resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
     engines: {node: '>= 12.9.0'}
     hasBin: true
@@ -18379,7 +18885,7 @@ packages:
       chalk: 4.1.2
       cli-highlight: 2.1.11
       date-fns: 2.29.3
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       dotenv: 16.0.3
       glob: 7.2.3
       ioredis: 4.28.5
@@ -18396,15 +18902,15 @@ packages:
       - supports-color
     dev: false
 
-  /typescript/4.9.5:
+  /typescript@4.9.5:
     resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
     engines: {node: '>=4.2.0'}
 
-  /ufo/1.1.1:
+  /ufo@1.1.1:
     resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
     dev: true
 
-  /uglify-js/3.17.4:
+  /uglify-js@3.17.4:
     resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
     engines: {node: '>=0.8.0'}
     hasBin: true
@@ -18412,18 +18918,18 @@ packages:
     dev: true
     optional: true
 
-  /uid/2.0.1:
+  /uid@2.0.1:
     resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==}
     engines: {node: '>=8'}
     dependencies:
       '@lukeed/csprng': 1.0.1
     dev: false
 
-  /ulid/2.3.0:
+  /ulid@2.3.0:
     resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==}
     dev: false
 
-  /unbox-primitive/1.0.2:
+  /unbox-primitive@1.0.2:
     resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
     dependencies:
       call-bind: 1.0.2
@@ -18432,17 +18938,17 @@ packages:
       which-boxed-primitive: 1.0.2
     dev: true
 
-  /unc-path-regex/0.1.2:
+  /unc-path-regex@0.1.2:
     resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /undertaker-registry/1.0.1:
+  /undertaker-registry@1.0.1:
     resolution: {integrity: sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /undertaker/1.3.0:
+  /undertaker@1.3.0:
     resolution: {integrity: sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -18458,23 +18964,23 @@ packages:
       undertaker-registry: 1.0.1
     dev: false
 
-  /undici/5.16.0:
+  /undici@5.16.0:
     resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==}
     engines: {node: '>=12.18'}
     dependencies:
       busboy: 1.6.0
     dev: false
 
-  /unfetch/4.2.0:
+  /unfetch@4.2.0:
     resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==}
     dev: true
 
-  /unicode-canonical-property-names-ecmascript/2.0.0:
+  /unicode-canonical-property-names-ecmascript@2.0.0:
     resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
     engines: {node: '>=4'}
     dev: true
 
-  /unicode-match-property-ecmascript/2.0.0:
+  /unicode-match-property-ecmascript@2.0.0:
     resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
     engines: {node: '>=4'}
     dependencies:
@@ -18482,17 +18988,29 @@ packages:
       unicode-property-aliases-ecmascript: 2.1.0
     dev: true
 
-  /unicode-match-property-value-ecmascript/2.1.0:
+  /unicode-match-property-value-ecmascript@2.1.0:
     resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
     engines: {node: '>=4'}
     dev: true
 
-  /unicode-property-aliases-ecmascript/2.1.0:
+  /unicode-property-aliases-ecmascript@2.1.0:
     resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
     engines: {node: '>=4'}
     dev: true
 
-  /union-value/1.0.1:
+  /unified@10.1.2:
+    resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+    dependencies:
+      '@types/unist': 2.0.6
+      bail: 2.0.2
+      extend: 3.0.2
+      is-buffer: 2.0.5
+      is-plain-obj: 4.1.0
+      trough: 2.1.0
+      vfile: 5.3.7
+    dev: true
+
+  /union-value@1.0.1:
     resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -18502,54 +19020,73 @@ packages:
       set-value: 2.0.1
     dev: false
 
-  /uniq/1.0.1:
+  /uniq@1.0.1:
     resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==}
     dev: false
 
-  /uniqs/2.0.0:
+  /uniqs@2.0.0:
     resolution: {integrity: sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==}
     dev: false
 
-  /unique-filename/2.0.1:
+  /unique-filename@2.0.1:
     resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
       unique-slug: 3.0.0
     dev: false
 
-  /unique-slug/3.0.0:
+  /unique-slug@3.0.0:
     resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
       imurmurhash: 0.1.4
     dev: false
 
-  /unique-stream/2.3.1:
+  /unique-stream@2.3.1:
     resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==}
     dependencies:
       json-stable-stringify-without-jsonify: 1.0.1
       through2-filter: 3.0.0
     dev: false
 
-  /unique-string/2.0.0:
+  /unique-string@2.0.0:
     resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
     engines: {node: '>=8'}
     dependencies:
       crypto-random-string: 2.0.0
     dev: true
 
-  /unist-util-is/4.1.0:
+  /unist-util-is@4.1.0:
     resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
     dev: true
 
-  /unist-util-visit-parents/3.1.1:
+  /unist-util-is@5.2.1:
+    resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /unist-util-stringify-position@3.0.3:
+    resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /unist-util-visit-parents@3.1.1:
     resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
     dependencies:
       '@types/unist': 2.0.6
       unist-util-is: 4.1.0
     dev: true
 
-  /unist-util-visit/2.0.3:
+  /unist-util-visit-parents@5.1.3:
+    resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 5.2.1
+    dev: true
+
+  /unist-util-visit@2.0.3:
     resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
     dependencies:
       '@types/unist': 2.0.6
@@ -18557,31 +19094,39 @@ packages:
       unist-util-visit-parents: 3.1.1
     dev: true
 
-  /universalify/0.1.2:
+  /unist-util-visit@4.1.2:
+    resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 5.2.1
+      unist-util-visit-parents: 5.1.3
+    dev: true
+
+  /universalify@0.1.2:
     resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
     engines: {node: '>= 4.0.0'}
     dev: false
 
-  /universalify/0.2.0:
+  /universalify@0.2.0:
     resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
     engines: {node: '>= 4.0.0'}
     dev: false
 
-  /universalify/2.0.0:
+  /universalify@2.0.0:
     resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /unload/2.4.1:
+  /unload@2.4.1:
     resolution: {integrity: sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==}
     dev: false
 
-  /unpipe/1.0.0:
+  /unpipe@1.0.0:
     resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
     engines: {node: '>= 0.8'}
     dev: true
 
-  /unplugin/0.10.2:
+  /unplugin@0.10.2:
     resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==}
     dependencies:
       acorn: 8.8.2
@@ -18590,7 +19135,7 @@ packages:
       webpack-virtual-modules: 0.4.6
     dev: true
 
-  /unset-value/1.0.0:
+  /unset-value@1.0.0:
     resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -18598,12 +19143,12 @@ packages:
       isobject: 3.0.1
     dev: false
 
-  /untildify/4.0.0:
+  /untildify@4.0.0:
     resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
     engines: {node: '>=8'}
     dev: true
 
-  /unzipper/0.10.11:
+  /unzipper@0.10.11:
     resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==}
     dependencies:
       big-integer: 1.6.51
@@ -18618,7 +19163,7 @@ packages:
       setimmediate: 1.0.5
     dev: false
 
-  /update-browserslist-db/1.0.10_browserslist@4.21.5:
+  /update-browserslist-db@1.0.10(browserslist@4.21.5):
     resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
     hasBin: true
     peerDependencies:
@@ -18629,31 +19174,31 @@ packages:
       picocolors: 1.0.0
     dev: true
 
-  /uri-js/4.4.1:
+  /uri-js@4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
     dependencies:
       punycode: 2.3.0
 
-  /urix/0.1.0:
+  /urix@0.1.0:
     resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
     dev: false
 
-  /url-parse/1.5.10:
+  /url-parse@1.5.10:
     resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
     dependencies:
       querystringify: 2.2.0
       requires-port: 1.0.0
     dev: false
 
-  /url-polyfill/1.1.12:
+  /url-polyfill@1.1.12:
     resolution: {integrity: sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==}
     dev: false
 
-  /urlsafe-base64/1.0.0:
+  /urlsafe-base64@1.0.0:
     resolution: {integrity: sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==}
     dev: false
 
-  /use-resize-observer/9.1.0_biqbaboplfbrettd7655fr4n2y:
+  /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==}
     peerDependencies:
       react: 16.8.0 - 18
@@ -18661,15 +19206,15 @@ packages:
     dependencies:
       '@juggle/resize-observer': 3.4.0
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /use/3.1.1:
+  /use@3.1.1:
     resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /utf-8-validate/5.0.10:
+  /utf-8-validate@5.0.10:
     resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
     engines: {node: '>=6.14.2'}
     requiresBuild: true
@@ -18677,10 +19222,10 @@ packages:
       node-gyp-build: 4.6.0
     dev: false
 
-  /util-deprecate/1.0.2:
+  /util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
-  /util/0.12.5:
+  /util@0.12.5:
     resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
     dependencies:
       inherits: 2.0.4
@@ -18690,30 +19235,30 @@ packages:
       which-typed-array: 1.1.9
     dev: true
 
-  /utils-merge/1.0.1:
+  /utils-merge@1.0.1:
     resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
     engines: {node: '>= 0.4.0'}
     dev: true
 
-  /uuid-browser/3.1.0:
+  /uuid-browser@3.1.0:
     resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==}
     dev: true
 
-  /uuid/3.4.0:
+  /uuid@3.4.0:
     resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
     deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
     hasBin: true
     dev: false
 
-  /uuid/8.3.2:
+  /uuid@8.3.2:
     resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
     hasBin: true
 
-  /uuid/9.0.0:
+  /uuid@9.0.0:
     resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
     dev: false
 
-  /v8-to-istanbul/9.0.1:
+  /v8-to-istanbul@9.0.1:
     resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==}
     engines: {node: '>=10.12.0'}
     dependencies:
@@ -18722,37 +19267,37 @@ packages:
       convert-source-map: 1.9.0
     dev: true
 
-  /v8flags/3.2.0:
+  /v8flags@3.2.0:
     resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==}
     engines: {node: '>= 0.10'}
     dependencies:
       homedir-polyfill: 1.0.3
     dev: false
 
-  /validate-npm-package-license/3.0.4:
+  /validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
     dependencies:
       spdx-correct: 3.1.1
       spdx-expression-parse: 3.0.1
 
-  /value-or-function/3.0.0:
+  /value-or-function@3.0.0:
     resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==}
     engines: {node: '>= 0.10'}
     dev: false
 
-  /vanilla-tilt/1.8.0:
+  /vanilla-tilt@1.8.0:
     resolution: {integrity: sha512-wVCHyyfRuiRdKhDTNxKPb60lkagmywDSqLgFETEr71Sm646AvGxuf/14Kx9A8FaISyYvMoKQHk6FTqt+YLGhEw==}
     dev: false
 
-  /vary/1.1.2:
+  /vary@1.1.2:
     resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
     engines: {node: '>= 0.8'}
 
-  /vendors/1.0.4:
+  /vendors@1.0.4:
     resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==}
     dev: false
 
-  /verror/1.10.0:
+  /verror@1.10.0:
     resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
     engines: {'0': node >=0.6.0}
     dependencies:
@@ -18760,7 +19305,23 @@ packages:
       core-util-is: 1.0.2
       extsprintf: 1.3.0
 
-  /vinyl-fs/3.0.3:
+  /vfile-message@3.1.4:
+    resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-stringify-position: 3.0.3
+    dev: true
+
+  /vfile@5.3.7:
+    resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+    dependencies:
+      '@types/unist': 2.0.6
+      is-buffer: 2.0.5
+      unist-util-stringify-position: 3.0.3
+      vfile-message: 3.1.4
+    dev: true
+
+  /vinyl-fs@3.0.3:
     resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -18783,7 +19344,7 @@ packages:
       vinyl-sourcemap: 1.1.0
     dev: false
 
-  /vinyl-sourcemap/1.1.0:
+  /vinyl-sourcemap@1.1.0:
     resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -18796,13 +19357,13 @@ packages:
       vinyl: 2.2.1
     dev: false
 
-  /vinyl-sourcemaps-apply/0.2.1:
+  /vinyl-sourcemaps-apply@0.2.1:
     resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==}
     dependencies:
       source-map: 0.5.7
     dev: false
 
-  /vinyl/2.2.1:
+  /vinyl@2.2.1:
     resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
     engines: {node: '>= 0.10'}
     dependencies:
@@ -18814,17 +19375,17 @@ packages:
       replace-ext: 1.0.1
     dev: false
 
-  /vite-node/0.29.2_6e4omgvd5jf4hig7wpb5tmdc3q:
+  /vite-node@0.29.2(@types/node@18.15.0)(sass@1.58.3):
     resolution: {integrity: sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA==}
     engines: {node: '>=v14.16.0'}
     hasBin: true
     dependencies:
       cac: 6.7.14
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       mlly: 1.1.1
       pathe: 1.1.0
       picocolors: 1.0.0
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -18835,16 +19396,16 @@ packages:
       - terser
     dev: true
 
-  /vite-plugin-restart/0.3.1_vite@4.1.4:
+  /vite-plugin-restart@0.3.1(vite@4.1.4):
     resolution: {integrity: sha512-LVe74MLUwaOzXVUgRGiphYbAYNgdGF6mP5vxj5BKcKkdmzvuuw79qcNgn9kHKKaIlCCjmOUiY3qlJ8jBSBUCoA==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0 || ^4.0.0
     dependencies:
       micromatch: 4.0.5
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
     dev: true
 
-  /vite/4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q:
+  /vite@4.1.4(@types/node@18.15.0)(sass@1.58.3):
     resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
     engines: {node: ^14.18.0 || >=16.0.0}
     hasBin: true
@@ -18878,19 +19439,19 @@ packages:
     optionalDependencies:
       fsevents: 2.3.2
 
-  /vitest-fetch-mock/0.2.2_vitest@0.29.2:
+  /vitest-fetch-mock@0.2.2(vitest@0.29.2):
     resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==}
     engines: {node: '>=14.14.0'}
     peerDependencies:
       vitest: '>=0.16.0'
     dependencies:
       cross-fetch: 3.1.5
-      vitest: 0.29.2_zcjcryjt4bqcdu7ggonulipgea
+      vitest: 0.29.2(happy-dom@8.9.0)(sass@1.58.3)
     transitivePeerDependencies:
       - encoding
     dev: true
 
-  /vitest/0.29.2_zcjcryjt4bqcdu7ggonulipgea:
+  /vitest@0.29.2(happy-dom@8.9.0)(sass@1.58.3):
     resolution: {integrity: sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA==}
     engines: {node: '>=v14.16.0'}
     hasBin: true
@@ -18923,7 +19484,7 @@ packages:
       acorn-walk: 8.2.0
       cac: 6.7.14
       chai: 4.3.7
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       happy-dom: 8.9.0
       local-pkg: 0.4.3
       pathe: 1.1.0
@@ -18934,8 +19495,8 @@ packages:
       tinybench: 2.4.0
       tinypool: 0.3.1
       tinyspy: 1.1.1
-      vite: 4.1.4_6e4omgvd5jf4hig7wpb5tmdc3q
-      vite-node: 0.29.2_6e4omgvd5jf4hig7wpb5tmdc3q
+      vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3)
+      vite-node: 0.29.2(@types/node@18.15.0)(sass@1.58.3)
       why-is-node-running: 2.2.2
     transitivePeerDependencies:
       - less
@@ -18946,11 +19507,11 @@ packages:
       - terser
     dev: true
 
-  /void-elements/3.1.0:
+  /void-elements@3.1.0:
     resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
     engines: {node: '>=0.10.0'}
 
-  /vue-docgen-api/4.64.1_vue@3.2.47:
+  /vue-docgen-api@4.64.1(vue@3.2.47):
     resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==}
     dependencies:
       '@babel/parser': 7.21.3
@@ -18963,18 +19524,18 @@ packages:
       pug: 3.0.2
       recast: 0.22.0
       ts-map: 1.0.3
-      vue-inbrowser-compiler-independent-utils: 4.64.1_vue@3.2.47
+      vue-inbrowser-compiler-independent-utils: 4.64.1(vue@3.2.47)
     transitivePeerDependencies:
       - vue
     dev: true
 
-  /vue-eslint-parser/9.1.0_eslint@8.35.0:
+  /vue-eslint-parser@9.1.0(eslint@8.35.0):
     resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.35.0
       eslint-scope: 7.1.1
       eslint-visitor-keys: 3.3.0
@@ -18986,7 +19547,7 @@ packages:
       - supports-color
     dev: true
 
-  /vue-inbrowser-compiler-independent-utils/4.64.1_vue@3.2.47:
+  /vue-inbrowser-compiler-independent-utils@4.64.1(vue@3.2.47):
     resolution: {integrity: sha512-Hn32n07XZ8j9W8+fmOXPQL+i+W2e/8i6mkH4Ju3H6nR0+cfvmWM95GhczYi5B27+Y8JlCKgAo04IUiYce4mKAw==}
     peerDependencies:
       vue: '>=2'
@@ -18994,14 +19555,14 @@ packages:
       vue: 3.2.47
     dev: true
 
-  /vue-plyr/7.0.0:
+  /vue-plyr@7.0.0:
     resolution: {integrity: sha512-NvbO/ZzV1IxlBQQbQlon5Sk8hKuGAj3k4k0XVdi7gM4oSqu8mZMhJ3WM3FfAtNfV790jbLnb8P3dHYqaBqIv6g==}
     dependencies:
       plyr: github.com/sampotts/plyr/d434c9af16e641400aaee93188594208d88f2658
       vue: 2.7.14
     dev: false
 
-  /vue-prism-editor/2.0.0-alpha.2_vue@3.2.47:
+  /vue-prism-editor@2.0.0-alpha.2(vue@3.2.47):
     resolution: {integrity: sha512-Gu42ba9nosrE+gJpnAEuEkDMqG9zSUysIR8SdXUw8MQKDjBnnNR9lHC18uOr/ICz7yrA/5c7jHJr9lpElODC7w==}
     engines: {node: '>=10'}
     peerDependencies:
@@ -19010,14 +19571,14 @@ packages:
       vue: 3.2.47
     dev: false
 
-  /vue-template-compiler/2.7.14:
+  /vue-template-compiler@2.7.14:
     resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
     dependencies:
       de-indent: 1.0.2
       he: 1.2.0
     dev: true
 
-  /vue-tsc/1.2.0_typescript@4.9.5:
+  /vue-tsc@1.2.0(typescript@4.9.5):
     resolution: {integrity: sha512-rIlzqdrhyPYyLG9zxsVRa+JEseeS9s8F2BbVVVWRRsTZvJO2BbhLEb2HW3MY+DFma0378tnIqs+vfTzbcQtRFw==}
     hasBin: true
     peerDependencies:
@@ -19028,23 +19589,23 @@ packages:
       typescript: 4.9.5
     dev: true
 
-  /vue/2.7.14:
+  /vue@2.7.14:
     resolution: {integrity: sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==}
     dependencies:
       '@vue/compiler-sfc': 2.7.14
       csstype: 3.1.1
     dev: false
 
-  /vue/3.2.47:
+  /vue@3.2.47:
     resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
     dependencies:
       '@vue/compiler-dom': 3.2.47
       '@vue/compiler-sfc': 3.2.47
       '@vue/runtime-dom': 3.2.47
-      '@vue/server-renderer': 3.2.47_vue@3.2.47
+      '@vue/server-renderer': 3.2.47(vue@3.2.47)
       '@vue/shared': 3.2.47
 
-  /vuedraggable/4.1.0_vue@3.2.47:
+  /vuedraggable@4.1.0(vue@3.2.47):
     resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
     peerDependencies:
       vue: ^3.0.1
@@ -19053,19 +19614,19 @@ packages:
       vue: 3.2.47
     dev: false
 
-  /w3c-xmlserializer/4.0.0:
+  /w3c-xmlserializer@4.0.0:
     resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
     engines: {node: '>=14'}
     dependencies:
       xml-name-validator: 4.0.0
     dev: false
 
-  /wait-on/7.0.1_debug@4.3.4:
+  /wait-on@7.0.1(debug@4.3.4):
     resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==}
     engines: {node: '>=12.0.0'}
     hasBin: true
     dependencies:
-      axios: 0.27.2_debug@4.3.4
+      axios: 0.27.2(debug@4.3.4)
       joi: 17.7.0
       lodash: 4.17.21
       minimist: 1.2.7
@@ -19074,13 +19635,13 @@ packages:
       - debug
     dev: true
 
-  /walker/1.0.8:
+  /walker@1.0.8:
     resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
     dependencies:
       makeerror: 1.0.12
     dev: true
 
-  /watchpack/2.4.0:
+  /watchpack@2.4.0:
     resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
     engines: {node: '>=10.13.0'}
     dependencies:
@@ -19088,13 +19649,13 @@ packages:
       graceful-fs: 4.2.11
     dev: true
 
-  /wcwidth/1.0.1:
+  /wcwidth@1.0.1:
     resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
     dependencies:
       defaults: 1.0.4
     dev: true
 
-  /web-encoding/1.1.5:
+  /web-encoding@1.1.5:
     resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==}
     dependencies:
       util: 0.12.5
@@ -19102,7 +19663,7 @@ packages:
       '@zxing/text-encoding': 0.9.0
     dev: true
 
-  /web-push/3.5.0:
+  /web-push@3.5.0:
     resolution: {integrity: sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==}
     engines: {node: '>= 6'}
     dependencies:
@@ -19116,27 +19677,27 @@ packages:
       - supports-color
     dev: false
 
-  /web-streams-polyfill/3.2.1:
+  /web-streams-polyfill@3.2.1:
     resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
     engines: {node: '>= 8'}
 
-  /webidl-conversions/3.0.1:
+  /webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 
-  /webidl-conversions/7.0.0:
+  /webidl-conversions@7.0.0:
     resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
     engines: {node: '>=12'}
 
-  /webpack-sources/3.2.3:
+  /webpack-sources@3.2.3:
     resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
     engines: {node: '>=10.13.0'}
     dev: true
 
-  /webpack-virtual-modules/0.4.6:
+  /webpack-virtual-modules@0.4.6:
     resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==}
     dev: true
 
-  /websocket/1.0.34:
+  /websocket@1.0.34:
     resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==}
     engines: {node: '>=4.0.0'}
     dependencies:
@@ -19150,17 +19711,17 @@ packages:
       - supports-color
     dev: false
 
-  /whatwg-encoding/2.0.0:
+  /whatwg-encoding@2.0.0:
     resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
     engines: {node: '>=12'}
     dependencies:
       iconv-lite: 0.6.3
 
-  /whatwg-mimetype/3.0.0:
+  /whatwg-mimetype@3.0.0:
     resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
     engines: {node: '>=12'}
 
-  /whatwg-url/11.0.0:
+  /whatwg-url@11.0.0:
     resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
     engines: {node: '>=12'}
     dependencies:
@@ -19168,18 +19729,18 @@ packages:
       webidl-conversions: 7.0.0
     dev: false
 
-  /whatwg-url/5.0.0:
+  /whatwg-url@5.0.0:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
     dependencies:
       tr46: 0.0.3
       webidl-conversions: 3.0.1
 
-  /whet.extend/0.9.9:
+  /whet.extend@0.9.9:
     resolution: {integrity: sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==}
     engines: {node: '>=0.6.0'}
     dev: false
 
-  /which-boxed-primitive/1.0.2:
+  /which-boxed-primitive@1.0.2:
     resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
     dependencies:
       is-bigint: 1.0.4
@@ -19189,7 +19750,7 @@ packages:
       is-symbol: 1.0.4
     dev: true
 
-  /which-collection/1.0.1:
+  /which-collection@1.0.1:
     resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
     dependencies:
       is-map: 2.0.2
@@ -19198,15 +19759,15 @@ packages:
       is-weakset: 2.0.2
     dev: true
 
-  /which-module/1.0.0:
+  /which-module@1.0.0:
     resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==}
     dev: false
 
-  /which-module/2.0.0:
+  /which-module@2.0.0:
     resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
     dev: false
 
-  /which-typed-array/1.1.9:
+  /which-typed-array@1.1.9:
     resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
     engines: {node: '>= 0.4'}
     dependencies:
@@ -19218,21 +19779,21 @@ packages:
       is-typed-array: 1.1.10
     dev: true
 
-  /which/1.3.1:
+  /which@1.3.1:
     resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
     hasBin: true
     dependencies:
       isexe: 2.0.0
     dev: false
 
-  /which/2.0.2:
+  /which@2.0.2:
     resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
     engines: {node: '>= 8'}
     hasBin: true
     dependencies:
       isexe: 2.0.0
 
-  /why-is-node-running/2.2.2:
+  /why-is-node-running@2.2.2:
     resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
     engines: {node: '>=8'}
     hasBin: true
@@ -19241,19 +19802,19 @@ packages:
       stackback: 0.0.2
     dev: true
 
-  /wide-align/1.1.5:
+  /wide-align@1.1.5:
     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
     dependencies:
       string-width: 4.2.3
 
-  /widest-line/3.1.0:
+  /widest-line@3.1.0:
     resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
     engines: {node: '>=8'}
     dependencies:
       string-width: 4.2.3
     dev: true
 
-  /with/7.0.2:
+  /with@7.0.2:
     resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
     engines: {node: '>= 10.0.0'}
     dependencies:
@@ -19262,15 +19823,15 @@ packages:
       assert-never: 1.2.1
       babel-walk: 3.0.0-canary-5
 
-  /word-wrap/1.2.3:
+  /word-wrap@1.2.3:
     resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
     engines: {node: '>=0.10.0'}
 
-  /wordwrap/1.0.0:
+  /wordwrap@1.0.0:
     resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
     dev: true
 
-  /wrap-ansi/2.1.0:
+  /wrap-ansi@2.1.0:
     resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
     engines: {node: '>=0.10.0'}
     dependencies:
@@ -19278,7 +19839,7 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
-  /wrap-ansi/6.2.0:
+  /wrap-ansi@6.2.0:
     resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
     engines: {node: '>=8'}
     dependencies:
@@ -19286,7 +19847,7 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
 
-  /wrap-ansi/7.0.0:
+  /wrap-ansi@7.0.0:
     resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
     engines: {node: '>=10'}
     dependencies:
@@ -19294,10 +19855,10 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
 
-  /wrappy/1.0.2:
+  /wrappy@1.0.2:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 
-  /write-file-atomic/2.4.3:
+  /write-file-atomic@2.4.3:
     resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
     dependencies:
       graceful-fs: 4.2.11
@@ -19305,7 +19866,7 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
-  /write-file-atomic/4.0.2:
+  /write-file-atomic@4.0.2:
     resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
     dependencies:
@@ -19313,7 +19874,7 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
-  /ws/6.2.2:
+  /ws@6.2.2:
     resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==}
     peerDependencies:
       bufferutil: ^4.0.1
@@ -19327,7 +19888,7 @@ packages:
       async-limiter: 1.0.1
     dev: true
 
-  /ws/8.12.1:
+  /ws@8.12.1:
     resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}
     engines: {node: '>=10.0.0'}
     peerDependencies:
@@ -19339,21 +19900,21 @@ packages:
       utf-8-validate:
         optional: true
 
-  /xev/3.0.2:
+  /xev@3.0.2:
     resolution: {integrity: sha512-8kxuH95iMXzHZj+fwqfA4UrPcYOy6bGIgfWzo9Ji23JoEc30ge/Z++Ubkiuy8c0+M64nXmmxrmJ7C8wnuBhluw==}
     dev: false
 
-  /xml-js/1.6.11:
+  /xml-js@1.6.11:
     resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
     dependencies:
       sax: 1.2.4
     dev: false
 
-  /xml-name-validator/4.0.0:
+  /xml-name-validator@4.0.0:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
     engines: {node: '>=12'}
 
-  /xml2js/0.4.23:
+  /xml2js@0.4.23:
     resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==}
     engines: {node: '>=4.0.0'}
     dependencies:
@@ -19361,46 +19922,46 @@ packages:
       xmlbuilder: 11.0.1
     dev: false
 
-  /xmlbuilder/11.0.1:
+  /xmlbuilder@11.0.1:
     resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
     engines: {node: '>=4.0'}
     dev: false
 
-  /xmlchars/2.2.0:
+  /xmlchars@2.2.0:
     resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
     dev: false
 
-  /xtend/4.0.2:
+  /xtend@4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
 
-  /y18n/3.2.2:
+  /y18n@3.2.2:
     resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
     dev: false
 
-  /y18n/4.0.3:
+  /y18n@4.0.3:
     resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
     dev: false
 
-  /y18n/5.0.8:
+  /y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     engines: {node: '>=10'}
 
-  /yaeti/0.0.6:
+  /yaeti@0.0.6:
     resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==}
     engines: {node: '>=0.10.32'}
     dev: false
 
-  /yallist/2.1.2:
+  /yallist@2.1.2:
     resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
 
-  /yallist/3.1.1:
+  /yallist@3.1.1:
     resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
 
-  /yallist/4.0.0:
+  /yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
 
-  /yargs-parser/18.1.3:
+  /yargs-parser@18.1.3:
     resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
     engines: {node: '>=6'}
     dependencies:
@@ -19408,22 +19969,22 @@ packages:
       decamelize: 1.2.0
     dev: false
 
-  /yargs-parser/20.2.9:
+  /yargs-parser@20.2.9:
     resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
     engines: {node: '>=10'}
 
-  /yargs-parser/21.1.1:
+  /yargs-parser@21.1.1:
     resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
     engines: {node: '>=12'}
 
-  /yargs-parser/5.0.1:
+  /yargs-parser@5.0.1:
     resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==}
     dependencies:
       camelcase: 3.0.0
       object.assign: 4.1.4
     dev: false
 
-  /yargs/15.4.1:
+  /yargs@15.4.1:
     resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
     engines: {node: '>=8'}
     dependencies:
@@ -19440,7 +20001,7 @@ packages:
       yargs-parser: 18.1.3
     dev: false
 
-  /yargs/16.2.0:
+  /yargs@16.2.0:
     resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
     engines: {node: '>=10'}
     dependencies:
@@ -19452,7 +20013,7 @@ packages:
       y18n: 5.0.8
       yargs-parser: 20.2.9
 
-  /yargs/17.6.2:
+  /yargs@17.6.2:
     resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
     engines: {node: '>=12'}
     dependencies:
@@ -19464,7 +20025,7 @@ packages:
       y18n: 5.0.8
       yargs-parser: 21.1.1
 
-  /yargs/7.1.2:
+  /yargs@7.1.2:
     resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==}
     dependencies:
       camelcase: 3.0.0
@@ -19482,23 +20043,23 @@ packages:
       yargs-parser: 5.0.1
     dev: false
 
-  /yauzl/2.10.0:
+  /yauzl@2.10.0:
     resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
     dependencies:
       buffer-crc32: 0.2.13
       fd-slicer: 1.1.0
     dev: true
 
-  /yocto-queue/0.1.0:
+  /yocto-queue@0.1.0:
     resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     engines: {node: '>=10'}
 
-  /yocto-queue/1.0.0:
+  /yocto-queue@1.0.0:
     resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
     engines: {node: '>=12.20'}
     dev: true
 
-  /zip-stream/4.1.0:
+  /zip-stream@4.1.0:
     resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==}
     engines: {node: '>= 10'}
     dependencies:
@@ -19523,7 +20084,7 @@ packages:
       sharp: 0.31.3
     dev: false
 
-  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640_hp2ec65oinwl37fsk4exx24idq:
+  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0):
     resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
     id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
     name: storybook-addon-misskey-theme
@@ -19544,15 +20105,15 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/components': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/core-events': 7.0.0-rc.6
-      '@storybook/manager-api': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/preview-api': 7.0.0-rc.6
-      '@storybook/theming': 7.0.0-rc.6_biqbaboplfbrettd7655fr4n2y
-      '@storybook/types': 7.0.0-rc.6
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
       react: 18.2.0
-      react-dom: 18.2.0_react@18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
   github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992:

From 5393436403abbf75e4648af9755b2817279be937 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Thu, 30 Mar 2023 23:15:29 +0900
Subject: [PATCH 30/99] docs(#10336): mention to pre-build misskey-js

---
 CONTRIBUTING.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bcd62f9cb9..4e8a09f814 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -210,6 +210,8 @@ Misskey uses [Storybook](https://storybook.js.org/) for UI development.
 ### Setup
 
 ```bash
+cd path/to/packages/misskey-js
+pnpm build
 cd path/to/packages/frontend
 pnpm tsc -p .storybook && (node .storybook/generate.js & node .storybook/preload-locale.js & node .storybook/preload-theme.js)
 ```

From 98fd6b5879b8b72fc22d86a3a894ff71c43f44f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 31 Mar 2023 01:01:53 +0900
Subject: [PATCH 31/99] build(#10336): write stories for `MkAcct`

---
 packages/frontend/.storybook/fakes.ts         |  54 ++++++++
 packages/frontend/.storybook/main.ts          |   3 -
 packages/frontend/package.json                |   2 +-
 .../components/global/MkAcct.stories.impl.ts  |  40 ++++++
 .../src/components/global/MkAcct.stories.ts   |  20 ++-
 .../frontend/src/components/global/MkAcct.vue |   5 +-
 .../global/MkAvatar.stories.impl.ts           |  11 +-
 .../src/components/global/MkAvatar.stories.ts |  12 +-
 pnpm-lock.yaml                                | 121 +-----------------
 9 files changed, 128 insertions(+), 140 deletions(-)
 create mode 100644 packages/frontend/.storybook/fakes.ts
 create mode 100644 packages/frontend/src/components/global/MkAcct.stories.impl.ts

diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts
new file mode 100644
index 0000000000..e3146ecced
--- /dev/null
+++ b/packages/frontend/.storybook/fakes.ts
@@ -0,0 +1,54 @@
+import type { entities } from 'misskey-js'
+
+export const userDetailed = {
+	id: 'someuserid',
+	username: 'miskist',
+	host: null,
+	name: 'Misskey User',
+	onlineStatus: 'unknown',
+	avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+	avatarBlurhash: 'eQFRshof5NWBRi},juayfPju53WB?0ofs;s*a{ofjuay^SoMEJR%ay',
+	emojis: [],
+	bannerBlurhash: 'eQA^IW^-MH8w9tE8I=S^o{$*R4RikXtSxutRozjEnNR.RQadoyozog',
+	bannerColor: '#000000',
+	bannerUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+	birthday: '2014-06-20',
+	createdAt: '2016-12-28T22:49:51.000Z',
+	description: 'I am a cool user!',
+	ffVisibility: 'public',
+	fields: [
+		{
+			name: 'Website',
+			value: 'https://misskey-hub.net',
+		},
+	],
+	followersCount: 1024,
+	followingCount: 16,
+	hasPendingFollowRequestFromYou: false,
+	hasPendingFollowRequestToYou: false,
+	isAdmin: false,
+	isBlocked: false,
+	isBlocking: false,
+	isBot: false,
+	isCat: false,
+	isFollowed: false,
+	isFollowing: false,
+	isLocked: false,
+	isModerator: false,
+	isMuted: false,
+	isSilenced: false,
+	isSuspended: false,
+	lang: 'en',
+	location: 'Fediverse',
+	notesCount: 65536,
+	pinnedNoteIds: [],
+	pinnedNotes: [],
+	pinnedPage: null,
+	pinnedPageId: null,
+	publicReactions: false,
+	securityKeys: false,
+	twoFactorEnabled: false,
+	updatedAt: null,
+	uri: null,
+	url: null,
+} satisfies entities.UserDetailed
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index b6b7a62726..eebaabe325 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -21,9 +21,6 @@ const config = {
 	core: {
 		disableTelemetry: true,
 	},
-	features: {
-		interactionsDebugger: true,
-	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
 			plugins: [
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 3d1a808538..a22870b3ee 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -76,7 +76,7 @@
 		"@storybook/addon-interactions": "7.0.0-rc.10",
 		"@storybook/addon-links": "7.0.0-rc.10",
 		"@storybook/addon-storysource": "7.0.0-rc.10",
-		"@storybook/addons": "7.0.0-rc.5",
+		"@storybook/addons": "7.0.0-rc.10",
 		"@storybook/blocks": "7.0.0-rc.10",
 		"@storybook/core-events": "7.0.0-rc.10",
 		"@storybook/jest": "0.0.10",
diff --git a/packages/frontend/src/components/global/MkAcct.stories.impl.ts b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
new file mode 100644
index 0000000000..3fce64c51d
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
@@ -0,0 +1,40 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkAcct from './MkAcct.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkAcct,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAcct v-bind="props" />',
+		};
+	},
+	args: {
+		user: userDetailed,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAcct>;
+export const Detail = {
+	...Default,
+	args: {
+		...Default.args,
+		detail: true,
+	},
+} satisfies StoryObj<typeof MkAcct>;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index 90f66bc182..adac7e0c3e 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -1,11 +1,16 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAcct from './MkAcct.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkAcct',
 	component: MkAcct,
 } satisfies Meta<typeof MkAcct>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkAcct from './MkAcct.vue';
 export const Default = {
 	render(args) {
 		return {
@@ -27,8 +32,17 @@ export const Default = {
 			template: '<MkAcct v-bind="props" />',
 		};
 	},
+	args: {
+		user: userDetailed,
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkAcct>;
-export default meta;
+export const Detail = {
+	...Default,
+	args: {
+		...Default.args,
+		detail: true,
+	},
+} satisfies StoryObj<typeof MkAcct>;
diff --git a/packages/frontend/src/components/global/MkAcct.vue b/packages/frontend/src/components/global/MkAcct.vue
index 2a43ded9e1..6d68072c07 100644
--- a/packages/frontend/src/components/global/MkAcct.vue
+++ b/packages/frontend/src/components/global/MkAcct.vue
@@ -1,7 +1,7 @@
 <template>
 <span>
 	<span>@{{ user.username }}</span>
-	<span v-if="user.host || detail || $store.state.showFullAcct" style="opacity: 0.5;">@{{ user.host || host }}</span>
+	<span v-if="user.host || detail || showFullAcct" style="opacity: 0.5;">@{{ user.host || host }}</span>
 </span>
 </template>
 
@@ -9,6 +9,7 @@
 import * as misskey from 'misskey-js';
 import { toUnicode } from 'punycode/';
 import { host as hostRaw } from '@/config';
+import { defaultStore } from '@/store';
 
 defineProps<{
 	user: misskey.entities.UserDetailed;
@@ -16,5 +17,5 @@ defineProps<{
 }>();
 
 const host = toUnicode(hostRaw);
+const showFullAcct = $ref(defaultStore.state.showFullAcct);
 </script>
-
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index 6de5768af8..e92db93bf5 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -1,6 +1,7 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
 import MkAvatar from './MkAvatar.vue';
 export const Default = {
 	render(args) {
@@ -25,9 +26,7 @@ export const Default = {
 	},
 	args: {
 		size: 48,
-		user: {
-			avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
-		},
+		user: userDetailed,
 	},
 	decorators: [
 		(Story, context) => ({
@@ -45,10 +44,6 @@ export const ProfilePage = {
 		...Default.args,
 		size: 120,
 		indicator: true,
-		user: {
-			...Default.args.user,
-			onlineStatus: 'unknown',
-		},
 	},
 };
 export const ProfilePageCat = {
@@ -56,7 +51,7 @@ export const ProfilePageCat = {
 	args: {
 		...ProfilePage.args,
 		user: {
-			...ProfilePage.args.user,
+			...userDetailed,
 			isCat: true,
 		},
 	},
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 4d819982ee..20ae0b23b4 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -9,6 +9,7 @@ export default meta;
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
 import MkAvatar from './MkAvatar.vue';
 export const Default = {
 	render(args) {
@@ -33,10 +34,7 @@ export const Default = {
 	},
 	args: {
 		size: 48,
-		user: {
-			avatarUrl:
-				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
-		},
+		user: userDetailed,
 	},
 	decorators: [
 		(Story, context) => ({
@@ -54,10 +52,6 @@ export const ProfilePage = {
 		...Default.args,
 		size: 120,
 		indicator: true,
-		user: {
-			...Default.args.user,
-			onlineStatus: 'unknown',
-		},
 	},
 };
 export const ProfilePageCat = {
@@ -65,7 +59,7 @@ export const ProfilePageCat = {
 	args: {
 		...ProfilePage.args,
 		user: {
-			...ProfilePage.args.user,
+			...userDetailed,
 			isCat: true,
 		},
 	},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6899bb0e13..79750eef2b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -779,8 +779,8 @@ importers:
         specifier: 7.0.0-rc.10
         version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addons':
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/blocks':
         specifier: 7.0.0-rc.10
         version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
@@ -5064,15 +5064,15 @@ packages:
       regenerator-runtime: 0.13.11
     dev: true
 
-  /@storybook/addons@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-KDSoMW/y39eAMbeSmwmYEiYu3KomabJCYdsfmD65i0DqwuOFrkG3im3wPkF3F88rZDuzWzVZMl3Z15n56uVXKA==}
+  /@storybook/addons@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-3funGKp6w/uqrTl/0Vsz/oTMmOziSl+JEotjf0G5SBJfaa6gBaz2feddUcRl47I9MNfRYRV01m5a4bCR1QJnwQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/manager-api': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
@@ -5216,17 +5216,6 @@ packages:
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-postmessage@7.0.0-rc.5:
-    resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/global': 5.0.0
-      qs: 6.11.1
-      telejson: 7.0.4
-    dev: true
-
   /@storybook/channel-websocket@7.0.0-rc.10:
     resolution: {integrity: sha512-18xZYdV3CqiGpxIF8os5Vm+T76p+5lx0t8fRTpiPuOfuPF72QYdqmUuXF/tLH4hzj/qwPp56y6Nb7My7pcGPug==}
     dependencies:
@@ -5248,10 +5237,6 @@ packages:
     resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==}
     dev: true
 
-  /@storybook/channels@7.0.0-rc.5:
-    resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
-    dev: true
-
   /@storybook/cli@7.0.0-rc.10:
     resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==}
     hasBin: true
@@ -5314,12 +5299,6 @@ packages:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/client-logger@7.0.0-rc.5:
-    resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
-    dependencies:
-      '@storybook/global': 5.0.0
-    dev: true
-
   /@storybook/codemod@7.0.0-rc.10:
     resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==}
     dependencies:
@@ -5401,10 +5380,6 @@ packages:
     resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==}
     dev: true
 
-  /@storybook/core-events@7.0.0-rc.5:
-    resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
-    dev: true
-
   /@storybook/core-server@7.0.0-rc.10:
     resolution: {integrity: sha512-S+E8WRU4vik+lNbXukVSsZPrRgsujFpy9RvgLckH/QI4T2SYe94mAuKGVkW/720jBD4DNss+IUGQQvkafLPl5A==}
     dependencies:
@@ -5582,31 +5557,6 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/manager-api@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-MsNj/cPIOlL7HJ8ReYahUvJVfvZDtNfacUYSFuQjQwdnp0u3pbC5mGZPd32tAGj7lLaLzcqqo1yR+NAgwpZUBw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/router': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/theming': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.5
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      semver: 7.3.8
-      store2: 2.14.2
-      telejson: 7.0.4
-      ts-dedent: 2.2.0
-    dev: true
-
   /@storybook/manager@7.0.0-rc.10:
     resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==}
     dev: true
@@ -5648,27 +5598,6 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview-api@7.0.0-rc.5:
-    resolution: {integrity: sha512-cuyFIT/4MXfoqN6d5AK/KH7Yp0cifuOmcBj4+9xrmrPK47m4F8eHZ/mX6rXE6rVFNsWv65Al5An6WCM1CDImJg==}
-    dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.5
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.10
-      '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.5
-      '@types/qs': 6.9.7
-      dequal: 2.0.3
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      slash: 3.0.0
-      synchronous-promise: 2.0.17
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
-    dev: true
-
   /@storybook/preview@7.0.0-rc.10:
     resolution: {integrity: sha512-885uU20XL54s31lAyIu5MaiD4t23gJ0X/JEMz2/LTvfluYDtQg66gXhMibKqEPgMHcPOND5ZrGoYPdaLDG20Dw==}
     dev: true
@@ -5777,19 +5706,6 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/router@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-s23O2OOQ4+CvySk3QC/PXhDJChc4jjyQu/h3gLMKF7bfWx0bd5KR4LnP3rCKLIMkxoJYFPUayPMgwEEeN/ENSw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-    dev: true
-
   /@storybook/semver@7.3.2:
     resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
     engines: {node: '>=10'}
@@ -5869,20 +5785,6 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/theming@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-OzwybDA2+4FWg85tcTNQkVI0JnHkwCRG9HM1qx9hOZJHNRfxmJFjJePOnBoXM6CjVlz0S1PJUwCmMHNH8OTvEw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/global': 5.0.0
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-    dev: true
-
   /@storybook/types@7.0.0-rc.10:
     resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==}
     dependencies:
@@ -5892,15 +5794,6 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/types@7.0.0-rc.5:
-    resolution: {integrity: sha512-gLKUY7EfPYenz0Y1jw90AUAUlKTHOj9p7J3d8GcI5x5buHdU+M7Q1jotPWzDwRFI24y3Ob31oyCBhysIw8S2Aw==}
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@types/babel__core': 7.20.0
-      '@types/express': 4.17.17
-      file-system-cache: 2.0.2
-    dev: true
-
   /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47):
     resolution: {integrity: sha512-gNUlREXPv9C61VqmLW9MmlAFAgki9o60+CKwMDLp3Ey/WxEwH+JGOmhc5ne6H4du9FZLnDbBa3zphkS0Ve7qWw==}
     engines: {node: ^14.18 || >=16}

From 70fc25aac17ffcce7fd58738eadbfa5b64dec30c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 31 Mar 2023 15:52:39 +0900
Subject: [PATCH 32/99] build(#10336): write stories for `MkAd`

---
 .../src/components/global/MkA.stories.impl.ts |   2 +-
 .../src/components/global/MkA.stories.ts      |   2 +-
 .../components/global/MkAcct.stories.impl.ts  |   1 -
 .../src/components/global/MkAcct.stories.ts   |   1 -
 .../components/global/MkAd.stories.impl.ts    | 117 ++++++++++++++++++
 .../src/components/global/MkAd.stories.ts     |  99 ++++++++++++++-
 .../frontend/src/components/global/MkAd.vue   |   5 +-
 .../global/MkAvatar.stories.impl.ts           |   7 +-
 .../src/components/global/MkAvatar.stories.ts |   7 +-
 9 files changed, 223 insertions(+), 18 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkAd.stories.impl.ts

diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
index 3afec7f81a..780aa55376 100644
--- a/packages/frontend/src/components/global/MkA.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -2,8 +2,8 @@
 import { expect } from '@storybook/jest';
 import { userEvent, within } from '@storybook/testing-library';
 import { StoryObj } from '@storybook/vue3';
-import MkA from './MkA.vue';
 import { tick } from '@/scripts/test-utils';
+import MkA from './MkA.vue';
 export const Default = {
 	render(args) {
 		return {
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
index 5bb6b3b5a8..cdc5d13f6a 100644
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ b/packages/frontend/src/components/global/MkA.stories.ts
@@ -10,8 +10,8 @@ export default meta;
 import { expect } from '@storybook/jest';
 import { userEvent, within } from '@storybook/testing-library';
 import { StoryObj } from '@storybook/vue3';
-import MkA from './MkA.vue';
 import { tick } from '@/scripts/test-utils';
+import MkA from './MkA.vue';
 export const Default = {
 	render(args) {
 		return {
diff --git a/packages/frontend/src/components/global/MkAcct.stories.impl.ts b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
index 3fce64c51d..61bf06f8a5 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
@@ -1,5 +1,4 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import { userDetailed } from '../../../.storybook/fakes';
 import MkAcct from './MkAcct.vue';
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
index adac7e0c3e..95b1286c75 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.ts
@@ -7,7 +7,6 @@ const meta = {
 } satisfies Meta<typeof MkAcct>;
 export default meta;
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import { userDetailed } from '../../../.storybook/fakes';
 import MkAcct from './MkAcct.vue';
diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
new file mode 100644
index 0000000000..c5c5354222
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -0,0 +1,117 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import MkAd from './MkAd.vue';
+const common = {
+	render(args) {
+		return {
+			components: {
+				MkAd,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkAd v-bind="props" />',
+		};
+	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		const img = within(a).getByRole('img');
+		await expect(img).toBeInTheDocument();
+		let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(1);
+		const i = buttons[0];
+		await expect(i).toBeInTheDocument();
+		await userEvent.click(i);
+		await expect(a).not.toBeInTheDocument();
+		await expect(i).not.toBeInTheDocument();
+		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(args._hasReduce ? 2 : 1);
+		const reduce = args._hasReduce ? buttons[0] : null;
+		const back = buttons[args._hasReduce ? 1 : 0];
+		if (reduce) {
+			await expect(reduce).toBeInTheDocument();
+		}
+		await expect(back).toBeInTheDocument();
+		await userEvent.click(back);
+		if (reduce) {
+			await expect(reduce).not.toBeInTheDocument();
+		}
+		await expect(back).not.toBeInTheDocument();
+		const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(aAgain).toBeInTheDocument();
+		const imgAgain = within(aAgain).getByRole('img');
+		await expect(imgAgain).toBeInTheDocument();
+	},
+	args: {
+		prefer: [],
+		specify: {
+			id: 'someadid',
+			radio: 1,
+			url: '#test',
+		},
+		_hasReduce: true,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAd>;
+export const Square = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'square',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+		},
+	},
+};
+export const Horizontal = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+};
+export const HorizontalBig = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal-big',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+};
+export const ZeroRatio = {
+	...Square,
+	args: {
+		...Square.args,
+		specify: {
+			...Square.args.specify,
+			ratio: 0,
+		},
+		_hasReduce: false,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index 9f4dc320ba..29b3fd53eb 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -1,12 +1,17 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAd from './MkAd.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkAd',
 	component: MkAd,
 } satisfies Meta<typeof MkAd>;
-export const Default = {
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import MkAd from './MkAd.vue';
+const common = {
 	render(args) {
 		return {
 			components: {
@@ -27,8 +32,94 @@ export const Default = {
 			template: '<MkAd v-bind="props" />',
 		};
 	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		const img = within(a).getByRole('img');
+		await expect(img).toBeInTheDocument();
+		let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(1);
+		const i = buttons[0];
+		await expect(i).toBeInTheDocument();
+		await userEvent.click(i);
+		await expect(a).not.toBeInTheDocument();
+		await expect(i).not.toBeInTheDocument();
+		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(args._hasReduce ? 2 : 1);
+		const reduce = args._hasReduce ? buttons[0] : null;
+		const back = buttons[args._hasReduce ? 1 : 0];
+		if (reduce) {
+			await expect(reduce).toBeInTheDocument();
+		}
+		await expect(back).toBeInTheDocument();
+		await userEvent.click(back);
+		if (reduce) {
+			await expect(reduce).not.toBeInTheDocument();
+		}
+		await expect(back).not.toBeInTheDocument();
+		const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(aAgain).toBeInTheDocument();
+		const imgAgain = within(aAgain).getByRole('img');
+		await expect(imgAgain).toBeInTheDocument();
+	},
+	args: {
+		prefer: [],
+		specify: {
+			id: 'someadid',
+			radio: 1,
+			url: '#test',
+		},
+		_hasReduce: true,
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkAd>;
-export default meta;
+export const Square = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'square',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+		},
+	},
+};
+export const Horizontal = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+};
+export const HorizontalBig = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal-big',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+};
+export const ZeroRatio = {
+	...Square,
+	args: {
+		...Square.args,
+		specify: {
+			...Square.args.specify,
+			ratio: 0,
+		},
+		_hasReduce: false,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkAd.vue b/packages/frontend/src/components/global/MkAd.vue
index e0304c8bc5..998eb1ef38 100644
--- a/packages/frontend/src/components/global/MkAd.vue
+++ b/packages/frontend/src/components/global/MkAd.vue
@@ -10,8 +10,8 @@
 		<div :class="$style.menuContainer">
 			<div>Ads by {{ host }}</div>
 			<!--<MkButton class="button" primary>{{ $ts._ad.like }}</MkButton>-->
-			<MkButton v-if="chosen.ratio !== 0" :class="$style.menuButton" @click="reduceFrequency">{{ $ts._ad.reduceFrequencyOfThisAd }}</MkButton>
-			<button class="_textButton" @click="toggleMenu">{{ $ts._ad.back }}</button>
+			<MkButton v-if="chosen.ratio !== 0" :class="$style.menuButton" @click="reduceFrequency">{{ i18n.ts._ad.reduceFrequencyOfThisAd }}</MkButton>
+			<button class="_textButton" @click="toggleMenu">{{ i18n.ts._ad.back }}</button>
 		</div>
 	</div>
 </div>
@@ -20,6 +20,7 @@
 
 <script lang="ts" setup>
 import { ref } from 'vue';
+import { i18n } from '@/i18n';
 import { instance } from '@/instance';
 import { host } from '@/config';
 import MkButton from '@/components/MkButton.vue';
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index e92db93bf5..2e7ba29d12 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -3,7 +3,7 @@
 import { StoryObj } from '@storybook/vue3';
 import { userDetailed } from '../../../.storybook/fakes';
 import MkAvatar from './MkAvatar.vue';
-export const Default = {
+const common = {
 	render(args) {
 		return {
 			components: {
@@ -25,7 +25,6 @@ export const Default = {
 		};
 	},
 	args: {
-		size: 48,
 		user: userDetailed,
 	},
 	decorators: [
@@ -39,9 +38,9 @@ export const Default = {
 	},
 } satisfies StoryObj<typeof MkAvatar>;
 export const ProfilePage = {
-	...Default,
+	...common,
 	args: {
-		...Default.args,
+		...common.args,
 		size: 120,
 		indicator: true,
 	},
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
index 20ae0b23b4..51265720b8 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.ts
@@ -11,7 +11,7 @@ export default meta;
 import { StoryObj } from '@storybook/vue3';
 import { userDetailed } from '../../../.storybook/fakes';
 import MkAvatar from './MkAvatar.vue';
-export const Default = {
+const common = {
 	render(args) {
 		return {
 			components: {
@@ -33,7 +33,6 @@ export const Default = {
 		};
 	},
 	args: {
-		size: 48,
 		user: userDetailed,
 	},
 	decorators: [
@@ -47,9 +46,9 @@ export const Default = {
 	},
 } satisfies StoryObj<typeof MkAvatar>;
 export const ProfilePage = {
-	...Default,
+	...common,
 	args: {
-		...Default.args,
+		...common.args,
 		size: 120,
 		indicator: true,
 	},

From 558d73b21a91fc19c73682394f0f87cd6ca228ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 31 Mar 2023 16:34:54 +0900
Subject: [PATCH 33/99] build(#10336): fix missing type definition

---
 packages/frontend/package.json                      |  2 ++
 .../src/components/global/MkAd.stories.impl.ts      | 13 ++++++++-----
 .../frontend/src/components/global/MkAd.stories.ts  |  5 +++++
 packages/frontend/src/scripts/test-utils.ts         |  2 ++
 pnpm-lock.yaml                                      | 11 +++++++++--
 5 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index a22870b3ee..0bc553ca13 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -89,6 +89,7 @@
 		"@storybook/types": "7.0.0-rc.10",
 		"@storybook/vue3": "7.0.0-rc.10",
 		"@storybook/vue3-vite": "7.0.0-rc.10",
+		"@testing-library/jest-dom": "^5.16.5",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
 		"@types/estree": "^1.0.0",
@@ -99,6 +100,7 @@
 		"@types/punycode": "2.1.0",
 		"@types/sanitize-html": "2.9.0",
 		"@types/seedrandom": "3.0.5",
+		"@types/testing-library__jest-dom": "^5.14.5",
 		"@types/throttle-debounce": "5.0.0",
 		"@types/tinycolor2": "1.4.3",
 		"@types/uuid": "9.0.1",
diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
index c5c5354222..767f8c691b 100644
--- a/packages/frontend/src/components/global/MkAd.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -2,6 +2,7 @@
 import { expect } from '@storybook/jest';
 import { userEvent, within } from '@storybook/testing-library';
 import { StoryObj } from '@storybook/vue3';
+import { i18n } from '@/i18n';
 import MkAd from './MkAd.vue';
 const common = {
 	render(args) {
@@ -38,13 +39,15 @@ const common = {
 		await expect(a).not.toBeInTheDocument();
 		await expect(i).not.toBeInTheDocument();
 		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
-		await expect(buttons).toHaveLength(args._hasReduce ? 2 : 1);
-		const reduce = args._hasReduce ? buttons[0] : null;
-		const back = buttons[args._hasReduce ? 1 : 0];
+		await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
+		const reduce = args.__hasReduce ? buttons[0] : null;
+		const back = buttons[args.__hasReduce ? 1 : 0];
 		if (reduce) {
 			await expect(reduce).toBeInTheDocument();
+			await expect(reduce.textContent).toBe(i18n.ts._ad.reduceFrequencyOfThisAd);
 		}
 		await expect(back).toBeInTheDocument();
+		await expect(back.textContent).toBe(i18n.ts._ad.back);
 		await userEvent.click(back);
 		if (reduce) {
 			await expect(reduce).not.toBeInTheDocument();
@@ -62,7 +65,7 @@ const common = {
 			radio: 1,
 			url: '#test',
 		},
-		_hasReduce: true,
+		__hasReduce: true,
 	},
 	parameters: {
 		layout: 'centered',
@@ -112,6 +115,6 @@ export const ZeroRatio = {
 			...Square.args.specify,
 			ratio: 0,
 		},
-		_hasReduce: false,
+		__hasReduce: false,
 	},
 };
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index 29b3fd53eb..23afa7c366 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -10,6 +10,7 @@ export default meta;
 import { expect } from '@storybook/jest';
 import { userEvent, within } from '@storybook/testing-library';
 import { StoryObj } from '@storybook/vue3';
+import { i18n } from '@/i18n';
 import MkAd from './MkAd.vue';
 const common = {
 	render(args) {
@@ -51,8 +52,12 @@ const common = {
 		const back = buttons[args._hasReduce ? 1 : 0];
 		if (reduce) {
 			await expect(reduce).toBeInTheDocument();
+			await expect(reduce.textContent).toBe(
+				i18n.ts._ad.reduceFrequencyOfThisAd
+			);
 		}
 		await expect(back).toBeInTheDocument();
+		await expect(back.textContent).toBe(i18n.ts._ad.back);
 		await userEvent.click(back);
 		if (reduce) {
 			await expect(reduce).not.toBeInTheDocument();
diff --git a/packages/frontend/src/scripts/test-utils.ts b/packages/frontend/src/scripts/test-utils.ts
index c526fc156a..3e018f2d7e 100644
--- a/packages/frontend/src/scripts/test-utils.ts
+++ b/packages/frontend/src/scripts/test-utils.ts
@@ -1,3 +1,5 @@
+/// <reference types="@testing-library/jest-dom"/>
+
 export async function tick(): Promise<void> {
 	// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 	await new Promise((globalThis.requestIdleCallback ?? setTimeout) as never);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 79750eef2b..852fc9496a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -817,6 +817,9 @@ importers:
       '@storybook/vue3-vite':
         specifier: 7.0.0-rc.10
         version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47)
+      '@testing-library/jest-dom':
+        specifier: ^5.16.5
+        version: 5.16.5
       '@testing-library/vue':
         specifier: ^6.6.1
         version: 6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47)
@@ -847,6 +850,9 @@ importers:
       '@types/seedrandom':
         specifier: 3.0.5
         version: 3.0.5
+      '@types/testing-library__jest-dom':
+        specifier: ^5.14.5
+        version: 5.14.5
       '@types/throttle-debounce':
         specifier: 5.0.0
         version: 5.0.0
@@ -3927,7 +3933,7 @@ packages:
       chalk: 4.1.2
       ci-info: 3.7.1
       exit: 0.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-changed-files: 29.5.0
       jest-config: 29.5.0(@types/node@18.15.11)
       jest-haste-map: 29.5.0
@@ -11806,6 +11812,7 @@ packages:
 
   /graceful-fs@4.2.10:
     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+    dev: false
 
   /graceful-fs@4.2.11:
     resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -13109,7 +13116,7 @@ packages:
       '@jest/types': 29.5.0
       chalk: 4.1.2
       exit: 0.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       import-local: 3.1.0
       jest-config: 29.5.0(@types/node@18.15.11)
       jest-util: 29.5.0

From 85f50f38756c627d06ed15f464f469c74c9deedb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 31 Mar 2023 16:36:43 +0900
Subject: [PATCH 34/99] build(#10336): use `toHaveTextContent`

---
 packages/frontend/src/components/global/MkAd.stories.impl.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
index 767f8c691b..436744b4f6 100644
--- a/packages/frontend/src/components/global/MkAd.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -44,10 +44,10 @@ const common = {
 		const back = buttons[args.__hasReduce ? 1 : 0];
 		if (reduce) {
 			await expect(reduce).toBeInTheDocument();
-			await expect(reduce.textContent).toBe(i18n.ts._ad.reduceFrequencyOfThisAd);
+			await expect(reduce).toHaveTextContent(i18n.ts._ad.reduceFrequencyOfThisAd);
 		}
 		await expect(back).toBeInTheDocument();
-		await expect(back.textContent).toBe(i18n.ts._ad.back);
+		await expect(back).toHaveTextContent(i18n.ts._ad.back);
 		await userEvent.click(back);
 		if (reduce) {
 			await expect(reduce).not.toBeInTheDocument();

From 671ce6a5319c1e62846a4531fc3327db0663f2ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 04:20:38 +0900
Subject: [PATCH 35/99] build(#10336): write some stories

---
 packages/frontend/.storybook/generate.tsx     | 33 +++++++++++++
 .../src/components/global/MkAd.stories.ts     | 14 +++---
 .../global/MkCustomEmoji.stories.impl.ts      | 46 +++++++++++++++++++
 .../global/MkCustomEmoji.stories.ts           | 26 +++++++++--
 .../components/global/MkEmoji.stories.impl.ts | 32 +++++++++++++
 .../src/components/global/MkEmoji.stories.ts  | 12 +++--
 .../components/global/MkError.stories.meta.ts |  5 ++
 .../src/components/global/MkError.stories.ts  |  2 +
 .../src/components/global/MkError.vue         |  4 +-
 9 files changed, 160 insertions(+), 14 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkEmoji.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkError.stories.meta.ts

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index b167f232e3..f7d0f6fc08 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -100,8 +100,10 @@ declare global {
 function toStories(component: string): string {
 	const msw = `${component.slice(0, -'.vue'.length)}.msw`;
 	const implStories = `${component.slice(0, -'.vue'.length)}.stories.impl`;
+	const metaStories = `${component.slice(0, -'.vue'.length)}.stories.meta`;
 	const hasMsw = existsSync(`${msw}.ts`);
 	const hasImplStories = existsSync(`${implStories}.ts`);
+	const hasMetaStories = existsSync(`${metaStories}.ts`);
 	const base = basename(component);
 	const dir = dirname(component);
 	const literal = (
@@ -212,6 +214,24 @@ function toStories(component: string): string {
 								/>
 							) as estree.ImportDeclaration,
 					  ]),
+				...(hasMetaStories
+					? [
+							(
+								<import-declaration
+									source={
+										(<literal value={`./${basename(metaStories)}`} />) as estree.Literal
+									}
+									specifiers={[
+										(
+											<import-namespace-specifier
+												local={(<identifier name='storiesMeta' />) as estree.Identifier}
+											/>
+										) as estree.ImportNamespaceSpecifier,
+									]}
+								/>
+							) as estree.ImportDeclaration,
+						]
+					: []),
 				(
 					<variable-declaration
 						kind={'const' as const}
@@ -248,6 +268,19 @@ function toStories(component: string): string {
 																		kind={'init' as const}
 																	/>
 																) as estree.Property,
+																...(hasMetaStories
+																	? [
+																			(
+																				<spread-element
+																					argument={
+																						(
+																							<identifier name='storiesMeta' />
+																						) as estree.Identifier
+																					}
+																				/>
+																			) as estree.SpreadElement,
+																		]
+																	: [])
 															]}
 														/>
 													) as estree.ObjectExpression
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
index 23afa7c366..d852b911ee 100644
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.ts
@@ -47,17 +47,17 @@ const common = {
 		await expect(a).not.toBeInTheDocument();
 		await expect(i).not.toBeInTheDocument();
 		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
-		await expect(buttons).toHaveLength(args._hasReduce ? 2 : 1);
-		const reduce = args._hasReduce ? buttons[0] : null;
-		const back = buttons[args._hasReduce ? 1 : 0];
+		await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
+		const reduce = args.__hasReduce ? buttons[0] : null;
+		const back = buttons[args.__hasReduce ? 1 : 0];
 		if (reduce) {
 			await expect(reduce).toBeInTheDocument();
-			await expect(reduce.textContent).toBe(
+			await expect(reduce).toHaveTextContent(
 				i18n.ts._ad.reduceFrequencyOfThisAd
 			);
 		}
 		await expect(back).toBeInTheDocument();
-		await expect(back.textContent).toBe(i18n.ts._ad.back);
+		await expect(back).toHaveTextContent(i18n.ts._ad.back);
 		await userEvent.click(back);
 		if (reduce) {
 			await expect(reduce).not.toBeInTheDocument();
@@ -75,7 +75,7 @@ const common = {
 			radio: 1,
 			url: '#test',
 		},
-		_hasReduce: true,
+		__hasReduce: true,
 	},
 	parameters: {
 		layout: 'centered',
@@ -125,6 +125,6 @@ export const ZeroRatio = {
 			...Square.args.specify,
 			ratio: 0,
 		},
-		_hasReduce: false,
+		__hasReduce: false,
 	},
 };
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
new file mode 100644
index 0000000000..b31b303e7f
--- /dev/null
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
@@ -0,0 +1,46 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkCustomEmoji from './MkCustomEmoji.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkCustomEmoji,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkCustomEmoji v-bind="props" />',
+		};
+	},
+	args: {
+		name: 'mi',
+		url: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkCustomEmoji>;
+export const Normal = {
+	...Default,
+	args: {
+		...Default.args,
+		normal: true,
+	},
+};
+export const Missing = {
+	...Default,
+	args: {
+		name: Default.args.name,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
index 76c70b9aba..5624eef5b1 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
@@ -1,11 +1,15 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCustomEmoji from './MkCustomEmoji.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkCustomEmoji',
 	component: MkCustomEmoji,
 } satisfies Meta<typeof MkCustomEmoji>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkCustomEmoji from './MkCustomEmoji.vue';
 export const Default = {
 	render(args) {
 		return {
@@ -27,8 +31,24 @@ export const Default = {
 			template: '<MkCustomEmoji v-bind="props" />',
 		};
 	},
+	args: {
+		name: 'mi',
+		url: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkCustomEmoji>;
-export default meta;
+export const Normal = {
+	...Default,
+	args: {
+		...Default.args,
+		normal: true,
+	},
+};
+export const Missing = {
+	...Default,
+	args: {
+		name: Default.args.name,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
new file mode 100644
index 0000000000..53adf646ff
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkEmoji from './MkEmoji.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkEmoji,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkEmoji v-bind="props" />',
+		};
+	},
+	args: {
+		emoji: '❤',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkEmoji>;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
index cca084e2db..e3e81a76ab 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.ts
@@ -1,11 +1,15 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEmoji from './MkEmoji.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkEmoji',
 	component: MkEmoji,
 } satisfies Meta<typeof MkEmoji>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkEmoji from './MkEmoji.vue';
 export const Default = {
 	render(args) {
 		return {
@@ -27,8 +31,10 @@ export const Default = {
 			template: '<MkEmoji v-bind="props" />',
 		};
 	},
+	args: {
+		emoji: '❤',
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkEmoji>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkError.stories.meta.ts b/packages/frontend/src/components/global/MkError.stories.meta.ts
new file mode 100644
index 0000000000..7c94421963
--- /dev/null
+++ b/packages/frontend/src/components/global/MkError.stories.meta.ts
@@ -0,0 +1,5 @@
+export const argTypes = {
+	retry: {
+		action: 'retry',
+	},
+}
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
index ce7f40f56d..274117f950 100644
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ b/packages/frontend/src/components/global/MkError.stories.ts
@@ -2,9 +2,11 @@
 /* eslint-disable import/no-default-export */
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkError from './MkError.vue';
+import * as storiesMeta from './MkError.stories.meta';
 const meta = {
 	title: 'components/global/MkError',
 	component: MkError,
+	...storiesMeta,
 } satisfies Meta<typeof MkError>;
 export const Default = {
 	render(args) {
diff --git a/packages/frontend/src/components/global/MkError.vue b/packages/frontend/src/components/global/MkError.vue
index 7390a9dfb9..bb3dc82cb4 100644
--- a/packages/frontend/src/components/global/MkError.vue
+++ b/packages/frontend/src/components/global/MkError.vue
@@ -1,5 +1,5 @@
 <template>
-<Transition :name="$store.state.animation ? '_transition_zoom' : ''" appear>
+<Transition :name="animation ? '_transition_zoom' : ''" appear>
 	<div :class="$style.root">
 		<img :class="$style.img" src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/>
 		<p :class="$style.text"><i class="ti ti-alert-triangle"></i> {{ i18n.ts.somethingHappened }}</p>
@@ -11,7 +11,9 @@
 <script lang="ts" setup>
 import MkButton from '@/components/MkButton.vue';
 import { i18n } from '@/i18n';
+import { defaultStore } from '@/store';
 
+const animation = $ref(defaultStore.reactiveState.animation);
 const emit = defineEmits<{
 	(ev: 'retry'): void;
 }>();

From 5605b03ce41e57e910048ff332cacb9d87a7fd39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 12:18:42 +0900
Subject: [PATCH 36/99] build(#10336): hide internal args

---
 packages/frontend/.storybook/preview.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 85910f8ed0..1543552980 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -97,6 +97,9 @@ const preview = {
 		},
 	],
 	parameters: {
+		controls: {
+			exclude: /^__/,
+		},
 		msw: {
 			handlers: commonHandlers,
 		},

From a47f4b89557f15d1ff394a0db853f9c778a3b25c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 13:45:31 +0900
Subject: [PATCH 37/99] build(#10336): generate `components/global` stories
 only

---
 packages/frontend/.storybook/generate.tsx     |  3 +-
 .../src/components/MkAbuseReport.stories.ts   | 34 -----------
 .../components/MkAbuseReportWindow.stories.ts | 34 -----------
 .../src/components/MkAchievements.stories.ts  | 34 -----------
 .../src/components/MkAnalogClock.stories.ts   | 23 --------
 .../frontend/src/components/MkAsUi.stories.ts | 34 -----------
 .../src/components/MkAutocomplete.stories.ts  | 34 -----------
 .../src/components/MkAvatars.stories.ts       | 34 -----------
 .../src/components/MkButton.stories.ts        | 38 ------------
 .../src/components/MkCaptcha.stories.ts       | 10 ----
 .../MkChannelFollowButton.stories.ts          | 34 -----------
 .../components/MkChannelPreview.stories.ts    | 34 -----------
 .../src/components/MkChart.stories.ts         | 34 -----------
 .../src/components/MkChartLegend.stories.ts   | 34 -----------
 .../src/components/MkChartTooltip.stories.ts  | 34 -----------
 .../src/components/MkCheckbox.stories.ts      | 34 -----------
 .../src/components/MkClickerGame.stories.ts   | 34 -----------
 .../src/components/MkClipPreview.stories.ts   | 34 -----------
 .../src/components/MkCode.core.stories.ts     | 34 -----------
 .../frontend/src/components/MkCode.stories.ts | 34 -----------
 .../src/components/MkContainer.stories.ts     | 34 -----------
 .../src/components/MkContextMenu.stories.ts   | 34 -----------
 .../src/components/MkCropperDialog.stories.ts | 34 -----------
 .../src/components/MkCwButton.stories.ts      | 34 -----------
 .../components/MkDateSeparatedList.stories.ts | 34 -----------
 .../src/components/MkDialog.stories.ts        | 34 -----------
 .../src/components/MkDigitalClock.stories.ts  | 34 -----------
 .../src/components/MkDonation.stories.ts      | 34 -----------
 .../src/components/MkDrive.file.stories.ts    | 34 -----------
 .../src/components/MkDrive.folder.stories.ts  | 34 -----------
 .../components/MkDrive.navFolder.stories.ts   | 34 -----------
 .../src/components/MkDrive.stories.ts         | 34 -----------
 .../MkDriveFileThumbnail.stories.ts           | 34 -----------
 .../components/MkDriveSelectDialog.stories.ts | 34 -----------
 .../src/components/MkDriveWindow.stories.ts   | 34 -----------
 .../MkEmojiPicker.section.stories.ts          | 34 -----------
 .../src/components/MkEmojiPicker.stories.ts   | 34 -----------
 .../components/MkEmojiPickerDialog.stories.ts | 34 -----------
 .../components/MkEmojiPickerWindow.stories.ts | 34 -----------
 .../components/MkFeaturedPhotos.stories.ts    | 34 -----------
 .../MkFileCaptionEditWindow.stories.ts        | 34 -----------
 .../components/MkFileListForAdmin.stories.ts  | 34 -----------
 .../src/components/MkFlashPreview.stories.ts  | 34 -----------
 .../components/MkFoldableSection.stories.ts   | 34 -----------
 .../src/components/MkFolder.stories.ts        | 34 -----------
 .../src/components/MkFollowButton.stories.ts  | 34 -----------
 .../components/MkForgotPassword.stories.ts    | 34 -----------
 .../src/components/MkFormDialog.stories.ts    | 34 -----------
 .../MkGalleryPostPreview.stories.ts           | 34 -----------
 .../src/components/MkGoogle.stories.ts        | 34 -----------
 .../src/components/MkHeatmap.stories.ts       | 34 -----------
 .../src/components/MkImageViewer.stories.ts   | 34 -----------
 .../components/MkImgWithBlurhash.stories.ts   | 34 -----------
 .../frontend/src/components/MkInfo.stories.ts | 34 -----------
 .../src/components/MkInput.stories.ts         | 34 -----------
 .../components/MkInstanceCardMini.stories.ts  | 34 -----------
 .../src/components/MkInstanceStats.stories.ts | 34 -----------
 .../components/MkInstanceTicker.stories.ts    | 34 -----------
 .../src/components/MkKeyValue.stories.ts      | 34 -----------
 .../src/components/MkLaunchPad.stories.ts     | 34 -----------
 .../frontend/src/components/MkLink.stories.ts | 34 -----------
 .../src/components/MkMarquee.stories.ts       | 34 -----------
 .../src/components/MkMediaBanner.stories.ts   | 34 -----------
 .../src/components/MkMediaImage.stories.ts    | 34 -----------
 .../src/components/MkMediaList.stories.ts     | 34 -----------
 .../src/components/MkMediaVideo.stories.ts    | 34 -----------
 .../src/components/MkMention.stories.ts       | 34 -----------
 .../src/components/MkMenu.child.stories.ts    | 34 -----------
 .../frontend/src/components/MkMenu.stories.ts | 34 -----------
 .../src/components/MkMiniChart.stories.ts     | 34 -----------
 .../src/components/MkModal.stories.ts         | 34 -----------
 .../components/MkModalPageWindow.stories.ts   | 34 -----------
 .../src/components/MkModalWindow.stories.ts   | 34 -----------
 .../frontend/src/components/MkNote.stories.ts | 34 -----------
 .../src/components/MkNoteDetailed.stories.ts  | 34 -----------
 .../src/components/MkNoteHeader.stories.ts    | 34 -----------
 .../src/components/MkNotePreview.stories.ts   | 34 -----------
 .../src/components/MkNoteSimple.stories.ts    | 34 -----------
 .../src/components/MkNoteSub.stories.ts       | 34 -----------
 .../src/components/MkNotes.stories.ts         | 34 -----------
 .../src/components/MkNotification.stories.ts  | 34 -----------
 .../MkNotificationSettingWindow.stories.ts    | 34 -----------
 .../src/components/MkNotifications.stories.ts | 34 -----------
 .../src/components/MkNumber.stories.ts        | 34 -----------
 .../src/components/MkNumberDiff.stories.ts    | 34 -----------
 .../src/components/MkObjectView.stories.ts    | 34 -----------
 .../components/MkObjectView.value.stories.ts  | 34 -----------
 .../frontend/src/components/MkOmit.stories.ts | 34 -----------
 .../src/components/MkPagePreview.stories.ts   | 34 -----------
 .../src/components/MkPageWindow.stories.ts    | 34 -----------
 .../src/components/MkPagination.stories.ts    | 34 -----------
 .../src/components/MkPlusOneEffect.stories.ts | 34 -----------
 .../frontend/src/components/MkPoll.stories.ts | 34 -----------
 .../src/components/MkPollEditor.stories.ts    | 34 -----------
 .../src/components/MkPopupMenu.stories.ts     | 34 -----------
 .../src/components/MkPostForm.stories.ts      | 34 -----------
 .../components/MkPostFormAttaches.stories.ts  | 34 -----------
 .../components/MkPostFormDialog.stories.ts    | 34 -----------
 .../MkPushNotificationAllowButton.stories.ts  | 34 -----------
 .../src/components/MkRadio.stories.ts         | 34 -----------
 .../src/components/MkRadios.stories.ts        | 34 -----------
 .../src/components/MkRange.stories.ts         | 34 -----------
 .../MkReactedUsersDialog.stories.ts           | 34 -----------
 .../components/MkReactionEffect.stories.ts    | 34 -----------
 .../src/components/MkReactionIcon.stories.ts  | 34 -----------
 .../components/MkReactionTooltip.stories.ts   | 34 -----------
 .../MkReactionsViewer.details.stories.ts      | 34 -----------
 .../MkReactionsViewer.reaction.stories.ts     | 34 -----------
 .../components/MkReactionsViewer.stories.ts   | 34 -----------
 .../src/components/MkRemoteCaution.stories.ts | 34 -----------
 .../components/MkRetentionHeatmap.stories.ts  | 34 -----------
 .../src/components/MkRippleEffect.stories.ts  | 34 -----------
 .../src/components/MkRolePreview.stories.ts   | 34 -----------
 .../src/components/MkSample.stories.ts        | 34 -----------
 .../src/components/MkSelect.stories.ts        | 34 -----------
 .../src/components/MkSignin.stories.ts        | 34 -----------
 .../src/components/MkSigninDialog.stories.ts  | 34 -----------
 .../src/components/MkSignup.stories.ts        | 34 -----------
 .../src/components/MkSignupDialog.stories.ts  | 34 -----------
 .../src/components/MkSparkle.stories.ts       | 34 -----------
 .../components/MkSubNoteContent.stories.ts    | 34 -----------
 .../src/components/MkSuperMenu.stories.ts     | 34 -----------
 .../src/components/MkSwitch.stories.ts        | 34 -----------
 .../frontend/src/components/MkTab.stories.ts  | 34 -----------
 .../src/components/MkTagCloud.stories.ts      | 34 -----------
 .../src/components/MkTextarea.stories.ts      | 34 -----------
 .../src/components/MkTimeline.stories.ts      | 34 -----------
 .../src/components/MkToast.stories.ts         | 34 -----------
 .../MkTokenGenerateWindow.stories.ts          | 34 -----------
 .../src/components/MkTooltip.stories.ts       | 34 -----------
 .../src/components/MkUpdated.stories.ts       | 34 -----------
 .../src/components/MkUrlPreview.stories.ts    | 34 -----------
 .../components/MkUrlPreviewPopup.stories.ts   | 34 -----------
 .../src/components/MkUserCardMini.stories.ts  | 34 -----------
 .../src/components/MkUserInfo.stories.ts      | 34 -----------
 .../src/components/MkUserList.stories.ts      | 34 -----------
 .../MkUserOnlineIndicator.stories.ts          | 34 -----------
 .../src/components/MkUserPopup.stories.ts     | 34 -----------
 .../components/MkUserSelectDialog.stories.ts  | 34 -----------
 .../src/components/MkUsersTooltip.stories.ts  | 34 -----------
 .../components/MkVisibilityPicker.stories.ts  | 34 -----------
 .../src/components/MkWaitingDialog.stories.ts | 34 -----------
 .../src/components/MkWidgets.stories.ts       | 34 -----------
 .../src/components/MkWindow.stories.ts        | 34 -----------
 .../src/components/MkYouTubePlayer.stories.ts | 34 -----------
 .../src/components/form/link.stories.ts       | 34 -----------
 .../src/components/form/section.stories.ts    | 34 -----------
 .../src/components/form/slot.stories.ts       | 34 -----------
 .../src/components/form/split.stories.ts      | 34 -----------
 .../src/components/form/suspense.stories.ts   | 34 -----------
 .../global/MkLoading.stories.impl.ts          | 58 +++++++++++++++++++
 .../components/global/MkLoading.stories.ts    | 37 +++++++++++-
 .../MkMisskeyFlavoredMarkdown.stories.impl.ts | 52 +++++++++++++++++
 .../MkMisskeyFlavoredMarkdown.stories.ts      | 32 +++++++++-
 .../src/components/page/page.block.stories.ts | 34 -----------
 .../components/page/page.button.stories.ts    | 34 -----------
 .../components/page/page.canvas.stories.ts    | 34 -----------
 .../components/page/page.counter.stories.ts   | 34 -----------
 .../src/components/page/page.if.stories.ts    | 34 -----------
 .../src/components/page/page.image.stories.ts | 34 -----------
 .../src/components/page/page.note.stories.ts  | 34 -----------
 .../page/page.number-input.stories.ts         | 34 -----------
 .../src/components/page/page.post.stories.ts  | 34 -----------
 .../page/page.radio-button.stories.ts         | 34 -----------
 .../components/page/page.section.stories.ts   | 34 -----------
 .../src/components/page/page.stories.ts       | 34 -----------
 .../components/page/page.switch.stories.ts    | 34 -----------
 .../page/page.text-input.stories.ts           | 34 -----------
 .../src/components/page/page.text.stories.ts  | 34 -----------
 .../page/page.textarea-input.stories.ts       | 34 -----------
 .../components/page/page.textarea.stories.ts  | 34 -----------
 .../frontend/src/pages/_empty_.stories.ts     | 34 -----------
 .../frontend/src/pages/_error_.stories.ts     | 34 -----------
 .../frontend/src/pages/_loading_.stories.ts   | 34 -----------
 .../src/pages/about-misskey.stories.ts        | 34 -----------
 .../src/pages/about.emojis.stories.ts         | 34 -----------
 .../src/pages/about.federation.stories.ts     | 34 -----------
 packages/frontend/src/pages/about.stories.ts  | 34 -----------
 .../src/pages/achievements.stories.ts         | 34 -----------
 .../frontend/src/pages/admin-file.stories.ts  | 34 -----------
 .../pages/admin/RolesEditorFormula.stories.ts | 34 -----------
 .../src/pages/admin/_header_.stories.ts       | 34 -----------
 .../src/pages/admin/abuses.stories.ts         | 34 -----------
 .../frontend/src/pages/admin/ads.stories.ts   | 34 -----------
 .../src/pages/admin/announcements.stories.ts  | 34 -----------
 .../src/pages/admin/bot-protection.stories.ts | 34 -----------
 .../src/pages/admin/database.stories.ts       | 34 -----------
 .../src/pages/admin/email-settings.stories.ts | 34 -----------
 .../src/pages/admin/federation.stories.ts     | 34 -----------
 .../frontend/src/pages/admin/files.stories.ts | 34 -----------
 .../frontend/src/pages/admin/index.stories.ts | 34 -----------
 .../src/pages/admin/instance-block.stories.ts | 34 -----------
 .../src/pages/admin/moderation.stories.ts     | 34 -----------
 .../src/pages/admin/object-storage.stories.ts | 34 -----------
 .../src/pages/admin/other-settings.stories.ts | 34 -----------
 .../admin/overview.active-users.stories.ts    | 34 -----------
 .../admin/overview.ap-requests.stories.ts     | 34 -----------
 .../admin/overview.federation.stories.ts      | 34 -----------
 .../pages/admin/overview.heatmap.stories.ts   | 34 -----------
 .../pages/admin/overview.instances.stories.ts | 34 -----------
 .../admin/overview.moderators.stories.ts      | 34 -----------
 .../src/pages/admin/overview.pie.stories.ts   | 34 -----------
 .../admin/overview.queue.chart.stories.ts     | 34 -----------
 .../src/pages/admin/overview.queue.stories.ts | 34 -----------
 .../pages/admin/overview.retention.stories.ts | 34 -----------
 .../src/pages/admin/overview.stats.stories.ts | 34 -----------
 .../src/pages/admin/overview.stories.ts       | 34 -----------
 .../src/pages/admin/overview.users.stories.ts | 34 -----------
 .../src/pages/admin/proxy-account.stories.ts  | 34 -----------
 .../pages/admin/queue.chart.chart.stories.ts  | 34 -----------
 .../src/pages/admin/queue.chart.stories.ts    | 34 -----------
 .../frontend/src/pages/admin/queue.stories.ts | 34 -----------
 .../src/pages/admin/relays.stories.ts         | 34 -----------
 .../src/pages/admin/roles.edit.stories.ts     | 34 -----------
 .../src/pages/admin/roles.editor.stories.ts   | 34 -----------
 .../src/pages/admin/roles.role.stories.ts     | 34 -----------
 .../frontend/src/pages/admin/roles.stories.ts | 34 -----------
 .../src/pages/admin/security.stories.ts       | 34 -----------
 .../src/pages/admin/settings.stories.ts       | 34 -----------
 .../frontend/src/pages/admin/users.stories.ts | 34 -----------
 packages/frontend/src/pages/ads.stories.ts    | 34 -----------
 .../src/pages/announcements.stories.ts        | 34 -----------
 .../src/pages/antenna-timeline.stories.ts     | 34 -----------
 .../frontend/src/pages/api-console.stories.ts | 34 -----------
 .../frontend/src/pages/auth.form.stories.ts   | 34 -----------
 packages/frontend/src/pages/auth.stories.ts   | 34 -----------
 .../src/pages/channel-editor.stories.ts       | 34 -----------
 .../frontend/src/pages/channel.stories.ts     | 34 -----------
 .../frontend/src/pages/channels.stories.ts    | 34 -----------
 .../frontend/src/pages/clicker.stories.ts     | 34 -----------
 packages/frontend/src/pages/clip.stories.ts   | 34 -----------
 .../pages/custom-emojis-manager.stories.ts    | 34 -----------
 packages/frontend/src/pages/drive.stories.ts  | 34 -----------
 .../src/pages/emoji-edit-dialog.stories.ts    | 34 -----------
 .../src/pages/emojis.emoji.stories.ts         | 34 -----------
 .../src/pages/explore.featured.stories.ts     | 34 -----------
 .../src/pages/explore.roles.stories.ts        | 34 -----------
 .../frontend/src/pages/explore.stories.ts     | 34 -----------
 .../src/pages/explore.users.stories.ts        | 34 -----------
 .../frontend/src/pages/favorites.stories.ts   | 34 -----------
 .../src/pages/flash/flash-edit.stories.ts     | 34 -----------
 .../src/pages/flash/flash-index.stories.ts    | 34 -----------
 .../frontend/src/pages/flash/flash.stories.ts | 34 -----------
 .../src/pages/follow-requests.stories.ts      | 34 -----------
 packages/frontend/src/pages/follow.stories.ts | 34 -----------
 .../src/pages/gallery/edit.stories.ts         | 34 -----------
 .../src/pages/gallery/index.stories.ts        | 34 -----------
 .../src/pages/gallery/post.stories.ts         | 34 -----------
 .../src/pages/instance-info.stories.ts        | 34 -----------
 packages/frontend/src/pages/miauth.stories.ts | 34 -----------
 .../src/pages/my-antennas/create.stories.ts   | 34 -----------
 .../src/pages/my-antennas/edit.stories.ts     | 34 -----------
 .../src/pages/my-antennas/editor.stories.ts   | 34 -----------
 .../src/pages/my-antennas/index.stories.ts    | 34 -----------
 .../src/pages/my-clips/index.stories.ts       | 34 -----------
 .../src/pages/my-lists/index.stories.ts       | 34 -----------
 .../src/pages/my-lists/list.stories.ts        | 34 -----------
 .../frontend/src/pages/not-found.stories.ts   | 34 -----------
 packages/frontend/src/pages/note.stories.ts   | 34 -----------
 .../src/pages/notifications.stories.ts        | 34 -----------
 .../els/page-editor.el.image.stories.ts       | 34 -----------
 .../els/page-editor.el.note.stories.ts        | 34 -----------
 .../els/page-editor.el.section.stories.ts     | 34 -----------
 .../els/page-editor.el.text.stories.ts        | 34 -----------
 .../page-editor/page-editor.blocks.stories.ts | 34 -----------
 .../page-editor.container.stories.ts          | 34 -----------
 .../pages/page-editor/page-editor.stories.ts  | 34 -----------
 packages/frontend/src/pages/page.stories.ts   | 34 -----------
 packages/frontend/src/pages/pages.stories.ts  | 34 -----------
 .../frontend/src/pages/preview.stories.ts     | 34 -----------
 .../src/pages/registry.keys.stories.ts        | 34 -----------
 .../frontend/src/pages/registry.stories.ts    | 34 -----------
 .../src/pages/registry.value.stories.ts       | 34 -----------
 .../src/pages/reset-password.stories.ts       | 34 -----------
 packages/frontend/src/pages/role.stories.ts   | 34 -----------
 .../frontend/src/pages/scratchpad.stories.ts  | 34 -----------
 packages/frontend/src/pages/search.stories.ts | 34 -----------
 .../pages/settings/2fa.qrdialog.stories.ts    | 34 -----------
 .../src/pages/settings/2fa.stories.ts         | 34 -----------
 .../pages/settings/account-info.stories.ts    | 34 -----------
 .../src/pages/settings/accounts.stories.ts    | 34 -----------
 .../src/pages/settings/api.stories.ts         | 34 -----------
 .../src/pages/settings/apps.stories.ts        | 34 -----------
 .../src/pages/settings/custom-css.stories.ts  | 34 -----------
 .../src/pages/settings/deck.stories.ts        | 34 -----------
 .../pages/settings/delete-account.stories.ts  | 34 -----------
 .../pages/settings/drive-cleaner.stories.ts   | 34 -----------
 .../src/pages/settings/drive.stories.ts       | 34 -----------
 .../src/pages/settings/email.stories.ts       | 34 -----------
 .../src/pages/settings/general.stories.ts     | 34 -----------
 .../pages/settings/import-export.stories.ts   | 34 -----------
 .../src/pages/settings/index.stories.ts       | 34 -----------
 .../pages/settings/instance-mute.stories.ts   | 34 -----------
 .../src/pages/settings/mute-block.stories.ts  | 34 -----------
 .../src/pages/settings/navbar.stories.ts      | 34 -----------
 .../pages/settings/notifications.stories.ts   | 34 -----------
 .../src/pages/settings/other.stories.ts       | 34 -----------
 .../pages/settings/plugin.install.stories.ts  | 34 -----------
 .../src/pages/settings/plugin.stories.ts      | 34 -----------
 .../settings/preferences-backups.stories.ts   | 34 -----------
 .../src/pages/settings/privacy.stories.ts     | 34 -----------
 .../src/pages/settings/profile.stories.ts     | 34 -----------
 .../src/pages/settings/reaction.stories.ts    | 34 -----------
 .../src/pages/settings/roles.stories.ts       | 34 -----------
 .../src/pages/settings/security.stories.ts    | 34 -----------
 .../pages/settings/sounds.sound.stories.ts    | 34 -----------
 .../src/pages/settings/sounds.stories.ts      | 34 -----------
 .../settings/statusbar.statusbar.stories.ts   | 34 -----------
 .../src/pages/settings/statusbar.stories.ts   | 34 -----------
 .../pages/settings/theme.install.stories.ts   | 34 -----------
 .../pages/settings/theme.manage.stories.ts    | 34 -----------
 .../src/pages/settings/theme.stories.ts       | 34 -----------
 .../pages/settings/webhook.edit.stories.ts    | 34 -----------
 .../src/pages/settings/webhook.new.stories.ts | 34 -----------
 .../src/pages/settings/webhook.stories.ts     | 34 -----------
 .../src/pages/settings/word-mute.stories.ts   | 34 -----------
 packages/frontend/src/pages/share.stories.ts  | 34 -----------
 .../src/pages/signup-complete.stories.ts      | 34 -----------
 packages/frontend/src/pages/tag.stories.ts    | 34 -----------
 .../src/pages/theme-editor.stories.ts         | 34 -----------
 .../frontend/src/pages/timeline.stories.ts    | 34 -----------
 .../src/pages/timeline.tutorial.stories.ts    | 34 -----------
 .../frontend/src/pages/user-info.stories.ts   | 34 -----------
 .../src/pages/user-list-timeline.stories.ts   | 34 -----------
 .../frontend/src/pages/user-tag.stories.ts    | 34 -----------
 .../src/pages/user/achievements.stories.ts    | 34 -----------
 .../pages/user/activity.following.stories.ts  | 34 -----------
 .../pages/user/activity.heatmap.stories.ts    | 34 -----------
 .../src/pages/user/activity.notes.stories.ts  | 34 -----------
 .../src/pages/user/activity.pv.stories.ts     | 34 -----------
 .../src/pages/user/activity.stories.ts        | 34 -----------
 .../frontend/src/pages/user/clips.stories.ts  | 34 -----------
 .../src/pages/user/follow-list.stories.ts     | 34 -----------
 .../src/pages/user/followers.stories.ts       | 34 -----------
 .../src/pages/user/following.stories.ts       | 34 -----------
 .../src/pages/user/gallery.stories.ts         | 34 -----------
 .../frontend/src/pages/user/home.stories.ts   | 34 -----------
 .../src/pages/user/index.activity.stories.ts  | 34 -----------
 .../src/pages/user/index.photos.stories.ts    | 34 -----------
 .../frontend/src/pages/user/index.stories.ts  | 34 -----------
 .../src/pages/user/index.timeline.stories.ts  | 34 -----------
 .../frontend/src/pages/user/pages.stories.ts  | 34 -----------
 .../src/pages/user/reactions.stories.ts       | 34 -----------
 .../src/pages/welcome.entrance.a.stories.ts   | 34 -----------
 .../src/pages/welcome.entrance.b.stories.ts   | 34 -----------
 .../src/pages/welcome.entrance.c.stories.ts   | 34 -----------
 .../src/pages/welcome.setup.stories.ts        | 34 -----------
 .../frontend/src/pages/welcome.stories.ts     | 34 -----------
 .../src/pages/welcome.timeline.stories.ts     | 34 -----------
 .../src/ui/_common_/common.stories.ts         | 34 -----------
 .../ui/_common_/navbar-for-mobile.stories.ts  | 34 -----------
 .../src/ui/_common_/navbar.stories.ts         | 34 -----------
 .../src/ui/_common_/notification.stories.ts   | 34 -----------
 .../_common_/statusbar-federation.stories.ts  | 34 -----------
 .../src/ui/_common_/statusbar-rss.stories.ts  | 34 -----------
 .../_common_/statusbar-user-list.stories.ts   | 34 -----------
 .../src/ui/_common_/statusbars.stories.ts     | 34 -----------
 .../ui/_common_/stream-indicator.stories.ts   | 34 -----------
 .../src/ui/_common_/upload.stories.ts         | 34 -----------
 .../frontend/src/ui/classic.header.stories.ts | 34 -----------
 .../src/ui/classic.sidebar.stories.ts         | 34 -----------
 packages/frontend/src/ui/classic.stories.ts   | 34 -----------
 packages/frontend/src/ui/deck.stories.ts      | 34 -----------
 .../src/ui/deck/antenna-column.stories.ts     | 34 -----------
 .../src/ui/deck/channel-column.stories.ts     | 34 -----------
 .../src/ui/deck/column-core.stories.ts        | 34 -----------
 .../frontend/src/ui/deck/column.stories.ts    | 34 -----------
 .../src/ui/deck/direct-column.stories.ts      | 34 -----------
 .../src/ui/deck/list-column.stories.ts        | 34 -----------
 .../src/ui/deck/main-column.stories.ts        | 34 -----------
 .../src/ui/deck/mentions-column.stories.ts    | 34 -----------
 .../ui/deck/notifications-column.stories.ts   | 34 -----------
 .../frontend/src/ui/deck/tl-column.stories.ts | 34 -----------
 .../src/ui/deck/widgets-column.stories.ts     | 34 -----------
 packages/frontend/src/ui/universal.stories.ts | 34 -----------
 .../src/ui/universal.widgets.stories.ts       | 34 -----------
 packages/frontend/src/ui/visitor.stories.ts   | 34 -----------
 packages/frontend/src/ui/visitor/a.stories.ts | 34 -----------
 packages/frontend/src/ui/visitor/b.stories.ts | 34 -----------
 .../frontend/src/ui/visitor/header.stories.ts | 34 -----------
 .../frontend/src/ui/visitor/kanban.stories.ts | 34 -----------
 packages/frontend/src/ui/zen.stories.ts       | 34 -----------
 .../WidgetActivity.calendar.stories.ts        | 34 -----------
 .../widgets/WidgetActivity.chart.stories.ts   | 34 -----------
 .../src/widgets/WidgetActivity.stories.ts     | 34 -----------
 .../src/widgets/WidgetAichan.stories.ts       | 34 -----------
 .../src/widgets/WidgetAiscript.stories.ts     | 34 -----------
 .../src/widgets/WidgetAiscriptApp.stories.ts  | 34 -----------
 .../src/widgets/WidgetButton.stories.ts       | 34 -----------
 .../src/widgets/WidgetCalendar.stories.ts     | 34 -----------
 .../src/widgets/WidgetClicker.stories.ts      | 34 -----------
 .../src/widgets/WidgetClock.stories.ts        | 34 -----------
 .../src/widgets/WidgetDigitalClock.stories.ts | 34 -----------
 .../src/widgets/WidgetFederation.stories.ts   | 34 -----------
 .../widgets/WidgetInstanceCloud.stories.ts    | 34 -----------
 .../src/widgets/WidgetInstanceInfo.stories.ts | 34 -----------
 .../src/widgets/WidgetJobQueue.stories.ts     | 34 -----------
 .../src/widgets/WidgetMemo.stories.ts         | 34 -----------
 .../widgets/WidgetNotifications.stories.ts    | 34 -----------
 .../src/widgets/WidgetOnlineUsers.stories.ts  | 34 -----------
 .../src/widgets/WidgetPhotos.stories.ts       | 34 -----------
 .../src/widgets/WidgetPostForm.stories.ts     | 34 -----------
 .../src/widgets/WidgetProfile.stories.ts      | 34 -----------
 .../frontend/src/widgets/WidgetRss.stories.ts | 34 -----------
 .../src/widgets/WidgetRssTicker.stories.ts    | 34 -----------
 .../src/widgets/WidgetSlideshow.stories.ts    | 34 -----------
 .../src/widgets/WidgetTimeline.stories.ts     | 34 -----------
 .../src/widgets/WidgetTrends.stories.ts       | 34 -----------
 .../src/widgets/WidgetUnixClock.stories.ts    | 34 -----------
 .../src/widgets/WidgetUserList.stories.ts     | 34 -----------
 .../widgets/server-metric/cpu-mem.stories.ts  | 34 -----------
 .../src/widgets/server-metric/cpu.stories.ts  | 34 -----------
 .../src/widgets/server-metric/disk.stories.ts | 34 -----------
 .../widgets/server-metric/index.stories.ts    | 34 -----------
 .../src/widgets/server-metric/mem.stories.ts  | 34 -----------
 .../src/widgets/server-metric/net.stories.ts  | 34 -----------
 .../src/widgets/server-metric/pie.stories.ts  | 34 -----------
 417 files changed, 175 insertions(+), 13984 deletions(-)
 delete mode 100644 packages/frontend/src/components/MkAbuseReport.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAbuseReportWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAchievements.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAnalogClock.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAsUi.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAutocomplete.stories.ts
 delete mode 100644 packages/frontend/src/components/MkAvatars.stories.ts
 delete mode 100644 packages/frontend/src/components/MkButton.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCaptcha.stories.ts
 delete mode 100644 packages/frontend/src/components/MkChannelFollowButton.stories.ts
 delete mode 100644 packages/frontend/src/components/MkChannelPreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkChart.stories.ts
 delete mode 100644 packages/frontend/src/components/MkChartLegend.stories.ts
 delete mode 100644 packages/frontend/src/components/MkChartTooltip.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCheckbox.stories.ts
 delete mode 100644 packages/frontend/src/components/MkClickerGame.stories.ts
 delete mode 100644 packages/frontend/src/components/MkClipPreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCode.core.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCode.stories.ts
 delete mode 100644 packages/frontend/src/components/MkContainer.stories.ts
 delete mode 100644 packages/frontend/src/components/MkContextMenu.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCropperDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkCwButton.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDateSeparatedList.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDigitalClock.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDonation.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDrive.file.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDrive.folder.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDrive.navFolder.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDrive.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDriveSelectDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkDriveWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkEmojiPicker.section.stories.ts
 delete mode 100644 packages/frontend/src/components/MkEmojiPicker.stories.ts
 delete mode 100644 packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFeaturedPhotos.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFileListForAdmin.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFlashPreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFoldableSection.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFolder.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFollowButton.stories.ts
 delete mode 100644 packages/frontend/src/components/MkForgotPassword.stories.ts
 delete mode 100644 packages/frontend/src/components/MkFormDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkGalleryPostPreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkGoogle.stories.ts
 delete mode 100644 packages/frontend/src/components/MkHeatmap.stories.ts
 delete mode 100644 packages/frontend/src/components/MkImageViewer.stories.ts
 delete mode 100644 packages/frontend/src/components/MkImgWithBlurhash.stories.ts
 delete mode 100644 packages/frontend/src/components/MkInfo.stories.ts
 delete mode 100644 packages/frontend/src/components/MkInput.stories.ts
 delete mode 100644 packages/frontend/src/components/MkInstanceCardMini.stories.ts
 delete mode 100644 packages/frontend/src/components/MkInstanceStats.stories.ts
 delete mode 100644 packages/frontend/src/components/MkInstanceTicker.stories.ts
 delete mode 100644 packages/frontend/src/components/MkKeyValue.stories.ts
 delete mode 100644 packages/frontend/src/components/MkLaunchPad.stories.ts
 delete mode 100644 packages/frontend/src/components/MkLink.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMarquee.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMediaBanner.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMediaImage.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMediaList.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMediaVideo.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMention.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMenu.child.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMenu.stories.ts
 delete mode 100644 packages/frontend/src/components/MkMiniChart.stories.ts
 delete mode 100644 packages/frontend/src/components/MkModal.stories.ts
 delete mode 100644 packages/frontend/src/components/MkModalPageWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkModalWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNote.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNoteDetailed.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNoteHeader.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNotePreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNoteSimple.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNoteSub.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNotes.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNotification.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNotifications.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNumber.stories.ts
 delete mode 100644 packages/frontend/src/components/MkNumberDiff.stories.ts
 delete mode 100644 packages/frontend/src/components/MkObjectView.stories.ts
 delete mode 100644 packages/frontend/src/components/MkObjectView.value.stories.ts
 delete mode 100644 packages/frontend/src/components/MkOmit.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPagePreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPageWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPagination.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPlusOneEffect.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPoll.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPollEditor.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPopupMenu.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPostForm.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPostFormAttaches.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPostFormDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRadio.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRadios.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRange.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactedUsersDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionEffect.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionIcon.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionTooltip.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionsViewer.details.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
 delete mode 100644 packages/frontend/src/components/MkReactionsViewer.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRemoteCaution.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRetentionHeatmap.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRippleEffect.stories.ts
 delete mode 100644 packages/frontend/src/components/MkRolePreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSample.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSelect.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSignin.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSigninDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSignup.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSignupDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSparkle.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSubNoteContent.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSuperMenu.stories.ts
 delete mode 100644 packages/frontend/src/components/MkSwitch.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTab.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTagCloud.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTextarea.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTimeline.stories.ts
 delete mode 100644 packages/frontend/src/components/MkToast.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkTooltip.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUpdated.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUrlPreview.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserCardMini.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserInfo.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserList.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserPopup.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUserSelectDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkUsersTooltip.stories.ts
 delete mode 100644 packages/frontend/src/components/MkVisibilityPicker.stories.ts
 delete mode 100644 packages/frontend/src/components/MkWaitingDialog.stories.ts
 delete mode 100644 packages/frontend/src/components/MkWidgets.stories.ts
 delete mode 100644 packages/frontend/src/components/MkWindow.stories.ts
 delete mode 100644 packages/frontend/src/components/MkYouTubePlayer.stories.ts
 delete mode 100644 packages/frontend/src/components/form/link.stories.ts
 delete mode 100644 packages/frontend/src/components/form/section.stories.ts
 delete mode 100644 packages/frontend/src/components/form/slot.stories.ts
 delete mode 100644 packages/frontend/src/components/form/split.stories.ts
 delete mode 100644 packages/frontend/src/components/form/suspense.stories.ts
 create mode 100644 packages/frontend/src/components/global/MkLoading.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
 delete mode 100644 packages/frontend/src/components/page/page.block.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.button.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.canvas.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.counter.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.if.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.image.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.note.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.number-input.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.post.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.radio-button.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.section.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.switch.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.text-input.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.text.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.textarea-input.stories.ts
 delete mode 100644 packages/frontend/src/components/page/page.textarea.stories.ts
 delete mode 100644 packages/frontend/src/pages/_empty_.stories.ts
 delete mode 100644 packages/frontend/src/pages/_error_.stories.ts
 delete mode 100644 packages/frontend/src/pages/_loading_.stories.ts
 delete mode 100644 packages/frontend/src/pages/about-misskey.stories.ts
 delete mode 100644 packages/frontend/src/pages/about.emojis.stories.ts
 delete mode 100644 packages/frontend/src/pages/about.federation.stories.ts
 delete mode 100644 packages/frontend/src/pages/about.stories.ts
 delete mode 100644 packages/frontend/src/pages/achievements.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin-file.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/_header_.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/abuses.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/ads.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/announcements.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/bot-protection.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/database.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/email-settings.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/federation.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/files.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/instance-block.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/moderation.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/object-storage.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/other-settings.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.active-users.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.federation.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.heatmap.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.instances.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.moderators.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.pie.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.queue.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.retention.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.stats.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/overview.users.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/proxy-account.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/queue.chart.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/queue.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/relays.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/roles.edit.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/roles.editor.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/roles.role.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/roles.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/security.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/settings.stories.ts
 delete mode 100644 packages/frontend/src/pages/admin/users.stories.ts
 delete mode 100644 packages/frontend/src/pages/ads.stories.ts
 delete mode 100644 packages/frontend/src/pages/announcements.stories.ts
 delete mode 100644 packages/frontend/src/pages/antenna-timeline.stories.ts
 delete mode 100644 packages/frontend/src/pages/api-console.stories.ts
 delete mode 100644 packages/frontend/src/pages/auth.form.stories.ts
 delete mode 100644 packages/frontend/src/pages/auth.stories.ts
 delete mode 100644 packages/frontend/src/pages/channel-editor.stories.ts
 delete mode 100644 packages/frontend/src/pages/channel.stories.ts
 delete mode 100644 packages/frontend/src/pages/channels.stories.ts
 delete mode 100644 packages/frontend/src/pages/clicker.stories.ts
 delete mode 100644 packages/frontend/src/pages/clip.stories.ts
 delete mode 100644 packages/frontend/src/pages/custom-emojis-manager.stories.ts
 delete mode 100644 packages/frontend/src/pages/drive.stories.ts
 delete mode 100644 packages/frontend/src/pages/emoji-edit-dialog.stories.ts
 delete mode 100644 packages/frontend/src/pages/emojis.emoji.stories.ts
 delete mode 100644 packages/frontend/src/pages/explore.featured.stories.ts
 delete mode 100644 packages/frontend/src/pages/explore.roles.stories.ts
 delete mode 100644 packages/frontend/src/pages/explore.stories.ts
 delete mode 100644 packages/frontend/src/pages/explore.users.stories.ts
 delete mode 100644 packages/frontend/src/pages/favorites.stories.ts
 delete mode 100644 packages/frontend/src/pages/flash/flash-edit.stories.ts
 delete mode 100644 packages/frontend/src/pages/flash/flash-index.stories.ts
 delete mode 100644 packages/frontend/src/pages/flash/flash.stories.ts
 delete mode 100644 packages/frontend/src/pages/follow-requests.stories.ts
 delete mode 100644 packages/frontend/src/pages/follow.stories.ts
 delete mode 100644 packages/frontend/src/pages/gallery/edit.stories.ts
 delete mode 100644 packages/frontend/src/pages/gallery/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/gallery/post.stories.ts
 delete mode 100644 packages/frontend/src/pages/instance-info.stories.ts
 delete mode 100644 packages/frontend/src/pages/miauth.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-antennas/create.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-antennas/edit.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-antennas/editor.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-antennas/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-clips/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-lists/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/my-lists/list.stories.ts
 delete mode 100644 packages/frontend/src/pages/not-found.stories.ts
 delete mode 100644 packages/frontend/src/pages/note.stories.ts
 delete mode 100644 packages/frontend/src/pages/notifications.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
 delete mode 100644 packages/frontend/src/pages/page-editor/page-editor.stories.ts
 delete mode 100644 packages/frontend/src/pages/page.stories.ts
 delete mode 100644 packages/frontend/src/pages/pages.stories.ts
 delete mode 100644 packages/frontend/src/pages/preview.stories.ts
 delete mode 100644 packages/frontend/src/pages/registry.keys.stories.ts
 delete mode 100644 packages/frontend/src/pages/registry.stories.ts
 delete mode 100644 packages/frontend/src/pages/registry.value.stories.ts
 delete mode 100644 packages/frontend/src/pages/reset-password.stories.ts
 delete mode 100644 packages/frontend/src/pages/role.stories.ts
 delete mode 100644 packages/frontend/src/pages/scratchpad.stories.ts
 delete mode 100644 packages/frontend/src/pages/search.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/2fa.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/account-info.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/accounts.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/api.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/apps.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/custom-css.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/deck.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/delete-account.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/drive-cleaner.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/drive.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/email.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/general.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/import-export.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/instance-mute.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/mute-block.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/navbar.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/notifications.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/other.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/plugin.install.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/plugin.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/preferences-backups.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/privacy.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/profile.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/reaction.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/roles.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/security.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/sounds.sound.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/sounds.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/statusbar.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/theme.install.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/theme.manage.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/theme.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/webhook.edit.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/webhook.new.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/webhook.stories.ts
 delete mode 100644 packages/frontend/src/pages/settings/word-mute.stories.ts
 delete mode 100644 packages/frontend/src/pages/share.stories.ts
 delete mode 100644 packages/frontend/src/pages/signup-complete.stories.ts
 delete mode 100644 packages/frontend/src/pages/tag.stories.ts
 delete mode 100644 packages/frontend/src/pages/theme-editor.stories.ts
 delete mode 100644 packages/frontend/src/pages/timeline.stories.ts
 delete mode 100644 packages/frontend/src/pages/timeline.tutorial.stories.ts
 delete mode 100644 packages/frontend/src/pages/user-info.stories.ts
 delete mode 100644 packages/frontend/src/pages/user-list-timeline.stories.ts
 delete mode 100644 packages/frontend/src/pages/user-tag.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/achievements.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/activity.following.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/activity.heatmap.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/activity.notes.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/activity.pv.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/activity.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/clips.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/follow-list.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/followers.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/following.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/gallery.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/home.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/index.activity.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/index.photos.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/index.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/index.timeline.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/pages.stories.ts
 delete mode 100644 packages/frontend/src/pages/user/reactions.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.entrance.a.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.entrance.b.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.entrance.c.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.setup.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.stories.ts
 delete mode 100644 packages/frontend/src/pages/welcome.timeline.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/common.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/navbar.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/notification.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/statusbars.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/stream-indicator.stories.ts
 delete mode 100644 packages/frontend/src/ui/_common_/upload.stories.ts
 delete mode 100644 packages/frontend/src/ui/classic.header.stories.ts
 delete mode 100644 packages/frontend/src/ui/classic.sidebar.stories.ts
 delete mode 100644 packages/frontend/src/ui/classic.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/antenna-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/channel-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/column-core.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/direct-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/list-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/main-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/mentions-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/notifications-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/tl-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/deck/widgets-column.stories.ts
 delete mode 100644 packages/frontend/src/ui/universal.stories.ts
 delete mode 100644 packages/frontend/src/ui/universal.widgets.stories.ts
 delete mode 100644 packages/frontend/src/ui/visitor.stories.ts
 delete mode 100644 packages/frontend/src/ui/visitor/a.stories.ts
 delete mode 100644 packages/frontend/src/ui/visitor/b.stories.ts
 delete mode 100644 packages/frontend/src/ui/visitor/header.stories.ts
 delete mode 100644 packages/frontend/src/ui/visitor/kanban.stories.ts
 delete mode 100644 packages/frontend/src/ui/zen.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetActivity.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetAichan.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetAiscript.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetButton.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetCalendar.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetClicker.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetClock.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetFederation.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetJobQueue.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetMemo.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetNotifications.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetPhotos.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetPostForm.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetProfile.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetRss.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetRssTicker.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetSlideshow.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetTimeline.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetTrends.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetUnixClock.stories.ts
 delete mode 100644 packages/frontend/src/widgets/WidgetUserList.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/cpu.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/disk.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/index.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/mem.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/net.stories.ts
 delete mode 100644 packages/frontend/src/widgets/server-metric/pie.stories.ts

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index f7d0f6fc08..b71d3c2a41 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -601,7 +601,8 @@ function toStories(component: string): string {
 	);
 }
 
-promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
+// promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
+promisify(glob)('src/components/global/**/*.vue').then(
 	(components) =>
 		Promise.all(
 			components.map((component) => {
diff --git a/packages/frontend/src/components/MkAbuseReport.stories.ts b/packages/frontend/src/components/MkAbuseReport.stories.ts
deleted file mode 100644
index dac1b27938..0000000000
--- a/packages/frontend/src/components/MkAbuseReport.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAbuseReport from './MkAbuseReport.vue';
-const meta = {
-	title: 'components/MkAbuseReport',
-	component: MkAbuseReport,
-} satisfies Meta<typeof MkAbuseReport>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAbuseReport,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAbuseReport v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAbuseReport>;
-export default meta;
diff --git a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts b/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
deleted file mode 100644
index acaf171e9f..0000000000
--- a/packages/frontend/src/components/MkAbuseReportWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAbuseReportWindow from './MkAbuseReportWindow.vue';
-const meta = {
-	title: 'components/MkAbuseReportWindow',
-	component: MkAbuseReportWindow,
-} satisfies Meta<typeof MkAbuseReportWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAbuseReportWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAbuseReportWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAbuseReportWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkAchievements.stories.ts b/packages/frontend/src/components/MkAchievements.stories.ts
deleted file mode 100644
index 492358ebc4..0000000000
--- a/packages/frontend/src/components/MkAchievements.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAchievements from './MkAchievements.vue';
-const meta = {
-	title: 'components/MkAchievements',
-	component: MkAchievements,
-} satisfies Meta<typeof MkAchievements>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAchievements,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAchievements v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAchievements>;
-export default meta;
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.ts b/packages/frontend/src/components/MkAnalogClock.stories.ts
deleted file mode 100644
index 54cbf2b30c..0000000000
--- a/packages/frontend/src/components/MkAnalogClock.stories.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/MkAnalogClock',
-	component: MkAnalogClock,
-} satisfies Meta<typeof MkAnalogClock>;
-export default meta;
-import MkAnalogClock from './MkAnalogClock.vue';
-export const Default = {
-	render(args, { argTypes }) {
-		return {
-			components: {
-				MkAnalogClock,
-			},
-			props: Object.keys(argTypes),
-			template: '<MkAnalogClock v-bind="$props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-};
diff --git a/packages/frontend/src/components/MkAsUi.stories.ts b/packages/frontend/src/components/MkAsUi.stories.ts
deleted file mode 100644
index b27668655f..0000000000
--- a/packages/frontend/src/components/MkAsUi.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAsUi from './MkAsUi.vue';
-const meta = {
-	title: 'components/MkAsUi',
-	component: MkAsUi,
-} satisfies Meta<typeof MkAsUi>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAsUi,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAsUi v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAsUi>;
-export default meta;
diff --git a/packages/frontend/src/components/MkAutocomplete.stories.ts b/packages/frontend/src/components/MkAutocomplete.stories.ts
deleted file mode 100644
index 2242bfde39..0000000000
--- a/packages/frontend/src/components/MkAutocomplete.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAutocomplete from './MkAutocomplete.vue';
-const meta = {
-	title: 'components/MkAutocomplete',
-	component: MkAutocomplete,
-} satisfies Meta<typeof MkAutocomplete>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAutocomplete,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAutocomplete v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAutocomplete>;
-export default meta;
diff --git a/packages/frontend/src/components/MkAvatars.stories.ts b/packages/frontend/src/components/MkAvatars.stories.ts
deleted file mode 100644
index 71a40e5cc4..0000000000
--- a/packages/frontend/src/components/MkAvatars.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkAvatars from './MkAvatars.vue';
-const meta = {
-	title: 'components/MkAvatars',
-	component: MkAvatars,
-} satisfies Meta<typeof MkAvatars>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAvatars,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAvatars v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAvatars>;
-export default meta;
diff --git a/packages/frontend/src/components/MkButton.stories.ts b/packages/frontend/src/components/MkButton.stories.ts
deleted file mode 100644
index c85ce89e18..0000000000
--- a/packages/frontend/src/components/MkButton.stories.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/MkButton',
-	component: MkButton,
-} satisfies Meta<typeof MkButton>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-/* eslint-disable import/no-duplicates */
-import { StoryObj } from '@storybook/vue3';
-import MkButton from './MkButton.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkButton v-bind="props">Text</MkButton>',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkButton>;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.ts b/packages/frontend/src/components/MkCaptcha.stories.ts
deleted file mode 100644
index 680c0387cc..0000000000
--- a/packages/frontend/src/components/MkCaptcha.stories.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/MkCaptcha',
-	component: MkCaptcha,
-} satisfies Meta<typeof MkCaptcha>;
-export default meta;
-import MkCaptcha from './MkCaptcha.vue';
-void MkCaptcha;
diff --git a/packages/frontend/src/components/MkChannelFollowButton.stories.ts b/packages/frontend/src/components/MkChannelFollowButton.stories.ts
deleted file mode 100644
index 8c7c31c56a..0000000000
--- a/packages/frontend/src/components/MkChannelFollowButton.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkChannelFollowButton from './MkChannelFollowButton.vue';
-const meta = {
-	title: 'components/MkChannelFollowButton',
-	component: MkChannelFollowButton,
-} satisfies Meta<typeof MkChannelFollowButton>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkChannelFollowButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkChannelFollowButton v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkChannelFollowButton>;
-export default meta;
diff --git a/packages/frontend/src/components/MkChannelPreview.stories.ts b/packages/frontend/src/components/MkChannelPreview.stories.ts
deleted file mode 100644
index aedeba1104..0000000000
--- a/packages/frontend/src/components/MkChannelPreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkChannelPreview from './MkChannelPreview.vue';
-const meta = {
-	title: 'components/MkChannelPreview',
-	component: MkChannelPreview,
-} satisfies Meta<typeof MkChannelPreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkChannelPreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkChannelPreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkChannelPreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkChart.stories.ts b/packages/frontend/src/components/MkChart.stories.ts
deleted file mode 100644
index d42adbe992..0000000000
--- a/packages/frontend/src/components/MkChart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkChart from './MkChart.vue';
-const meta = {
-	title: 'components/MkChart',
-	component: MkChart,
-} satisfies Meta<typeof MkChart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkChart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkChart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkChart>;
-export default meta;
diff --git a/packages/frontend/src/components/MkChartLegend.stories.ts b/packages/frontend/src/components/MkChartLegend.stories.ts
deleted file mode 100644
index 482f10c31f..0000000000
--- a/packages/frontend/src/components/MkChartLegend.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkChartLegend from './MkChartLegend.vue';
-const meta = {
-	title: 'components/MkChartLegend',
-	component: MkChartLegend,
-} satisfies Meta<typeof MkChartLegend>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkChartLegend,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkChartLegend v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkChartLegend>;
-export default meta;
diff --git a/packages/frontend/src/components/MkChartTooltip.stories.ts b/packages/frontend/src/components/MkChartTooltip.stories.ts
deleted file mode 100644
index 49cccaa5b4..0000000000
--- a/packages/frontend/src/components/MkChartTooltip.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkChartTooltip from './MkChartTooltip.vue';
-const meta = {
-	title: 'components/MkChartTooltip',
-	component: MkChartTooltip,
-} satisfies Meta<typeof MkChartTooltip>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkChartTooltip,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkChartTooltip v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkChartTooltip>;
-export default meta;
diff --git a/packages/frontend/src/components/MkCheckbox.stories.ts b/packages/frontend/src/components/MkCheckbox.stories.ts
deleted file mode 100644
index 315ba320ad..0000000000
--- a/packages/frontend/src/components/MkCheckbox.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCheckbox from './MkCheckbox.vue';
-const meta = {
-	title: 'components/MkCheckbox',
-	component: MkCheckbox,
-} satisfies Meta<typeof MkCheckbox>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCheckbox,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCheckbox v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCheckbox>;
-export default meta;
diff --git a/packages/frontend/src/components/MkClickerGame.stories.ts b/packages/frontend/src/components/MkClickerGame.stories.ts
deleted file mode 100644
index 7b8f5165ff..0000000000
--- a/packages/frontend/src/components/MkClickerGame.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkClickerGame from './MkClickerGame.vue';
-const meta = {
-	title: 'components/MkClickerGame',
-	component: MkClickerGame,
-} satisfies Meta<typeof MkClickerGame>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkClickerGame,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkClickerGame v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkClickerGame>;
-export default meta;
diff --git a/packages/frontend/src/components/MkClipPreview.stories.ts b/packages/frontend/src/components/MkClipPreview.stories.ts
deleted file mode 100644
index a941c36120..0000000000
--- a/packages/frontend/src/components/MkClipPreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkClipPreview from './MkClipPreview.vue';
-const meta = {
-	title: 'components/MkClipPreview',
-	component: MkClipPreview,
-} satisfies Meta<typeof MkClipPreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkClipPreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkClipPreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkClipPreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkCode.core.stories.ts b/packages/frontend/src/components/MkCode.core.stories.ts
deleted file mode 100644
index dc47abb6b1..0000000000
--- a/packages/frontend/src/components/MkCode.core.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCode_core from './MkCode.core.vue';
-const meta = {
-	title: 'components/MkCode.core',
-	component: MkCode_core,
-} satisfies Meta<typeof MkCode_core>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCode_core,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCode_core v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCode_core>;
-export default meta;
diff --git a/packages/frontend/src/components/MkCode.stories.ts b/packages/frontend/src/components/MkCode.stories.ts
deleted file mode 100644
index 94b8af9cde..0000000000
--- a/packages/frontend/src/components/MkCode.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCode from './MkCode.vue';
-const meta = {
-	title: 'components/MkCode',
-	component: MkCode,
-} satisfies Meta<typeof MkCode>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCode,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCode v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCode>;
-export default meta;
diff --git a/packages/frontend/src/components/MkContainer.stories.ts b/packages/frontend/src/components/MkContainer.stories.ts
deleted file mode 100644
index 3b2da66f25..0000000000
--- a/packages/frontend/src/components/MkContainer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkContainer from './MkContainer.vue';
-const meta = {
-	title: 'components/MkContainer',
-	component: MkContainer,
-} satisfies Meta<typeof MkContainer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkContainer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkContainer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkContainer>;
-export default meta;
diff --git a/packages/frontend/src/components/MkContextMenu.stories.ts b/packages/frontend/src/components/MkContextMenu.stories.ts
deleted file mode 100644
index 37cc68c7b4..0000000000
--- a/packages/frontend/src/components/MkContextMenu.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkContextMenu from './MkContextMenu.vue';
-const meta = {
-	title: 'components/MkContextMenu',
-	component: MkContextMenu,
-} satisfies Meta<typeof MkContextMenu>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkContextMenu,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkContextMenu v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkContextMenu>;
-export default meta;
diff --git a/packages/frontend/src/components/MkCropperDialog.stories.ts b/packages/frontend/src/components/MkCropperDialog.stories.ts
deleted file mode 100644
index a4ccf146c1..0000000000
--- a/packages/frontend/src/components/MkCropperDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCropperDialog from './MkCropperDialog.vue';
-const meta = {
-	title: 'components/MkCropperDialog',
-	component: MkCropperDialog,
-} satisfies Meta<typeof MkCropperDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCropperDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCropperDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCropperDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkCwButton.stories.ts b/packages/frontend/src/components/MkCwButton.stories.ts
deleted file mode 100644
index 67d60052fe..0000000000
--- a/packages/frontend/src/components/MkCwButton.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkCwButton from './MkCwButton.vue';
-const meta = {
-	title: 'components/MkCwButton',
-	component: MkCwButton,
-} satisfies Meta<typeof MkCwButton>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCwButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCwButton v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCwButton>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDateSeparatedList.stories.ts b/packages/frontend/src/components/MkDateSeparatedList.stories.ts
deleted file mode 100644
index f0f203b717..0000000000
--- a/packages/frontend/src/components/MkDateSeparatedList.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDateSeparatedList from './MkDateSeparatedList.vue';
-const meta = {
-	title: 'components/MkDateSeparatedList',
-	component: MkDateSeparatedList,
-} satisfies Meta<typeof MkDateSeparatedList>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDateSeparatedList,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDateSeparatedList v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDateSeparatedList>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDialog.stories.ts b/packages/frontend/src/components/MkDialog.stories.ts
deleted file mode 100644
index 194e2c9cb3..0000000000
--- a/packages/frontend/src/components/MkDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDialog from './MkDialog.vue';
-const meta = {
-	title: 'components/MkDialog',
-	component: MkDialog,
-} satisfies Meta<typeof MkDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDigitalClock.stories.ts b/packages/frontend/src/components/MkDigitalClock.stories.ts
deleted file mode 100644
index c99020c9ea..0000000000
--- a/packages/frontend/src/components/MkDigitalClock.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDigitalClock from './MkDigitalClock.vue';
-const meta = {
-	title: 'components/MkDigitalClock',
-	component: MkDigitalClock,
-} satisfies Meta<typeof MkDigitalClock>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDigitalClock,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDigitalClock v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDigitalClock>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDonation.stories.ts b/packages/frontend/src/components/MkDonation.stories.ts
deleted file mode 100644
index 7157b7e82b..0000000000
--- a/packages/frontend/src/components/MkDonation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDonation from './MkDonation.vue';
-const meta = {
-	title: 'components/MkDonation',
-	component: MkDonation,
-} satisfies Meta<typeof MkDonation>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDonation,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDonation v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDonation>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDrive.file.stories.ts b/packages/frontend/src/components/MkDrive.file.stories.ts
deleted file mode 100644
index 17ba8df806..0000000000
--- a/packages/frontend/src/components/MkDrive.file.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDrive_file from './MkDrive.file.vue';
-const meta = {
-	title: 'components/MkDrive.file',
-	component: MkDrive_file,
-} satisfies Meta<typeof MkDrive_file>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDrive_file,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDrive_file v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDrive_file>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDrive.folder.stories.ts b/packages/frontend/src/components/MkDrive.folder.stories.ts
deleted file mode 100644
index 74b810e314..0000000000
--- a/packages/frontend/src/components/MkDrive.folder.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDrive_folder from './MkDrive.folder.vue';
-const meta = {
-	title: 'components/MkDrive.folder',
-	component: MkDrive_folder,
-} satisfies Meta<typeof MkDrive_folder>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDrive_folder,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDrive_folder v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDrive_folder>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDrive.navFolder.stories.ts b/packages/frontend/src/components/MkDrive.navFolder.stories.ts
deleted file mode 100644
index 50272c4d8a..0000000000
--- a/packages/frontend/src/components/MkDrive.navFolder.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDrive_navFolder from './MkDrive.navFolder.vue';
-const meta = {
-	title: 'components/MkDrive.navFolder',
-	component: MkDrive_navFolder,
-} satisfies Meta<typeof MkDrive_navFolder>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDrive_navFolder,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDrive_navFolder v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDrive_navFolder>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDrive.stories.ts b/packages/frontend/src/components/MkDrive.stories.ts
deleted file mode 100644
index 3038312c39..0000000000
--- a/packages/frontend/src/components/MkDrive.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDrive from './MkDrive.vue';
-const meta = {
-	title: 'components/MkDrive',
-	component: MkDrive,
-} satisfies Meta<typeof MkDrive>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDrive,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDrive v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDrive>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts b/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
deleted file mode 100644
index 6da7aab8c4..0000000000
--- a/packages/frontend/src/components/MkDriveFileThumbnail.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue';
-const meta = {
-	title: 'components/MkDriveFileThumbnail',
-	component: MkDriveFileThumbnail,
-} satisfies Meta<typeof MkDriveFileThumbnail>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDriveFileThumbnail,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDriveFileThumbnail v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDriveFileThumbnail>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts b/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
deleted file mode 100644
index b665516de6..0000000000
--- a/packages/frontend/src/components/MkDriveSelectDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDriveSelectDialog from './MkDriveSelectDialog.vue';
-const meta = {
-	title: 'components/MkDriveSelectDialog',
-	component: MkDriveSelectDialog,
-} satisfies Meta<typeof MkDriveSelectDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDriveSelectDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDriveSelectDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDriveSelectDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkDriveWindow.stories.ts b/packages/frontend/src/components/MkDriveWindow.stories.ts
deleted file mode 100644
index b0f13f562a..0000000000
--- a/packages/frontend/src/components/MkDriveWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkDriveWindow from './MkDriveWindow.vue';
-const meta = {
-	title: 'components/MkDriveWindow',
-	component: MkDriveWindow,
-} satisfies Meta<typeof MkDriveWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkDriveWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkDriveWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkDriveWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts b/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
deleted file mode 100644
index 141a55f59b..0000000000
--- a/packages/frontend/src/components/MkEmojiPicker.section.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEmojiPicker_section from './MkEmojiPicker.section.vue';
-const meta = {
-	title: 'components/MkEmojiPicker.section',
-	component: MkEmojiPicker_section,
-} satisfies Meta<typeof MkEmojiPicker_section>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEmojiPicker_section,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEmojiPicker_section v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEmojiPicker_section>;
-export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPicker.stories.ts b/packages/frontend/src/components/MkEmojiPicker.stories.ts
deleted file mode 100644
index 5980c9a471..0000000000
--- a/packages/frontend/src/components/MkEmojiPicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEmojiPicker from './MkEmojiPicker.vue';
-const meta = {
-	title: 'components/MkEmojiPicker',
-	component: MkEmojiPicker,
-} satisfies Meta<typeof MkEmojiPicker>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEmojiPicker,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEmojiPicker v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEmojiPicker>;
-export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts b/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
deleted file mode 100644
index db0900340b..0000000000
--- a/packages/frontend/src/components/MkEmojiPickerDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEmojiPickerDialog from './MkEmojiPickerDialog.vue';
-const meta = {
-	title: 'components/MkEmojiPickerDialog',
-	component: MkEmojiPickerDialog,
-} satisfies Meta<typeof MkEmojiPickerDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEmojiPickerDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEmojiPickerDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEmojiPickerDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts b/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
deleted file mode 100644
index f56e5369a8..0000000000
--- a/packages/frontend/src/components/MkEmojiPickerWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEmojiPickerWindow from './MkEmojiPickerWindow.vue';
-const meta = {
-	title: 'components/MkEmojiPickerWindow',
-	component: MkEmojiPickerWindow,
-} satisfies Meta<typeof MkEmojiPickerWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEmojiPickerWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEmojiPickerWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEmojiPickerWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts b/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
deleted file mode 100644
index 4894999903..0000000000
--- a/packages/frontend/src/components/MkFeaturedPhotos.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFeaturedPhotos from './MkFeaturedPhotos.vue';
-const meta = {
-	title: 'components/MkFeaturedPhotos',
-	component: MkFeaturedPhotos,
-} satisfies Meta<typeof MkFeaturedPhotos>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFeaturedPhotos,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFeaturedPhotos v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFeaturedPhotos>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts b/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
deleted file mode 100644
index da29eb06cf..0000000000
--- a/packages/frontend/src/components/MkFileCaptionEditWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFileCaptionEditWindow from './MkFileCaptionEditWindow.vue';
-const meta = {
-	title: 'components/MkFileCaptionEditWindow',
-	component: MkFileCaptionEditWindow,
-} satisfies Meta<typeof MkFileCaptionEditWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFileCaptionEditWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFileCaptionEditWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFileCaptionEditWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFileListForAdmin.stories.ts b/packages/frontend/src/components/MkFileListForAdmin.stories.ts
deleted file mode 100644
index a3fe97ee30..0000000000
--- a/packages/frontend/src/components/MkFileListForAdmin.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFileListForAdmin from './MkFileListForAdmin.vue';
-const meta = {
-	title: 'components/MkFileListForAdmin',
-	component: MkFileListForAdmin,
-} satisfies Meta<typeof MkFileListForAdmin>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFileListForAdmin,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFileListForAdmin v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFileListForAdmin>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFlashPreview.stories.ts b/packages/frontend/src/components/MkFlashPreview.stories.ts
deleted file mode 100644
index a87b58c7f9..0000000000
--- a/packages/frontend/src/components/MkFlashPreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFlashPreview from './MkFlashPreview.vue';
-const meta = {
-	title: 'components/MkFlashPreview',
-	component: MkFlashPreview,
-} satisfies Meta<typeof MkFlashPreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFlashPreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFlashPreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFlashPreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFoldableSection.stories.ts b/packages/frontend/src/components/MkFoldableSection.stories.ts
deleted file mode 100644
index 20eab42e71..0000000000
--- a/packages/frontend/src/components/MkFoldableSection.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFoldableSection from './MkFoldableSection.vue';
-const meta = {
-	title: 'components/MkFoldableSection',
-	component: MkFoldableSection,
-} satisfies Meta<typeof MkFoldableSection>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFoldableSection,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFoldableSection v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFoldableSection>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFolder.stories.ts b/packages/frontend/src/components/MkFolder.stories.ts
deleted file mode 100644
index 7086d2c6f7..0000000000
--- a/packages/frontend/src/components/MkFolder.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFolder from './MkFolder.vue';
-const meta = {
-	title: 'components/MkFolder',
-	component: MkFolder,
-} satisfies Meta<typeof MkFolder>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFolder,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFolder v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFolder>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFollowButton.stories.ts b/packages/frontend/src/components/MkFollowButton.stories.ts
deleted file mode 100644
index 8b4ed2acf9..0000000000
--- a/packages/frontend/src/components/MkFollowButton.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFollowButton from './MkFollowButton.vue';
-const meta = {
-	title: 'components/MkFollowButton',
-	component: MkFollowButton,
-} satisfies Meta<typeof MkFollowButton>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFollowButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFollowButton v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFollowButton>;
-export default meta;
diff --git a/packages/frontend/src/components/MkForgotPassword.stories.ts b/packages/frontend/src/components/MkForgotPassword.stories.ts
deleted file mode 100644
index 50a82ec105..0000000000
--- a/packages/frontend/src/components/MkForgotPassword.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkForgotPassword from './MkForgotPassword.vue';
-const meta = {
-	title: 'components/MkForgotPassword',
-	component: MkForgotPassword,
-} satisfies Meta<typeof MkForgotPassword>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkForgotPassword,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkForgotPassword v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkForgotPassword>;
-export default meta;
diff --git a/packages/frontend/src/components/MkFormDialog.stories.ts b/packages/frontend/src/components/MkFormDialog.stories.ts
deleted file mode 100644
index 7388e075cc..0000000000
--- a/packages/frontend/src/components/MkFormDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkFormDialog from './MkFormDialog.vue';
-const meta = {
-	title: 'components/MkFormDialog',
-	component: MkFormDialog,
-} satisfies Meta<typeof MkFormDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkFormDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkFormDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkFormDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts b/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
deleted file mode 100644
index 6b354e02b3..0000000000
--- a/packages/frontend/src/components/MkGalleryPostPreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkGalleryPostPreview from './MkGalleryPostPreview.vue';
-const meta = {
-	title: 'components/MkGalleryPostPreview',
-	component: MkGalleryPostPreview,
-} satisfies Meta<typeof MkGalleryPostPreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkGalleryPostPreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkGalleryPostPreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkGalleryPostPreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkGoogle.stories.ts b/packages/frontend/src/components/MkGoogle.stories.ts
deleted file mode 100644
index 046b4bd652..0000000000
--- a/packages/frontend/src/components/MkGoogle.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkGoogle from './MkGoogle.vue';
-const meta = {
-	title: 'components/MkGoogle',
-	component: MkGoogle,
-} satisfies Meta<typeof MkGoogle>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkGoogle,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkGoogle v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkGoogle>;
-export default meta;
diff --git a/packages/frontend/src/components/MkHeatmap.stories.ts b/packages/frontend/src/components/MkHeatmap.stories.ts
deleted file mode 100644
index 1782029bfc..0000000000
--- a/packages/frontend/src/components/MkHeatmap.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkHeatmap from './MkHeatmap.vue';
-const meta = {
-	title: 'components/MkHeatmap',
-	component: MkHeatmap,
-} satisfies Meta<typeof MkHeatmap>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkHeatmap,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkHeatmap v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkHeatmap>;
-export default meta;
diff --git a/packages/frontend/src/components/MkImageViewer.stories.ts b/packages/frontend/src/components/MkImageViewer.stories.ts
deleted file mode 100644
index 8276b916af..0000000000
--- a/packages/frontend/src/components/MkImageViewer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkImageViewer from './MkImageViewer.vue';
-const meta = {
-	title: 'components/MkImageViewer',
-	component: MkImageViewer,
-} satisfies Meta<typeof MkImageViewer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkImageViewer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkImageViewer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkImageViewer>;
-export default meta;
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts b/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
deleted file mode 100644
index b2693395ba..0000000000
--- a/packages/frontend/src/components/MkImgWithBlurhash.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkImgWithBlurhash from './MkImgWithBlurhash.vue';
-const meta = {
-	title: 'components/MkImgWithBlurhash',
-	component: MkImgWithBlurhash,
-} satisfies Meta<typeof MkImgWithBlurhash>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkImgWithBlurhash,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkImgWithBlurhash v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkImgWithBlurhash>;
-export default meta;
diff --git a/packages/frontend/src/components/MkInfo.stories.ts b/packages/frontend/src/components/MkInfo.stories.ts
deleted file mode 100644
index 99e46f95e7..0000000000
--- a/packages/frontend/src/components/MkInfo.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkInfo from './MkInfo.vue';
-const meta = {
-	title: 'components/MkInfo',
-	component: MkInfo,
-} satisfies Meta<typeof MkInfo>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkInfo,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkInfo v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkInfo>;
-export default meta;
diff --git a/packages/frontend/src/components/MkInput.stories.ts b/packages/frontend/src/components/MkInput.stories.ts
deleted file mode 100644
index 6234735409..0000000000
--- a/packages/frontend/src/components/MkInput.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkInput from './MkInput.vue';
-const meta = {
-	title: 'components/MkInput',
-	component: MkInput,
-} satisfies Meta<typeof MkInput>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkInput,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkInput v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkInput>;
-export default meta;
diff --git a/packages/frontend/src/components/MkInstanceCardMini.stories.ts b/packages/frontend/src/components/MkInstanceCardMini.stories.ts
deleted file mode 100644
index 919948e64e..0000000000
--- a/packages/frontend/src/components/MkInstanceCardMini.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkInstanceCardMini from './MkInstanceCardMini.vue';
-const meta = {
-	title: 'components/MkInstanceCardMini',
-	component: MkInstanceCardMini,
-} satisfies Meta<typeof MkInstanceCardMini>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkInstanceCardMini,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkInstanceCardMini v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkInstanceCardMini>;
-export default meta;
diff --git a/packages/frontend/src/components/MkInstanceStats.stories.ts b/packages/frontend/src/components/MkInstanceStats.stories.ts
deleted file mode 100644
index df6005ccc9..0000000000
--- a/packages/frontend/src/components/MkInstanceStats.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkInstanceStats from './MkInstanceStats.vue';
-const meta = {
-	title: 'components/MkInstanceStats',
-	component: MkInstanceStats,
-} satisfies Meta<typeof MkInstanceStats>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkInstanceStats,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkInstanceStats v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkInstanceStats>;
-export default meta;
diff --git a/packages/frontend/src/components/MkInstanceTicker.stories.ts b/packages/frontend/src/components/MkInstanceTicker.stories.ts
deleted file mode 100644
index 364290640e..0000000000
--- a/packages/frontend/src/components/MkInstanceTicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkInstanceTicker from './MkInstanceTicker.vue';
-const meta = {
-	title: 'components/MkInstanceTicker',
-	component: MkInstanceTicker,
-} satisfies Meta<typeof MkInstanceTicker>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkInstanceTicker,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkInstanceTicker v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkInstanceTicker>;
-export default meta;
diff --git a/packages/frontend/src/components/MkKeyValue.stories.ts b/packages/frontend/src/components/MkKeyValue.stories.ts
deleted file mode 100644
index 5036379752..0000000000
--- a/packages/frontend/src/components/MkKeyValue.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkKeyValue from './MkKeyValue.vue';
-const meta = {
-	title: 'components/MkKeyValue',
-	component: MkKeyValue,
-} satisfies Meta<typeof MkKeyValue>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkKeyValue,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkKeyValue v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkKeyValue>;
-export default meta;
diff --git a/packages/frontend/src/components/MkLaunchPad.stories.ts b/packages/frontend/src/components/MkLaunchPad.stories.ts
deleted file mode 100644
index 54f3ae3b73..0000000000
--- a/packages/frontend/src/components/MkLaunchPad.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkLaunchPad from './MkLaunchPad.vue';
-const meta = {
-	title: 'components/MkLaunchPad',
-	component: MkLaunchPad,
-} satisfies Meta<typeof MkLaunchPad>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkLaunchPad,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkLaunchPad v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkLaunchPad>;
-export default meta;
diff --git a/packages/frontend/src/components/MkLink.stories.ts b/packages/frontend/src/components/MkLink.stories.ts
deleted file mode 100644
index cea9509a76..0000000000
--- a/packages/frontend/src/components/MkLink.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkLink from './MkLink.vue';
-const meta = {
-	title: 'components/MkLink',
-	component: MkLink,
-} satisfies Meta<typeof MkLink>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkLink,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkLink v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkLink>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMarquee.stories.ts b/packages/frontend/src/components/MkMarquee.stories.ts
deleted file mode 100644
index 943b512bf8..0000000000
--- a/packages/frontend/src/components/MkMarquee.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMarquee from './MkMarquee.vue';
-const meta = {
-	title: 'components/MkMarquee',
-	component: MkMarquee,
-} satisfies Meta<typeof MkMarquee>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMarquee,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMarquee v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMarquee>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMediaBanner.stories.ts b/packages/frontend/src/components/MkMediaBanner.stories.ts
deleted file mode 100644
index 9dd835b557..0000000000
--- a/packages/frontend/src/components/MkMediaBanner.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMediaBanner from './MkMediaBanner.vue';
-const meta = {
-	title: 'components/MkMediaBanner',
-	component: MkMediaBanner,
-} satisfies Meta<typeof MkMediaBanner>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMediaBanner,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMediaBanner v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMediaBanner>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMediaImage.stories.ts b/packages/frontend/src/components/MkMediaImage.stories.ts
deleted file mode 100644
index 4089a53ce8..0000000000
--- a/packages/frontend/src/components/MkMediaImage.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMediaImage from './MkMediaImage.vue';
-const meta = {
-	title: 'components/MkMediaImage',
-	component: MkMediaImage,
-} satisfies Meta<typeof MkMediaImage>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMediaImage,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMediaImage v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMediaImage>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMediaList.stories.ts b/packages/frontend/src/components/MkMediaList.stories.ts
deleted file mode 100644
index d88e19c06e..0000000000
--- a/packages/frontend/src/components/MkMediaList.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMediaList from './MkMediaList.vue';
-const meta = {
-	title: 'components/MkMediaList',
-	component: MkMediaList,
-} satisfies Meta<typeof MkMediaList>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMediaList,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMediaList v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMediaList>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMediaVideo.stories.ts b/packages/frontend/src/components/MkMediaVideo.stories.ts
deleted file mode 100644
index 9f94e8ce52..0000000000
--- a/packages/frontend/src/components/MkMediaVideo.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMediaVideo from './MkMediaVideo.vue';
-const meta = {
-	title: 'components/MkMediaVideo',
-	component: MkMediaVideo,
-} satisfies Meta<typeof MkMediaVideo>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMediaVideo,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMediaVideo v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMediaVideo>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMention.stories.ts b/packages/frontend/src/components/MkMention.stories.ts
deleted file mode 100644
index ef88a5a6bc..0000000000
--- a/packages/frontend/src/components/MkMention.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMention from './MkMention.vue';
-const meta = {
-	title: 'components/MkMention',
-	component: MkMention,
-} satisfies Meta<typeof MkMention>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMention,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMention v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMention>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMenu.child.stories.ts b/packages/frontend/src/components/MkMenu.child.stories.ts
deleted file mode 100644
index 5e84136437..0000000000
--- a/packages/frontend/src/components/MkMenu.child.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMenu_child from './MkMenu.child.vue';
-const meta = {
-	title: 'components/MkMenu.child',
-	component: MkMenu_child,
-} satisfies Meta<typeof MkMenu_child>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMenu_child,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMenu_child v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMenu_child>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMenu.stories.ts b/packages/frontend/src/components/MkMenu.stories.ts
deleted file mode 100644
index 557ce5363a..0000000000
--- a/packages/frontend/src/components/MkMenu.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMenu from './MkMenu.vue';
-const meta = {
-	title: 'components/MkMenu',
-	component: MkMenu,
-} satisfies Meta<typeof MkMenu>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMenu,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMenu v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMenu>;
-export default meta;
diff --git a/packages/frontend/src/components/MkMiniChart.stories.ts b/packages/frontend/src/components/MkMiniChart.stories.ts
deleted file mode 100644
index f26c74446d..0000000000
--- a/packages/frontend/src/components/MkMiniChart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMiniChart from './MkMiniChart.vue';
-const meta = {
-	title: 'components/MkMiniChart',
-	component: MkMiniChart,
-} satisfies Meta<typeof MkMiniChart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMiniChart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMiniChart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMiniChart>;
-export default meta;
diff --git a/packages/frontend/src/components/MkModal.stories.ts b/packages/frontend/src/components/MkModal.stories.ts
deleted file mode 100644
index baaf79dc71..0000000000
--- a/packages/frontend/src/components/MkModal.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkModal from './MkModal.vue';
-const meta = {
-	title: 'components/MkModal',
-	component: MkModal,
-} satisfies Meta<typeof MkModal>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkModal,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkModal v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkModal>;
-export default meta;
diff --git a/packages/frontend/src/components/MkModalPageWindow.stories.ts b/packages/frontend/src/components/MkModalPageWindow.stories.ts
deleted file mode 100644
index eebd26502f..0000000000
--- a/packages/frontend/src/components/MkModalPageWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkModalPageWindow from './MkModalPageWindow.vue';
-const meta = {
-	title: 'components/MkModalPageWindow',
-	component: MkModalPageWindow,
-} satisfies Meta<typeof MkModalPageWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkModalPageWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkModalPageWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkModalPageWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkModalWindow.stories.ts b/packages/frontend/src/components/MkModalWindow.stories.ts
deleted file mode 100644
index fddf98574b..0000000000
--- a/packages/frontend/src/components/MkModalWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkModalWindow from './MkModalWindow.vue';
-const meta = {
-	title: 'components/MkModalWindow',
-	component: MkModalWindow,
-} satisfies Meta<typeof MkModalWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkModalWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkModalWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkModalWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNote.stories.ts b/packages/frontend/src/components/MkNote.stories.ts
deleted file mode 100644
index d7a82cffd3..0000000000
--- a/packages/frontend/src/components/MkNote.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNote from './MkNote.vue';
-const meta = {
-	title: 'components/MkNote',
-	component: MkNote,
-} satisfies Meta<typeof MkNote>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNote,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNote v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNote>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNoteDetailed.stories.ts b/packages/frontend/src/components/MkNoteDetailed.stories.ts
deleted file mode 100644
index abed199c52..0000000000
--- a/packages/frontend/src/components/MkNoteDetailed.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNoteDetailed from './MkNoteDetailed.vue';
-const meta = {
-	title: 'components/MkNoteDetailed',
-	component: MkNoteDetailed,
-} satisfies Meta<typeof MkNoteDetailed>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNoteDetailed,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNoteDetailed v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNoteDetailed>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNoteHeader.stories.ts b/packages/frontend/src/components/MkNoteHeader.stories.ts
deleted file mode 100644
index d8723eea42..0000000000
--- a/packages/frontend/src/components/MkNoteHeader.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNoteHeader from './MkNoteHeader.vue';
-const meta = {
-	title: 'components/MkNoteHeader',
-	component: MkNoteHeader,
-} satisfies Meta<typeof MkNoteHeader>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNoteHeader,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNoteHeader v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNoteHeader>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNotePreview.stories.ts b/packages/frontend/src/components/MkNotePreview.stories.ts
deleted file mode 100644
index a00795f9ba..0000000000
--- a/packages/frontend/src/components/MkNotePreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNotePreview from './MkNotePreview.vue';
-const meta = {
-	title: 'components/MkNotePreview',
-	component: MkNotePreview,
-} satisfies Meta<typeof MkNotePreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNotePreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNotePreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNotePreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNoteSimple.stories.ts b/packages/frontend/src/components/MkNoteSimple.stories.ts
deleted file mode 100644
index 148089d829..0000000000
--- a/packages/frontend/src/components/MkNoteSimple.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNoteSimple from './MkNoteSimple.vue';
-const meta = {
-	title: 'components/MkNoteSimple',
-	component: MkNoteSimple,
-} satisfies Meta<typeof MkNoteSimple>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNoteSimple,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNoteSimple v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNoteSimple>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNoteSub.stories.ts b/packages/frontend/src/components/MkNoteSub.stories.ts
deleted file mode 100644
index dc3fad2f81..0000000000
--- a/packages/frontend/src/components/MkNoteSub.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNoteSub from './MkNoteSub.vue';
-const meta = {
-	title: 'components/MkNoteSub',
-	component: MkNoteSub,
-} satisfies Meta<typeof MkNoteSub>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNoteSub,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNoteSub v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNoteSub>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNotes.stories.ts b/packages/frontend/src/components/MkNotes.stories.ts
deleted file mode 100644
index 8fe2d31b4c..0000000000
--- a/packages/frontend/src/components/MkNotes.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNotes from './MkNotes.vue';
-const meta = {
-	title: 'components/MkNotes',
-	component: MkNotes,
-} satisfies Meta<typeof MkNotes>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNotes,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNotes v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNotes>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNotification.stories.ts b/packages/frontend/src/components/MkNotification.stories.ts
deleted file mode 100644
index 3612d13107..0000000000
--- a/packages/frontend/src/components/MkNotification.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNotification from './MkNotification.vue';
-const meta = {
-	title: 'components/MkNotification',
-	component: MkNotification,
-} satisfies Meta<typeof MkNotification>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNotification,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNotification v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNotification>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts b/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
deleted file mode 100644
index ad5e055d04..0000000000
--- a/packages/frontend/src/components/MkNotificationSettingWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNotificationSettingWindow from './MkNotificationSettingWindow.vue';
-const meta = {
-	title: 'components/MkNotificationSettingWindow',
-	component: MkNotificationSettingWindow,
-} satisfies Meta<typeof MkNotificationSettingWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNotificationSettingWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNotificationSettingWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNotificationSettingWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNotifications.stories.ts b/packages/frontend/src/components/MkNotifications.stories.ts
deleted file mode 100644
index 5de01c2f92..0000000000
--- a/packages/frontend/src/components/MkNotifications.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNotifications from './MkNotifications.vue';
-const meta = {
-	title: 'components/MkNotifications',
-	component: MkNotifications,
-} satisfies Meta<typeof MkNotifications>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNotifications,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNotifications v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNotifications>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNumber.stories.ts b/packages/frontend/src/components/MkNumber.stories.ts
deleted file mode 100644
index 1689bb431e..0000000000
--- a/packages/frontend/src/components/MkNumber.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNumber from './MkNumber.vue';
-const meta = {
-	title: 'components/MkNumber',
-	component: MkNumber,
-} satisfies Meta<typeof MkNumber>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNumber,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNumber v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNumber>;
-export default meta;
diff --git a/packages/frontend/src/components/MkNumberDiff.stories.ts b/packages/frontend/src/components/MkNumberDiff.stories.ts
deleted file mode 100644
index bc281e62aa..0000000000
--- a/packages/frontend/src/components/MkNumberDiff.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkNumberDiff from './MkNumberDiff.vue';
-const meta = {
-	title: 'components/MkNumberDiff',
-	component: MkNumberDiff,
-} satisfies Meta<typeof MkNumberDiff>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkNumberDiff,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkNumberDiff v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkNumberDiff>;
-export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.stories.ts b/packages/frontend/src/components/MkObjectView.stories.ts
deleted file mode 100644
index 90c446fbdb..0000000000
--- a/packages/frontend/src/components/MkObjectView.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkObjectView from './MkObjectView.vue';
-const meta = {
-	title: 'components/MkObjectView',
-	component: MkObjectView,
-} satisfies Meta<typeof MkObjectView>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkObjectView,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkObjectView v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkObjectView>;
-export default meta;
diff --git a/packages/frontend/src/components/MkObjectView.value.stories.ts b/packages/frontend/src/components/MkObjectView.value.stories.ts
deleted file mode 100644
index 24b0e15531..0000000000
--- a/packages/frontend/src/components/MkObjectView.value.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkObjectView_value from './MkObjectView.value.vue';
-const meta = {
-	title: 'components/MkObjectView.value',
-	component: MkObjectView_value,
-} satisfies Meta<typeof MkObjectView_value>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkObjectView_value,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkObjectView_value v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkObjectView_value>;
-export default meta;
diff --git a/packages/frontend/src/components/MkOmit.stories.ts b/packages/frontend/src/components/MkOmit.stories.ts
deleted file mode 100644
index 06963423bd..0000000000
--- a/packages/frontend/src/components/MkOmit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkOmit from './MkOmit.vue';
-const meta = {
-	title: 'components/MkOmit',
-	component: MkOmit,
-} satisfies Meta<typeof MkOmit>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkOmit,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkOmit v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkOmit>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPagePreview.stories.ts b/packages/frontend/src/components/MkPagePreview.stories.ts
deleted file mode 100644
index d1ddf6707b..0000000000
--- a/packages/frontend/src/components/MkPagePreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPagePreview from './MkPagePreview.vue';
-const meta = {
-	title: 'components/MkPagePreview',
-	component: MkPagePreview,
-} satisfies Meta<typeof MkPagePreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPagePreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPagePreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPagePreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPageWindow.stories.ts b/packages/frontend/src/components/MkPageWindow.stories.ts
deleted file mode 100644
index 334b3bc292..0000000000
--- a/packages/frontend/src/components/MkPageWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPageWindow from './MkPageWindow.vue';
-const meta = {
-	title: 'components/MkPageWindow',
-	component: MkPageWindow,
-} satisfies Meta<typeof MkPageWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPageWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPageWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPageWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPagination.stories.ts b/packages/frontend/src/components/MkPagination.stories.ts
deleted file mode 100644
index 3bf7fb92bd..0000000000
--- a/packages/frontend/src/components/MkPagination.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPagination from './MkPagination.vue';
-const meta = {
-	title: 'components/MkPagination',
-	component: MkPagination,
-} satisfies Meta<typeof MkPagination>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPagination,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPagination v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPagination>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPlusOneEffect.stories.ts b/packages/frontend/src/components/MkPlusOneEffect.stories.ts
deleted file mode 100644
index 6708f2ba61..0000000000
--- a/packages/frontend/src/components/MkPlusOneEffect.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPlusOneEffect from './MkPlusOneEffect.vue';
-const meta = {
-	title: 'components/MkPlusOneEffect',
-	component: MkPlusOneEffect,
-} satisfies Meta<typeof MkPlusOneEffect>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPlusOneEffect,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPlusOneEffect v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPlusOneEffect>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPoll.stories.ts b/packages/frontend/src/components/MkPoll.stories.ts
deleted file mode 100644
index dbab8671dd..0000000000
--- a/packages/frontend/src/components/MkPoll.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPoll from './MkPoll.vue';
-const meta = {
-	title: 'components/MkPoll',
-	component: MkPoll,
-} satisfies Meta<typeof MkPoll>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPoll,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPoll v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPoll>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPollEditor.stories.ts b/packages/frontend/src/components/MkPollEditor.stories.ts
deleted file mode 100644
index 8d26f2cbfb..0000000000
--- a/packages/frontend/src/components/MkPollEditor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPollEditor from './MkPollEditor.vue';
-const meta = {
-	title: 'components/MkPollEditor',
-	component: MkPollEditor,
-} satisfies Meta<typeof MkPollEditor>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPollEditor,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPollEditor v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPollEditor>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPopupMenu.stories.ts b/packages/frontend/src/components/MkPopupMenu.stories.ts
deleted file mode 100644
index 2727ae37a3..0000000000
--- a/packages/frontend/src/components/MkPopupMenu.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPopupMenu from './MkPopupMenu.vue';
-const meta = {
-	title: 'components/MkPopupMenu',
-	component: MkPopupMenu,
-} satisfies Meta<typeof MkPopupMenu>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPopupMenu,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPopupMenu v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPopupMenu>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPostForm.stories.ts b/packages/frontend/src/components/MkPostForm.stories.ts
deleted file mode 100644
index e9623581a7..0000000000
--- a/packages/frontend/src/components/MkPostForm.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPostForm from './MkPostForm.vue';
-const meta = {
-	title: 'components/MkPostForm',
-	component: MkPostForm,
-} satisfies Meta<typeof MkPostForm>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPostForm,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPostForm v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPostForm>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPostFormAttaches.stories.ts b/packages/frontend/src/components/MkPostFormAttaches.stories.ts
deleted file mode 100644
index 26ea2a43f4..0000000000
--- a/packages/frontend/src/components/MkPostFormAttaches.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPostFormAttaches from './MkPostFormAttaches.vue';
-const meta = {
-	title: 'components/MkPostFormAttaches',
-	component: MkPostFormAttaches,
-} satisfies Meta<typeof MkPostFormAttaches>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPostFormAttaches,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPostFormAttaches v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPostFormAttaches>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPostFormDialog.stories.ts b/packages/frontend/src/components/MkPostFormDialog.stories.ts
deleted file mode 100644
index 3b79730501..0000000000
--- a/packages/frontend/src/components/MkPostFormDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPostFormDialog from './MkPostFormDialog.vue';
-const meta = {
-	title: 'components/MkPostFormDialog',
-	component: MkPostFormDialog,
-} satisfies Meta<typeof MkPostFormDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPostFormDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPostFormDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPostFormDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts b/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
deleted file mode 100644
index 664ed0a447..0000000000
--- a/packages/frontend/src/components/MkPushNotificationAllowButton.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPushNotificationAllowButton from './MkPushNotificationAllowButton.vue';
-const meta = {
-	title: 'components/MkPushNotificationAllowButton',
-	component: MkPushNotificationAllowButton,
-} satisfies Meta<typeof MkPushNotificationAllowButton>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPushNotificationAllowButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPushNotificationAllowButton v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPushNotificationAllowButton>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRadio.stories.ts b/packages/frontend/src/components/MkRadio.stories.ts
deleted file mode 100644
index 728b864fca..0000000000
--- a/packages/frontend/src/components/MkRadio.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRadio from './MkRadio.vue';
-const meta = {
-	title: 'components/MkRadio',
-	component: MkRadio,
-} satisfies Meta<typeof MkRadio>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRadio,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRadio v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRadio>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRadios.stories.ts b/packages/frontend/src/components/MkRadios.stories.ts
deleted file mode 100644
index b5059ea47c..0000000000
--- a/packages/frontend/src/components/MkRadios.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRadios from './MkRadios.vue';
-const meta = {
-	title: 'components/MkRadios',
-	component: MkRadios,
-} satisfies Meta<typeof MkRadios>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRadios,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRadios v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRadios>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRange.stories.ts b/packages/frontend/src/components/MkRange.stories.ts
deleted file mode 100644
index 8b68f4d1c3..0000000000
--- a/packages/frontend/src/components/MkRange.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRange from './MkRange.vue';
-const meta = {
-	title: 'components/MkRange',
-	component: MkRange,
-} satisfies Meta<typeof MkRange>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRange,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRange v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRange>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts b/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
deleted file mode 100644
index 16041af5ac..0000000000
--- a/packages/frontend/src/components/MkReactedUsersDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactedUsersDialog from './MkReactedUsersDialog.vue';
-const meta = {
-	title: 'components/MkReactedUsersDialog',
-	component: MkReactedUsersDialog,
-} satisfies Meta<typeof MkReactedUsersDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactedUsersDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactedUsersDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactedUsersDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionEffect.stories.ts b/packages/frontend/src/components/MkReactionEffect.stories.ts
deleted file mode 100644
index 2d5599c147..0000000000
--- a/packages/frontend/src/components/MkReactionEffect.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionEffect from './MkReactionEffect.vue';
-const meta = {
-	title: 'components/MkReactionEffect',
-	component: MkReactionEffect,
-} satisfies Meta<typeof MkReactionEffect>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionEffect,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionEffect v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionEffect>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionIcon.stories.ts b/packages/frontend/src/components/MkReactionIcon.stories.ts
deleted file mode 100644
index 309e86aded..0000000000
--- a/packages/frontend/src/components/MkReactionIcon.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionIcon from './MkReactionIcon.vue';
-const meta = {
-	title: 'components/MkReactionIcon',
-	component: MkReactionIcon,
-} satisfies Meta<typeof MkReactionIcon>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionIcon,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionIcon v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionIcon>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionTooltip.stories.ts b/packages/frontend/src/components/MkReactionTooltip.stories.ts
deleted file mode 100644
index 41bb73c7bf..0000000000
--- a/packages/frontend/src/components/MkReactionTooltip.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionTooltip from './MkReactionTooltip.vue';
-const meta = {
-	title: 'components/MkReactionTooltip',
-	component: MkReactionTooltip,
-} satisfies Meta<typeof MkReactionTooltip>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionTooltip,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionTooltip v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionTooltip>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts b/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
deleted file mode 100644
index 9e54ce7401..0000000000
--- a/packages/frontend/src/components/MkReactionsViewer.details.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionsViewer_details from './MkReactionsViewer.details.vue';
-const meta = {
-	title: 'components/MkReactionsViewer.details',
-	component: MkReactionsViewer_details,
-} satisfies Meta<typeof MkReactionsViewer_details>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionsViewer_details,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionsViewer_details v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionsViewer_details>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts b/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
deleted file mode 100644
index 9e35252beb..0000000000
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionsViewer_reaction from './MkReactionsViewer.reaction.vue';
-const meta = {
-	title: 'components/MkReactionsViewer.reaction',
-	component: MkReactionsViewer_reaction,
-} satisfies Meta<typeof MkReactionsViewer_reaction>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionsViewer_reaction,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionsViewer_reaction v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionsViewer_reaction>;
-export default meta;
diff --git a/packages/frontend/src/components/MkReactionsViewer.stories.ts b/packages/frontend/src/components/MkReactionsViewer.stories.ts
deleted file mode 100644
index 706428fb01..0000000000
--- a/packages/frontend/src/components/MkReactionsViewer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkReactionsViewer from './MkReactionsViewer.vue';
-const meta = {
-	title: 'components/MkReactionsViewer',
-	component: MkReactionsViewer,
-} satisfies Meta<typeof MkReactionsViewer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkReactionsViewer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkReactionsViewer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkReactionsViewer>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRemoteCaution.stories.ts b/packages/frontend/src/components/MkRemoteCaution.stories.ts
deleted file mode 100644
index 3b91a07153..0000000000
--- a/packages/frontend/src/components/MkRemoteCaution.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRemoteCaution from './MkRemoteCaution.vue';
-const meta = {
-	title: 'components/MkRemoteCaution',
-	component: MkRemoteCaution,
-} satisfies Meta<typeof MkRemoteCaution>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRemoteCaution,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRemoteCaution v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRemoteCaution>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts b/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
deleted file mode 100644
index 3b7872b189..0000000000
--- a/packages/frontend/src/components/MkRetentionHeatmap.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRetentionHeatmap from './MkRetentionHeatmap.vue';
-const meta = {
-	title: 'components/MkRetentionHeatmap',
-	component: MkRetentionHeatmap,
-} satisfies Meta<typeof MkRetentionHeatmap>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRetentionHeatmap,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRetentionHeatmap v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRetentionHeatmap>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRippleEffect.stories.ts b/packages/frontend/src/components/MkRippleEffect.stories.ts
deleted file mode 100644
index 04eb7cc1d4..0000000000
--- a/packages/frontend/src/components/MkRippleEffect.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRippleEffect from './MkRippleEffect.vue';
-const meta = {
-	title: 'components/MkRippleEffect',
-	component: MkRippleEffect,
-} satisfies Meta<typeof MkRippleEffect>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRippleEffect,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRippleEffect v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRippleEffect>;
-export default meta;
diff --git a/packages/frontend/src/components/MkRolePreview.stories.ts b/packages/frontend/src/components/MkRolePreview.stories.ts
deleted file mode 100644
index 15953c7171..0000000000
--- a/packages/frontend/src/components/MkRolePreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkRolePreview from './MkRolePreview.vue';
-const meta = {
-	title: 'components/MkRolePreview',
-	component: MkRolePreview,
-} satisfies Meta<typeof MkRolePreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkRolePreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkRolePreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkRolePreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSample.stories.ts b/packages/frontend/src/components/MkSample.stories.ts
deleted file mode 100644
index b1e6459cf3..0000000000
--- a/packages/frontend/src/components/MkSample.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSample from './MkSample.vue';
-const meta = {
-	title: 'components/MkSample',
-	component: MkSample,
-} satisfies Meta<typeof MkSample>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSample,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSample v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSample>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSelect.stories.ts b/packages/frontend/src/components/MkSelect.stories.ts
deleted file mode 100644
index 8012045973..0000000000
--- a/packages/frontend/src/components/MkSelect.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSelect from './MkSelect.vue';
-const meta = {
-	title: 'components/MkSelect',
-	component: MkSelect,
-} satisfies Meta<typeof MkSelect>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSelect,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSelect v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSelect>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSignin.stories.ts b/packages/frontend/src/components/MkSignin.stories.ts
deleted file mode 100644
index 1ac0973cef..0000000000
--- a/packages/frontend/src/components/MkSignin.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSignin from './MkSignin.vue';
-const meta = {
-	title: 'components/MkSignin',
-	component: MkSignin,
-} satisfies Meta<typeof MkSignin>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSignin,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSignin v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSignin>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSigninDialog.stories.ts b/packages/frontend/src/components/MkSigninDialog.stories.ts
deleted file mode 100644
index 3e4a3a7cb7..0000000000
--- a/packages/frontend/src/components/MkSigninDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSigninDialog from './MkSigninDialog.vue';
-const meta = {
-	title: 'components/MkSigninDialog',
-	component: MkSigninDialog,
-} satisfies Meta<typeof MkSigninDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSigninDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSigninDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSigninDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSignup.stories.ts b/packages/frontend/src/components/MkSignup.stories.ts
deleted file mode 100644
index 8372680014..0000000000
--- a/packages/frontend/src/components/MkSignup.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSignup from './MkSignup.vue';
-const meta = {
-	title: 'components/MkSignup',
-	component: MkSignup,
-} satisfies Meta<typeof MkSignup>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSignup,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSignup v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSignup>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSignupDialog.stories.ts b/packages/frontend/src/components/MkSignupDialog.stories.ts
deleted file mode 100644
index 7eb70e6a88..0000000000
--- a/packages/frontend/src/components/MkSignupDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSignupDialog from './MkSignupDialog.vue';
-const meta = {
-	title: 'components/MkSignupDialog',
-	component: MkSignupDialog,
-} satisfies Meta<typeof MkSignupDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSignupDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSignupDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSignupDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSparkle.stories.ts b/packages/frontend/src/components/MkSparkle.stories.ts
deleted file mode 100644
index 6c1dca90d9..0000000000
--- a/packages/frontend/src/components/MkSparkle.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSparkle from './MkSparkle.vue';
-const meta = {
-	title: 'components/MkSparkle',
-	component: MkSparkle,
-} satisfies Meta<typeof MkSparkle>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSparkle,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSparkle v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSparkle>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSubNoteContent.stories.ts b/packages/frontend/src/components/MkSubNoteContent.stories.ts
deleted file mode 100644
index fa9c0bb7f0..0000000000
--- a/packages/frontend/src/components/MkSubNoteContent.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSubNoteContent from './MkSubNoteContent.vue';
-const meta = {
-	title: 'components/MkSubNoteContent',
-	component: MkSubNoteContent,
-} satisfies Meta<typeof MkSubNoteContent>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSubNoteContent,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSubNoteContent v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSubNoteContent>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSuperMenu.stories.ts b/packages/frontend/src/components/MkSuperMenu.stories.ts
deleted file mode 100644
index 9ef7906884..0000000000
--- a/packages/frontend/src/components/MkSuperMenu.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSuperMenu from './MkSuperMenu.vue';
-const meta = {
-	title: 'components/MkSuperMenu',
-	component: MkSuperMenu,
-} satisfies Meta<typeof MkSuperMenu>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSuperMenu,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSuperMenu v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSuperMenu>;
-export default meta;
diff --git a/packages/frontend/src/components/MkSwitch.stories.ts b/packages/frontend/src/components/MkSwitch.stories.ts
deleted file mode 100644
index f01191be83..0000000000
--- a/packages/frontend/src/components/MkSwitch.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSwitch from './MkSwitch.vue';
-const meta = {
-	title: 'components/MkSwitch',
-	component: MkSwitch,
-} satisfies Meta<typeof MkSwitch>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSwitch,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSwitch v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSwitch>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTab.stories.ts b/packages/frontend/src/components/MkTab.stories.ts
deleted file mode 100644
index 1ff6c06a0d..0000000000
--- a/packages/frontend/src/components/MkTab.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTab from './MkTab.vue';
-const meta = {
-	title: 'components/MkTab',
-	component: MkTab,
-} satisfies Meta<typeof MkTab>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTab,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTab v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTab>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTagCloud.stories.ts b/packages/frontend/src/components/MkTagCloud.stories.ts
deleted file mode 100644
index 83aba5409b..0000000000
--- a/packages/frontend/src/components/MkTagCloud.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTagCloud from './MkTagCloud.vue';
-const meta = {
-	title: 'components/MkTagCloud',
-	component: MkTagCloud,
-} satisfies Meta<typeof MkTagCloud>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTagCloud,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTagCloud v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTagCloud>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTextarea.stories.ts b/packages/frontend/src/components/MkTextarea.stories.ts
deleted file mode 100644
index 9bfc2a23af..0000000000
--- a/packages/frontend/src/components/MkTextarea.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTextarea from './MkTextarea.vue';
-const meta = {
-	title: 'components/MkTextarea',
-	component: MkTextarea,
-} satisfies Meta<typeof MkTextarea>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTextarea,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTextarea v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTextarea>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTimeline.stories.ts b/packages/frontend/src/components/MkTimeline.stories.ts
deleted file mode 100644
index 511bdead17..0000000000
--- a/packages/frontend/src/components/MkTimeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTimeline from './MkTimeline.vue';
-const meta = {
-	title: 'components/MkTimeline',
-	component: MkTimeline,
-} satisfies Meta<typeof MkTimeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTimeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTimeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTimeline>;
-export default meta;
diff --git a/packages/frontend/src/components/MkToast.stories.ts b/packages/frontend/src/components/MkToast.stories.ts
deleted file mode 100644
index c5f80f61be..0000000000
--- a/packages/frontend/src/components/MkToast.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkToast from './MkToast.vue';
-const meta = {
-	title: 'components/MkToast',
-	component: MkToast,
-} satisfies Meta<typeof MkToast>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkToast,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkToast v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkToast>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts b/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
deleted file mode 100644
index 5229d6d6c6..0000000000
--- a/packages/frontend/src/components/MkTokenGenerateWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTokenGenerateWindow from './MkTokenGenerateWindow.vue';
-const meta = {
-	title: 'components/MkTokenGenerateWindow',
-	component: MkTokenGenerateWindow,
-} satisfies Meta<typeof MkTokenGenerateWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTokenGenerateWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTokenGenerateWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTokenGenerateWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkTooltip.stories.ts b/packages/frontend/src/components/MkTooltip.stories.ts
deleted file mode 100644
index 19f22ede15..0000000000
--- a/packages/frontend/src/components/MkTooltip.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTooltip from './MkTooltip.vue';
-const meta = {
-	title: 'components/MkTooltip',
-	component: MkTooltip,
-} satisfies Meta<typeof MkTooltip>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTooltip,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTooltip v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTooltip>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUpdated.stories.ts b/packages/frontend/src/components/MkUpdated.stories.ts
deleted file mode 100644
index 58069bd1d9..0000000000
--- a/packages/frontend/src/components/MkUpdated.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUpdated from './MkUpdated.vue';
-const meta = {
-	title: 'components/MkUpdated',
-	component: MkUpdated,
-} satisfies Meta<typeof MkUpdated>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUpdated,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUpdated v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUpdated>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreview.stories.ts b/packages/frontend/src/components/MkUrlPreview.stories.ts
deleted file mode 100644
index 29a393a5ac..0000000000
--- a/packages/frontend/src/components/MkUrlPreview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUrlPreview from './MkUrlPreview.vue';
-const meta = {
-	title: 'components/MkUrlPreview',
-	component: MkUrlPreview,
-} satisfies Meta<typeof MkUrlPreview>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUrlPreview,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUrlPreview v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUrlPreview>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts b/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
deleted file mode 100644
index f9df0987a1..0000000000
--- a/packages/frontend/src/components/MkUrlPreviewPopup.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUrlPreviewPopup from './MkUrlPreviewPopup.vue';
-const meta = {
-	title: 'components/MkUrlPreviewPopup',
-	component: MkUrlPreviewPopup,
-} satisfies Meta<typeof MkUrlPreviewPopup>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUrlPreviewPopup,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUrlPreviewPopup v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUrlPreviewPopup>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserCardMini.stories.ts b/packages/frontend/src/components/MkUserCardMini.stories.ts
deleted file mode 100644
index 8ed97c4b49..0000000000
--- a/packages/frontend/src/components/MkUserCardMini.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserCardMini from './MkUserCardMini.vue';
-const meta = {
-	title: 'components/MkUserCardMini',
-	component: MkUserCardMini,
-} satisfies Meta<typeof MkUserCardMini>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserCardMini,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserCardMini v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserCardMini>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserInfo.stories.ts b/packages/frontend/src/components/MkUserInfo.stories.ts
deleted file mode 100644
index 553df44660..0000000000
--- a/packages/frontend/src/components/MkUserInfo.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserInfo from './MkUserInfo.vue';
-const meta = {
-	title: 'components/MkUserInfo',
-	component: MkUserInfo,
-} satisfies Meta<typeof MkUserInfo>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserInfo,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserInfo v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserInfo>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserList.stories.ts b/packages/frontend/src/components/MkUserList.stories.ts
deleted file mode 100644
index 927364596b..0000000000
--- a/packages/frontend/src/components/MkUserList.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserList from './MkUserList.vue';
-const meta = {
-	title: 'components/MkUserList',
-	component: MkUserList,
-} satisfies Meta<typeof MkUserList>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserList,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserList v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserList>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts b/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
deleted file mode 100644
index c576b91b57..0000000000
--- a/packages/frontend/src/components/MkUserOnlineIndicator.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserOnlineIndicator from './MkUserOnlineIndicator.vue';
-const meta = {
-	title: 'components/MkUserOnlineIndicator',
-	component: MkUserOnlineIndicator,
-} satisfies Meta<typeof MkUserOnlineIndicator>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserOnlineIndicator,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserOnlineIndicator v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserOnlineIndicator>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserPopup.stories.ts b/packages/frontend/src/components/MkUserPopup.stories.ts
deleted file mode 100644
index 5a30d4ba4f..0000000000
--- a/packages/frontend/src/components/MkUserPopup.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserPopup from './MkUserPopup.vue';
-const meta = {
-	title: 'components/MkUserPopup',
-	component: MkUserPopup,
-} satisfies Meta<typeof MkUserPopup>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserPopup,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserPopup v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserPopup>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUserSelectDialog.stories.ts b/packages/frontend/src/components/MkUserSelectDialog.stories.ts
deleted file mode 100644
index ffda531ed3..0000000000
--- a/packages/frontend/src/components/MkUserSelectDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserSelectDialog from './MkUserSelectDialog.vue';
-const meta = {
-	title: 'components/MkUserSelectDialog',
-	component: MkUserSelectDialog,
-} satisfies Meta<typeof MkUserSelectDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserSelectDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserSelectDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserSelectDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkUsersTooltip.stories.ts b/packages/frontend/src/components/MkUsersTooltip.stories.ts
deleted file mode 100644
index 6fa843e8b5..0000000000
--- a/packages/frontend/src/components/MkUsersTooltip.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUsersTooltip from './MkUsersTooltip.vue';
-const meta = {
-	title: 'components/MkUsersTooltip',
-	component: MkUsersTooltip,
-} satisfies Meta<typeof MkUsersTooltip>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUsersTooltip,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUsersTooltip v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUsersTooltip>;
-export default meta;
diff --git a/packages/frontend/src/components/MkVisibilityPicker.stories.ts b/packages/frontend/src/components/MkVisibilityPicker.stories.ts
deleted file mode 100644
index 3d62ddd9d0..0000000000
--- a/packages/frontend/src/components/MkVisibilityPicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkVisibilityPicker from './MkVisibilityPicker.vue';
-const meta = {
-	title: 'components/MkVisibilityPicker',
-	component: MkVisibilityPicker,
-} satisfies Meta<typeof MkVisibilityPicker>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkVisibilityPicker,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkVisibilityPicker v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkVisibilityPicker>;
-export default meta;
diff --git a/packages/frontend/src/components/MkWaitingDialog.stories.ts b/packages/frontend/src/components/MkWaitingDialog.stories.ts
deleted file mode 100644
index b2314523d9..0000000000
--- a/packages/frontend/src/components/MkWaitingDialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkWaitingDialog from './MkWaitingDialog.vue';
-const meta = {
-	title: 'components/MkWaitingDialog',
-	component: MkWaitingDialog,
-} satisfies Meta<typeof MkWaitingDialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkWaitingDialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkWaitingDialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkWaitingDialog>;
-export default meta;
diff --git a/packages/frontend/src/components/MkWidgets.stories.ts b/packages/frontend/src/components/MkWidgets.stories.ts
deleted file mode 100644
index 39e91faafd..0000000000
--- a/packages/frontend/src/components/MkWidgets.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkWidgets from './MkWidgets.vue';
-const meta = {
-	title: 'components/MkWidgets',
-	component: MkWidgets,
-} satisfies Meta<typeof MkWidgets>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkWidgets,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkWidgets v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkWidgets>;
-export default meta;
diff --git a/packages/frontend/src/components/MkWindow.stories.ts b/packages/frontend/src/components/MkWindow.stories.ts
deleted file mode 100644
index fcc9bd3002..0000000000
--- a/packages/frontend/src/components/MkWindow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkWindow from './MkWindow.vue';
-const meta = {
-	title: 'components/MkWindow',
-	component: MkWindow,
-} satisfies Meta<typeof MkWindow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkWindow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkWindow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkWindow>;
-export default meta;
diff --git a/packages/frontend/src/components/MkYouTubePlayer.stories.ts b/packages/frontend/src/components/MkYouTubePlayer.stories.ts
deleted file mode 100644
index 79191bbcd0..0000000000
--- a/packages/frontend/src/components/MkYouTubePlayer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkYouTubePlayer from './MkYouTubePlayer.vue';
-const meta = {
-	title: 'components/MkYouTubePlayer',
-	component: MkYouTubePlayer,
-} satisfies Meta<typeof MkYouTubePlayer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkYouTubePlayer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkYouTubePlayer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkYouTubePlayer>;
-export default meta;
diff --git a/packages/frontend/src/components/form/link.stories.ts b/packages/frontend/src/components/form/link.stories.ts
deleted file mode 100644
index b0ac7ee504..0000000000
--- a/packages/frontend/src/components/form/link.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import link_ from './link.vue';
-const meta = {
-	title: 'components/form/link',
-	component: link_,
-} satisfies Meta<typeof link_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				link_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<link_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof link_>;
-export default meta;
diff --git a/packages/frontend/src/components/form/section.stories.ts b/packages/frontend/src/components/form/section.stories.ts
deleted file mode 100644
index 0da19356e9..0000000000
--- a/packages/frontend/src/components/form/section.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import section_ from './section.vue';
-const meta = {
-	title: 'components/form/section',
-	component: section_,
-} satisfies Meta<typeof section_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				section_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<section_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof section_>;
-export default meta;
diff --git a/packages/frontend/src/components/form/slot.stories.ts b/packages/frontend/src/components/form/slot.stories.ts
deleted file mode 100644
index 2c441f1156..0000000000
--- a/packages/frontend/src/components/form/slot.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import slot_ from './slot.vue';
-const meta = {
-	title: 'components/form/slot',
-	component: slot_,
-} satisfies Meta<typeof slot_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				slot_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<slot_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof slot_>;
-export default meta;
diff --git a/packages/frontend/src/components/form/split.stories.ts b/packages/frontend/src/components/form/split.stories.ts
deleted file mode 100644
index 5aece4082f..0000000000
--- a/packages/frontend/src/components/form/split.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import split_ from './split.vue';
-const meta = {
-	title: 'components/form/split',
-	component: split_,
-} satisfies Meta<typeof split_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				split_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<split_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof split_>;
-export default meta;
diff --git a/packages/frontend/src/components/form/suspense.stories.ts b/packages/frontend/src/components/form/suspense.stories.ts
deleted file mode 100644
index ccd2d7d099..0000000000
--- a/packages/frontend/src/components/form/suspense.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import suspense_ from './suspense.vue';
-const meta = {
-	title: 'components/form/suspense',
-	component: suspense_,
-} satisfies Meta<typeof suspense_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				suspense_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<suspense_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof suspense_>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
new file mode 100644
index 0000000000..d1e1f33f0e
--- /dev/null
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkLoading from './MkLoading.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkLoading,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkLoading v-bind="props" />',
+		};
+	},
+	args: {
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkLoading>;
+export const Inline = {
+	...Default,
+	args: {
+		...Default.args,
+		inline: true,
+	},
+};
+export const Colored = {
+	...Default,
+	args: {
+		...Default.args,
+		colored: true,
+	},
+};
+export const Mini = {
+	...Default,
+	args: {
+		...Default.args,
+		mini: true,
+	},
+};
+export const Em = {
+	...Default,
+	args: {
+		...Default.args,
+		em: true,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
index a83c41a0ea..dd58d30e7c 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.ts
@@ -1,11 +1,14 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkLoading from './MkLoading.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkLoading',
 	component: MkLoading,
 } satisfies Meta<typeof MkLoading>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkLoading from './MkLoading.vue';
 export const Default = {
 	render(args) {
 		return {
@@ -27,8 +30,36 @@ export const Default = {
 			template: '<MkLoading v-bind="props" />',
 		};
 	},
+	args: {},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkLoading>;
-export default meta;
+export const Inline = {
+	...Default,
+	args: {
+		...Default.args,
+		inline: true,
+	},
+};
+export const Colored = {
+	...Default,
+	args: {
+		...Default.args,
+		colored: true,
+	},
+};
+export const Mini = {
+	...Default,
+	args: {
+		...Default.args,
+		mini: true,
+	},
+};
+export const Em = {
+	...Default,
+	args: {
+		...Default.args,
+		em: true,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
new file mode 100644
index 0000000000..c594b790c3
--- /dev/null
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
@@ -0,0 +1,52 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkMisskeyFlavoredMarkdown,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
+		};
+	},
+	args: {
+		text: 'Hello, world!',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
+export const Plain = {
+	...Default,
+	args: {
+		...Default.args,
+		plain: true,
+	},
+};
+export const Nowrap = {
+	...Default,
+	args: {
+		...Default.args,
+		nowrap: true,
+	},
+};
+export const IsNote = {
+	...Default,
+	args: {
+		...Default.args,
+		isNote: true,
+	},
+};
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 18407d188c..7103f07ae7 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -1,11 +1,14 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 /* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+import { Meta } from '@storybook/vue3';
 const meta = {
 	title: 'components/global/MkMisskeyFlavoredMarkdown',
 	component: MkMisskeyFlavoredMarkdown,
 } satisfies Meta<typeof MkMisskeyFlavoredMarkdown>;
+export default meta;
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
 export const Default = {
 	render(args) {
 		return {
@@ -27,8 +30,31 @@ export const Default = {
 			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
 		};
 	},
+	args: {
+		text: 'Hello, world!',
+	},
 	parameters: {
 		layout: 'centered',
 	},
 } satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
-export default meta;
+export const Plain = {
+	...Default,
+	args: {
+		...Default.args,
+		plain: true,
+	},
+};
+export const Nowrap = {
+	...Default,
+	args: {
+		...Default.args,
+		nowrap: true,
+	},
+};
+export const IsNote = {
+	...Default,
+	args: {
+		...Default.args,
+		isNote: true,
+	},
+};
diff --git a/packages/frontend/src/components/page/page.block.stories.ts b/packages/frontend/src/components/page/page.block.stories.ts
deleted file mode 100644
index 896c99d3af..0000000000
--- a/packages/frontend/src/components/page/page.block.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_block from './page.block.vue';
-const meta = {
-	title: 'components/page/page.block',
-	component: page_block,
-} satisfies Meta<typeof page_block>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_block,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_block v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_block>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.button.stories.ts b/packages/frontend/src/components/page/page.button.stories.ts
deleted file mode 100644
index 6de5a2c3ab..0000000000
--- a/packages/frontend/src/components/page/page.button.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_button from './page.button.vue';
-const meta = {
-	title: 'components/page/page.button',
-	component: page_button,
-} satisfies Meta<typeof page_button>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_button,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_button v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_button>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.canvas.stories.ts b/packages/frontend/src/components/page/page.canvas.stories.ts
deleted file mode 100644
index 18ec9c7873..0000000000
--- a/packages/frontend/src/components/page/page.canvas.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_canvas from './page.canvas.vue';
-const meta = {
-	title: 'components/page/page.canvas',
-	component: page_canvas,
-} satisfies Meta<typeof page_canvas>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_canvas,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_canvas v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_canvas>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.counter.stories.ts b/packages/frontend/src/components/page/page.counter.stories.ts
deleted file mode 100644
index 25380c6b2e..0000000000
--- a/packages/frontend/src/components/page/page.counter.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_counter from './page.counter.vue';
-const meta = {
-	title: 'components/page/page.counter',
-	component: page_counter,
-} satisfies Meta<typeof page_counter>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_counter,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_counter v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_counter>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.if.stories.ts b/packages/frontend/src/components/page/page.if.stories.ts
deleted file mode 100644
index 1f9a77216b..0000000000
--- a/packages/frontend/src/components/page/page.if.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_if from './page.if.vue';
-const meta = {
-	title: 'components/page/page.if',
-	component: page_if,
-} satisfies Meta<typeof page_if>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_if,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_if v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_if>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.image.stories.ts b/packages/frontend/src/components/page/page.image.stories.ts
deleted file mode 100644
index 63d75629fd..0000000000
--- a/packages/frontend/src/components/page/page.image.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_image from './page.image.vue';
-const meta = {
-	title: 'components/page/page.image',
-	component: page_image,
-} satisfies Meta<typeof page_image>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_image,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_image v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_image>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.note.stories.ts b/packages/frontend/src/components/page/page.note.stories.ts
deleted file mode 100644
index 642df514cd..0000000000
--- a/packages/frontend/src/components/page/page.note.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_note from './page.note.vue';
-const meta = {
-	title: 'components/page/page.note',
-	component: page_note,
-} satisfies Meta<typeof page_note>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_note,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_note v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_note>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.number-input.stories.ts b/packages/frontend/src/components/page/page.number-input.stories.ts
deleted file mode 100644
index 671c98fa8a..0000000000
--- a/packages/frontend/src/components/page/page.number-input.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_number_input from './page.number-input.vue';
-const meta = {
-	title: 'components/page/page.number-input',
-	component: page_number_input,
-} satisfies Meta<typeof page_number_input>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_number_input,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_number_input v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_number_input>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.post.stories.ts b/packages/frontend/src/components/page/page.post.stories.ts
deleted file mode 100644
index e089710aab..0000000000
--- a/packages/frontend/src/components/page/page.post.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_post from './page.post.vue';
-const meta = {
-	title: 'components/page/page.post',
-	component: page_post,
-} satisfies Meta<typeof page_post>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_post,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_post v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_post>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.radio-button.stories.ts b/packages/frontend/src/components/page/page.radio-button.stories.ts
deleted file mode 100644
index d7bda72007..0000000000
--- a/packages/frontend/src/components/page/page.radio-button.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_radio_button from './page.radio-button.vue';
-const meta = {
-	title: 'components/page/page.radio-button',
-	component: page_radio_button,
-} satisfies Meta<typeof page_radio_button>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_radio_button,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_radio_button v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_radio_button>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.section.stories.ts b/packages/frontend/src/components/page/page.section.stories.ts
deleted file mode 100644
index 23492d6f29..0000000000
--- a/packages/frontend/src/components/page/page.section.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_section from './page.section.vue';
-const meta = {
-	title: 'components/page/page.section',
-	component: page_section,
-} satisfies Meta<typeof page_section>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_section,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_section v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_section>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.stories.ts b/packages/frontend/src/components/page/page.stories.ts
deleted file mode 100644
index 3b0aa96b8a..0000000000
--- a/packages/frontend/src/components/page/page.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_ from './page.vue';
-const meta = {
-	title: 'components/page/page',
-	component: page_,
-} satisfies Meta<typeof page_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.switch.stories.ts b/packages/frontend/src/components/page/page.switch.stories.ts
deleted file mode 100644
index a8ab15f93d..0000000000
--- a/packages/frontend/src/components/page/page.switch.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_switch from './page.switch.vue';
-const meta = {
-	title: 'components/page/page.switch',
-	component: page_switch,
-} satisfies Meta<typeof page_switch>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_switch,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_switch v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_switch>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.text-input.stories.ts b/packages/frontend/src/components/page/page.text-input.stories.ts
deleted file mode 100644
index 6aa022fec0..0000000000
--- a/packages/frontend/src/components/page/page.text-input.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_text_input from './page.text-input.vue';
-const meta = {
-	title: 'components/page/page.text-input',
-	component: page_text_input,
-} satisfies Meta<typeof page_text_input>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_text_input,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_text_input v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_text_input>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.text.stories.ts b/packages/frontend/src/components/page/page.text.stories.ts
deleted file mode 100644
index ba937dc8af..0000000000
--- a/packages/frontend/src/components/page/page.text.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_text from './page.text.vue';
-const meta = {
-	title: 'components/page/page.text',
-	component: page_text,
-} satisfies Meta<typeof page_text>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_text,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_text v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_text>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea-input.stories.ts b/packages/frontend/src/components/page/page.textarea-input.stories.ts
deleted file mode 100644
index 06142954d2..0000000000
--- a/packages/frontend/src/components/page/page.textarea-input.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_textarea_input from './page.textarea-input.vue';
-const meta = {
-	title: 'components/page/page.textarea-input',
-	component: page_textarea_input,
-} satisfies Meta<typeof page_textarea_input>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_textarea_input,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_textarea_input v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_textarea_input>;
-export default meta;
diff --git a/packages/frontend/src/components/page/page.textarea.stories.ts b/packages/frontend/src/components/page/page.textarea.stories.ts
deleted file mode 100644
index d9337184b9..0000000000
--- a/packages/frontend/src/components/page/page.textarea.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_textarea from './page.textarea.vue';
-const meta = {
-	title: 'components/page/page.textarea',
-	component: page_textarea,
-} satisfies Meta<typeof page_textarea>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_textarea,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_textarea v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof page_textarea>;
-export default meta;
diff --git a/packages/frontend/src/pages/_empty_.stories.ts b/packages/frontend/src/pages/_empty_.stories.ts
deleted file mode 100644
index 489475ff76..0000000000
--- a/packages/frontend/src/pages/_empty_.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _empty_ from './_empty_.vue';
-const meta = {
-	title: 'pages/_empty_',
-	component: _empty_,
-} satisfies Meta<typeof _empty_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_empty_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_empty_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _empty_>;
-export default meta;
diff --git a/packages/frontend/src/pages/_error_.stories.ts b/packages/frontend/src/pages/_error_.stories.ts
deleted file mode 100644
index 7406ea4dea..0000000000
--- a/packages/frontend/src/pages/_error_.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _error_ from './_error_.vue';
-const meta = {
-	title: 'pages/_error_',
-	component: _error_,
-} satisfies Meta<typeof _error_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_error_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_error_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _error_>;
-export default meta;
diff --git a/packages/frontend/src/pages/_loading_.stories.ts b/packages/frontend/src/pages/_loading_.stories.ts
deleted file mode 100644
index a5d5cbbea5..0000000000
--- a/packages/frontend/src/pages/_loading_.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _loading_ from './_loading_.vue';
-const meta = {
-	title: 'pages/_loading_',
-	component: _loading_,
-} satisfies Meta<typeof _loading_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_loading_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_loading_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _loading_>;
-export default meta;
diff --git a/packages/frontend/src/pages/about-misskey.stories.ts b/packages/frontend/src/pages/about-misskey.stories.ts
deleted file mode 100644
index 3143ff9582..0000000000
--- a/packages/frontend/src/pages/about-misskey.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import about_misskey from './about-misskey.vue';
-const meta = {
-	title: 'pages/about-misskey',
-	component: about_misskey,
-} satisfies Meta<typeof about_misskey>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				about_misskey,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<about_misskey v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof about_misskey>;
-export default meta;
diff --git a/packages/frontend/src/pages/about.emojis.stories.ts b/packages/frontend/src/pages/about.emojis.stories.ts
deleted file mode 100644
index 3d95008795..0000000000
--- a/packages/frontend/src/pages/about.emojis.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import about_emojis from './about.emojis.vue';
-const meta = {
-	title: 'pages/about.emojis',
-	component: about_emojis,
-} satisfies Meta<typeof about_emojis>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				about_emojis,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<about_emojis v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof about_emojis>;
-export default meta;
diff --git a/packages/frontend/src/pages/about.federation.stories.ts b/packages/frontend/src/pages/about.federation.stories.ts
deleted file mode 100644
index cf1fc1e611..0000000000
--- a/packages/frontend/src/pages/about.federation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import about_federation from './about.federation.vue';
-const meta = {
-	title: 'pages/about.federation',
-	component: about_federation,
-} satisfies Meta<typeof about_federation>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				about_federation,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<about_federation v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof about_federation>;
-export default meta;
diff --git a/packages/frontend/src/pages/about.stories.ts b/packages/frontend/src/pages/about.stories.ts
deleted file mode 100644
index c8858f3f95..0000000000
--- a/packages/frontend/src/pages/about.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import about_ from './about.vue';
-const meta = {
-	title: 'pages/about',
-	component: about_,
-} satisfies Meta<typeof about_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				about_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<about_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof about_>;
-export default meta;
diff --git a/packages/frontend/src/pages/achievements.stories.ts b/packages/frontend/src/pages/achievements.stories.ts
deleted file mode 100644
index 1817312665..0000000000
--- a/packages/frontend/src/pages/achievements.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import achievements_ from './achievements.vue';
-const meta = {
-	title: 'pages/achievements',
-	component: achievements_,
-} satisfies Meta<typeof achievements_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				achievements_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<achievements_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof achievements_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin-file.stories.ts b/packages/frontend/src/pages/admin-file.stories.ts
deleted file mode 100644
index 57ea46d6a1..0000000000
--- a/packages/frontend/src/pages/admin-file.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import admin_file from './admin-file.vue';
-const meta = {
-	title: 'pages/admin-file',
-	component: admin_file,
-} satisfies Meta<typeof admin_file>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				admin_file,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<admin_file v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof admin_file>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts b/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
deleted file mode 100644
index 1af5513b76..0000000000
--- a/packages/frontend/src/pages/admin/RolesEditorFormula.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import RolesEditorFormula from './RolesEditorFormula.vue';
-const meta = {
-	title: 'pages/admin/RolesEditorFormula',
-	component: RolesEditorFormula,
-} satisfies Meta<typeof RolesEditorFormula>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				RolesEditorFormula,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<RolesEditorFormula v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof RolesEditorFormula>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/_header_.stories.ts b/packages/frontend/src/pages/admin/_header_.stories.ts
deleted file mode 100644
index 47cec03136..0000000000
--- a/packages/frontend/src/pages/admin/_header_.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _header_ from './_header_.vue';
-const meta = {
-	title: 'pages/admin/_header_',
-	component: _header_,
-} satisfies Meta<typeof _header_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_header_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_header_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _header_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/abuses.stories.ts b/packages/frontend/src/pages/admin/abuses.stories.ts
deleted file mode 100644
index 4de75bccb7..0000000000
--- a/packages/frontend/src/pages/admin/abuses.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import abuses_ from './abuses.vue';
-const meta = {
-	title: 'pages/admin/abuses',
-	component: abuses_,
-} satisfies Meta<typeof abuses_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				abuses_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<abuses_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof abuses_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/ads.stories.ts b/packages/frontend/src/pages/admin/ads.stories.ts
deleted file mode 100644
index e56f72a2bf..0000000000
--- a/packages/frontend/src/pages/admin/ads.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import ads_ from './ads.vue';
-const meta = {
-	title: 'pages/admin/ads',
-	component: ads_,
-} satisfies Meta<typeof ads_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				ads_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<ads_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof ads_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/announcements.stories.ts b/packages/frontend/src/pages/admin/announcements.stories.ts
deleted file mode 100644
index 9a0c0828be..0000000000
--- a/packages/frontend/src/pages/admin/announcements.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import announcements_ from './announcements.vue';
-const meta = {
-	title: 'pages/admin/announcements',
-	component: announcements_,
-} satisfies Meta<typeof announcements_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				announcements_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<announcements_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof announcements_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/bot-protection.stories.ts b/packages/frontend/src/pages/admin/bot-protection.stories.ts
deleted file mode 100644
index 366ef08609..0000000000
--- a/packages/frontend/src/pages/admin/bot-protection.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import bot_protection from './bot-protection.vue';
-const meta = {
-	title: 'pages/admin/bot-protection',
-	component: bot_protection,
-} satisfies Meta<typeof bot_protection>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				bot_protection,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<bot_protection v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof bot_protection>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/database.stories.ts b/packages/frontend/src/pages/admin/database.stories.ts
deleted file mode 100644
index 69c10b786d..0000000000
--- a/packages/frontend/src/pages/admin/database.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import database_ from './database.vue';
-const meta = {
-	title: 'pages/admin/database',
-	component: database_,
-} satisfies Meta<typeof database_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				database_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<database_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof database_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/email-settings.stories.ts b/packages/frontend/src/pages/admin/email-settings.stories.ts
deleted file mode 100644
index 2fb9310194..0000000000
--- a/packages/frontend/src/pages/admin/email-settings.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import email_settings from './email-settings.vue';
-const meta = {
-	title: 'pages/admin/email-settings',
-	component: email_settings,
-} satisfies Meta<typeof email_settings>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				email_settings,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<email_settings v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof email_settings>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/federation.stories.ts b/packages/frontend/src/pages/admin/federation.stories.ts
deleted file mode 100644
index 8be691fb9e..0000000000
--- a/packages/frontend/src/pages/admin/federation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import federation_ from './federation.vue';
-const meta = {
-	title: 'pages/admin/federation',
-	component: federation_,
-} satisfies Meta<typeof federation_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				federation_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<federation_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof federation_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/files.stories.ts b/packages/frontend/src/pages/admin/files.stories.ts
deleted file mode 100644
index 8876366153..0000000000
--- a/packages/frontend/src/pages/admin/files.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import files_ from './files.vue';
-const meta = {
-	title: 'pages/admin/files',
-	component: files_,
-} satisfies Meta<typeof files_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				files_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<files_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof files_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/index.stories.ts b/packages/frontend/src/pages/admin/index.stories.ts
deleted file mode 100644
index 135df4dd59..0000000000
--- a/packages/frontend/src/pages/admin/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/admin/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/instance-block.stories.ts b/packages/frontend/src/pages/admin/instance-block.stories.ts
deleted file mode 100644
index 3e7d3f905b..0000000000
--- a/packages/frontend/src/pages/admin/instance-block.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import instance_block from './instance-block.vue';
-const meta = {
-	title: 'pages/admin/instance-block',
-	component: instance_block,
-} satisfies Meta<typeof instance_block>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				instance_block,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<instance_block v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof instance_block>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/moderation.stories.ts b/packages/frontend/src/pages/admin/moderation.stories.ts
deleted file mode 100644
index 48eea34542..0000000000
--- a/packages/frontend/src/pages/admin/moderation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import moderation_ from './moderation.vue';
-const meta = {
-	title: 'pages/admin/moderation',
-	component: moderation_,
-} satisfies Meta<typeof moderation_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				moderation_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<moderation_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof moderation_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/object-storage.stories.ts b/packages/frontend/src/pages/admin/object-storage.stories.ts
deleted file mode 100644
index d9da71dbdc..0000000000
--- a/packages/frontend/src/pages/admin/object-storage.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import object_storage from './object-storage.vue';
-const meta = {
-	title: 'pages/admin/object-storage',
-	component: object_storage,
-} satisfies Meta<typeof object_storage>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				object_storage,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<object_storage v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof object_storage>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/other-settings.stories.ts b/packages/frontend/src/pages/admin/other-settings.stories.ts
deleted file mode 100644
index 3dd5a9e369..0000000000
--- a/packages/frontend/src/pages/admin/other-settings.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import other_settings from './other-settings.vue';
-const meta = {
-	title: 'pages/admin/other-settings',
-	component: other_settings,
-} satisfies Meta<typeof other_settings>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				other_settings,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<other_settings v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof other_settings>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.active-users.stories.ts b/packages/frontend/src/pages/admin/overview.active-users.stories.ts
deleted file mode 100644
index c809efec08..0000000000
--- a/packages/frontend/src/pages/admin/overview.active-users.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_active_users from './overview.active-users.vue';
-const meta = {
-	title: 'pages/admin/overview.active-users',
-	component: overview_active_users,
-} satisfies Meta<typeof overview_active_users>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_active_users,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_active_users v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_active_users>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts b/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
deleted file mode 100644
index 62576f1b57..0000000000
--- a/packages/frontend/src/pages/admin/overview.ap-requests.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_ap_requests from './overview.ap-requests.vue';
-const meta = {
-	title: 'pages/admin/overview.ap-requests',
-	component: overview_ap_requests,
-} satisfies Meta<typeof overview_ap_requests>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_ap_requests,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_ap_requests v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_ap_requests>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.federation.stories.ts b/packages/frontend/src/pages/admin/overview.federation.stories.ts
deleted file mode 100644
index 46d085a8b0..0000000000
--- a/packages/frontend/src/pages/admin/overview.federation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_federation from './overview.federation.vue';
-const meta = {
-	title: 'pages/admin/overview.federation',
-	component: overview_federation,
-} satisfies Meta<typeof overview_federation>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_federation,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_federation v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_federation>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts b/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
deleted file mode 100644
index dbb25c3921..0000000000
--- a/packages/frontend/src/pages/admin/overview.heatmap.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_heatmap from './overview.heatmap.vue';
-const meta = {
-	title: 'pages/admin/overview.heatmap',
-	component: overview_heatmap,
-} satisfies Meta<typeof overview_heatmap>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_heatmap,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_heatmap v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_heatmap>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.instances.stories.ts b/packages/frontend/src/pages/admin/overview.instances.stories.ts
deleted file mode 100644
index e8cdbebd72..0000000000
--- a/packages/frontend/src/pages/admin/overview.instances.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_instances from './overview.instances.vue';
-const meta = {
-	title: 'pages/admin/overview.instances',
-	component: overview_instances,
-} satisfies Meta<typeof overview_instances>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_instances,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_instances v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_instances>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.moderators.stories.ts b/packages/frontend/src/pages/admin/overview.moderators.stories.ts
deleted file mode 100644
index 0def4155fe..0000000000
--- a/packages/frontend/src/pages/admin/overview.moderators.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_moderators from './overview.moderators.vue';
-const meta = {
-	title: 'pages/admin/overview.moderators',
-	component: overview_moderators,
-} satisfies Meta<typeof overview_moderators>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_moderators,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_moderators v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_moderators>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.pie.stories.ts b/packages/frontend/src/pages/admin/overview.pie.stories.ts
deleted file mode 100644
index 531b14729d..0000000000
--- a/packages/frontend/src/pages/admin/overview.pie.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_pie from './overview.pie.vue';
-const meta = {
-	title: 'pages/admin/overview.pie',
-	component: overview_pie,
-} satisfies Meta<typeof overview_pie>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_pie,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_pie v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_pie>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts b/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
deleted file mode 100644
index d51dde7ede..0000000000
--- a/packages/frontend/src/pages/admin/overview.queue.chart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_queue_chart from './overview.queue.chart.vue';
-const meta = {
-	title: 'pages/admin/overview.queue.chart',
-	component: overview_queue_chart,
-} satisfies Meta<typeof overview_queue_chart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_queue_chart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_queue_chart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_queue_chart>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.queue.stories.ts b/packages/frontend/src/pages/admin/overview.queue.stories.ts
deleted file mode 100644
index e2b2be47e3..0000000000
--- a/packages/frontend/src/pages/admin/overview.queue.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_queue from './overview.queue.vue';
-const meta = {
-	title: 'pages/admin/overview.queue',
-	component: overview_queue,
-} satisfies Meta<typeof overview_queue>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_queue,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_queue v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_queue>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.retention.stories.ts b/packages/frontend/src/pages/admin/overview.retention.stories.ts
deleted file mode 100644
index afe1e34c3d..0000000000
--- a/packages/frontend/src/pages/admin/overview.retention.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_retention from './overview.retention.vue';
-const meta = {
-	title: 'pages/admin/overview.retention',
-	component: overview_retention,
-} satisfies Meta<typeof overview_retention>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_retention,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_retention v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_retention>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stats.stories.ts b/packages/frontend/src/pages/admin/overview.stats.stories.ts
deleted file mode 100644
index 75aa173aa6..0000000000
--- a/packages/frontend/src/pages/admin/overview.stats.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_stats from './overview.stats.vue';
-const meta = {
-	title: 'pages/admin/overview.stats',
-	component: overview_stats,
-} satisfies Meta<typeof overview_stats>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_stats,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_stats v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_stats>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.stories.ts b/packages/frontend/src/pages/admin/overview.stories.ts
deleted file mode 100644
index b8897c2b7c..0000000000
--- a/packages/frontend/src/pages/admin/overview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_ from './overview.vue';
-const meta = {
-	title: 'pages/admin/overview',
-	component: overview_,
-} satisfies Meta<typeof overview_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/overview.users.stories.ts b/packages/frontend/src/pages/admin/overview.users.stories.ts
deleted file mode 100644
index 0c3d806d9a..0000000000
--- a/packages/frontend/src/pages/admin/overview.users.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import overview_users from './overview.users.vue';
-const meta = {
-	title: 'pages/admin/overview.users',
-	component: overview_users,
-} satisfies Meta<typeof overview_users>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				overview_users,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<overview_users v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof overview_users>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/proxy-account.stories.ts b/packages/frontend/src/pages/admin/proxy-account.stories.ts
deleted file mode 100644
index 9ef9552fc4..0000000000
--- a/packages/frontend/src/pages/admin/proxy-account.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import proxy_account from './proxy-account.vue';
-const meta = {
-	title: 'pages/admin/proxy-account',
-	component: proxy_account,
-} satisfies Meta<typeof proxy_account>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				proxy_account,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<proxy_account v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof proxy_account>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
deleted file mode 100644
index ea778bebb5..0000000000
--- a/packages/frontend/src/pages/admin/queue.chart.chart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import queue_chart_chart from './queue.chart.chart.vue';
-const meta = {
-	title: 'pages/admin/queue.chart.chart',
-	component: queue_chart_chart,
-} satisfies Meta<typeof queue_chart_chart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				queue_chart_chart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<queue_chart_chart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof queue_chart_chart>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.chart.stories.ts b/packages/frontend/src/pages/admin/queue.chart.stories.ts
deleted file mode 100644
index c94f627251..0000000000
--- a/packages/frontend/src/pages/admin/queue.chart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import queue_chart from './queue.chart.vue';
-const meta = {
-	title: 'pages/admin/queue.chart',
-	component: queue_chart,
-} satisfies Meta<typeof queue_chart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				queue_chart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<queue_chart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof queue_chart>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/queue.stories.ts b/packages/frontend/src/pages/admin/queue.stories.ts
deleted file mode 100644
index 0f8207461b..0000000000
--- a/packages/frontend/src/pages/admin/queue.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import queue_ from './queue.vue';
-const meta = {
-	title: 'pages/admin/queue',
-	component: queue_,
-} satisfies Meta<typeof queue_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				queue_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<queue_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof queue_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/relays.stories.ts b/packages/frontend/src/pages/admin/relays.stories.ts
deleted file mode 100644
index 89fdf2aade..0000000000
--- a/packages/frontend/src/pages/admin/relays.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import relays_ from './relays.vue';
-const meta = {
-	title: 'pages/admin/relays',
-	component: relays_,
-} satisfies Meta<typeof relays_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				relays_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<relays_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof relays_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.edit.stories.ts b/packages/frontend/src/pages/admin/roles.edit.stories.ts
deleted file mode 100644
index c70098771e..0000000000
--- a/packages/frontend/src/pages/admin/roles.edit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import roles_edit from './roles.edit.vue';
-const meta = {
-	title: 'pages/admin/roles.edit',
-	component: roles_edit,
-} satisfies Meta<typeof roles_edit>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				roles_edit,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<roles_edit v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof roles_edit>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.editor.stories.ts b/packages/frontend/src/pages/admin/roles.editor.stories.ts
deleted file mode 100644
index ebd4064e0e..0000000000
--- a/packages/frontend/src/pages/admin/roles.editor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import roles_editor from './roles.editor.vue';
-const meta = {
-	title: 'pages/admin/roles.editor',
-	component: roles_editor,
-} satisfies Meta<typeof roles_editor>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				roles_editor,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<roles_editor v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof roles_editor>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.role.stories.ts b/packages/frontend/src/pages/admin/roles.role.stories.ts
deleted file mode 100644
index 9e41dc227d..0000000000
--- a/packages/frontend/src/pages/admin/roles.role.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import roles_role from './roles.role.vue';
-const meta = {
-	title: 'pages/admin/roles.role',
-	component: roles_role,
-} satisfies Meta<typeof roles_role>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				roles_role,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<roles_role v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof roles_role>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/roles.stories.ts b/packages/frontend/src/pages/admin/roles.stories.ts
deleted file mode 100644
index cb5b29059f..0000000000
--- a/packages/frontend/src/pages/admin/roles.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import roles_ from './roles.vue';
-const meta = {
-	title: 'pages/admin/roles',
-	component: roles_,
-} satisfies Meta<typeof roles_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				roles_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<roles_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof roles_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/security.stories.ts b/packages/frontend/src/pages/admin/security.stories.ts
deleted file mode 100644
index 3de0725c60..0000000000
--- a/packages/frontend/src/pages/admin/security.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import security_ from './security.vue';
-const meta = {
-	title: 'pages/admin/security',
-	component: security_,
-} satisfies Meta<typeof security_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				security_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<security_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof security_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/settings.stories.ts b/packages/frontend/src/pages/admin/settings.stories.ts
deleted file mode 100644
index 9acb4ec34e..0000000000
--- a/packages/frontend/src/pages/admin/settings.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import settings_ from './settings.vue';
-const meta = {
-	title: 'pages/admin/settings',
-	component: settings_,
-} satisfies Meta<typeof settings_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				settings_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<settings_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof settings_>;
-export default meta;
diff --git a/packages/frontend/src/pages/admin/users.stories.ts b/packages/frontend/src/pages/admin/users.stories.ts
deleted file mode 100644
index d845f76520..0000000000
--- a/packages/frontend/src/pages/admin/users.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import users_ from './users.vue';
-const meta = {
-	title: 'pages/admin/users',
-	component: users_,
-} satisfies Meta<typeof users_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				users_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<users_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof users_>;
-export default meta;
diff --git a/packages/frontend/src/pages/ads.stories.ts b/packages/frontend/src/pages/ads.stories.ts
deleted file mode 100644
index b1a4ee1d82..0000000000
--- a/packages/frontend/src/pages/ads.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import ads_ from './ads.vue';
-const meta = {
-	title: 'pages/ads',
-	component: ads_,
-} satisfies Meta<typeof ads_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				ads_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<ads_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof ads_>;
-export default meta;
diff --git a/packages/frontend/src/pages/announcements.stories.ts b/packages/frontend/src/pages/announcements.stories.ts
deleted file mode 100644
index 0f8d34972a..0000000000
--- a/packages/frontend/src/pages/announcements.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import announcements_ from './announcements.vue';
-const meta = {
-	title: 'pages/announcements',
-	component: announcements_,
-} satisfies Meta<typeof announcements_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				announcements_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<announcements_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof announcements_>;
-export default meta;
diff --git a/packages/frontend/src/pages/antenna-timeline.stories.ts b/packages/frontend/src/pages/antenna-timeline.stories.ts
deleted file mode 100644
index 8e07aeb956..0000000000
--- a/packages/frontend/src/pages/antenna-timeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import antenna_timeline from './antenna-timeline.vue';
-const meta = {
-	title: 'pages/antenna-timeline',
-	component: antenna_timeline,
-} satisfies Meta<typeof antenna_timeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				antenna_timeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<antenna_timeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof antenna_timeline>;
-export default meta;
diff --git a/packages/frontend/src/pages/api-console.stories.ts b/packages/frontend/src/pages/api-console.stories.ts
deleted file mode 100644
index 0475dfc3b8..0000000000
--- a/packages/frontend/src/pages/api-console.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import api_console from './api-console.vue';
-const meta = {
-	title: 'pages/api-console',
-	component: api_console,
-} satisfies Meta<typeof api_console>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				api_console,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<api_console v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof api_console>;
-export default meta;
diff --git a/packages/frontend/src/pages/auth.form.stories.ts b/packages/frontend/src/pages/auth.form.stories.ts
deleted file mode 100644
index 643ec487c7..0000000000
--- a/packages/frontend/src/pages/auth.form.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import auth_form from './auth.form.vue';
-const meta = {
-	title: 'pages/auth.form',
-	component: auth_form,
-} satisfies Meta<typeof auth_form>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				auth_form,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<auth_form v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof auth_form>;
-export default meta;
diff --git a/packages/frontend/src/pages/auth.stories.ts b/packages/frontend/src/pages/auth.stories.ts
deleted file mode 100644
index 827ac75eb3..0000000000
--- a/packages/frontend/src/pages/auth.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import auth_ from './auth.vue';
-const meta = {
-	title: 'pages/auth',
-	component: auth_,
-} satisfies Meta<typeof auth_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				auth_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<auth_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof auth_>;
-export default meta;
diff --git a/packages/frontend/src/pages/channel-editor.stories.ts b/packages/frontend/src/pages/channel-editor.stories.ts
deleted file mode 100644
index f30e5e07c4..0000000000
--- a/packages/frontend/src/pages/channel-editor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import channel_editor from './channel-editor.vue';
-const meta = {
-	title: 'pages/channel-editor',
-	component: channel_editor,
-} satisfies Meta<typeof channel_editor>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				channel_editor,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<channel_editor v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof channel_editor>;
-export default meta;
diff --git a/packages/frontend/src/pages/channel.stories.ts b/packages/frontend/src/pages/channel.stories.ts
deleted file mode 100644
index 52b690ee02..0000000000
--- a/packages/frontend/src/pages/channel.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import channel_ from './channel.vue';
-const meta = {
-	title: 'pages/channel',
-	component: channel_,
-} satisfies Meta<typeof channel_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				channel_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<channel_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof channel_>;
-export default meta;
diff --git a/packages/frontend/src/pages/channels.stories.ts b/packages/frontend/src/pages/channels.stories.ts
deleted file mode 100644
index a50d2e46f6..0000000000
--- a/packages/frontend/src/pages/channels.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import channels_ from './channels.vue';
-const meta = {
-	title: 'pages/channels',
-	component: channels_,
-} satisfies Meta<typeof channels_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				channels_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<channels_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof channels_>;
-export default meta;
diff --git a/packages/frontend/src/pages/clicker.stories.ts b/packages/frontend/src/pages/clicker.stories.ts
deleted file mode 100644
index 010b1cb2a7..0000000000
--- a/packages/frontend/src/pages/clicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import clicker_ from './clicker.vue';
-const meta = {
-	title: 'pages/clicker',
-	component: clicker_,
-} satisfies Meta<typeof clicker_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				clicker_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<clicker_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof clicker_>;
-export default meta;
diff --git a/packages/frontend/src/pages/clip.stories.ts b/packages/frontend/src/pages/clip.stories.ts
deleted file mode 100644
index ad35528eea..0000000000
--- a/packages/frontend/src/pages/clip.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import clip_ from './clip.vue';
-const meta = {
-	title: 'pages/clip',
-	component: clip_,
-} satisfies Meta<typeof clip_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				clip_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<clip_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof clip_>;
-export default meta;
diff --git a/packages/frontend/src/pages/custom-emojis-manager.stories.ts b/packages/frontend/src/pages/custom-emojis-manager.stories.ts
deleted file mode 100644
index 6ff43ad8b6..0000000000
--- a/packages/frontend/src/pages/custom-emojis-manager.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import custom_emojis_manager from './custom-emojis-manager.vue';
-const meta = {
-	title: 'pages/custom-emojis-manager',
-	component: custom_emojis_manager,
-} satisfies Meta<typeof custom_emojis_manager>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				custom_emojis_manager,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<custom_emojis_manager v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof custom_emojis_manager>;
-export default meta;
diff --git a/packages/frontend/src/pages/drive.stories.ts b/packages/frontend/src/pages/drive.stories.ts
deleted file mode 100644
index 94f85e773c..0000000000
--- a/packages/frontend/src/pages/drive.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import drive_ from './drive.vue';
-const meta = {
-	title: 'pages/drive',
-	component: drive_,
-} satisfies Meta<typeof drive_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				drive_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<drive_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof drive_>;
-export default meta;
diff --git a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts b/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
deleted file mode 100644
index 5ff9d4c0b5..0000000000
--- a/packages/frontend/src/pages/emoji-edit-dialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import emoji_edit_dialog from './emoji-edit-dialog.vue';
-const meta = {
-	title: 'pages/emoji-edit-dialog',
-	component: emoji_edit_dialog,
-} satisfies Meta<typeof emoji_edit_dialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				emoji_edit_dialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<emoji_edit_dialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof emoji_edit_dialog>;
-export default meta;
diff --git a/packages/frontend/src/pages/emojis.emoji.stories.ts b/packages/frontend/src/pages/emojis.emoji.stories.ts
deleted file mode 100644
index 78964f570c..0000000000
--- a/packages/frontend/src/pages/emojis.emoji.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import emojis_emoji from './emojis.emoji.vue';
-const meta = {
-	title: 'pages/emojis.emoji',
-	component: emojis_emoji,
-} satisfies Meta<typeof emojis_emoji>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				emojis_emoji,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<emojis_emoji v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof emojis_emoji>;
-export default meta;
diff --git a/packages/frontend/src/pages/explore.featured.stories.ts b/packages/frontend/src/pages/explore.featured.stories.ts
deleted file mode 100644
index a9e0a1fb2a..0000000000
--- a/packages/frontend/src/pages/explore.featured.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import explore_featured from './explore.featured.vue';
-const meta = {
-	title: 'pages/explore.featured',
-	component: explore_featured,
-} satisfies Meta<typeof explore_featured>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				explore_featured,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<explore_featured v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof explore_featured>;
-export default meta;
diff --git a/packages/frontend/src/pages/explore.roles.stories.ts b/packages/frontend/src/pages/explore.roles.stories.ts
deleted file mode 100644
index 76b5a3e6d2..0000000000
--- a/packages/frontend/src/pages/explore.roles.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import explore_roles from './explore.roles.vue';
-const meta = {
-	title: 'pages/explore.roles',
-	component: explore_roles,
-} satisfies Meta<typeof explore_roles>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				explore_roles,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<explore_roles v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof explore_roles>;
-export default meta;
diff --git a/packages/frontend/src/pages/explore.stories.ts b/packages/frontend/src/pages/explore.stories.ts
deleted file mode 100644
index 108282a02c..0000000000
--- a/packages/frontend/src/pages/explore.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import explore_ from './explore.vue';
-const meta = {
-	title: 'pages/explore',
-	component: explore_,
-} satisfies Meta<typeof explore_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				explore_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<explore_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof explore_>;
-export default meta;
diff --git a/packages/frontend/src/pages/explore.users.stories.ts b/packages/frontend/src/pages/explore.users.stories.ts
deleted file mode 100644
index b89e297167..0000000000
--- a/packages/frontend/src/pages/explore.users.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import explore_users from './explore.users.vue';
-const meta = {
-	title: 'pages/explore.users',
-	component: explore_users,
-} satisfies Meta<typeof explore_users>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				explore_users,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<explore_users v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof explore_users>;
-export default meta;
diff --git a/packages/frontend/src/pages/favorites.stories.ts b/packages/frontend/src/pages/favorites.stories.ts
deleted file mode 100644
index e8a19503f6..0000000000
--- a/packages/frontend/src/pages/favorites.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import favorites_ from './favorites.vue';
-const meta = {
-	title: 'pages/favorites',
-	component: favorites_,
-} satisfies Meta<typeof favorites_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				favorites_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<favorites_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof favorites_>;
-export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-edit.stories.ts b/packages/frontend/src/pages/flash/flash-edit.stories.ts
deleted file mode 100644
index 4437aca742..0000000000
--- a/packages/frontend/src/pages/flash/flash-edit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import flash_edit from './flash-edit.vue';
-const meta = {
-	title: 'pages/flash/flash-edit',
-	component: flash_edit,
-} satisfies Meta<typeof flash_edit>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				flash_edit,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<flash_edit v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof flash_edit>;
-export default meta;
diff --git a/packages/frontend/src/pages/flash/flash-index.stories.ts b/packages/frontend/src/pages/flash/flash-index.stories.ts
deleted file mode 100644
index 46997adaf5..0000000000
--- a/packages/frontend/src/pages/flash/flash-index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import flash_index from './flash-index.vue';
-const meta = {
-	title: 'pages/flash/flash-index',
-	component: flash_index,
-} satisfies Meta<typeof flash_index>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				flash_index,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<flash_index v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof flash_index>;
-export default meta;
diff --git a/packages/frontend/src/pages/flash/flash.stories.ts b/packages/frontend/src/pages/flash/flash.stories.ts
deleted file mode 100644
index f0e4bec28f..0000000000
--- a/packages/frontend/src/pages/flash/flash.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import flash_ from './flash.vue';
-const meta = {
-	title: 'pages/flash/flash',
-	component: flash_,
-} satisfies Meta<typeof flash_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				flash_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<flash_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof flash_>;
-export default meta;
diff --git a/packages/frontend/src/pages/follow-requests.stories.ts b/packages/frontend/src/pages/follow-requests.stories.ts
deleted file mode 100644
index e476568ffd..0000000000
--- a/packages/frontend/src/pages/follow-requests.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import follow_requests from './follow-requests.vue';
-const meta = {
-	title: 'pages/follow-requests',
-	component: follow_requests,
-} satisfies Meta<typeof follow_requests>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				follow_requests,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<follow_requests v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof follow_requests>;
-export default meta;
diff --git a/packages/frontend/src/pages/follow.stories.ts b/packages/frontend/src/pages/follow.stories.ts
deleted file mode 100644
index 57ecbf687d..0000000000
--- a/packages/frontend/src/pages/follow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import follow_ from './follow.vue';
-const meta = {
-	title: 'pages/follow',
-	component: follow_,
-} satisfies Meta<typeof follow_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				follow_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<follow_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof follow_>;
-export default meta;
diff --git a/packages/frontend/src/pages/gallery/edit.stories.ts b/packages/frontend/src/pages/gallery/edit.stories.ts
deleted file mode 100644
index 0205511cf4..0000000000
--- a/packages/frontend/src/pages/gallery/edit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import edit_ from './edit.vue';
-const meta = {
-	title: 'pages/gallery/edit',
-	component: edit_,
-} satisfies Meta<typeof edit_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				edit_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<edit_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof edit_>;
-export default meta;
diff --git a/packages/frontend/src/pages/gallery/index.stories.ts b/packages/frontend/src/pages/gallery/index.stories.ts
deleted file mode 100644
index ac17fc0477..0000000000
--- a/packages/frontend/src/pages/gallery/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/gallery/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/gallery/post.stories.ts b/packages/frontend/src/pages/gallery/post.stories.ts
deleted file mode 100644
index f49938bbf8..0000000000
--- a/packages/frontend/src/pages/gallery/post.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import post_ from './post.vue';
-const meta = {
-	title: 'pages/gallery/post',
-	component: post_,
-} satisfies Meta<typeof post_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				post_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<post_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof post_>;
-export default meta;
diff --git a/packages/frontend/src/pages/instance-info.stories.ts b/packages/frontend/src/pages/instance-info.stories.ts
deleted file mode 100644
index 188ce8ec6e..0000000000
--- a/packages/frontend/src/pages/instance-info.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import instance_info from './instance-info.vue';
-const meta = {
-	title: 'pages/instance-info',
-	component: instance_info,
-} satisfies Meta<typeof instance_info>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				instance_info,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<instance_info v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof instance_info>;
-export default meta;
diff --git a/packages/frontend/src/pages/miauth.stories.ts b/packages/frontend/src/pages/miauth.stories.ts
deleted file mode 100644
index 2814d117fb..0000000000
--- a/packages/frontend/src/pages/miauth.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import miauth_ from './miauth.vue';
-const meta = {
-	title: 'pages/miauth',
-	component: miauth_,
-} satisfies Meta<typeof miauth_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				miauth_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<miauth_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof miauth_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/create.stories.ts b/packages/frontend/src/pages/my-antennas/create.stories.ts
deleted file mode 100644
index 149e73a9ea..0000000000
--- a/packages/frontend/src/pages/my-antennas/create.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import create_ from './create.vue';
-const meta = {
-	title: 'pages/my-antennas/create',
-	component: create_,
-} satisfies Meta<typeof create_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				create_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<create_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof create_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/edit.stories.ts b/packages/frontend/src/pages/my-antennas/edit.stories.ts
deleted file mode 100644
index 9771b4ffd5..0000000000
--- a/packages/frontend/src/pages/my-antennas/edit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import edit_ from './edit.vue';
-const meta = {
-	title: 'pages/my-antennas/edit',
-	component: edit_,
-} satisfies Meta<typeof edit_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				edit_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<edit_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof edit_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/editor.stories.ts b/packages/frontend/src/pages/my-antennas/editor.stories.ts
deleted file mode 100644
index 0e3c0e1855..0000000000
--- a/packages/frontend/src/pages/my-antennas/editor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import editor_ from './editor.vue';
-const meta = {
-	title: 'pages/my-antennas/editor',
-	component: editor_,
-} satisfies Meta<typeof editor_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				editor_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<editor_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof editor_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-antennas/index.stories.ts b/packages/frontend/src/pages/my-antennas/index.stories.ts
deleted file mode 100644
index 0a38dec601..0000000000
--- a/packages/frontend/src/pages/my-antennas/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/my-antennas/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-clips/index.stories.ts b/packages/frontend/src/pages/my-clips/index.stories.ts
deleted file mode 100644
index 71fd4314dc..0000000000
--- a/packages/frontend/src/pages/my-clips/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/my-clips/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-lists/index.stories.ts b/packages/frontend/src/pages/my-lists/index.stories.ts
deleted file mode 100644
index a945b45ca8..0000000000
--- a/packages/frontend/src/pages/my-lists/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/my-lists/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/my-lists/list.stories.ts b/packages/frontend/src/pages/my-lists/list.stories.ts
deleted file mode 100644
index e636179b38..0000000000
--- a/packages/frontend/src/pages/my-lists/list.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import list_ from './list.vue';
-const meta = {
-	title: 'pages/my-lists/list',
-	component: list_,
-} satisfies Meta<typeof list_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				list_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<list_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof list_>;
-export default meta;
diff --git a/packages/frontend/src/pages/not-found.stories.ts b/packages/frontend/src/pages/not-found.stories.ts
deleted file mode 100644
index 99715854d3..0000000000
--- a/packages/frontend/src/pages/not-found.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import not_found from './not-found.vue';
-const meta = {
-	title: 'pages/not-found',
-	component: not_found,
-} satisfies Meta<typeof not_found>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				not_found,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<not_found v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof not_found>;
-export default meta;
diff --git a/packages/frontend/src/pages/note.stories.ts b/packages/frontend/src/pages/note.stories.ts
deleted file mode 100644
index de8ef127d8..0000000000
--- a/packages/frontend/src/pages/note.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import note_ from './note.vue';
-const meta = {
-	title: 'pages/note',
-	component: note_,
-} satisfies Meta<typeof note_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				note_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<note_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof note_>;
-export default meta;
diff --git a/packages/frontend/src/pages/notifications.stories.ts b/packages/frontend/src/pages/notifications.stories.ts
deleted file mode 100644
index e7fab3655b..0000000000
--- a/packages/frontend/src/pages/notifications.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import notifications_ from './notifications.vue';
-const meta = {
-	title: 'pages/notifications',
-	component: notifications_,
-} satisfies Meta<typeof notifications_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				notifications_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<notifications_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof notifications_>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
deleted file mode 100644
index 372952a2b6..0000000000
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_el_image from './page-editor.el.image.vue';
-const meta = {
-	title: 'pages/page-editor/els/page-editor.el.image',
-	component: page_editor_el_image,
-} satisfies Meta<typeof page_editor_el_image>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_el_image,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_el_image v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_el_image>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
deleted file mode 100644
index c341e18988..0000000000
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_el_note from './page-editor.el.note.vue';
-const meta = {
-	title: 'pages/page-editor/els/page-editor.el.note',
-	component: page_editor_el_note,
-} satisfies Meta<typeof page_editor_el_note>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_el_note,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_el_note v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_el_note>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
deleted file mode 100644
index 90bd4f7a4e..0000000000
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.section.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_el_section from './page-editor.el.section.vue';
-const meta = {
-	title: 'pages/page-editor/els/page-editor.el.section',
-	component: page_editor_el_section,
-} satisfies Meta<typeof page_editor_el_section>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_el_section,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_el_section v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_el_section>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts b/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
deleted file mode 100644
index 46540991f0..0000000000
--- a/packages/frontend/src/pages/page-editor/els/page-editor.el.text.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_el_text from './page-editor.el.text.vue';
-const meta = {
-	title: 'pages/page-editor/els/page-editor.el.text',
-	component: page_editor_el_text,
-} satisfies Meta<typeof page_editor_el_text>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_el_text,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_el_text v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_el_text>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
deleted file mode 100644
index 5cf3158d6e..0000000000
--- a/packages/frontend/src/pages/page-editor/page-editor.blocks.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_blocks from './page-editor.blocks.vue';
-const meta = {
-	title: 'pages/page-editor/page-editor.blocks',
-	component: page_editor_blocks,
-} satisfies Meta<typeof page_editor_blocks>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_blocks,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_blocks v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_blocks>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
deleted file mode 100644
index 9f035212fa..0000000000
--- a/packages/frontend/src/pages/page-editor/page-editor.container.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor_container from './page-editor.container.vue';
-const meta = {
-	title: 'pages/page-editor/page-editor.container',
-	component: page_editor_container,
-} satisfies Meta<typeof page_editor_container>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor_container,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor_container v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor_container>;
-export default meta;
diff --git a/packages/frontend/src/pages/page-editor/page-editor.stories.ts b/packages/frontend/src/pages/page-editor/page-editor.stories.ts
deleted file mode 100644
index 191b566530..0000000000
--- a/packages/frontend/src/pages/page-editor/page-editor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_editor from './page-editor.vue';
-const meta = {
-	title: 'pages/page-editor/page-editor',
-	component: page_editor,
-} satisfies Meta<typeof page_editor>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_editor,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_editor v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_editor>;
-export default meta;
diff --git a/packages/frontend/src/pages/page.stories.ts b/packages/frontend/src/pages/page.stories.ts
deleted file mode 100644
index 10e197dc14..0000000000
--- a/packages/frontend/src/pages/page.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import page_ from './page.vue';
-const meta = {
-	title: 'pages/page',
-	component: page_,
-} satisfies Meta<typeof page_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				page_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<page_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof page_>;
-export default meta;
diff --git a/packages/frontend/src/pages/pages.stories.ts b/packages/frontend/src/pages/pages.stories.ts
deleted file mode 100644
index 5359f0ac82..0000000000
--- a/packages/frontend/src/pages/pages.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import pages_ from './pages.vue';
-const meta = {
-	title: 'pages/pages',
-	component: pages_,
-} satisfies Meta<typeof pages_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				pages_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<pages_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof pages_>;
-export default meta;
diff --git a/packages/frontend/src/pages/preview.stories.ts b/packages/frontend/src/pages/preview.stories.ts
deleted file mode 100644
index 0bdb067ab3..0000000000
--- a/packages/frontend/src/pages/preview.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import preview_ from './preview.vue';
-const meta = {
-	title: 'pages/preview',
-	component: preview_,
-} satisfies Meta<typeof preview_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				preview_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<preview_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof preview_>;
-export default meta;
diff --git a/packages/frontend/src/pages/registry.keys.stories.ts b/packages/frontend/src/pages/registry.keys.stories.ts
deleted file mode 100644
index 3266071424..0000000000
--- a/packages/frontend/src/pages/registry.keys.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import registry_keys from './registry.keys.vue';
-const meta = {
-	title: 'pages/registry.keys',
-	component: registry_keys,
-} satisfies Meta<typeof registry_keys>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				registry_keys,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<registry_keys v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof registry_keys>;
-export default meta;
diff --git a/packages/frontend/src/pages/registry.stories.ts b/packages/frontend/src/pages/registry.stories.ts
deleted file mode 100644
index e0af01e1f5..0000000000
--- a/packages/frontend/src/pages/registry.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import registry_ from './registry.vue';
-const meta = {
-	title: 'pages/registry',
-	component: registry_,
-} satisfies Meta<typeof registry_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				registry_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<registry_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof registry_>;
-export default meta;
diff --git a/packages/frontend/src/pages/registry.value.stories.ts b/packages/frontend/src/pages/registry.value.stories.ts
deleted file mode 100644
index 44b848b9ce..0000000000
--- a/packages/frontend/src/pages/registry.value.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import registry_value from './registry.value.vue';
-const meta = {
-	title: 'pages/registry.value',
-	component: registry_value,
-} satisfies Meta<typeof registry_value>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				registry_value,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<registry_value v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof registry_value>;
-export default meta;
diff --git a/packages/frontend/src/pages/reset-password.stories.ts b/packages/frontend/src/pages/reset-password.stories.ts
deleted file mode 100644
index aa0c476491..0000000000
--- a/packages/frontend/src/pages/reset-password.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import reset_password from './reset-password.vue';
-const meta = {
-	title: 'pages/reset-password',
-	component: reset_password,
-} satisfies Meta<typeof reset_password>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				reset_password,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<reset_password v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof reset_password>;
-export default meta;
diff --git a/packages/frontend/src/pages/role.stories.ts b/packages/frontend/src/pages/role.stories.ts
deleted file mode 100644
index 3adcc107f1..0000000000
--- a/packages/frontend/src/pages/role.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import role_ from './role.vue';
-const meta = {
-	title: 'pages/role',
-	component: role_,
-} satisfies Meta<typeof role_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				role_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<role_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof role_>;
-export default meta;
diff --git a/packages/frontend/src/pages/scratchpad.stories.ts b/packages/frontend/src/pages/scratchpad.stories.ts
deleted file mode 100644
index 94fcff0d9d..0000000000
--- a/packages/frontend/src/pages/scratchpad.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import scratchpad_ from './scratchpad.vue';
-const meta = {
-	title: 'pages/scratchpad',
-	component: scratchpad_,
-} satisfies Meta<typeof scratchpad_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				scratchpad_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<scratchpad_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof scratchpad_>;
-export default meta;
diff --git a/packages/frontend/src/pages/search.stories.ts b/packages/frontend/src/pages/search.stories.ts
deleted file mode 100644
index fe10f4c2c2..0000000000
--- a/packages/frontend/src/pages/search.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import search_ from './search.vue';
-const meta = {
-	title: 'pages/search',
-	component: search_,
-} satisfies Meta<typeof search_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				search_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<search_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof search_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts b/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
deleted file mode 100644
index 8892f6bc3d..0000000000
--- a/packages/frontend/src/pages/settings/2fa.qrdialog.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _2fa_qrdialog from './2fa.qrdialog.vue';
-const meta = {
-	title: 'pages/settings/2fa.qrdialog',
-	component: _2fa_qrdialog,
-} satisfies Meta<typeof _2fa_qrdialog>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_2fa_qrdialog,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_2fa_qrdialog v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _2fa_qrdialog>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/2fa.stories.ts b/packages/frontend/src/pages/settings/2fa.stories.ts
deleted file mode 100644
index 30280a5c48..0000000000
--- a/packages/frontend/src/pages/settings/2fa.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import _2fa from './2fa.vue';
-const meta = {
-	title: 'pages/settings/2fa',
-	component: _2fa,
-} satisfies Meta<typeof _2fa>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				_2fa,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<_2fa v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof _2fa>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/account-info.stories.ts b/packages/frontend/src/pages/settings/account-info.stories.ts
deleted file mode 100644
index 4150d31786..0000000000
--- a/packages/frontend/src/pages/settings/account-info.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import account_info from './account-info.vue';
-const meta = {
-	title: 'pages/settings/account-info',
-	component: account_info,
-} satisfies Meta<typeof account_info>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				account_info,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<account_info v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof account_info>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/accounts.stories.ts b/packages/frontend/src/pages/settings/accounts.stories.ts
deleted file mode 100644
index 1a88aef4c5..0000000000
--- a/packages/frontend/src/pages/settings/accounts.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import accounts_ from './accounts.vue';
-const meta = {
-	title: 'pages/settings/accounts',
-	component: accounts_,
-} satisfies Meta<typeof accounts_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				accounts_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<accounts_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof accounts_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/api.stories.ts b/packages/frontend/src/pages/settings/api.stories.ts
deleted file mode 100644
index 54e9eaffdb..0000000000
--- a/packages/frontend/src/pages/settings/api.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import api_ from './api.vue';
-const meta = {
-	title: 'pages/settings/api',
-	component: api_,
-} satisfies Meta<typeof api_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				api_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<api_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof api_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/apps.stories.ts b/packages/frontend/src/pages/settings/apps.stories.ts
deleted file mode 100644
index ccc13f96f9..0000000000
--- a/packages/frontend/src/pages/settings/apps.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import apps_ from './apps.vue';
-const meta = {
-	title: 'pages/settings/apps',
-	component: apps_,
-} satisfies Meta<typeof apps_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				apps_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<apps_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof apps_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/custom-css.stories.ts b/packages/frontend/src/pages/settings/custom-css.stories.ts
deleted file mode 100644
index f45ce4b5c2..0000000000
--- a/packages/frontend/src/pages/settings/custom-css.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import custom_css from './custom-css.vue';
-const meta = {
-	title: 'pages/settings/custom-css',
-	component: custom_css,
-} satisfies Meta<typeof custom_css>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				custom_css,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<custom_css v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof custom_css>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/deck.stories.ts b/packages/frontend/src/pages/settings/deck.stories.ts
deleted file mode 100644
index f9f566c698..0000000000
--- a/packages/frontend/src/pages/settings/deck.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import deck_ from './deck.vue';
-const meta = {
-	title: 'pages/settings/deck',
-	component: deck_,
-} satisfies Meta<typeof deck_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				deck_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<deck_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof deck_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/delete-account.stories.ts b/packages/frontend/src/pages/settings/delete-account.stories.ts
deleted file mode 100644
index 5734b94cb7..0000000000
--- a/packages/frontend/src/pages/settings/delete-account.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import delete_account from './delete-account.vue';
-const meta = {
-	title: 'pages/settings/delete-account',
-	component: delete_account,
-} satisfies Meta<typeof delete_account>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				delete_account,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<delete_account v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof delete_account>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/drive-cleaner.stories.ts b/packages/frontend/src/pages/settings/drive-cleaner.stories.ts
deleted file mode 100644
index c07117bdde..0000000000
--- a/packages/frontend/src/pages/settings/drive-cleaner.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import drive_cleaner from './drive-cleaner.vue';
-const meta = {
-	title: 'pages/settings/drive-cleaner',
-	component: drive_cleaner,
-} satisfies Meta<typeof drive_cleaner>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				drive_cleaner,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<drive_cleaner v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof drive_cleaner>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/drive.stories.ts b/packages/frontend/src/pages/settings/drive.stories.ts
deleted file mode 100644
index 55faccffd5..0000000000
--- a/packages/frontend/src/pages/settings/drive.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import drive_ from './drive.vue';
-const meta = {
-	title: 'pages/settings/drive',
-	component: drive_,
-} satisfies Meta<typeof drive_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				drive_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<drive_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof drive_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/email.stories.ts b/packages/frontend/src/pages/settings/email.stories.ts
deleted file mode 100644
index 98defa44a8..0000000000
--- a/packages/frontend/src/pages/settings/email.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import email_ from './email.vue';
-const meta = {
-	title: 'pages/settings/email',
-	component: email_,
-} satisfies Meta<typeof email_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				email_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<email_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof email_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/general.stories.ts b/packages/frontend/src/pages/settings/general.stories.ts
deleted file mode 100644
index 589807d90c..0000000000
--- a/packages/frontend/src/pages/settings/general.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import general_ from './general.vue';
-const meta = {
-	title: 'pages/settings/general',
-	component: general_,
-} satisfies Meta<typeof general_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				general_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<general_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof general_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/import-export.stories.ts b/packages/frontend/src/pages/settings/import-export.stories.ts
deleted file mode 100644
index 3babedf181..0000000000
--- a/packages/frontend/src/pages/settings/import-export.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import import_export from './import-export.vue';
-const meta = {
-	title: 'pages/settings/import-export',
-	component: import_export,
-} satisfies Meta<typeof import_export>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				import_export,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<import_export v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof import_export>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/index.stories.ts b/packages/frontend/src/pages/settings/index.stories.ts
deleted file mode 100644
index 537c0a9add..0000000000
--- a/packages/frontend/src/pages/settings/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/settings/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/instance-mute.stories.ts b/packages/frontend/src/pages/settings/instance-mute.stories.ts
deleted file mode 100644
index 9e23409158..0000000000
--- a/packages/frontend/src/pages/settings/instance-mute.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import instance_mute from './instance-mute.vue';
-const meta = {
-	title: 'pages/settings/instance-mute',
-	component: instance_mute,
-} satisfies Meta<typeof instance_mute>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				instance_mute,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<instance_mute v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof instance_mute>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/mute-block.stories.ts b/packages/frontend/src/pages/settings/mute-block.stories.ts
deleted file mode 100644
index 436e102c4f..0000000000
--- a/packages/frontend/src/pages/settings/mute-block.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import mute_block from './mute-block.vue';
-const meta = {
-	title: 'pages/settings/mute-block',
-	component: mute_block,
-} satisfies Meta<typeof mute_block>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				mute_block,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<mute_block v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof mute_block>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/navbar.stories.ts b/packages/frontend/src/pages/settings/navbar.stories.ts
deleted file mode 100644
index 8ba931625f..0000000000
--- a/packages/frontend/src/pages/settings/navbar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import navbar_ from './navbar.vue';
-const meta = {
-	title: 'pages/settings/navbar',
-	component: navbar_,
-} satisfies Meta<typeof navbar_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				navbar_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<navbar_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof navbar_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/notifications.stories.ts b/packages/frontend/src/pages/settings/notifications.stories.ts
deleted file mode 100644
index a5fdb40175..0000000000
--- a/packages/frontend/src/pages/settings/notifications.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import notifications_ from './notifications.vue';
-const meta = {
-	title: 'pages/settings/notifications',
-	component: notifications_,
-} satisfies Meta<typeof notifications_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				notifications_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<notifications_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof notifications_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/other.stories.ts b/packages/frontend/src/pages/settings/other.stories.ts
deleted file mode 100644
index c450f45eb6..0000000000
--- a/packages/frontend/src/pages/settings/other.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import other_ from './other.vue';
-const meta = {
-	title: 'pages/settings/other',
-	component: other_,
-} satisfies Meta<typeof other_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				other_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<other_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof other_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.install.stories.ts b/packages/frontend/src/pages/settings/plugin.install.stories.ts
deleted file mode 100644
index 287be56db7..0000000000
--- a/packages/frontend/src/pages/settings/plugin.install.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import plugin_install from './plugin.install.vue';
-const meta = {
-	title: 'pages/settings/plugin.install',
-	component: plugin_install,
-} satisfies Meta<typeof plugin_install>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				plugin_install,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<plugin_install v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof plugin_install>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/plugin.stories.ts b/packages/frontend/src/pages/settings/plugin.stories.ts
deleted file mode 100644
index 8bb4d2ac3b..0000000000
--- a/packages/frontend/src/pages/settings/plugin.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import plugin_ from './plugin.vue';
-const meta = {
-	title: 'pages/settings/plugin',
-	component: plugin_,
-} satisfies Meta<typeof plugin_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				plugin_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<plugin_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof plugin_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/preferences-backups.stories.ts b/packages/frontend/src/pages/settings/preferences-backups.stories.ts
deleted file mode 100644
index 4241696892..0000000000
--- a/packages/frontend/src/pages/settings/preferences-backups.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import preferences_backups from './preferences-backups.vue';
-const meta = {
-	title: 'pages/settings/preferences-backups',
-	component: preferences_backups,
-} satisfies Meta<typeof preferences_backups>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				preferences_backups,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<preferences_backups v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof preferences_backups>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/privacy.stories.ts b/packages/frontend/src/pages/settings/privacy.stories.ts
deleted file mode 100644
index 74e2d42442..0000000000
--- a/packages/frontend/src/pages/settings/privacy.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import privacy_ from './privacy.vue';
-const meta = {
-	title: 'pages/settings/privacy',
-	component: privacy_,
-} satisfies Meta<typeof privacy_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				privacy_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<privacy_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof privacy_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/profile.stories.ts b/packages/frontend/src/pages/settings/profile.stories.ts
deleted file mode 100644
index 30437a471f..0000000000
--- a/packages/frontend/src/pages/settings/profile.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import profile_ from './profile.vue';
-const meta = {
-	title: 'pages/settings/profile',
-	component: profile_,
-} satisfies Meta<typeof profile_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				profile_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<profile_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof profile_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/reaction.stories.ts b/packages/frontend/src/pages/settings/reaction.stories.ts
deleted file mode 100644
index c2fd4d5658..0000000000
--- a/packages/frontend/src/pages/settings/reaction.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import reaction_ from './reaction.vue';
-const meta = {
-	title: 'pages/settings/reaction',
-	component: reaction_,
-} satisfies Meta<typeof reaction_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				reaction_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<reaction_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof reaction_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/roles.stories.ts b/packages/frontend/src/pages/settings/roles.stories.ts
deleted file mode 100644
index 2a8552e7c2..0000000000
--- a/packages/frontend/src/pages/settings/roles.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import roles_ from './roles.vue';
-const meta = {
-	title: 'pages/settings/roles',
-	component: roles_,
-} satisfies Meta<typeof roles_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				roles_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<roles_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof roles_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/security.stories.ts b/packages/frontend/src/pages/settings/security.stories.ts
deleted file mode 100644
index 0efc526bf6..0000000000
--- a/packages/frontend/src/pages/settings/security.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import security_ from './security.vue';
-const meta = {
-	title: 'pages/settings/security',
-	component: security_,
-} satisfies Meta<typeof security_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				security_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<security_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof security_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.sound.stories.ts b/packages/frontend/src/pages/settings/sounds.sound.stories.ts
deleted file mode 100644
index b961fca8cd..0000000000
--- a/packages/frontend/src/pages/settings/sounds.sound.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import sounds_sound from './sounds.sound.vue';
-const meta = {
-	title: 'pages/settings/sounds.sound',
-	component: sounds_sound,
-} satisfies Meta<typeof sounds_sound>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				sounds_sound,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<sounds_sound v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof sounds_sound>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/sounds.stories.ts b/packages/frontend/src/pages/settings/sounds.stories.ts
deleted file mode 100644
index b830240d7f..0000000000
--- a/packages/frontend/src/pages/settings/sounds.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import sounds_ from './sounds.vue';
-const meta = {
-	title: 'pages/settings/sounds',
-	component: sounds_,
-} satisfies Meta<typeof sounds_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				sounds_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<sounds_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof sounds_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
deleted file mode 100644
index 910d3604ac..0000000000
--- a/packages/frontend/src/pages/settings/statusbar.statusbar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar_statusbar from './statusbar.statusbar.vue';
-const meta = {
-	title: 'pages/settings/statusbar.statusbar',
-	component: statusbar_statusbar,
-} satisfies Meta<typeof statusbar_statusbar>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbar_statusbar,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbar_statusbar v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof statusbar_statusbar>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/statusbar.stories.ts b/packages/frontend/src/pages/settings/statusbar.stories.ts
deleted file mode 100644
index 832ad9b125..0000000000
--- a/packages/frontend/src/pages/settings/statusbar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar_ from './statusbar.vue';
-const meta = {
-	title: 'pages/settings/statusbar',
-	component: statusbar_,
-} satisfies Meta<typeof statusbar_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbar_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbar_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof statusbar_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.install.stories.ts b/packages/frontend/src/pages/settings/theme.install.stories.ts
deleted file mode 100644
index 04de316fb2..0000000000
--- a/packages/frontend/src/pages/settings/theme.install.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import theme_install from './theme.install.vue';
-const meta = {
-	title: 'pages/settings/theme.install',
-	component: theme_install,
-} satisfies Meta<typeof theme_install>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				theme_install,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<theme_install v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof theme_install>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.manage.stories.ts b/packages/frontend/src/pages/settings/theme.manage.stories.ts
deleted file mode 100644
index 3ce793e048..0000000000
--- a/packages/frontend/src/pages/settings/theme.manage.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import theme_manage from './theme.manage.vue';
-const meta = {
-	title: 'pages/settings/theme.manage',
-	component: theme_manage,
-} satisfies Meta<typeof theme_manage>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				theme_manage,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<theme_manage v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof theme_manage>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/theme.stories.ts b/packages/frontend/src/pages/settings/theme.stories.ts
deleted file mode 100644
index cb1dcbb9c5..0000000000
--- a/packages/frontend/src/pages/settings/theme.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import theme_ from './theme.vue';
-const meta = {
-	title: 'pages/settings/theme',
-	component: theme_,
-} satisfies Meta<typeof theme_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				theme_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<theme_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof theme_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.edit.stories.ts b/packages/frontend/src/pages/settings/webhook.edit.stories.ts
deleted file mode 100644
index e2b93b6fb9..0000000000
--- a/packages/frontend/src/pages/settings/webhook.edit.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import webhook_edit from './webhook.edit.vue';
-const meta = {
-	title: 'pages/settings/webhook.edit',
-	component: webhook_edit,
-} satisfies Meta<typeof webhook_edit>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				webhook_edit,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<webhook_edit v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof webhook_edit>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.new.stories.ts b/packages/frontend/src/pages/settings/webhook.new.stories.ts
deleted file mode 100644
index ab9ad257e2..0000000000
--- a/packages/frontend/src/pages/settings/webhook.new.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import webhook_new from './webhook.new.vue';
-const meta = {
-	title: 'pages/settings/webhook.new',
-	component: webhook_new,
-} satisfies Meta<typeof webhook_new>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				webhook_new,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<webhook_new v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof webhook_new>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/webhook.stories.ts b/packages/frontend/src/pages/settings/webhook.stories.ts
deleted file mode 100644
index 716501ea8d..0000000000
--- a/packages/frontend/src/pages/settings/webhook.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import webhook_ from './webhook.vue';
-const meta = {
-	title: 'pages/settings/webhook',
-	component: webhook_,
-} satisfies Meta<typeof webhook_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				webhook_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<webhook_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof webhook_>;
-export default meta;
diff --git a/packages/frontend/src/pages/settings/word-mute.stories.ts b/packages/frontend/src/pages/settings/word-mute.stories.ts
deleted file mode 100644
index 24c2f54c7d..0000000000
--- a/packages/frontend/src/pages/settings/word-mute.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import word_mute from './word-mute.vue';
-const meta = {
-	title: 'pages/settings/word-mute',
-	component: word_mute,
-} satisfies Meta<typeof word_mute>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				word_mute,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<word_mute v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof word_mute>;
-export default meta;
diff --git a/packages/frontend/src/pages/share.stories.ts b/packages/frontend/src/pages/share.stories.ts
deleted file mode 100644
index c6c21e5535..0000000000
--- a/packages/frontend/src/pages/share.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import share_ from './share.vue';
-const meta = {
-	title: 'pages/share',
-	component: share_,
-} satisfies Meta<typeof share_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				share_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<share_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof share_>;
-export default meta;
diff --git a/packages/frontend/src/pages/signup-complete.stories.ts b/packages/frontend/src/pages/signup-complete.stories.ts
deleted file mode 100644
index 6b566c763f..0000000000
--- a/packages/frontend/src/pages/signup-complete.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import signup_complete from './signup-complete.vue';
-const meta = {
-	title: 'pages/signup-complete',
-	component: signup_complete,
-} satisfies Meta<typeof signup_complete>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				signup_complete,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<signup_complete v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof signup_complete>;
-export default meta;
diff --git a/packages/frontend/src/pages/tag.stories.ts b/packages/frontend/src/pages/tag.stories.ts
deleted file mode 100644
index 93433f432c..0000000000
--- a/packages/frontend/src/pages/tag.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import tag_ from './tag.vue';
-const meta = {
-	title: 'pages/tag',
-	component: tag_,
-} satisfies Meta<typeof tag_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				tag_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<tag_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof tag_>;
-export default meta;
diff --git a/packages/frontend/src/pages/theme-editor.stories.ts b/packages/frontend/src/pages/theme-editor.stories.ts
deleted file mode 100644
index fd7dc6bebf..0000000000
--- a/packages/frontend/src/pages/theme-editor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import theme_editor from './theme-editor.vue';
-const meta = {
-	title: 'pages/theme-editor',
-	component: theme_editor,
-} satisfies Meta<typeof theme_editor>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				theme_editor,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<theme_editor v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof theme_editor>;
-export default meta;
diff --git a/packages/frontend/src/pages/timeline.stories.ts b/packages/frontend/src/pages/timeline.stories.ts
deleted file mode 100644
index 71a38756ed..0000000000
--- a/packages/frontend/src/pages/timeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import timeline_ from './timeline.vue';
-const meta = {
-	title: 'pages/timeline',
-	component: timeline_,
-} satisfies Meta<typeof timeline_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				timeline_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<timeline_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof timeline_>;
-export default meta;
diff --git a/packages/frontend/src/pages/timeline.tutorial.stories.ts b/packages/frontend/src/pages/timeline.tutorial.stories.ts
deleted file mode 100644
index d53d776fce..0000000000
--- a/packages/frontend/src/pages/timeline.tutorial.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import timeline_tutorial from './timeline.tutorial.vue';
-const meta = {
-	title: 'pages/timeline.tutorial',
-	component: timeline_tutorial,
-} satisfies Meta<typeof timeline_tutorial>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				timeline_tutorial,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<timeline_tutorial v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof timeline_tutorial>;
-export default meta;
diff --git a/packages/frontend/src/pages/user-info.stories.ts b/packages/frontend/src/pages/user-info.stories.ts
deleted file mode 100644
index c5eb34263d..0000000000
--- a/packages/frontend/src/pages/user-info.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import user_info from './user-info.vue';
-const meta = {
-	title: 'pages/user-info',
-	component: user_info,
-} satisfies Meta<typeof user_info>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				user_info,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<user_info v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof user_info>;
-export default meta;
diff --git a/packages/frontend/src/pages/user-list-timeline.stories.ts b/packages/frontend/src/pages/user-list-timeline.stories.ts
deleted file mode 100644
index bf3cd9f74b..0000000000
--- a/packages/frontend/src/pages/user-list-timeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import user_list_timeline from './user-list-timeline.vue';
-const meta = {
-	title: 'pages/user-list-timeline',
-	component: user_list_timeline,
-} satisfies Meta<typeof user_list_timeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				user_list_timeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<user_list_timeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof user_list_timeline>;
-export default meta;
diff --git a/packages/frontend/src/pages/user-tag.stories.ts b/packages/frontend/src/pages/user-tag.stories.ts
deleted file mode 100644
index 5218d646f1..0000000000
--- a/packages/frontend/src/pages/user-tag.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import user_tag from './user-tag.vue';
-const meta = {
-	title: 'pages/user-tag',
-	component: user_tag,
-} satisfies Meta<typeof user_tag>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				user_tag,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<user_tag v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof user_tag>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/achievements.stories.ts b/packages/frontend/src/pages/user/achievements.stories.ts
deleted file mode 100644
index ee2010c26e..0000000000
--- a/packages/frontend/src/pages/user/achievements.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import achievements_ from './achievements.vue';
-const meta = {
-	title: 'pages/user/achievements',
-	component: achievements_,
-} satisfies Meta<typeof achievements_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				achievements_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<achievements_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof achievements_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/activity.following.stories.ts b/packages/frontend/src/pages/user/activity.following.stories.ts
deleted file mode 100644
index 6820454561..0000000000
--- a/packages/frontend/src/pages/user/activity.following.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import activity_following from './activity.following.vue';
-const meta = {
-	title: 'pages/user/activity.following',
-	component: activity_following,
-} satisfies Meta<typeof activity_following>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				activity_following,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<activity_following v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof activity_following>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/activity.heatmap.stories.ts b/packages/frontend/src/pages/user/activity.heatmap.stories.ts
deleted file mode 100644
index 3afec1a492..0000000000
--- a/packages/frontend/src/pages/user/activity.heatmap.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import activity_heatmap from './activity.heatmap.vue';
-const meta = {
-	title: 'pages/user/activity.heatmap',
-	component: activity_heatmap,
-} satisfies Meta<typeof activity_heatmap>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				activity_heatmap,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<activity_heatmap v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof activity_heatmap>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/activity.notes.stories.ts b/packages/frontend/src/pages/user/activity.notes.stories.ts
deleted file mode 100644
index 8ca58e3feb..0000000000
--- a/packages/frontend/src/pages/user/activity.notes.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import activity_notes from './activity.notes.vue';
-const meta = {
-	title: 'pages/user/activity.notes',
-	component: activity_notes,
-} satisfies Meta<typeof activity_notes>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				activity_notes,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<activity_notes v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof activity_notes>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/activity.pv.stories.ts b/packages/frontend/src/pages/user/activity.pv.stories.ts
deleted file mode 100644
index 543bacc11f..0000000000
--- a/packages/frontend/src/pages/user/activity.pv.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import activity_pv from './activity.pv.vue';
-const meta = {
-	title: 'pages/user/activity.pv',
-	component: activity_pv,
-} satisfies Meta<typeof activity_pv>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				activity_pv,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<activity_pv v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof activity_pv>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/activity.stories.ts b/packages/frontend/src/pages/user/activity.stories.ts
deleted file mode 100644
index 3ff888faee..0000000000
--- a/packages/frontend/src/pages/user/activity.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import activity_ from './activity.vue';
-const meta = {
-	title: 'pages/user/activity',
-	component: activity_,
-} satisfies Meta<typeof activity_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				activity_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<activity_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof activity_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/clips.stories.ts b/packages/frontend/src/pages/user/clips.stories.ts
deleted file mode 100644
index 4e3d683af8..0000000000
--- a/packages/frontend/src/pages/user/clips.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import clips_ from './clips.vue';
-const meta = {
-	title: 'pages/user/clips',
-	component: clips_,
-} satisfies Meta<typeof clips_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				clips_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<clips_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof clips_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/follow-list.stories.ts b/packages/frontend/src/pages/user/follow-list.stories.ts
deleted file mode 100644
index 11edbc8c5a..0000000000
--- a/packages/frontend/src/pages/user/follow-list.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import follow_list from './follow-list.vue';
-const meta = {
-	title: 'pages/user/follow-list',
-	component: follow_list,
-} satisfies Meta<typeof follow_list>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				follow_list,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<follow_list v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof follow_list>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/followers.stories.ts b/packages/frontend/src/pages/user/followers.stories.ts
deleted file mode 100644
index ac518d465c..0000000000
--- a/packages/frontend/src/pages/user/followers.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import followers_ from './followers.vue';
-const meta = {
-	title: 'pages/user/followers',
-	component: followers_,
-} satisfies Meta<typeof followers_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				followers_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<followers_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof followers_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/following.stories.ts b/packages/frontend/src/pages/user/following.stories.ts
deleted file mode 100644
index 005475242e..0000000000
--- a/packages/frontend/src/pages/user/following.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import following_ from './following.vue';
-const meta = {
-	title: 'pages/user/following',
-	component: following_,
-} satisfies Meta<typeof following_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				following_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<following_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof following_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/gallery.stories.ts b/packages/frontend/src/pages/user/gallery.stories.ts
deleted file mode 100644
index 5d14e5a569..0000000000
--- a/packages/frontend/src/pages/user/gallery.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import gallery_ from './gallery.vue';
-const meta = {
-	title: 'pages/user/gallery',
-	component: gallery_,
-} satisfies Meta<typeof gallery_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				gallery_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<gallery_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof gallery_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/home.stories.ts b/packages/frontend/src/pages/user/home.stories.ts
deleted file mode 100644
index 7225dcd450..0000000000
--- a/packages/frontend/src/pages/user/home.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import home_ from './home.vue';
-const meta = {
-	title: 'pages/user/home',
-	component: home_,
-} satisfies Meta<typeof home_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				home_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<home_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof home_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/index.activity.stories.ts b/packages/frontend/src/pages/user/index.activity.stories.ts
deleted file mode 100644
index 475c33f09f..0000000000
--- a/packages/frontend/src/pages/user/index.activity.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_activity from './index.activity.vue';
-const meta = {
-	title: 'pages/user/index.activity',
-	component: index_activity,
-} satisfies Meta<typeof index_activity>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_activity,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_activity v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_activity>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/index.photos.stories.ts b/packages/frontend/src/pages/user/index.photos.stories.ts
deleted file mode 100644
index 05c92dbd6d..0000000000
--- a/packages/frontend/src/pages/user/index.photos.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_photos from './index.photos.vue';
-const meta = {
-	title: 'pages/user/index.photos',
-	component: index_photos,
-} satisfies Meta<typeof index_photos>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_photos,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_photos v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_photos>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/index.stories.ts b/packages/frontend/src/pages/user/index.stories.ts
deleted file mode 100644
index a699c0b644..0000000000
--- a/packages/frontend/src/pages/user/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'pages/user/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/index.timeline.stories.ts b/packages/frontend/src/pages/user/index.timeline.stories.ts
deleted file mode 100644
index c44e5c77e0..0000000000
--- a/packages/frontend/src/pages/user/index.timeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_timeline from './index.timeline.vue';
-const meta = {
-	title: 'pages/user/index.timeline',
-	component: index_timeline,
-} satisfies Meta<typeof index_timeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_timeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_timeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof index_timeline>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/pages.stories.ts b/packages/frontend/src/pages/user/pages.stories.ts
deleted file mode 100644
index fd4ecbd885..0000000000
--- a/packages/frontend/src/pages/user/pages.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import pages_ from './pages.vue';
-const meta = {
-	title: 'pages/user/pages',
-	component: pages_,
-} satisfies Meta<typeof pages_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				pages_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<pages_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof pages_>;
-export default meta;
diff --git a/packages/frontend/src/pages/user/reactions.stories.ts b/packages/frontend/src/pages/user/reactions.stories.ts
deleted file mode 100644
index 1859f89fd3..0000000000
--- a/packages/frontend/src/pages/user/reactions.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import reactions_ from './reactions.vue';
-const meta = {
-	title: 'pages/user/reactions',
-	component: reactions_,
-} satisfies Meta<typeof reactions_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				reactions_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<reactions_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof reactions_>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.a.stories.ts b/packages/frontend/src/pages/welcome.entrance.a.stories.ts
deleted file mode 100644
index 54298e9715..0000000000
--- a/packages/frontend/src/pages/welcome.entrance.a.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_entrance_a from './welcome.entrance.a.vue';
-const meta = {
-	title: 'pages/welcome.entrance.a',
-	component: welcome_entrance_a,
-} satisfies Meta<typeof welcome_entrance_a>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_entrance_a,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_entrance_a v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_entrance_a>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.b.stories.ts b/packages/frontend/src/pages/welcome.entrance.b.stories.ts
deleted file mode 100644
index 292d32003f..0000000000
--- a/packages/frontend/src/pages/welcome.entrance.b.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_entrance_b from './welcome.entrance.b.vue';
-const meta = {
-	title: 'pages/welcome.entrance.b',
-	component: welcome_entrance_b,
-} satisfies Meta<typeof welcome_entrance_b>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_entrance_b,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_entrance_b v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_entrance_b>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.entrance.c.stories.ts b/packages/frontend/src/pages/welcome.entrance.c.stories.ts
deleted file mode 100644
index cc99ce2be2..0000000000
--- a/packages/frontend/src/pages/welcome.entrance.c.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_entrance_c from './welcome.entrance.c.vue';
-const meta = {
-	title: 'pages/welcome.entrance.c',
-	component: welcome_entrance_c,
-} satisfies Meta<typeof welcome_entrance_c>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_entrance_c,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_entrance_c v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_entrance_c>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.setup.stories.ts b/packages/frontend/src/pages/welcome.setup.stories.ts
deleted file mode 100644
index f3ebda8fbf..0000000000
--- a/packages/frontend/src/pages/welcome.setup.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_setup from './welcome.setup.vue';
-const meta = {
-	title: 'pages/welcome.setup',
-	component: welcome_setup,
-} satisfies Meta<typeof welcome_setup>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_setup,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_setup v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_setup>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.stories.ts b/packages/frontend/src/pages/welcome.stories.ts
deleted file mode 100644
index afc0f9c57b..0000000000
--- a/packages/frontend/src/pages/welcome.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_ from './welcome.vue';
-const meta = {
-	title: 'pages/welcome',
-	component: welcome_,
-} satisfies Meta<typeof welcome_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_>;
-export default meta;
diff --git a/packages/frontend/src/pages/welcome.timeline.stories.ts b/packages/frontend/src/pages/welcome.timeline.stories.ts
deleted file mode 100644
index 31074ab6ef..0000000000
--- a/packages/frontend/src/pages/welcome.timeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import welcome_timeline from './welcome.timeline.vue';
-const meta = {
-	title: 'pages/welcome.timeline',
-	component: welcome_timeline,
-} satisfies Meta<typeof welcome_timeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				welcome_timeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<welcome_timeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'fullscreen',
-	},
-} satisfies StoryObj<typeof welcome_timeline>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/common.stories.ts b/packages/frontend/src/ui/_common_/common.stories.ts
deleted file mode 100644
index 8a43ccfc52..0000000000
--- a/packages/frontend/src/ui/_common_/common.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import common_ from './common.vue';
-const meta = {
-	title: 'ui/_common_/common',
-	component: common_,
-} satisfies Meta<typeof common_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				common_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<common_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof common_>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts b/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
deleted file mode 100644
index de450478bb..0000000000
--- a/packages/frontend/src/ui/_common_/navbar-for-mobile.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import navbar_for_mobile from './navbar-for-mobile.vue';
-const meta = {
-	title: 'ui/_common_/navbar-for-mobile',
-	component: navbar_for_mobile,
-} satisfies Meta<typeof navbar_for_mobile>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				navbar_for_mobile,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<navbar_for_mobile v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof navbar_for_mobile>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/navbar.stories.ts b/packages/frontend/src/ui/_common_/navbar.stories.ts
deleted file mode 100644
index f951fff19e..0000000000
--- a/packages/frontend/src/ui/_common_/navbar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import navbar_ from './navbar.vue';
-const meta = {
-	title: 'ui/_common_/navbar',
-	component: navbar_,
-} satisfies Meta<typeof navbar_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				navbar_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<navbar_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof navbar_>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/notification.stories.ts b/packages/frontend/src/ui/_common_/notification.stories.ts
deleted file mode 100644
index 52c83dac23..0000000000
--- a/packages/frontend/src/ui/_common_/notification.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import notification_ from './notification.vue';
-const meta = {
-	title: 'ui/_common_/notification',
-	component: notification_,
-} satisfies Meta<typeof notification_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				notification_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<notification_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof notification_>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts b/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
deleted file mode 100644
index 8330dce702..0000000000
--- a/packages/frontend/src/ui/_common_/statusbar-federation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar_federation from './statusbar-federation.vue';
-const meta = {
-	title: 'ui/_common_/statusbar-federation',
-	component: statusbar_federation,
-} satisfies Meta<typeof statusbar_federation>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbar_federation,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbar_federation v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof statusbar_federation>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts b/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
deleted file mode 100644
index 6cd6056a21..0000000000
--- a/packages/frontend/src/ui/_common_/statusbar-rss.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar_rss from './statusbar-rss.vue';
-const meta = {
-	title: 'ui/_common_/statusbar-rss',
-	component: statusbar_rss,
-} satisfies Meta<typeof statusbar_rss>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbar_rss,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbar_rss v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof statusbar_rss>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts b/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
deleted file mode 100644
index b44a974a8d..0000000000
--- a/packages/frontend/src/ui/_common_/statusbar-user-list.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbar_user_list from './statusbar-user-list.vue';
-const meta = {
-	title: 'ui/_common_/statusbar-user-list',
-	component: statusbar_user_list,
-} satisfies Meta<typeof statusbar_user_list>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbar_user_list,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbar_user_list v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof statusbar_user_list>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/statusbars.stories.ts b/packages/frontend/src/ui/_common_/statusbars.stories.ts
deleted file mode 100644
index ca8930e6a6..0000000000
--- a/packages/frontend/src/ui/_common_/statusbars.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import statusbars_ from './statusbars.vue';
-const meta = {
-	title: 'ui/_common_/statusbars',
-	component: statusbars_,
-} satisfies Meta<typeof statusbars_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				statusbars_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<statusbars_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof statusbars_>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts b/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
deleted file mode 100644
index 13fc51987e..0000000000
--- a/packages/frontend/src/ui/_common_/stream-indicator.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import stream_indicator from './stream-indicator.vue';
-const meta = {
-	title: 'ui/_common_/stream-indicator',
-	component: stream_indicator,
-} satisfies Meta<typeof stream_indicator>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				stream_indicator,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<stream_indicator v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof stream_indicator>;
-export default meta;
diff --git a/packages/frontend/src/ui/_common_/upload.stories.ts b/packages/frontend/src/ui/_common_/upload.stories.ts
deleted file mode 100644
index 2083ae2e4d..0000000000
--- a/packages/frontend/src/ui/_common_/upload.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import upload_ from './upload.vue';
-const meta = {
-	title: 'ui/_common_/upload',
-	component: upload_,
-} satisfies Meta<typeof upload_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				upload_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<upload_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof upload_>;
-export default meta;
diff --git a/packages/frontend/src/ui/classic.header.stories.ts b/packages/frontend/src/ui/classic.header.stories.ts
deleted file mode 100644
index 8c868699fe..0000000000
--- a/packages/frontend/src/ui/classic.header.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import classic_header from './classic.header.vue';
-const meta = {
-	title: 'ui/classic.header',
-	component: classic_header,
-} satisfies Meta<typeof classic_header>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				classic_header,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<classic_header v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof classic_header>;
-export default meta;
diff --git a/packages/frontend/src/ui/classic.sidebar.stories.ts b/packages/frontend/src/ui/classic.sidebar.stories.ts
deleted file mode 100644
index f2a0192f8c..0000000000
--- a/packages/frontend/src/ui/classic.sidebar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import classic_sidebar from './classic.sidebar.vue';
-const meta = {
-	title: 'ui/classic.sidebar',
-	component: classic_sidebar,
-} satisfies Meta<typeof classic_sidebar>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				classic_sidebar,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<classic_sidebar v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof classic_sidebar>;
-export default meta;
diff --git a/packages/frontend/src/ui/classic.stories.ts b/packages/frontend/src/ui/classic.stories.ts
deleted file mode 100644
index 2502b0327b..0000000000
--- a/packages/frontend/src/ui/classic.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import classic_ from './classic.vue';
-const meta = {
-	title: 'ui/classic',
-	component: classic_,
-} satisfies Meta<typeof classic_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				classic_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<classic_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof classic_>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck.stories.ts b/packages/frontend/src/ui/deck.stories.ts
deleted file mode 100644
index 7c96891c5d..0000000000
--- a/packages/frontend/src/ui/deck.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import deck_ from './deck.vue';
-const meta = {
-	title: 'ui/deck',
-	component: deck_,
-} satisfies Meta<typeof deck_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				deck_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<deck_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof deck_>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/antenna-column.stories.ts b/packages/frontend/src/ui/deck/antenna-column.stories.ts
deleted file mode 100644
index 83ac00b568..0000000000
--- a/packages/frontend/src/ui/deck/antenna-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import antenna_column from './antenna-column.vue';
-const meta = {
-	title: 'ui/deck/antenna-column',
-	component: antenna_column,
-} satisfies Meta<typeof antenna_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				antenna_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<antenna_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof antenna_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/channel-column.stories.ts b/packages/frontend/src/ui/deck/channel-column.stories.ts
deleted file mode 100644
index 5a44bbc9e5..0000000000
--- a/packages/frontend/src/ui/deck/channel-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import channel_column from './channel-column.vue';
-const meta = {
-	title: 'ui/deck/channel-column',
-	component: channel_column,
-} satisfies Meta<typeof channel_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				channel_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<channel_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof channel_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/column-core.stories.ts b/packages/frontend/src/ui/deck/column-core.stories.ts
deleted file mode 100644
index dd38e0513a..0000000000
--- a/packages/frontend/src/ui/deck/column-core.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import column_core from './column-core.vue';
-const meta = {
-	title: 'ui/deck/column-core',
-	component: column_core,
-} satisfies Meta<typeof column_core>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				column_core,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<column_core v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof column_core>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/column.stories.ts b/packages/frontend/src/ui/deck/column.stories.ts
deleted file mode 100644
index 3c471401e6..0000000000
--- a/packages/frontend/src/ui/deck/column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import column_ from './column.vue';
-const meta = {
-	title: 'ui/deck/column',
-	component: column_,
-} satisfies Meta<typeof column_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				column_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<column_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof column_>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/direct-column.stories.ts b/packages/frontend/src/ui/deck/direct-column.stories.ts
deleted file mode 100644
index 0636349a4f..0000000000
--- a/packages/frontend/src/ui/deck/direct-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import direct_column from './direct-column.vue';
-const meta = {
-	title: 'ui/deck/direct-column',
-	component: direct_column,
-} satisfies Meta<typeof direct_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				direct_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<direct_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof direct_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/list-column.stories.ts b/packages/frontend/src/ui/deck/list-column.stories.ts
deleted file mode 100644
index bd61e2eca9..0000000000
--- a/packages/frontend/src/ui/deck/list-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import list_column from './list-column.vue';
-const meta = {
-	title: 'ui/deck/list-column',
-	component: list_column,
-} satisfies Meta<typeof list_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				list_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<list_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof list_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/main-column.stories.ts b/packages/frontend/src/ui/deck/main-column.stories.ts
deleted file mode 100644
index 97dcb1aaaf..0000000000
--- a/packages/frontend/src/ui/deck/main-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import main_column from './main-column.vue';
-const meta = {
-	title: 'ui/deck/main-column',
-	component: main_column,
-} satisfies Meta<typeof main_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				main_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<main_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof main_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/mentions-column.stories.ts b/packages/frontend/src/ui/deck/mentions-column.stories.ts
deleted file mode 100644
index 5e97cd3676..0000000000
--- a/packages/frontend/src/ui/deck/mentions-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import mentions_column from './mentions-column.vue';
-const meta = {
-	title: 'ui/deck/mentions-column',
-	component: mentions_column,
-} satisfies Meta<typeof mentions_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				mentions_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<mentions_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof mentions_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/notifications-column.stories.ts b/packages/frontend/src/ui/deck/notifications-column.stories.ts
deleted file mode 100644
index 3dc9e30a7f..0000000000
--- a/packages/frontend/src/ui/deck/notifications-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import notifications_column from './notifications-column.vue';
-const meta = {
-	title: 'ui/deck/notifications-column',
-	component: notifications_column,
-} satisfies Meta<typeof notifications_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				notifications_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<notifications_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof notifications_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/tl-column.stories.ts b/packages/frontend/src/ui/deck/tl-column.stories.ts
deleted file mode 100644
index b548763c1f..0000000000
--- a/packages/frontend/src/ui/deck/tl-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import tl_column from './tl-column.vue';
-const meta = {
-	title: 'ui/deck/tl-column',
-	component: tl_column,
-} satisfies Meta<typeof tl_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				tl_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<tl_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof tl_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/deck/widgets-column.stories.ts b/packages/frontend/src/ui/deck/widgets-column.stories.ts
deleted file mode 100644
index ffeb3e71c1..0000000000
--- a/packages/frontend/src/ui/deck/widgets-column.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import widgets_column from './widgets-column.vue';
-const meta = {
-	title: 'ui/deck/widgets-column',
-	component: widgets_column,
-} satisfies Meta<typeof widgets_column>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				widgets_column,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<widgets_column v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof widgets_column>;
-export default meta;
diff --git a/packages/frontend/src/ui/universal.stories.ts b/packages/frontend/src/ui/universal.stories.ts
deleted file mode 100644
index 447f408b7e..0000000000
--- a/packages/frontend/src/ui/universal.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import universal_ from './universal.vue';
-const meta = {
-	title: 'ui/universal',
-	component: universal_,
-} satisfies Meta<typeof universal_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				universal_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<universal_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof universal_>;
-export default meta;
diff --git a/packages/frontend/src/ui/universal.widgets.stories.ts b/packages/frontend/src/ui/universal.widgets.stories.ts
deleted file mode 100644
index 6684bae399..0000000000
--- a/packages/frontend/src/ui/universal.widgets.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import universal_widgets from './universal.widgets.vue';
-const meta = {
-	title: 'ui/universal.widgets',
-	component: universal_widgets,
-} satisfies Meta<typeof universal_widgets>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				universal_widgets,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<universal_widgets v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof universal_widgets>;
-export default meta;
diff --git a/packages/frontend/src/ui/visitor.stories.ts b/packages/frontend/src/ui/visitor.stories.ts
deleted file mode 100644
index 6f9e5dc56a..0000000000
--- a/packages/frontend/src/ui/visitor.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import visitor_ from './visitor.vue';
-const meta = {
-	title: 'ui/visitor',
-	component: visitor_,
-} satisfies Meta<typeof visitor_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				visitor_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<visitor_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof visitor_>;
-export default meta;
diff --git a/packages/frontend/src/ui/visitor/a.stories.ts b/packages/frontend/src/ui/visitor/a.stories.ts
deleted file mode 100644
index 4d482e0419..0000000000
--- a/packages/frontend/src/ui/visitor/a.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import a_ from './a.vue';
-const meta = {
-	title: 'ui/visitor/a',
-	component: a_,
-} satisfies Meta<typeof a_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				a_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<a_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof a_>;
-export default meta;
diff --git a/packages/frontend/src/ui/visitor/b.stories.ts b/packages/frontend/src/ui/visitor/b.stories.ts
deleted file mode 100644
index 11dbda5145..0000000000
--- a/packages/frontend/src/ui/visitor/b.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import b_ from './b.vue';
-const meta = {
-	title: 'ui/visitor/b',
-	component: b_,
-} satisfies Meta<typeof b_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				b_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<b_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof b_>;
-export default meta;
diff --git a/packages/frontend/src/ui/visitor/header.stories.ts b/packages/frontend/src/ui/visitor/header.stories.ts
deleted file mode 100644
index be8e0e06cd..0000000000
--- a/packages/frontend/src/ui/visitor/header.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import header_ from './header.vue';
-const meta = {
-	title: 'ui/visitor/header',
-	component: header_,
-} satisfies Meta<typeof header_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				header_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<header_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof header_>;
-export default meta;
diff --git a/packages/frontend/src/ui/visitor/kanban.stories.ts b/packages/frontend/src/ui/visitor/kanban.stories.ts
deleted file mode 100644
index bf06cc59a1..0000000000
--- a/packages/frontend/src/ui/visitor/kanban.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import kanban_ from './kanban.vue';
-const meta = {
-	title: 'ui/visitor/kanban',
-	component: kanban_,
-} satisfies Meta<typeof kanban_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				kanban_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<kanban_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof kanban_>;
-export default meta;
diff --git a/packages/frontend/src/ui/zen.stories.ts b/packages/frontend/src/ui/zen.stories.ts
deleted file mode 100644
index 592b9137a6..0000000000
--- a/packages/frontend/src/ui/zen.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import zen_ from './zen.vue';
-const meta = {
-	title: 'ui/zen',
-	component: zen_,
-} satisfies Meta<typeof zen_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				zen_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<zen_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof zen_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts b/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
deleted file mode 100644
index 19727964a1..0000000000
--- a/packages/frontend/src/widgets/WidgetActivity.calendar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetActivity_calendar from './WidgetActivity.calendar.vue';
-const meta = {
-	title: 'widgets/WidgetActivity.calendar',
-	component: WidgetActivity_calendar,
-} satisfies Meta<typeof WidgetActivity_calendar>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetActivity_calendar,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetActivity_calendar v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetActivity_calendar>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts b/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
deleted file mode 100644
index 98033392f8..0000000000
--- a/packages/frontend/src/widgets/WidgetActivity.chart.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetActivity_chart from './WidgetActivity.chart.vue';
-const meta = {
-	title: 'widgets/WidgetActivity.chart',
-	component: WidgetActivity_chart,
-} satisfies Meta<typeof WidgetActivity_chart>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetActivity_chart,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetActivity_chart v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetActivity_chart>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetActivity.stories.ts b/packages/frontend/src/widgets/WidgetActivity.stories.ts
deleted file mode 100644
index e558de0c4b..0000000000
--- a/packages/frontend/src/widgets/WidgetActivity.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetActivity from './WidgetActivity.vue';
-const meta = {
-	title: 'widgets/WidgetActivity',
-	component: WidgetActivity,
-} satisfies Meta<typeof WidgetActivity>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetActivity,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetActivity v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetActivity>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAichan.stories.ts b/packages/frontend/src/widgets/WidgetAichan.stories.ts
deleted file mode 100644
index 9cf38696fd..0000000000
--- a/packages/frontend/src/widgets/WidgetAichan.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetAichan from './WidgetAichan.vue';
-const meta = {
-	title: 'widgets/WidgetAichan',
-	component: WidgetAichan,
-} satisfies Meta<typeof WidgetAichan>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetAichan,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetAichan v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetAichan>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscript.stories.ts b/packages/frontend/src/widgets/WidgetAiscript.stories.ts
deleted file mode 100644
index 39f0183d28..0000000000
--- a/packages/frontend/src/widgets/WidgetAiscript.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetAiscript from './WidgetAiscript.vue';
-const meta = {
-	title: 'widgets/WidgetAiscript',
-	component: WidgetAiscript,
-} satisfies Meta<typeof WidgetAiscript>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetAiscript,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetAiscript v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetAiscript>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts b/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
deleted file mode 100644
index 669b17bc9c..0000000000
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetAiscriptApp from './WidgetAiscriptApp.vue';
-const meta = {
-	title: 'widgets/WidgetAiscriptApp',
-	component: WidgetAiscriptApp,
-} satisfies Meta<typeof WidgetAiscriptApp>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetAiscriptApp,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetAiscriptApp v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetAiscriptApp>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetButton.stories.ts b/packages/frontend/src/widgets/WidgetButton.stories.ts
deleted file mode 100644
index 936a044e5f..0000000000
--- a/packages/frontend/src/widgets/WidgetButton.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetButton from './WidgetButton.vue';
-const meta = {
-	title: 'widgets/WidgetButton',
-	component: WidgetButton,
-} satisfies Meta<typeof WidgetButton>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetButton,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetButton v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetButton>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetCalendar.stories.ts b/packages/frontend/src/widgets/WidgetCalendar.stories.ts
deleted file mode 100644
index 85c6c0e59a..0000000000
--- a/packages/frontend/src/widgets/WidgetCalendar.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetCalendar from './WidgetCalendar.vue';
-const meta = {
-	title: 'widgets/WidgetCalendar',
-	component: WidgetCalendar,
-} satisfies Meta<typeof WidgetCalendar>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetCalendar,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetCalendar v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetCalendar>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClicker.stories.ts b/packages/frontend/src/widgets/WidgetClicker.stories.ts
deleted file mode 100644
index cb1dc54552..0000000000
--- a/packages/frontend/src/widgets/WidgetClicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetClicker from './WidgetClicker.vue';
-const meta = {
-	title: 'widgets/WidgetClicker',
-	component: WidgetClicker,
-} satisfies Meta<typeof WidgetClicker>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetClicker,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetClicker v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetClicker>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetClock.stories.ts b/packages/frontend/src/widgets/WidgetClock.stories.ts
deleted file mode 100644
index cb56024ce9..0000000000
--- a/packages/frontend/src/widgets/WidgetClock.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetClock from './WidgetClock.vue';
-const meta = {
-	title: 'widgets/WidgetClock',
-	component: WidgetClock,
-} satisfies Meta<typeof WidgetClock>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetClock,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetClock v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetClock>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts b/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
deleted file mode 100644
index 34c18f069d..0000000000
--- a/packages/frontend/src/widgets/WidgetDigitalClock.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetDigitalClock from './WidgetDigitalClock.vue';
-const meta = {
-	title: 'widgets/WidgetDigitalClock',
-	component: WidgetDigitalClock,
-} satisfies Meta<typeof WidgetDigitalClock>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetDigitalClock,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetDigitalClock v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetDigitalClock>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetFederation.stories.ts b/packages/frontend/src/widgets/WidgetFederation.stories.ts
deleted file mode 100644
index 51de7d9a6b..0000000000
--- a/packages/frontend/src/widgets/WidgetFederation.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetFederation from './WidgetFederation.vue';
-const meta = {
-	title: 'widgets/WidgetFederation',
-	component: WidgetFederation,
-} satisfies Meta<typeof WidgetFederation>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetFederation,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetFederation v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetFederation>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts b/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
deleted file mode 100644
index ff924a5e5b..0000000000
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetInstanceCloud from './WidgetInstanceCloud.vue';
-const meta = {
-	title: 'widgets/WidgetInstanceCloud',
-	component: WidgetInstanceCloud,
-} satisfies Meta<typeof WidgetInstanceCloud>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetInstanceCloud,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetInstanceCloud v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetInstanceCloud>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts b/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
deleted file mode 100644
index d3efb78fdc..0000000000
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetInstanceInfo from './WidgetInstanceInfo.vue';
-const meta = {
-	title: 'widgets/WidgetInstanceInfo',
-	component: WidgetInstanceInfo,
-} satisfies Meta<typeof WidgetInstanceInfo>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetInstanceInfo,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetInstanceInfo v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetInstanceInfo>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts b/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
deleted file mode 100644
index 5f4a001cc9..0000000000
--- a/packages/frontend/src/widgets/WidgetJobQueue.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetJobQueue from './WidgetJobQueue.vue';
-const meta = {
-	title: 'widgets/WidgetJobQueue',
-	component: WidgetJobQueue,
-} satisfies Meta<typeof WidgetJobQueue>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetJobQueue,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetJobQueue v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetJobQueue>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetMemo.stories.ts b/packages/frontend/src/widgets/WidgetMemo.stories.ts
deleted file mode 100644
index 6612257799..0000000000
--- a/packages/frontend/src/widgets/WidgetMemo.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetMemo from './WidgetMemo.vue';
-const meta = {
-	title: 'widgets/WidgetMemo',
-	component: WidgetMemo,
-} satisfies Meta<typeof WidgetMemo>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetMemo,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetMemo v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetMemo>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetNotifications.stories.ts b/packages/frontend/src/widgets/WidgetNotifications.stories.ts
deleted file mode 100644
index 95cf917171..0000000000
--- a/packages/frontend/src/widgets/WidgetNotifications.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetNotifications from './WidgetNotifications.vue';
-const meta = {
-	title: 'widgets/WidgetNotifications',
-	component: WidgetNotifications,
-} satisfies Meta<typeof WidgetNotifications>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetNotifications,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetNotifications v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetNotifications>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts b/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
deleted file mode 100644
index 9c44e57e36..0000000000
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetOnlineUsers from './WidgetOnlineUsers.vue';
-const meta = {
-	title: 'widgets/WidgetOnlineUsers',
-	component: WidgetOnlineUsers,
-} satisfies Meta<typeof WidgetOnlineUsers>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetOnlineUsers,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetOnlineUsers v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetOnlineUsers>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPhotos.stories.ts b/packages/frontend/src/widgets/WidgetPhotos.stories.ts
deleted file mode 100644
index b11ea1505e..0000000000
--- a/packages/frontend/src/widgets/WidgetPhotos.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetPhotos from './WidgetPhotos.vue';
-const meta = {
-	title: 'widgets/WidgetPhotos',
-	component: WidgetPhotos,
-} satisfies Meta<typeof WidgetPhotos>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetPhotos,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetPhotos v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetPhotos>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetPostForm.stories.ts b/packages/frontend/src/widgets/WidgetPostForm.stories.ts
deleted file mode 100644
index 88c00b08e4..0000000000
--- a/packages/frontend/src/widgets/WidgetPostForm.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetPostForm from './WidgetPostForm.vue';
-const meta = {
-	title: 'widgets/WidgetPostForm',
-	component: WidgetPostForm,
-} satisfies Meta<typeof WidgetPostForm>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetPostForm,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetPostForm v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetPostForm>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetProfile.stories.ts b/packages/frontend/src/widgets/WidgetProfile.stories.ts
deleted file mode 100644
index 70413f210d..0000000000
--- a/packages/frontend/src/widgets/WidgetProfile.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetProfile from './WidgetProfile.vue';
-const meta = {
-	title: 'widgets/WidgetProfile',
-	component: WidgetProfile,
-} satisfies Meta<typeof WidgetProfile>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetProfile,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetProfile v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetProfile>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRss.stories.ts b/packages/frontend/src/widgets/WidgetRss.stories.ts
deleted file mode 100644
index e50c22a6c0..0000000000
--- a/packages/frontend/src/widgets/WidgetRss.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetRss from './WidgetRss.vue';
-const meta = {
-	title: 'widgets/WidgetRss',
-	component: WidgetRss,
-} satisfies Meta<typeof WidgetRss>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetRss,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetRss v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetRss>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts b/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
deleted file mode 100644
index a10e504a45..0000000000
--- a/packages/frontend/src/widgets/WidgetRssTicker.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetRssTicker from './WidgetRssTicker.vue';
-const meta = {
-	title: 'widgets/WidgetRssTicker',
-	component: WidgetRssTicker,
-} satisfies Meta<typeof WidgetRssTicker>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetRssTicker,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetRssTicker v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetRssTicker>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts b/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
deleted file mode 100644
index 9bfd1241c7..0000000000
--- a/packages/frontend/src/widgets/WidgetSlideshow.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetSlideshow from './WidgetSlideshow.vue';
-const meta = {
-	title: 'widgets/WidgetSlideshow',
-	component: WidgetSlideshow,
-} satisfies Meta<typeof WidgetSlideshow>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetSlideshow,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetSlideshow v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetSlideshow>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTimeline.stories.ts b/packages/frontend/src/widgets/WidgetTimeline.stories.ts
deleted file mode 100644
index 7c472b0e0a..0000000000
--- a/packages/frontend/src/widgets/WidgetTimeline.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetTimeline from './WidgetTimeline.vue';
-const meta = {
-	title: 'widgets/WidgetTimeline',
-	component: WidgetTimeline,
-} satisfies Meta<typeof WidgetTimeline>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetTimeline,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetTimeline v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetTimeline>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetTrends.stories.ts b/packages/frontend/src/widgets/WidgetTrends.stories.ts
deleted file mode 100644
index 52ec504736..0000000000
--- a/packages/frontend/src/widgets/WidgetTrends.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetTrends from './WidgetTrends.vue';
-const meta = {
-	title: 'widgets/WidgetTrends',
-	component: WidgetTrends,
-} satisfies Meta<typeof WidgetTrends>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetTrends,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetTrends v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetTrends>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts b/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
deleted file mode 100644
index 960392ea7c..0000000000
--- a/packages/frontend/src/widgets/WidgetUnixClock.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetUnixClock from './WidgetUnixClock.vue';
-const meta = {
-	title: 'widgets/WidgetUnixClock',
-	component: WidgetUnixClock,
-} satisfies Meta<typeof WidgetUnixClock>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetUnixClock,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetUnixClock v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetUnixClock>;
-export default meta;
diff --git a/packages/frontend/src/widgets/WidgetUserList.stories.ts b/packages/frontend/src/widgets/WidgetUserList.stories.ts
deleted file mode 100644
index 469992c3c4..0000000000
--- a/packages/frontend/src/widgets/WidgetUserList.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import WidgetUserList from './WidgetUserList.vue';
-const meta = {
-	title: 'widgets/WidgetUserList',
-	component: WidgetUserList,
-} satisfies Meta<typeof WidgetUserList>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				WidgetUserList,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<WidgetUserList v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof WidgetUserList>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts b/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
deleted file mode 100644
index 2a71043409..0000000000
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import cpu_mem from './cpu-mem.vue';
-const meta = {
-	title: 'widgets/server-metric/cpu-mem',
-	component: cpu_mem,
-} satisfies Meta<typeof cpu_mem>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				cpu_mem,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<cpu_mem v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof cpu_mem>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/cpu.stories.ts b/packages/frontend/src/widgets/server-metric/cpu.stories.ts
deleted file mode 100644
index 6cd98615e7..0000000000
--- a/packages/frontend/src/widgets/server-metric/cpu.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import cpu_ from './cpu.vue';
-const meta = {
-	title: 'widgets/server-metric/cpu',
-	component: cpu_,
-} satisfies Meta<typeof cpu_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				cpu_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<cpu_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof cpu_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/disk.stories.ts b/packages/frontend/src/widgets/server-metric/disk.stories.ts
deleted file mode 100644
index 8045a678a8..0000000000
--- a/packages/frontend/src/widgets/server-metric/disk.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import disk_ from './disk.vue';
-const meta = {
-	title: 'widgets/server-metric/disk',
-	component: disk_,
-} satisfies Meta<typeof disk_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				disk_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<disk_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof disk_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/index.stories.ts b/packages/frontend/src/widgets/server-metric/index.stories.ts
deleted file mode 100644
index 072ff25410..0000000000
--- a/packages/frontend/src/widgets/server-metric/index.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import index_ from './index.vue';
-const meta = {
-	title: 'widgets/server-metric/index',
-	component: index_,
-} satisfies Meta<typeof index_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				index_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<index_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof index_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/mem.stories.ts b/packages/frontend/src/widgets/server-metric/mem.stories.ts
deleted file mode 100644
index 14a4e77bed..0000000000
--- a/packages/frontend/src/widgets/server-metric/mem.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import mem_ from './mem.vue';
-const meta = {
-	title: 'widgets/server-metric/mem',
-	component: mem_,
-} satisfies Meta<typeof mem_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				mem_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<mem_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof mem_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/net.stories.ts b/packages/frontend/src/widgets/server-metric/net.stories.ts
deleted file mode 100644
index 9a6f826b5b..0000000000
--- a/packages/frontend/src/widgets/server-metric/net.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import net_ from './net.vue';
-const meta = {
-	title: 'widgets/server-metric/net',
-	component: net_,
-} satisfies Meta<typeof net_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				net_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<net_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof net_>;
-export default meta;
diff --git a/packages/frontend/src/widgets/server-metric/pie.stories.ts b/packages/frontend/src/widgets/server-metric/pie.stories.ts
deleted file mode 100644
index c49ba0f87d..0000000000
--- a/packages/frontend/src/widgets/server-metric/pie.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import pie_ from './pie.vue';
-const meta = {
-	title: 'widgets/server-metric/pie',
-	component: pie_,
-} satisfies Meta<typeof pie_>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				pie_,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<pie_ v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof pie_>;
-export default meta;

From c6d12c21db25104a1e9073be68cc3da0bee2492f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 13:47:59 +0900
Subject: [PATCH 38/99] build(#10336): write stories for
 `MkMisskeyFlavoredMarkdown`

---
 .../MkMisskeyFlavoredMarkdown.stories.impl.ts | 28 +++++++++++++++--
 .../MkMisskeyFlavoredMarkdown.stories.ts      | 31 +++++++++++++++++--
 2 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
index c594b790c3..720aaa1770 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
@@ -1,6 +1,8 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 import { StoryObj } from '@storybook/vue3';
 import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+import { within } from '@storybook/testing-library';
+import { expect } from '@storybook/jest';
 export const Default = {
 	render(args) {
 		return {
@@ -22,8 +24,28 @@ export const Default = {
 			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
 		};
 	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		if (args.plain) {
+			const aiHelloMiskist = canvas.getByText('@ai *Hello*, #Miskist!');
+			await expect(aiHelloMiskist).toBeInTheDocument();
+		} else {
+			const ai = canvas.getByText('@ai');
+			await expect(ai).toBeInTheDocument();
+			await expect(ai.closest('a')).toHaveAttribute('href', '/@ai');
+			const hello = canvas.getByText('Hello');
+			await expect(hello).toBeInTheDocument();
+			await expect(hello.style.fontStyle).toBe('oblique');
+			const miskist = canvas.getByText('#Miskist');
+			await expect(miskist).toBeInTheDocument();
+			await expect(miskist).toHaveAttribute('href', args.isNote ?? true ? '/tags/Miskist' : '/user-tags/Miskist');
+		}
+		const heart = canvas.getByAltText('❤');
+		await expect(heart).toBeInTheDocument();
+		await expect(heart).toHaveAttribute('src', '/twemoji/2764.svg');
+	},
 	args: {
-		text: 'Hello, world!',
+		text: '@ai *Hello*, #Miskist! ❤',
 	},
 	parameters: {
 		layout: 'centered',
@@ -43,10 +65,10 @@ export const Nowrap = {
 		nowrap: true,
 	},
 };
-export const IsNote = {
+export const IsNotNote = {
 	...Default,
 	args: {
 		...Default.args,
-		isNote: true,
+		isNote: false,
 	},
 };
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
index 7103f07ae7..b39951fcc8 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
@@ -9,6 +9,8 @@ export default meta;
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 import { StoryObj } from '@storybook/vue3';
 import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+import { within } from '@storybook/testing-library';
+import { expect } from '@storybook/jest';
 export const Default = {
 	render(args) {
 		return {
@@ -30,8 +32,31 @@ export const Default = {
 			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
 		};
 	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		if (args.plain) {
+			const aiHelloMiskist = canvas.getByText('@ai *Hello*, #Miskist!');
+			await expect(aiHelloMiskist).toBeInTheDocument();
+		} else {
+			const ai = canvas.getByText('@ai');
+			await expect(ai).toBeInTheDocument();
+			await expect(ai.closest('a')).toHaveAttribute('href', '/@ai');
+			const hello = canvas.getByText('Hello');
+			await expect(hello).toBeInTheDocument();
+			await expect(hello.style.fontStyle).toBe('oblique');
+			const miskist = canvas.getByText('#Miskist');
+			await expect(miskist).toBeInTheDocument();
+			await expect(miskist).toHaveAttribute(
+				'href',
+				args.isNote ?? true ? '/tags/Miskist' : '/user-tags/Miskist'
+			);
+		}
+		const heart = canvas.getByAltText('❤');
+		await expect(heart).toBeInTheDocument();
+		await expect(heart).toHaveAttribute('src', '/twemoji/2764.svg');
+	},
 	args: {
-		text: 'Hello, world!',
+		text: '@ai *Hello*, #Miskist! ❤',
 	},
 	parameters: {
 		layout: 'centered',
@@ -51,10 +76,10 @@ export const Nowrap = {
 		nowrap: true,
 	},
 };
-export const IsNote = {
+export const IsNotNote = {
 	...Default,
 	args: {
 		...Default.args,
-		isNote: true,
+		isNote: false,
 	},
 };

From d300f4a87b52abc3bcdbdd316b1efdb479b9856d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 13:58:35 +0900
Subject: [PATCH 39/99] fix: conflict errors

---
 packages/frontend/src/components/MkContextMenu.vue | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/frontend/src/components/MkContextMenu.vue b/packages/frontend/src/components/MkContextMenu.vue
index ded7af10f1..b81c806b0c 100644
--- a/packages/frontend/src/components/MkContextMenu.vue
+++ b/packages/frontend/src/components/MkContextMenu.vue
@@ -19,7 +19,6 @@ import { MenuItem } from './types/menu.vue';
 import contains from '@/scripts/contains';
 import { defaultStore } from '@/store';
 import * as os from '@/os';
-import { defaultStore } from '@/store';
 
 const props = defineProps<{
 	items: MenuItem[];

From 5667f0f839c0c1bd3ff70bcb45c3981205f8e443 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 13:59:00 +0900
Subject: [PATCH 40/99] build(#10336): subcomponents on sidebar

---
 packages/frontend/.storybook/generate.tsx                   | 6 +++++-
 .../src/components/global/MkPageHeader.tabs.stories.ts      | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index b71d3c2a41..62e84d149d 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -107,7 +107,11 @@ function toStories(component: string): string {
 	const base = basename(component);
 	const dir = dirname(component);
 	const literal = (
-		<literal value={component.slice('src/'.length, -'.vue'.length)} />
+		<literal
+			value={component
+				.slice('src/'.length, -'.vue'.length)
+				.replace(/\./g, '/')}
+		/>
 	) as estree.Literal;
 	const identifier = (
 		<identifier
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
index 611aa01790..89c241eb7a 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
@@ -3,7 +3,7 @@
 import { Meta, StoryObj } from '@storybook/vue3';
 import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
 const meta = {
-	title: 'components/global/MkPageHeader.tabs',
+	title: 'components/global/MkPageHeader/tabs',
 	component: MkPageHeader_tabs,
 } satisfies Meta<typeof MkPageHeader_tabs>;
 export const Default = {

From f246699f38a28befbfccc11e9eade22cbaace4f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:04:48 +0900
Subject: [PATCH 41/99] refactor: restore `SatisfiesExpression`

---
 packages/frontend/src/components/MkChart.vue                | 4 ++--
 packages/frontend/src/pages/admin/overview.active-users.vue | 4 ++--
 packages/frontend/src/pages/admin/overview.ap-requests.vue  | 4 ++--
 packages/frontend/src/pages/user/activity.following.vue     | 2 +-
 packages/frontend/src/pages/user/activity.notes.vue         | 2 +-
 packages/frontend/src/pages/user/activity.pv.vue            | 2 +-
 packages/frontend/src/scripts/achievements.ts               | 2 --
 7 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/packages/frontend/src/components/MkChart.vue b/packages/frontend/src/components/MkChart.vue
index 06d5b9949a..3865b29194 100644
--- a/packages/frontend/src/components/MkChart.vue
+++ b/packages/frontend/src/components/MkChart.vue
@@ -15,7 +15,7 @@
   As this is part of Chart.js's API it makes sense to disable the check here.
 */
 import { onMounted, ref, shallowRef, watch, PropType } from 'vue';
-import { Chart } from 'chart.js';
+import { Chart, type ChartDataset } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { defaultStore } from '@/store';
@@ -165,7 +165,7 @@ const render = () => {
 				fill: x.type === 'area',
 				clip: 8,
 				hidden: !!x.hidden,
-			})),
+			} satisfies ChartDataset)),
 		},
 		options: {
 			aspectRatio: props.aspectRatio || 2.5,
diff --git a/packages/frontend/src/pages/admin/overview.active-users.vue b/packages/frontend/src/pages/admin/overview.active-users.vue
index fc10ad75f8..a76f2e073f 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.vue
+++ b/packages/frontend/src/pages/admin/overview.active-users.vue
@@ -9,7 +9,7 @@
 
 <script lang="ts" setup>
 import { onMounted } from 'vue';
-import { Chart } from 'chart.js';
+import { Chart, type ChartDataset } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { defaultStore } from '@/store';
@@ -83,7 +83,7 @@ async function renderChart() {
 				barPercentage: 0.7,
 				categoryPercentage: 0.5,
 				fill: true,
-			}],
+			}] satisfies ChartDataset[],
 		},
 		options: {
 			aspectRatio: 2.5,
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.vue b/packages/frontend/src/pages/admin/overview.ap-requests.vue
index ad8e623415..867137f084 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.vue
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.vue
@@ -16,7 +16,7 @@
 
 <script lang="ts" setup>
 import { onMounted } from 'vue';
-import { Chart } from 'chart.js';
+import { Chart, type ChartDataset } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { useChartTooltip } from '@/scripts/use-chart-tooltip';
@@ -190,7 +190,7 @@ onMounted(async () => {
 				categoryPercentage: 0.9,
 				fill: true,
 				clip: 8,
-			}],
+			}] satisfies ChartDataset[],
 		},
 		options: {
 			aspectRatio: 5,
diff --git a/packages/frontend/src/pages/user/activity.following.vue b/packages/frontend/src/pages/user/activity.following.vue
index 25a1edaca9..54360024f3 100644
--- a/packages/frontend/src/pages/user/activity.following.vue
+++ b/packages/frontend/src/pages/user/activity.following.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		}, extra);
+		} satisfies ChartDataset, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.notes.vue b/packages/frontend/src/pages/user/activity.notes.vue
index 63e1c76e03..7dd02ad6d4 100644
--- a/packages/frontend/src/pages/user/activity.notes.vue
+++ b/packages/frontend/src/pages/user/activity.notes.vue
@@ -76,7 +76,7 @@ async function renderChart() {
 			borderRadius: 4,
 			barPercentage: 0.9,
 			fill: true,
-		}, extra);
+		} satisfies ChartDataset, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.pv.vue b/packages/frontend/src/pages/user/activity.pv.vue
index 1be495f410..6a7506e388 100644
--- a/packages/frontend/src/pages/user/activity.pv.vue
+++ b/packages/frontend/src/pages/user/activity.pv.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		}, extra);
+		} satisfies ChartDataset, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index c93e968594..c77f8e12d3 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -443,13 +443,11 @@ export const ACHIEVEMENT_BADGES = {
 		bg: 'linear-gradient(0deg, rgb(144, 224, 255), rgb(255, 168, 252))',
 		frame: 'bronze',
 	},
-/*
 } as const satisfies Record<typeof ACHIEVEMENT_TYPES[number], {
 	img: string;
 	bg: string | null;
 	frame: 'bronze' | 'silver' | 'gold' | 'platinum';
 }>;
- */ } as const;
 
 export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 

From f3a29cbb0dad5e35149839b2c08a2a0ad26601e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:11:16 +0900
Subject: [PATCH 42/99] docs(#10336): note development status

---
 packages/frontend/src/index.mdx | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/frontend/src/index.mdx b/packages/frontend/src/index.mdx
index d64392c174..e30dea2928 100644
--- a/packages/frontend/src/index.mdx
+++ b/packages/frontend/src/index.mdx
@@ -6,3 +6,7 @@ import { Meta } from '@storybook/blocks'
 
 This project uses [Storybook](https://storybook.js.org/) to develop and document components.
 You can find more information about the usage of Storybook in this project in the CONTRIBUTING.md file placed in the root of this repository.
+
+The Misskey Storybook is under development and not all components are documented yet.
+Contributions are welcome! Please refer to [#10336](https://github.com/misskey-dev/misskey/issues/10336) for more information.
+Thank you for your support!

From 139dade62c703c1c252df4c88e68ac75f5e406b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:14:05 +0900
Subject: [PATCH 43/99] build(#10336): use chokidar-cli

---
 packages/frontend/.storybook/main.ts |   6 -
 packages/frontend/package.json       |   3 +-
 pnpm-lock.yaml                       | 201 ++++++++++++++++++++++-----
 3 files changed, 171 insertions(+), 39 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index eebaabe325..c58b9c0850 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,7 +1,6 @@
 import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
-import restart from 'vite-plugin-restart';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
@@ -23,11 +22,6 @@ const config = {
 	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
-			plugins: [
-				restart({
-					restart: ['../src/**/*', './**/*'],
-				}),
-			],
 			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
 		});
 	},
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 251b4c038f..f7dab92cf0 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -4,6 +4,7 @@
 	"scripts": {
 		"watch": "vite",
 		"build": "vite build",
+		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",
@@ -110,6 +111,7 @@
 		"@vitest/coverage-c8": "^0.29.8",
 		"@vue/runtime-core": "3.2.47",
 		"astring": "^1.8.4",
+		"chokidar-cli": "^3.0.0",
 		"cross-env": "7.0.3",
 		"cypress": "12.9.0",
 		"eslint": "8.37.0",
@@ -125,7 +127,6 @@
 		"storybook": "7.0.0-rc.10",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
-		"vite-plugin-restart": "^0.3.1",
 		"vitest": "^0.29.8",
 		"vitest-fetch-mock": "^0.2.2",
 		"vue-eslint-parser": "9.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 348c8c7c7c..d65e379aec 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -880,6 +880,9 @@ importers:
       astring:
         specifier: ^1.8.4
         version: 1.8.4
+      chokidar-cli:
+        specifier: ^3.0.0
+        version: 3.0.0
       cross-env:
         specifier: 7.0.3
         version: 7.0.3
@@ -925,9 +928,6 @@ importers:
       summaly:
         specifier: github:misskey-dev/summaly
         version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
-      vite-plugin-restart:
-        specifier: ^0.3.1
-        version: 0.3.1(vite@4.2.1)
       vitest:
         specifier: ^0.29.8
         version: 0.29.8(happy-dom@8.9.0)(sass@1.60.0)
@@ -4822,7 +4822,7 @@ packages:
       '@storybook/csf-plugin': 7.0.0-rc.10
       '@storybook/csf-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
-      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/mdx2-csf': 1.0.0-next.7
       '@storybook/node-logger': 7.0.0-rc.10
       '@storybook/postinstall': 7.0.0-rc.10
       '@storybook/preview-api': 7.0.0-rc.10
@@ -4917,7 +4917,7 @@ packages:
     dependencies:
       '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/global': 5.0.0
       '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/preview-api': 7.0.0-rc.10
@@ -5114,7 +5114,7 @@ packages:
       '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/docs-tools': 7.0.0-rc.10
       '@storybook/global': 5.0.0
       '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
@@ -5184,7 +5184,7 @@ packages:
       '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/core-common': 7.0.0-rc.10
       '@storybook/csf-plugin': 7.0.0-rc.10
-      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/mdx2-csf': 1.0.0-next.7
       '@storybook/node-logger': 7.0.0-rc.10
       '@storybook/preview': 7.0.0-rc.10
       '@storybook/preview-api': 7.0.0-rc.10
@@ -5205,6 +5205,17 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/channel-postmessage@7.0.0:
+    resolution: {integrity: sha512-Sy3oHL/xDRjUiHnM0ncnkbOE5pK3O72MjOoiLJX4FCI90w03KM4+F/N0eU2cXl6yXHuCyI5eJisEzQxTNsaJiw==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/global': 5.0.0
+      qs: 6.11.1
+      telejson: 7.0.4
+    dev: true
+
   /@storybook/channel-postmessage@7.0.0-rc.10:
     resolution: {integrity: sha512-U7jx10NwqXiQRMnsY+Dwl8Lkc7a1zAA6fHHDMxxa1AKE7ISDoRi4dIrWs5BmOgi2IdFo52bexIE9RTOgPTuUew==}
     dependencies:
@@ -5233,6 +5244,10 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
+  /@storybook/channels@7.0.0:
+    resolution: {integrity: sha512-adPIkvL4q37dGTWCpSzV8ETLdkxsg7BAgzeT9pustZJjRIZqAHGUAm7krDtGT7jbV4dU0Zw0VpUrnmyfxIkOKQ==}
+    dev: true
+
   /@storybook/channels@7.0.0-rc.10:
     resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==}
     dev: true
@@ -5293,6 +5308,12 @@ packages:
       global: 4.4.0
     dev: true
 
+  /@storybook/client-logger@7.0.0:
+    resolution: {integrity: sha512-wRZZiPta37DFc8SVZ8Q3ZqyTrs5qgO6bcCuVDRLQAcO0Oz4xKEVPEVfVVxSPZU/+p2ypqdBBCP2pdL/Jy86AJg==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
   /@storybook/client-logger@7.0.0-rc.10:
     resolution: {integrity: sha512-K+3SySLua2tcALuk0Mco/o37bX4CeugA9aQClqDyXmVB+Fh6rg8A+uwiraDPooeq+P8AtMxuFc/dKwRejGicLg==}
     dependencies:
@@ -5305,7 +5326,7 @@ packages:
       '@babel/core': 7.21.3
       '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
       '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/csf-tools': 7.0.0-rc.10
       '@storybook/node-logger': 7.0.0-rc.10
       '@storybook/types': 7.0.0-rc.10
@@ -5326,7 +5347,7 @@ packages:
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
       '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/global': 5.0.0
       '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/types': 7.0.0-rc.10
@@ -5376,6 +5397,10 @@ packages:
       core-js: 3.29.1
     dev: true
 
+  /@storybook/core-events@7.0.0:
+    resolution: {integrity: sha512-pxzNmgEI1p90bHyAYABHDDtB2XM5pffq6CqIHboK6aSCux7Cdc16IjOYq6BJIhCKaaI+qQHaFLR4JfaFAsxwQQ==}
+    dev: true
+
   /@storybook/core-events@7.0.0-rc.10:
     resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==}
     dev: true
@@ -5388,7 +5413,7 @@ packages:
       '@storybook/builder-manager': 7.0.0-rc.10
       '@storybook/core-common': 7.0.0-rc.10
       '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/csf-tools': 7.0.0-rc.10
       '@storybook/docs-mdx': 0.0.1-next.6
       '@storybook/global': 5.0.0
@@ -5448,7 +5473,7 @@ packages:
       '@babel/parser': 7.21.3
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/types': 7.0.0-rc.10
       fs-extra: 11.1.0
       recast: 0.23.1
@@ -5463,8 +5488,8 @@ packages:
       lodash: 4.17.21
     dev: true
 
-  /@storybook/csf@0.0.2-next.10:
-    resolution: {integrity: sha512-m2PFgBP/xRIF85VrDhvesn9ktaD2pN3VUjvMqkAL/cINp/3qXsCyI81uw7N5VEOkQAbWrY2FcydnvEPDEdE8fA==}
+  /@storybook/csf@0.0.2-next.11:
+    resolution: {integrity: sha512-xGt0YSVxZb43sKmEf1GIQD8xEbo+c+S6khDEL7Qu/pYA0gh5z3WUuhOlovnelYj/YJod+XRsfVvk23AaRfUJ4Q==}
     dependencies:
       type-fest: 2.19.0
     dev: true
@@ -5510,6 +5535,16 @@ packages:
       - react-dom
     dev: true
 
+  /@storybook/instrumenter@7.0.0:
+    resolution: {integrity: sha512-A7jBrV7VM3OxRgall8rpjagy3VC78A/OV1g1aYVVLpAF/+Odj+MeHHF179+fR6JBLnBgukNfsG7/ZHHGs0gL5Q==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0
+    dev: true
+
   /@storybook/instrumenter@7.0.0-rc.10:
     resolution: {integrity: sha512-XaU6pxbcUnGgM7OywPs8E/k3H6Up/mf2kPfrHp9qhztx7ypKsKZi2lfxpOlmORy/s6JZl8kZATDyfgAGmVnbvg==}
     dependencies:
@@ -5541,7 +5576,7 @@ packages:
       '@storybook/channels': 7.0.0-rc.10
       '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/global': 5.0.0
       '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
       '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
@@ -5561,8 +5596,8 @@ packages:
     resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==}
     dev: true
 
-  /@storybook/mdx2-csf@1.0.0-next.6:
-    resolution: {integrity: sha512-m6plojocU/rmrqWd26yvm8D+oHZPZ6PtSSFmZIgpNDEPVmc8s4fBD6LXOAB5MiPI5f8KLUr2HVhOMZ97o5pDTw==}
+  /@storybook/mdx2-csf@1.0.0-next.7:
+    resolution: {integrity: sha512-xcQ8w4IecABAjsakaZTGiUEnEgFZzVKsMjqECjd+qdkwgD3R/kwrBdfyC15CLM5Ye1miPwYBIwJGeBXB9qxsZg==}
     dev: true
 
   /@storybook/node-logger@7.0.0-rc.10:
@@ -5578,6 +5613,26 @@ packages:
     resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==}
     dev: true
 
+  /@storybook/preview-api@7.0.0:
+    resolution: {integrity: sha512-Q0IYYH1gOmx42ClYlQfQPjuERBWM3Ey+3DFsLQaraKXDdgZ9wN7jPNuS7wxuUNylT0oa/3WjxT7qNfiGw8JtBw==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/preview-api@7.0.0-rc.10:
     resolution: {integrity: sha512-3oBm6Che7ctbOLS3TTbuySbLdxA1xqLDgn8AaOadCd4SmCfhxZNor35RO1TlN8S8pQPsGlT9UBWB4xKxhq0e2A==}
     dependencies:
@@ -5585,7 +5640,7 @@ packages:
       '@storybook/channels': 7.0.0-rc.10
       '@storybook/client-logger': 7.0.0-rc.10
       '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/global': 5.0.0
       '@storybook/types': 7.0.0-rc.10
       '@types/qs': 6.9.7
@@ -5721,7 +5776,7 @@ packages:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/csf': 0.0.2-next.10
+      '@storybook/csf': 0.0.2-next.11
       '@storybook/types': 7.0.0-rc.10
       estraverse: 5.3.0
       lodash: 4.17.21
@@ -5750,8 +5805,8 @@ packages:
   /@storybook/testing-library@0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/instrumenter': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0
+      '@storybook/instrumenter': 7.0.0
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0)
       ts-dedent: 2.2.0
@@ -5785,6 +5840,15 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
+  /@storybook/types@7.0.0:
+    resolution: {integrity: sha512-eCMW/xTVMswgD/58itibw8s8f2hZ7tciT3saRdGCymg9tPUhMC/9eGIIUSr/C+xfnCJEZm6J6DgEUo1xlifonw==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
   /@storybook/types@7.0.0-rc.10:
     resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==}
     dependencies:
@@ -7411,6 +7475,11 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /ansi-regex@4.1.1:
+    resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+    engines: {node: '>=6'}
+    dev: true
+
   /ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
@@ -8679,6 +8748,17 @@ packages:
       parse5: 7.1.2
       parse5-htmlparser2-tree-adapter: 7.0.0
 
+  /chokidar-cli@3.0.0:
+    resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==}
+    engines: {node: '>= 8.10.0'}
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+      lodash.debounce: 4.0.8
+      lodash.throttle: 4.1.1
+      yargs: 13.3.2
+    dev: true
+
   /chokidar@3.5.3:
     resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
     engines: {node: '>= 8.10.0'}
@@ -8797,6 +8877,14 @@ packages:
       wrap-ansi: 2.1.0
     dev: false
 
+  /cliui@5.0.0:
+    resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
+    dependencies:
+      string-width: 3.1.0
+      strip-ansi: 5.2.0
+      wrap-ansi: 5.1.0
+    dev: true
+
   /cliui@6.0.0:
     resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
     dependencies:
@@ -9863,6 +9951,10 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /emoji-regex@7.0.3:
+    resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+    dev: true
+
   /emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -12664,6 +12756,11 @@ packages:
       number-is-nan: 1.0.1
     dev: false
 
+  /is-fullwidth-code-point@2.0.0:
+    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+    engines: {node: '>=4'}
+    dev: true
+
   /is-fullwidth-code-point@3.0.0:
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     engines: {node: '>=8'}
@@ -14052,6 +14149,10 @@ packages:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
     dev: true
 
+  /lodash.throttle@4.1.1:
+    resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+    dev: true
+
   /lodash.union@4.6.0:
     resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
     dev: false
@@ -14916,6 +15017,7 @@ packages:
   /nopt@5.0.0:
     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
     engines: {node: '>=6'}
+    hasBin: true
     dependencies:
       abbrev: 1.1.1
     dev: false
@@ -17070,7 +17172,6 @@ packages:
 
   /require-main-filename@2.0.0:
     resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-    dev: false
 
   /requires-port@1.0.0:
     resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
@@ -17964,6 +18065,15 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
+  /string-width@3.1.0:
+    resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+    engines: {node: '>=6'}
+    dependencies:
+      emoji-regex: 7.0.3
+      is-fullwidth-code-point: 2.0.0
+      strip-ansi: 5.2.0
+    dev: true
+
   /string-width@4.2.3:
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
     engines: {node: '>=8'}
@@ -18024,6 +18134,13 @@ packages:
       ansi-regex: 2.1.1
     dev: false
 
+  /strip-ansi@5.2.0:
+    resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+    engines: {node: '>=6'}
+    dependencies:
+      ansi-regex: 4.1.1
+    dev: true
+
   /strip-ansi@6.0.1:
     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
     engines: {node: '>=8'}
@@ -19283,15 +19400,6 @@ packages:
       - terser
     dev: true
 
-  /vite-plugin-restart@0.3.1(vite@4.2.1):
-    resolution: {integrity: sha512-LVe74MLUwaOzXVUgRGiphYbAYNgdGF6mP5vxj5BKcKkdmzvuuw79qcNgn9kHKKaIlCCjmOUiY3qlJ8jBSBUCoA==}
-    peerDependencies:
-      vite: ^2.9.0 || ^3.0.0 || ^4.0.0
-    dependencies:
-      micromatch: 4.0.5
-      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
-    dev: true
-
   /vite@4.2.1(@types/node@18.15.11)(sass@1.60.0):
     resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -19661,7 +19769,6 @@ packages:
 
   /which-module@2.0.0:
     resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
-    dev: false
 
   /which-typed-array@1.1.9:
     resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
@@ -19735,6 +19842,15 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
+  /wrap-ansi@5.1.0:
+    resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
+    engines: {node: '>=6'}
+    dependencies:
+      ansi-styles: 3.2.1
+      string-width: 3.1.0
+      strip-ansi: 5.2.0
+    dev: true
+
   /wrap-ansi@6.2.0:
     resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
     engines: {node: '>=8'}
@@ -19837,7 +19953,6 @@ packages:
 
   /y18n@4.0.3:
     resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-    dev: false
 
   /y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
@@ -19857,6 +19972,13 @@ packages:
   /yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
 
+  /yargs-parser@13.1.2:
+    resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
+    dependencies:
+      camelcase: 5.3.1
+      decamelize: 1.2.0
+    dev: true
+
   /yargs-parser@18.1.3:
     resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
     engines: {node: '>=6'}
@@ -19880,6 +20002,21 @@ packages:
       object.assign: 4.1.4
     dev: false
 
+  /yargs@13.3.2:
+    resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
+    dependencies:
+      cliui: 5.0.0
+      find-up: 3.0.0
+      get-caller-file: 2.0.5
+      require-directory: 2.1.1
+      require-main-filename: 2.0.0
+      set-blocking: 2.0.0
+      string-width: 3.1.0
+      which-module: 2.0.0
+      y18n: 4.0.3
+      yargs-parser: 13.1.2
+    dev: true
+
   /yargs@15.4.1:
     resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
     engines: {node: '>=8'}

From f7bc442ba5691b874aac026834e848a68861b651 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:18:17 +0900
Subject: [PATCH 44/99] docs(#10336): note chokidar-cli mode

---
 CONTRIBUTING.md | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4e8a09f814..c6b50015ff 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -207,20 +207,40 @@ vue-routerとの最大の違いは、niraxは複数のルーターが存在す
 
 Misskey uses [Storybook](https://storybook.js.org/) for UI development.
 
-### Setup
+### Setup & Run
+
+#### Universal
+
+##### Setup
 
 ```bash
 cd path/to/packages/misskey-js
 pnpm build
 cd path/to/packages/frontend
-pnpm tsc -p .storybook && (node .storybook/generate.js & node .storybook/preload-locale.js & node .storybook/preload-theme.js)
+pnpm tsc -p .storybook && (node .storybook/preload-locale.js & node .storybook/preload-theme.js)
 ```
 
-### Run
+##### Run
 
 ```bash
 cd path/to/packages/frontend
-pnpm storybook dev
+node .storybook/generate.js && pnpm storybook dev
+```
+
+#### macOS & Linux
+
+##### Setup
+
+```bash
+cd path/to/packages/misskey-js
+pnpm build
+```
+
+##### Run
+
+```bash
+cd path/to/packages/frontend
+pnpm storybook-dev
 ```
 
 ### Usage

From f5fd59d6565127d1c3b536ae44cdf43b8d6490c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:21:46 +0900
Subject: [PATCH 45/99] chore(#10336): untrack generated stories files

---
 .gitignore                                    |   1 +
 .../src/components/global/MkA.stories.ts      |  54 --------
 .../src/components/global/MkAcct.stories.ts   |  47 -------
 .../src/components/global/MkAd.stories.ts     | 130 ------------------
 .../src/components/global/MkAvatar.stories.ts |  65 ---------
 .../global/MkCustomEmoji.stories.ts           |  54 --------
 .../components/global/MkEllipsis.stories.ts   |  34 -----
 .../src/components/global/MkEmoji.stories.ts  |  40 ------
 .../src/components/global/MkError.stories.ts  |  36 -----
 .../components/global/MkLoading.stories.ts    |  65 ---------
 .../MkMisskeyFlavoredMarkdown.stories.ts      |  85 ------------
 .../components/global/MkPageHeader.stories.ts |  34 -----
 .../global/MkPageHeader.tabs.stories.ts       |  34 -----
 .../src/components/global/MkSpacer.stories.ts |  34 -----
 .../global/MkStickyContainer.stories.ts       |  34 -----
 .../src/components/global/MkTime.stories.ts   |  34 -----
 .../src/components/global/MkUrl.stories.ts    |  34 -----
 .../components/global/MkUserName.stories.ts   |  34 -----
 .../components/global/RouterView.stories.ts   |  34 -----
 19 files changed, 1 insertion(+), 882 deletions(-)
 delete mode 100644 packages/frontend/src/components/global/MkA.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkAcct.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkAd.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkAvatar.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkCustomEmoji.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkEllipsis.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkEmoji.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkError.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkLoading.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkPageHeader.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkSpacer.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkStickyContainer.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkTime.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkUrl.stories.ts
 delete mode 100644 packages/frontend/src/components/global/MkUserName.stories.ts
 delete mode 100644 packages/frontend/src/components/global/RouterView.stories.ts

diff --git a/.gitignore b/.gitignore
index 29420311b8..fbe2245502 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,7 @@ api-docs.json
 /files
 ormconfig.json
 temp
+/packages/frontend/src/**/*.stories.ts
 
 # blender backups
 *.blend1
diff --git a/packages/frontend/src/components/global/MkA.stories.ts b/packages/frontend/src/components/global/MkA.stories.ts
deleted file mode 100644
index cdc5d13f6a..0000000000
--- a/packages/frontend/src/components/global/MkA.stories.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkA',
-	component: MkA,
-} satisfies Meta<typeof MkA>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { expect } from '@storybook/jest';
-import { userEvent, within } from '@storybook/testing-library';
-import { StoryObj } from '@storybook/vue3';
-import { tick } from '@/scripts/test-utils';
-import MkA from './MkA.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkA,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkA v-bind="props">Text</MkA>',
-		};
-	},
-	async play({ canvasElement }) {
-		const canvas = within(canvasElement);
-		const a = canvas.getByRole<HTMLAnchorElement>('link');
-		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
-		await userEvent.click(a, { button: 2 });
-		await tick();
-		const menu = canvas.getByRole('menu');
-		await expect(menu).toBeInTheDocument();
-		await userEvent.click(a, { button: 0 });
-		await tick();
-		await expect(menu).not.toBeInTheDocument();
-	},
-	args: {
-		to: '#test',
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkA>;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.ts b/packages/frontend/src/components/global/MkAcct.stories.ts
deleted file mode 100644
index 95b1286c75..0000000000
--- a/packages/frontend/src/components/global/MkAcct.stories.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkAcct',
-	component: MkAcct,
-} satisfies Meta<typeof MkAcct>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { StoryObj } from '@storybook/vue3';
-import { userDetailed } from '../../../.storybook/fakes';
-import MkAcct from './MkAcct.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkAcct,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAcct v-bind="props" />',
-		};
-	},
-	args: {
-		user: userDetailed,
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAcct>;
-export const Detail = {
-	...Default,
-	args: {
-		...Default.args,
-		detail: true,
-	},
-} satisfies StoryObj<typeof MkAcct>;
diff --git a/packages/frontend/src/components/global/MkAd.stories.ts b/packages/frontend/src/components/global/MkAd.stories.ts
deleted file mode 100644
index d852b911ee..0000000000
--- a/packages/frontend/src/components/global/MkAd.stories.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkAd',
-	component: MkAd,
-} satisfies Meta<typeof MkAd>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { expect } from '@storybook/jest';
-import { userEvent, within } from '@storybook/testing-library';
-import { StoryObj } from '@storybook/vue3';
-import { i18n } from '@/i18n';
-import MkAd from './MkAd.vue';
-const common = {
-	render(args) {
-		return {
-			components: {
-				MkAd,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAd v-bind="props" />',
-		};
-	},
-	async play({ canvasElement, args }) {
-		const canvas = within(canvasElement);
-		const a = canvas.getByRole<HTMLAnchorElement>('link');
-		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
-		const img = within(a).getByRole('img');
-		await expect(img).toBeInTheDocument();
-		let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
-		await expect(buttons).toHaveLength(1);
-		const i = buttons[0];
-		await expect(i).toBeInTheDocument();
-		await userEvent.click(i);
-		await expect(a).not.toBeInTheDocument();
-		await expect(i).not.toBeInTheDocument();
-		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
-		await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
-		const reduce = args.__hasReduce ? buttons[0] : null;
-		const back = buttons[args.__hasReduce ? 1 : 0];
-		if (reduce) {
-			await expect(reduce).toBeInTheDocument();
-			await expect(reduce).toHaveTextContent(
-				i18n.ts._ad.reduceFrequencyOfThisAd
-			);
-		}
-		await expect(back).toBeInTheDocument();
-		await expect(back).toHaveTextContent(i18n.ts._ad.back);
-		await userEvent.click(back);
-		if (reduce) {
-			await expect(reduce).not.toBeInTheDocument();
-		}
-		await expect(back).not.toBeInTheDocument();
-		const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
-		await expect(aAgain).toBeInTheDocument();
-		const imgAgain = within(aAgain).getByRole('img');
-		await expect(imgAgain).toBeInTheDocument();
-	},
-	args: {
-		prefer: [],
-		specify: {
-			id: 'someadid',
-			radio: 1,
-			url: '#test',
-		},
-		__hasReduce: true,
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAd>;
-export const Square = {
-	...common,
-	args: {
-		...common.args,
-		specify: {
-			...common.args.specify,
-			place: 'square',
-			imageUrl:
-				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
-		},
-	},
-};
-export const Horizontal = {
-	...common,
-	args: {
-		...common.args,
-		specify: {
-			...common.args.specify,
-			place: 'horizontal',
-			imageUrl:
-				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
-		},
-	},
-};
-export const HorizontalBig = {
-	...common,
-	args: {
-		...common.args,
-		specify: {
-			...common.args.specify,
-			place: 'horizontal-big',
-			imageUrl:
-				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
-		},
-	},
-};
-export const ZeroRatio = {
-	...Square,
-	args: {
-		...Square.args,
-		specify: {
-			...Square.args.specify,
-			ratio: 0,
-		},
-		__hasReduce: false,
-	},
-};
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.ts b/packages/frontend/src/components/global/MkAvatar.stories.ts
deleted file mode 100644
index 51265720b8..0000000000
--- a/packages/frontend/src/components/global/MkAvatar.stories.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkAvatar',
-	component: MkAvatar,
-} satisfies Meta<typeof MkAvatar>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
-import { StoryObj } from '@storybook/vue3';
-import { userDetailed } from '../../../.storybook/fakes';
-import MkAvatar from './MkAvatar.vue';
-const common = {
-	render(args) {
-		return {
-			components: {
-				MkAvatar,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkAvatar v-bind="props" />',
-		};
-	},
-	args: {
-		user: userDetailed,
-	},
-	decorators: [
-		(Story, context) => ({
-			// eslint-disable-next-line quotes
-			template: `<div :style="{ display: 'grid', width: '${context.args.size}px', height: '${context.args.size}px' }"><story/></div>`,
-		}),
-	],
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkAvatar>;
-export const ProfilePage = {
-	...common,
-	args: {
-		...common.args,
-		size: 120,
-		indicator: true,
-	},
-};
-export const ProfilePageCat = {
-	...ProfilePage,
-	args: {
-		...ProfilePage.args,
-		user: {
-			...userDetailed,
-			isCat: true,
-		},
-	},
-};
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
deleted file mode 100644
index 5624eef5b1..0000000000
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkCustomEmoji',
-	component: MkCustomEmoji,
-} satisfies Meta<typeof MkCustomEmoji>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
-import { StoryObj } from '@storybook/vue3';
-import MkCustomEmoji from './MkCustomEmoji.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkCustomEmoji,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkCustomEmoji v-bind="props" />',
-		};
-	},
-	args: {
-		name: 'mi',
-		url: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkCustomEmoji>;
-export const Normal = {
-	...Default,
-	args: {
-		...Default.args,
-		normal: true,
-	},
-};
-export const Missing = {
-	...Default,
-	args: {
-		name: Default.args.name,
-	},
-};
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.ts b/packages/frontend/src/components/global/MkEllipsis.stories.ts
deleted file mode 100644
index 5b8b7ca062..0000000000
--- a/packages/frontend/src/components/global/MkEllipsis.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkEllipsis from './MkEllipsis.vue';
-const meta = {
-	title: 'components/global/MkEllipsis',
-	component: MkEllipsis,
-} satisfies Meta<typeof MkEllipsis>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEllipsis,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEllipsis v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEllipsis>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.ts b/packages/frontend/src/components/global/MkEmoji.stories.ts
deleted file mode 100644
index e3e81a76ab..0000000000
--- a/packages/frontend/src/components/global/MkEmoji.stories.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkEmoji',
-	component: MkEmoji,
-} satisfies Meta<typeof MkEmoji>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
-import { StoryObj } from '@storybook/vue3';
-import MkEmoji from './MkEmoji.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkEmoji,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkEmoji v-bind="props" />',
-		};
-	},
-	args: {
-		emoji: '❤',
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkEmoji>;
diff --git a/packages/frontend/src/components/global/MkError.stories.ts b/packages/frontend/src/components/global/MkError.stories.ts
deleted file mode 100644
index 274117f950..0000000000
--- a/packages/frontend/src/components/global/MkError.stories.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkError from './MkError.vue';
-import * as storiesMeta from './MkError.stories.meta';
-const meta = {
-	title: 'components/global/MkError',
-	component: MkError,
-	...storiesMeta,
-} satisfies Meta<typeof MkError>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkError,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkError v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkError>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkLoading.stories.ts b/packages/frontend/src/components/global/MkLoading.stories.ts
deleted file mode 100644
index dd58d30e7c..0000000000
--- a/packages/frontend/src/components/global/MkLoading.stories.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkLoading',
-	component: MkLoading,
-} satisfies Meta<typeof MkLoading>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { StoryObj } from '@storybook/vue3';
-import MkLoading from './MkLoading.vue';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkLoading,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkLoading v-bind="props" />',
-		};
-	},
-	args: {},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkLoading>;
-export const Inline = {
-	...Default,
-	args: {
-		...Default.args,
-		inline: true,
-	},
-};
-export const Colored = {
-	...Default,
-	args: {
-		...Default.args,
-		colored: true,
-	},
-};
-export const Mini = {
-	...Default,
-	args: {
-		...Default.args,
-		mini: true,
-	},
-};
-export const Em = {
-	...Default,
-	args: {
-		...Default.args,
-		em: true,
-	},
-};
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
deleted file mode 100644
index b39951fcc8..0000000000
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta } from '@storybook/vue3';
-const meta = {
-	title: 'components/global/MkMisskeyFlavoredMarkdown',
-	component: MkMisskeyFlavoredMarkdown,
-} satisfies Meta<typeof MkMisskeyFlavoredMarkdown>;
-export default meta;
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { StoryObj } from '@storybook/vue3';
-import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
-import { within } from '@storybook/testing-library';
-import { expect } from '@storybook/jest';
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkMisskeyFlavoredMarkdown,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
-		};
-	},
-	async play({ canvasElement, args }) {
-		const canvas = within(canvasElement);
-		if (args.plain) {
-			const aiHelloMiskist = canvas.getByText('@ai *Hello*, #Miskist!');
-			await expect(aiHelloMiskist).toBeInTheDocument();
-		} else {
-			const ai = canvas.getByText('@ai');
-			await expect(ai).toBeInTheDocument();
-			await expect(ai.closest('a')).toHaveAttribute('href', '/@ai');
-			const hello = canvas.getByText('Hello');
-			await expect(hello).toBeInTheDocument();
-			await expect(hello.style.fontStyle).toBe('oblique');
-			const miskist = canvas.getByText('#Miskist');
-			await expect(miskist).toBeInTheDocument();
-			await expect(miskist).toHaveAttribute(
-				'href',
-				args.isNote ?? true ? '/tags/Miskist' : '/user-tags/Miskist'
-			);
-		}
-		const heart = canvas.getByAltText('❤');
-		await expect(heart).toBeInTheDocument();
-		await expect(heart).toHaveAttribute('src', '/twemoji/2764.svg');
-	},
-	args: {
-		text: '@ai *Hello*, #Miskist! ❤',
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
-export const Plain = {
-	...Default,
-	args: {
-		...Default.args,
-		plain: true,
-	},
-};
-export const Nowrap = {
-	...Default,
-	args: {
-		...Default.args,
-		nowrap: true,
-	},
-};
-export const IsNotNote = {
-	...Default,
-	args: {
-		...Default.args,
-		isNote: false,
-	},
-};
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.ts b/packages/frontend/src/components/global/MkPageHeader.stories.ts
deleted file mode 100644
index 6f0b9dd344..0000000000
--- a/packages/frontend/src/components/global/MkPageHeader.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPageHeader from './MkPageHeader.vue';
-const meta = {
-	title: 'components/global/MkPageHeader',
-	component: MkPageHeader,
-} satisfies Meta<typeof MkPageHeader>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPageHeader,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPageHeader v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPageHeader>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
deleted file mode 100644
index 89c241eb7a..0000000000
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
-const meta = {
-	title: 'components/global/MkPageHeader/tabs',
-	component: MkPageHeader_tabs,
-} satisfies Meta<typeof MkPageHeader_tabs>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkPageHeader_tabs,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkPageHeader_tabs v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkPageHeader_tabs>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkSpacer.stories.ts b/packages/frontend/src/components/global/MkSpacer.stories.ts
deleted file mode 100644
index f5e7b2eb9b..0000000000
--- a/packages/frontend/src/components/global/MkSpacer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkSpacer from './MkSpacer.vue';
-const meta = {
-	title: 'components/global/MkSpacer',
-	component: MkSpacer,
-} satisfies Meta<typeof MkSpacer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkSpacer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkSpacer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkSpacer>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.ts
deleted file mode 100644
index 180fdddb1a..0000000000
--- a/packages/frontend/src/components/global/MkStickyContainer.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkStickyContainer from './MkStickyContainer.vue';
-const meta = {
-	title: 'components/global/MkStickyContainer',
-	component: MkStickyContainer,
-} satisfies Meta<typeof MkStickyContainer>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkStickyContainer,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkStickyContainer v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkStickyContainer>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkTime.stories.ts b/packages/frontend/src/components/global/MkTime.stories.ts
deleted file mode 100644
index d45dc70f28..0000000000
--- a/packages/frontend/src/components/global/MkTime.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkTime from './MkTime.vue';
-const meta = {
-	title: 'components/global/MkTime',
-	component: MkTime,
-} satisfies Meta<typeof MkTime>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkTime,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkTime v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkTime>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkUrl.stories.ts b/packages/frontend/src/components/global/MkUrl.stories.ts
deleted file mode 100644
index e3b2c4ceba..0000000000
--- a/packages/frontend/src/components/global/MkUrl.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUrl from './MkUrl.vue';
-const meta = {
-	title: 'components/global/MkUrl',
-	component: MkUrl,
-} satisfies Meta<typeof MkUrl>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUrl,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUrl v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUrl>;
-export default meta;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.ts b/packages/frontend/src/components/global/MkUserName.stories.ts
deleted file mode 100644
index ec708c61c8..0000000000
--- a/packages/frontend/src/components/global/MkUserName.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import MkUserName from './MkUserName.vue';
-const meta = {
-	title: 'components/global/MkUserName',
-	component: MkUserName,
-} satisfies Meta<typeof MkUserName>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				MkUserName,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<MkUserName v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof MkUserName>;
-export default meta;
diff --git a/packages/frontend/src/components/global/RouterView.stories.ts b/packages/frontend/src/components/global/RouterView.stories.ts
deleted file mode 100644
index 86e25b4757..0000000000
--- a/packages/frontend/src/components/global/RouterView.stories.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-default-export */
-import { Meta, StoryObj } from '@storybook/vue3';
-import RouterView from './RouterView.vue';
-const meta = {
-	title: 'components/global/RouterView',
-	component: RouterView,
-} satisfies Meta<typeof RouterView>;
-export const Default = {
-	render(args) {
-		return {
-			components: {
-				RouterView,
-			},
-			setup() {
-				return {
-					args,
-				};
-			},
-			computed: {
-				props() {
-					return {
-						...args,
-					};
-				},
-			},
-			template: '<RouterView v-bind="props" />',
-		};
-	},
-	parameters: {
-		layout: 'centered',
-	},
-} satisfies StoryObj<typeof RouterView>;
-export default meta;

From 38b153ca94bc710488d6134f7ba9778c73ebfd0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 14:27:13 +0900
Subject: [PATCH 46/99] fix: pointer handling

---
 packages/frontend/src/components/global/MkAvatar.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue
index 814ab53d27..c45e9a172d 100644
--- a/packages/frontend/src/components/global/MkAvatar.vue
+++ b/packages/frontend/src/components/global/MkAvatar.vue
@@ -135,6 +135,7 @@ watch(() => props.user.avatarBlurhash, () => {
 		width: 100%;
 		height: 100%;
 		padding: 50%;
+		pointer-events: none;
 
 		&.mask {
 			-webkit-mask:

From 1521bb088cbafb53f8c829a60748d4bc0469a8cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 16:26:08 +0900
Subject: [PATCH 47/99] build(#10336): finalize

---
 packages/frontend/.storybook/mocks.ts         |   2 +-
 .../src/components/global/MkA.stories.impl.ts |   2 +-
 .../components/global/MkAd.stories.impl.ts    |   8 +-
 .../global/MkAvatar.stories.impl.ts           |   5 +-
 .../global/MkCustomEmoji.stories.impl.ts      |   5 +-
 .../components/global/MkEmoji.stories.impl.ts |   1 -
 .../components/global/MkError.stories.meta.ts |   2 +-
 .../global/MkLoading.stories.impl.ts          |   8 +-
 .../MkMisskeyFlavoredMarkdown.stories.impl.ts |   6 +-
 .../global/MkPageHeader.stories.impl.ts       |  93 ++++++
 .../global/MkPageHeader.tabs.stories.impl.ts  |   3 +
 .../components/global/MkPageHeader.tabs.vue   |  18 +-
 .../global/MkStickyContainer.stories.impl.ts  |   3 +
 .../components/global/MkTime.stories.impl.ts  | 312 ++++++++++++++++++
 .../frontend/src/components/global/MkTime.vue |   6 +-
 .../components/global/MkUrl.stories.impl.ts   |  77 +++++
 .../global/MkUserName.stories.impl.ts         |  57 ++++
 .../global/RouterView.stories.impl.ts         |   3 +
 18 files changed, 581 insertions(+), 30 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkTime.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkUrl.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkUserName.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/RouterView.stories.impl.ts

diff --git a/packages/frontend/.storybook/mocks.ts b/packages/frontend/.storybook/mocks.ts
index ab19604a6c..db9222f0dd 100644
--- a/packages/frontend/.storybook/mocks.ts
+++ b/packages/frontend/.storybook/mocks.ts
@@ -1,7 +1,7 @@
 import { type SharedOptions, rest } from 'msw';
 
 export const onUnhandledRequest = ((req, print) => {
-	if (req.url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emojis?\/|iframe.html$|node_modules\/|sb-|static-assets\/|vite\/)/.test(req.url.pathname)) {
+	if (req.url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emojis?\/|iframe.html$|node_modules\/|src\/|sb-|static-assets\/|vite\/)/.test(req.url.pathname)) {
 		return
 	}
 	print.warning()
diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
index 780aa55376..3afec7f81a 100644
--- a/packages/frontend/src/components/global/MkA.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -2,8 +2,8 @@
 import { expect } from '@storybook/jest';
 import { userEvent, within } from '@storybook/testing-library';
 import { StoryObj } from '@storybook/vue3';
-import { tick } from '@/scripts/test-utils';
 import MkA from './MkA.vue';
+import { tick } from '@/scripts/test-utils';
 export const Default = {
 	render(args) {
 		return {
diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
index 436744b4f6..68f2995642 100644
--- a/packages/frontend/src/components/global/MkAd.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -82,7 +82,7 @@ export const Square = {
 				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
 		},
 	},
-};
+} satisfies StoryObj<typeof MkAd>;
 export const Horizontal = {
 	...common,
 	args: {
@@ -94,7 +94,7 @@ export const Horizontal = {
 				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
 		},
 	},
-};
+} satisfies StoryObj<typeof MkAd>;
 export const HorizontalBig = {
 	...common,
 	args: {
@@ -106,7 +106,7 @@ export const HorizontalBig = {
 				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
 		},
 	},
-};
+} satisfies StoryObj<typeof MkAd>;
 export const ZeroRatio = {
 	...Square,
 	args: {
@@ -117,4 +117,4 @@ export const ZeroRatio = {
 		},
 		__hasReduce: false,
 	},
-};
+} satisfies StoryObj<typeof MkAd>;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index 2e7ba29d12..d83164ac5f 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -1,5 +1,4 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import { userDetailed } from '../../../.storybook/fakes';
 import MkAvatar from './MkAvatar.vue';
@@ -44,7 +43,7 @@ export const ProfilePage = {
 		size: 120,
 		indicator: true,
 	},
-};
+} satisfies StoryObj<typeof MkAvatar>;
 export const ProfilePageCat = {
 	...ProfilePage,
 	args: {
@@ -54,4 +53,4 @@ export const ProfilePageCat = {
 			isCat: true,
 		},
 	},
-};
+} satisfies StoryObj<typeof MkAvatar>;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
index b31b303e7f..e91fc4e2ee 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
@@ -1,5 +1,4 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkCustomEmoji from './MkCustomEmoji.vue';
 export const Default = {
@@ -37,10 +36,10 @@ export const Normal = {
 		...Default.args,
 		normal: true,
 	},
-};
+} satisfies StoryObj<typeof MkCustomEmoji>;
 export const Missing = {
 	...Default,
 	args: {
 		name: Default.args.name,
 	},
-};
+} satisfies StoryObj<typeof MkCustomEmoji>;
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
index 53adf646ff..5baa5c2c84 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
@@ -1,5 +1,4 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
-/* eslint-disable import/no-duplicates */
 import { StoryObj } from '@storybook/vue3';
 import MkEmoji from './MkEmoji.vue';
 export const Default = {
diff --git a/packages/frontend/src/components/global/MkError.stories.meta.ts b/packages/frontend/src/components/global/MkError.stories.meta.ts
index 7c94421963..51d763ada7 100644
--- a/packages/frontend/src/components/global/MkError.stories.meta.ts
+++ b/packages/frontend/src/components/global/MkError.stories.meta.ts
@@ -2,4 +2,4 @@ export const argTypes = {
 	retry: {
 		action: 'retry',
 	},
-}
+};
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
index d1e1f33f0e..dd22f92451 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -34,25 +34,25 @@ export const Inline = {
 		...Default.args,
 		inline: true,
 	},
-};
+} satisfies StoryObj<typeof MkLoading>;
 export const Colored = {
 	...Default,
 	args: {
 		...Default.args,
 		colored: true,
 	},
-};
+} satisfies StoryObj<typeof MkLoading>;
 export const Mini = {
 	...Default,
 	args: {
 		...Default.args,
 		mini: true,
 	},
-};
+} satisfies StoryObj<typeof MkLoading>;
 export const Em = {
 	...Default,
 	args: {
 		...Default.args,
 		em: true,
 	},
-};
+} satisfies StoryObj<typeof MkLoading>;
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
index 720aaa1770..2464061694 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
@@ -57,18 +57,18 @@ export const Plain = {
 		...Default.args,
 		plain: true,
 	},
-};
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
 export const Nowrap = {
 	...Default,
 	args: {
 		...Default.args,
 		nowrap: true,
 	},
-};
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
 export const IsNotNote = {
 	...Default,
 	args: {
 		...Default.args,
 		isNote: false,
 	},
-};
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
new file mode 100644
index 0000000000..2a37ef1a88
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
@@ -0,0 +1,93 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkPageHeader from './MkPageHeader.vue';
+export const Empty = {
+	render(args) {
+		return {
+			components: {
+				MkPageHeader,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkPageHeader v-bind="props" />',
+		};
+	},
+	args: {
+		tabs: [],
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const OneTab = {
+	...Empty,
+	args: {
+		...Empty.args,
+		tab: 'sometabkey',
+		tabs: [
+			{
+				key: 'sometabkey',
+				title: 'Some Tab Title',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const Icon = {
+	...OneTab,
+	args: {
+		...OneTab.args,
+		tabs: [
+			{
+				...OneTab.args.tabs[0],
+				icon: 'ti ti-home',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const IconOnly = {
+	...Icon,
+	args: {
+		...Icon.args,
+		tabs: [
+			{
+				...Icon.args.tabs[0],
+				title: undefined,
+				iconOnly: true,
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const SomeTabs = {
+	...Empty,
+	args: {
+		...Empty.args,
+		tab: 'princess',
+		tabs: [
+			{
+				key: 'princess',
+				title: 'Princess',
+				icon: 'ti ti-crown',
+			},
+			{
+				key: 'fairy',
+				title: 'Fairy',
+				icon: 'ti ti-snowflake',
+			},
+			{
+				key: 'angel',
+				title: 'Angel',
+				icon: 'ti ti-feather',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
new file mode 100644
index 0000000000..6d4460d593
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
+void MkPageHeader_tabs;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.vue b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
index 42760da08f..9e1da64e61 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
@@ -33,14 +33,18 @@
 <script lang="ts">
 export type Tab = {
 	key: string;
-	title: string;
-	icon?: string;
-	iconOnly?: boolean;
 	onClick?: (ev: MouseEvent) => void;
-} & {
-	iconOnly: true;
-	iccn: string;
-};
+} & (
+	| {
+			iconOnly?: false;
+			title: string;
+			icon?: string;
+		}
+	| {
+			iconOnly: true;
+			icon: string;
+		}
+);
 </script>
 
 <script lang="ts" setup>
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
new file mode 100644
index 0000000000..97b8cc0c5b
--- /dev/null
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import MkStickyContainer from './MkStickyContainer.vue';
+void MkStickyContainer;
diff --git a/packages/frontend/src/components/global/MkTime.stories.impl.ts b/packages/frontend/src/components/global/MkTime.stories.impl.ts
new file mode 100644
index 0000000000..fd8e874dc3
--- /dev/null
+++ b/packages/frontend/src/components/global/MkTime.stories.impl.ts
@@ -0,0 +1,312 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { StoryObj } from '@storybook/vue3';
+import MkTime from './MkTime.vue';
+import { i18n } from '@/i18n';
+import { dateTimeFormat } from '@/scripts/intl-const';
+const now = new Date('2023-04-01T00:00:00.000Z');
+const future = new Date(8640000000000000);
+const oneHourAgo = new Date(now.getTime() - 3600000);
+const oneDayAgo = new Date(now.getTime() - 86400000);
+const oneWeekAgo = new Date(now.getTime() - 604800000);
+const oneMonthAgo = new Date(now.getTime() - 2592000000);
+const oneYearAgo = new Date(now.getTime() - 31536000000);
+export const Empty = {
+	render(args) {
+		return {
+			components: {
+				MkTime,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkTime v-bind="props" />',
+		};
+	},
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.invalid);
+	},
+	args: {
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeFuture = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.future);
+	},
+	args: {
+		...Empty.args,
+		time: future,
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteFuture = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: future,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailFuture = {
+	...Empty,
+	async play(context) {
+		await AbsoluteFuture.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeFuture.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: future,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeNow = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.justNow);
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteNow = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailNow = {
+	...Empty,
+	async play(context) {
+		await AbsoluteNow.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeNow.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneHourAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.hoursAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneHourAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneHourAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneHourAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneHourAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneDayAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.daysAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneDayAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneDayAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneDayAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneDayAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneWeekAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.weeksAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneWeekAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneWeekAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneWeekAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneWeekAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneMonthAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.monthsAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneMonthAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneMonthAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneMonthAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneMonthAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneYearAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.yearsAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneYearAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneYearAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneYearAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneYearAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
diff --git a/packages/frontend/src/components/global/MkTime.vue b/packages/frontend/src/components/global/MkTime.vue
index 3fa8bb9adc..99169512db 100644
--- a/packages/frontend/src/components/global/MkTime.vue
+++ b/packages/frontend/src/components/global/MkTime.vue
@@ -14,8 +14,10 @@ import { dateTimeFormat } from '@/scripts/intl-const';
 
 const props = withDefaults(defineProps<{
 	time: Date | string | number | null;
+	origin?: Date | null;
 	mode?: 'relative' | 'absolute' | 'detail';
 }>(), {
+	origin: null,
 	mode: 'relative',
 });
 
@@ -25,7 +27,7 @@ const _time = props.time == null ? NaN :
 const invalid = Number.isNaN(_time);
 const absolute = !invalid ? dateTimeFormat.format(_time) : i18n.ts._ago.invalid;
 
-let now = $ref((new Date()).getTime());
+let now = $ref((props.origin ?? new Date()).getTime());
 const relative = $computed<string>(() => {
 	if (props.mode === 'absolute') return ''; // absoluteではrelativeを使わないので計算しない
 	if (invalid) return i18n.ts._ago.invalid;
@@ -46,7 +48,7 @@ const relative = $computed<string>(() => {
 let tickId: number;
 
 function tick() {
-	now = (new Date()).getTime();
+	now = props.origin ?? (new Date()).getTime();
 	const ago = (now - _time) / 1000/*ms*/;
 	const next = ago < 60 ? 10000 : ago < 3600 ? 60000 : 180000;
 
diff --git a/packages/frontend/src/components/global/MkUrl.stories.impl.ts b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
new file mode 100644
index 0000000000..06de1d3e90
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
@@ -0,0 +1,77 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import { rest } from 'msw';
+import { commonHandlers } from '../../../.storybook/mocks';
+import MkUrl from './MkUrl.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkUrl,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUrl v-bind="props">Text</MkUrl>',
+		};
+	},
+	async play({ canvasElement }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a).toHaveAttribute('href', 'https://misskey-hub.net/');
+		await userEvent.hover(a);
+		/*
+		await tick(); // FIXME: wait for network request
+		const anchors = canvas.getAllByRole<HTMLAnchorElement>('link');
+		const popup = anchors.find(anchor => anchor !== a)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion
+		await expect(popup).toBeInTheDocument();
+		await expect(popup).toHaveAttribute('href', 'https://misskey-hub.net/');
+		await expect(popup).toHaveTextContent('Misskey Hub');
+		await expect(popup).toHaveTextContent('Misskeyはオープンソースの分散型ソーシャルネットワーキングプラットフォームです。');
+		await expect(popup).toHaveTextContent('misskey-hub.net');
+		const icon = within(popup).getByRole('img');
+		await expect(icon).toBeInTheDocument();
+		await expect(icon).toHaveAttribute('src', 'https://misskey-hub.net/favicon.ico');
+		 */
+		await userEvent.unhover(a);
+	},
+	args: {
+		url: 'https://misskey-hub.net/',
+	},
+	parameters: {
+		layout: 'centered',
+		msw: {
+			handlers: [
+				...commonHandlers,
+				rest.get('/url', (req, res, ctx) => {
+					return res(ctx.json({
+						title: 'Misskey Hub',
+						icon: 'https://misskey-hub.net/favicon.ico',
+						description: 'Misskeyはオープンソースの分散型ソーシャルネットワーキングプラットフォームです。',
+						thumbnail: null,
+						player: {
+							url: null,
+							width: null,
+							height: null,
+							allow: [],
+						},
+						sitename: 'misskey-hub.net',
+						sensitive: false,
+						url: 'https://misskey-hub.net/',
+					}));
+				}),
+			],
+		},
+	},
+} satisfies StoryObj<typeof MkUrl>;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.impl.ts b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
new file mode 100644
index 0000000000..37d895d042
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
@@ -0,0 +1,57 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkUserName from './MkUserName.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkUserName,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...args,
+					};
+				},
+			},
+			template: '<MkUserName v-bind="props"/>',
+		};
+	},
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(userDetailed.name);
+	},
+	args: {
+		user: userDetailed,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkUserName>;
+export const Anonymous = {
+	...Default,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(userDetailed.username);
+	},
+	args: {
+		...Default.args,
+		user: {
+			...userDetailed,
+			name: null,
+		},
+	},
+} satisfies StoryObj<typeof MkUserName>;
+export const Wrap = {
+	...Default,
+	args: {
+		...Default.args,
+		nowrap: false,
+	},
+} satisfies StoryObj<typeof MkUserName>;
diff --git a/packages/frontend/src/components/global/RouterView.stories.impl.ts b/packages/frontend/src/components/global/RouterView.stories.impl.ts
new file mode 100644
index 0000000000..7910b8b3cb
--- /dev/null
+++ b/packages/frontend/src/components/global/RouterView.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import RouterView from './RouterView.vue';
+void RouterView;

From 0960d61ce2aec659328fe3fede01cd8fbff9370e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 16:31:55 +0900
Subject: [PATCH 48/99] chore: add static option to `MkLoading`

---
 .../src/components/global/MkLoading.stories.impl.ts       | 1 +
 packages/frontend/src/components/global/MkLoading.vue     | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
index dd22f92451..d240e6566e 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -23,6 +23,7 @@ export const Default = {
 		};
 	},
 	args: {
+		static: true,
 	},
 	parameters: {
 		layout: 'centered',
diff --git a/packages/frontend/src/components/global/MkLoading.vue b/packages/frontend/src/components/global/MkLoading.vue
index 64e12e3b44..4311f9fe8a 100644
--- a/packages/frontend/src/components/global/MkLoading.vue
+++ b/packages/frontend/src/components/global/MkLoading.vue
@@ -6,7 +6,7 @@
 				<circle cx="64" cy="64" r="64" style="fill:none;stroke:currentColor;stroke-width:21.33px;"/>
 			</g>
 		</svg>
-		<svg :class="[$style.spinner, $style.fg]" viewBox="0 0 168 168" xmlns="http://www.w3.org/2000/svg">
+		<svg :class="[$style.spinner, $style.fg, { [$style.static]: static }]" viewBox="0 0 168 168" xmlns="http://www.w3.org/2000/svg">
 			<g transform="matrix(1.125,0,0,1.125,12,12)">
 				<path d="M128,64C128,28.654 99.346,0 64,0C99.346,0 128,28.654 128,64Z" style="fill:none;stroke:currentColor;stroke-width:21.33px;"/>
 			</g>
@@ -19,11 +19,13 @@
 import { } from 'vue';
 
 const props = withDefaults(defineProps<{
+	static?: boolean;
 	inline?: boolean;
 	colored?: boolean;
 	mini?: boolean;
 	em?: boolean;
 }>(), {
+	static: false,
 	inline: false,
 	colored: true,
 	mini: false,
@@ -97,5 +99,9 @@ const props = withDefaults(defineProps<{
 
 .fg {
 	animation: spinner 0.5s linear infinite;
+
+	&.static {
+		animation-play-state: paused;
+	}
 }
 </style>

From f39b5be0646c33b09ba7bf12badb8b3fd3de77dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 16:35:05 +0900
Subject: [PATCH 49/99] refactor(#10336): bind to local args

---
 packages/frontend/.storybook/generate.tsx         | 15 +++++++++++++--
 .../src/components/MkButton.stories.impl.ts       |  2 +-
 .../src/components/global/MkA.stories.impl.ts     |  2 +-
 .../src/components/global/MkAcct.stories.impl.ts  |  2 +-
 .../src/components/global/MkAd.stories.impl.ts    |  2 +-
 .../components/global/MkAvatar.stories.impl.ts    |  2 +-
 .../global/MkCustomEmoji.stories.impl.ts          |  2 +-
 .../src/components/global/MkEmoji.stories.impl.ts |  2 +-
 .../components/global/MkLoading.stories.impl.ts   |  2 +-
 .../MkMisskeyFlavoredMarkdown.stories.impl.ts     |  2 +-
 .../global/MkPageHeader.stories.impl.ts           |  2 +-
 .../src/components/global/MkTime.stories.impl.ts  |  2 +-
 .../src/components/global/MkUrl.stories.impl.ts   |  2 +-
 .../components/global/MkUserName.stories.impl.ts  |  2 +-
 14 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 62e84d149d..f501b02ab6 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -481,8 +481,19 @@ function toStories(component: string): string {
 																																																											<spread-element
 																																																												argument={
 																																																													(
-																																																														<identifier name='args' />
-																																																													) as estree.Identifier
+																																																														<member-expression
+																																																															object={
+																																																																(
+																																																																	<this-expression />
+																																																																) as estree.ThisExpression
+																																																															}
+																																																															property={
+																																																																(
+																																																																	<identifier name='args' />
+																																																																) as estree.Identifier
+																																																															}
+																																																														/>
+																																																													) as estree.MemberExpression
 																																																												}
 																																																											/>
 																																																										) as estree.SpreadElement,
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
index 228af8f919..e1c1c54d10 100644
--- a/packages/frontend/src/components/MkButton.stories.impl.ts
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -17,7 +17,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
index 3afec7f81a..e17691ac61 100644
--- a/packages/frontend/src/components/global/MkA.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -18,7 +18,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkAcct.stories.impl.ts b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
index 61bf06f8a5..79d993decc 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
@@ -16,7 +16,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
index 68f2995642..7d8a42a03c 100644
--- a/packages/frontend/src/components/global/MkAd.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -18,7 +18,7 @@ const common = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index d83164ac5f..68fadfc1b8 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -16,7 +16,7 @@ const common = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
index e91fc4e2ee..36ab85b579 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
@@ -15,7 +15,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
index 5baa5c2c84..f9900375f7 100644
--- a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
@@ -15,7 +15,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
index d240e6566e..ca2e14494d 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -15,7 +15,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
index 2464061694..f6811b6747 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
@@ -17,7 +17,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
index 2a37ef1a88..b23a1e3a02 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
@@ -15,7 +15,7 @@ export const Empty = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkTime.stories.impl.ts b/packages/frontend/src/components/global/MkTime.stories.impl.ts
index fd8e874dc3..b72601b1ff 100644
--- a/packages/frontend/src/components/global/MkTime.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkTime.stories.impl.ts
@@ -25,7 +25,7 @@ export const Empty = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkUrl.stories.impl.ts b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
index 06de1d3e90..2344c4851a 100644
--- a/packages/frontend/src/components/global/MkUrl.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
@@ -19,7 +19,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
diff --git a/packages/frontend/src/components/global/MkUserName.stories.impl.ts b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
index 37d895d042..41b1567a6f 100644
--- a/packages/frontend/src/components/global/MkUserName.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
@@ -18,7 +18,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},

From 4521e61ae25d22ae4db2e614d37e112d0235bfca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 17:54:30 +0900
Subject: [PATCH 50/99] fix: missing case

---
 packages/frontend/.storybook/generate.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index f501b02ab6..a6e2bf735b 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -75,7 +75,7 @@ function h<T extends estree.Node>(
 	props: Omit<T, 'type'>
 ): T {
 	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
-	return Object.assign(props, { type }) as T;
+	return Object.assign(props || {}, { type }) as T;
 }
 
 declare global {

From e7a15b5604e40313401b06204f708042927f94a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 17:58:44 +0900
Subject: [PATCH 51/99] revert: restore `SatisfiesExpression`

This reverts commit f246699f38a28befbfccc11e9eade22cbaace4f3.
---
 packages/frontend/src/components/MkChart.vue                | 4 ++--
 packages/frontend/src/pages/admin/overview.active-users.vue | 4 ++--
 packages/frontend/src/pages/admin/overview.ap-requests.vue  | 4 ++--
 packages/frontend/src/pages/user/activity.following.vue     | 2 +-
 packages/frontend/src/pages/user/activity.notes.vue         | 2 +-
 packages/frontend/src/pages/user/activity.pv.vue            | 2 +-
 packages/frontend/src/scripts/achievements.ts               | 2 ++
 7 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/packages/frontend/src/components/MkChart.vue b/packages/frontend/src/components/MkChart.vue
index 3865b29194..06d5b9949a 100644
--- a/packages/frontend/src/components/MkChart.vue
+++ b/packages/frontend/src/components/MkChart.vue
@@ -15,7 +15,7 @@
   As this is part of Chart.js's API it makes sense to disable the check here.
 */
 import { onMounted, ref, shallowRef, watch, PropType } from 'vue';
-import { Chart, type ChartDataset } from 'chart.js';
+import { Chart } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { defaultStore } from '@/store';
@@ -165,7 +165,7 @@ const render = () => {
 				fill: x.type === 'area',
 				clip: 8,
 				hidden: !!x.hidden,
-			} satisfies ChartDataset)),
+			})),
 		},
 		options: {
 			aspectRatio: props.aspectRatio || 2.5,
diff --git a/packages/frontend/src/pages/admin/overview.active-users.vue b/packages/frontend/src/pages/admin/overview.active-users.vue
index a76f2e073f..fc10ad75f8 100644
--- a/packages/frontend/src/pages/admin/overview.active-users.vue
+++ b/packages/frontend/src/pages/admin/overview.active-users.vue
@@ -9,7 +9,7 @@
 
 <script lang="ts" setup>
 import { onMounted } from 'vue';
-import { Chart, type ChartDataset } from 'chart.js';
+import { Chart } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { defaultStore } from '@/store';
@@ -83,7 +83,7 @@ async function renderChart() {
 				barPercentage: 0.7,
 				categoryPercentage: 0.5,
 				fill: true,
-			}] satisfies ChartDataset[],
+			}],
 		},
 		options: {
 			aspectRatio: 2.5,
diff --git a/packages/frontend/src/pages/admin/overview.ap-requests.vue b/packages/frontend/src/pages/admin/overview.ap-requests.vue
index 867137f084..ad8e623415 100644
--- a/packages/frontend/src/pages/admin/overview.ap-requests.vue
+++ b/packages/frontend/src/pages/admin/overview.ap-requests.vue
@@ -16,7 +16,7 @@
 
 <script lang="ts" setup>
 import { onMounted } from 'vue';
-import { Chart, type ChartDataset } from 'chart.js';
+import { Chart } from 'chart.js';
 import gradient from 'chartjs-plugin-gradient';
 import * as os from '@/os';
 import { useChartTooltip } from '@/scripts/use-chart-tooltip';
@@ -190,7 +190,7 @@ onMounted(async () => {
 				categoryPercentage: 0.9,
 				fill: true,
 				clip: 8,
-			}] satisfies ChartDataset[],
+			}],
 		},
 		options: {
 			aspectRatio: 5,
diff --git a/packages/frontend/src/pages/user/activity.following.vue b/packages/frontend/src/pages/user/activity.following.vue
index 54360024f3..25a1edaca9 100644
--- a/packages/frontend/src/pages/user/activity.following.vue
+++ b/packages/frontend/src/pages/user/activity.following.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.notes.vue b/packages/frontend/src/pages/user/activity.notes.vue
index 7dd02ad6d4..63e1c76e03 100644
--- a/packages/frontend/src/pages/user/activity.notes.vue
+++ b/packages/frontend/src/pages/user/activity.notes.vue
@@ -76,7 +76,7 @@ async function renderChart() {
 			borderRadius: 4,
 			barPercentage: 0.9,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.pv.vue b/packages/frontend/src/pages/user/activity.pv.vue
index 6a7506e388..1be495f410 100644
--- a/packages/frontend/src/pages/user/activity.pv.vue
+++ b/packages/frontend/src/pages/user/activity.pv.vue
@@ -77,7 +77,7 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index c77f8e12d3..c93e968594 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -443,11 +443,13 @@ export const ACHIEVEMENT_BADGES = {
 		bg: 'linear-gradient(0deg, rgb(144, 224, 255), rgb(255, 168, 252))',
 		frame: 'bronze',
 	},
+/*
 } as const satisfies Record<typeof ACHIEVEMENT_TYPES[number], {
 	img: string;
 	bg: string | null;
 	frame: 'bronze' | 'silver' | 'gold' | 'platinum';
 }>;
+ */ } as const;
 
 export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 

From 65f20de821de2173bf7527e9ca1df09679b72f45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 18:05:14 +0900
Subject: [PATCH 52/99] build(#10336): make storybook buildable

---
 packages/frontend/.storybook/main.ts |   7 +
 packages/frontend/package.json       |   2 +
 packages/misskey-js/package.json     |   3 +-
 pnpm-lock.yaml                       | 414 +++++++++++++++++++++++++--
 4 files changed, 408 insertions(+), 18 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index c58b9c0850..72c2490a43 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -23,6 +23,13 @@ const config = {
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
 			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
+			build: {
+				target: [
+					'chrome108',
+					'firefox109',
+					'safari16',
+				],
+			},
 		});
 	},
 } satisfies StorybookConfig;
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index f7dab92cf0..f0c92ff5bf 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -5,6 +5,7 @@
 		"watch": "vite",
 		"build": "vite build",
 		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
+		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",
@@ -112,6 +113,7 @@
 		"@vue/runtime-core": "3.2.47",
 		"astring": "^1.8.4",
 		"chokidar-cli": "^3.0.0",
+		"chromatic": "^6.17.2",
 		"cross-env": "7.0.3",
 		"cypress": "12.9.0",
 		"eslint": "8.37.0",
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index 1fac6a6781..a9343a4163 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -21,11 +21,11 @@
 	},
 	"devDependencies": {
 		"@microsoft/api-extractor": "7.34.4",
+		"@swc/jest": "0.2.24",
 		"@types/jest": "29.5.0",
 		"@types/node": "18.15.11",
 		"@typescript-eslint/eslint-plugin": "5.57.0",
 		"@typescript-eslint/parser": "5.57.0",
-		"@swc/jest": "0.2.24",
 		"eslint": "8.37.0",
 		"jest": "^29.5.0",
 		"jest-fetch-mock": "^3.0.3",
@@ -40,6 +40,7 @@
 	"dependencies": {
 		"@swc/cli": "0.1.62",
 		"@swc/core": "1.3.42",
+		"autobind-decorator": "^2.4.0",
 		"eventemitter3": "5.0.0",
 		"reconnecting-websocket": "^4.4.0"
 	}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d65e379aec..86e03c4e4f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -883,6 +883,9 @@ importers:
       chokidar-cli:
         specifier: ^3.0.0
         version: 3.0.0
+      chromatic:
+        specifier: ^6.17.2
+        version: 6.17.2
       cross-env:
         specifier: 7.0.3
         version: 7.0.3
@@ -949,6 +952,9 @@ importers:
       '@swc/core':
         specifier: 1.3.42
         version: 1.3.42
+      autobind-decorator:
+        specifier: ^2.4.0
+        version: 2.4.0
       eventemitter3:
         specifier: 5.0.0
         version: 5.0.0
@@ -1038,6 +1044,12 @@ packages:
       '@jridgewell/trace-mapping': 0.3.17
     dev: true
 
+  /@arcanis/slice-ansi@1.1.1:
+    resolution: {integrity: sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==}
+    dependencies:
+      grapheme-splitter: 1.0.4
+    dev: true
+
   /@aw-web-design/x-default-browser@1.4.88:
     resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==}
     hasBin: true
@@ -4674,7 +4686,6 @@ packages:
   /@sindresorhus/is@4.6.0:
     resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
     engines: {node: '>=10'}
-    dev: false
 
   /@sindresorhus/is@5.3.0:
     resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
@@ -4714,6 +4725,51 @@ packages:
     resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==}
     dev: true
 
+  /@snyk/dep-graph@2.6.0:
+    resolution: {integrity: sha512-9NPk7cTvDNA90NyNQvh87LYKgkCoD67i+FGdRpwA0/CL59RRY7cG37RTFe++Y3ZALxpYK1sLNzU+yeB7vzVhqQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      event-loop-spinner: 2.2.0
+      lodash.clone: 4.5.0
+      lodash.constant: 3.0.0
+      lodash.filter: 4.6.0
+      lodash.foreach: 4.5.0
+      lodash.isempty: 4.4.0
+      lodash.isequal: 4.5.0
+      lodash.isfunction: 3.0.9
+      lodash.isundefined: 3.0.1
+      lodash.map: 4.6.0
+      lodash.reduce: 4.6.0
+      lodash.size: 4.2.0
+      lodash.transform: 4.6.0
+      lodash.union: 4.6.0
+      lodash.values: 4.3.0
+      object-hash: 3.0.0
+      packageurl-js: 1.0.1
+      semver: 7.3.8
+      tslib: 2.5.0
+    dev: true
+
+  /@snyk/graphlib@2.1.9-patch.3:
+    resolution: {integrity: sha512-bBY9b9ulfLj0v2Eer0yFYa3syVeIxVKl2EpxSrsVeT4mjA0CltZyHsF0JjoaGXP27nItTdJS5uVsj1NA+3aE+Q==}
+    dependencies:
+      lodash.clone: 4.5.0
+      lodash.constant: 3.0.0
+      lodash.filter: 4.6.0
+      lodash.foreach: 4.5.0
+      lodash.has: 4.5.2
+      lodash.isempty: 4.4.0
+      lodash.isfunction: 3.0.9
+      lodash.isundefined: 3.0.1
+      lodash.keys: 4.2.0
+      lodash.map: 4.6.0
+      lodash.reduce: 4.6.0
+      lodash.size: 4.2.0
+      lodash.transform: 4.6.0
+      lodash.union: 4.6.0
+      lodash.values: 4.3.0
+    dev: true
+
   /@sqltools/formatter@1.2.5:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
@@ -6064,7 +6120,6 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       defer-to-connect: 2.0.1
-    dev: false
 
   /@szmarczak/http-timer@5.0.1:
     resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@@ -6335,7 +6390,6 @@ packages:
       '@types/keyv': 3.1.4
       '@types/node': 18.15.11
       '@types/responselike': 1.0.0
-    dev: false
 
   /@types/cbor@6.0.0:
     resolution: {integrity: sha512-mGQ1lbYOwVti5Xlarn1bTeBZqgY0kstsdjnkoEovgohYKdBjGejHyNGXHdMBeqyQazIv32Jjp33+5pBEaSRy2w==}
@@ -6399,6 +6453,10 @@ packages:
     resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==}
     dev: true
 
+  /@types/emscripten@1.39.6:
+    resolution: {integrity: sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==}
+    dev: true
+
   /@types/escape-regexp@0.0.1:
     resolution: {integrity: sha512-ogj/ZTIdeFkiuxDwawYuZSIgC6suFGgBeZPr6Xs5lHEcvIXTjXGtH+/n8f1XhZhespaUwJ5LIGRICPji972FLw==}
     dev: true
@@ -6571,7 +6629,6 @@ packages:
     resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
     dependencies:
       '@types/node': 18.15.11
-    dev: false
 
   /@types/lodash@4.14.191:
     resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
@@ -6627,6 +6684,10 @@ packages:
       node-fetch: 3.3.1
     dev: true
 
+  /@types/node@13.13.52:
+    resolution: {integrity: sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==}
+    dev: true
+
   /@types/node@14.18.36:
     resolution: {integrity: sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==}
     dev: true
@@ -6747,7 +6808,6 @@ packages:
     resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
     dependencies:
       '@types/node': 18.15.11
-    dev: false
 
   /@types/sanitize-html@2.9.0:
     resolution: {integrity: sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==}
@@ -6838,6 +6898,10 @@ packages:
     resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
     dev: true
 
+  /@types/treeify@1.0.0:
+    resolution: {integrity: sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==}
+    dev: true
+
   /@types/undertaker-registry@1.0.1:
     resolution: {integrity: sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==}
     dev: true
@@ -7273,6 +7337,43 @@ packages:
     engines: {node: '>=10.0.0'}
     dev: true
 
+  /@yarnpkg/core@2.4.0:
+    resolution: {integrity: sha512-FYjcPNTfDfMKLFafQPt49EY28jnYC82Z2S7oMwLPUh144BL8v8YXzb4aCnFyi5nFC5h2kcrJfZh7+Pm/qvCqGw==}
+    engines: {node: '>=10.19.0'}
+    dependencies:
+      '@arcanis/slice-ansi': 1.1.1
+      '@types/semver': 7.3.13
+      '@types/treeify': 1.0.0
+      '@yarnpkg/fslib': 2.10.2
+      '@yarnpkg/json-proxy': 2.1.1
+      '@yarnpkg/libzip': 2.3.0
+      '@yarnpkg/parsers': 2.5.1
+      '@yarnpkg/pnp': 2.3.2
+      '@yarnpkg/shell': 2.4.1
+      binjumper: 0.1.4
+      camelcase: 5.3.1
+      chalk: 3.0.0
+      ci-info: 2.0.0
+      clipanion: 2.6.2
+      cross-spawn: 7.0.3
+      diff: 4.0.2
+      globby: 11.1.0
+      got: 11.8.5
+      json-file-plus: 3.3.1
+      lodash: 4.17.21
+      micromatch: 4.0.5
+      mkdirp: 0.5.6
+      p-limit: 2.3.0
+      pluralize: 7.0.0
+      pretty-bytes: 5.6.0
+      semver: 7.3.8
+      stream-to-promise: 2.2.0
+      tar-stream: 2.2.0
+      treeify: 1.1.0
+      tslib: 1.14.1
+      tunnel: 0.0.6
+    dev: true
+
   /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.14):
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
     engines: {node: '>=14.15.0'}
@@ -7283,6 +7384,66 @@ packages:
       tslib: 2.5.0
     dev: true
 
+  /@yarnpkg/fslib@2.10.2:
+    resolution: {integrity: sha512-6WfQrPEV8QVpDPw5kd5s5jsb3QLqwVFSGZy3rEjl3p2FZ3OtIfYcLbFirOxXj2jXiKQDe7XbYsw1WjSf8K94gw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@yarnpkg/libzip': 2.3.0
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/json-proxy@2.1.1:
+    resolution: {integrity: sha512-meUiCAgCYpXTH1qJfqfz+dX013ohW9p2dKfwIzUYAFutH+lsz1eHPBIk72cuCV84adh9gX6j66ekBKH/bIhCQw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@yarnpkg/fslib': 2.10.2
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/libzip@2.3.0:
+    resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@types/emscripten': 1.39.6
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/lockfile@1.1.0:
+    resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
+    dev: true
+
+  /@yarnpkg/parsers@2.5.1:
+    resolution: {integrity: sha512-KtYN6Ez3x753vPF9rETxNTPnPjeaHY11Exlpqb4eTII7WRlnGiZ5rvvQBau4R20Ik5KBv+vS3EJEcHyCunwzzw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      js-yaml: 3.14.1
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/pnp@2.3.2:
+    resolution: {integrity: sha512-JdwHu1WBCISqJEhIwx6Hbpe8MYsYbkGMxoxolkDiAeJ9IGEe08mQcbX1YmUDV1ozSWlm9JZE90nMylcDsXRFpA==}
+    engines: {node: '>=10.19.0'}
+    dependencies:
+      '@types/node': 13.13.52
+      '@yarnpkg/fslib': 2.10.2
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/shell@2.4.1:
+    resolution: {integrity: sha512-oNNJkH8ZI5uwu0dMkJf737yMSY1WXn9gp55DqSA5wAOhKvV5DJTXFETxkVgBQhO6Bow9tMGSpvowTMD/oAW/9g==}
+    engines: {node: '>=10.19.0'}
+    hasBin: true
+    dependencies:
+      '@yarnpkg/fslib': 2.10.2
+      '@yarnpkg/parsers': 2.5.1
+      clipanion: 2.6.2
+      cross-spawn: 7.0.3
+      fast-glob: 3.2.12
+      micromatch: 4.0.5
+      stream-buffers: 3.0.2
+      tslib: 1.14.1
+    dev: true
+
   /@zxing/text-encoding@0.9.0:
     resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
     requiresBuild: true
@@ -7524,7 +7685,6 @@ packages:
 
   /any-promise@1.3.0:
     resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-    dev: false
 
   /anymatch@2.0.0:
     resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==}
@@ -8153,6 +8313,11 @@ packages:
     engines: {node: '>=0.8'}
     dev: false
 
+  /binjumper@0.1.4:
+    resolution: {integrity: sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w==}
+    engines: {node: '>=10.12.0'}
+    dev: true
+
   /bl@4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
     dependencies:
@@ -8467,7 +8632,6 @@ packages:
   /cacheable-lookup@5.0.4:
     resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
     engines: {node: '>=10.6.0'}
-    dev: false
 
   /cacheable-lookup@6.1.0:
     resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==}
@@ -8501,7 +8665,6 @@ packages:
       lowercase-keys: 2.0.0
       normalize-url: 6.1.0
       responselike: 2.0.1
-    dev: false
 
   /cachedir@2.3.0:
     resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
@@ -8780,6 +8943,21 @@ packages:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
     engines: {node: '>=10'}
 
+  /chromatic@6.17.2:
+    resolution: {integrity: sha512-rtrkywh1CuDDuuiRWXpdiX38aEGN3sGCATsgdh3X/EUBjQjgQtEbSzcMusC3cqz3K9dFKcWwKpFm3jaw9gNymA==}
+    hasBin: true
+    dependencies:
+      '@discoveryjs/json-ext': 0.5.7
+      '@types/webpack-env': 1.18.0
+      snyk-nodejs-lockfile-parser: 1.48.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /ci-info@2.0.0:
+    resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+    dev: true
+
   /ci-info@3.7.1:
     resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
     engines: {node: '>=8'}
@@ -8869,6 +9047,10 @@ packages:
     engines: {node: '>= 10'}
     dev: true
 
+  /clipanion@2.6.2:
+    resolution: {integrity: sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw==}
+    dev: true
+
   /cliui@3.2.0:
     resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
     dependencies:
@@ -8926,7 +9108,6 @@ packages:
     resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
     dependencies:
       mimic-response: 1.0.1
-    dev: false
 
   /clone-stats@1.0.0:
     resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
@@ -9798,6 +9979,11 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
+  /diff@4.0.2:
+    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+    engines: {node: '>=0.3.1'}
+    dev: true
+
   /diff@5.1.0:
     resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
     engines: {node: '>=0.3.1'}
@@ -9979,6 +10165,12 @@ packages:
     dev: false
     optional: true
 
+  /end-of-stream@1.1.0:
+    resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==}
+    dependencies:
+      once: 1.3.3
+    dev: true
+
   /end-of-stream@1.4.4:
     resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
     dependencies:
@@ -10688,6 +10880,12 @@ packages:
     engines: {node: '>= 0.6'}
     dev: true
 
+  /event-loop-spinner@2.2.0:
+    resolution: {integrity: sha512-KB44sV4Mv7uLIkJHJ5qhiZe5um6th2g57nHQL/uqnPHKP2IswoTRWUteEXTJQL4gW++1zqWUni+H2hGkP51c9w==}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
   /event-stream@3.3.4:
     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
     dependencies:
@@ -11878,7 +12076,6 @@ packages:
       lowercase-keys: 2.0.0
       p-cancelable: 2.1.1
       responselike: 2.0.1
-    dev: false
 
   /got@12.6.0:
     resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==}
@@ -12277,7 +12474,6 @@ packages:
     dependencies:
       quick-lru: 5.1.1
       resolve-alpn: 1.2.1
-    dev: false
 
   /http2-wrapper@2.2.0:
     resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==}
@@ -13046,6 +13242,10 @@ packages:
       is-docker: 2.2.1
     dev: true
 
+  /is@3.3.0:
+    resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==}
+    dev: true
+
   /isarray@0.0.1:
     resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
 
@@ -13774,6 +13974,17 @@ packages:
   /json-buffer@3.0.1:
     resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
 
+  /json-file-plus@3.3.1:
+    resolution: {integrity: sha512-wo0q1UuiV5NsDPQDup1Km8IwEeqe+olr8tkWxeJq9Bjtcp7DZ0l+yrg28fSC3DEtrE311mhTZ54QGS6oiqnZEA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is: 3.3.0
+      node.extend: 2.0.2
+      object.assign: 4.1.4
+      promiseback: 2.0.3
+      safer-buffer: 2.1.2
+    dev: true
+
   /json-parse-even-better-errors@2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
     dev: true
@@ -14108,6 +14319,18 @@ packages:
       p-locate: 5.0.0
     dev: true
 
+  /lodash.clone@4.5.0:
+    resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==}
+    dev: true
+
+  /lodash.clonedeep@4.5.0:
+    resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+    dev: true
+
+  /lodash.constant@3.0.0:
+    resolution: {integrity: sha512-X5XMrB+SdI1mFa81162NSTo/YNd23SLdLOLzcXTwS4inDZ5YCL8X67UFzZJAH4CqIa6R8cr56CShfA5K5MFiYQ==}
+    dev: true
+
   /lodash.debounce@4.0.8:
     resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
     dev: true
@@ -14119,25 +14342,61 @@ packages:
     resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
     dev: false
 
+  /lodash.filter@4.6.0:
+    resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==}
+    dev: true
+
+  /lodash.flatmap@4.5.0:
+    resolution: {integrity: sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==}
+    dev: true
+
   /lodash.flatten@4.4.0:
     resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
     dev: false
 
+  /lodash.foreach@4.5.0:
+    resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
+    dev: true
+
   /lodash.get@4.4.2:
     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
     dev: true
 
+  /lodash.has@4.5.2:
+    resolution: {integrity: sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==}
+    dev: true
+
   /lodash.isarguments@3.1.0:
     resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
 
+  /lodash.isempty@4.4.0:
+    resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
+    dev: true
+
   /lodash.isequal@4.5.0:
     resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
     dev: true
 
+  /lodash.isfunction@3.0.9:
+    resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
+    dev: true
+
   /lodash.isplainobject@4.0.6:
     resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
     dev: false
 
+  /lodash.isundefined@3.0.1:
+    resolution: {integrity: sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==}
+    dev: true
+
+  /lodash.keys@4.2.0:
+    resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==}
+    dev: true
+
+  /lodash.map@4.6.0:
+    resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
+    dev: true
+
   /lodash.memoize@4.1.2:
     resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
     dev: false
@@ -14149,18 +14408,37 @@ packages:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
     dev: true
 
+  /lodash.reduce@4.6.0:
+    resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==}
+    dev: true
+
+  /lodash.size@4.2.0:
+    resolution: {integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==}
+    dev: true
+
   /lodash.throttle@4.1.1:
     resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
     dev: true
 
+  /lodash.topairs@4.3.0:
+    resolution: {integrity: sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==}
+    dev: true
+
+  /lodash.transform@4.6.0:
+    resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==}
+    dev: true
+
   /lodash.union@4.6.0:
     resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
-    dev: false
 
   /lodash.uniq@4.5.0:
     resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
     dev: false
 
+  /lodash.values@4.3.0:
+    resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==}
+    dev: true
+
   /lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
@@ -14202,7 +14480,6 @@ packages:
   /lowercase-keys@2.0.0:
     resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
     engines: {node: '>=8'}
-    dev: false
 
   /lowercase-keys@3.0.0:
     resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
@@ -14521,7 +14798,6 @@ packages:
   /mimic-response@1.0.1:
     resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
     engines: {node: '>=4'}
-    dev: false
 
   /mimic-response@3.1.0:
     resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
@@ -15005,6 +15281,14 @@ packages:
     resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
     dev: true
 
+  /node.extend@2.0.2:
+    resolution: {integrity: sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==}
+    engines: {node: '>=0.4.0'}
+    dependencies:
+      has: 1.0.3
+      is: 3.3.0
+    dev: true
+
   /nodemailer@6.9.1:
     resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==}
     engines: {node: '>=6.0.0'}
@@ -15077,7 +15361,6 @@ packages:
   /normalize-url@6.1.0:
     resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
     engines: {node: '>=10'}
-    dev: false
 
   /normalize-url@8.0.0:
     resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==}
@@ -15180,6 +15463,11 @@ packages:
       kind-of: 3.2.2
     dev: false
 
+  /object-hash@3.0.0:
+    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+    engines: {node: '>= 6'}
+    dev: true
+
   /object-inspect@1.12.2:
     resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
     dev: true
@@ -15282,6 +15570,12 @@ packages:
     engines: {node: '>= 0.8'}
     dev: true
 
+  /once@1.3.3:
+    resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==}
+    dependencies:
+      wrappy: 1.0.2
+    dev: true
+
   /once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
     dependencies:
@@ -15405,7 +15699,6 @@ packages:
   /p-cancelable@2.1.1:
     resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
     engines: {node: '>=8'}
-    dev: false
 
   /p-cancelable@3.0.0:
     resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
@@ -15485,6 +15778,10 @@ packages:
     resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
     engines: {node: '>=6'}
 
+  /packageurl-js@1.0.1:
+    resolution: {integrity: sha512-EtXC0kgLjy/C7S4SN3Kk1SDRWLzIn/LUK0gXlz3gsxDdpI0k7q8C3SASpV0pc+v0yADBTt5rWewq/flGdGxtoQ==}
+    dev: true
+
   /packet-reader@1.0.0:
     resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==}
     dev: false
@@ -15886,6 +16183,11 @@ packages:
       irregular-plurals: 3.5.0
     dev: true
 
+  /pluralize@7.0.0:
+    resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==}
+    engines: {node: '>=4'}
+    dev: true
+
   /pngjs-nozlib@1.0.0:
     resolution: {integrity: sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==}
     engines: {iojs: '>= 1.0.0', node: '>=0.10.0'}
@@ -16286,6 +16588,13 @@ packages:
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     engines: {node: '>=0.4.0'}
 
+  /promise-deferred@2.0.3:
+    resolution: {integrity: sha512-n10XaoznCzLfyPFOlEE8iurezHpxrYzyjgq/1eW9Wk1gJwur/N7BdBmjJYJpqMeMcXK4wEbzo2EvZQcqjYcKUQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      promise: 7.3.1
+    dev: true
+
   /promise-inflight@1.0.1:
     resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
     peerDependencies:
@@ -16316,6 +16625,14 @@ packages:
     dependencies:
       asap: 2.0.6
 
+  /promiseback@2.0.3:
+    resolution: {integrity: sha512-VZXdCwS0ppVNTIRfNsCvVwJAaP2b+pxQF7lM8DMWfmpNWyTxB6O5YNbzs+8z0ki/KIBHKHk308NTIl4kJUem3w==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is-callable: 1.2.7
+      promise-deferred: 2.0.3
+    dev: true
+
   /prompts@2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
     engines: {node: '>= 6'}
@@ -17240,7 +17557,6 @@ packages:
     resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
     dependencies:
       lowercase-keys: 2.0.0
-    dev: false
 
   /responselike@3.0.0:
     resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
@@ -17745,6 +18061,41 @@ packages:
       - supports-color
     dev: false
 
+  /snyk-config@5.1.0:
+    resolution: {integrity: sha512-wqVMxUGqjjHX+MJrz0WHa/pJTDWU17aRv6cnI/6i7cq93J3TkkJZ8sjgvwCgP8cWX5wTHIlRuMV+IAd59K4X/g==}
+    dependencies:
+      async: 3.2.4
+      debug: 4.3.4(supports-color@8.1.1)
+      lodash.merge: 4.6.2
+      minimist: 1.2.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /snyk-nodejs-lockfile-parser@1.48.2:
+    resolution: {integrity: sha512-CiuKigz4Ed/prR61T2hDDNnvqCr9JA4zTWE9xD4x+emt2zUVRHKF2RBKq2s82RA8jcts1OOXnREr1v1OvNxIpg==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      '@snyk/dep-graph': 2.6.0
+      '@snyk/graphlib': 2.1.9-patch.3
+      '@yarnpkg/core': 2.4.0
+      '@yarnpkg/lockfile': 1.1.0
+      event-loop-spinner: 2.2.0
+      js-yaml: 4.1.0
+      lodash.clonedeep: 4.5.0
+      lodash.flatmap: 4.5.0
+      lodash.isempty: 4.4.0
+      lodash.topairs: 4.3.0
+      micromatch: 4.0.5
+      semver: 7.3.8
+      snyk-config: 5.1.0
+      tslib: 1.14.1
+      uuid: 8.3.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /socks-proxy-agent@7.0.0:
     resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
     engines: {node: '>= 10'}
@@ -17994,6 +18345,11 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
+  /stream-buffers@3.0.2:
+    resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==}
+    engines: {node: '>= 0.10.0'}
+    dev: true
+
   /stream-combiner@0.0.4:
     resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
     dependencies:
@@ -18014,6 +18370,20 @@ packages:
   /stream-shift@1.0.1:
     resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
 
+  /stream-to-array@2.3.0:
+    resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==}
+    dependencies:
+      any-promise: 1.3.0
+    dev: true
+
+  /stream-to-promise@2.2.0:
+    resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==}
+    dependencies:
+      any-promise: 1.3.0
+      end-of-stream: 1.1.0
+      stream-to-array: 2.3.0
+    dev: true
+
   /stream-wormhole@1.1.0:
     resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==}
     engines: {node: '>=4.0.0'}
@@ -18633,6 +19003,11 @@ packages:
     resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
     dev: false
 
+  /treeify@1.1.0:
+    resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==}
+    engines: {node: '>=0.6'}
+    dev: true
+
   /trim-newlines@3.0.1:
     resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
     engines: {node: '>=8'}
@@ -18723,6 +19098,11 @@ packages:
     dependencies:
       safe-buffer: 5.2.1
 
+  /tunnel@0.0.6:
+    resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
+    engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+    dev: true
+
   /tweetnacl@0.14.5:
     resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
 

From ec8905f81c838a96700d3eb2522bfda5fd1b3931 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 18:18:11 +0900
Subject: [PATCH 53/99] build(#10336): staticify assets

---
 packages/frontend/.storybook/main.ts           | 12 +++++++++++-
 packages/frontend/.storybook/preview-head.html |  2 +-
 packages/frontend/.storybook/preview.ts        |  3 ---
 packages/frontend/package.json                 |  1 +
 pnpm-lock.yaml                                 | 16 ++++++++++++++++
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 72c2490a43..4b5f7260e2 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,6 +1,7 @@
 import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
+import { viteStaticCopy } from 'vite-plugin-static-copy';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
@@ -22,7 +23,16 @@ const config = {
 	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
-			assetsInclude: [resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}')],
+			plugins: [
+				viteStaticCopy({
+					targets: [
+						{
+							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}'),
+							dest: 'node_modules/@tabler/icons-webfont',
+						},
+					],
+				}),
+			],
 			build: {
 				target: [
 					'chrome108',
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
index d0ec5b452f..dbbc2e54f7 100644
--- a/packages/frontend/.storybook/preview-head.html
+++ b/packages/frontend/.storybook/preview-head.html
@@ -1,4 +1,4 @@
-<link rel="stylesheet" href="../node_modules/@tabler/icons-webfont/tabler-icons.min.css">
+<link rel="stylesheet" href="./node_modules/@tabler/icons-webfont/tabler-icons.min.css">
 <script>
   window.global = window;
 </script>
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 1543552980..0035362058 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -7,9 +7,6 @@ import { commonHandlers, onUnhandledRequest } from './mocks';
 import themes from './themes';
 import '../src/style.scss';
 
-// TODO: HMR が壊れているのを直す
-import.meta.hot.invalidate();
-
 const appInitialized = Symbol();
 
 let moduleInitialized = false;
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index f0c92ff5bf..e541295223 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -129,6 +129,7 @@
 		"storybook": "7.0.0-rc.10",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
+		"vite-plugin-static-copy": "^0.13.1",
 		"vitest": "^0.29.8",
 		"vitest-fetch-mock": "^0.2.2",
 		"vue-eslint-parser": "9.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 86e03c4e4f..ff4619994f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -931,6 +931,9 @@ importers:
       summaly:
         specifier: github:misskey-dev/summaly
         version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
+      vite-plugin-static-copy:
+        specifier: ^0.13.1
+        version: 0.13.1(vite@4.2.1)
       vitest:
         specifier: ^0.29.8
         version: 0.29.8(happy-dom@8.9.0)(sass@1.60.0)
@@ -19780,6 +19783,19 @@ packages:
       - terser
     dev: true
 
+  /vite-plugin-static-copy@0.13.1(vite@4.2.1):
+    resolution: {integrity: sha512-KwIcGBT1aOxSq+laK3VmSngoEa3HXWj/6ZEXdv+y59eZ7p/XSuPahoDo+CfYW22JjTdnstgeKWiX+78KNgDu6g==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^3.0.0 || ^4.0.0
+    dependencies:
+      chokidar: 3.5.3
+      fast-glob: 3.2.12
+      fs-extra: 11.1.0
+      picocolors: 1.0.0
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+    dev: true
+
   /vite@4.2.1(@types/node@18.15.11)(sass@1.60.0):
     resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==}
     engines: {node: ^14.18.0 || >=16.0.0}

From 88981e9d5bfd34390f4ef2f3e8664b5028c34827 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 18:22:15 +0900
Subject: [PATCH 54/99] build(#10336): staticified directory structure

---
 packages/frontend/.storybook/main.ts | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 4b5f7260e2..82e2473e9f 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -27,9 +27,13 @@ const config = {
 				viteStaticCopy({
 					targets: [
 						{
-							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/**/*.{css,eot,ttf,woff,woff2}'),
+							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/*.css'),
 							dest: 'node_modules/@tabler/icons-webfont',
 						},
+						{
+							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/fonts/*.{eot,ttf,woff,woff2}'),
+							dest: 'node_modules/@tabler/icons-webfont/fonts',
+						},
 					],
 				}),
 			],

From 0f334f900c183e4faba8534eff4ff8b7b2e5b857 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 18:35:03 +0900
Subject: [PATCH 55/99] build(#10336): normalize path for Windows

---
 packages/frontend/.storybook/main.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 82e2473e9f..8a1eb70667 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,6 +1,6 @@
 import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
-import { mergeConfig } from 'vite';
+import { mergeConfig, normalizePath } from 'vite';
 import { viteStaticCopy } from 'vite-plugin-static-copy';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
@@ -27,11 +27,11 @@ const config = {
 				viteStaticCopy({
 					targets: [
 						{
-							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/*.css'),
+							src: normalizePath(resolve(__dirname, '../node_modules/@tabler/icons-webfont/*.css')),
 							dest: 'node_modules/@tabler/icons-webfont',
 						},
 						{
-							src: resolve(__dirname, '../node_modules/@tabler/icons-webfont/fonts/*.{eot,ttf,woff,woff2}'),
+							src: normalizePath(resolve(__dirname, '../node_modules/@tabler/icons-webfont/fonts/*.{eot,ttf,woff,woff2}')),
 							dest: 'node_modules/@tabler/icons-webfont/fonts',
 						},
 					],

From 7256b1f8d3aacddb9d8462821281a83de96a3711 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 21:42:38 +0900
Subject: [PATCH 56/99] ci(#10336): create actions

---
 .github/workflows/storybook.yml | 40 +++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 .github/workflows/storybook.yml

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
new file mode 100644
index 0000000000..a3a622d617
--- /dev/null
+++ b/.github/workflows/storybook.yml
@@ -0,0 +1,40 @@
+name: Storybook
+
+on:
+  push:
+    branches:
+      - master
+      - develop
+  pull_request:
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3.3.0
+      with:
+        submodules: true
+    - name: Install pnpm
+      uses: pnpm/action-setup@v2
+      with:
+        version: 7
+        run_install: false
+    - name: Use Node.js 18.x
+      uses: actions/setup-node@v3.6.0
+      with:
+        node-version: 18.x
+        cache: 'pnpm'
+    - run: corepack enable
+    - run: pnpm i --frozen-lockfile
+    - name: Check pnpm-lock.yaml
+      run: git diff --exit-code pnpm-lock.yaml
+    - name: Build misskey-js
+      run: pnpm --filter misskey-js build
+    - name: Build storybook
+      run: pnpm --filter frontend build-storybook
+    - name: Upload Artifacts
+      uses: actions/upload-artifact@v3
+      with:
+        name: storybook
+        path: packages/frontend/storybook-static

From 20fb266a939af9452172b092f63d245c54a5161e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 21:45:20 +0900
Subject: [PATCH 57/99] build(#10336): ignore tsc errors

---
 packages/frontend/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index e541295223..929c2b4133 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -4,7 +4,7 @@
 	"scripts": {
 		"watch": "vite",
 		"build": "vite build",
-		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
+		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook; node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
 		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",

From b0fa9f3809a9fafd4098a7e88b3a47794551f72a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 21:47:31 +0900
Subject: [PATCH 58/99] build(#10336): ignore tsc errors

---
 packages/frontend/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 929c2b4133..73febf60fe 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -5,7 +5,7 @@
 		"watch": "vite",
 		"build": "vite build",
 		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook; node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
-		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
+		"build-storybook": "node_modules/.bin/tsc -p .storybook; node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",

From 97731705ba67be49939a566f821ec8f07a6f5252 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 21:54:12 +0900
Subject: [PATCH 59/99] build(#10336): missing dependencies

---
 packages/frontend/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 73febf60fe..e541295223 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -4,8 +4,8 @@
 	"scripts": {
 		"watch": "vite",
 		"build": "vite build",
-		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook; node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
-		"build-storybook": "node_modules/.bin/tsc -p .storybook; node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
+		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
+		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",

From 8b30a0d641c84ca1abbd09f890e05a92f47dea58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 21:57:31 +0900
Subject: [PATCH 60/99] build(#10336): missing dependencies

---
 packages/frontend/package.json                |  2 +
 .../components/MkAnalogClock.stories.impl.ts  | 21 ++++++--
 pnpm-lock.yaml                                | 48 +++++++++++++++----
 3 files changed, 57 insertions(+), 14 deletions(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index e541295223..fbd66f592a 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -94,6 +94,7 @@
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
 		"@types/estree": "^1.0.0",
+		"@types/glob": "^8.1.0",
 		"@types/gulp": "4.0.10",
 		"@types/gulp-rename": "2.0.1",
 		"@types/matter-js": "0.18.2",
@@ -119,6 +120,7 @@
 		"eslint": "8.37.0",
 		"eslint-plugin-import": "2.27.5",
 		"eslint-plugin-vue": "9.10.0",
+		"glob": "^9.3.2",
 		"happy-dom": "8.9.0",
 		"msw": "^1.1.0",
 		"msw-storybook-addon": "^1.8.0",
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
index 74a70f7edb..05190aa268 100644
--- a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
+++ b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
@@ -1,15 +1,28 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
 import MkAnalogClock from './MkAnalogClock.vue';
 export const Default = {
-	render(args, { argTypes }) {
+	render(args) {
 		return {
 			components: {
 				MkAnalogClock,
 			},
-			props: Object.keys(argTypes),
-			template: '<MkAnalogClock v-bind="$props" />',
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkAnalogClock v-bind="props" />',
 		};
 	},
 	parameters: {
 		layout: 'fullscreen',
 	},
-};
+} satisfies StoryObj<typeof MkAnalogClock>;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ff4619994f..55c4a865f6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -826,6 +826,9 @@ importers:
       '@types/estree':
         specifier: ^1.0.0
         version: 1.0.0
+      '@types/glob':
+        specifier: ^8.1.0
+        version: 8.1.0
       '@types/gulp':
         specifier: 4.0.10
         version: 4.0.10
@@ -901,6 +904,9 @@ importers:
       eslint-plugin-vue:
         specifier: 9.10.0
         version: 9.10.0(eslint@8.37.0)
+      glob:
+        specifier: ^9.3.2
+        version: 9.3.2
       happy-dom:
         specifier: 8.9.0
         version: 8.9.0
@@ -6515,7 +6521,7 @@ packages:
   /@types/glob-stream@6.1.1:
     resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==}
     dependencies:
-      '@types/glob': 8.0.1
+      '@types/glob': 8.1.0
       '@types/node': 18.15.11
     dev: true
 
@@ -6526,8 +6532,8 @@ packages:
       '@types/node': 18.15.11
     dev: true
 
-  /@types/glob@8.0.1:
-    resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==}
+  /@types/glob@8.1.0:
+    resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
     dependencies:
       '@types/minimatch': 5.1.2
       '@types/node': 18.15.11
@@ -11930,7 +11936,7 @@ packages:
     peerDependencies:
       glob: ^8.0.3
     dependencies:
-      '@types/glob': 8.0.1
+      '@types/glob': 8.1.0
       glob: 8.1.0
     dev: true
 
@@ -11989,6 +11995,16 @@ packages:
       minimatch: 5.1.2
       once: 1.4.0
 
+  /glob@9.3.2:
+    resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==}
+    engines: {node: '>=16 || 14 >=14.17'}
+    dependencies:
+      fs.realpath: 1.0.0
+      minimatch: 7.4.3
+      minipass: 4.2.5
+      path-scurry: 1.6.3
+    dev: true
+
   /global-dirs@3.0.1:
     resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
     engines: {node: '>=10'}
@@ -14516,7 +14532,6 @@ packages:
   /lru-cache@7.14.1:
     resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==}
     engines: {node: '>=12'}
-    dev: false
 
   /lru-cache@8.0.4:
     resolution: {integrity: sha512-E9FF6+Oc/uFLqZCuZwRKUzgFt5Raih6LfxknOSAVTjNkrCZkBf7DQCwJxZQgd9l4eHjIJDGR+E+1QKD1RhThPw==}
@@ -14843,6 +14858,13 @@ packages:
       brace-expansion: 2.0.1
     dev: true
 
+  /minimatch@7.4.3:
+    resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==}
+    engines: {node: '>=10'}
+    dependencies:
+      brace-expansion: 2.0.1
+    dev: true
+
   /minimist-options@4.1.0:
     resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
     engines: {node: '>= 6'}
@@ -14908,11 +14930,9 @@ packages:
     dependencies:
       yallist: 4.0.0
 
-  /minipass@4.0.0:
-    resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==}
+  /minipass@4.2.5:
+    resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==}
     engines: {node: '>=8'}
-    dependencies:
-      yallist: 4.0.0
 
   /minizlib@1.3.3:
     resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==}
@@ -15945,6 +15965,14 @@ packages:
       path-root-regex: 0.1.2
     dev: false
 
+  /path-scurry@1.6.3:
+    resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==}
+    engines: {node: '>=16 || 14 >=14.17'}
+    dependencies:
+      lru-cache: 7.14.1
+      minipass: 4.2.5
+    dev: true
+
   /path-to-regexp@0.1.7:
     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
     dev: true
@@ -18717,7 +18745,7 @@ packages:
     dependencies:
       chownr: 2.0.0
       fs-minipass: 2.1.0
-      minipass: 4.0.0
+      minipass: 4.2.5
       minizlib: 2.1.2
       mkdirp: 1.0.4
       yallist: 4.0.0

From fc76829eb402c87147eec3a9dde33d5ce85704e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 22:22:07 +0900
Subject: [PATCH 61/99] build(#10336): use fast-glob

---
 packages/frontend/.storybook/generate.tsx | 5 ++---
 packages/frontend/package.json            | 3 +--
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index a6e2bf735b..d444cea8b7 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -1,10 +1,9 @@
 import { existsSync, readFileSync } from 'node:fs';
 import { writeFile } from 'node:fs/promises';
 import { basename, dirname } from 'node:path/posix';
-import { promisify } from 'node:util';
 import { GENERATOR, type State, generate } from 'astring';
 import type * as estree from 'estree';
-import glob from 'glob';
+import glob from 'fast-glob';
 import { format } from 'prettier';
 
 interface SatisfiesExpression extends estree.BaseExpression {
@@ -617,7 +616,7 @@ function toStories(component: string): string {
 }
 
 // promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
-promisify(glob)('src/components/global/**/*.vue').then(
+glob('src/components/global/**/*.vue').then(
 	(components) =>
 		Promise.all(
 			components.map((component) => {
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index fbd66f592a..a5f4537d95 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -94,7 +94,6 @@
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
 		"@types/estree": "^1.0.0",
-		"@types/glob": "^8.1.0",
 		"@types/gulp": "4.0.10",
 		"@types/gulp-rename": "2.0.1",
 		"@types/matter-js": "0.18.2",
@@ -120,7 +119,7 @@
 		"eslint": "8.37.0",
 		"eslint-plugin-import": "2.27.5",
 		"eslint-plugin-vue": "9.10.0",
-		"glob": "^9.3.2",
+		"fast-glob": "^3.2.12",
 		"happy-dom": "8.9.0",
 		"msw": "^1.1.0",
 		"msw-storybook-addon": "^1.8.0",

From 97e7f7efcc141b2bf7a21a89f78362785bde080c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 22:28:41 +0900
Subject: [PATCH 62/99] fix: invalid lockfile

---
 pnpm-lock.yaml | 35 ++++-------------------------------
 1 file changed, 4 insertions(+), 31 deletions(-)

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 55c4a865f6..d65a251569 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -826,9 +826,6 @@ importers:
       '@types/estree':
         specifier: ^1.0.0
         version: 1.0.0
-      '@types/glob':
-        specifier: ^8.1.0
-        version: 8.1.0
       '@types/gulp':
         specifier: 4.0.10
         version: 4.0.10
@@ -904,9 +901,9 @@ importers:
       eslint-plugin-vue:
         specifier: 9.10.0
         version: 9.10.0(eslint@8.37.0)
-      glob:
-        specifier: ^9.3.2
-        version: 9.3.2
+      fast-glob:
+        specifier: ^3.2.12
+        version: 3.2.12
       happy-dom:
         specifier: 8.9.0
         version: 8.9.0
@@ -11995,16 +11992,6 @@ packages:
       minimatch: 5.1.2
       once: 1.4.0
 
-  /glob@9.3.2:
-    resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dependencies:
-      fs.realpath: 1.0.0
-      minimatch: 7.4.3
-      minipass: 4.2.5
-      path-scurry: 1.6.3
-    dev: true
-
   /global-dirs@3.0.1:
     resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
     engines: {node: '>=10'}
@@ -14532,6 +14519,7 @@ packages:
   /lru-cache@7.14.1:
     resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==}
     engines: {node: '>=12'}
+    dev: false
 
   /lru-cache@8.0.4:
     resolution: {integrity: sha512-E9FF6+Oc/uFLqZCuZwRKUzgFt5Raih6LfxknOSAVTjNkrCZkBf7DQCwJxZQgd9l4eHjIJDGR+E+1QKD1RhThPw==}
@@ -14858,13 +14846,6 @@ packages:
       brace-expansion: 2.0.1
     dev: true
 
-  /minimatch@7.4.3:
-    resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==}
-    engines: {node: '>=10'}
-    dependencies:
-      brace-expansion: 2.0.1
-    dev: true
-
   /minimist-options@4.1.0:
     resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
     engines: {node: '>= 6'}
@@ -15965,14 +15946,6 @@ packages:
       path-root-regex: 0.1.2
     dev: false
 
-  /path-scurry@1.6.3:
-    resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dependencies:
-      lru-cache: 7.14.1
-      minipass: 4.2.5
-    dev: true
-
   /path-to-regexp@0.1.7:
     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
     dev: true

From b9289c397b2cb147c65f585cc189b232bf349888 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 22:34:36 +0900
Subject: [PATCH 63/99] ci(#10336): increase heap size

---
 .github/workflows/storybook.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index a3a622d617..a8871d9791 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -33,6 +33,8 @@ jobs:
       run: pnpm --filter misskey-js build
     - name: Build storybook
       run: pnpm --filter frontend build-storybook
+      env:
+        NODE_OPTIONS: "--max_old_space_size=7168"
     - name: Upload Artifacts
       uses: actions/upload-artifact@v3
       with:

From 3f4d93a287e802ea9c23c4b52013577cf133e1cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 22:49:50 +0900
Subject: [PATCH 64/99] build(#10336): use unpkg for storybook tabler icons

---
 packages/frontend/.storybook/main.ts           | 18 +-----------------
 packages/frontend/.storybook/preview-head.html |  2 +-
 packages/frontend/package.json                 |  1 -
 pnpm-lock.yaml                                 | 16 ----------------
 4 files changed, 2 insertions(+), 35 deletions(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 8a1eb70667..64b63f2a03 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,7 +1,5 @@
-import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
-import { mergeConfig, normalizePath } from 'vite';
-import { viteStaticCopy } from 'vite-plugin-static-copy';
+import { mergeConfig } from 'vite';
 const config = {
 	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
 	addons: [
@@ -23,20 +21,6 @@ const config = {
 	},
 	async viteFinal(config, options) {
 		return mergeConfig(config, {
-			plugins: [
-				viteStaticCopy({
-					targets: [
-						{
-							src: normalizePath(resolve(__dirname, '../node_modules/@tabler/icons-webfont/*.css')),
-							dest: 'node_modules/@tabler/icons-webfont',
-						},
-						{
-							src: normalizePath(resolve(__dirname, '../node_modules/@tabler/icons-webfont/fonts/*.{eot,ttf,woff,woff2}')),
-							dest: 'node_modules/@tabler/icons-webfont/fonts',
-						},
-					],
-				}),
-			],
 			build: {
 				target: [
 					'chrome108',
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
index dbbc2e54f7..01912da28b 100644
--- a/packages/frontend/.storybook/preview-head.html
+++ b/packages/frontend/.storybook/preview-head.html
@@ -1,4 +1,4 @@
-<link rel="stylesheet" href="./node_modules/@tabler/icons-webfont/tabler-icons.min.css">
+<link rel="stylesheet" href="https://unpkg.com/@tabler/icons-webfont@2.12.0/tabler-icons.min.css">
 <script>
   window.global = window;
 </script>
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index a5f4537d95..e7c33b2259 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -130,7 +130,6 @@
 		"storybook": "7.0.0-rc.10",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
-		"vite-plugin-static-copy": "^0.13.1",
 		"vitest": "^0.29.8",
 		"vitest-fetch-mock": "^0.2.2",
 		"vue-eslint-parser": "9.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d65a251569..f434ae517e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -934,9 +934,6 @@ importers:
       summaly:
         specifier: github:misskey-dev/summaly
         version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
-      vite-plugin-static-copy:
-        specifier: ^0.13.1
-        version: 0.13.1(vite@4.2.1)
       vitest:
         specifier: ^0.29.8
         version: 0.29.8(happy-dom@8.9.0)(sass@1.60.0)
@@ -19784,19 +19781,6 @@ packages:
       - terser
     dev: true
 
-  /vite-plugin-static-copy@0.13.1(vite@4.2.1):
-    resolution: {integrity: sha512-KwIcGBT1aOxSq+laK3VmSngoEa3HXWj/6ZEXdv+y59eZ7p/XSuPahoDo+CfYW22JjTdnstgeKWiX+78KNgDu6g==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      vite: ^3.0.0 || ^4.0.0
-    dependencies:
-      chokidar: 3.5.3
-      fast-glob: 3.2.12
-      fs-extra: 11.1.0
-      picocolors: 1.0.0
-      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
-    dev: true
-
   /vite@4.2.1(@types/node@18.15.11)(sass@1.60.0):
     resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==}
     engines: {node: ^14.18.0 || >=16.0.0}

From edeabac8f7d43dbe6c3753d960803ba53934fd03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Apr 2023 23:04:08 +0900
Subject: [PATCH 65/99] build(#10336): use unpkg for storybook twemojis

---
 packages/frontend/.storybook/mocks.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/.storybook/mocks.ts b/packages/frontend/.storybook/mocks.ts
index db9222f0dd..41c3c5c4d9 100644
--- a/packages/frontend/.storybook/mocks.ts
+++ b/packages/frontend/.storybook/mocks.ts
@@ -10,7 +10,7 @@ export const onUnhandledRequest = ((req, print) => {
 export const commonHandlers = [
 	rest.get('/twemoji/:codepoints.svg', async (req, res, ctx) => {
 		const { codepoints } = req.params;
-		const file = await import(`../node_modules/@discordapp/twemoji/dist/svg/${codepoints}.svg?raw`);
-		return res(ctx.set('Content-Type', 'image/svg+xml'), ctx.body(file.default));
+		const value = await fetch(`https://unpkg.com/@discordapp/twemoji@14.1.2/dist/svg/${codepoints}.svg`).then((response) => response.blob());
+		return res(ctx.set('Content-Type', 'image/svg+xml'), ctx.body(value));
 	}),
 ];

From 903d0bd3e24ff2dc897d6298e5387f6811543001 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 13:29:23 +0900
Subject: [PATCH 66/99] build(#10336): disable `ProfilePageCat`

---
 .../frontend/src/components/global/MkAvatar.stories.impl.ts   | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index 68fadfc1b8..2936664a88 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -44,6 +44,9 @@ export const ProfilePage = {
 		indicator: true,
 	},
 } satisfies StoryObj<typeof MkAvatar>;
+/* Your story couldn’t be captured because it exceeds our 25,000,000px limit. Its dimensions are 5,504,893x5,504,892px. Possible ways to resolve:
+ * * Separate pages into components
+ * * Minimize the number of very large elements in a story
 export const ProfilePageCat = {
 	...ProfilePage,
 	args: {
@@ -54,3 +57,4 @@ export const ProfilePageCat = {
 		},
 	},
 } satisfies StoryObj<typeof MkAvatar>;
+ */

From 9982ead9e65ee4138564fb64341f4090ca470774 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 14:33:32 +0900
Subject: [PATCH 67/99] build(#10336): blur `MkA` before interaction ends

---
 packages/frontend/src/components/global/MkA.stories.impl.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
index e17691ac61..72d069e853 100644
--- a/packages/frontend/src/components/global/MkA.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -34,6 +34,7 @@ export const Default = {
 		const menu = canvas.getByRole('menu');
 		await expect(menu).toBeInTheDocument();
 		await userEvent.click(a, { button: 0 });
+		a.blur();
 		await tick();
 		await expect(menu).not.toBeInTheDocument();
 	},

From 388ecfb1ea01fb3983ded12c1d7a1fc977fc3d81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 14:59:19 +0900
Subject: [PATCH 68/99] ci(#10336): stabilize

---
 .github/workflows/storybook.yml               |  4 +++
 packages/frontend/.storybook/fakes.ts         |  2 +-
 packages/frontend/package.json                |  1 +
 .../components/global/MkAcct.stories.impl.ts  |  6 +++-
 .../global/MkAvatar.stories.impl.ts           | 13 +++++---
 .../global/MkEllipsis.stories.impl.ts         | 32 +++++++++++++++++++
 .../src/components/global/MkEllipsis.vue      | 16 ++++++++--
 .../global/MkLoading.stories.impl.ts          |  3 +-
 8 files changed, 68 insertions(+), 9 deletions(-)
 create mode 100644 packages/frontend/src/components/global/MkEllipsis.stories.impl.ts

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index a8871d9791..42ecf148ee 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -35,6 +35,10 @@ jobs:
       run: pnpm --filter frontend build-storybook
       env:
         NODE_OPTIONS: "--max_old_space_size=7168"
+    - name: Publish to Chromatic
+      run: "pnpm --filter frontend chromatic -d storybook-static || :"
+      env:
+        CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
     - name: Upload Artifacts
       uses: actions/upload-artifact@v3
       with:
diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts
index e3146ecced..b620cf68a3 100644
--- a/packages/frontend/.storybook/fakes.ts
+++ b/packages/frontend/.storybook/fakes.ts
@@ -3,7 +3,7 @@ import type { entities } from 'misskey-js'
 export const userDetailed = {
 	id: 'someuserid',
 	username: 'miskist',
-	host: null,
+	host: 'misskey-hub.net',
 	name: 'Misskey User',
 	onlineStatus: 'unknown',
 	avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index e7c33b2259..3d88219c88 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -6,6 +6,7 @@
 		"build": "vite build",
 		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
 		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
+		"chromatic": "chromatic",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",
diff --git a/packages/frontend/src/components/global/MkAcct.stories.impl.ts b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
index 79d993decc..7dfa1a14f2 100644
--- a/packages/frontend/src/components/global/MkAcct.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
@@ -24,7 +24,10 @@ export const Default = {
 		};
 	},
 	args: {
-		user: userDetailed,
+		user: {
+			...userDetailed,
+			host: null,
+		},
 	},
 	parameters: {
 		layout: 'centered',
@@ -34,6 +37,7 @@ export const Detail = {
 	...Default,
 	args: {
 		...Default.args,
+		user: userDetailed,
 		detail: true,
 	},
 } satisfies StoryObj<typeof MkAcct>;
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index 2936664a88..6153f81294 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -44,9 +44,6 @@ export const ProfilePage = {
 		indicator: true,
 	},
 } satisfies StoryObj<typeof MkAvatar>;
-/* Your story couldn’t be captured because it exceeds our 25,000,000px limit. Its dimensions are 5,504,893x5,504,892px. Possible ways to resolve:
- * * Separate pages into components
- * * Minimize the number of very large elements in a story
 export const ProfilePageCat = {
 	...ProfilePage,
 	args: {
@@ -56,5 +53,13 @@ export const ProfilePageCat = {
 			isCat: true,
 		},
 	},
+	parameters: {
+		chromatic: {
+			/* Your story couldn’t be captured because it exceeds our 25,000,000px limit. Its dimensions are 5,504,893x5,504,892px. Possible ways to resolve:
+			 * * Separate pages into components
+			 * * Minimize the number of very large elements in a story
+			 */
+			disableSnapshot: true,
+		},
+	},
 } satisfies StoryObj<typeof MkAvatar>;
- */
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
new file mode 100644
index 0000000000..4ed035aed5
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
+import MkEllipsis from './MkEllipsis.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkEllipsis,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkEllipsis v-bind="props" />',
+		};
+	},
+	args: {
+		static: isChromatic,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkEllipsis>;
diff --git a/packages/frontend/src/components/global/MkEllipsis.vue b/packages/frontend/src/components/global/MkEllipsis.vue
index b3cf69c075..c8f6cd3394 100644
--- a/packages/frontend/src/components/global/MkEllipsis.vue
+++ b/packages/frontend/src/components/global/MkEllipsis.vue
@@ -1,9 +1,19 @@
 <template>
-<span :class="$style.root">
+<span :class="[$style.root, { [$style.static]: static }]">
 	<span :class="$style.dot">.</span><span :class="$style.dot">.</span><span :class="$style.dot">.</span>
 </span>
 </template>
 
+<script lang="ts" setup>
+import { } from 'vue';
+
+const props = withDefaults(defineProps<{
+	static?: boolean;
+}>(), {
+	static: false,
+});
+</script>
+
 <style lang="scss" module>
 @keyframes ellipsis {
 	0%, 80%, 100% {
@@ -15,7 +25,9 @@
 }
 
 .root {
-	
+	&.static > .dot {
+		animation-play-state: paused;
+	}
 }
 
 .dot {
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
index ca2e14494d..c3acc0e4c4 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -1,5 +1,6 @@
 /* eslint-disable @typescript-eslint/explicit-function-return-type */
 import { StoryObj } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
 import MkLoading from './MkLoading.vue';
 export const Default = {
 	render(args) {
@@ -23,7 +24,7 @@ export const Default = {
 		};
 	},
 	args: {
-		static: true,
+		static: isChromatic,
 	},
 	parameters: {
 		layout: 'centered',

From a21734431536205ce63b007fba31042b939ca5d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 17:00:20 +0900
Subject: [PATCH 69/99] ci(#10336): fetch-depth

---
 .github/workflows/storybook.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 42ecf148ee..374e44e297 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -14,6 +14,7 @@ jobs:
     steps:
     - uses: actions/checkout@v3.3.0
       with:
+        fetch-depth: 0
         submodules: true
     - name: Install pnpm
       uses: pnpm/action-setup@v2

From faf827a50af66e35507a94b1be9a1bc9880ee190 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 21:30:43 +0900
Subject: [PATCH 70/99] build(#10336): isChromatic

---
 packages/frontend/.storybook/preview.ts                        | 3 +++
 .../frontend/src/components/global/MkEllipsis.stories.impl.ts  | 2 +-
 .../frontend/src/components/global/MkLoading.stories.impl.ts   | 2 +-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 0035362058..5930932d0a 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -1,6 +1,7 @@
 import { addons } from '@storybook/addons';
 import { FORCE_REMOUNT } from '@storybook/core-events';
 import { type Preview, setup } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
 import { initialize, mswDecorator } from 'msw-storybook-addon';
 import locale from './locale';
 import { commonHandlers, onUnhandledRequest } from './mocks';
@@ -18,6 +19,8 @@ function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme
 	const theme = themes[document.documentElement.dataset.misskeyTheme];
 	if (theme) {
 		applyTheme(themes[document.documentElement.dataset.misskeyTheme]);
+	} else if (isChromatic()) {
+		applyTheme(themes['l-light']);
 	}
 	const observer = new MutationObserver((entries) => {
 		for (const entry of entries) {
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
index 4ed035aed5..65405a9bc8 100644
--- a/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
@@ -24,7 +24,7 @@ export const Default = {
 		};
 	},
 	args: {
-		static: isChromatic,
+		static: isChromatic(),
 	},
 	parameters: {
 		layout: 'centered',
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
index c3acc0e4c4..9dcc0cdea1 100644
--- a/packages/frontend/src/components/global/MkLoading.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -24,7 +24,7 @@ export const Default = {
 		};
 	},
 	args: {
-		static: isChromatic,
+		static: isChromatic(),
 	},
 	parameters: {
 		layout: 'centered',

From 5143f3372ca1cd436d25d5321fba2cd9264eaacf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 21:50:02 +0900
Subject: [PATCH 71/99] ci(#10336): notify on changes

---
 .github/workflows/storybook.yml | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 374e44e297..55ecda39e4 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -37,9 +37,23 @@ jobs:
       env:
         NODE_OPTIONS: "--max_old_space_size=7168"
     - name: Publish to Chromatic
-      run: "pnpm --filter frontend chromatic -d storybook-static || :"
+      id: chromatic
+      uses: chromaui/action@v1
       env:
-        CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+        exitZeroOnChanges: false
+        projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+    - name: Notify on changes
+      uses: actions/github-script@v6.4.0
+      if: failure()
+      with:
+        github-token: ${{ secrets.GITHUB_TOKEN }}
+        script: |
+          github.issues.createComment({
+            issue_number: context.issue.number,
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            body: 'Chromatic has detected ${{ steps.chromatic.outputs.changeCount }} changes in the Storybook. [Check it out](${{ steps.chromatic.outputs.url }}).'
+          })
     - name: Upload Artifacts
       uses: actions/upload-artifact@v3
       with:

From 252fe24e8d9dbfe148e1d01c68561e9108b1c7b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 21:58:37 +0900
Subject: [PATCH 72/99] ci(#10336): fix typo

---
 .github/workflows/storybook.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 55ecda39e4..b497d3b712 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -39,7 +39,7 @@ jobs:
     - name: Publish to Chromatic
       id: chromatic
       uses: chromaui/action@v1
-      env:
+      with:
         exitZeroOnChanges: false
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
     - name: Notify on changes
@@ -48,7 +48,7 @@ jobs:
       with:
         github-token: ${{ secrets.GITHUB_TOKEN }}
         script: |
-          github.issues.createComment({
+          github.rest.issues.createComment({
             issue_number: context.issue.number,
             owner: context.repo.owner,
             repo: context.repo.repo,

From f9693d1fad67fcdbe021df2daadcd098a79e7b33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 22:06:11 +0900
Subject: [PATCH 73/99] ci(#10336): missing working directory

---
 .github/workflows/storybook.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index b497d3b712..0baa7c4360 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -42,6 +42,7 @@ jobs:
       with:
         exitZeroOnChanges: false
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+        workingDir: packages/frontend
     - name: Notify on changes
       uses: actions/github-script@v6.4.0
       if: failure()

From e4f6fac4606070b2576bc8f63ba91c620b3f1c17 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 22:10:25 +0900
Subject: [PATCH 74/99] ci(#10336): skip build

---
 .github/workflows/storybook.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 0baa7c4360..8714f00731 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -42,6 +42,7 @@ jobs:
       with:
         exitZeroOnChanges: false
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+        storybookBuildDir: packages/frontend/storybook-static
         workingDir: packages/frontend
     - name: Notify on changes
       uses: actions/github-script@v6.4.0

From d57a504cacde0aad78108caa01ee669c59a7ac70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 22:14:59 +0900
Subject: [PATCH 75/99] ci(#10336): fix path

---
 .github/workflows/storybook.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 8714f00731..17bb2fd874 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -42,7 +42,7 @@ jobs:
       with:
         exitZeroOnChanges: false
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
-        storybookBuildDir: packages/frontend/storybook-static
+        storybookBuildDir: storybook-static
         workingDir: packages/frontend
     - name: Notify on changes
       uses: actions/github-script@v6.4.0

From 29c63adfb485709498ce243b2f5c58fe60e39bde Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 22:53:05 +0900
Subject: [PATCH 76/99] build(#10336): fails on Windows

---
 packages/frontend/.storybook/main.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
index 64b63f2a03..1e57c97b67 100644
--- a/packages/frontend/.storybook/main.ts
+++ b/packages/frontend/.storybook/main.ts
@@ -1,3 +1,4 @@
+import { resolve } from 'node:path';
 import type { StorybookConfig } from '@storybook/vue3-vite';
 import { mergeConfig } from 'vite';
 const config = {
@@ -7,7 +8,7 @@ const config = {
 		'@storybook/addon-interactions',
 		'@storybook/addon-links',
 		'@storybook/addon-storysource',
-		'../node_modules/storybook-addon-misskey-theme',
+		resolve(__dirname, '../node_modules/storybook-addon-misskey-theme'),
 	],
 	framework: {
 		name: '@storybook/vue3-vite',

From 9946ba0f08a3bf0b4105542caaf5eb7fbefdb84c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 22:54:52 +0900
Subject: [PATCH 77/99] build(#10336): available on Windows

---
 packages/frontend/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 3d88219c88..d97f1284c2 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -5,7 +5,7 @@
 		"watch": "vite",
 		"build": "vite build",
 		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
-		"build-storybook": "node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook build",
+		"build-storybook": "tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && storybook build",
 		"chromatic": "chromatic",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",

From ddb1635a465f11a992227ac3aa1cba5a9c8acd41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 23:26:35 +0900
Subject: [PATCH 78/99] ci(#10336): disable animation on chromatic

---
 packages/frontend/.storybook/preview.ts | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
index 5930932d0a..b2974276ab 100644
--- a/packages/frontend/.storybook/preview.ts
+++ b/packages/frontend/.storybook/preview.ts
@@ -52,8 +52,9 @@ queueMicrotask(() => {
 		import('../src/directives'),
 		import('../src/widgets'),
 		import('../src/scripts/theme'),
+		import('../src/store'),
 		import('../src/os'),
-	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }, os]) => {
+	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }, { defaultStore }, os]) => {
 		setup((app) => {
 			moduleInitialized = true;
 			if (app[appInitialized]) {
@@ -65,6 +66,9 @@ queueMicrotask(() => {
 			directives(app);
 			widgets(app);
 			misskeyOS = os;
+			if (isChromatic()) {
+				defaultStore.set('animation', false);
+			}
 		});
 	});
 });

From dfb6df018a276b0cc854d76539abd292f2ac872e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Apr 2023 23:42:04 +0900
Subject: [PATCH 79/99] ci(#10336): add static option to `PageHeader.tabs`

---
 .../src/components/global/MkPageHeader.stories.impl.ts     | 1 +
 .../frontend/src/components/global/MkPageHeader.tabs.vue   | 7 ++++++-
 packages/frontend/src/components/global/MkPageHeader.vue   | 3 ++-
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
index b23a1e3a02..f164e0957d 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
@@ -23,6 +23,7 @@ export const Empty = {
 		};
 	},
 	args: {
+		static: true,
 		tabs: [],
 	},
 	parameters: {
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.vue b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
index 9e1da64e61..166f632c6f 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
@@ -52,6 +52,7 @@ import { onMounted, onUnmounted, watch, nextTick, shallowRef } from 'vue';
 import { defaultStore } from '@/store';
 
 const props = withDefaults(defineProps<{
+	static?: boolean;
 	tabs?: Tab[];
 	tab?: string;
 	rootEl?: HTMLElement;
@@ -127,7 +128,11 @@ async function enter(el: HTMLElement) {
 		entering = false;
 	});
 
-	setTimeout(renderTab, 170);
+	if (props.static) {
+		renderTab();
+	} else {
+		setTimeout(renderTab, 170);
+	}
 }
 function afterEnter(el: HTMLElement) {
 	//el.style.width = '';
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index 0d229a9370..94e1e8dd0b 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -19,7 +19,7 @@
 					</div>
 				</div>
 			</div>
-			<XTabs v-if="!narrow || hideTitle" :class="$style.tabs" :tab="tab" :tabs="tabs" :root-el="el" @update:tab="key => emit('update:tab', key)" @tab-click="onTabClick"/>
+			<XTabs v-if="!narrow || hideTitle" :class="$style.tabs" :static="static" :tab="tab" :tabs="tabs" :root-el="el" @update:tab="key => emit('update:tab', key)" @tab-click="onTabClick"/>
 		</template>
 		<div v-if="(!thin_ && narrow && !hideTitle) || (actions && actions.length > 0)" :class="$style.buttonsRight">
 			<template v-for="action in actions">
@@ -43,6 +43,7 @@ import { injectPageMetadata } from '@/scripts/page-metadata';
 import { $i, openAccountMenu as openAccountMenu_ } from '@/account';
 
 const props = withDefaults(defineProps<{
+	static?: boolean;
 	tabs?: Tab[];
 	tab?: string;
 	actions?: {

From 36e8988ff7bb371c915fca00c492f53bf1dd47a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 02:09:47 +0900
Subject: [PATCH 80/99] chore: void


From 3ab2a008f2c65ad7314168b6b6700753bbe997a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 03:03:43 +0900
Subject: [PATCH 81/99] ci(#10336): change parameters

---
 .../src/components/global/MkAvatar.stories.impl.ts         | 1 +
 .../src/components/global/MkPageHeader.stories.impl.ts     | 4 ++++
 .../frontend/src/components/global/MkPageHeader.tabs.vue   | 7 +------
 packages/frontend/src/components/global/MkPageHeader.vue   | 3 +--
 4 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
index 6153f81294..6c46f75b5f 100644
--- a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -54,6 +54,7 @@ export const ProfilePageCat = {
 		},
 	},
 	parameters: {
+		...ProfilePage.parameters,
 		chromatic: {
 			/* Your story couldn’t be captured because it exceeds our 25,000,000px limit. Its dimensions are 5,504,893x5,504,892px. Possible ways to resolve:
 			 * * Separate pages into components
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
index f164e0957d..5519d60fc4 100644
--- a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
@@ -28,6 +28,10 @@ export const Empty = {
 	},
 	parameters: {
 		layout: 'centered',
+		chromatic: {
+			/* This component has animations that are implemented with JavaScript. So it's unstable to take a snapshot. */
+			disableSnapshot: true,
+		},
 	},
 } satisfies StoryObj<typeof MkPageHeader>;
 export const OneTab = {
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.vue b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
index 166f632c6f..9e1da64e61 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
@@ -52,7 +52,6 @@ import { onMounted, onUnmounted, watch, nextTick, shallowRef } from 'vue';
 import { defaultStore } from '@/store';
 
 const props = withDefaults(defineProps<{
-	static?: boolean;
 	tabs?: Tab[];
 	tab?: string;
 	rootEl?: HTMLElement;
@@ -128,11 +127,7 @@ async function enter(el: HTMLElement) {
 		entering = false;
 	});
 
-	if (props.static) {
-		renderTab();
-	} else {
-		setTimeout(renderTab, 170);
-	}
+	setTimeout(renderTab, 170);
 }
 function afterEnter(el: HTMLElement) {
 	//el.style.width = '';
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index 94e1e8dd0b..0d229a9370 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -19,7 +19,7 @@
 					</div>
 				</div>
 			</div>
-			<XTabs v-if="!narrow || hideTitle" :class="$style.tabs" :static="static" :tab="tab" :tabs="tabs" :root-el="el" @update:tab="key => emit('update:tab', key)" @tab-click="onTabClick"/>
+			<XTabs v-if="!narrow || hideTitle" :class="$style.tabs" :tab="tab" :tabs="tabs" :root-el="el" @update:tab="key => emit('update:tab', key)" @tab-click="onTabClick"/>
 		</template>
 		<div v-if="(!thin_ && narrow && !hideTitle) || (actions && actions.length > 0)" :class="$style.buttonsRight">
 			<template v-for="action in actions">
@@ -43,7 +43,6 @@ import { injectPageMetadata } from '@/scripts/page-metadata';
 import { $i, openAccountMenu as openAccountMenu_ } from '@/account';
 
 const props = withDefaults(defineProps<{
-	static?: boolean;
 	tabs?: Tab[];
 	tab?: string;
 	actions?: {

From 902d7c5538768adb41d9e9a9024e3ad0a2646b72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 10:50:21 +0900
Subject: [PATCH 82/99] docs(#10336): update CONTRIBUTING

---
 CONTRIBUTING.md | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c6b50015ff..64feddf8a2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -232,15 +232,13 @@ node .storybook/generate.js && pnpm storybook dev
 ##### Setup
 
 ```bash
-cd path/to/packages/misskey-js
-pnpm build
+pnpm --filter misskey-js build
 ```
 
 ##### Run
 
 ```bash
-cd path/to/packages/frontend
-pnpm storybook-dev
+pnpm --filter frontend storybook-dev
 ```
 
 ### Usage

From 4f7ba294d9b9109b928ecf1f9ef4b95a740210fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 11:03:19 +0900
Subject: [PATCH 83/99] docs(#10336): note about meta overriding and etc.

---
 CONTRIBUTING.md | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 64feddf8a2..fece05d7a9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -214,17 +214,14 @@ Misskey uses [Storybook](https://storybook.js.org/) for UI development.
 ##### Setup
 
 ```bash
-cd path/to/packages/misskey-js
-pnpm build
-cd path/to/packages/frontend
-pnpm tsc -p .storybook && (node .storybook/preload-locale.js & node .storybook/preload-theme.js)
+pnpm --filter misskey-js build
+pnpm --filter frontend tsc -p .storybook && (node packages/frontend/.storybook/preload-locale.js & node packages/frontend/.storybook/preload-theme.js)
 ```
 
 ##### Run
 
 ```bash
-cd path/to/packages/frontend
-node .storybook/generate.js && pnpm storybook dev
+node packages/frontend/.storybook/generate.js && pnpm --filter frontend storybook dev
 ```
 
 #### macOS & Linux
@@ -265,7 +262,7 @@ export const Default = {
 			computed: {
 				props() {
 					return {
-						...args,
+						...this.args,
 					};
 				},
 			},
@@ -288,7 +285,20 @@ import MyComponent from './MyComponent.vue';
 void MyComponent;
 ```
 
-You can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file to define the mock handlers.
+You can override the component meta by creating a meta story file (`MyComponent.stories.meta.ts`).
+
+```ts
+export const argTypes = {
+	scale: {
+		control: {
+			type: 'range',
+			min: 1,
+			max: 4,
+		},
+};
+```
+
+Also, you can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file to define the mock handlers.
 
 ```ts
 import { rest } from 'msw';

From b1b871aebf5cdae0f5ae655e669c5fb0eb9f081d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 13:41:33 +0900
Subject: [PATCH 84/99] ci(#10336): use Chromatic for checks

---
 .github/workflows/storybook.yml | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 17bb2fd874..bc27c62ec7 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -5,7 +5,7 @@ on:
     branches:
       - master
       - develop
-  pull_request:
+  pull_request_target:
 
 jobs:
   build:
@@ -40,22 +40,14 @@ jobs:
       id: chromatic
       uses: chromaui/action@v1
       with:
-        exitZeroOnChanges: false
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
         storybookBuildDir: storybook-static
         workingDir: packages/frontend
-    - name: Notify on changes
-      uses: actions/github-script@v6.4.0
-      if: failure()
-      with:
-        github-token: ${{ secrets.GITHUB_TOKEN }}
-        script: |
-          github.rest.issues.createComment({
-            issue_number: context.issue.number,
-            owner: context.repo.owner,
-            repo: context.repo.repo,
-            body: 'Chromatic has detected ${{ steps.chromatic.outputs.changeCount }} changes in the Storybook. [Check it out](${{ steps.chromatic.outputs.url }}).'
-          })
+    - name: Compare on Chromatic
+      if: github.event_name == 'pull_request_target'
+      run: pnpm --filter frontend chromatic --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
+      env:
+        CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
     - name: Upload Artifacts
       uses: actions/upload-artifact@v3
       with:

From 9b004248a9e321ec309815bd9dc18ec4ccebaa59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 13:44:17 +0900
Subject: [PATCH 85/99] ci(#10336): use `pull_request` instead of
 `pull_request_target` for now

---
 .github/workflows/storybook.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index bc27c62ec7..94d8287f91 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -5,7 +5,7 @@ on:
     branches:
       - master
       - develop
-  pull_request_target:
+  pull_request:
 
 jobs:
   build:

From 2acb655c0f488cfb26e296f01f482145f2af0dc7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 13:50:22 +0900
Subject: [PATCH 86/99] ci(#10336): use `exitOnceUploaded`

---
 .github/workflows/storybook.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 94d8287f91..9796ac1362 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -40,11 +40,12 @@ jobs:
       id: chromatic
       uses: chromaui/action@v1
       with:
+        exitOnceUploaded: true
         projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
         storybookBuildDir: storybook-static
         workingDir: packages/frontend
     - name: Compare on Chromatic
-      if: github.event_name == 'pull_request_target'
+      if: github.event_name == 'pull_request'
       run: pnpm --filter frontend chromatic --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
       env:
         CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}

From b3b64d85251dbd2172231d02da5f7dfbd785b15f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 13:58:20 +0900
Subject: [PATCH 87/99] ci(#10336): reuse built storybook

---
 .github/workflows/storybook.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 9796ac1362..3bac63fa55 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -46,7 +46,7 @@ jobs:
         workingDir: packages/frontend
     - name: Compare on Chromatic
       if: github.event_name == 'pull_request'
-      run: pnpm --filter frontend chromatic --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
+      run: pnpm --filter frontend chromatic -d storybook-static --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
       env:
         CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
     - name: Upload Artifacts

From 211682d7ec96481a75afde12a528e5e8212b12ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 14:05:19 +0900
Subject: [PATCH 88/99] ci(#10336): back to `pull_request_target`

---
 .github/workflows/storybook.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index 3bac63fa55..eda28c5f77 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -5,7 +5,7 @@ on:
     branches:
       - master
       - develop
-  pull_request:
+  pull_request_target:
 
 jobs:
   build:
@@ -45,7 +45,7 @@ jobs:
         storybookBuildDir: storybook-static
         workingDir: packages/frontend
     - name: Compare on Chromatic
-      if: github.event_name == 'pull_request'
+      if: github.event_name == 'pull_request_target'
       run: pnpm --filter frontend chromatic -d storybook-static --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
       env:
         CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}

From 38b9fc4f258ec8c0a71e4e83f340a2fdb2cfdde8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 14:22:57 +0900
Subject: [PATCH 89/99] chore: unused dependencies

---
 packages/misskey-js/package.json | 1 -
 pnpm-lock.yaml                   | 3 ---
 2 files changed, 4 deletions(-)

diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index a9343a4163..445602c456 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -40,7 +40,6 @@
 	"dependencies": {
 		"@swc/cli": "0.1.62",
 		"@swc/core": "1.3.42",
-		"autobind-decorator": "^2.4.0",
 		"eventemitter3": "5.0.0",
 		"reconnecting-websocket": "^4.4.0"
 	}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f434ae517e..5d08fb292d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -955,9 +955,6 @@ importers:
       '@swc/core':
         specifier: 1.3.42
         version: 1.3.42
-      autobind-decorator:
-        specifier: ^2.4.0
-        version: 2.4.0
       eventemitter3:
         specifier: 5.0.0
         version: 5.0.0

From 14591aa8f2ff6af74e511da01432a24c969f0cce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 14:49:40 +0900
Subject: [PATCH 90/99] style(#10336): reduce prettier indents

---
 packages/frontend/.storybook/generate.tsx | 679 ++++++++--------------
 1 file changed, 229 insertions(+), 450 deletions(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index d444cea8b7..f2c87016c8 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -105,51 +105,35 @@ function toStories(component: string): string {
 	const hasMetaStories = existsSync(`${metaStories}.ts`);
 	const base = basename(component);
 	const dir = dirname(component);
-	const literal = (
+	const literal =
 		<literal
 			value={component
 				.slice('src/'.length, -'.vue'.length)
 				.replace(/\./g, '/')}
-		/>
-	) as estree.Literal;
-	const identifier = (
+		/> as estree.Literal;
+	const identifier =
 		<identifier
 			name={base
 				.slice(0, -'.vue'.length)
 				.replace(/[-.]|^(?=\d)/g, '_')
 				.replace(/(?<=^[^A-Z_]*$)/, '_')}
-		/>
-	) as estree.Identifier;
+		/> as estree.Identifier;
 	const parameters = (
 		<object-expression
 			properties={[
-				(
-					<property
-						key={(<identifier name='layout' />) as estree.Identifier}
-						value={
-							(
-								<literal
-									value={
-										`${dir}/`.startsWith('src/pages/')
-											? 'fullscreen'
-											: 'centered'
-									}
-								/>
-							) as estree.Literal
-						}
-						kind={'init' as const}
-					/>
-				) as estree.Property,
+				<property
+					key={<identifier name='layout' /> as estree.Identifier}
+					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'}/> as estree.Literal}
+					kind={'init' as const}
+				/> as estree.Property,
 				...(hasMsw
 					? [
-							(
-								<property
-									key={(<identifier name='msw' />) as estree.Identifier}
-									value={(<identifier name='msw' />) as estree.Identifier}
-									kind={'init' as const}
-									shorthand
-								/>
-							) as estree.Property,
+							<property
+								key={<identifier name='msw' /> as estree.Identifier}
+								value={<identifier name='msw' /> as estree.Identifier}
+								kind={'init' as const}
+								shorthand
+							/> as estree.Property,
 					  ]
 					: []),
 			]}
@@ -158,447 +142,242 @@ function toStories(component: string): string {
 	const program = (
 		<program
 			body={[
-				(
-					<import-declaration
-						source={(<literal value='@storybook/vue3' />) as estree.Literal}
-						specifiers={[
-							(
-								<import-specifier
-									local={(<identifier name='Meta' />) as estree.Identifier}
-									imported={(<identifier name='Meta' />) as estree.Identifier}
-								/>
-							) as estree.ImportSpecifier,
-							...(hasImplStories
-								? []
-								: [
-										(
-											<import-specifier
-												local={
-													(<identifier name='StoryObj' />) as estree.Identifier
-												}
-												imported={
-													(<identifier name='StoryObj' />) as estree.Identifier
-												}
-											/>
-										) as estree.ImportSpecifier,
-								  ]),
-						]}
-					/>
-				) as estree.ImportDeclaration,
+				<import-declaration
+					source={<literal value='@storybook/vue3' /> as estree.Literal}
+					specifiers={[
+						<import-specifier
+							local={<identifier name='Meta' /> as estree.Identifier}
+							imported={<identifier name='Meta' /> as estree.Identifier}
+						/> as estree.ImportSpecifier,
+						...(hasImplStories
+							? []
+							: [
+									<import-specifier
+										local={<identifier name='StoryObj' /> as estree.Identifier}
+										imported={<identifier name='StoryObj' /> as estree.Identifier}
+									/> as estree.ImportSpecifier,
+								]),
+					]}
+				/> as estree.ImportDeclaration,
 				...(hasMsw
 					? [
-							(
-								<import-declaration
-									source={
-										(<literal value={`./${basename(msw)}`} />) as estree.Literal
-									}
-									specifiers={[
-										(
-											<import-namespace-specifier
-												local={(<identifier name='msw' />) as estree.Identifier}
-											/>
-										) as estree.ImportNamespaceSpecifier,
-									]}
-								/>
-							) as estree.ImportDeclaration,
+							<import-declaration
+								source={<literal value={`./${basename(msw)}`} /> as estree.Literal}
+								specifiers={[
+									<import-namespace-specifier
+										local={<identifier name='msw' /> as estree.Identifier}
+									/> as estree.ImportNamespaceSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
 					  ]
 					: []),
 				...(hasImplStories
 					? []
 					: [
-							(
-								<import-declaration
-									source={(<literal value={`./${base}`} />) as estree.Literal}
-									specifiers={[
-										(
-											<import-default-specifier local={identifier} />
-										) as estree.ImportDefaultSpecifier,
-									]}
-								/>
-							) as estree.ImportDeclaration,
+							<import-declaration
+								source={<literal value={`./${base}`} /> as estree.Literal}
+								specifiers={[
+									<import-default-specifier local={identifier} /> as estree.ImportDefaultSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
 					  ]),
 				...(hasMetaStories
 					? [
-							(
-								<import-declaration
-									source={
-										(<literal value={`./${basename(metaStories)}`} />) as estree.Literal
-									}
-									specifiers={[
-										(
-											<import-namespace-specifier
-												local={(<identifier name='storiesMeta' />) as estree.Identifier}
-											/>
-										) as estree.ImportNamespaceSpecifier,
-									]}
-								/>
-							) as estree.ImportDeclaration,
+							<import-declaration
+								source={<literal value={`./${basename(metaStories)}`} /> as estree.Literal}
+								specifiers={[
+									<import-namespace-specifier
+										local={<identifier name='storiesMeta' /> as estree.Identifier}
+									/> as estree.ImportNamespaceSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
 						]
 					: []),
-				(
-					<variable-declaration
-						kind={'const' as const}
-						declarations={[
-							(
-								<variable-declarator
-									id={(<identifier name='meta' />) as estree.Identifier}
-									init={
-										(
-											<satisfies-expression
-												expression={
-													(
-														<object-expression
-															properties={[
-																(
-																	<property
-																		key={
-																			(
-																				<identifier name='title' />
-																			) as estree.Identifier
-																		}
-																		value={literal}
-																		kind={'init' as const}
-																	/>
-																) as estree.Property,
-																(
-																	<property
-																		key={
-																			(
-																				<identifier name='component' />
-																			) as estree.Identifier
-																		}
-																		value={identifier}
-																		kind={'init' as const}
-																	/>
-																) as estree.Property,
-																...(hasMetaStories
-																	? [
-																			(
-																				<spread-element
-																					argument={
-																						(
-																							<identifier name='storiesMeta' />
-																						) as estree.Identifier
-																					}
-																				/>
-																			) as estree.SpreadElement,
-																		]
-																	: [])
-															]}
-														/>
-													) as estree.ObjectExpression
-												}
-												reference={
-													(
-														<identifier
-															name={`Meta<typeof ${identifier.name}>`}
-														/>
-													) as estree.Identifier
-												}
-											/>
-										) as estree.Expression
+				<variable-declaration
+					kind={'const' as const}
+					declarations={[
+						<variable-declarator
+							id={<identifier name='meta' /> as estree.Identifier}
+							init={
+								<satisfies-expression
+									expression={
+										<object-expression
+											properties={[
+												<property
+													key={<identifier name='title' /> as estree.Identifier}
+													value={literal}
+													kind={'init' as const}
+												/> as estree.Property,
+												<property
+													key={<identifier name='component' /> as estree.Identifier}
+													value={identifier}
+													kind={'init' as const}
+												/> as estree.Property,
+												...(hasMetaStories
+													? [
+															<spread-element
+																argument={<identifier name='storiesMeta' /> as estree.Identifier}
+															/> as estree.SpreadElement,
+														]
+													: [])
+											]}
+										/> as estree.ObjectExpression
 									}
-								/>
-							) as estree.VariableDeclarator,
-						]}
-					/>
-				) as estree.VariableDeclaration,
+									reference={<identifier name={`Meta<typeof ${identifier.name}>`} /> as estree.Identifier}
+								/> as estree.Expression
+							}
+						/> as estree.VariableDeclarator,
+					]}
+				/> as estree.VariableDeclaration,
 				...(hasImplStories
 					? []
 					: [
-							(
-								<export-named-declaration
-									declaration={
-										(
-											<variable-declaration
-												kind={'const' as const}
-												declarations={[
-													(
-														<variable-declarator
-															id={
-																(
-																	<identifier name='Default' />
-																) as estree.Identifier
-															}
-															init={
-																(
-																	<satisfies-expression
-																		expression={
-																			(
-																				<object-expression
-																					properties={[
-																						(
-																							<property
-																								key={
-																									(
-																										<identifier name='render' />
-																									) as estree.Identifier
-																								}
-																								value={
-																									(
-																										<function-expression
-																											params={[
-																												(
-																													<identifier name='args' />
-																												) as estree.Identifier,
-																											]}
-																											body={
-																												(
-																													<block-statement
-																														body={[
-																															(
-																																<return-statement
-																																	argument={
-																																		(
+							<export-named-declaration
+								declaration={
+									<variable-declaration
+										kind={'const' as const}
+										declarations={[
+											<variable-declarator
+												id={<identifier name='Default' /> as estree.Identifier}
+												init={
+													<satisfies-expression
+														expression={
+															<object-expression
+																properties={[
+																	<property
+																		key={<identifier name='render' /> as estree.Identifier}
+																		value={
+																			<function-expression
+																				params={[
+																					<identifier name='args' /> as estree.Identifier,
+																				]}
+																				body={
+																					<block-statement
+																						body={[
+																							<return-statement
+																								argument={
+																									<object-expression
+																										properties={[
+																											<property
+																												key={<identifier name='components' /> as estree.Identifier}
+																												value={
+																													<object-expression
+																														properties={[
+																															<property key={identifier} value={identifier} kind={'init' as const} shorthand /> as estree.Property,
+																														]}
+																													/> as estree.ObjectExpression
+																												}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='setup' /> as estree.Identifier}
+																												value={
+																													<function-expression
+																														params={[]}
+																														body={
+																															<block-statement
+																																body={[
+																																	<return-statement
+																																		argument={
 																																			<object-expression
 																																				properties={[
-																																					(
-																																						<property
-																																							key={
-																																								(
-																																									<identifier name='components' />
-																																								) as estree.Identifier
-																																							}
-																																							value={
-																																								(
-																																									<object-expression
-																																										properties={[
-																																											(
-																																												<property
-																																													key={
-																																														identifier
-																																													}
-																																													value={
-																																														identifier
-																																													}
-																																													kind={
-																																														'init' as const
-																																													}
-																																													shorthand
-																																												/>
-																																											) as estree.Property,
-																																										]}
-																																									/>
-																																								) as estree.ObjectExpression
-																																							}
-																																							kind={
-																																								'init' as const
-																																							}
-																																						/>
-																																					) as estree.Property,
-																																					(
-																																						<property
-																																							key={
-																																								(
-																																									<identifier name='setup' />
-																																								) as estree.Identifier
-																																							}
-																																							value={
-																																								(
-																																									<function-expression
-																																										params={[]}
-																																										body={
-																																											(
-																																												<block-statement
-																																													body={[
-																																														(
-																																															<return-statement
-																																																argument={
-																																																	(
-																																																		<object-expression
-																																																			properties={[
-																																																				(
-																																																					<property
-																																																						key={
-																																																							(
-																																																								<identifier name='args' />
-																																																							) as estree.Identifier
-																																																						}
-																																																						value={
-																																																							(
-																																																								<identifier name='args' />
-																																																							) as estree.Identifier
-																																																						}
-																																																						kind={
-																																																							'init' as const
-																																																						}
-																																																						shorthand
-																																																					/>
-																																																				) as estree.Property,
-																																																			]}
-																																																		/>
-																																																	) as estree.ObjectExpression
-																																																}
-																																															/>
-																																														) as estree.ReturnStatement,
-																																													]}
-																																												/>
-																																											) as estree.BlockStatement
-																																										}
-																																									/>
-																																								) as estree.FunctionExpression
-																																							}
-																																							method
-																																							kind={
-																																								'init' as const
-																																							}
-																																						/>
-																																					) as estree.Property,
-																																					(
-																																						<property
-																																							key={
-																																								(
-																																									<identifier name='computed' />
-																																								) as estree.Identifier
-																																							}
-																																							value={
-																																								(
-																																									<object-expression
-																																										properties={[
-																																											(
-																																												<property
-																																													key={
-																																														(
-																																															<identifier name='props' />
-																																														) as estree.Identifier
-																																													}
-																																													value={
-																																														(
-																																															<function-expression
-																																																params={[]}
-																																																body={
-																																																	(
-																																																		<block-statement
-																																																			body={[
-																																																				(
-																																																					<return-statement
-																																																						argument={
-																																																							(
-																																																								<object-expression
-																																																									properties={[
-																																																										(
-																																																											<spread-element
-																																																												argument={
-																																																													(
-																																																														<member-expression
-																																																															object={
-																																																																(
-																																																																	<this-expression />
-																																																																) as estree.ThisExpression
-																																																															}
-																																																															property={
-																																																																(
-																																																																	<identifier name='args' />
-																																																																) as estree.Identifier
-																																																															}
-																																																														/>
-																																																													) as estree.MemberExpression
-																																																												}
-																																																											/>
-																																																										) as estree.SpreadElement,
-																																																									]}
-																																																								/>
-																																																							) as estree.ObjectExpression
-																																																						}
-																																																					/>
-																																																				) as estree.ReturnStatement,
-																																																			]}
-																																																		/>
-																																																	) as estree.BlockStatement
-																																																}
-																																															/>
-																																														) as estree.FunctionExpression
-																																													}
-																																													method
-																																													kind={
-																																														'init' as const
-																																													}
-																																												/>
-																																											) as estree.Property,
-																																										]}
-																																									/>
-																																								) as estree.ObjectExpression
-																																							}
-																																							kind={
-																																								'init' as const
-																																							}
-																																						/>
-																																					) as estree.Property,
-																																					(
-																																						<property
-																																							key={
-																																								(
-																																									<identifier name='template' />
-																																								) as estree.Identifier
-																																							}
-																																							value={
-																																								(
-																																									<literal
-																																										value={`<${identifier.name} v-bind="props" />`}
-																																									/>
-																																								) as estree.Literal
-																																							}
-																																							kind={
-																																								'init' as const
-																																							}
-																																						/>
-																																					) as estree.Property,
+																																					<property
+																																						key={<identifier name='args' /> as estree.Identifier}
+																																						value={<identifier name='args' /> as estree.Identifier}
+																																						kind={'init' as const}
+																																						shorthand
+																																					/> as estree.Property,
 																																				]}
-																																			/>
-																																		) as estree.ObjectExpression
-																																	}
-																																/>
-																															) as estree.ReturnStatement,
+																																			/> as estree.ObjectExpression
+																																		}
+																																	/> as estree.ReturnStatement,
+																																]}
+																															/> as estree.BlockStatement
+																														}
+																													/> as estree.FunctionExpression
+																												}
+																												method
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='computed' /> as estree.Identifier}
+																												value={
+																													<object-expression
+																														properties={[
+																															<property
+																																key={<identifier name='props' /> as estree.Identifier}
+																																value={
+																																	<function-expression
+																																		params={[]}
+																																		body={
+																																			<block-statement
+																																				body={[
+																																					<return-statement
+																																						argument={
+																																							<object-expression
+																																								properties={[
+																																									<spread-element
+																																										argument={
+																																											<member-expression
+																																												object={<this-expression /> as estree.ThisExpression}
+																																												property={<identifier name='args' /> as estree.Identifier}
+																																											/> as estree.MemberExpression
+																																										}
+																																									/> as estree.SpreadElement,
+																																								]}
+																																							/> as estree.ObjectExpression
+																																						}
+																																					/> as estree.ReturnStatement,
+																																				]}
+																																			/> as estree.BlockStatement
+																																		}
+																																	/> as estree.FunctionExpression
+																																}
+																																method
+																																kind={'init' as const}
+																															/> as estree.Property,
 																														]}
-																													/>
-																												) as estree.BlockStatement
-																											}
-																										/>
-																									) as estree.FunctionExpression
+																													/> as estree.ObjectExpression
+																												}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='template' /> as estree.Identifier}
+																												value={<literal value={`<${identifier.name} v-bind="props" />`} /> as estree.Literal}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																										]}
+																									/> as estree.ObjectExpression
 																								}
-																								method
-																								kind={'init' as const}
-																							/>
-																						) as estree.Property,
-																						(
-																							<property
-																								key={
-																									(
-																										<identifier name='parameters' />
-																									) as estree.Identifier
-																								}
-																								value={parameters}
-																								kind={'init' as const}
-																							/>
-																						) as estree.Property,
-																					]}
-																				/>
-																			) as estree.ObjectExpression
+																							/> as estree.ReturnStatement,
+																						]}
+																					/> as estree.BlockStatement
+																				}
+																			/> as estree.FunctionExpression
 																		}
-																		reference={
-																			(
-																				<identifier
-																					name={`StoryObj<typeof ${identifier.name}>`}
-																				/>
-																			) as estree.Identifier
-																		}
-																	/>
-																) as estree.Expression
-															}
-														/>
-													) as estree.VariableDeclarator,
-												]}
-											/>
-										) as estree.VariableDeclaration
-									}
-								/>
-							) as estree.ExportNamedDeclaration,
-					  ]),
-				(
-					<export-default-declaration
-						declaration={(<identifier name='meta' />) as estree.Identifier}
-					/>
-				) as estree.ExportDefaultDeclaration,
+																		method
+																		kind={'init' as const}
+																	/> as estree.Property,
+																	<property
+																		key={<identifier name='parameters' /> as estree.Identifier}
+																		value={parameters}
+																		kind={'init' as const}
+																	/> as estree.Property,
+																]}
+															/> as estree.ObjectExpression
+														}
+														reference={<identifier name={`StoryObj<typeof ${identifier.name}>`} /> as estree.Identifier}
+													/> as estree.Expression
+												}
+											/> as estree.VariableDeclarator,
+										]}
+									/> as estree.VariableDeclaration
+								}
+							/> as estree.ExportNamedDeclaration,
+						]),
+				<export-default-declaration
+					declaration={(<identifier name='meta' />) as estree.Identifier}
+				/> as estree.ExportDefaultDeclaration,
 			]}
 		/>
 	) as estree.Program;

From 8a0201fe9c17be0a2402d1f4f1b99cf056e2303c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Mon, 3 Apr 2023 20:14:19 +0900
Subject: [PATCH 91/99] add notes

---
 packages/backend/src/core/NotificationService.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index 48f2c65847..b984f3c77b 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -96,6 +96,7 @@ export class NotificationService implements OnApplicationShutdown {
 
 		const profile = await this.userProfilesRepository.findOneBy({ userId: notifieeId });
 
+		// TODO: Cache
 		const isMuted = profile?.mutingNotificationTypes.includes(type);
 
 		// Create notification
@@ -122,6 +123,7 @@ export class NotificationService implements OnApplicationShutdown {
 			if (fresh.isRead) return;
 
 			//#region ただしミュートしているユーザーからの通知なら無視
+			// TODO: Cache
 			const mutings = await this.mutingsRepository.findBy({
 				muterId: notifieeId,
 			});

From b91d831e820813a8ed5afd05f8402957b5bc50c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 3 Apr 2023 20:55:24 +0900
Subject: [PATCH 92/99] style: note about `TSSatisfiesExpression`

---
 packages/frontend/src/pages/user/activity.following.vue | 3 +++
 packages/frontend/src/pages/user/activity.heatmap.vue   | 3 +++
 packages/frontend/src/pages/user/activity.notes.vue     | 3 +++
 packages/frontend/src/pages/user/activity.pv.vue        | 3 +++
 packages/frontend/src/scripts/achievements.ts           | 5 +++--
 5 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/packages/frontend/src/pages/user/activity.following.vue b/packages/frontend/src/pages/user/activity.following.vue
index 25a1edaca9..1c7c991aac 100644
--- a/packages/frontend/src/pages/user/activity.following.vue
+++ b/packages/frontend/src/pages/user/activity.following.vue
@@ -77,6 +77,9 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
 		}, extra);
 	}
 
diff --git a/packages/frontend/src/pages/user/activity.heatmap.vue b/packages/frontend/src/pages/user/activity.heatmap.vue
index 2dcb754c9b..ada0166eda 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.vue
+++ b/packages/frontend/src/pages/user/activity.heatmap.vue
@@ -113,6 +113,9 @@ async function renderChart() {
 					const a = c.chart.chartArea ?? {};
 					return (a.bottom - a.top) / 7 - marginEachCell;
 				},
+			/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+			}] satisfies ChartData[],
+			 */
 			}],
 		},
 		options: {
diff --git a/packages/frontend/src/pages/user/activity.notes.vue b/packages/frontend/src/pages/user/activity.notes.vue
index 63e1c76e03..8a946aebac 100644
--- a/packages/frontend/src/pages/user/activity.notes.vue
+++ b/packages/frontend/src/pages/user/activity.notes.vue
@@ -76,6 +76,9 @@ async function renderChart() {
 			borderRadius: 4,
 			barPercentage: 0.9,
 			fill: true,
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
 		}, extra);
 	}
 
diff --git a/packages/frontend/src/pages/user/activity.pv.vue b/packages/frontend/src/pages/user/activity.pv.vue
index 1be495f410..0e9c581e1e 100644
--- a/packages/frontend/src/pages/user/activity.pv.vue
+++ b/packages/frontend/src/pages/user/activity.pv.vue
@@ -77,6 +77,9 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
 		}, extra);
 	}
 
diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index c93e968594..25e8b71a12 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -443,13 +443,14 @@ export const ACHIEVEMENT_BADGES = {
 		bg: 'linear-gradient(0deg, rgb(144, 224, 255), rgb(255, 168, 252))',
 		frame: 'bronze',
 	},
-/*
+/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
 } as const satisfies Record<typeof ACHIEVEMENT_TYPES[number], {
 	img: string;
 	bg: string | null;
 	frame: 'bronze' | 'silver' | 'gold' | 'platinum';
 }>;
- */ } as const;
+ */
+} as const;
 
 export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 

From 38d0b6216715feb3c3d8e78d9256b5f63ccf5500 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 4 Apr 2023 09:38:34 +0900
Subject: [PATCH 93/99] build(#10336): Storybook & Chromatic & msw (#10365)

* build(#10336): init

* fix(#10336): invalid name conversion

* build(#10336): load locales and vite config

* refactor(#10336): remove unused imports

* build(#10336): separate definitions and generated codes

* refactor(#10336): remove hatches

* refactor(#10336): module semantics

* refactor(#10336): remove unused common preferences

* fix: typo

* build(#10336): mock assets

* build(#10336): impl `SatisfiesExpression`

* build(#10336): control themes

* refactor(#10336): semantics

* build(#10336): make .storybook as an individual TypeScript project

* style(#10336): use single quote

* build(#10336): avoid intrinsic component names

* chore: suppress linter

* style: typing

* build(#10336): update dependencies

* docs: note about Storybook

* build(#10336): sync

* build(#10336): full reload server on change

* chore: use defaultStore instead

* build(#10336): show popups on Story

* refactor(#10336): remove redundant div

* docs: fix

* build(#10336): interactions

* build(#10336): add an interaction test for `<MkA/>`

* build(#10336): bump storybook

* docs(#10336): mention to pre-build misskey-js

* build(#10336): write stories for `MkAcct`

* build(#10336): write stories for `MkAd`

* build(#10336): fix missing type definition

* build(#10336): use `toHaveTextContent`

* build(#10336): write some stories

* build(#10336): hide internal args

* build(#10336): generate `components/global` stories only

* build(#10336): write stories for `MkMisskeyFlavoredMarkdown`

* fix: conflict errors

* build(#10336): subcomponents on sidebar

* refactor: restore `SatisfiesExpression`

* docs(#10336): note development status

* build(#10336): use chokidar-cli

* docs(#10336): note chokidar-cli mode

* chore(#10336): untrack generated stories files

* fix: pointer handling

* build(#10336): finalize

* chore: add static option to `MkLoading`

* refactor(#10336): bind to local args

* fix: missing case

* revert: restore `SatisfiesExpression`

This reverts commit f246699f38a28befbfccc11e9eade22cbaace4f3.

* build(#10336): make storybook buildable

* build(#10336): staticify assets

* build(#10336): staticified directory structure

* build(#10336): normalize path for Windows

* ci(#10336): create actions

* build(#10336): ignore tsc errors

* build(#10336): ignore tsc errors

* build(#10336): missing dependencies

* build(#10336): missing dependencies

* build(#10336): use fast-glob

* fix: invalid lockfile

* ci(#10336): increase heap size

* build(#10336): use unpkg for storybook tabler icons

* build(#10336): use unpkg for storybook twemojis

* build(#10336): disable `ProfilePageCat`

* build(#10336): blur `MkA` before interaction ends

* ci(#10336): stabilize

* ci(#10336): fetch-depth

* build(#10336): isChromatic

* ci(#10336): notify on changes

* ci(#10336): fix typo

* ci(#10336): missing working directory

* ci(#10336): skip build

* ci(#10336): fix path

* build(#10336): fails on Windows

* build(#10336): available on Windows

* ci(#10336): disable animation on chromatic

* ci(#10336): add static option to `PageHeader.tabs`

* chore: void

* ci(#10336): change parameters

* docs(#10336): update CONTRIBUTING

* docs(#10336): note about meta overriding and etc.

* ci(#10336): use Chromatic for checks

* ci(#10336): use `pull_request` instead of `pull_request_target` for now

* ci(#10336): use `exitOnceUploaded`

* ci(#10336): reuse built storybook

* ci(#10336): back to `pull_request_target`

* chore: unused dependencies

* style(#10336): reduce prettier indents

* style: note about `TSSatisfiesExpression`
---
 .github/workflows/storybook.yml               |   56 +
 .gitignore                                    |    1 +
 CONTRIBUTING.md                               |  110 +
 packages/frontend/.gitignore                  |    1 +
 packages/frontend/.storybook/.gitignore       |    9 +
 packages/frontend/.storybook/fakes.ts         |   54 +
 packages/frontend/.storybook/generate.tsx     |  406 ++
 packages/frontend/.storybook/main.ts          |   35 +
 packages/frontend/.storybook/manager.ts       |   12 +
 packages/frontend/.storybook/mocks.ts         |   16 +
 .../frontend/.storybook/preload-locale.ts     |    9 +
 packages/frontend/.storybook/preload-theme.ts |   39 +
 .../frontend/.storybook/preview-head.html     |    4 +
 packages/frontend/.storybook/preview.ts       |  113 +
 packages/frontend/.storybook/tsconfig.json    |   22 +
 packages/frontend/package.json                |   34 +
 packages/frontend/public/mockServiceWorker.js |  303 +
 .../components/MkAnalogClock.stories.impl.ts  |   28 +
 .../src/components/MkButton.stories.impl.ts   |   30 +
 .../src/components/MkCaptcha.stories.impl.ts  |    2 +
 .../frontend/src/components/MkContextMenu.vue |    2 +-
 packages/frontend/src/components/MkMenu.vue   |   20 +-
 .../frontend/src/components/MkUrlPreview.vue  |    2 +-
 ...kYoutubePlayer.vue => MkYouTubePlayer.vue} |    0
 .../src/components/global/MkA.stories.impl.ts |   47 +
 .../components/global/MkAcct.stories.impl.ts  |   43 +
 .../frontend/src/components/global/MkAcct.vue |    1 -
 .../components/global/MkAd.stories.impl.ts    |  120 +
 .../frontend/src/components/global/MkAd.vue   |    2 +-
 .../global/MkAvatar.stories.impl.ts           |   66 +
 .../src/components/global/MkAvatar.vue        |    1 +
 .../global/MkCustomEmoji.stories.impl.ts      |   45 +
 .../global/MkEllipsis.stories.impl.ts         |   32 +
 .../src/components/global/MkEllipsis.vue      |   16 +-
 .../components/global/MkEmoji.stories.impl.ts |   31 +
 .../components/global/MkError.stories.meta.ts |    5 +
 .../global/MkLoading.stories.impl.ts          |   60 +
 .../src/components/global/MkLoading.vue       |    8 +-
 .../MkMisskeyFlavoredMarkdown.stories.impl.ts |   74 +
 .../global/MkPageHeader.stories.impl.ts       |   98 +
 .../global/MkPageHeader.tabs.stories.impl.ts  |    3 +
 .../components/global/MkPageHeader.tabs.vue   |   18 +-
 .../global/MkStickyContainer.stories.impl.ts  |    3 +
 .../components/global/MkTime.stories.impl.ts  |  312 +
 .../frontend/src/components/global/MkTime.vue |    6 +-
 .../components/global/MkUrl.stories.impl.ts   |   77 +
 .../global/MkUserName.stories.impl.ts         |   57 +
 .../global/RouterView.stories.impl.ts         |    3 +
 packages/frontend/src/index.mdx               |   12 +
 .../src/pages/user/activity.following.vue     |    5 +-
 .../src/pages/user/activity.heatmap.vue       |    3 +
 .../src/pages/user/activity.notes.vue         |    5 +-
 .../frontend/src/pages/user/activity.pv.vue   |    5 +-
 packages/frontend/src/scripts/achievements.ts |    3 +
 packages/frontend/src/scripts/test-utils.ts   |    6 +
 packages/frontend/tsconfig.json               |    3 +
 packages/frontend/vite.config.ts              |   13 +-
 packages/misskey-js/package.json              |    2 +-
 pnpm-lock.yaml                                | 5580 ++++++++++++++++-
 59 files changed, 7708 insertions(+), 365 deletions(-)
 create mode 100644 .github/workflows/storybook.yml
 create mode 100644 packages/frontend/.gitignore
 create mode 100644 packages/frontend/.storybook/.gitignore
 create mode 100644 packages/frontend/.storybook/fakes.ts
 create mode 100644 packages/frontend/.storybook/generate.tsx
 create mode 100644 packages/frontend/.storybook/main.ts
 create mode 100644 packages/frontend/.storybook/manager.ts
 create mode 100644 packages/frontend/.storybook/mocks.ts
 create mode 100644 packages/frontend/.storybook/preload-locale.ts
 create mode 100644 packages/frontend/.storybook/preload-theme.ts
 create mode 100644 packages/frontend/.storybook/preview-head.html
 create mode 100644 packages/frontend/.storybook/preview.ts
 create mode 100644 packages/frontend/.storybook/tsconfig.json
 create mode 100644 packages/frontend/public/mockServiceWorker.js
 create mode 100644 packages/frontend/src/components/MkAnalogClock.stories.impl.ts
 create mode 100644 packages/frontend/src/components/MkButton.stories.impl.ts
 create mode 100644 packages/frontend/src/components/MkCaptcha.stories.impl.ts
 rename packages/frontend/src/components/{MkYoutubePlayer.vue => MkYouTubePlayer.vue} (100%)
 create mode 100644 packages/frontend/src/components/global/MkA.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkAcct.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkAd.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkAvatar.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkEmoji.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkError.stories.meta.ts
 create mode 100644 packages/frontend/src/components/global/MkLoading.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkTime.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkUrl.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/MkUserName.stories.impl.ts
 create mode 100644 packages/frontend/src/components/global/RouterView.stories.impl.ts
 create mode 100644 packages/frontend/src/index.mdx
 create mode 100644 packages/frontend/src/scripts/test-utils.ts

diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
new file mode 100644
index 0000000000..eda28c5f77
--- /dev/null
+++ b/.github/workflows/storybook.yml
@@ -0,0 +1,56 @@
+name: Storybook
+
+on:
+  push:
+    branches:
+      - master
+      - develop
+  pull_request_target:
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3.3.0
+      with:
+        fetch-depth: 0
+        submodules: true
+    - name: Install pnpm
+      uses: pnpm/action-setup@v2
+      with:
+        version: 7
+        run_install: false
+    - name: Use Node.js 18.x
+      uses: actions/setup-node@v3.6.0
+      with:
+        node-version: 18.x
+        cache: 'pnpm'
+    - run: corepack enable
+    - run: pnpm i --frozen-lockfile
+    - name: Check pnpm-lock.yaml
+      run: git diff --exit-code pnpm-lock.yaml
+    - name: Build misskey-js
+      run: pnpm --filter misskey-js build
+    - name: Build storybook
+      run: pnpm --filter frontend build-storybook
+      env:
+        NODE_OPTIONS: "--max_old_space_size=7168"
+    - name: Publish to Chromatic
+      id: chromatic
+      uses: chromaui/action@v1
+      with:
+        exitOnceUploaded: true
+        projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+        storybookBuildDir: storybook-static
+        workingDir: packages/frontend
+    - name: Compare on Chromatic
+      if: github.event_name == 'pull_request_target'
+      run: pnpm --filter frontend chromatic -d storybook-static --exit-once-uploaded --patch-build ${{ github.head_ref }}...${{ github.base_ref }}
+      env:
+        CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
+    - name: Upload Artifacts
+      uses: actions/upload-artifact@v3
+      with:
+        name: storybook
+        path: packages/frontend/storybook-static
diff --git a/.gitignore b/.gitignore
index 29420311b8..fbe2245502 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,7 @@ api-docs.json
 /files
 ormconfig.json
 temp
+/packages/frontend/src/**/*.stories.ts
 
 # blender backups
 *.blend1
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 887d17961f..fece05d7a9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -203,6 +203,116 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
 vue-routerとの最大の違いは、niraxは複数のルーターが存在することを許可している点です。
 これにより、アプリ内ウィンドウでブラウザとは個別にルーティングすることなどが可能になります。
 
+## Storybook
+
+Misskey uses [Storybook](https://storybook.js.org/) for UI development.
+
+### Setup & Run
+
+#### Universal
+
+##### Setup
+
+```bash
+pnpm --filter misskey-js build
+pnpm --filter frontend tsc -p .storybook && (node packages/frontend/.storybook/preload-locale.js & node packages/frontend/.storybook/preload-theme.js)
+```
+
+##### Run
+
+```bash
+node packages/frontend/.storybook/generate.js && pnpm --filter frontend storybook dev
+```
+
+#### macOS & Linux
+
+##### Setup
+
+```bash
+pnpm --filter misskey-js build
+```
+
+##### Run
+
+```bash
+pnpm --filter frontend storybook-dev
+```
+
+### Usage
+
+When you create a new component (in this example, `MyComponent.vue`), the story file (`MyComponent.stories.ts`) will be automatically generated by the `.storybook/generate.js` script.
+You can override the default story by creating a impl story file (`MyComponent.stories.impl.ts`).
+
+```ts
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MyComponent from './MyComponent.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MyComponent,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MyComponent v-bind="props" />',
+		};
+	},
+	args: {
+		foo: 'bar',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAvatar>;
+```
+
+If you want to opt-out from the automatic generation, create a `MyComponent.stories.impl.ts` file and add the following line to the file.
+
+```ts
+import MyComponent from './MyComponent.vue';
+void MyComponent;
+```
+
+You can override the component meta by creating a meta story file (`MyComponent.stories.meta.ts`).
+
+```ts
+export const argTypes = {
+	scale: {
+		control: {
+			type: 'range',
+			min: 1,
+			max: 4,
+		},
+};
+```
+
+Also, you can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file to define the mock handlers.
+
+```ts
+import { rest } from 'msw';
+export const handlers = [
+	rest.post('/api/notes/timeline', (req, res, ctx) => {
+		return res(
+			ctx.json([]),
+		);
+	}),
+];
+```
+
+Don't forget to re-run the `.storybook/generate.js` script after adding, editing, or removing the above files.
+
 ## Notes
 ### How to resolve conflictions occurred at pnpm-lock.yaml?
 
diff --git a/packages/frontend/.gitignore b/packages/frontend/.gitignore
new file mode 100644
index 0000000000..1aa0ac14e8
--- /dev/null
+++ b/packages/frontend/.gitignore
@@ -0,0 +1 @@
+/storybook-static
diff --git a/packages/frontend/.storybook/.gitignore b/packages/frontend/.storybook/.gitignore
new file mode 100644
index 0000000000..649b36b848
--- /dev/null
+++ b/packages/frontend/.storybook/.gitignore
@@ -0,0 +1,9 @@
+# (cd path/to/frontend; pnpm tsc -p .storybook)
+# (cd path/to/frontend; node .storybook/generate.js)
+/generate.js
+# (cd path/to/frontend; node .storybook/preload-locale.js)
+/preload-locale.js
+/locale.ts
+# (cd path/to/frontend; node .storybook/preload-theme.js)
+/preload-theme.js
+/themes.ts
diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts
new file mode 100644
index 0000000000..b620cf68a3
--- /dev/null
+++ b/packages/frontend/.storybook/fakes.ts
@@ -0,0 +1,54 @@
+import type { entities } from 'misskey-js'
+
+export const userDetailed = {
+	id: 'someuserid',
+	username: 'miskist',
+	host: 'misskey-hub.net',
+	name: 'Misskey User',
+	onlineStatus: 'unknown',
+	avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+	avatarBlurhash: 'eQFRshof5NWBRi},juayfPju53WB?0ofs;s*a{ofjuay^SoMEJR%ay',
+	emojis: [],
+	bannerBlurhash: 'eQA^IW^-MH8w9tE8I=S^o{$*R4RikXtSxutRozjEnNR.RQadoyozog',
+	bannerColor: '#000000',
+	bannerUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+	birthday: '2014-06-20',
+	createdAt: '2016-12-28T22:49:51.000Z',
+	description: 'I am a cool user!',
+	ffVisibility: 'public',
+	fields: [
+		{
+			name: 'Website',
+			value: 'https://misskey-hub.net',
+		},
+	],
+	followersCount: 1024,
+	followingCount: 16,
+	hasPendingFollowRequestFromYou: false,
+	hasPendingFollowRequestToYou: false,
+	isAdmin: false,
+	isBlocked: false,
+	isBlocking: false,
+	isBot: false,
+	isCat: false,
+	isFollowed: false,
+	isFollowing: false,
+	isLocked: false,
+	isModerator: false,
+	isMuted: false,
+	isSilenced: false,
+	isSuspended: false,
+	lang: 'en',
+	location: 'Fediverse',
+	notesCount: 65536,
+	pinnedNoteIds: [],
+	pinnedNotes: [],
+	pinnedPage: null,
+	pinnedPageId: null,
+	publicReactions: false,
+	securityKeys: false,
+	twoFactorEnabled: false,
+	updatedAt: null,
+	uri: null,
+	url: null,
+} satisfies entities.UserDetailed
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
new file mode 100644
index 0000000000..f2c87016c8
--- /dev/null
+++ b/packages/frontend/.storybook/generate.tsx
@@ -0,0 +1,406 @@
+import { existsSync, readFileSync } from 'node:fs';
+import { writeFile } from 'node:fs/promises';
+import { basename, dirname } from 'node:path/posix';
+import { GENERATOR, type State, generate } from 'astring';
+import type * as estree from 'estree';
+import glob from 'fast-glob';
+import { format } from 'prettier';
+
+interface SatisfiesExpression extends estree.BaseExpression {
+	type: 'SatisfiesExpression';
+	expression: estree.Expression;
+	reference: estree.Identifier;
+}
+
+const generator = {
+	...GENERATOR,
+	SatisfiesExpression(node: SatisfiesExpression, state: State) {
+		switch (node.expression.type) {
+			case 'ArrowFunctionExpression': {
+				state.write('(');
+				this[node.expression.type](node.expression, state);
+				state.write(')');
+				break;
+			}
+			default: {
+				// @ts-ignore
+				this[node.expression.type](node.expression, state);
+				break;
+			}
+		}
+		state.write(' satisfies ', node as unknown as estree.Expression);
+		this[node.reference.type](node.reference, state);
+	},
+};
+
+type SplitCamel<
+	T extends string,
+	YC extends string = '',
+	YN extends readonly string[] = []
+> = T extends `${infer XH}${infer XR}`
+	? XR extends ''
+		? [...YN, Uncapitalize<`${YC}${XH}`>]
+		: XH extends Uppercase<XH>
+		? SplitCamel<XR, Lowercase<XH>, [...YN, YC]>
+		: SplitCamel<XR, `${YC}${XH}`, YN>
+	: YN;
+
+// @ts-ignore
+type SplitKebab<T extends string> = T extends `${infer XH}-${infer XR}`
+	? [XH, ...SplitKebab<XR>]
+	: [T];
+
+type ToKebab<T extends readonly string[]> = T extends readonly [
+	infer XO extends string
+]
+	? XO
+	: T extends readonly [
+			infer XH extends string,
+			...infer XR extends readonly string[]
+	  ]
+	? `${XH}${XR extends readonly string[] ? `-${ToKebab<XR>}` : ''}`
+	: '';
+
+// @ts-ignore
+type ToPascal<T extends readonly string[]> = T extends readonly [
+	infer XH extends string,
+	...infer XR extends readonly string[]
+]
+	? `${Capitalize<XH>}${ToPascal<XR>}`
+	: '';
+
+function h<T extends estree.Node>(
+	component: T['type'],
+	props: Omit<T, 'type'>
+): T {
+	const type = component.replace(/(?:^|-)([a-z])/g, (_, c) => c.toUpperCase());
+	return Object.assign(props || {}, { type }) as T;
+}
+
+declare global {
+	namespace JSX {
+		type Element = estree.Node;
+		type ElementClass = never;
+		type ElementAttributesProperty = never;
+		type ElementChildrenAttribute = never;
+		type IntrinsicAttributes = never;
+		type IntrinsicClassAttributes<T> = never;
+		type IntrinsicElements = {
+			[T in keyof typeof generator as ToKebab<SplitCamel<Uncapitalize<T>>>]: {
+				[K in keyof Omit<
+					Parameters<(typeof generator)[T]>[0],
+					'type'
+				>]?: Parameters<(typeof generator)[T]>[0][K];
+			};
+		};
+	}
+}
+
+function toStories(component: string): string {
+	const msw = `${component.slice(0, -'.vue'.length)}.msw`;
+	const implStories = `${component.slice(0, -'.vue'.length)}.stories.impl`;
+	const metaStories = `${component.slice(0, -'.vue'.length)}.stories.meta`;
+	const hasMsw = existsSync(`${msw}.ts`);
+	const hasImplStories = existsSync(`${implStories}.ts`);
+	const hasMetaStories = existsSync(`${metaStories}.ts`);
+	const base = basename(component);
+	const dir = dirname(component);
+	const literal =
+		<literal
+			value={component
+				.slice('src/'.length, -'.vue'.length)
+				.replace(/\./g, '/')}
+		/> as estree.Literal;
+	const identifier =
+		<identifier
+			name={base
+				.slice(0, -'.vue'.length)
+				.replace(/[-.]|^(?=\d)/g, '_')
+				.replace(/(?<=^[^A-Z_]*$)/, '_')}
+		/> as estree.Identifier;
+	const parameters = (
+		<object-expression
+			properties={[
+				<property
+					key={<identifier name='layout' /> as estree.Identifier}
+					value={<literal value={`${dir}/`.startsWith('src/pages/') ? 'fullscreen' : 'centered'}/> as estree.Literal}
+					kind={'init' as const}
+				/> as estree.Property,
+				...(hasMsw
+					? [
+							<property
+								key={<identifier name='msw' /> as estree.Identifier}
+								value={<identifier name='msw' /> as estree.Identifier}
+								kind={'init' as const}
+								shorthand
+							/> as estree.Property,
+					  ]
+					: []),
+			]}
+		/>
+	) as estree.ObjectExpression;
+	const program = (
+		<program
+			body={[
+				<import-declaration
+					source={<literal value='@storybook/vue3' /> as estree.Literal}
+					specifiers={[
+						<import-specifier
+							local={<identifier name='Meta' /> as estree.Identifier}
+							imported={<identifier name='Meta' /> as estree.Identifier}
+						/> as estree.ImportSpecifier,
+						...(hasImplStories
+							? []
+							: [
+									<import-specifier
+										local={<identifier name='StoryObj' /> as estree.Identifier}
+										imported={<identifier name='StoryObj' /> as estree.Identifier}
+									/> as estree.ImportSpecifier,
+								]),
+					]}
+				/> as estree.ImportDeclaration,
+				...(hasMsw
+					? [
+							<import-declaration
+								source={<literal value={`./${basename(msw)}`} /> as estree.Literal}
+								specifiers={[
+									<import-namespace-specifier
+										local={<identifier name='msw' /> as estree.Identifier}
+									/> as estree.ImportNamespaceSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
+					  ]
+					: []),
+				...(hasImplStories
+					? []
+					: [
+							<import-declaration
+								source={<literal value={`./${base}`} /> as estree.Literal}
+								specifiers={[
+									<import-default-specifier local={identifier} /> as estree.ImportDefaultSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
+					  ]),
+				...(hasMetaStories
+					? [
+							<import-declaration
+								source={<literal value={`./${basename(metaStories)}`} /> as estree.Literal}
+								specifiers={[
+									<import-namespace-specifier
+										local={<identifier name='storiesMeta' /> as estree.Identifier}
+									/> as estree.ImportNamespaceSpecifier,
+								]}
+							/> as estree.ImportDeclaration,
+						]
+					: []),
+				<variable-declaration
+					kind={'const' as const}
+					declarations={[
+						<variable-declarator
+							id={<identifier name='meta' /> as estree.Identifier}
+							init={
+								<satisfies-expression
+									expression={
+										<object-expression
+											properties={[
+												<property
+													key={<identifier name='title' /> as estree.Identifier}
+													value={literal}
+													kind={'init' as const}
+												/> as estree.Property,
+												<property
+													key={<identifier name='component' /> as estree.Identifier}
+													value={identifier}
+													kind={'init' as const}
+												/> as estree.Property,
+												...(hasMetaStories
+													? [
+															<spread-element
+																argument={<identifier name='storiesMeta' /> as estree.Identifier}
+															/> as estree.SpreadElement,
+														]
+													: [])
+											]}
+										/> as estree.ObjectExpression
+									}
+									reference={<identifier name={`Meta<typeof ${identifier.name}>`} /> as estree.Identifier}
+								/> as estree.Expression
+							}
+						/> as estree.VariableDeclarator,
+					]}
+				/> as estree.VariableDeclaration,
+				...(hasImplStories
+					? []
+					: [
+							<export-named-declaration
+								declaration={
+									<variable-declaration
+										kind={'const' as const}
+										declarations={[
+											<variable-declarator
+												id={<identifier name='Default' /> as estree.Identifier}
+												init={
+													<satisfies-expression
+														expression={
+															<object-expression
+																properties={[
+																	<property
+																		key={<identifier name='render' /> as estree.Identifier}
+																		value={
+																			<function-expression
+																				params={[
+																					<identifier name='args' /> as estree.Identifier,
+																				]}
+																				body={
+																					<block-statement
+																						body={[
+																							<return-statement
+																								argument={
+																									<object-expression
+																										properties={[
+																											<property
+																												key={<identifier name='components' /> as estree.Identifier}
+																												value={
+																													<object-expression
+																														properties={[
+																															<property key={identifier} value={identifier} kind={'init' as const} shorthand /> as estree.Property,
+																														]}
+																													/> as estree.ObjectExpression
+																												}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='setup' /> as estree.Identifier}
+																												value={
+																													<function-expression
+																														params={[]}
+																														body={
+																															<block-statement
+																																body={[
+																																	<return-statement
+																																		argument={
+																																			<object-expression
+																																				properties={[
+																																					<property
+																																						key={<identifier name='args' /> as estree.Identifier}
+																																						value={<identifier name='args' /> as estree.Identifier}
+																																						kind={'init' as const}
+																																						shorthand
+																																					/> as estree.Property,
+																																				]}
+																																			/> as estree.ObjectExpression
+																																		}
+																																	/> as estree.ReturnStatement,
+																																]}
+																															/> as estree.BlockStatement
+																														}
+																													/> as estree.FunctionExpression
+																												}
+																												method
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='computed' /> as estree.Identifier}
+																												value={
+																													<object-expression
+																														properties={[
+																															<property
+																																key={<identifier name='props' /> as estree.Identifier}
+																																value={
+																																	<function-expression
+																																		params={[]}
+																																		body={
+																																			<block-statement
+																																				body={[
+																																					<return-statement
+																																						argument={
+																																							<object-expression
+																																								properties={[
+																																									<spread-element
+																																										argument={
+																																											<member-expression
+																																												object={<this-expression /> as estree.ThisExpression}
+																																												property={<identifier name='args' /> as estree.Identifier}
+																																											/> as estree.MemberExpression
+																																										}
+																																									/> as estree.SpreadElement,
+																																								]}
+																																							/> as estree.ObjectExpression
+																																						}
+																																					/> as estree.ReturnStatement,
+																																				]}
+																																			/> as estree.BlockStatement
+																																		}
+																																	/> as estree.FunctionExpression
+																																}
+																																method
+																																kind={'init' as const}
+																															/> as estree.Property,
+																														]}
+																													/> as estree.ObjectExpression
+																												}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																											<property
+																												key={<identifier name='template' /> as estree.Identifier}
+																												value={<literal value={`<${identifier.name} v-bind="props" />`} /> as estree.Literal}
+																												kind={'init' as const}
+																											/> as estree.Property,
+																										]}
+																									/> as estree.ObjectExpression
+																								}
+																							/> as estree.ReturnStatement,
+																						]}
+																					/> as estree.BlockStatement
+																				}
+																			/> as estree.FunctionExpression
+																		}
+																		method
+																		kind={'init' as const}
+																	/> as estree.Property,
+																	<property
+																		key={<identifier name='parameters' /> as estree.Identifier}
+																		value={parameters}
+																		kind={'init' as const}
+																	/> as estree.Property,
+																]}
+															/> as estree.ObjectExpression
+														}
+														reference={<identifier name={`StoryObj<typeof ${identifier.name}>`} /> as estree.Identifier}
+													/> as estree.Expression
+												}
+											/> as estree.VariableDeclarator,
+										]}
+									/> as estree.VariableDeclaration
+								}
+							/> as estree.ExportNamedDeclaration,
+						]),
+				<export-default-declaration
+					declaration={(<identifier name='meta' />) as estree.Identifier}
+				/> as estree.ExportDefaultDeclaration,
+			]}
+		/>
+	) as estree.Program;
+	return format(
+		'/* eslint-disable @typescript-eslint/explicit-function-return-type */\n' +
+			'/* eslint-disable import/no-default-export */\n' +
+			generate(program, { generator }) +
+			(hasImplStories ? readFileSync(`${implStories}.ts`, 'utf-8') : ''),
+		{
+			parser: 'babel-ts',
+			singleQuote: true,
+			useTabs: true,
+		}
+	);
+}
+
+// promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
+glob('src/components/global/**/*.vue').then(
+	(components) =>
+		Promise.all(
+			components.map((component) => {
+				const stories = component.replace(/\.vue$/, '.stories.ts');
+				return writeFile(stories, toStories(component));
+			})
+		)
+);
diff --git a/packages/frontend/.storybook/main.ts b/packages/frontend/.storybook/main.ts
new file mode 100644
index 0000000000..1e57c97b67
--- /dev/null
+++ b/packages/frontend/.storybook/main.ts
@@ -0,0 +1,35 @@
+import { resolve } from 'node:path';
+import type { StorybookConfig } from '@storybook/vue3-vite';
+import { mergeConfig } from 'vite';
+const config = {
+	stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
+	addons: [
+		'@storybook/addon-essentials',
+		'@storybook/addon-interactions',
+		'@storybook/addon-links',
+		'@storybook/addon-storysource',
+		resolve(__dirname, '../node_modules/storybook-addon-misskey-theme'),
+	],
+	framework: {
+		name: '@storybook/vue3-vite',
+		options: {},
+	},
+	docs: {
+		autodocs: 'tag',
+	},
+	core: {
+		disableTelemetry: true,
+	},
+	async viteFinal(config, options) {
+		return mergeConfig(config, {
+			build: {
+				target: [
+					'chrome108',
+					'firefox109',
+					'safari16',
+				],
+			},
+		});
+	},
+} satisfies StorybookConfig;
+export default config;
diff --git a/packages/frontend/.storybook/manager.ts b/packages/frontend/.storybook/manager.ts
new file mode 100644
index 0000000000..5653deee84
--- /dev/null
+++ b/packages/frontend/.storybook/manager.ts
@@ -0,0 +1,12 @@
+import { addons } from '@storybook/manager-api';
+import { create } from '@storybook/theming/create';
+
+addons.setConfig({
+	theme: create({
+		base: 'dark',
+		brandTitle: 'Misskey Storybook',
+		brandUrl: 'https://misskey-hub.net',
+		brandImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAABgCAYAAAEobTsDAAAACXBIWXMAACxKAAAsSgF3enRNAAA4fklEQVR42uydaZBU1RXHX/frjWkG2ZR9HXDYkaCAEI0awSX5lA/G0i/5lLXKUoEwgAYjoIPgCMNioUAYUEipJKYs1mFREWXpASpEU1gMZaosNRY1KUsQFPDknMw7cOs/78573TSmwXerfvX63X057/S9r8+97RCRE9FMyVYs6oxS6gx2CSZu3Ltyz8QkrFQbUSwcs+FLD42npYd+QF4HJBfsSpIwb/d4enbvbeIfU4gdfg5RYH3Yimne33zzzY1YXmtpzp49O7EYnZFYtH8ILTlYyfSlp+qz9PT2LFWtT0hg6r5pgx/XynjSQ3I10UprxfEe/c2wL774oqN3m9Myzp8//wKWgXkY6ShE+aZrUn/fzlh9tIwW7etBixs6M+X02F8yNH29QzV7xghm410vo4Ty7bffbvf8XA0XP71XP72in9lYLYNJsGT8WvwgrXTUr4z4rnLmzJlJmDfeSxzs3BadseJIioTaXBsmTjNedmjGOoelpILmbqsgiaOV9DJJMim5CuqHiP+ePXuu03C9wueEYHbyxx9/fL3kr2ga6SCNB/mkWFLuVj9vMJJYlsTRthidHzM7w11+0CVBe3Lm+ubOmPW39jTr9fak/kbG6dOnT8/Uz0eOHBnM14wgfuovnDt37jW990vrkTI7eePGjV0ljuan8Xw+Z7jjbparpNE6aNiXX375O/O+qanpHu3cFp2hsGvDJIz7jJcowZQxcR0NrYwW7KUta4U2JupP7Ay/jHaKmT+mhTRB5WYVqIe2LXnhMc1Lu9s7QwvQwtt6ZE00vK6urgd5Tv3NzgAy2BHr16/vjg1uhbaKpazCO0MfE8voWSpmqThWUKVCsUtHWR5kFewIlIySnQBF0/GoM0pzOh7r0ieeNQMrRjqD5dq1X7aDhJdqI4reGUsP3cLrkjE8FR9xXu51XdJrUKxbDa9Lnn57HIm/z7S60Vg/OAFQHsoay2kKKkPTXHJnLNo3kqfgQ7kzKnjG2Y5kXSL0GRrv++iqsX+Vr1SoJK4XdJEkrhHWAtV6r1frOsW+/pEpeBXUwbr2wDBbOt/OkHUJwx3SlelAszZ2oGkvOdSzMlYp65Jn3xlDUMmEonN+nv6+KlfBb93gc98IU2LFFTRvLU/j4hrGrwwemOmWcjGPWIu1ia5Lat7Jnq/NJWnqKodkOt6jMj5I1yZaOK5L9N6Pr7766n5zTSLrDQ07ceLEWCN9wkTzV8w8zDiCLhI1XlCdNA8yp+LmdNxYl6SZRNVLzinpjFTGaSfrEgEWaSnbOgGuaduVG3Fc73ExZjQs09raRNciWLauV9DPLE8lxnehxpQZ93G593otyyRh9gnrEibPdQmL8k7LrLBl/oouvLBMOzgLxrIS2hmXOhXP4FTctjYxK0ee40Y9DtPkwHWJOImf79rE0iHaGW5enSHoY4IdUtDaxL5wSlmkowjrkpaLNFMySnYCFBEtTSIiwYi4UvD9Dp27ZczBpYd+xEvYCcw4ncQ7SocuTueaN+OkcHhi4f4fn15y8G5e5d1Ftz/Y+2fWn7osrtjvB8ysLwf6Ux+1dI1Xw7sOvwYnWBhYIG5kbuCBHs4Mpqlru2/lsNS8HRlC+gyN9ete2WbErPqRNGvbSH2FH0NInP0nyXoVkCsBW1tUWIpVjj5Mxax7wYKx5lhbEmreHUCLG/qxYPTma3fmOvrjpnY0Z1szj6xyaMoah3oOig2s3X8bKb+sGb4SKhMXjM50/ZAwfnczz4yP74/0d2h5beIXbn623YeNwwveTsY94tJF13T06NHO0B6skxLDMqUcWx0MwYhj3U+dOnWTcd8U0H51ORDuar0PFIxVH2ToAu9naNGBTiwU1zBZqs2lGZemskDMWO/QdKYnv/p55s1hJMzb1YzZOebA21636BsS+TlZP9uchGMc7sBnxE8x4/JPzGP0M4L5obCiH6RPIma5CtobmO/fWMAbsG0mJ0+evAv8Q/eNJR9XAeGJKVbBePFwkgzEs/yhFxNv1OYcks9Va5vfBerP8z0q3UGzN3Uj4cmNzRhrYtdnsFKIhpn3X3/99QyM99lnn42TKz8tv7XlYcsP49vjtLRfMIG0aQTLYkOQ34BlTFLD2Cxhh372e4UnpgJooqCmDJrGjGurg9hfmG2B8XBROHwnVfwmfMTzB2IkzN8e+5ckRJOFx1gghJkvO+KRmfgL95GZr6ZIcBNOW3zCjA5FJ1piheQBtOGGPkjg8I0XOk0v71X1XpFyNB4L3cpPP/30J5onvCNNCzaB0nB5t2qrA2IL88tjw4YN3aCdodpvvlqFuBmxmfGzgZF+Mt7yxS/LCy6cU5hvBwWUcBQEBd7WhaEsCGJ37NixCWY6MAvBt4FCOgCoO5CnXU3INmbDgu3Ctql2VMEQLqdgKHHUGH6mJyYBgtEWCOiQcPY7SoBgpACbYCNl+RBS6LPh+8UuFOEE4/JrDRQOJQ1YhKQoZJV8BQLnF0qQkF9Wwv9Sh23CdiUEFYrot5KI6JV4RCQYEZFgRESCEREJRkQJCwa7+IBRZSP56trCr+vllKnBtOfnDhzd8UYJK9XGRhQsGLrN+XZq3lIwnsraxTugUJi2GFVr4rvYL7m4YRLHv5tqc5PITzjAUv27sGEQN+1y2mPY7EquSnuMPkOS3dVAR20yZOBVKBbsTJ7XfScK+2cXvHsr1ey7nebvuYU0vmDbK4/+GFYkwXCKSYg659TvUttillMSgtF3WLqCNx/JwQiyAYkZylRKTVMPPZ/a5GOoI2FtHt86nJ6ov4Fmbh56RrQOdiTYISDaActL1TAnbFvEX2woilxOrJgUpjGGpSpeONKDag8ME8stZiDTbKwzd5tsyrrInC1l7FdGIjTpMre8dv9dH6L1VtCBEhZDk5hgU9N6mERr4Xgv5yeQ4dDSSgfUL08ABSBuQ8uxDDa2ETer1Qd8VTViezBPdBimG9rCaYzh8Qq14Ko9UEFygsjihp5MV6Yzzd560YJrSp1Dk1c7JMJgWHDJfcLSmVbrLbFG8rE4atJ7DQ9r+WSzxML4WJ4ONsZBdM8XGt4oKOyKDqjdCs1+j2VjPGyLaeGFgsU2Hfeh4AcKhu5YrN3XmWpz/zPpYzoy19DC/Vl6YnMHmrK62Xpr2tpm4x3ZyajwfVoLs5+60hJTcGzWVNKgICHD9DrBDRknbjera2nJpYMvDuwbrCfEsLYboAMcrh3BfipwGo5xVEPYjuZRWhEMt8I07at5txMLRwc5asc7ZSZJj650qEpOmvmzI1tcJfN2hmmf3GdQKEAwkog8dRKuZmhB5mtBJnGmX1izPikXj+nJx7RPT8yRATfzlbraBtVunmive1DfBJkXKiD0McUyx3ArdFuvwlpCbT154GPnTNM++SyCIdt9jS2/GdseZb+fsMFWMglmaIGYal398LMMmt7b4ki5NntLICnmelJ3RC3HUFgkHWgUBrY8e2779u1d8jU3xHCMg+1AwQg07esz1K3ws/mU86imvhTfJp9nrGspGKbNJwoGSG0KkY7AML+4x48fr0RbSUxj+ywuIL4Khg6CVUAhbdoEy7LvO29ptwrpwf7Tam6YDlMHFDDUIoGCkS6LZWXfu/J8zj2pg+td0zNbCka5ntclSBzUFtoxOri6V138VN1C48TvP2g3aX6W9Gh/aabH/LxzvbDzMnqvxrQWA1oFhS2tdfr888/vNfPBc8iwTn55eF8pG8x7PUtMkX7RuiveHOKgn32p2R+opdFIxyoYkkiMgBVZcUC4O3Wl8281Br62V6xSCp/5mhgCNyOForbQioQ1nvUzdjX3/H/00UfjMdzvgDYTMhzaYUL6tCBC3JoxMIHztM4DUC4Ickv/1gyepc1+YSoc6uRerbdEQDRukKFzaAsu8WRSXiEZy+vthFZCzxDwCst6VzesMXCwQXB48jWFI3ZhzOFQKMLbfOLABNereHai9nah5vjeWonLqSTEzsxTnqrvykpcvx4iK/ECBaOYVuKYB/m4AIvqSxYMKCvwyS+QtkgpC0a0fSDaPtC6YFi0hlVzFP/rxC4cIbVFykK62AJS/C0RwUKBc4xoX0m0ryTaVxIRERHZAkdEREQKIyIiolQp2YpFRERECiMiIuIK5tI2YhVlM5c9ztWy0y8i4mohnwc8Ub1j3D+WHb6Dlh66jbmV+SF17ZfsFmZvu8Tp1t/ptfCtGJnMft05rMfEeiT5mPrzSw/dQ8sO30tynVw3bg37uwUojzuZHNldPbNc4pXqAPkwmmlilpdo/fKlP1PN5GBcppVofb/XOGEedCZlKAlmPHMzM5a5iRmtlrJxv/SxmJN69s0EtYb+Ri1/I8//bUG1uYnMJFp0YCI9t/8O4m30Z82DOGxYNnU2MfWIuX0MN4CW6oBBVV8p0TpaMTYQo2vUcbnCzpXob1bzaifMALt9h8uRCBNQSTCjmJHef5nI1sSBn+iWAY/k7DdSn8zfmaYg5L9OOH72yR2j6am3xlL12zdT9e7xJP/1OnfXGLrvD/2WeXnHUAD9QGELAwqy+kfLo3CEHJfl5DnexVeB4Qhsyehoi/f/apfsa44UBmwdkaMyljTcREsaRjOjWDmMZEYww5ghzCDmemYA05+q1nXcPaUus7d6exlV7wiH/P+xWsbxUJT/dHKXxffP6bH5hnvaPSCKBGcw+QiapAuiQGWjAqPfijk91iIM3kzmFWOmUy9KKyiNbvYPqQDrjbyrzHD9Vsd0XppGLBe+/ZdbHuDij4s9r5wQplzpL509FjQWGDecWx4wPlXm+MCYWsvVesEYW+ssilnj6HL28iqMoamKtY3lpDz33gBeKlTS4oYLSkLP2mF6sX8Phrc2by6nOVvLee97CzgsSw+vcOjhlQxfew9xRWGk+o+8ZujihjsJOKezixDEBRTMfPAGkozBibc2E5H4ODA6OBZBN11O8vMUTzWEVec7c/LJ4xXJ23tgcua3tS0f9Zd0mJfXNzlsf9B44NE12L+FENDP8MBAn17iWEgcwZQV9VOkj4PGXuLZznmypcU8sB7iQPmRhEs88feToaIqDDlap+7DLJms/KCcFu7tS7W5PqaSYLow1zKdmA4c3p6e2NSentzSnmZvbWby6hhNrZOTVppPXfl987/sVcpMYuHeCeQDK6kJpLOMMIIJneLmi7FDeDvkmwujiCQdxAutyOSYHYgD6a1hjZYwy0MbXIbUpZU2vlqAUnYFPR3H5ox/Q3SBOJ65BUcEITFQLEUbCz1qKWwfQLvyjodK2vJlNy/MDBnPT0UuUWG4FX/6ZxvyY8E7XWnR/i6sGFRJdGTaM+2YtkwZh2UYOY0nQZNXsYJY69D0dRf/eVEUh/z7IpdVvmD3KPJj/tuj9MWoazbMJpB45FA+6D8t6l98+ikSEdZ8lQ4KmPFPkW5YWlOE+eTJ/wP386B8JI7Wu4CHxbWQQPDkIp4NvUg+DrZPtlA88remYRRsMcYCj+ASV+i4IVIPjZtnHlifuI2wy+4C32G4FSvfT5ONZawUntvbnmoPtFASTJJxqWpdTA73kxmFKAk5y01AhdGueucgMnl6x0VAYVgE1KowkiFJ6NFZqGx0IPN18k2MDwYfuDNQp4w2d/DgwWtbO4sNHzTwDwTjo7/kWYSHJWEhGZYA5Y/j5SrS70H1K2QsCul3KtAFj729PuEVWPA7o7wVxoq/p6gVJGLHmvcyPNu4oCSYGOOQhE2rY+XAykJP7DL/wldO7urhKYy5W3uTyZwtF1CFkWhNUVg6N+lDCtCDJJ+BmUFSOXHixFjI87Igfz1snkZme3hsD5akt+UN7bTng+cWKoUrKazjfOn3IPToPU0XUqnoLNH+sBc+Fqn/snc+rU0EYRjfNUk3m9RSCmJVsEgQ23pQEfTgP1QQBC+ClyLoB5DSc7EFPXjTi9AiBQ8VpXqIHuo38OTFinjsd8gt4KXrvMJbpi+ZvJvJWLLpE/hRmp1/2Xnn2ZlJ9llCOrN18lNU+k3BrwzRnrJEEQxVOHJuepYaa1vlrAtsKJXY9+Pb7y2+l2IhBaN0hgTj+dcjmc2zzV0UwXAruhaQdsdrAd1LufYAlu9J/0m9Hr1+qseaHcyJ4yKduxwhGPy+FpwVBdl+bmPihq0c9XNuDygyXe0iniM5+yJhRP2JfE66fUwiPUplPHTKIwQyYfTzoAuYY3yUmBCCQZmrb4zhq4vrDw7N8bcYju+tK5fuxo+WPpDl416e0hLlXbTrf7X8pZ794/Nenqyk36QDoI28crCXZq8v9v50wc+El8+iJ09PQh6Tnpz0THXpNU51UuDRXzk1lvU7jok0+kv6f8r80p9UC05FKGwSMrqV7eGBS3R53n+iQWmlV6wLs+cx3akvqB/pr7TI5D6UiM3IH4Qrj7Tc5PooTrT6lLa4BGxE4FrmScFgdMGQsAFwtR5NvNiMf61+jzLDzp3HMQ2GmhQLl2hQ2qv34wUjEjuGbP51vDWSRuNUtjXgq9OXo1uLH+M/i5/ibGEt/l1JojEWC21m0S1QFao5SW1MBz3kIOegZ19aDTNVnjVXm7eUh4PNXB1fNpvNY1o7fNor293JX9ZVjuvKmR/3eadBw+eABy6dBxJXOq6hDyodpS9SDUpnfwbKq+WhNPRZWTyo/o2NjeP5rWr9+03MOBhNOFgwdKQho1VoHKgMmaYs/eOUpUhFoAaqgodnb1BSHyjoKHi18q3fDjTz1OshIL7nP/Wkag9Yj/y1/cXfg9K/v9wzjjyCMdAWfXIqFFowAghFPTC1ftne3r7SwYV/2fzu4h5BYmIfo/+1+pUA9KZfobCvzHIZE0IYAvZjPTR6f+nCoQkGA8H4/4IxqhA0QFzp19fXT7Tb7Vf2epqM9Vut1nyP9aSCgRAMnk2xaJh9kaVQV/x9ZjQPEAzPm5cC7mFUuzHAghEkIHsVjAB7GkGXJAVYKohywsaLr1BAMJSZRr9r6gIsTbyEwyMAg25+FlBAguIbF6GFYmj2MLSlicdMI8i3JgUI1LpO+BlF3q9VQ8z8hoSaRojN6LybnUMjGACAAvlhAAAABAMAAMEAAEAwAAAQDABAkRjYhgEAIBgAgAIzsA0DAEAwAAAFZmAbBgAYAsEwr5jBk9sBOFjkTsg3ek2eKo03LqQzlhlv3KPbVrlxLmocnYoO800undKcvjhx/uTM2CSlgXAAUCDBoEE8NZueXf15O1vZumm4YbiW/WXvzIKjOM4AvDu7O7urAySbw7KEBJIJt4wPQGDHBocAhlRsUqmC4IeEB8AkfsAHGBD3fR8CY05zGhwuGwfCseJGBowk4wBJ4Yp4igJFqOUBqniIw5//X22L5md7ujUWIAFd9ZXXM709PfN3f/3PLDATvuxwogZvVPeP/8LzzaKjXpDJbOlpKcSD+AZNaDfuk+/ehGVn+8ZYWt4HQin+ZCGWGrIVnEsE+biuBsfhnCqQ9Drav5oyFImwt7ivQHLraH8fa4xkEQx7gsvOvoGS6I68hryKdEO6wpTd7cuENJxkMXWXdX7BEQsS4fN77Ko3rDXIKyr9JUqiN7bdJyaLJWW9YfGZnsD+oWHtLQ+4KPQmrDp+KxQTYH1+Wzh7kbJRTJ7cooKnXghDrPoTv3rhSDyrQF6Jy6IA6Yy8DINnZC6VpcFlMWSOtWr+ET+oGLXedwDrhcbt6lKy8PQbMUEUlfYCksci/LzgVHdolBVqQPJyKYyIgkQlWocHZvRREIYq2yMUIllRh4UhZ0aeRx2TyRcQWUWVLLoiXZBOyEvIC8jzUPDr1P7ieYMsm25vWb+ddzgAOrBu0pRI5/NzSn4O80++DgtO94iJYh5+nn3iFWjWLiWT2lMJgsPfLO4Evdk8kTQYdWHApstvE4c6Oqg0camQ3zyuqkdvLwep0BvYnWL4sM6rvgv8fgjDTpBVIC8iHfG2IR/pgLSDjDx/rpAG4svI9ebOPRQEE7B+cpf+jX8/7XAnmHmsAGYd74Z0hRlHu8DUQy/R/lBtCUP3Hf69JylxzTG5xmyfVhpPhFFvhJEwq4jLoj3SFmmN/AyC4aoXG9n439kHQ2AKZRjE6K/bXp1wIB8mRTrCxMjzMGF/B8jvmfYW9QOxeOAMhWHpUA3oJ7igFuNS1+NR1/sneFDCsBB7aXlnWFr2MvIiSuGurAJpg7RCWiJ5SAsYMMaeO7M4CWYdNEZ+XV9ym9dT+g6Ylrm7f2HGajvsTZff2v4AhLFC+u4w3XGofel5SIRub1gd0++WIrMMUm+qV6FrG19j+FT8XCqQKLKVtknHHgZYxDa+qtN+p/Nk+90IY7ZJXHS3kdRfw+NWIFtrIxainrroBUIPc/nxDM4hIsWej9cofTYZo8jQ+yqMojMvwqdnW8Dy77Px7ewdoKi0HSwpq84qkOeQXKQ5kg1LSrNg2r5kmBFJhpnFagq3BWDcDps+C2EEkFCPQTmDF57sdX7c9lcPP/VsOEvOLgwGh0VohGG6qkXFNsUAVBQ2kF0MODGROfzXA0WdKKhLlK2MEacVkyaZm34KNBmDpcd95sHkyK6b+1iAYaGxpxCFsggh6GJPcnA47jAhVVOh1aowVl9oDBsrUmOs+6EBLDrVGqVxd1ZRLYuyLORZWHiqCUzdlwrTD6SiOO7l/TUeGBFn5EafEIa9+Ntf/GdJWU+Q6TW4+UCRYTwwYfBBrR4wpRRAMTC5NHSyoP7R9+m7XEKmwuD7Fe2PlqVhIgwmi4p4G7OAlRoKI8qF7Abqj5G0uARrIRYUV6pH8J+AZVTi4kKhTIb1JarJzobxPlOsuOT4GKW6XE73RRgb/pkCMp+UNYXFp/Mwk8iNyyIHaYaTOxPJQJoijWHusXSURgOYth85cIexW234YK0HPtqArPfA+5956GBJPd7J+kPRt90hESLLMB2YUhDHkGxqgtMqiG/ZKhb78G1bnRSDOar6PguWxZEHIR5rG9/PhKGYRGpR4vaV7A3ixYna101qGoRsRbNM4NdXPlecOL0M4mMR+OrHp/k5KPCyerUQC3cZk+6a0niSrulKvl8XFyYkpUxNZP+ThLH+h2TgLCjB25MzOSiG6qwCeQZpgjRCnkLSYXqkIUzZlwZT91cxZW8D+BAFMWqjB0Z/7oGPN6E01sWEkTzvWNcLi069AonIaZ/aDOv4H7YwVAE1qscnvP67szXCMJYRF4uJMHQZAG/DEB8hpOpQovgqxAE8NjWdrJS68zruY+FeGCRYXT2+IJkdS11H9TyNssT7Kox1F5MgEQtPZqE0MqGotDqrQJ6OyyINaYCkwOS9DWHS3nSYvC8dPliDstiAstjsgbFbqqQxcn1MGKnzjnf614KSzpCIFvmp+QphqAakLAx/TWCB8QmoLbZdiTwpHUTicyszWo3d9o1gk10lS5+LWzeBT4FfBgf1KtAUfEfswESv8sNbg3dFHSEXXR9rJxbq66WCZSpGbXJhmvTXRCokSCYMJa6EsfYfYUjEiu+TURpNURp3ZRVIQyQVSUaZhJEgEoBRm7wkh5gkxmyJC2PzHWHMOdqxct7xFyARzfOTSRiBhyMM88HBBzMPHEvDyy5evNioNoRBK3J9FAaH4sWyDx5Hn2l/MR1/jq22li4W91sYdNvhJjY89nVaGJ/9PQQqFn6TDotOP41CuCurQJJwWwixET/MiFjw0Vq6BYnL4ot7hTH7UPvKOUfag8zsw1U075D0PAlDJwoHYQRM4MJgIjEuqjbKy8sb8/3yAKHV1ERmN2/e7K2WnLkU6ZiadtxNFr0gAjp49iHiI0MrNuuDsURJEO5jYX7dKVbgsuhizzGJCQlHJRWNOMyEseZCEJyYfyINf25tiGK4J6tAfJiBWNXPLcbQrYhCGDOLW1XOOtQaZGYerCKnffiREIZpKk4T4XEXRlwa26UUfaziXFiqbn4bYB4L98IQ2aZJ4cetl8JYfc4GJ5aXB68vOJmCYqjOKoQsEC+MWOH996j1KAvMLgo3I1vibMZtn6NI1lUJY/r+3MoZkTyQmX4gBgojJIShS339BBtkAY7q5bQomDmq77JJFqgtrl271oWOlWDAlPG60tPvPmw7W4kVaM6Ft+NudVULAgfr8JKSkiZ0zU2R+npJcS5R3g9aKDR9cxELdd+oiHHEoVjx2Jihjz1HFxONMLTiMBPG32xwollrK6/g7cDgRaeD4hYEsRAPvDbQGtK0hTd39EbMKIQsFMKYuje7cvr+bJCZtq+KnHbB+ywM/cTj+2of8z7wQUMDuq4Lg08uU0Aqqkku9l+9erWlSd/cxMKtMKh/j5UwVp0NgBPZbawcmvAtOlpdFp/x/YhZBWYbnv+1KvD2oO0ZeVb2WBRDoUYYk3dnVE79awbITNlTRXZbWycMP6EQhunAjEoPyQ7y/XJ6bNIeBTZRG5hS/s7pe5cuXWoljsPbUG2nNsU++r6uX6rzVE8Qvdg02EJqrP9BJ/bs2fOMqq8yTIDqyWUeiyCBzzlai7ai0eibvH/sGgQ5vH98PPL64pj450y68u2sH7YbgfFnKnzB/anC8CL2yu/84ABOZisL64XiJAnEtoznrEyRXTgJY+LXjSon724MMpP+EgOPEch3LwxzWTgJobi4uKlpuzS4RV31NjXmwtBPdkW9ByoMfv2omAhDjsuVK1cKVOck30rSMwllv8xjERTUljAUxwuq2rx161ZhvRTG8jLfjyvKfaCC5MAekPHPSU7CGLnO81+skzJ+Z9qlibvSIMZXd9Osja8VE4bq4RpPuS+pAkQXXqx6cqFVTTWAsf51US++CoQ4N27c+JP0IK5cbMd0ua/Ur+u0TTdJxDaTwYsSGaQbwGIfE0ZINwFMbxU4GjFHpfZDHIqdqj+G57ZK3s9jb9IPOd58H8H6F1Jx7ty5Njz2pu3xfTSO5O2a+NkM/kzFT3BhCNwII9B7sDV8eakFKvi/VcH+VqkPCRVu8sC4zQyUxVjcXtDPO4Sk8qvh9szxXyZDjJ13I6RkLAxXRT8oeVAp+LQSUBBJFPT/TkFn+ylTmUuDl8Cn6avZgN+uEwaHtcGL+LMAf3xYwuDHkMVKfSFM48JJIBhbl73wWFAcCX4dMYPZwWNJ8Hpy/2mfqq7YrzoejaV6JwxpwoeLSrzRT894gdMkx9tc/NzpJJ3GzbytEwnjw5Wey9Q+EkSSCrfbEGPbHQbPCOwUUtLdirDf8E1LVGQLBoQJPvF5of2iLocmB2gKPpia57QC0YplsprxUl5e3pb6wISRsG98QDJsnsVpCMpwMfDC2g6ZQJkhX8V11CAWYRW8Pr+2Mij6dwz+dux74rY+0XF27NiRwduVxge/bkGGeEbGhGEoDgAwyjKQpH5DvSOXnfbcRmDyTm+pHfY0jHfCZyCdoB3ypL1X5C0vRFEgt1/9jXcEtSs9jbeR5CHzvfvH/NkLyO1ub3vfFXVMnl04rWwaQoaEZWgwUXDEIMVVao0IqA5c6cfJE4c+04ASA6A20A1y6gMfeAKdMBjGwuC3UbR6CwGL6yCvsG6EwRYALZpYGMWSzkF89/Lly/14HS4OcTx2zkmMsAa3cQsQ7oWh/7UkgITYidiIz/A1A754/TB7KOqv7tD/2buflyjCOI7js6NTuzteOpWlFz0YFBQUHiozrfwR0tFTkBkJUYfo1KFAiMgOkVAudMsu3YrqECFJ1qFYLD116tgt8Q8IdHoe2Y3pgXHGx8fledb3wOuyu+58Z+fZzzzPM7PO/+sJK/KVxxpSAiOhK6wdEIUExRop6EuvM6ossmFnWa9GgOh+/gUd6pyH9udVe2FGRYXW/kq6nMBYYKg3GVImNf3N/r2QSwiXQHmdT2CsT375ZQ8nrU55NIx9sYr1EhjxIQSBsTWBYe8/GxXFKYwGhoGgCA0rblZ8/JpUp7jK8qDyupT1pweGDv2gSJ8XMhEMBvdjqEs/QNKDIy0wqgiMOg4MOYZWZ/bFWH5IEuPjO+rzcr2uBkZ87K9OUBIYBIZLgdGUwnQDCePEkORllGHZwHoKcTYEhpwcTDo1a2KIUGNNWRAYBIbRwFAtLS1dED2M2fjwQ/xc++H09PQ++bzLgaGeZZDbWS6XD8h6CQwCQ2HstGp+PRYHhpEGqREYmzrNanrS04HJSOV9zLYX3aAgMAgMAoPAIDCyBkbWoYnuEMWByU+t4NBogEYv4HIwQIzSbRemg6KeT6sSGAQGgUFg6E1+agxNjFwq7kBDDdOZH4Jk/fGZiaFinSimMHJBXdYLtggMAoPAsBuBAQAAIFlbGAAAcJe1hQEAAHdZWxgAAHCXtYUBAAB3WVsYAABwl7WFAQAAd1lbGAAAcJe1hQEAAHdZWxgAAHCXtYUBAAB31eJ+AL6UdL+1Gt2XwFdsqIas22LrTgYAwOkORuwg3JAPc8Xz11qu35/pnJ9a6F0tLfZEUws90ZPv3avjrw997h/dfSnY6QWxA3XOdA078l7Qf9Ebuf3C+zj5yVsRojVz3srdV97XoSve1Xzo5eM1KKqdicajg81d42+6308tDP4pLZ6LKlYezJ4u9422DTcG/r9tobMBANjuTHcsGls7Ch2TX7p+lxZ7I0F2KoRTQrdwUugSTgjHhWPRxIfDP5rbgpbYndlyujVUOwN72732e29zPx/N+VEWE+9yv5rbvNZqDTHB8K39Nx5/6xMdo35hQNQ8qBhYe1y+5uazzud+Q64WHY2n0dYsy5X3PmNrg3XMEWFZUJd5YZelNW8XY8JMpL/MC2OWbhtQHx2M2IE9ODuy53LpL3tn09NEEAbgfu7WxWoCHLxZKYnQSgVaKMVaFUu8q5FfYLyZKCEaI4kikdpSisjFxJM3CV68aARbq4hCSZP+gJ692mhM7Ude37fuJhvDst2ykAX2TZ5sM1+dw0zmmZlNVl4qkAAygPiRfqQPxl62v2FstdMEi7A4K5UbljMcGn1hej/z0QyNELpqHBF/Fnjk/smpxNoQPM2EYW5jmCQCufSPLP/ENMqjMon1Ibi36E9TfbUkg+qLAYAF2N1YKBQKzfo1UANsHUsa7fO+Qjx3qtXqDdihwLbviv9Lny+KZS8vmhdejfZTRyGqnVw0HTVy89nQHwVSgfh4enl64PLt1pv1LND/XWEwV26Zx+IpK2yH6aT1N2c3HBa+vz+VHszHVs9C/Os5mFm7UBOI2fWLMJshwvS7lpbAvPi38zC9GoLoShAcHns7CRdiVl0wNo+8IAFKKZfLwwAQQfJypxulUsmn1YGsUSIgEfop0e4gGuNbxfNKpXJNbg5RGbnTQ5IYXTAUEYZNQqN91VGIWqcXjKOLbatPKgSx8ApSgXQjp2E+60G6YC7j+tkZsPWLFmmTxLsRVnfQNBBLMr9iKQbU4LjbeALbbSKuP+t4/Tjth8inADxZOQPRL0FA4eAJ0ZPSanmRz4NAZSeWfd8tjJGrVzCUCoHM7kkVZBbGDal6+g5OkjByh9B3Z/KoOV9ICqTGcaNSTlBdakNKWMRlD/J8qWeDowvG/kVNwXBuQyqQU4gbcSGdSAdMvnXk7M2mVn6xtiBm/mm1txhaxhfZXDTJgoqIBYNjbKYjo69cuQdL3TDxoRceJX0wmeoTQ2mY54WHyz0w/s7z45jT1oZ1WeGqZy8KhgC1CxJRLBadf9s79+AqqjOA3937fgRCQEIgCXkQSAIkVRGw0vqY1rbaTv9prdr+YztTrbY+8AFEFASBAPIIOlMBeQgIFkWtNoAkiA8imATGgm1FScY/yOhYe5mpIuO09ev3wS4uN3v23HPP3svuzZ6Z3wzcu3cfZ/f7zu887s1ATJgezm6wUmFIwHYbZXw1KyY9wfAEY6Aj9WF9egQJVUwgwZiCYjAZuUxjEiIkFcg4ZCxSozEGfrti2HpFPTNtEfEHfdFfLwqtW7w3ClkABUOt0KZIIvpUSXFVuP7WNZX7Z7XWQtPOOnhwZz0QTURrHdy1dcwHtVcUXEPbImHG6AUn4KQFQ7UJxQiJBGvKRO8Beng4lVzEC02LGKYYe2j/Tq0PZ8AXDKeer9PJW8EYPSFU/fihSfB496WwqvsS5GLkW/j/RlwI2aAxEWFKBaFLBVKNVCGVSAV+bjQ07y2EBbtjsHBPDBa1naW53V5G158RjIhxsacmGnFkEFKIDNEo1F5LIFGzkQu3Cwanl7FdcnSkB9IvSenEbWwMxEsb1UMG96sn09EfhuytBrHSnCqCZtuIXgPt0+QZaZO7n/bDOKduW+NFvkHtsfF6k7yOQO7jQn5xOivvOTXncGJGn7pLQnqlh7Zn5QTBuk0iP3efYIwPVbd0jocNxwphc2/BOZ7+cBCs6qqClQfroaWrDqWjDmWhFiGpQNhSgYxGypEypBQ/MwpaOkvg0VcLkAQs2HOWhW1izH0lAnc/5YO71n7DPesVmL8rBuXjUwQDqWosnNDcftUR+qqqCXh91/7ryhvLf0bbpgqGDUlDNSIhGFLgMdaASTl16tRl3IRr/yr+JAWcYMOcBOkiPn8PJkVUVASkgrtIl3FObZlcg2EdgnR9ysUHG4tnLqk/u7nEQtZXZ0mmkg6IC61BtbUkdVF3Ts7hxwzJPEgUPXdQLINkMbseBwtGoHrT8QSwWPveEFjeUQMr3xmLDXINjmwgh9KSCmQkUqIxAimGZR1DYd6uApi/m2QD2VMAC9qsoW3u2+yHu9ehUGzwwfSNGhtIMHxA0lFWp1bpoxHhmD++qG3akce7roE0wOu6+lRV4+Aao2Tki2CwEiMdmyMYejAkMw1a7dhJzjSNaILppvNKs9eT5IiCvGCIJ+XtvARL75s0OqvtEAzG+pzVep1aPAfdNk+5qTys1hIZpzXsEA6Z86Fn1e71UvQMOCsu7J8icUbO4cdMSiwm6RhCx2fHcE+m+6K6cIVgVExUq5/+MA6WfBCHlQdKYcWBKmjprIRV3ZUoCxVIWlKBDEcuQoYhQ5EiaN5XCI/sHAzzdg+G+a+eAUWiP3NejsN0FIt7USbuf9oHD2z2wYwtBP2bXjv7Xuk4ZSytpSDuWdf4Yss73wERlr897Z/BiBplfANGOmEyAnoWHSvbgEn5+uuv27k9SHYSUkVgNbgY8GMs6quHkchtGcHJ8H59X6IRWiw3AiV+D3m91hMnTgwVORe6X4xrW5OFBt1PHDt2bBhdJ2RWevCzz1GcaRLiF4BzPzjPMh/FQv5vdWpccDou3M87OecYYkZ65IzuE28UR3LBc5tI+3RBBYMEIh2efLcQG+JyHM0ow15/GY5mGKQC4UgFMgQpRAYjNAVDIxmDYW4rysauQpSN85nxTADuXe+D+zZ+IxYzt/pglsbMZ+h1ev+MYIyjNRXEsv1TT6x4eyqIsLxjKlQ2FkzU12MMZMGgQBIITpmElGRtz7L2TI9NCZVgJ2N5waB64523fOKVFwx+HYgLVLYEw8inn35aQ6Jm0/RAD8UfCYyIYBAM4ekRlLUiKxF1alzICoaTcw7BEgK7YpZkQbRtYe3LJYLhr974fgzSZf3fY9gYF8PyAyUoGiXQ0lUCq7pHIGlJBVKAJJA4EsPPxXAfUVj8RgIWtA+CRfsSsOi1MExfr49aaGLxzFmpaNp2llkIycaMzbQNCYZKglFALH3z0r5l+yeBCI+9NQkqGxINqd8mYSGaIC0EI5BtLBonvxn0XjZkiJJnutNElPScJmXY67iW3hOoN73B8Gej7uh4vGtgnY/dU27CwsAnkC7YCE3GofXb8NyWCIx2cGKR+3wkGSM5fg2ewHbzhNGJcaFDsQAmhfc5B+Qcy/1y6la6fjKZzsvGdFROBWPDP6IgyhNdg2FZx3BYefAiaOm8CFZ1DUNZSEsqNLGIIhEkjISQIBKAh15QYLo+arHJMGpBYkE8myIYW84JRq0mGIOW7GvoW/pGI4iw5PVGqJgYJ8GI5JNgfPHFFz8QCRpWT8KOpPTVV1/9QqTnl05jgdscoqQrMAwuJRgSn5GCrk1WMPTzyTfBSFdCsKe/ljf6QfHCEwx9NMUqrjiSsFggDmyJCycLxoXIORIxLFs/6sASjAn+6vV/i0AmrD0Sxd7/EFybUQQrO4dAS1chSoKJVBBsqUD8KCsqjlgYRi02p4xaEM+mJxjNe+v6Fu+rByuaX+sHCkas0SgYMkKRgWAEbSZAUFJlDD1OZgpJjotVw3D48OGL6BokV5GvZVwvE1bjIypydjaSDMHI6Boc0LAEBAnaCV7H74BRPvvssyky8k4NpmCDByQsIvWXq7iw+3l3es7hxr18/fhzJCuKCNn7FgkKxrr3wiBDy8E4rs0YhFMmBSgZCRSGOMKVCkRFFJj7sgL3rvPB/RvOjlrM3IICgXLRpMmFKVtpG22KZOP5grFwT03fovYasGJhW39GT4jmlWBQ8gAsIg0TnRPkqNACPEqUosH75Zdf3igxHJ6kevEEY2ALBkEiIRAfIvGSNLtmWu8BJoWkQ7b+7I8L+wXDDTnHE4wsCMZTR0IgAy4Uvbjucv/3lrwR//fKgzFo6YyiaFhKBeKDx/b7TlZMVK4aWaNc8sBGlIVNKA0oF02aXDxIbDNh6zeCMRMFgz47yiAYj+6u6Fu4pxKsWPBqf0aPjxgFI8ATCpEEwEgsTQIJMcQhaKSjo2M4azgYvz0wlnUcTDI/NBtupffcAl079VDpvAFLJnUPJoXqRuIzUlDjYdYQSpxPgENORYozupDs7e0dx48BcbAXvxdMisi9oZEAs4Ys9RrxtV6JadJcxkWIh1meoMLKR4Qbco5dMUyfkYkTOcGQFw5bBWPtX4MgQ1mtWon7KiSuvClw2/IDodMtnUGUjH5SQeDrvv/99C7/DP0zI6qUChQFlAu2WPAFw39OMOa1jup7dFcpWDF/Z3/Kx4fyQjD0nlmmwcIaNnaqUPCgXh2YFIlEw2lo7E+U1DgNBMGgRpDR8+zNoWAkRe8Pe5Eie6qSXruAIzghzD9LwaRkQzDcknM8wbBbMMb7q9e8GwAZyuvVMv0PjWnEkUTRSHVUw9Xq9dNu8N/QcLVy/dDSM9slUrctqVZLtZELTS7kBGPuK8V981qLwYpH/tIPvI6gjGAErOD3FuShXp5V7+STTz6Zms5+6LyykeDp+JS8jY0vnTPn+Pq89u0yx2YlDuHt+cdJmjQkz2ejl02v23bN8okzKAPz/rOvNywLPVOMuFyawX0Kmt17EibG6FMvrz5sjouwGWBSksnkj3h1R9uASRGof9mcE04HHK29PDXn4FRVbQb1ERJAWsBkp1tkBcO2v6ZaWusfufqwH2QYUakOpYY5teJSHwTG+5FhpcpQzugFVzBKqv3lJBjEwy8V9c19uQismPPnfqBgBBrcJhjUQFMDBlqxSswiMBaQJXmSwpcWfoKkY3MaRyFYDYmdQqLT3t5eTPXEqTvh8x5IgmF8BizqMZwpra2tI1giTq9nGItBmno0G6VgiYdAfUjHhYhg0XuZCobeeHORzzlhHqdPn36QlXM8wciNYASR6Jzn/W8+eUiFTJi5yd9K+0BCjF/AZF2kqksOEr1lgbIrU8H4TbPyumFkJHHnmkTHwy8VwHm8yOU/hcVKkeGHtvwyUyKMIe6cFmqAKJlmmIgjn3/++R2MJHySglfbd4QFvc8KcirUu2B9ls6ddWw6L4EeapKRlG+mbeR6dmzwdxmeslho1kv1QtefmrSp90zvm9UVQzAihOw1yCZOCaFgEaZ7BHrh12OEBb1P2+HXNg+DXtgjF2EJuOdMRUaQGHFBJZnScEZYUPxQHFnERSQdzPZBr6Xej6NHj9bp8UD3gJU3LnTOIRjf8LmOWx/iIzwhDkLTLQzBYJILwdCnScKhqK+geZf/6JNdKojw0J/UtxTVF+P/NVL+OfiDvvgdK5XO2SgNs7dyoKkUpGmLD25foXQHQr4CkhSNWEm1Mnb2jugpBM7xvDVTfhK42ShKsoLB6vnxi7xU6L0ISSI6OAf4GNhYKAHo++Y1DFoSs61QD1WXLlnBEOhFJYFTeI0GJemBJhgpopi1Qo2feHzwe86cEbswA8Fhf/nCaPi50DOZYQyeZOwzJznHEwxhwZCXDCRWXqdc3Lxbff+PnQpY8cgL6qERlUqNz8eQC4lzKB6tTLjzCeUISYQVtM3wcqXecA4h47QLEr/uVnVO03OB/yLQtN2cWxb6X4nEfMMNchGwY0qElVApwWhTGkkZiaB9UNAYGoyIzURT2bFjRwme/2zRRp+2p4RBn6f9ZAL1bDIcBaKe6Tp2kmDLjd7jpeMK9Owse1d0HdSgpfZE6Rj0GtUvfo2uPvX6P/744+vNrotVX/o14ELDHbRfwuoaRIa0ccj2Jv1e0H71IWxJwukOzdOzL9uYaqNgkWxB9cIQmYidyMYFPVf0vMjAGBFhjjp99NFH3+bvVz7n4NqXZdu2bRtJbYQJUTPo3Iwxg8/bL9M5T969oX1RPGYSb4T27Z9efXE35yvF8sIBAHZKhj5dEtYqK44UDK9QR1Y2KFMqG9RJw0rVEfQaEte2Caf+YbBsnMPQkWpJWa06GbmsCP/NOQd9PwGDaMSQxKBhvpLScb4pZbW+7xZX+sZo+0kYBCVoFKVsCAaHsBz2C0aeEXEYUREoyUJKoddEr1dGMLKL+PPuVEj8zaTGuI0Xr1knxiEqRe7jLZhCwPGCoZOyLiJgbBAZCzQDxpPK3jkQ/HNgYJSNoDEpGfeVejMkFnUGrXBAQhUO0DzD6QmPCfXCwKTYer25F5CwCC5ocCMEjRKZ9aad/Hy5lLjNxNjkPr5Ef/fI0YJhJPVArBMAAFecg3EfnBW2KuEJRt4mrGguoCHV1J6rNjUUy4TOzs7xZsPD2JD93hMMZwmG2UJcKrRWwRMMTzA8wchjsCgs8lQw7E5QcYcTcwI0f2uxwG+2YU44bsXJkyf/QGLB+AGiX8lfv7xg5JILLRS0LobWEdG6hdR5eRJI1n3X19OI4oIG2ZI8yCeS8WW/cIgLBhtPMDzB8ATDhYJBHD9+/Ao7vv3CWNQZJzzBSCHro1L8whi5inqC4cp84gmGhycYDhaMhAwuSCDxdMBh8x+jGLwgIxX4teNpWbieqBWeYJw/QkHCkO79olGqPJxCcBoJO/EEwxMMTzA8wXCdYDi4x+UJRn6veXDqc+kJhicY+QcWJV0c+jXViAyeYHDIcYLOen3kfookJIMLFnk6VSTcsijS8nxckF9yKhSeYLgMTzA8wfAEwxMMTzA8wfAEwxMMNwiG1JSJC77G5/YhWLcl7ASHrCbAAfjDW56AuIt8X8QpJBTe11Q9wfAEwxMMTzA8wfBwZrx5guEJhqsXfXKEQy7hukBABjpxEfJgCsTWP3bmgilFj/xaVJvDH6bjx1de/VT4QMQTDE8wPMHwBMMTDNfgCUYOBeP/FczIFptfb3AAAAAASUVORK5CYII=',
+		brandTarget: '_blank',
+	}),
+});
diff --git a/packages/frontend/.storybook/mocks.ts b/packages/frontend/.storybook/mocks.ts
new file mode 100644
index 0000000000..41c3c5c4d9
--- /dev/null
+++ b/packages/frontend/.storybook/mocks.ts
@@ -0,0 +1,16 @@
+import { type SharedOptions, rest } from 'msw';
+
+export const onUnhandledRequest = ((req, print) => {
+	if (req.url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emojis?\/|iframe.html$|node_modules\/|src\/|sb-|static-assets\/|vite\/)/.test(req.url.pathname)) {
+		return
+	}
+	print.warning()
+}) satisfies SharedOptions['onUnhandledRequest'];
+
+export const commonHandlers = [
+	rest.get('/twemoji/:codepoints.svg', async (req, res, ctx) => {
+		const { codepoints } = req.params;
+		const value = await fetch(`https://unpkg.com/@discordapp/twemoji@14.1.2/dist/svg/${codepoints}.svg`).then((response) => response.blob());
+		return res(ctx.set('Content-Type', 'image/svg+xml'), ctx.body(value));
+	}),
+];
diff --git a/packages/frontend/.storybook/preload-locale.ts b/packages/frontend/.storybook/preload-locale.ts
new file mode 100644
index 0000000000..a54164742a
--- /dev/null
+++ b/packages/frontend/.storybook/preload-locale.ts
@@ -0,0 +1,9 @@
+import { writeFile } from 'node:fs/promises';
+import { resolve } from 'node:path';
+import * as locales from '../../../locales';
+
+writeFile(
+	resolve(__dirname, 'locale.ts'),
+	`export default ${JSON.stringify(locales['ja-JP'], undefined, 2)} as const;`,
+	'utf8',
+)
diff --git a/packages/frontend/.storybook/preload-theme.ts b/packages/frontend/.storybook/preload-theme.ts
new file mode 100644
index 0000000000..1ff8f71ecd
--- /dev/null
+++ b/packages/frontend/.storybook/preload-theme.ts
@@ -0,0 +1,39 @@
+import { readFile, writeFile } from 'node:fs/promises';
+import { resolve } from 'node:path';
+import * as JSON5 from 'json5';
+
+const keys = [
+	'_dark',
+	'_light',
+	'l-light',
+	'l-coffee',
+	'l-apricot',
+	'l-rainy',
+	'l-botanical',
+	'l-vivid',
+	'l-cherry',
+	'l-sushi',
+	'l-u0',
+	'd-dark',
+	'd-persimmon',
+	'd-astro',
+	'd-future',
+	'd-botanical',
+	'd-green-lime',
+	'd-green-orange',
+	'd-cherry',
+	'd-ice',
+	'd-u0',
+]
+
+Promise.all(keys.map((key) => readFile(resolve(__dirname, `../src/themes/${key}.json5`), 'utf8'))).then((sources) => {
+	writeFile(
+		resolve(__dirname, './themes.ts'),
+		`export default ${JSON.stringify(
+			Object.fromEntries(sources.map((source, i) => [keys[i], JSON5.parse(source)])),
+			undefined,
+			2,
+		)} as const;`,
+		'utf8'
+	);
+});
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
new file mode 100644
index 0000000000..01912da28b
--- /dev/null
+++ b/packages/frontend/.storybook/preview-head.html
@@ -0,0 +1,4 @@
+<link rel="stylesheet" href="https://unpkg.com/@tabler/icons-webfont@2.12.0/tabler-icons.min.css">
+<script>
+  window.global = window;
+</script>
diff --git a/packages/frontend/.storybook/preview.ts b/packages/frontend/.storybook/preview.ts
new file mode 100644
index 0000000000..b2974276ab
--- /dev/null
+++ b/packages/frontend/.storybook/preview.ts
@@ -0,0 +1,113 @@
+import { addons } from '@storybook/addons';
+import { FORCE_REMOUNT } from '@storybook/core-events';
+import { type Preview, setup } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
+import { initialize, mswDecorator } from 'msw-storybook-addon';
+import locale from './locale';
+import { commonHandlers, onUnhandledRequest } from './mocks';
+import themes from './themes';
+import '../src/style.scss';
+
+const appInitialized = Symbol();
+
+let moduleInitialized = false;
+let unobserve = () => {};
+let misskeyOS = null;
+
+function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme']) {
+	unobserve();
+	const theme = themes[document.documentElement.dataset.misskeyTheme];
+	if (theme) {
+		applyTheme(themes[document.documentElement.dataset.misskeyTheme]);
+	} else if (isChromatic()) {
+		applyTheme(themes['l-light']);
+	}
+	const observer = new MutationObserver((entries) => {
+		for (const entry of entries) {
+			if (entry.attributeName === 'data-misskey-theme') {
+				const target = entry.target as HTMLElement;
+				const theme = themes[target.dataset.misskeyTheme];
+				if (theme) {
+					applyTheme(themes[target.dataset.misskeyTheme]);
+				} else {
+					target.removeAttribute('style');
+				}
+			}
+		}
+	});
+	observer.observe(document.documentElement, {
+		attributes: true,
+		attributeFilter: ['data-misskey-theme'],
+	});
+	unobserve = () => observer.disconnect();
+}
+
+initialize({
+	onUnhandledRequest,
+});
+localStorage.setItem("locale", JSON.stringify(locale));
+queueMicrotask(() => {
+	Promise.all([
+		import('../src/components'),
+		import('../src/directives'),
+		import('../src/widgets'),
+		import('../src/scripts/theme'),
+		import('../src/store'),
+		import('../src/os'),
+	]).then(([{ default: components }, { default: directives }, { default: widgets }, { applyTheme }, { defaultStore }, os]) => {
+		setup((app) => {
+			moduleInitialized = true;
+			if (app[appInitialized]) {
+				return;
+			}
+			app[appInitialized] = true;
+			loadTheme(applyTheme);
+			components(app);
+			directives(app);
+			widgets(app);
+			misskeyOS = os;
+			if (isChromatic()) {
+				defaultStore.set('animation', false);
+			}
+		});
+	});
+});
+
+const preview = {
+	decorators: [
+		(Story, context) => {
+			const story = Story();
+			if (!moduleInitialized) {
+				const channel = addons.getChannel();
+				(globalThis.requestIdleCallback || setTimeout)(() => {
+					channel.emit(FORCE_REMOUNT, { storyId: context.id });
+				});
+			}
+			return story;
+		},
+		mswDecorator,
+		(Story, context) => {
+			return {
+				setup() {
+					return {
+						context,
+						popups: misskeyOS.popups,
+					};
+				},
+				template:
+					'<component :is="popup.component" v-for="popup in popups" :key="popup.id" v-bind="popup.props" v-on="popup.events"/>' +
+					'<story />',
+			};
+		},
+	],
+	parameters: {
+		controls: {
+			exclude: /^__/,
+		},
+		msw: {
+			handlers: commonHandlers,
+		},
+	},
+} satisfies Preview;
+
+export default preview;
diff --git a/packages/frontend/.storybook/tsconfig.json b/packages/frontend/.storybook/tsconfig.json
new file mode 100644
index 0000000000..01aa9db6eb
--- /dev/null
+++ b/packages/frontend/.storybook/tsconfig.json
@@ -0,0 +1,22 @@
+{
+	"compilerOptions": {
+		"strict": true,
+		"allowUnusedLabels": false,
+		"allowUnreachableCode": false,
+		"exactOptionalPropertyTypes": true,
+		"noFallthroughCasesInSwitch": true,
+		"noImplicitOverride": true,
+		"noImplicitReturns": true,
+		"noPropertyAccessFromIndexSignature": true,
+		"noUncheckedIndexedAccess": true,
+		"noUnusedLocals": true,
+		"noUnusedParameters": true,
+		"checkJs": true,
+		"esModuleInterop": true,
+		"skipLibCheck": true,
+		"forceConsistentCasingInFileNames": true,
+		"jsx": "react",
+		"jsxFactory": "h"
+	},
+	"files": ["./generate.tsx", "./preload-locale.ts", "./preload-theme.ts"]
+}
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 0e73929826..d97f1284c2 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -4,6 +4,9 @@
 	"scripts": {
 		"watch": "vite",
 		"build": "vite build",
+		"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
+		"build-storybook": "tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && storybook build",
+		"chromatic": "chromatic",
 		"test": "vitest --run",
 		"test-and-coverage": "vitest --run --coverage",
 		"typecheck": "vue-tsc --noEmit",
@@ -71,8 +74,27 @@
 		"vuedraggable": "next"
 	},
 	"devDependencies": {
+		"@storybook/addon-essentials": "7.0.0-rc.10",
+		"@storybook/addon-interactions": "7.0.0-rc.10",
+		"@storybook/addon-links": "7.0.0-rc.10",
+		"@storybook/addon-storysource": "7.0.0-rc.10",
+		"@storybook/addons": "7.0.0-rc.10",
+		"@storybook/blocks": "7.0.0-rc.10",
+		"@storybook/core-events": "7.0.0-rc.10",
+		"@storybook/jest": "0.0.10",
+		"@storybook/manager-api": "7.0.0-rc.10",
+		"@storybook/preview-api": "7.0.0-rc.10",
+		"@storybook/react": "7.0.0-rc.10",
+		"@storybook/react-vite": "7.0.0-rc.10",
+		"@storybook/testing-library": "0.0.14-next.1",
+		"@storybook/theming": "7.0.0-rc.10",
+		"@storybook/types": "7.0.0-rc.10",
+		"@storybook/vue3": "7.0.0-rc.10",
+		"@storybook/vue3-vite": "7.0.0-rc.10",
+		"@testing-library/jest-dom": "^5.16.5",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
+		"@types/estree": "^1.0.0",
 		"@types/gulp": "4.0.10",
 		"@types/gulp-rename": "2.0.1",
 		"@types/matter-js": "0.18.2",
@@ -80,6 +102,7 @@
 		"@types/punycode": "2.1.0",
 		"@types/sanitize-html": "2.9.0",
 		"@types/seedrandom": "3.0.5",
+		"@types/testing-library__jest-dom": "^5.14.5",
 		"@types/throttle-debounce": "5.0.0",
 		"@types/tinycolor2": "1.4.3",
 		"@types/uuid": "9.0.1",
@@ -89,13 +112,24 @@
 		"@typescript-eslint/parser": "5.57.0",
 		"@vitest/coverage-c8": "^0.29.8",
 		"@vue/runtime-core": "3.2.47",
+		"astring": "^1.8.4",
+		"chokidar-cli": "^3.0.0",
+		"chromatic": "^6.17.2",
 		"cross-env": "7.0.3",
 		"cypress": "12.9.0",
 		"eslint": "8.37.0",
 		"eslint-plugin-import": "2.27.5",
 		"eslint-plugin-vue": "9.10.0",
+		"fast-glob": "^3.2.12",
 		"happy-dom": "8.9.0",
+		"msw": "^1.1.0",
+		"msw-storybook-addon": "^1.8.0",
+		"prettier": "^2.8.4",
+		"react": "^18.2.0",
+		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
+		"storybook": "7.0.0-rc.10",
+		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
 		"vitest": "^0.29.8",
 		"vitest-fetch-mock": "^0.2.2",
diff --git a/packages/frontend/public/mockServiceWorker.js b/packages/frontend/public/mockServiceWorker.js
new file mode 100644
index 0000000000..e915a1eb08
--- /dev/null
+++ b/packages/frontend/public/mockServiceWorker.js
@@ -0,0 +1,303 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker (1.1.0).
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ * - Please do NOT serve this file on production.
+ */
+
+const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70'
+const activeClientIds = new Set()
+
+self.addEventListener('install', function () {
+  self.skipWaiting()
+})
+
+self.addEventListener('activate', function (event) {
+  event.waitUntil(self.clients.claim())
+})
+
+self.addEventListener('message', async function (event) {
+  const clientId = event.source.id
+
+  if (!clientId || !self.clients) {
+    return
+  }
+
+  const client = await self.clients.get(clientId)
+
+  if (!client) {
+    return
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  switch (event.data) {
+    case 'KEEPALIVE_REQUEST': {
+      sendToClient(client, {
+        type: 'KEEPALIVE_RESPONSE',
+      })
+      break
+    }
+
+    case 'INTEGRITY_CHECK_REQUEST': {
+      sendToClient(client, {
+        type: 'INTEGRITY_CHECK_RESPONSE',
+        payload: INTEGRITY_CHECKSUM,
+      })
+      break
+    }
+
+    case 'MOCK_ACTIVATE': {
+      activeClientIds.add(clientId)
+
+      sendToClient(client, {
+        type: 'MOCKING_ENABLED',
+        payload: true,
+      })
+      break
+    }
+
+    case 'MOCK_DEACTIVATE': {
+      activeClientIds.delete(clientId)
+      break
+    }
+
+    case 'CLIENT_CLOSED': {
+      activeClientIds.delete(clientId)
+
+      const remainingClients = allClients.filter((client) => {
+        return client.id !== clientId
+      })
+
+      // Unregister itself when there are no more clients
+      if (remainingClients.length === 0) {
+        self.registration.unregister()
+      }
+
+      break
+    }
+  }
+})
+
+self.addEventListener('fetch', function (event) {
+  const { request } = event
+  const accept = request.headers.get('accept') || ''
+
+  // Bypass server-sent events.
+  if (accept.includes('text/event-stream')) {
+    return
+  }
+
+  // Bypass navigation requests.
+  if (request.mode === 'navigate') {
+    return
+  }
+
+  // Opening the DevTools triggers the "only-if-cached" request
+  // that cannot be handled by the worker. Bypass such requests.
+  if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+    return
+  }
+
+  // Bypass all requests when there are no active clients.
+  // Prevents the self-unregistered worked from handling requests
+  // after it's been deleted (still remains active until the next reload).
+  if (activeClientIds.size === 0) {
+    return
+  }
+
+  // Generate unique request ID.
+  const requestId = Math.random().toString(16).slice(2)
+
+  event.respondWith(
+    handleRequest(event, requestId).catch((error) => {
+      if (error.name === 'NetworkError') {
+        console.warn(
+          '[MSW] Successfully emulated a network error for the "%s %s" request.',
+          request.method,
+          request.url,
+        )
+        return
+      }
+
+      // At this point, any exception indicates an issue with the original request/response.
+      console.error(
+        `\
+[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`,
+        request.method,
+        request.url,
+        `${error.name}: ${error.message}`,
+      )
+    }),
+  )
+})
+
+async function handleRequest(event, requestId) {
+  const client = await resolveMainClient(event)
+  const response = await getResponse(event, client, requestId)
+
+  // Send back the response clone for the "response:*" life-cycle events.
+  // Ensure MSW is active and ready to handle the message, otherwise
+  // this message will pend indefinitely.
+  if (client && activeClientIds.has(client.id)) {
+    ;(async function () {
+      const clonedResponse = response.clone()
+      sendToClient(client, {
+        type: 'RESPONSE',
+        payload: {
+          requestId,
+          type: clonedResponse.type,
+          ok: clonedResponse.ok,
+          status: clonedResponse.status,
+          statusText: clonedResponse.statusText,
+          body:
+            clonedResponse.body === null ? null : await clonedResponse.text(),
+          headers: Object.fromEntries(clonedResponse.headers.entries()),
+          redirected: clonedResponse.redirected,
+        },
+      })
+    })()
+  }
+
+  return response
+}
+
+// Resolve the main client for the given event.
+// Client that issues a request doesn't necessarily equal the client
+// that registered the worker. It's with the latter the worker should
+// communicate with during the response resolving phase.
+async function resolveMainClient(event) {
+  const client = await self.clients.get(event.clientId)
+
+  if (client?.frameType === 'top-level') {
+    return client
+  }
+
+  const allClients = await self.clients.matchAll({
+    type: 'window',
+  })
+
+  return allClients
+    .filter((client) => {
+      // Get only those clients that are currently visible.
+      return client.visibilityState === 'visible'
+    })
+    .find((client) => {
+      // Find the client ID that's recorded in the
+      // set of clients that have registered the worker.
+      return activeClientIds.has(client.id)
+    })
+}
+
+async function getResponse(event, client, requestId) {
+  const { request } = event
+  const clonedRequest = request.clone()
+
+  function passthrough() {
+    // Clone the request because it might've been already used
+    // (i.e. its body has been read and sent to the client).
+    const headers = Object.fromEntries(clonedRequest.headers.entries())
+
+    // Remove MSW-specific request headers so the bypassed requests
+    // comply with the server's CORS preflight check.
+    // Operate with the headers as an object because request "Headers"
+    // are immutable.
+    delete headers['x-msw-bypass']
+
+    return fetch(clonedRequest, { headers })
+  }
+
+  // Bypass mocking when the client is not active.
+  if (!client) {
+    return passthrough()
+  }
+
+  // Bypass initial page load requests (i.e. static assets).
+  // The absence of the immediate/parent client in the map of the active clients
+  // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+  // and is not ready to handle requests.
+  if (!activeClientIds.has(client.id)) {
+    return passthrough()
+  }
+
+  // Bypass requests with the explicit bypass header.
+  // Such requests can be issued by "ctx.fetch()".
+  if (request.headers.get('x-msw-bypass') === 'true') {
+    return passthrough()
+  }
+
+  // Notify the client that a request has been intercepted.
+  const clientMessage = await sendToClient(client, {
+    type: 'REQUEST',
+    payload: {
+      id: requestId,
+      url: request.url,
+      method: request.method,
+      headers: Object.fromEntries(request.headers.entries()),
+      cache: request.cache,
+      mode: request.mode,
+      credentials: request.credentials,
+      destination: request.destination,
+      integrity: request.integrity,
+      redirect: request.redirect,
+      referrer: request.referrer,
+      referrerPolicy: request.referrerPolicy,
+      body: await request.text(),
+      bodyUsed: request.bodyUsed,
+      keepalive: request.keepalive,
+    },
+  })
+
+  switch (clientMessage.type) {
+    case 'MOCK_RESPONSE': {
+      return respondWithMock(clientMessage.data)
+    }
+
+    case 'MOCK_NOT_FOUND': {
+      return passthrough()
+    }
+
+    case 'NETWORK_ERROR': {
+      const { name, message } = clientMessage.data
+      const networkError = new Error(message)
+      networkError.name = name
+
+      // Rejecting a "respondWith" promise emulates a network error.
+      throw networkError
+    }
+  }
+
+  return passthrough()
+}
+
+function sendToClient(client, message) {
+  return new Promise((resolve, reject) => {
+    const channel = new MessageChannel()
+
+    channel.port1.onmessage = (event) => {
+      if (event.data && event.data.error) {
+        return reject(event.data.error)
+      }
+
+      resolve(event.data)
+    }
+
+    client.postMessage(message, [channel.port2])
+  })
+}
+
+function sleep(timeMs) {
+  return new Promise((resolve) => {
+    setTimeout(resolve, timeMs)
+  })
+}
+
+async function respondWithMock(response) {
+  await sleep(response.delay)
+  return new Response(response.body, response)
+}
diff --git a/packages/frontend/src/components/MkAnalogClock.stories.impl.ts b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
new file mode 100644
index 0000000000..05190aa268
--- /dev/null
+++ b/packages/frontend/src/components/MkAnalogClock.stories.impl.ts
@@ -0,0 +1,28 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkAnalogClock from './MkAnalogClock.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkAnalogClock,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkAnalogClock v-bind="props" />',
+		};
+	},
+	parameters: {
+		layout: 'fullscreen',
+	},
+} satisfies StoryObj<typeof MkAnalogClock>;
diff --git a/packages/frontend/src/components/MkButton.stories.impl.ts b/packages/frontend/src/components/MkButton.stories.impl.ts
new file mode 100644
index 0000000000..e1c1c54d10
--- /dev/null
+++ b/packages/frontend/src/components/MkButton.stories.impl.ts
@@ -0,0 +1,30 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable import/no-default-export */
+/* eslint-disable import/no-duplicates */
+import { StoryObj } from '@storybook/vue3';
+import MkButton from './MkButton.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkButton,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkButton v-bind="props">Text</MkButton>',
+		};
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkButton>;
diff --git a/packages/frontend/src/components/MkCaptcha.stories.impl.ts b/packages/frontend/src/components/MkCaptcha.stories.impl.ts
new file mode 100644
index 0000000000..6ac437a277
--- /dev/null
+++ b/packages/frontend/src/components/MkCaptcha.stories.impl.ts
@@ -0,0 +1,2 @@
+import MkCaptcha from './MkCaptcha.vue';
+void MkCaptcha;
diff --git a/packages/frontend/src/components/MkContextMenu.vue b/packages/frontend/src/components/MkContextMenu.vue
index 5bdf477241..b81c806b0c 100644
--- a/packages/frontend/src/components/MkContextMenu.vue
+++ b/packages/frontend/src/components/MkContextMenu.vue
@@ -17,8 +17,8 @@ import { onMounted, onBeforeUnmount } from 'vue';
 import MkMenu from './MkMenu.vue';
 import { MenuItem } from './types/menu.vue';
 import contains from '@/scripts/contains';
-import * as os from '@/os';
 import { defaultStore } from '@/store';
+import * as os from '@/os';
 
 const props = defineProps<{
 	items: MenuItem[];
diff --git a/packages/frontend/src/components/MkMenu.vue b/packages/frontend/src/components/MkMenu.vue
index 9e3022896c..e513a65a32 100644
--- a/packages/frontend/src/components/MkMenu.vue
+++ b/packages/frontend/src/components/MkMenu.vue
@@ -1,5 +1,5 @@
 <template>
-<div>
+<div role="menu">
 	<div
 		ref="itemsEl" v-hotkey="keymap"
 		class="_popup _shadow"
@@ -8,37 +8,37 @@
 		@contextmenu.self="e => e.preventDefault()"
 	>
 		<template v-for="(item, i) in items2">
-			<div v-if="item === null" :class="$style.divider"></div>
-			<span v-else-if="item.type === 'label'" :class="[$style.label, $style.item]">
+			<div v-if="item === null" role="separator" :class="$style.divider"></div>
+			<span v-else-if="item.type === 'label'" role="menuitem" :class="[$style.label, $style.item]">
 				<span>{{ item.text }}</span>
 			</span>
-			<span v-else-if="item.type === 'pending'" :tabindex="i" :class="[$style.pending, $style.item]">
+			<span v-else-if="item.type === 'pending'" role="menuitem" :tabindex="i" :class="[$style.pending, $style.item]">
 				<span><MkEllipsis/></span>
 			</span>
-			<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button" :class="$style.item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<MkA v-else-if="item.type === 'link'" role="menuitem" :to="item.to" :tabindex="i" class="_button" :class="$style.item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<MkAvatar v-if="item.avatar" :user="item.avatar" :class="$style.avatar"/>
 				<span>{{ item.text }}</span>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</MkA>
-			<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button" :class="$style.item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<a v-else-if="item.type === 'a'" role="menuitem" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button" :class="$style.item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<span>{{ item.text }}</span>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</a>
-			<button v-else-if="item.type === 'user'" :tabindex="i" class="_button" :class="[$style.item, { [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<button v-else-if="item.type === 'user'" role="menuitem" :tabindex="i" class="_button" :class="[$style.item, { [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<MkAvatar :user="item.user" :class="$style.avatar"/><MkUserName :user="item.user"/>
 				<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
 			</button>
-			<span v-else-if="item.type === 'switch'" :tabindex="i" :class="$style.item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<span v-else-if="item.type === 'switch'" role="menuitemcheckbox" :tabindex="i" :class="$style.item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<MkSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</MkSwitch>
 			</span>
-			<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button" :class="[$style.item, $style.parent, { [$style.childShowing]: childShowingItem === item }]" @mouseenter="showChildren(item, $event)">
+			<button v-else-if="item.type === 'parent'" role="menuitem" :tabindex="i" class="_button" :class="[$style.item, $style.parent, { [$style.childShowing]: childShowingItem === item }]" @mouseenter="showChildren(item, $event)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<span>{{ item.text }}</span>
 				<span :class="$style.caret"><i class="ti ti-chevron-right ti-fw"></i></span>
 			</button>
-			<button v-else :tabindex="i" class="_button" :class="[$style.item, { [$style.danger]: item.danger, [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
+			<button v-else :tabindex="i" class="_button" role="menuitem" :class="[$style.item, { [$style.danger]: item.danger, [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
 				<i v-if="item.icon" class="ti-fw" :class="[$style.icon, item.icon]"></i>
 				<MkAvatar v-if="item.avatar" :user="item.avatar" :class="$style.avatar"/>
 				<span>{{ item.text }}</span>
diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index 635ac3e8bd..9c5622b1c5 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -150,7 +150,7 @@ function adjustTweetHeight(message: any) {
 }
 
 const openPlayer = (): void => {
-	os.popup(defineAsyncComponent(() => import('@/components/MkYoutubePlayer.vue')), {
+	os.popup(defineAsyncComponent(() => import('@/components/MkYouTubePlayer.vue')), {
 		url: requestUrl.href,
 	});
 };
diff --git a/packages/frontend/src/components/MkYoutubePlayer.vue b/packages/frontend/src/components/MkYouTubePlayer.vue
similarity index 100%
rename from packages/frontend/src/components/MkYoutubePlayer.vue
rename to packages/frontend/src/components/MkYouTubePlayer.vue
diff --git a/packages/frontend/src/components/global/MkA.stories.impl.ts b/packages/frontend/src/components/global/MkA.stories.impl.ts
new file mode 100644
index 0000000000..72d069e853
--- /dev/null
+++ b/packages/frontend/src/components/global/MkA.stories.impl.ts
@@ -0,0 +1,47 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import MkA from './MkA.vue';
+import { tick } from '@/scripts/test-utils';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkA,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkA v-bind="props">Text</MkA>',
+		};
+	},
+	async play({ canvasElement }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		await userEvent.click(a, { button: 2 });
+		await tick();
+		const menu = canvas.getByRole('menu');
+		await expect(menu).toBeInTheDocument();
+		await userEvent.click(a, { button: 0 });
+		a.blur();
+		await tick();
+		await expect(menu).not.toBeInTheDocument();
+	},
+	args: {
+		to: '#test',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkA>;
diff --git a/packages/frontend/src/components/global/MkAcct.stories.impl.ts b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
new file mode 100644
index 0000000000..7dfa1a14f2
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAcct.stories.impl.ts
@@ -0,0 +1,43 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkAcct from './MkAcct.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkAcct,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkAcct v-bind="props" />',
+		};
+	},
+	args: {
+		user: {
+			...userDetailed,
+			host: null,
+		},
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAcct>;
+export const Detail = {
+	...Default,
+	args: {
+		...Default.args,
+		user: userDetailed,
+		detail: true,
+	},
+} satisfies StoryObj<typeof MkAcct>;
diff --git a/packages/frontend/src/components/global/MkAcct.vue b/packages/frontend/src/components/global/MkAcct.vue
index e06ab64e86..2b9f892fc6 100644
--- a/packages/frontend/src/components/global/MkAcct.vue
+++ b/packages/frontend/src/components/global/MkAcct.vue
@@ -18,4 +18,3 @@ defineProps<{
 
 const host = toUnicode(hostRaw);
 </script>
-
diff --git a/packages/frontend/src/components/global/MkAd.stories.impl.ts b/packages/frontend/src/components/global/MkAd.stories.impl.ts
new file mode 100644
index 0000000000..7d8a42a03c
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAd.stories.impl.ts
@@ -0,0 +1,120 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import { i18n } from '@/i18n';
+import MkAd from './MkAd.vue';
+const common = {
+	render(args) {
+		return {
+			components: {
+				MkAd,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkAd v-bind="props" />',
+		};
+	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
+		const img = within(a).getByRole('img');
+		await expect(img).toBeInTheDocument();
+		let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(1);
+		const i = buttons[0];
+		await expect(i).toBeInTheDocument();
+		await userEvent.click(i);
+		await expect(a).not.toBeInTheDocument();
+		await expect(i).not.toBeInTheDocument();
+		buttons = canvas.getAllByRole<HTMLButtonElement>('button');
+		await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
+		const reduce = args.__hasReduce ? buttons[0] : null;
+		const back = buttons[args.__hasReduce ? 1 : 0];
+		if (reduce) {
+			await expect(reduce).toBeInTheDocument();
+			await expect(reduce).toHaveTextContent(i18n.ts._ad.reduceFrequencyOfThisAd);
+		}
+		await expect(back).toBeInTheDocument();
+		await expect(back).toHaveTextContent(i18n.ts._ad.back);
+		await userEvent.click(back);
+		if (reduce) {
+			await expect(reduce).not.toBeInTheDocument();
+		}
+		await expect(back).not.toBeInTheDocument();
+		const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(aAgain).toBeInTheDocument();
+		const imgAgain = within(aAgain).getByRole('img');
+		await expect(imgAgain).toBeInTheDocument();
+	},
+	args: {
+		prefer: [],
+		specify: {
+			id: 'someadid',
+			radio: 1,
+			url: '#test',
+		},
+		__hasReduce: true,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAd>;
+export const Square = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'square',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+		},
+	},
+} satisfies StoryObj<typeof MkAd>;
+export const Horizontal = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+} satisfies StoryObj<typeof MkAd>;
+export const HorizontalBig = {
+	...common,
+	args: {
+		...common.args,
+		specify: {
+			...common.args.specify,
+			place: 'horizontal-big',
+			imageUrl:
+				'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true',
+		},
+	},
+} satisfies StoryObj<typeof MkAd>;
+export const ZeroRatio = {
+	...Square,
+	args: {
+		...Square.args,
+		specify: {
+			...Square.args.specify,
+			ratio: 0,
+		},
+		__hasReduce: false,
+	},
+} satisfies StoryObj<typeof MkAd>;
diff --git a/packages/frontend/src/components/global/MkAd.vue b/packages/frontend/src/components/global/MkAd.vue
index b8f749bd1c..5799f99d5f 100644
--- a/packages/frontend/src/components/global/MkAd.vue
+++ b/packages/frontend/src/components/global/MkAd.vue
@@ -20,13 +20,13 @@
 
 <script lang="ts" setup>
 import { ref } from 'vue';
+import { i18n } from '@/i18n';
 import { instance } from '@/instance';
 import { host } from '@/config';
 import MkButton from '@/components/MkButton.vue';
 import { defaultStore } from '@/store';
 import * as os from '@/os';
 import { $i } from '@/account';
-import { i18n } from '@/i18n';
 
 type Ad = (typeof instance)['ads'][number];
 
diff --git a/packages/frontend/src/components/global/MkAvatar.stories.impl.ts b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
new file mode 100644
index 0000000000..6c46f75b5f
--- /dev/null
+++ b/packages/frontend/src/components/global/MkAvatar.stories.impl.ts
@@ -0,0 +1,66 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkAvatar from './MkAvatar.vue';
+const common = {
+	render(args) {
+		return {
+			components: {
+				MkAvatar,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkAvatar v-bind="props" />',
+		};
+	},
+	args: {
+		user: userDetailed,
+	},
+	decorators: [
+		(Story, context) => ({
+			// eslint-disable-next-line quotes
+			template: `<div :style="{ display: 'grid', width: '${context.args.size}px', height: '${context.args.size}px' }"><story/></div>`,
+		}),
+	],
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkAvatar>;
+export const ProfilePage = {
+	...common,
+	args: {
+		...common.args,
+		size: 120,
+		indicator: true,
+	},
+} satisfies StoryObj<typeof MkAvatar>;
+export const ProfilePageCat = {
+	...ProfilePage,
+	args: {
+		...ProfilePage.args,
+		user: {
+			...userDetailed,
+			isCat: true,
+		},
+	},
+	parameters: {
+		...ProfilePage.parameters,
+		chromatic: {
+			/* Your story couldn’t be captured because it exceeds our 25,000,000px limit. Its dimensions are 5,504,893x5,504,892px. Possible ways to resolve:
+			 * * Separate pages into components
+			 * * Minimize the number of very large elements in a story
+			 */
+			disableSnapshot: true,
+		},
+	},
+} satisfies StoryObj<typeof MkAvatar>;
diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue
index 9a21941c8d..0cc30a887f 100644
--- a/packages/frontend/src/components/global/MkAvatar.vue
+++ b/packages/frontend/src/components/global/MkAvatar.vue
@@ -148,6 +148,7 @@ watch(() => props.user.avatarBlurhash, () => {
 		width: 100%;
 		height: 100%;
 		padding: 50%;
+		pointer-events: none;
 
 		&.mask {
 			-webkit-mask:
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
new file mode 100644
index 0000000000..36ab85b579
--- /dev/null
+++ b/packages/frontend/src/components/global/MkCustomEmoji.stories.impl.ts
@@ -0,0 +1,45 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkCustomEmoji from './MkCustomEmoji.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkCustomEmoji,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkCustomEmoji v-bind="props" />',
+		};
+	},
+	args: {
+		name: 'mi',
+		url: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkCustomEmoji>;
+export const Normal = {
+	...Default,
+	args: {
+		...Default.args,
+		normal: true,
+	},
+} satisfies StoryObj<typeof MkCustomEmoji>;
+export const Missing = {
+	...Default,
+	args: {
+		name: Default.args.name,
+	},
+} satisfies StoryObj<typeof MkCustomEmoji>;
diff --git a/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
new file mode 100644
index 0000000000..65405a9bc8
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEllipsis.stories.impl.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
+import MkEllipsis from './MkEllipsis.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkEllipsis,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkEllipsis v-bind="props" />',
+		};
+	},
+	args: {
+		static: isChromatic(),
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkEllipsis>;
diff --git a/packages/frontend/src/components/global/MkEllipsis.vue b/packages/frontend/src/components/global/MkEllipsis.vue
index b3cf69c075..c8f6cd3394 100644
--- a/packages/frontend/src/components/global/MkEllipsis.vue
+++ b/packages/frontend/src/components/global/MkEllipsis.vue
@@ -1,9 +1,19 @@
 <template>
-<span :class="$style.root">
+<span :class="[$style.root, { [$style.static]: static }]">
 	<span :class="$style.dot">.</span><span :class="$style.dot">.</span><span :class="$style.dot">.</span>
 </span>
 </template>
 
+<script lang="ts" setup>
+import { } from 'vue';
+
+const props = withDefaults(defineProps<{
+	static?: boolean;
+}>(), {
+	static: false,
+});
+</script>
+
 <style lang="scss" module>
 @keyframes ellipsis {
 	0%, 80%, 100% {
@@ -15,7 +25,9 @@
 }
 
 .root {
-	
+	&.static > .dot {
+		animation-play-state: paused;
+	}
 }
 
 .dot {
diff --git a/packages/frontend/src/components/global/MkEmoji.stories.impl.ts b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
new file mode 100644
index 0000000000..f9900375f7
--- /dev/null
+++ b/packages/frontend/src/components/global/MkEmoji.stories.impl.ts
@@ -0,0 +1,31 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkEmoji from './MkEmoji.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkEmoji,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkEmoji v-bind="props" />',
+		};
+	},
+	args: {
+		emoji: '❤',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkEmoji>;
diff --git a/packages/frontend/src/components/global/MkError.stories.meta.ts b/packages/frontend/src/components/global/MkError.stories.meta.ts
new file mode 100644
index 0000000000..51d763ada7
--- /dev/null
+++ b/packages/frontend/src/components/global/MkError.stories.meta.ts
@@ -0,0 +1,5 @@
+export const argTypes = {
+	retry: {
+		action: 'retry',
+	},
+};
diff --git a/packages/frontend/src/components/global/MkLoading.stories.impl.ts b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
new file mode 100644
index 0000000000..9dcc0cdea1
--- /dev/null
+++ b/packages/frontend/src/components/global/MkLoading.stories.impl.ts
@@ -0,0 +1,60 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import isChromatic from 'chromatic/isChromatic';
+import MkLoading from './MkLoading.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkLoading,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkLoading v-bind="props" />',
+		};
+	},
+	args: {
+		static: isChromatic(),
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkLoading>;
+export const Inline = {
+	...Default,
+	args: {
+		...Default.args,
+		inline: true,
+	},
+} satisfies StoryObj<typeof MkLoading>;
+export const Colored = {
+	...Default,
+	args: {
+		...Default.args,
+		colored: true,
+	},
+} satisfies StoryObj<typeof MkLoading>;
+export const Mini = {
+	...Default,
+	args: {
+		...Default.args,
+		mini: true,
+	},
+} satisfies StoryObj<typeof MkLoading>;
+export const Em = {
+	...Default,
+	args: {
+		...Default.args,
+		em: true,
+	},
+} satisfies StoryObj<typeof MkLoading>;
diff --git a/packages/frontend/src/components/global/MkLoading.vue b/packages/frontend/src/components/global/MkLoading.vue
index 64e12e3b44..4311f9fe8a 100644
--- a/packages/frontend/src/components/global/MkLoading.vue
+++ b/packages/frontend/src/components/global/MkLoading.vue
@@ -6,7 +6,7 @@
 				<circle cx="64" cy="64" r="64" style="fill:none;stroke:currentColor;stroke-width:21.33px;"/>
 			</g>
 		</svg>
-		<svg :class="[$style.spinner, $style.fg]" viewBox="0 0 168 168" xmlns="http://www.w3.org/2000/svg">
+		<svg :class="[$style.spinner, $style.fg, { [$style.static]: static }]" viewBox="0 0 168 168" xmlns="http://www.w3.org/2000/svg">
 			<g transform="matrix(1.125,0,0,1.125,12,12)">
 				<path d="M128,64C128,28.654 99.346,0 64,0C99.346,0 128,28.654 128,64Z" style="fill:none;stroke:currentColor;stroke-width:21.33px;"/>
 			</g>
@@ -19,11 +19,13 @@
 import { } from 'vue';
 
 const props = withDefaults(defineProps<{
+	static?: boolean;
 	inline?: boolean;
 	colored?: boolean;
 	mini?: boolean;
 	em?: boolean;
 }>(), {
+	static: false,
 	inline: false,
 	colored: true,
 	mini: false,
@@ -97,5 +99,9 @@ const props = withDefaults(defineProps<{
 
 .fg {
 	animation: spinner 0.5s linear infinite;
+
+	&.static {
+		animation-play-state: paused;
+	}
 }
 </style>
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
new file mode 100644
index 0000000000..f6811b6747
--- /dev/null
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
@@ -0,0 +1,74 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.vue';
+import { within } from '@storybook/testing-library';
+import { expect } from '@storybook/jest';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkMisskeyFlavoredMarkdown,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkMisskeyFlavoredMarkdown v-bind="props" />',
+		};
+	},
+	async play({ canvasElement, args }) {
+		const canvas = within(canvasElement);
+		if (args.plain) {
+			const aiHelloMiskist = canvas.getByText('@ai *Hello*, #Miskist!');
+			await expect(aiHelloMiskist).toBeInTheDocument();
+		} else {
+			const ai = canvas.getByText('@ai');
+			await expect(ai).toBeInTheDocument();
+			await expect(ai.closest('a')).toHaveAttribute('href', '/@ai');
+			const hello = canvas.getByText('Hello');
+			await expect(hello).toBeInTheDocument();
+			await expect(hello.style.fontStyle).toBe('oblique');
+			const miskist = canvas.getByText('#Miskist');
+			await expect(miskist).toBeInTheDocument();
+			await expect(miskist).toHaveAttribute('href', args.isNote ?? true ? '/tags/Miskist' : '/user-tags/Miskist');
+		}
+		const heart = canvas.getByAltText('❤');
+		await expect(heart).toBeInTheDocument();
+		await expect(heart).toHaveAttribute('src', '/twemoji/2764.svg');
+	},
+	args: {
+		text: '@ai *Hello*, #Miskist! ❤',
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
+export const Plain = {
+	...Default,
+	args: {
+		...Default.args,
+		plain: true,
+	},
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
+export const Nowrap = {
+	...Default,
+	args: {
+		...Default.args,
+		nowrap: true,
+	},
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
+export const IsNotNote = {
+	...Default,
+	args: {
+		...Default.args,
+		isNote: false,
+	},
+} satisfies StoryObj<typeof MkMisskeyFlavoredMarkdown>;
diff --git a/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
new file mode 100644
index 0000000000..5519d60fc4
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.stories.impl.ts
@@ -0,0 +1,98 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { StoryObj } from '@storybook/vue3';
+import MkPageHeader from './MkPageHeader.vue';
+export const Empty = {
+	render(args) {
+		return {
+			components: {
+				MkPageHeader,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkPageHeader v-bind="props" />',
+		};
+	},
+	args: {
+		static: true,
+		tabs: [],
+	},
+	parameters: {
+		layout: 'centered',
+		chromatic: {
+			/* This component has animations that are implemented with JavaScript. So it's unstable to take a snapshot. */
+			disableSnapshot: true,
+		},
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const OneTab = {
+	...Empty,
+	args: {
+		...Empty.args,
+		tab: 'sometabkey',
+		tabs: [
+			{
+				key: 'sometabkey',
+				title: 'Some Tab Title',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const Icon = {
+	...OneTab,
+	args: {
+		...OneTab.args,
+		tabs: [
+			{
+				...OneTab.args.tabs[0],
+				icon: 'ti ti-home',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const IconOnly = {
+	...Icon,
+	args: {
+		...Icon.args,
+		tabs: [
+			{
+				...Icon.args.tabs[0],
+				title: undefined,
+				iconOnly: true,
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
+export const SomeTabs = {
+	...Empty,
+	args: {
+		...Empty.args,
+		tab: 'princess',
+		tabs: [
+			{
+				key: 'princess',
+				title: 'Princess',
+				icon: 'ti ti-crown',
+			},
+			{
+				key: 'fairy',
+				title: 'Fairy',
+				icon: 'ti ti-snowflake',
+			},
+			{
+				key: 'angel',
+				title: 'Angel',
+				icon: 'ti ti-feather',
+			},
+		],
+	},
+} satisfies StoryObj<typeof MkPageHeader>;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
new file mode 100644
index 0000000000..6d4460d593
--- /dev/null
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import MkPageHeader_tabs from './MkPageHeader.tabs.vue';
+void MkPageHeader_tabs;
diff --git a/packages/frontend/src/components/global/MkPageHeader.tabs.vue b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
index 42760da08f..9e1da64e61 100644
--- a/packages/frontend/src/components/global/MkPageHeader.tabs.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.tabs.vue
@@ -33,14 +33,18 @@
 <script lang="ts">
 export type Tab = {
 	key: string;
-	title: string;
-	icon?: string;
-	iconOnly?: boolean;
 	onClick?: (ev: MouseEvent) => void;
-} & {
-	iconOnly: true;
-	iccn: string;
-};
+} & (
+	| {
+			iconOnly?: false;
+			title: string;
+			icon?: string;
+		}
+	| {
+			iconOnly: true;
+			icon: string;
+		}
+);
 </script>
 
 <script lang="ts" setup>
diff --git a/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts b/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
new file mode 100644
index 0000000000..97b8cc0c5b
--- /dev/null
+++ b/packages/frontend/src/components/global/MkStickyContainer.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import MkStickyContainer from './MkStickyContainer.vue';
+void MkStickyContainer;
diff --git a/packages/frontend/src/components/global/MkTime.stories.impl.ts b/packages/frontend/src/components/global/MkTime.stories.impl.ts
new file mode 100644
index 0000000000..b72601b1ff
--- /dev/null
+++ b/packages/frontend/src/components/global/MkTime.stories.impl.ts
@@ -0,0 +1,312 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { StoryObj } from '@storybook/vue3';
+import MkTime from './MkTime.vue';
+import { i18n } from '@/i18n';
+import { dateTimeFormat } from '@/scripts/intl-const';
+const now = new Date('2023-04-01T00:00:00.000Z');
+const future = new Date(8640000000000000);
+const oneHourAgo = new Date(now.getTime() - 3600000);
+const oneDayAgo = new Date(now.getTime() - 86400000);
+const oneWeekAgo = new Date(now.getTime() - 604800000);
+const oneMonthAgo = new Date(now.getTime() - 2592000000);
+const oneYearAgo = new Date(now.getTime() - 31536000000);
+export const Empty = {
+	render(args) {
+		return {
+			components: {
+				MkTime,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkTime v-bind="props" />',
+		};
+	},
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.invalid);
+	},
+	args: {
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeFuture = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.future);
+	},
+	args: {
+		...Empty.args,
+		time: future,
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteFuture = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: future,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailFuture = {
+	...Empty,
+	async play(context) {
+		await AbsoluteFuture.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeFuture.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: future,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeNow = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.ts._ago.justNow);
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteNow = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailNow = {
+	...Empty,
+	async play(context) {
+		await AbsoluteNow.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeNow.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: now,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneHourAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.hoursAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneHourAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneHourAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneHourAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneHourAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneHourAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneDayAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.daysAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneDayAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneDayAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneDayAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneDayAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneDayAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneWeekAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.weeksAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneWeekAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneWeekAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneWeekAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneWeekAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneWeekAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneMonthAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.monthsAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneMonthAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneMonthAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneMonthAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneMonthAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneMonthAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const RelativeOneYearAgo = {
+	...Empty,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(i18n.t('_ago.yearsAgo', { n: 1 }));
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'relative',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const AbsoluteOneYearAgo = {
+	...Empty,
+	async play({ canvasElement, args }) {
+		await expect(canvasElement).toHaveTextContent(dateTimeFormat.format(args.time));
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'absolute',
+	},
+} satisfies StoryObj<typeof MkTime>;
+export const DetailOneYearAgo = {
+	...Empty,
+	async play(context) {
+		await AbsoluteOneYearAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(' (');
+		await RelativeOneYearAgo.play(context);
+		await expect(context.canvasElement).toHaveTextContent(')');
+	},
+	args: {
+		...Empty.args,
+		time: oneYearAgo,
+		origin: now,
+		mode: 'detail',
+	},
+} satisfies StoryObj<typeof MkTime>;
diff --git a/packages/frontend/src/components/global/MkTime.vue b/packages/frontend/src/components/global/MkTime.vue
index 3fa8bb9adc..99169512db 100644
--- a/packages/frontend/src/components/global/MkTime.vue
+++ b/packages/frontend/src/components/global/MkTime.vue
@@ -14,8 +14,10 @@ import { dateTimeFormat } from '@/scripts/intl-const';
 
 const props = withDefaults(defineProps<{
 	time: Date | string | number | null;
+	origin?: Date | null;
 	mode?: 'relative' | 'absolute' | 'detail';
 }>(), {
+	origin: null,
 	mode: 'relative',
 });
 
@@ -25,7 +27,7 @@ const _time = props.time == null ? NaN :
 const invalid = Number.isNaN(_time);
 const absolute = !invalid ? dateTimeFormat.format(_time) : i18n.ts._ago.invalid;
 
-let now = $ref((new Date()).getTime());
+let now = $ref((props.origin ?? new Date()).getTime());
 const relative = $computed<string>(() => {
 	if (props.mode === 'absolute') return ''; // absoluteではrelativeを使わないので計算しない
 	if (invalid) return i18n.ts._ago.invalid;
@@ -46,7 +48,7 @@ const relative = $computed<string>(() => {
 let tickId: number;
 
 function tick() {
-	now = (new Date()).getTime();
+	now = props.origin ?? (new Date()).getTime();
 	const ago = (now - _time) / 1000/*ms*/;
 	const next = ago < 60 ? 10000 : ago < 3600 ? 60000 : 180000;
 
diff --git a/packages/frontend/src/components/global/MkUrl.stories.impl.ts b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
new file mode 100644
index 0000000000..2344c4851a
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUrl.stories.impl.ts
@@ -0,0 +1,77 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import { rest } from 'msw';
+import { commonHandlers } from '../../../.storybook/mocks';
+import MkUrl from './MkUrl.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkUrl,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkUrl v-bind="props">Text</MkUrl>',
+		};
+	},
+	async play({ canvasElement }) {
+		const canvas = within(canvasElement);
+		const a = canvas.getByRole<HTMLAnchorElement>('link');
+		await expect(a).toHaveAttribute('href', 'https://misskey-hub.net/');
+		await userEvent.hover(a);
+		/*
+		await tick(); // FIXME: wait for network request
+		const anchors = canvas.getAllByRole<HTMLAnchorElement>('link');
+		const popup = anchors.find(anchor => anchor !== a)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion
+		await expect(popup).toBeInTheDocument();
+		await expect(popup).toHaveAttribute('href', 'https://misskey-hub.net/');
+		await expect(popup).toHaveTextContent('Misskey Hub');
+		await expect(popup).toHaveTextContent('Misskeyはオープンソースの分散型ソーシャルネットワーキングプラットフォームです。');
+		await expect(popup).toHaveTextContent('misskey-hub.net');
+		const icon = within(popup).getByRole('img');
+		await expect(icon).toBeInTheDocument();
+		await expect(icon).toHaveAttribute('src', 'https://misskey-hub.net/favicon.ico');
+		 */
+		await userEvent.unhover(a);
+	},
+	args: {
+		url: 'https://misskey-hub.net/',
+	},
+	parameters: {
+		layout: 'centered',
+		msw: {
+			handlers: [
+				...commonHandlers,
+				rest.get('/url', (req, res, ctx) => {
+					return res(ctx.json({
+						title: 'Misskey Hub',
+						icon: 'https://misskey-hub.net/favicon.ico',
+						description: 'Misskeyはオープンソースの分散型ソーシャルネットワーキングプラットフォームです。',
+						thumbnail: null,
+						player: {
+							url: null,
+							width: null,
+							height: null,
+							allow: [],
+						},
+						sitename: 'misskey-hub.net',
+						sensitive: false,
+						url: 'https://misskey-hub.net/',
+					}));
+				}),
+			],
+		},
+	},
+} satisfies StoryObj<typeof MkUrl>;
diff --git a/packages/frontend/src/components/global/MkUserName.stories.impl.ts b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
new file mode 100644
index 0000000000..41b1567a6f
--- /dev/null
+++ b/packages/frontend/src/components/global/MkUserName.stories.impl.ts
@@ -0,0 +1,57 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import { expect } from '@storybook/jest';
+import { userEvent, within } from '@storybook/testing-library';
+import { StoryObj } from '@storybook/vue3';
+import { userDetailed } from '../../../.storybook/fakes';
+import MkUserName from './MkUserName.vue';
+export const Default = {
+	render(args) {
+		return {
+			components: {
+				MkUserName,
+			},
+			setup() {
+				return {
+					args,
+				};
+			},
+			computed: {
+				props() {
+					return {
+						...this.args,
+					};
+				},
+			},
+			template: '<MkUserName v-bind="props"/>',
+		};
+	},
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(userDetailed.name);
+	},
+	args: {
+		user: userDetailed,
+	},
+	parameters: {
+		layout: 'centered',
+	},
+} satisfies StoryObj<typeof MkUserName>;
+export const Anonymous = {
+	...Default,
+	async play({ canvasElement }) {
+		await expect(canvasElement).toHaveTextContent(userDetailed.username);
+	},
+	args: {
+		...Default.args,
+		user: {
+			...userDetailed,
+			name: null,
+		},
+	},
+} satisfies StoryObj<typeof MkUserName>;
+export const Wrap = {
+	...Default,
+	args: {
+		...Default.args,
+		nowrap: false,
+	},
+} satisfies StoryObj<typeof MkUserName>;
diff --git a/packages/frontend/src/components/global/RouterView.stories.impl.ts b/packages/frontend/src/components/global/RouterView.stories.impl.ts
new file mode 100644
index 0000000000..7910b8b3cb
--- /dev/null
+++ b/packages/frontend/src/components/global/RouterView.stories.impl.ts
@@ -0,0 +1,3 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+import RouterView from './RouterView.vue';
+void RouterView;
diff --git a/packages/frontend/src/index.mdx b/packages/frontend/src/index.mdx
new file mode 100644
index 0000000000..e30dea2928
--- /dev/null
+++ b/packages/frontend/src/index.mdx
@@ -0,0 +1,12 @@
+import { Meta } from '@storybook/blocks'
+
+<Meta title="index" />
+
+# Welcome to Misskey Storybook
+
+This project uses [Storybook](https://storybook.js.org/) to develop and document components.
+You can find more information about the usage of Storybook in this project in the CONTRIBUTING.md file placed in the root of this repository.
+
+The Misskey Storybook is under development and not all components are documented yet.
+Contributions are welcome! Please refer to [#10336](https://github.com/misskey-dev/misskey/issues/10336) for more information.
+Thank you for your support!
diff --git a/packages/frontend/src/pages/user/activity.following.vue b/packages/frontend/src/pages/user/activity.following.vue
index 54360024f3..1c7c991aac 100644
--- a/packages/frontend/src/pages/user/activity.following.vue
+++ b/packages/frontend/src/pages/user/activity.following.vue
@@ -77,7 +77,10 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.heatmap.vue b/packages/frontend/src/pages/user/activity.heatmap.vue
index 2dcb754c9b..ada0166eda 100644
--- a/packages/frontend/src/pages/user/activity.heatmap.vue
+++ b/packages/frontend/src/pages/user/activity.heatmap.vue
@@ -113,6 +113,9 @@ async function renderChart() {
 					const a = c.chart.chartArea ?? {};
 					return (a.bottom - a.top) / 7 - marginEachCell;
 				},
+			/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+			}] satisfies ChartData[],
+			 */
 			}],
 		},
 		options: {
diff --git a/packages/frontend/src/pages/user/activity.notes.vue b/packages/frontend/src/pages/user/activity.notes.vue
index 7dd02ad6d4..8a946aebac 100644
--- a/packages/frontend/src/pages/user/activity.notes.vue
+++ b/packages/frontend/src/pages/user/activity.notes.vue
@@ -76,7 +76,10 @@ async function renderChart() {
 			borderRadius: 4,
 			barPercentage: 0.9,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/pages/user/activity.pv.vue b/packages/frontend/src/pages/user/activity.pv.vue
index 6a7506e388..0e9c581e1e 100644
--- a/packages/frontend/src/pages/user/activity.pv.vue
+++ b/packages/frontend/src/pages/user/activity.pv.vue
@@ -77,7 +77,10 @@ async function renderChart() {
 			barPercentage: 0.7,
 			categoryPercentage: 0.7,
 			fill: true,
-		} satisfies ChartDataset, extra);
+		/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
+		} satisfies ChartData, extra);
+		 */
+		}, extra);
 	}
 
 	chartInstance = new Chart(chartEl, {
diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index c77f8e12d3..25e8b71a12 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -443,11 +443,14 @@ export const ACHIEVEMENT_BADGES = {
 		bg: 'linear-gradient(0deg, rgb(144, 224, 255), rgb(255, 168, 252))',
 		frame: 'bronze',
 	},
+/* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107>
 } as const satisfies Record<typeof ACHIEVEMENT_TYPES[number], {
 	img: string;
 	bg: string | null;
 	frame: 'bronze' | 'silver' | 'gold' | 'platinum';
 }>;
+ */
+} as const;
 
 export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 
diff --git a/packages/frontend/src/scripts/test-utils.ts b/packages/frontend/src/scripts/test-utils.ts
new file mode 100644
index 0000000000..3e018f2d7e
--- /dev/null
+++ b/packages/frontend/src/scripts/test-utils.ts
@@ -0,0 +1,6 @@
+/// <reference types="@testing-library/jest-dom"/>
+
+export async function tick(): Promise<void> {
+	// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+	await new Promise((globalThis.requestIdleCallback ?? setTimeout) as never);
+}
diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json
index 54e5219b56..4d582daa3c 100644
--- a/packages/frontend/tsconfig.json
+++ b/packages/frontend/tsconfig.json
@@ -43,5 +43,8 @@
 		".eslintrc.js",
 		"./**/*.ts",
 		"./**/*.vue"
+	],
+	"exclude": [
+		".storybook/**/*",
 	]
 }
diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts
index 7e21b3d850..425f3aa45d 100644
--- a/packages/frontend/vite.config.ts
+++ b/packages/frontend/vite.config.ts
@@ -1,7 +1,6 @@
 import path from 'path';
 import pluginVue from '@vitejs/plugin-vue';
-import { defineConfig } from 'vite';
-import { configDefaults as vitestConfigDefaults } from 'vitest/config';
+import { type UserConfig, defineConfig } from 'vite';
 
 import locales from '../../locales';
 import meta from '../../package.json';
@@ -38,7 +37,7 @@ function toBase62(n: number): string {
 	return result;
 }
 
-export default defineConfig(({ command, mode }) => {
+export function getConfig(): UserConfig {
 	return {
 		base: '/vite/',
 
@@ -62,7 +61,7 @@ export default defineConfig(({ command, mode }) => {
 
 		css: {
 			modules: {
-				generateScopedName: (name, filename, css) => {
+				generateScopedName(name, filename, _css): string {
 					const id = (path.relative(__dirname, filename.split('?')[0]) + '-' + name).replace(/[\\\/\.\?&=]/g, '-').replace(/(src-|vue-)/g, '');
 					if (process.env.NODE_ENV === 'production') {
 						return 'x' + toBase62(hash(id)).substring(0, 4);
@@ -132,4 +131,8 @@ export default defineConfig(({ command, mode }) => {
 			},
 		},
 	};
-});
+}
+
+const config = defineConfig(({ command, mode }) => getConfig());
+
+export default config;
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index 1fac6a6781..445602c456 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -21,11 +21,11 @@
 	},
 	"devDependencies": {
 		"@microsoft/api-extractor": "7.34.4",
+		"@swc/jest": "0.2.24",
 		"@types/jest": "29.5.0",
 		"@types/node": "18.15.11",
 		"@typescript-eslint/eslint-plugin": "5.57.0",
 		"@typescript-eslint/parser": "5.57.0",
-		"@swc/jest": "0.2.24",
 		"eslint": "8.37.0",
 		"jest": "^29.5.0",
 		"jest-fetch-mock": "^3.0.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 30fadac605..5d08fb292d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -763,12 +763,69 @@ importers:
         specifier: next
         version: 4.1.0(vue@3.2.47)
     devDependencies:
+      '@storybook/addon-essentials':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-interactions':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-links':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-storysource':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addons':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/blocks':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/jest':
+        specifier: 0.0.10
+        version: 0.0.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/react':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
+      '@storybook/react-vite':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)
+      '@storybook/testing-library':
+        specifier: 0.0.14-next.1
+        version: 0.0.14-next.1
+      '@storybook/theming':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      '@storybook/vue3':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(vue@3.2.47)
+      '@storybook/vue3-vite':
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47)
+      '@testing-library/jest-dom':
+        specifier: ^5.16.5
+        version: 5.16.5
       '@testing-library/vue':
         specifier: ^6.6.1
         version: 6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47)
       '@types/escape-regexp':
         specifier: 0.0.1
         version: 0.0.1
+      '@types/estree':
+        specifier: ^1.0.0
+        version: 1.0.0
       '@types/gulp':
         specifier: 4.0.10
         version: 4.0.10
@@ -790,6 +847,9 @@ importers:
       '@types/seedrandom':
         specifier: 3.0.5
         version: 3.0.5
+      '@types/testing-library__jest-dom':
+        specifier: ^5.14.5
+        version: 5.14.5
       '@types/throttle-debounce':
         specifier: 5.0.0
         version: 5.0.0
@@ -817,6 +877,15 @@ importers:
       '@vue/runtime-core':
         specifier: 3.2.47
         version: 3.2.47
+      astring:
+        specifier: ^1.8.4
+        version: 1.8.4
+      chokidar-cli:
+        specifier: ^3.0.0
+        version: 3.0.0
+      chromatic:
+        specifier: ^6.17.2
+        version: 6.17.2
       cross-env:
         specifier: 7.0.3
         version: 7.0.3
@@ -832,12 +901,36 @@ importers:
       eslint-plugin-vue:
         specifier: 9.10.0
         version: 9.10.0(eslint@8.37.0)
+      fast-glob:
+        specifier: ^3.2.12
+        version: 3.2.12
       happy-dom:
         specifier: 8.9.0
         version: 8.9.0
+      msw:
+        specifier: ^1.1.0
+        version: 1.1.0(typescript@5.0.2)
+      msw-storybook-addon:
+        specifier: ^1.8.0
+        version: 1.8.0(msw@1.1.0)
+      prettier:
+        specifier: ^2.8.4
+        version: 2.8.4
+      react:
+        specifier: ^18.2.0
+        version: 18.2.0
+      react-dom:
+        specifier: ^18.2.0
+        version: 18.2.0(react@18.2.0)
       start-server-and-test:
         specifier: 2.0.0
         version: 2.0.0
+      storybook:
+        specifier: 7.0.0-rc.10
+        version: 7.0.0-rc.10
+      storybook-addon-misskey-theme:
+        specifier: github:misskey-dev/storybook-addon-misskey-theme
+        version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0)
       summaly:
         specifier: github:misskey-dev/summaly
         version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
@@ -939,6 +1032,10 @@ importers:
 
 packages:
 
+  /@adobe/css-tools@4.2.0:
+    resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==}
+    dev: true
+
   /@ampproject/remapping@2.2.0:
     resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
     engines: {node: '>=6.0.0'}
@@ -947,6 +1044,19 @@ packages:
       '@jridgewell/trace-mapping': 0.3.17
     dev: true
 
+  /@arcanis/slice-ansi@1.1.1:
+    resolution: {integrity: sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==}
+    dependencies:
+      grapheme-splitter: 1.0.4
+    dev: true
+
+  /@aw-web-design/x-default-browser@1.4.88:
+    resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==}
+    hasBin: true
+    dependencies:
+      default-browser-id: 3.0.0
+    dev: true
+
   /@aws-crypto/crc32@3.0.0:
     resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==}
     dependencies:
@@ -1925,20 +2035,20 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/core@7.20.12:
-    resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==}
+  /@babel/core@7.21.3:
+    resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@ampproject/remapping': 2.2.0
       '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.20.7
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12)
-      '@babel/helper-module-transforms': 7.20.11
-      '@babel/helpers': 7.20.7
-      '@babel/parser': 7.20.7
+      '@babel/generator': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helpers': 7.21.0
+      '@babel/parser': 7.21.3
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
       convert-source-map: 1.9.0
       debug: 4.3.4(supports-color@8.1.1)
       gensync: 1.0.0-beta.2
@@ -1948,58 +2058,134 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/generator@7.20.7:
-    resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==}
+  /@babel/generator@7.21.3:
+    resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
       '@jridgewell/gen-mapping': 0.3.2
+      '@jridgewell/trace-mapping': 0.3.17
       jsesc: 2.5.2
     dev: true
 
-  /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12):
+  /@babel/helper-annotate-as-pure@7.18.6:
+    resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9:
+    resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-explode-assignable-expression': 7.18.6
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3):
     resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
       '@babel/compat-data': 7.20.10
-      '@babel/core': 7.20.12
-      '@babel/helper-validator-option': 7.18.6
-      browserslist: 4.21.4
+      '@babel/core': 7.21.3
+      '@babel/helper-validator-option': 7.21.0
+      browserslist: 4.21.5
       lru-cache: 5.1.1
       semver: 6.3.0
     dev: true
 
+  /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-member-expression-to-functions': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/helper-split-export-declaration': 7.18.6
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      regexpu-core: 5.3.2
+    dev: true
+
+  /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
+    peerDependencies:
+      '@babel/core': ^7.4.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      debug: 4.3.4(supports-color@8.1.1)
+      lodash.debounce: 4.0.8
+      resolve: 1.22.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/helper-environment-visitor@7.18.9:
     resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-function-name@7.19.0:
-    resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
+  /@babel/helper-explode-assignable-expression@7.18.6:
+    resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-function-name@7.21.0:
+    resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-hoist-variables@7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-member-expression-to-functions@7.21.0:
+    resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-module-imports@7.18.6:
     resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
-  /@babel/helper-module-transforms@7.20.11:
-    resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==}
+  /@babel/helper-module-transforms@7.21.2:
+    resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-environment-visitor': 7.18.9
@@ -2008,29 +2194,72 @@ packages:
       '@babel/helper-split-export-declaration': 7.18.6
       '@babel/helper-validator-identifier': 7.19.1
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
 
+  /@babel/helper-optimise-call-expression@7.18.6:
+    resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
+    dev: true
+
   /@babel/helper-plugin-utils@7.20.2:
     resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
     engines: {node: '>=6.9.0'}
     dev: true
 
+  /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-wrap-function': 7.20.5
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-replace-supers@7.20.7:
+    resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-member-expression-to-functions': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/helper-simple-access@7.20.2:
     resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/helper-skip-transparent-expression-wrappers@7.20.0:
+    resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-split-export-declaration@7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@babel/helper-string-parser@7.19.4:
@@ -2041,18 +2270,30 @@ packages:
     resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-option@7.18.6:
-    resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
+  /@babel/helper-validator-option@7.21.0:
+    resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helpers@7.20.7:
-    resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==}
+  /@babel/helper-wrap-function@7.20.5:
+    resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-function-name': 7.21.0
+      '@babel/template': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helpers@7.21.0:
+    resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -2071,137 +2312,972 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
 
-  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12):
+  /@babel/parser@7.21.3:
+    resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/types': 7.21.3
+
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.13.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.12.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.12):
+  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3):
     resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12):
+  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3):
+    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.20.12):
+  /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.12):
+  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.12):
+  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3):
     resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.12):
+  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3):
     resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12):
+  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3):
+    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3):
     resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.20.12):
+  /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
+  /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-environment-visitor': 7.18.9
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-optimise-call-expression': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+      '@babel/helper-split-export-declaration': 7.18.6
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/template': 7.20.7
+    dev: true
+
+  /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-function-name': 7.21.0
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.3):
+    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-simple-access': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.3):
+    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-hoist-variables': 7.18.6
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-identifier': 7.19.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-module-transforms': 7.21.2
+      '@babel/helper-plugin-utils': 7.20.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3):
+    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-replace-supers': 7.20.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-module-imports': 7.18.6
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
+      '@babel/types': 7.21.3
+    dev: true
+
+  /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3):
+    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      regenerator-transform: 0.15.1
+    dev: true
+
+  /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.3):
+    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+    dev: true
+
+  /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3):
+    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-annotate-as-pure': 7.18.6
+      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3):
+    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+    dev: true
+
+  /@babel/preset-env@7.20.2(@babel/core@7.21.3):
+    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-modules': 0.1.5(@babel/core@7.21.3)
+      '@babel/types': 7.21.3
+      babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
+      babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
+      babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
+      core-js-compat: 3.29.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/preset-flow@7.18.6(@babel/core@7.21.3):
+    resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.3)
+    dev: true
+
+  /@babel/preset-modules@0.1.5(@babel/core@7.21.3):
+    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/types': 7.21.3
+      esutils: 2.0.3
+    dev: true
+
+  /@babel/preset-typescript@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/register@7.21.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      clone-deep: 4.0.1
+      find-cache-dir: 2.1.0
+      make-dir: 2.1.0
+      pirates: 4.0.5
+      source-map-support: 0.5.21
+    dev: true
+
+  /@babel/regjsgen@0.8.0:
+    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+    dev: true
+
   /@babel/runtime@7.20.7:
     resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==}
     engines: {node: '>=6.9.0'}
@@ -2213,36 +3289,40 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.18.6
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
     dev: true
 
-  /@babel/traverse@7.20.12:
-    resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==}
+  /@babel/traverse@7.21.3:
+    resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.20.7
+      '@babel/generator': 7.21.3
       '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.19.0
+      '@babel/helper-function-name': 7.21.0
       '@babel/helper-hoist-variables': 7.18.6
       '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       debug: 4.3.4(supports-color@8.1.1)
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/types@7.20.7:
-    resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
+  /@babel/types@7.21.3:
+    resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-string-parser': 7.19.4
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
+  /@base2/pretty-print-object@1.0.1:
+    resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
+    dev: true
+
   /@bcoe/v8-coverage@0.2.3:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: true
@@ -2425,6 +3505,19 @@ packages:
       universalify: 0.1.2
     dev: false
 
+  /@discoveryjs/json-ext@0.5.7:
+    resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+    engines: {node: '>=10.0.0'}
+    dev: true
+
+  /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0):
+    resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==}
+    peerDependencies:
+      react: '>=16.8.0'
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /@esbuild/android-arm64@0.17.14:
     resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==}
     engines: {node: '>=12'}
@@ -2638,6 +3731,10 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
+  /@fal-works/esbuild-plugin-global-externals@2.1.2:
+    resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
+    dev: true
+
   /@fastify/accept-negotiator@1.0.0:
     resolution: {integrity: sha512-4R/N2KfYeld7A5LGkai+iUFMahXcxxYbDp+XS2B1yuL3cdmZLJ9TlCnNzT3q5xFTqsYm0GPpinLUwfSwjcVjyA==}
     engines: {node: '>=14'}
@@ -2842,7 +3939,7 @@ packages:
       chalk: 4.1.2
       ci-info: 3.7.1
       exit: 0.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-changed-files: 29.5.0
       jest-config: 29.5.0(@types/node@18.15.11)
       jest-haste-map: 29.5.0
@@ -2943,7 +4040,7 @@ packages:
       collect-v8-coverage: 1.0.1
       exit: 0.1.2
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       istanbul-lib-coverage: 3.2.0
       istanbul-lib-instrument: 5.2.1
       istanbul-lib-report: 3.0.0
@@ -2980,7 +4077,7 @@ packages:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.17
       callsites: 3.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: true
 
   /@jest/test-result@29.5.0:
@@ -2998,7 +4095,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/test-result': 29.5.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       slash: 3.0.0
     dev: true
@@ -3007,14 +4104,14 @@ packages:
     resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/types': 29.5.0
       '@jridgewell/trace-mapping': 0.3.17
       babel-plugin-istanbul: 6.1.1
       chalk: 4.1.2
       convert-source-map: 2.0.0
       fast-json-stable-stringify: 2.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-regex-util: 29.4.3
       jest-util: 29.5.0
@@ -3049,6 +4146,23 @@ packages:
       chalk: 4.1.2
     dev: true
 
+  /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.0.2)(vite@4.2.1):
+    resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==}
+    peerDependencies:
+      typescript: '>= 4.3.x'
+      vite: ^3.0.0 || ^4.0.0
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      glob: 7.2.3
+      glob-promise: 4.2.2(glob@7.2.3)
+      magic-string: 0.27.0
+      react-docgen-typescript: 2.2.2(typescript@5.0.2)
+      typescript: 5.0.2
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+    dev: true
+
   /@jridgewell/gen-mapping@0.1.1:
     resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
     engines: {node: '>=6.0.0'}
@@ -3089,6 +4203,10 @@ packages:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
 
+  /@juggle/resize-observer@3.4.0:
+    resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+    dev: true
+
   /@kurkle/color@0.3.2:
     resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
     dev: false
@@ -3121,6 +4239,16 @@ packages:
     dev: false
     optional: true
 
+  /@mdx-js/react@2.3.0(react@18.2.0):
+    resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
+    peerDependencies:
+      react: '>=16'
+    dependencies:
+      '@types/mdx': 2.0.3
+      '@types/react': 18.0.28
+      react: 18.2.0
+    dev: true
+
   /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.11):
     resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==}
     dependencies:
@@ -3220,6 +4348,38 @@ packages:
     requiresBuild: true
     optional: true
 
+  /@mswjs/cookies@0.2.2:
+    resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==}
+    engines: {node: '>=14'}
+    dependencies:
+      '@types/set-cookie-parser': 2.4.2
+      set-cookie-parser: 2.5.1
+    dev: true
+
+  /@mswjs/interceptors@0.17.9:
+    resolution: {integrity: sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==}
+    engines: {node: '>=14'}
+    dependencies:
+      '@open-draft/until': 1.0.3
+      '@types/debug': 4.1.7
+      '@xmldom/xmldom': 0.8.6
+      debug: 4.3.4(supports-color@8.1.1)
+      headers-polyfill: 3.1.2
+      outvariant: 1.3.0
+      strict-event-emitter: 0.2.8
+      web-encoding: 1.1.5
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@ndelangen/get-tarball@3.0.7:
+    resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==}
+    dependencies:
+      gunzip-maybe: 1.4.2
+      pump: 3.0.0
+      tar-fs: 2.1.1
+    dev: true
+
   /@nestjs/common@9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0):
     resolution: {integrity: sha512-NtrUG2VgCbhmZEO1yRt/Utq16uFRV+xeHAOtdYIsfHGG0ssAV2lVLlvFFAQYh0SQ+KuYY1Gsxd3GK2JFoJCNqQ==}
     peerDependencies:
@@ -3356,6 +4516,10 @@ packages:
       - encoding
     dev: false
 
+  /@open-draft/until@1.0.3:
+    resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==}
+    dev: true
+
   /@peertube/http-signature@1.7.0:
     resolution: {integrity: sha512-aGQIwo6/sWtyyqhVK4e1MtxYz4N1X8CNt6SOtCc+Wnczs5S5ONaLHDDR8LYaGn0MgOwvGgXyuZ5sJIfd7iyoUw==}
     engines: {node: '>=0.10'}
@@ -3440,6 +4604,14 @@ packages:
       rollup: 3.20.2
     dev: false
 
+  /@rollup/pluginutils@4.2.1:
+    resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
+    engines: {node: '>= 8.0.0'}
+    dependencies:
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+    dev: true
+
   /@rollup/pluginutils@5.0.2(rollup@3.20.2):
     resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
     engines: {node: '>=14.0.0'}
@@ -3514,7 +4686,6 @@ packages:
   /@sindresorhus/is@4.6.0:
     resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
     engines: {node: '>=10'}
-    dev: false
 
   /@sindresorhus/is@5.3.0:
     resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
@@ -3554,10 +4725,1242 @@ packages:
     resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==}
     dev: true
 
+  /@snyk/dep-graph@2.6.0:
+    resolution: {integrity: sha512-9NPk7cTvDNA90NyNQvh87LYKgkCoD67i+FGdRpwA0/CL59RRY7cG37RTFe++Y3ZALxpYK1sLNzU+yeB7vzVhqQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      event-loop-spinner: 2.2.0
+      lodash.clone: 4.5.0
+      lodash.constant: 3.0.0
+      lodash.filter: 4.6.0
+      lodash.foreach: 4.5.0
+      lodash.isempty: 4.4.0
+      lodash.isequal: 4.5.0
+      lodash.isfunction: 3.0.9
+      lodash.isundefined: 3.0.1
+      lodash.map: 4.6.0
+      lodash.reduce: 4.6.0
+      lodash.size: 4.2.0
+      lodash.transform: 4.6.0
+      lodash.union: 4.6.0
+      lodash.values: 4.3.0
+      object-hash: 3.0.0
+      packageurl-js: 1.0.1
+      semver: 7.3.8
+      tslib: 2.5.0
+    dev: true
+
+  /@snyk/graphlib@2.1.9-patch.3:
+    resolution: {integrity: sha512-bBY9b9ulfLj0v2Eer0yFYa3syVeIxVKl2EpxSrsVeT4mjA0CltZyHsF0JjoaGXP27nItTdJS5uVsj1NA+3aE+Q==}
+    dependencies:
+      lodash.clone: 4.5.0
+      lodash.constant: 3.0.0
+      lodash.filter: 4.6.0
+      lodash.foreach: 4.5.0
+      lodash.has: 4.5.2
+      lodash.isempty: 4.4.0
+      lodash.isfunction: 3.0.9
+      lodash.isundefined: 3.0.1
+      lodash.keys: 4.2.0
+      lodash.map: 4.6.0
+      lodash.reduce: 4.6.0
+      lodash.size: 4.2.0
+      lodash.transform: 4.6.0
+      lodash.union: 4.6.0
+      lodash.values: 4.3.0
+    dev: true
+
   /@sqltools/formatter@1.2.5:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
 
+  /@storybook/addon-actions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-n7QVyN4qaMMjuu2HyT94VO8DklCgQLqw3tHVMZgSOUEtK5JhS5+OqPCWt1juwQjNyQiDqjrVwrkbJNbuMld4IA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      dequal: 2.0.3
+      lodash: 4.17.21
+      polished: 4.2.2
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-inspector: 6.0.1(react@18.2.0)
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      uuid-browser: 3.1.0
+    dev: true
+
+  /@storybook/addon-backgrounds@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-7hW961WzTV29jbVM051IzN7pNYTRrk5njDMV6eMsKD7KyzGDiqBAX3QuXnv95s8MLWUKSee7UZa4DUgQYfjxRg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-controls@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-25lH3wRmCHtW4N9PN9v12XsCttpi8rU80ZL+qzlAvak/bmdT7xXidNi9MTZHDZxbqDeBcs8N49wbymqixvEfMQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      lodash: 4.17.21
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-docs@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-TT85AUqPRqH9Ry9Y80aVI+GoRCyLYC4xg0hWpNfhP3vdez4c2cpTHVGKY1aUIes0blj/iLd5eWv0IpAO9Jmg9g==}
+    peerDependencies:
+      '@storybook/mdx1-csf': '>=1.0.0-0'
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      '@storybook/mdx1-csf':
+        optional: true
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3)
+      '@jest/transform': 29.5.0
+      '@mdx-js/react': 2.3.0(react@18.2.0)
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/csf-plugin': 7.0.0-rc.10
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/mdx2-csf': 1.0.0-next.7
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/postinstall': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      fs-extra: 11.1.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      remark-external-links: 8.0.0
+      remark-slug: 6.1.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-essentials@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-a4Tnfu+v1yneou2oYrDikAmNHsv4z7jAjyS4npuJTEW2a1WW+WPw8340BfZBI/y89nFYM6zyZGqy26Gie/QqVA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/addon-actions': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-backgrounds': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-controls': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-docs': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-highlight': 7.0.0-rc.10
+      '@storybook/addon-measure': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-outline': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-toolbars': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-viewport': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - '@storybook/mdx1-csf'
+      - supports-color
+    dev: true
+
+  /@storybook/addon-highlight@7.0.0-rc.10:
+    resolution: {integrity: sha512-AvCElbBqs2nS6W5wh79zkeRINEAL3LH3RFcT3oLFwSR5sI3NiWAuADN37XK+HN2RGf6E6Z7/ue3EcqELZAgCLw==}
+    dependencies:
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.10
+    dev: true
+
+  /@storybook/addon-interactions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-6MdBhlZ+vmS7tPoHPZn8hB5BJOw38ii670TvTy005UGj92+VeQRqlf9gVT5X7vnynmq6h/sj8MgSkSuqxL+3XA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/instrumenter': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      jest-mock: 27.5.1
+      polished: 4.2.2
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/addon-links@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Xgrm7o4RAqdnLwh/wGKyk7tL12eqQDLiyR2uahQrNUYG+MFz9hJCHzbBs/pVcOW2gdHRmdYMD6ZrZsk4/NehLA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-measure@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-GRjJPmjOcG0vLfJ5HvCoXq6GTjgR/Yxe8IXiC84aoUcwFTzMBHOb8J7doAY30SOqfuqBM3MTmTi7PBCHhFY6Cw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/addon-outline@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Om+MFhkROJRtxHlVJ+DpLg+ROzdtFyNtWXgkQVH9YAo44SBkrBJbAAUj+0XmeWxr2gO3HEdLhRS4whoWBKAVbg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/addon-storysource@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-wJnPzQU5ZMxL9aK+gfi155pTXdXqSnWIMoVWx0HQXXhhXJNbT5l+y1T+VEC/8hcgqcj709MZAvGl48xmgL/qlQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/source-loader': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      estraverse: 5.3.0
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-syntax-highlighter: 15.5.0(react@18.2.0)
+    dev: true
+
+  /@storybook/addon-toolbars@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-zpCFJKO5TOfEcVPRWj9oyftgsONJltFndLVtuWwVGaILcL0bGSahFtVhtwen3geCm+mi3AISgmsbCz5ABbsPyg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/addon-viewport@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-aAEp2TEFSTjVmAfpWll3Kb0/tMFezWVEGI3WKlx2M5ladEC+jDygZrGovb4BpnknDQaHkrN0s9dsjUWTLmslww==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      memoizerific: 1.11.3
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/addons@6.5.16(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/api': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/channels': 6.5.16
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      '@storybook/csf': 0.0.2--canary.4566f4d.1
+      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@types/webpack-env': 1.18.0
+      core-js: 3.29.1
+      global: 4.4.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      regenerator-runtime: 0.13.11
+    dev: true
+
+  /@storybook/addons@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-3funGKp6w/uqrTl/0Vsz/oTMmOziSl+JEotjf0G5SBJfaa6gBaz2feddUcRl47I9MNfRYRV01m5a4bCR1QJnwQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/api@6.5.16(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 6.5.16
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      '@storybook/csf': 0.0.2--canary.4566f4d.1
+      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/semver': 7.3.2
+      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      core-js: 3.29.1
+      fast-deep-equal: 3.1.3
+      global: 4.4.0
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      regenerator-runtime: 0.13.11
+      store2: 2.14.2
+      telejson: 6.0.8
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/blocks@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-E+v4EjHaSaHbFK2hiFcBW3X2Yz8+xANmioT94jr2AxvywAELMh5eOLByFwVdNK7e9umv7Qo2/icNvAzpaJdmrw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      '@types/lodash': 4.14.191
+      color-convert: 2.0.1
+      dequal: 2.0.3
+      lodash: 4.17.21
+      markdown-to-jsx: 7.2.0(react@18.2.0)
+      memoizerific: 1.11.3
+      polished: 4.2.2
+      react: 18.2.0
+      react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0)
+      react-dom: 18.2.0(react@18.2.0)
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/builder-manager@7.0.0-rc.10:
+    resolution: {integrity: sha512-uAlbCZcbtVNQOSqzeddGG6Xdrz6cNmXbrV9aN1Jbua7HPAvq/p4SenJuf9YQLt7i2KAkMsNLcfM5kf9HHyPzIw==}
+    dependencies:
+      '@fal-works/esbuild-plugin-global-externals': 2.1.2
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/manager': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@types/ejs': 3.1.2
+      '@types/find-cache-dir': 3.2.1
+      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.14)
+      browser-assert: 1.2.1
+      ejs: 3.1.8
+      esbuild: 0.17.14
+      esbuild-plugin-alias: 0.2.1
+      express: 4.18.2
+      find-cache-dir: 3.3.2
+      fs-extra: 11.1.0
+      process: 0.11.10
+      util: 0.12.5
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/builder-vite@7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1):
+    resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==}
+    peerDependencies:
+      '@preact/preset-vite': '*'
+      '@storybook/mdx1-csf': '>=1.0.0-next.1'
+      typescript: '>= 4.3.x'
+      vite: ^3.0.0 || ^4.0.0
+      vite-plugin-glimmerx: '*'
+    peerDependenciesMeta:
+      '@preact/preset-vite':
+        optional: true
+      '@storybook/mdx1-csf':
+        optional: true
+      typescript:
+        optional: true
+      vite-plugin-glimmerx:
+        optional: true
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.10
+      '@storybook/channel-websocket': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/csf-plugin': 7.0.0-rc.10
+      '@storybook/mdx2-csf': 1.0.0-next.7
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      browser-assert: 1.2.1
+      es-module-lexer: 0.9.3
+      express: 4.18.2
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2(glob@8.1.0)
+      magic-string: 0.27.0
+      remark-external-links: 9.0.1
+      remark-slug: 7.0.1
+      rollup: 3.20.2
+      typescript: 5.0.2
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/channel-postmessage@7.0.0:
+    resolution: {integrity: sha512-Sy3oHL/xDRjUiHnM0ncnkbOE5pK3O72MjOoiLJX4FCI90w03KM4+F/N0eU2cXl6yXHuCyI5eJisEzQxTNsaJiw==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/global': 5.0.0
+      qs: 6.11.1
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channel-postmessage@7.0.0-rc.10:
+    resolution: {integrity: sha512-U7jx10NwqXiQRMnsY+Dwl8Lkc7a1zAA6fHHDMxxa1AKE7ISDoRi4dIrWs5BmOgi2IdFo52bexIE9RTOgPTuUew==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      qs: 6.11.1
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channel-websocket@7.0.0-rc.10:
+    resolution: {integrity: sha512-18xZYdV3CqiGpxIF8os5Vm+T76p+5lx0t8fRTpiPuOfuPF72QYdqmUuXF/tLH4hzj/qwPp56y6Nb7My7pcGPug==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      telejson: 7.0.4
+    dev: true
+
+  /@storybook/channels@6.5.16:
+    resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==}
+    dependencies:
+      core-js: 3.29.1
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/channels@7.0.0:
+    resolution: {integrity: sha512-adPIkvL4q37dGTWCpSzV8ETLdkxsg7BAgzeT9pustZJjRIZqAHGUAm7krDtGT7jbV4dU0Zw0VpUrnmyfxIkOKQ==}
+    dev: true
+
+  /@storybook/channels@7.0.0-rc.10:
+    resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==}
+    dev: true
+
+  /@storybook/cli@7.0.0-rc.10:
+    resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==}
+    hasBin: true
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@ndelangen/get-tarball': 3.0.7
+      '@storybook/codemod': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-server': 7.0.0-rc.10
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/telemetry': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      '@types/semver': 7.3.13
+      boxen: 5.1.2
+      chalk: 4.1.2
+      commander: 6.2.1
+      cross-spawn: 7.0.3
+      detect-indent: 6.1.0
+      envinfo: 7.8.1
+      execa: 5.1.1
+      express: 4.18.2
+      find-up: 5.0.0
+      fs-extra: 11.1.0
+      get-npm-tarball-url: 2.0.3
+      get-port: 5.1.1
+      giget: 1.1.2
+      globby: 11.1.0
+      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
+      leven: 3.1.0
+      prettier: 2.8.4
+      prompts: 2.4.2
+      puppeteer-core: 2.1.1
+      read-pkg-up: 7.0.1
+      semver: 7.3.8
+      shelljs: 0.8.5
+      simple-update-notifier: 1.1.0
+      strip-json-comments: 3.1.1
+      tempy: 1.0.1
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /@storybook/client-logger@6.5.16:
+    resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==}
+    dependencies:
+      core-js: 3.29.1
+      global: 4.4.0
+    dev: true
+
+  /@storybook/client-logger@7.0.0:
+    resolution: {integrity: sha512-wRZZiPta37DFc8SVZ8Q3ZqyTrs5qgO6bcCuVDRLQAcO0Oz4xKEVPEVfVVxSPZU/+p2ypqdBBCP2pdL/Jy86AJg==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/client-logger@7.0.0-rc.10:
+    resolution: {integrity: sha512-K+3SySLua2tcALuk0Mco/o37bX4CeugA9aQClqDyXmVB+Fh6rg8A+uwiraDPooeq+P8AtMxuFc/dKwRejGicLg==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/codemod@7.0.0-rc.10:
+    resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==}
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/types': 7.21.3
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      cross-spawn: 7.0.3
+      globby: 11.1.0
+      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
+      lodash: 4.17.21
+      prettier: 2.8.4
+      recast: 0.23.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/components@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-iCJnu+cXAZ+4nz+3iObhH0LLB8PjakgvSeeG4puRQ8pYu2tTtJvEoQKjZQ1h7om6sv2sjHcnyz38Slb1CdmYQw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/core-client@7.0.0-rc.10:
+    resolution: {integrity: sha512-Z1zhznMt0NA9PNvBB/JplGAubZp3OszVseIYKj52WmPJHhD/VSlrCMGh9AVkSUsVunF4ciK92GvyMBPuYE/5LA==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+    dev: true
+
+  /@storybook/core-common@7.0.0-rc.10:
+    resolution: {integrity: sha512-csHdcVH7+YMj13WQ68OU6+6H9eYF9Sjhj84RDvlOuwJ0reXftf0RLFJwNrazwLPi7Wypxd0K/MhiM/mZOoY2+A==}
+    dependencies:
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      '@types/node': 16.18.16
+      '@types/pretty-hrtime': 1.0.1
+      chalk: 4.1.2
+      esbuild: 0.17.14
+      esbuild-register: 3.4.2(esbuild@0.17.14)
+      file-system-cache: 2.0.2
+      find-up: 5.0.0
+      fs-extra: 11.1.0
+      glob: 8.1.0
+      glob-promise: 6.0.2(glob@8.1.0)
+      handlebars: 4.7.7
+      lazy-universal-dotenv: 4.0.0
+      picomatch: 2.3.1
+      pkg-dir: 5.0.0
+      pretty-hrtime: 1.0.3
+      resolve-from: 5.0.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/core-events@6.5.16:
+    resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==}
+    dependencies:
+      core-js: 3.29.1
+    dev: true
+
+  /@storybook/core-events@7.0.0:
+    resolution: {integrity: sha512-pxzNmgEI1p90bHyAYABHDDtB2XM5pffq6CqIHboK6aSCux7Cdc16IjOYq6BJIhCKaaI+qQHaFLR4JfaFAsxwQQ==}
+    dev: true
+
+  /@storybook/core-events@7.0.0-rc.10:
+    resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==}
+    dev: true
+
+  /@storybook/core-server@7.0.0-rc.10:
+    resolution: {integrity: sha512-S+E8WRU4vik+lNbXukVSsZPrRgsujFpy9RvgLckH/QI4T2SYe94mAuKGVkW/720jBD4DNss+IUGQQvkafLPl5A==}
+    dependencies:
+      '@aw-web-design/x-default-browser': 1.4.88
+      '@discoveryjs/json-ext': 0.5.7
+      '@storybook/builder-manager': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/docs-mdx': 0.0.1-next.6
+      '@storybook/global': 5.0.0
+      '@storybook/manager': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/telemetry': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      '@types/detect-port': 1.3.2
+      '@types/node': 16.18.16
+      '@types/node-fetch': 2.6.2
+      '@types/pretty-hrtime': 1.0.1
+      '@types/semver': 7.3.13
+      better-opn: 2.1.1
+      boxen: 5.1.2
+      chalk: 4.1.2
+      cli-table3: 0.6.3
+      compression: 1.7.4
+      detect-port: 1.5.1
+      express: 4.18.2
+      fs-extra: 11.1.0
+      globby: 11.1.0
+      ip: 2.0.0
+      lodash: 4.17.21
+      node-fetch: 2.6.7
+      open: 8.4.2
+      pretty-hrtime: 1.0.3
+      prompts: 2.4.2
+      read-pkg-up: 7.0.1
+      semver: 7.3.8
+      serve-favicon: 2.5.0
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+      watchpack: 2.4.0
+      ws: 8.13.0
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /@storybook/csf-plugin@7.0.0-rc.10:
+    resolution: {integrity: sha512-+o8eQ1FFV7JXWh17pi5oFhuuSSpzsIP+5+/qY2ugE5JJBuVL8fM3jW0bFClZy9qpOeXYDgtfqMNlk9qSjvCQDw==}
+    dependencies:
+      '@storybook/csf-tools': 7.0.0-rc.10
+      unplugin: 0.10.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/csf-tools@7.0.0-rc.10:
+    resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==}
+    dependencies:
+      '@babel/generator': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/types': 7.0.0-rc.10
+      fs-extra: 11.1.0
+      recast: 0.23.1
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/csf@0.0.2--canary.4566f4d.1:
+    resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==}
+    dependencies:
+      lodash: 4.17.21
+    dev: true
+
+  /@storybook/csf@0.0.2-next.11:
+    resolution: {integrity: sha512-xGt0YSVxZb43sKmEf1GIQD8xEbo+c+S6khDEL7Qu/pYA0gh5z3WUuhOlovnelYj/YJod+XRsfVvk23AaRfUJ4Q==}
+    dependencies:
+      type-fest: 2.19.0
+    dev: true
+
+  /@storybook/docs-mdx@0.0.1-next.6:
+    resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
+    dev: true
+
+  /@storybook/docs-tools@7.0.0-rc.10:
+    resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==}
+    dependencies:
+      '@babel/core': 7.21.3
+      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      '@types/doctrine': 0.0.3
+      doctrine: 3.0.0
+      lodash: 4.17.21
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/expect@27.5.2-0:
+    resolution: {integrity: sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==}
+    dependencies:
+      '@types/jest': 29.5.0
+    dev: true
+
+  /@storybook/global@5.0.0:
+    resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+    dev: true
+
+  /@storybook/instrumenter@6.5.16(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-q8/GaBk8PA/cL7m5OW+ec5t63+Zja9YvYSPGXrYtW17koSv7OnNPmk6RvI7tIHHO0mODBYnaHjF4zQfEGoyR5Q==}
+    dependencies:
+      '@storybook/addons': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 6.5.16
+      '@storybook/core-events': 6.5.16
+      core-js: 3.29.1
+      global: 4.4.0
+    transitivePeerDependencies:
+      - react
+      - react-dom
+    dev: true
+
+  /@storybook/instrumenter@7.0.0:
+    resolution: {integrity: sha512-A7jBrV7VM3OxRgall8rpjagy3VC78A/OV1g1aYVVLpAF/+Odj+MeHHF179+fR6JBLnBgukNfsG7/ZHHGs0gL5Q==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0
+    dev: true
+
+  /@storybook/instrumenter@7.0.0-rc.10:
+    resolution: {integrity: sha512-XaU6pxbcUnGgM7OywPs8E/k3H6Up/mf2kPfrHp9qhztx7ypKsKZi2lfxpOlmORy/s6JZl8kZATDyfgAGmVnbvg==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.10
+    dev: true
+
+  /@storybook/jest@0.0.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==}
+    dependencies:
+      '@storybook/expect': 27.5.2-0
+      '@storybook/instrumenter': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@testing-library/jest-dom': 5.16.5
+      jest-mock: 27.5.1
+    transitivePeerDependencies:
+      - react
+      - react-dom
+    dev: true
+
+  /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-sWMifsQKFEEnjgrmi4cuRTXaX1KfmbIDqCaBg+9A8PeqKbk/sBaapk/istUj2vXz0tTxh7P5cosoXr8K2q5IhA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/manager@7.0.0-rc.10:
+    resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==}
+    dev: true
+
+  /@storybook/mdx2-csf@1.0.0-next.7:
+    resolution: {integrity: sha512-xcQ8w4IecABAjsakaZTGiUEnEgFZzVKsMjqECjd+qdkwgD3R/kwrBdfyC15CLM5Ye1miPwYBIwJGeBXB9qxsZg==}
+    dev: true
+
+  /@storybook/node-logger@7.0.0-rc.10:
+    resolution: {integrity: sha512-C+NEudQz8t0VS5U5bOUbIXtz/FL8y2Za/qcG7hI7fa9NglQvtdBYpNzwg8M4YSOUvOoa3eEqoD26tnjAkEfEQQ==}
+    dependencies:
+      '@types/npmlog': 4.1.4
+      chalk: 4.1.2
+      npmlog: 5.0.1
+      pretty-hrtime: 1.0.3
+    dev: true
+
+  /@storybook/postinstall@7.0.0-rc.10:
+    resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==}
+    dev: true
+
+  /@storybook/preview-api@7.0.0:
+    resolution: {integrity: sha512-Q0IYYH1gOmx42ClYlQfQPjuERBWM3Ey+3DFsLQaraKXDdgZ9wN7jPNuS7wxuUNylT0oa/3WjxT7qNfiGw8JtBw==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0
+      '@storybook/channels': 7.0.0
+      '@storybook/client-logger': 7.0.0
+      '@storybook/core-events': 7.0.0
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/preview-api@7.0.0-rc.10:
+    resolution: {integrity: sha512-3oBm6Che7ctbOLS3TTbuySbLdxA1xqLDgn8AaOadCd4SmCfhxZNor35RO1TlN8S8pQPsGlT9UBWB4xKxhq0e2A==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.0-rc.10
+      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.0-rc.10
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /@storybook/preview@7.0.0-rc.10:
+    resolution: {integrity: sha512-885uU20XL54s31lAyIu5MaiD4t23gJ0X/JEMz2/LTvfluYDtQg66gXhMibKqEPgMHcPOND5ZrGoYPdaLDG20Dw==}
+    dev: true
+
+  /@storybook/react-dom-shim@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-oRmjN4HLo/gumufM6xrCYMncggbsNQ2UC+0Wju2zs86v6mLmoG8CCVnTE2nyUBiy5IDZ464nBhdGYkkuUEYzrg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1):
+    resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      vite: ^3.0.0 || ^4.0.0
+    dependencies:
+      '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.0.2)(vite@4.2.1)
+      '@rollup/pluginutils': 4.2.1
+      '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1)
+      '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
+      '@vitejs/plugin-react': 3.1.0(vite@4.2.1)
+      ast-types: 0.14.2
+      magic-string: 0.27.0
+      react: 18.2.0
+      react-docgen: 6.0.0-alpha.3
+      react-dom: 18.2.0(react@18.2.0)
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+    transitivePeerDependencies:
+      - '@preact/preset-vite'
+      - '@storybook/mdx1-csf'
+      - supports-color
+      - typescript
+      - vite-plugin-glimmerx
+    dev: true
+
+  /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-client': 7.0.0-rc.10
+      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      '@types/escodegen': 0.0.6
+      '@types/estree': 0.0.51
+      '@types/node': 16.18.16
+      acorn: 7.4.1
+      acorn-jsx: 5.3.2(acorn@7.4.1)
+      acorn-walk: 7.2.0
+      escodegen: 2.0.0
+      html-tags: 3.2.0
+      lodash: 4.17.21
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0)
+      ts-dedent: 2.2.0
+      type-fest: 2.19.0
+      typescript: 5.0.2
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/router@6.5.16(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 6.5.16
+      core-js: 3.29.1
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      regenerator-runtime: 0.13.11
+    dev: true
+
+  /@storybook/router@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-wg8tMCPFXKf90U4Y8Gpkc347wgWlNiX+FJN2UmiTIpyFkOc+GI+9mWBqcSZDfhgQpBjmxCGgJaD/Uz03Y+vIVg==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/semver@7.3.2:
+    resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      core-js: 3.29.1
+      find-up: 4.1.0
+    dev: true
+
+  /@storybook/source-loader@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-8DJtoNoFfBuw2ZnWWvyvX3r7NnKSvdSAIk1XJGcZybLsQnOSVyXAQhZNfG5Ah5E6V2/7IksDDST9h5HNUAdU7A==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/csf': 0.0.2-next.11
+      '@storybook/types': 7.0.0-rc.10
+      estraverse: 5.3.0
+      lodash: 4.17.21
+      prettier: 2.8.4
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/telemetry@7.0.0-rc.10:
+    resolution: {integrity: sha512-ZikQZtTzBIVJfEvLUNQ0jMEjhE4naTnjRAHfpEdLWwmd41s5L4kH4YNhyJthdc8K72RdEMA1uQey6aLjjDFa+A==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.0-rc.10
+      chalk: 4.1.2
+      detect-package-manager: 2.0.1
+      fetch-retry: 5.0.4
+      fs-extra: 11.1.0
+      isomorphic-unfetch: 3.1.0
+      nanoid: 3.3.4
+      read-pkg-up: 7.0.1
+    transitivePeerDependencies:
+      - encoding
+      - supports-color
+    dev: true
+
+  /@storybook/testing-library@0.0.14-next.1:
+    resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
+    dependencies:
+      '@storybook/client-logger': 7.0.0
+      '@storybook/instrumenter': 7.0.0
+      '@testing-library/dom': 8.20.0
+      '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0)
+      ts-dedent: 2.2.0
+    dev: true
+
+  /@storybook/theming@6.5.16(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 6.5.16
+      core-js: 3.29.1
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      regenerator-runtime: 0.13.11
+    dev: true
+
+  /@storybook/theming@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-hzUaqmDcFJKgFfY+tec9Q06d9TTgDHBByCNIE2WxUu7U+NWZQe9kFVoEwLTSlrYU2aG6/LYhTC4oJBtQ9FSCyQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
+      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/types@7.0.0:
+    resolution: {integrity: sha512-eCMW/xTVMswgD/58itibw8s8f2hZ7tciT3saRdGCymg9tPUhMC/9eGIIUSr/C+xfnCJEZm6J6DgEUo1xlifonw==}
+    dependencies:
+      '@storybook/channels': 7.0.0
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/types@7.0.0-rc.10:
+    resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==}
+    dependencies:
+      '@storybook/channels': 7.0.0-rc.10
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47):
+    resolution: {integrity: sha512-gNUlREXPv9C61VqmLW9MmlAFAgki9o60+CKwMDLp3Ey/WxEwH+JGOmhc5ne6H4du9FZLnDbBa3zphkS0Ve7qWw==}
+    engines: {node: ^14.18 || >=16}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      vite: ^3.0.0 || ^4.0.0
+    dependencies:
+      '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1)
+      '@storybook/core-server': 7.0.0-rc.10
+      '@storybook/vue3': 7.0.0-rc.10(vue@3.2.47)
+      '@vitejs/plugin-vue': 4.1.0(vite@4.2.1)(vue@3.2.47)
+      magic-string: 0.27.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+      vue-docgen-api: 4.64.1(vue@3.2.47)
+    transitivePeerDependencies:
+      - '@preact/preset-vite'
+      - '@storybook/mdx1-csf'
+      - bufferutil
+      - encoding
+      - supports-color
+      - typescript
+      - utf-8-validate
+      - vite-plugin-glimmerx
+      - vue
+    dev: true
+
+  /@storybook/vue3@7.0.0-rc.10(vue@3.2.47):
+    resolution: {integrity: sha512-v34ZvjQy3B8it6FNzdCEbT8KDsDeySOCGWZcGGZZ+aQALmXwVM4Kpo76AaOR6APt0gMppegEuYqtMY9PfkcELQ==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      vue: ^3.0.0
+    dependencies:
+      '@storybook/core-client': 7.0.0-rc.10
+      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/types': 7.0.0-rc.10
+      ts-dedent: 2.2.0
+      type-fest: 2.19.0
+      vue: 3.2.47
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@swc/cli@0.1.62(@swc/core@1.3.42)(chokidar@3.5.3):
     resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
     engines: {node: '>= 12.13'}
@@ -3717,7 +6120,6 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       defer-to-connect: 2.0.1
-    dev: false
 
   /@szmarczak/http-timer@5.0.1:
     resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@@ -3861,6 +6263,31 @@ packages:
       pretty-format: 27.5.1
     dev: true
 
+  /@testing-library/jest-dom@5.16.5:
+    resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==}
+    engines: {node: '>=8', npm: '>=6', yarn: '>=1'}
+    dependencies:
+      '@adobe/css-tools': 4.2.0
+      '@babel/runtime': 7.20.7
+      '@types/testing-library__jest-dom': 5.14.5
+      aria-query: 5.1.3
+      chalk: 3.0.0
+      css.escape: 1.5.1
+      dom-accessibility-api: 0.5.16
+      lodash: 4.17.21
+      redent: 3.0.0
+    dev: true
+
+  /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0):
+    resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==}
+    engines: {node: '>=10', npm: '>=6'}
+    peerDependencies:
+      '@testing-library/dom': '>=7.21.4'
+    dependencies:
+      '@babel/runtime': 7.20.7
+      '@testing-library/dom': 8.20.0
+    dev: true
+
   /@testing-library/vue@6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47):
     resolution: {integrity: sha512-vpyBPrHzKTwEGS7ehUC8/IXgnqTBEMk6jd52Gouf51arG2jUorPhmkbsxUwJOyxz6L0gj2ZcmWnznG1OJcTCDQ==}
     engines: {node: '>=12'}
@@ -3908,11 +6335,11 @@ packages:
     resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==}
     dev: true
 
-  /@types/babel__core@7.1.20:
-    resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==}
+  /@types/babel__core@7.20.0:
+    resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       '@types/babel__generator': 7.6.4
       '@types/babel__template': 7.4.1
       '@types/babel__traverse': 7.18.3
@@ -3921,26 +6348,33 @@ packages:
   /@types/babel__generator@7.6.4:
     resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/babel__template@7.4.1:
     resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/babel__traverse@7.18.3:
     resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
     dependencies:
-      '@babel/types': 7.20.7
+      '@babel/types': 7.21.3
     dev: true
 
   /@types/bcryptjs@2.4.2:
     resolution: {integrity: sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==}
     dev: true
 
+  /@types/body-parser@1.19.2:
+    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+    dependencies:
+      '@types/connect': 3.4.35
+      '@types/node': 18.15.11
+    dev: true
+
   /@types/bull@4.10.0:
     resolution: {integrity: sha512-RkYW8K2H3J76HT6twmHYbzJ0GtLDDotpLP9ah9gtiA7zfF6peBH1l5fEiK0oeIZ3/642M7Jcb9sPmor8Vf4w6g==}
     dependencies:
@@ -3956,7 +6390,6 @@ packages:
       '@types/keyv': 3.1.4
       '@types/node': 18.15.11
       '@types/responselike': 1.0.0
-    dev: false
 
   /@types/cbor@6.0.0:
     resolution: {integrity: sha512-mGQ1lbYOwVti5Xlarn1bTeBZqgY0kstsdjnkoEovgohYKdBjGejHyNGXHdMBeqyQazIv32Jjp33+5pBEaSRy2w==}
@@ -3984,18 +6417,54 @@ packages:
     resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==}
     dev: true
 
+  /@types/connect@3.4.35:
+    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
+    dependencies:
+      '@types/node': 18.15.11
+    dev: true
+
   /@types/content-disposition@0.5.5:
     resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
     dev: true
 
+  /@types/cookie@0.4.1:
+    resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+    dev: true
+
+  /@types/debug@4.1.7:
+    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+    dependencies:
+      '@types/ms': 0.7.31
+    dev: true
+
+  /@types/detect-port@1.3.2:
+    resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==}
+    dev: true
+
   /@types/disposable-email-domains@1.0.2:
     resolution: {integrity: sha512-SDKwyYTjk3y5aZBxxc38yRecpJPjsqn57STz1bNxYYlv4k11bBe7QB8w4llXDTmQXKT1mFvgGmJv+8Zdu3YmJw==}
     dev: false
 
+  /@types/doctrine@0.0.3:
+    resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==}
+    dev: true
+
+  /@types/ejs@3.1.2:
+    resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==}
+    dev: true
+
+  /@types/emscripten@1.39.6:
+    resolution: {integrity: sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==}
+    dev: true
+
   /@types/escape-regexp@0.0.1:
     resolution: {integrity: sha512-ogj/ZTIdeFkiuxDwawYuZSIgC6suFGgBeZPr6Xs5lHEcvIXTjXGtH+/n8f1XhZhespaUwJ5LIGRICPji972FLw==}
     dev: true
 
+  /@types/escodegen@0.0.6:
+    resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}
+    dev: true
+
   /@types/eslint@7.29.0:
     resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==}
     dependencies:
@@ -4003,12 +6472,37 @@ packages:
       '@types/json-schema': 7.0.11
     dev: true
 
+  /@types/estree@0.0.51:
+    resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
+    dev: true
+
   /@types/estree@1.0.0:
     resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
 
   /@types/expect@1.20.4:
     resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==}
 
+  /@types/express-serve-static-core@4.17.33:
+    resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
+    dependencies:
+      '@types/node': 18.15.11
+      '@types/qs': 6.9.7
+      '@types/range-parser': 1.2.4
+    dev: true
+
+  /@types/express@4.17.17:
+    resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
+    dependencies:
+      '@types/body-parser': 1.19.2
+      '@types/express-serve-static-core': 4.17.33
+      '@types/qs': 6.9.7
+      '@types/serve-static': 1.15.1
+    dev: true
+
+  /@types/find-cache-dir@3.2.1:
+    resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==}
+    dev: true
+
   /@types/fluent-ffmpeg@2.1.21:
     resolution: {integrity: sha512-+n3dy/Tegt6n+YwGZUiGq6i8Jrnt8+MoyPiW1L6J5EWUl7GSt18a/VyReecfCsvTTNBXNMIKOMHDstiQM8nJLA==}
     dependencies:
@@ -4018,12 +6512,19 @@ packages:
   /@types/glob-stream@6.1.1:
     resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==}
     dependencies:
-      '@types/glob': 8.0.1
+      '@types/glob': 8.1.0
       '@types/node': 18.15.11
     dev: true
 
-  /@types/glob@8.0.1:
-    resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==}
+  /@types/glob@7.2.0:
+    resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+    dependencies:
+      '@types/minimatch': 5.1.2
+      '@types/node': 18.15.11
+    dev: true
+
+  /@types/glob@8.1.0:
+    resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
     dependencies:
       '@types/minimatch': 5.1.2
       '@types/node': 18.15.11
@@ -4038,7 +6539,7 @@ packages:
   /@types/gulp-rename@2.0.1:
     resolution: {integrity: sha512-9ZjeS2RHEnmBmTcyi2+oeye3BgCsWhvi4uv3qCnAg8i6plOuRdaeNxjOves0ELysEXYLBl7bCl5fbVs7AZtgTA==}
     dependencies:
-      '@types/node': 17.0.5
+      '@types/node': 18.11.18
       '@types/vinyl': 2.0.7
     dev: true
 
@@ -4050,6 +6551,12 @@ packages:
       chokidar: 3.5.3
     dev: true
 
+  /@types/hast@2.3.4:
+    resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
   /@types/http-cache-semantics@4.0.1:
     resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
 
@@ -4059,6 +6566,10 @@ packages:
       '@types/node': 18.15.11
     dev: true
 
+  /@types/is-function@1.0.1:
+    resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==}
+    dev: true
+
   /@types/istanbul-lib-coverage@2.0.4:
     resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
     dev: true
@@ -4082,6 +6593,10 @@ packages:
       pretty-format: 29.5.0
     dev: true
 
+  /@types/js-levenshtein@1.1.1:
+    resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==}
+    dev: true
+
   /@types/js-yaml@4.0.5:
     resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
     dev: true
@@ -4114,7 +6629,10 @@ packages:
     resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
     dependencies:
       '@types/node': 18.15.11
-    dev: false
+
+  /@types/lodash@4.14.191:
+    resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
+    dev: true
 
   /@types/long@4.0.2:
     resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
@@ -4124,10 +6642,24 @@ packages:
     resolution: {integrity: sha512-W9UC9DOPNBRTUocqqPZmzX3cbHmlZBI9jLn6SuxZz0n5QrPk382Ig3hbBWHqYU8TRUmTCJJhuanXeyMTavF7Mg==}
     dev: true
 
+  /@types/mdast@3.0.11:
+    resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /@types/mdx@2.0.3:
+    resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
+    dev: true
+
   /@types/mime-types@2.1.1:
     resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==}
     dev: true
 
+  /@types/mime@3.0.1:
+    resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
+    dev: true
+
   /@types/minimatch@5.1.2:
     resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
     dev: true
@@ -4136,12 +6668,15 @@ packages:
     resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
     dev: true
 
+  /@types/ms@0.7.31:
+    resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
+    dev: true
+
   /@types/node-fetch@2.6.2:
     resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
     dependencies:
       '@types/node': 18.15.11
       form-data: 3.0.1
-    dev: false
 
   /@types/node-fetch@3.0.3:
     resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==}
@@ -4149,12 +6684,20 @@ packages:
       node-fetch: 3.3.1
     dev: true
 
+  /@types/node@13.13.52:
+    resolution: {integrity: sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==}
+    dev: true
+
   /@types/node@14.18.36:
     resolution: {integrity: sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==}
     dev: true
 
-  /@types/node@17.0.5:
-    resolution: {integrity: sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==}
+  /@types/node@16.18.16:
+    resolution: {integrity: sha512-ZOzvDRWp8dCVBmgnkIqYCArgdFOO9YzocZp8Ra25N/RStKiWvMOXHMz+GjSeVNe5TstaTmTWPucGJkDw0XXJWA==}
+    dev: true
+
+  /@types/node@18.11.18:
+    resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
 
   /@types/node@18.15.11:
     resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==}
@@ -4169,6 +6712,10 @@ packages:
     resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
     dev: true
 
+  /@types/npmlog@4.1.4:
+    resolution: {integrity: sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==}
+    dev: true
+
   /@types/oauth@0.9.1:
     resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==}
     dependencies:
@@ -4195,6 +6742,14 @@ packages:
     resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==}
     dev: true
 
+  /@types/pretty-hrtime@1.0.1:
+    resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==}
+    dev: true
+
+  /@types/prop-types@15.7.5:
+    resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+    dev: true
+
   /@types/pug@2.0.6:
     resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
     dev: true
@@ -4209,14 +6764,30 @@ packages:
       '@types/node': 18.15.11
     dev: true
 
+  /@types/qs@6.9.7:
+    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
+    dev: true
+
   /@types/random-seed@0.3.3:
     resolution: {integrity: sha512-kHsCbIRHNXJo6EN5W8EA5b4i1hdT6jaZke5crBPLUcLqaLdZ0QBq8QVMbafHzhjFF83Cl9qlee2dChD18d/kPg==}
     dev: true
 
+  /@types/range-parser@1.2.4:
+    resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
+    dev: true
+
   /@types/ratelimiter@3.4.4:
     resolution: {integrity: sha512-GSMb93iSA8KKFDgVL2Wzs/kqrHMJcU8xhLdwI5omoACcj7K18SacklLtY1C4G02HC5drd6GygtsIaGbfxJSe0g==}
     dev: true
 
+  /@types/react@18.0.28:
+    resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
+    dependencies:
+      '@types/prop-types': 15.7.5
+      '@types/scheduler': 0.16.2
+      csstype: 3.1.1
+    dev: true
+
   /@types/readdir-glob@1.1.1:
     resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==}
     dependencies:
@@ -4237,7 +6808,6 @@ packages:
     resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
     dependencies:
       '@types/node': 18.15.11
-    dev: false
 
   /@types/sanitize-html@2.9.0:
     resolution: {integrity: sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==}
@@ -4245,6 +6815,10 @@ packages:
       htmlparser2: 8.0.1
     dev: true
 
+  /@types/scheduler@0.16.2:
+    resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
+    dev: true
+
   /@types/seedrandom@2.4.30:
     resolution: {integrity: sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==}
     dev: false
@@ -4257,10 +6831,23 @@ packages:
     resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
     dev: true
 
+  /@types/serve-static@1.15.1:
+    resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
+    dependencies:
+      '@types/mime': 3.0.1
+      '@types/node': 18.15.11
+    dev: true
+
   /@types/serviceworker@0.0.67:
     resolution: {integrity: sha512-7TCH7iNsCSNb+aUD9M/36TekrWFSLCjNK8zw/3n5kOtRjbLtDfGYMXTrDnGhSfqXNwpqmt9Vd90w5C/ad1tX6Q==}
     dev: true
 
+  /@types/set-cookie-parser@2.4.2:
+    resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==}
+    dependencies:
+      '@types/node': 18.15.11
+    dev: true
+
   /@types/sharp@0.31.1:
     resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==}
     dependencies:
@@ -4289,6 +6876,12 @@ packages:
     resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
     dev: true
 
+  /@types/testing-library__jest-dom@5.14.5:
+    resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==}
+    dependencies:
+      '@types/jest': 29.5.0
+    dev: true
+
   /@types/throttle-debounce@5.0.0:
     resolution: {integrity: sha512-Pb7k35iCGFcGPECoNE4DYp3Oyf2xcTd3FbFQxXUI9hEYKUl6YX+KLf7HrBmgVcD05nl50LIH6i+80js4iYmWbw==}
     dev: true
@@ -4305,6 +6898,10 @@ packages:
     resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
     dev: true
 
+  /@types/treeify@1.0.0:
+    resolution: {integrity: sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==}
+    dev: true
+
   /@types/undertaker-registry@1.0.1:
     resolution: {integrity: sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==}
     dev: true
@@ -4317,6 +6914,10 @@ packages:
       async-done: 1.3.2
     dev: true
 
+  /@types/unist@2.0.6:
+    resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
+    dev: true
+
   /@types/unzipper@0.10.5:
     resolution: {integrity: sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==}
     dependencies:
@@ -4357,6 +6958,10 @@ packages:
     resolution: {integrity: sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==}
     dev: false
 
+  /@types/webpack-env@1.18.0:
+    resolution: {integrity: sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==}
+    dev: true
+
   /@types/websocket@1.0.5:
     resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==}
     dependencies:
@@ -4523,6 +7128,22 @@ packages:
       eslint-visitor-keys: 3.4.0
     dev: true
 
+  /@vitejs/plugin-react@3.1.0(vite@4.2.1):
+    resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.1.0-beta.0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.3)
+      magic-string: 0.27.0
+      react-refresh: 0.14.0
+      vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@vitejs/plugin-vue@4.1.0(vite@4.2.1)(vue@3.2.47):
     resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -4532,7 +7153,6 @@ packages:
     dependencies:
       vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
       vue: 3.2.47
-    dev: false
 
   /@vitest/coverage-c8@0.29.8(vitest@0.29.8):
     resolution: {integrity: sha512-y+sEMQMctWokjnSqm3FCQEYFkjLrYaznsxEZHxcx8z2aftpYg3A5tvI1S5himfdEFo7o+OeHzh40bPSWZHW4oQ==}
@@ -4618,7 +7238,7 @@ packages:
   /@vue/compiler-core@3.2.47:
     resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       '@vue/shared': 3.2.47
       estree-walker: 2.0.2
       source-map: 0.6.1
@@ -4632,7 +7252,7 @@ packages:
   /@vue/compiler-sfc@2.7.14:
     resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       postcss: 8.4.21
       source-map: 0.6.1
     dev: false
@@ -4660,7 +7280,7 @@ packages:
   /@vue/reactivity-transform@3.2.47:
     resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
     dependencies:
-      '@babel/parser': 7.20.7
+      '@babel/parser': 7.21.3
       '@vue/compiler-core': 3.2.47
       '@vue/shared': 3.2.47
       estree-walker: 2.0.2
@@ -4712,6 +7332,124 @@ packages:
     resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==}
     dev: false
 
+  /@xmldom/xmldom@0.8.6:
+    resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==}
+    engines: {node: '>=10.0.0'}
+    dev: true
+
+  /@yarnpkg/core@2.4.0:
+    resolution: {integrity: sha512-FYjcPNTfDfMKLFafQPt49EY28jnYC82Z2S7oMwLPUh144BL8v8YXzb4aCnFyi5nFC5h2kcrJfZh7+Pm/qvCqGw==}
+    engines: {node: '>=10.19.0'}
+    dependencies:
+      '@arcanis/slice-ansi': 1.1.1
+      '@types/semver': 7.3.13
+      '@types/treeify': 1.0.0
+      '@yarnpkg/fslib': 2.10.2
+      '@yarnpkg/json-proxy': 2.1.1
+      '@yarnpkg/libzip': 2.3.0
+      '@yarnpkg/parsers': 2.5.1
+      '@yarnpkg/pnp': 2.3.2
+      '@yarnpkg/shell': 2.4.1
+      binjumper: 0.1.4
+      camelcase: 5.3.1
+      chalk: 3.0.0
+      ci-info: 2.0.0
+      clipanion: 2.6.2
+      cross-spawn: 7.0.3
+      diff: 4.0.2
+      globby: 11.1.0
+      got: 11.8.5
+      json-file-plus: 3.3.1
+      lodash: 4.17.21
+      micromatch: 4.0.5
+      mkdirp: 0.5.6
+      p-limit: 2.3.0
+      pluralize: 7.0.0
+      pretty-bytes: 5.6.0
+      semver: 7.3.8
+      stream-to-promise: 2.2.0
+      tar-stream: 2.2.0
+      treeify: 1.1.0
+      tslib: 1.14.1
+      tunnel: 0.0.6
+    dev: true
+
+  /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.14):
+    resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
+    engines: {node: '>=14.15.0'}
+    peerDependencies:
+      esbuild: '>=0.10.0'
+    dependencies:
+      esbuild: 0.17.14
+      tslib: 2.5.0
+    dev: true
+
+  /@yarnpkg/fslib@2.10.2:
+    resolution: {integrity: sha512-6WfQrPEV8QVpDPw5kd5s5jsb3QLqwVFSGZy3rEjl3p2FZ3OtIfYcLbFirOxXj2jXiKQDe7XbYsw1WjSf8K94gw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@yarnpkg/libzip': 2.3.0
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/json-proxy@2.1.1:
+    resolution: {integrity: sha512-meUiCAgCYpXTH1qJfqfz+dX013ohW9p2dKfwIzUYAFutH+lsz1eHPBIk72cuCV84adh9gX6j66ekBKH/bIhCQw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@yarnpkg/fslib': 2.10.2
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/libzip@2.3.0:
+    resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      '@types/emscripten': 1.39.6
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/lockfile@1.1.0:
+    resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
+    dev: true
+
+  /@yarnpkg/parsers@2.5.1:
+    resolution: {integrity: sha512-KtYN6Ez3x753vPF9rETxNTPnPjeaHY11Exlpqb4eTII7WRlnGiZ5rvvQBau4R20Ik5KBv+vS3EJEcHyCunwzzw==}
+    engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+    dependencies:
+      js-yaml: 3.14.1
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/pnp@2.3.2:
+    resolution: {integrity: sha512-JdwHu1WBCISqJEhIwx6Hbpe8MYsYbkGMxoxolkDiAeJ9IGEe08mQcbX1YmUDV1ozSWlm9JZE90nMylcDsXRFpA==}
+    engines: {node: '>=10.19.0'}
+    dependencies:
+      '@types/node': 13.13.52
+      '@yarnpkg/fslib': 2.10.2
+      tslib: 1.14.1
+    dev: true
+
+  /@yarnpkg/shell@2.4.1:
+    resolution: {integrity: sha512-oNNJkH8ZI5uwu0dMkJf737yMSY1WXn9gp55DqSA5wAOhKvV5DJTXFETxkVgBQhO6Bow9tMGSpvowTMD/oAW/9g==}
+    engines: {node: '>=10.19.0'}
+    hasBin: true
+    dependencies:
+      '@yarnpkg/fslib': 2.10.2
+      '@yarnpkg/parsers': 2.5.1
+      clipanion: 2.6.2
+      cross-spawn: 7.0.3
+      fast-glob: 3.2.12
+      micromatch: 4.0.5
+      stream-buffers: 3.0.2
+      tslib: 1.14.1
+    dev: true
+
+  /@zxing/text-encoding@0.9.0:
+    resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /abab@2.0.6:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     dev: false
@@ -4736,7 +7474,6 @@ packages:
     dependencies:
       mime-types: 2.1.35
       negotiator: 0.6.3
-    dev: false
 
   /acorn-globals@7.0.1:
     resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
@@ -4745,6 +7482,14 @@ packages:
       acorn-walk: 8.2.0
     dev: false
 
+  /acorn-jsx@5.3.2(acorn@7.4.1):
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      acorn: 7.4.1
+    dev: true
+
   /acorn-jsx@5.3.2(acorn@8.8.2):
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
@@ -4753,6 +7498,11 @@ packages:
       acorn: 8.8.2
     dev: true
 
+  /acorn-walk@7.2.0:
+    resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
+    engines: {node: '>=0.4.0'}
+    dev: true
+
   /acorn-walk@8.2.0:
     resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
     engines: {node: '>=0.4.0'}
@@ -4761,13 +7511,17 @@ packages:
     resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
     engines: {node: '>=0.4.0'}
     hasBin: true
-    dev: false
 
   /acorn@8.8.2:
     resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
+  /address@1.2.2:
+    resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
+    engines: {node: '>= 10.0.0'}
+    dev: true
+
   /adm-zip@0.5.10:
     resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==}
     engines: {node: '>=6.0'}
@@ -4782,6 +7536,11 @@ packages:
     dev: false
     optional: true
 
+  /agent-base@5.1.1:
+    resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==}
+    engines: {node: '>= 6.0.0'}
+    dev: true
+
   /agent-base@6.0.2:
     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
     engines: {node: '>= 6.0.0'}
@@ -4789,7 +7548,6 @@ packages:
       debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
   /agentkeepalive@4.2.1:
     resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==}
@@ -4841,6 +7599,12 @@ packages:
     resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==}
     dev: false
 
+  /ansi-align@3.0.1:
+    resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+    dependencies:
+      string-width: 4.2.3
+    dev: true
+
   /ansi-colors@1.1.0:
     resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
     engines: {node: '>=0.10.0'}
@@ -4872,6 +7636,11 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /ansi-regex@4.1.1:
+    resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+    engines: {node: '>=6'}
+    dev: true
+
   /ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
@@ -4916,7 +7685,6 @@ packages:
 
   /any-promise@1.3.0:
     resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-    dev: false
 
   /anymatch@2.0.0:
     resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==}
@@ -4934,6 +7702,10 @@ packages:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
+  /app-root-dir@1.0.2:
+    resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==}
+    dev: true
+
   /app-root-path@3.1.0:
     resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==}
     engines: {node: '>= 6.0.0'}
@@ -4948,7 +7720,6 @@ packages:
 
   /aproba@2.0.0:
     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-    dev: false
 
   /arch@2.2.0:
     resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
@@ -4958,7 +7729,7 @@ packages:
     engines: {node: '>= 6'}
     dependencies:
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       lazystream: 1.0.1
       lodash.defaults: 4.2.0
       lodash.difference: 4.5.0
@@ -4992,8 +7763,6 @@ packages:
     dependencies:
       delegates: 1.0.0
       readable-stream: 3.6.0
-    dev: false
-    optional: true
 
   /are-we-there-yet@3.0.1:
     resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
@@ -5055,6 +7824,10 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /array-flatten@1.1.1:
+    resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+    dev: true
+
   /array-includes@3.1.6:
     resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
     engines: {node: '>= 0.4'}
@@ -5131,7 +7904,6 @@ packages:
 
   /asap@2.0.6:
     resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
-    dev: false
 
   /asn1.js@5.4.1:
     resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
@@ -5149,12 +7921,20 @@ packages:
 
   /assert-never@1.2.1:
     resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
-    dev: false
 
   /assert-plus@1.0.0:
     resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
     engines: {node: '>=0.8'}
 
+  /assert@2.0.0:
+    resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
+    dependencies:
+      es6-object-assign: 1.1.0
+      is-nan: 1.3.2
+      object-is: 1.1.5
+      util: 0.12.5
+    dev: true
+
   /assertion-error@1.1.0:
     resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
     dev: true
@@ -5164,11 +7944,37 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /ast-types@0.14.2:
+    resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
+  /ast-types@0.15.2:
+    resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
+  /ast-types@0.16.1:
+    resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+    engines: {node: '>=4'}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
   /astral-regex@2.0.0:
     resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
     engines: {node: '>=8'}
     dev: true
 
+  /astring@1.8.4:
+    resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==}
+    hasBin: true
+    dev: true
+
   /async-done@1.3.2:
     resolution: {integrity: sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==}
     engines: {node: '>= 0.10'}
@@ -5178,6 +7984,10 @@ packages:
       process-nextick-args: 2.0.1
       stream-exhaust: 1.0.2
 
+  /async-limiter@1.0.1:
+    resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
+    dev: true
+
   /async-settle@1.0.0:
     resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==}
     engines: {node: '>= 0.10'}
@@ -5278,19 +8088,27 @@ packages:
       - debug
     dev: true
 
-  /babel-jest@29.5.0(@babel/core@7.20.12):
+  /babel-core@7.0.0-bridge.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+    dev: true
+
+  /babel-jest@29.5.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       '@babel/core': ^7.8.0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/transform': 29.5.0
-      '@types/babel__core': 7.1.20
+      '@types/babel__core': 7.20.0
       babel-plugin-istanbul: 6.1.1
-      babel-preset-jest: 29.5.0(@babel/core@7.20.12)
+      babel-preset-jest: 29.5.0(@babel/core@7.21.3)
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       slash: 3.0.0
     transitivePeerDependencies:
       - supports-color
@@ -5314,48 +8132,83 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.20.7
-      '@types/babel__core': 7.1.20
+      '@babel/types': 7.21.3
+      '@types/babel__core': 7.20.0
       '@types/babel__traverse': 7.18.3
     dev: true
 
-  /babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.12):
+  /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3):
+    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.20.10
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3):
+    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
+      core-js-compat: 3.29.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3):
+    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.3):
     resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12)
-      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.20.12)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.20.12)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.12)
+      '@babel/core': 7.21.3
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
     dev: true
 
-  /babel-preset-jest@29.5.0(@babel/core@7.20.12):
+  /babel-preset-jest@29.5.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       babel-plugin-jest-hoist: 29.5.0
-      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12)
+      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
     dev: true
 
   /babel-walk@3.0.0-canary-5:
     resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/types': 7.20.7
-    dev: false
+      '@babel/types': 7.21.3
 
   /bach@1.2.0:
     resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==}
@@ -5372,6 +8225,10 @@ packages:
       now-and-later: 2.0.1
     dev: false
 
+  /bail@2.0.2:
+    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+    dev: true
+
   /balanced-match@0.4.2:
     resolution: {integrity: sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==}
     dev: false
@@ -5404,10 +8261,16 @@ packages:
     resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
     dev: false
 
+  /better-opn@2.1.1:
+    resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==}
+    engines: {node: '>8.0.0'}
+    dependencies:
+      open: 7.4.2
+    dev: true
+
   /big-integer@1.6.51:
     resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
     engines: {node: '>=0.6'}
-    dev: false
 
   /bin-check@4.1.0:
     resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
@@ -5450,13 +8313,17 @@ packages:
     engines: {node: '>=0.8'}
     dev: false
 
+  /binjumper@0.1.4:
+    resolution: {integrity: sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w==}
+    engines: {node: '>=10.12.0'}
+    dev: true
+
   /bl@4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
     dependencies:
       buffer: 5.7.1
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: false
 
   /blob-util@2.0.2:
     resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
@@ -5478,6 +8345,26 @@ packages:
     resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
     dev: false
 
+  /body-parser@1.20.1:
+    resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
+    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+    dependencies:
+      bytes: 3.1.2
+      content-type: 1.0.5
+      debug: 2.6.9
+      depd: 2.0.0
+      destroy: 1.2.0
+      http-errors: 2.0.0
+      iconv-lite: 0.4.24
+      on-finished: 2.4.1
+      qs: 6.11.0
+      raw-body: 2.5.1
+      type-is: 1.6.18
+      unpipe: 1.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /boolbase@1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
@@ -5485,6 +8372,27 @@ packages:
     resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
     dev: false
 
+  /boxen@5.1.2:
+    resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-align: 3.0.1
+      camelcase: 6.3.0
+      chalk: 4.1.2
+      cli-boxes: 2.2.1
+      string-width: 4.2.3
+      type-fest: 0.20.2
+      widest-line: 3.1.0
+      wrap-ansi: 7.0.0
+    dev: true
+
+  /bplist-parser@0.2.0:
+    resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+    engines: {node: '>= 5.10.0'}
+    dependencies:
+      big-integer: 1.6.51
+    dev: true
+
   /brace-expansion@1.1.11:
     resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
     dependencies:
@@ -5530,6 +8438,16 @@ packages:
       unload: 2.4.1
     dev: false
 
+  /browser-assert@1.2.1:
+    resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
+    dev: true
+
+  /browserify-zlib@0.1.4:
+    resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
+    dependencies:
+      pako: 0.2.9
+    dev: true
+
   /browserslist@1.7.7:
     resolution: {integrity: sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==}
     deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
@@ -5539,15 +8457,15 @@ packages:
       electron-to-chromium: 1.4.284
     dev: false
 
-  /browserslist@4.21.4:
-    resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
+  /browserslist@4.21.5:
+    resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
     dependencies:
-      caniuse-lite: 1.0.30001443
+      caniuse-lite: 1.0.30001468
       electron-to-chromium: 1.4.284
       node-releases: 2.0.8
-      update-browserslist-db: 1.0.10(browserslist@4.21.4)
+      update-browserslist-db: 1.0.10(browserslist@4.21.5)
     dev: true
 
   /bser@2.1.1:
@@ -5636,6 +8554,16 @@ packages:
       streamsearch: 1.1.0
     dev: false
 
+  /bytes@3.0.0:
+    resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
+  /bytes@3.1.2:
+    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /c8@7.13.0:
     resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==}
     engines: {node: '>=10.12.0'}
@@ -5704,7 +8632,6 @@ packages:
   /cacheable-lookup@5.0.4:
     resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
     engines: {node: '>=10.6.0'}
-    dev: false
 
   /cacheable-lookup@6.1.0:
     resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==}
@@ -5738,7 +8665,6 @@ packages:
       lowercase-keys: 2.0.0
       normalize-url: 6.1.0
       responselike: 2.0.1
-    dev: false
 
   /cachedir@2.3.0:
     resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
@@ -5749,7 +8675,7 @@ packages:
     resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
     dependencies:
       function-bind: 1.1.1
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
 
   /callsites@3.1.0:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -5792,8 +8718,8 @@ packages:
     resolution: {integrity: sha512-4KKthVYyooNIOhO1w0OJ13EhEwOGECMrZdkeyDydhvYXaTDA3WdhR8amoJnAgpSgcCR26aOAWk6N9ANVYlv2oQ==}
     dev: false
 
-  /caniuse-lite@1.0.30001443:
-    resolution: {integrity: sha512-jUo8svymO8+Mkj3qbUbVjR8zv8LUGpGkUM/jKvc9SO2BvjCI980dp9fQbf/dyLs6RascPzgR4nhAKFA4OHeSaA==}
+  /caniuse-lite@1.0.30001468:
+    resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==}
     dev: true
 
   /canonicalize@1.0.8:
@@ -5859,6 +8785,22 @@ packages:
       supports-color: 5.5.0
     dev: true
 
+  /chalk@3.0.0:
+    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+    engines: {node: '>=8'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+    dev: true
+
+  /chalk@4.1.1:
+    resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+    dev: true
+
   /chalk@4.1.2:
     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
     engines: {node: '>=10'}
@@ -5875,11 +8817,26 @@ packages:
     resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
     engines: {node: '>=10'}
 
+  /character-entities-legacy@1.1.4:
+    resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+    dev: true
+
+  /character-entities@1.2.4:
+    resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+    dev: true
+
   /character-parser@2.2.0:
     resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
     dependencies:
       is-regex: 1.1.4
-    dev: false
+
+  /character-reference-invalid@1.1.4:
+    resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+    dev: true
+
+  /chardet@0.7.0:
+    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+    dev: true
 
   /chart.js@4.2.1:
     resolution: {integrity: sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==}
@@ -5954,6 +8911,17 @@ packages:
       parse5: 7.1.2
       parse5-htmlparser2-tree-adapter: 7.0.0
 
+  /chokidar-cli@3.0.0:
+    resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==}
+    engines: {node: '>= 8.10.0'}
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+      lodash.debounce: 4.0.8
+      lodash.throttle: 4.1.1
+      yargs: 13.3.2
+    dev: true
+
   /chokidar@3.5.3:
     resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
     engines: {node: '>= 8.10.0'}
@@ -5970,12 +8938,25 @@ packages:
 
   /chownr@1.1.4:
     resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-    dev: false
 
   /chownr@2.0.0:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
     engines: {node: '>=10'}
-    dev: false
+
+  /chromatic@6.17.2:
+    resolution: {integrity: sha512-rtrkywh1CuDDuuiRWXpdiX38aEGN3sGCATsgdh3X/EUBjQjgQtEbSzcMusC3cqz3K9dFKcWwKpFm3jaw9gNymA==}
+    hasBin: true
+    dependencies:
+      '@discoveryjs/json-ext': 0.5.7
+      '@types/webpack-env': 1.18.0
+      snyk-nodejs-lockfile-parser: 1.48.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /ci-info@2.0.0:
+    resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+    dev: true
 
   /ci-info@3.7.1:
     resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
@@ -6007,6 +8988,11 @@ packages:
     resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
     engines: {node: '>=6'}
 
+  /cli-boxes@2.2.1:
+    resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
+    engines: {node: '>=6'}
+    dev: true
+
   /cli-cursor@3.1.0:
     resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
     engines: {node: '>=8'}
@@ -6026,6 +9012,11 @@ packages:
       yargs: 16.2.0
     dev: false
 
+  /cli-spinners@2.7.0:
+    resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
+    engines: {node: '>=6'}
+    dev: true
+
   /cli-table3@0.6.3:
     resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
     engines: {node: 10.* || >= 12.*}
@@ -6051,6 +9042,15 @@ packages:
       string-width: 5.1.2
     dev: true
 
+  /cli-width@3.0.0:
+    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+    engines: {node: '>= 10'}
+    dev: true
+
+  /clipanion@2.6.2:
+    resolution: {integrity: sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw==}
+    dev: true
+
   /cliui@3.2.0:
     resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
     dependencies:
@@ -6059,6 +9059,14 @@ packages:
       wrap-ansi: 2.1.0
     dev: false
 
+  /cliui@5.0.0:
+    resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
+    dependencies:
+      string-width: 3.1.0
+      strip-ansi: 5.2.0
+      wrap-ansi: 5.1.0
+    dev: true
+
   /cliui@6.0.0:
     resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
     dependencies:
@@ -6087,11 +9095,19 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /clone-deep@4.0.1:
+    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      is-plain-object: 2.0.4
+      kind-of: 6.0.3
+      shallow-clone: 3.0.1
+    dev: true
+
   /clone-response@1.0.3:
     resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
     dependencies:
       mimic-response: 1.0.1
-    dev: false
 
   /clone-stats@1.0.0:
     resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
@@ -6100,7 +9116,6 @@ packages:
   /clone@1.0.4:
     resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
     engines: {node: '>=0.8'}
-    dev: false
 
   /clone@2.1.2:
     resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
@@ -6194,7 +9209,7 @@ packages:
 
   /color-support@1.1.3:
     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
-    dev: false
+    hasBin: true
 
   /color@0.11.4:
     resolution: {integrity: sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==}
@@ -6240,6 +9255,10 @@ packages:
     dependencies:
       delayed-stream: 1.0.0
 
+  /comma-separated-tokens@1.0.8:
+    resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
+    dev: true
+
   /commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
@@ -6248,6 +9267,11 @@ packages:
     engines: {node: '>= 6'}
     dev: true
 
+  /commander@6.2.1:
+    resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+    engines: {node: '>= 6'}
+    dev: true
+
   /commander@7.2.0:
     resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
     engines: {node: '>= 10'}
@@ -6256,13 +9280,16 @@ packages:
   /commander@9.5.0:
     resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
     engines: {node: ^12.20.0 || >=14}
-    requiresBuild: true
 
   /common-tags@1.8.2:
     resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
     engines: {node: '>=4.0.0'}
     dev: true
 
+  /commondir@1.0.1:
+    resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+    dev: true
+
   /compare-versions@5.0.1:
     resolution: {integrity: sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==}
     dev: false
@@ -6281,6 +9308,28 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
+  /compressible@2.0.18:
+    resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+    engines: {node: '>= 0.6'}
+    dependencies:
+      mime-db: 1.52.0
+    dev: true
+
+  /compression@1.7.4:
+    resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      accepts: 1.3.8
+      bytes: 3.0.0
+      compressible: 2.0.18
+      debug: 2.6.9
+      on-headers: 1.0.2
+      safe-buffer: 5.1.2
+      vary: 1.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
@@ -6292,7 +9341,6 @@ packages:
       inherits: 2.0.4
       readable-stream: 2.3.7
       typedarray: 0.0.6
-    dev: false
 
   /config-chain@1.1.13:
     resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
@@ -6307,21 +9355,23 @@ packages:
 
   /console-control-strings@1.1.0:
     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-    dev: false
 
   /constantinople@4.0.1:
     resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
-    dev: false
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
 
   /content-disposition@0.5.4:
     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
     engines: {node: '>= 0.6'}
     dependencies:
       safe-buffer: 5.2.1
-    dev: false
+
+  /content-type@1.0.5:
+    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+    engines: {node: '>= 0.6'}
+    dev: true
 
   /convert-source-map@1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
@@ -6330,10 +9380,18 @@ packages:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
     dev: true
 
+  /cookie-signature@1.0.6:
+    resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+    dev: true
+
+  /cookie@0.4.2:
+    resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /cookie@0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
-    dev: false
 
   /copy-descriptor@0.1.1:
     resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
@@ -6347,17 +9405,26 @@ packages:
       is-plain-object: 5.0.0
     dev: false
 
+  /core-js-compat@3.29.1:
+    resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==}
+    dependencies:
+      browserslist: 4.21.5
+    dev: true
+
   /core-js@3.27.1:
     resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==}
     requiresBuild: true
     dev: false
 
+  /core-js@3.29.1:
+    resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
+    requiresBuild: true
+
   /core-util-is@1.0.2:
     resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
 
   /core-util-is@1.0.3:
     resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-    dev: false
 
   /crc-32@1.2.2:
     resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
@@ -6416,6 +9483,11 @@ packages:
       shebang-command: 2.0.0
       which: 2.0.2
 
+  /crypto-random-string@2.0.0:
+    resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+    engines: {node: '>=8'}
+    dev: true
+
   /css-color-names@0.0.4:
     resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==}
     dev: false
@@ -6499,7 +9571,6 @@ packages:
 
   /csstype@3.1.1:
     resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
-    dev: false
 
   /custom-event-polyfill@1.0.7:
     resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
@@ -6613,7 +9684,6 @@ packages:
         optional: true
     dependencies:
       ms: 2.0.0
-    dev: false
 
   /debug@3.2.7(supports-color@8.1.1):
     resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -6712,7 +9782,7 @@ packages:
     dependencies:
       call-bind: 1.0.2
       es-get-iterator: 1.1.3
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       is-arguments: 1.1.1
       is-array-buffer: 3.0.2
       is-date-object: 1.0.5
@@ -6741,6 +9811,14 @@ packages:
     resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
     engines: {node: '>=0.10.0'}
 
+  /default-browser-id@3.0.0:
+    resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+    engines: {node: '>=12'}
+    dependencies:
+      bplist-parser: 0.2.0
+      untildify: 4.0.0
+    dev: true
+
   /default-compare@1.0.0:
     resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==}
     engines: {node: '>=0.10.0'}
@@ -6753,10 +9831,21 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /defaults@1.0.4:
+    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+    dependencies:
+      clone: 1.0.4
+    dev: true
+
   /defer-to-connect@2.0.1:
     resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
     engines: {node: '>=10'}
 
+  /define-lazy-prop@2.0.0:
+    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+    engines: {node: '>=8'}
+    dev: true
+
   /define-properties@1.1.4:
     resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
     engines: {node: '>= 0.4'}
@@ -6790,13 +9879,30 @@ packages:
     resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
     dev: false
 
+  /defu@6.1.2:
+    resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
+    dev: true
+
+  /del@6.1.1:
+    resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
+    engines: {node: '>=10'}
+    dependencies:
+      globby: 11.1.0
+      graceful-fs: 4.2.11
+      is-glob: 4.0.3
+      is-path-cwd: 2.2.0
+      is-path-inside: 3.0.3
+      p-map: 4.0.0
+      rimraf: 3.0.2
+      slash: 3.0.0
+    dev: true
+
   /delayed-stream@1.0.0:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
 
   /delegates@1.0.0:
     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-    dev: false
 
   /denque@1.5.1:
     resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==}
@@ -6815,13 +9921,27 @@ packages:
   /depd@2.0.0:
     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
     engines: {node: '>= 0.8'}
-    dev: false
+
+  /dequal@2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /destroy@1.2.0:
+    resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+    dev: true
 
   /detect-file@1.0.0:
     resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /detect-indent@6.1.0:
+    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+    engines: {node: '>=8'}
+    dev: true
+
   /detect-libc@2.0.1:
     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
     engines: {node: '>=8'}
@@ -6832,6 +9952,23 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /detect-package-manager@2.0.1:
+    resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==}
+    engines: {node: '>=12'}
+    dependencies:
+      execa: 5.1.1
+    dev: true
+
+  /detect-port@1.5.1:
+    resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==}
+    hasBin: true
+    dependencies:
+      address: 1.2.2
+      debug: 4.3.4(supports-color@8.1.1)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /diff-sequences@28.1.1:
     resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==}
     engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
@@ -6842,6 +9979,11 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
+  /diff@4.0.2:
+    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+    engines: {node: '>=0.3.1'}
+    dev: true
+
   /diff@5.1.0:
     resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
     engines: {node: '>=0.3.1'}
@@ -6877,7 +10019,6 @@ packages:
 
   /doctypes@1.1.0:
     resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==}
-    dev: false
 
   /dom-accessibility-api@0.5.16:
     resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
@@ -6890,6 +10031,10 @@ packages:
       domhandler: 5.0.3
       entities: 4.4.0
 
+  /dom-walk@0.1.2:
+    resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
+    dev: true
+
   /domelementtype@2.3.0:
     resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
 
@@ -6913,10 +10058,14 @@ packages:
       domelementtype: 2.3.0
       domhandler: 5.0.3
 
+  /dotenv-expand@10.0.0:
+    resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
+    engines: {node: '>=12'}
+    dev: true
+
   /dotenv@16.0.3:
     resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
     engines: {node: '>=12'}
-    dev: false
 
   /duplexer2@0.1.4:
     resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
@@ -6935,7 +10084,6 @@ packages:
       inherits: 2.0.4
       readable-stream: 2.3.7
       stream-shift: 1.0.1
-    dev: false
 
   /each-props@1.3.2:
     resolution: {integrity: sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==}
@@ -6970,13 +10118,16 @@ packages:
       sigmund: 1.0.1
     dev: true
 
+  /ee-first@1.1.1:
+    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+    dev: true
+
   /ejs@3.1.8:
     resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
     engines: {node: '>=0.10.0'}
     hasBin: true
     dependencies:
       jake: 10.8.5
-    dev: false
 
   /electron-to-chromium@1.4.284:
     resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
@@ -6986,6 +10137,10 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /emoji-regex@7.0.3:
+    resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+    dev: true
+
   /emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -6997,6 +10152,11 @@ packages:
     resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
     dev: false
 
+  /encodeurl@1.0.2:
+    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /encoding@0.1.13:
     resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
     requiresBuild: true
@@ -7005,6 +10165,12 @@ packages:
     dev: false
     optional: true
 
+  /end-of-stream@1.1.0:
+    resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==}
+    dependencies:
+      once: 1.3.3
+    dev: true
+
   /end-of-stream@1.4.4:
     resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
     dependencies:
@@ -7030,6 +10196,12 @@ packages:
     engines: {node: '>=6'}
     dev: false
 
+  /envinfo@7.8.1:
+    resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
   /err-code@2.0.3:
     resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
     dev: false
@@ -7073,7 +10245,7 @@ packages:
     resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
     dependencies:
       call-bind: 1.0.2
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       has-symbols: 1.0.3
       is-arguments: 1.1.1
       is-map: 2.0.2
@@ -7083,6 +10255,10 @@ packages:
       stop-iteration-iterator: 1.0.0
     dev: true
 
+  /es-module-lexer@0.9.3:
+    resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
+    dev: true
+
   /es-shim-unscopables@1.0.0:
     resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
     dependencies:
@@ -7116,6 +10292,10 @@ packages:
       es6-symbol: 3.1.3
     dev: false
 
+  /es6-object-assign@1.1.0:
+    resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
+    dev: true
+
   /es6-promise@4.2.8:
     resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
     dev: false
@@ -7288,6 +10468,21 @@ packages:
     dev: false
     optional: true
 
+  /esbuild-plugin-alias@0.2.1:
+    resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==}
+    dev: true
+
+  /esbuild-register@3.4.2(esbuild@0.17.14):
+    resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==}
+    peerDependencies:
+      esbuild: '>=0.12 <1'
+    dependencies:
+      debug: 4.3.4(supports-color@8.1.1)
+      esbuild: 0.17.14
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /esbuild-sunos-64@0.14.42:
     resolution: {integrity: sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==}
     engines: {node: '>=12'}
@@ -7386,7 +10581,6 @@ packages:
 
   /escape-html@1.0.3:
     resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-    dev: false
 
   /escape-regexp@0.0.1:
     resolution: {integrity: sha512-jVgdsYRa7RKxTT6MKNC3gdT+BF0Gfhpel19+HMRZJC2L0PufB0XOBuXBoXj29NKHwuktnAXd1Z1lyiH/8vOTpw==}
@@ -7420,7 +10614,6 @@ packages:
       optionator: 0.8.3
     optionalDependencies:
       source-map: 0.6.1
-    dev: false
 
   /eslint-formatter-pretty@4.1.0:
     resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==}
@@ -7664,6 +10857,17 @@ packages:
     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
     engines: {node: '>=4.0'}
 
+  /estree-to-babel@3.2.1:
+    resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==}
+    engines: {node: '>=8.3.0'}
+    dependencies:
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
+      c8: 7.13.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /estree-walker@2.0.2:
     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
@@ -7671,6 +10875,17 @@ packages:
     resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
     engines: {node: '>=0.10.0'}
 
+  /etag@1.8.1:
+    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
+  /event-loop-spinner@2.2.0:
+    resolution: {integrity: sha512-KB44sV4Mv7uLIkJHJ5qhiZe5um6th2g57nHQL/uqnPHKP2IswoTRWUteEXTJQL4gW++1zqWUni+H2hGkP51c9w==}
+    dependencies:
+      tslib: 2.5.0
+    dev: true
+
   /event-stream@3.3.4:
     resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
     dependencies:
@@ -7703,7 +10918,6 @@ packages:
   /events@3.3.0:
     resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
     engines: {node: '>=0.8.x'}
-    dev: false
 
   /execa@0.7.0:
     resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
@@ -7811,6 +11025,45 @@ packages:
       jest-util: 29.5.0
     dev: true
 
+  /express@4.18.2:
+    resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
+    engines: {node: '>= 0.10.0'}
+    dependencies:
+      accepts: 1.3.8
+      array-flatten: 1.1.1
+      body-parser: 1.20.1
+      content-disposition: 0.5.4
+      content-type: 1.0.5
+      cookie: 0.5.0
+      cookie-signature: 1.0.6
+      debug: 2.6.9
+      depd: 2.0.0
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      finalhandler: 1.2.0
+      fresh: 0.5.2
+      http-errors: 2.0.0
+      merge-descriptors: 1.0.1
+      methods: 1.1.2
+      on-finished: 2.4.1
+      parseurl: 1.3.3
+      path-to-regexp: 0.1.7
+      proxy-addr: 2.0.7
+      qs: 6.11.0
+      range-parser: 1.2.1
+      safe-buffer: 5.2.1
+      send: 0.18.0
+      serve-static: 1.15.0
+      setprototypeof: 1.2.0
+      statuses: 2.0.1
+      type-is: 1.6.18
+      utils-merge: 1.0.1
+      vary: 1.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /ext-list@2.2.2:
     resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
     engines: {node: '>=0.10.0'}
@@ -7850,6 +11103,15 @@ packages:
   /extend@3.0.2:
     resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
 
+  /external-editor@3.1.0:
+    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+    engines: {node: '>=4'}
+    dependencies:
+      chardet: 0.7.0
+      iconv-lite: 0.4.24
+      tmp: 0.0.33
+    dev: true
+
   /extglob@2.0.4:
     resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
     engines: {node: '>=0.10.0'}
@@ -7866,6 +11128,18 @@ packages:
       - supports-color
     dev: false
 
+  /extract-zip@1.7.0:
+    resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==}
+    hasBin: true
+    dependencies:
+      concat-stream: 1.6.2
+      debug: 2.6.9
+      mkdirp: 0.5.6
+      yauzl: 2.10.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /extract-zip@2.0.1(supports-color@8.1.1):
     resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
     engines: {node: '>= 10.17.0'}
@@ -7999,6 +11273,12 @@ packages:
     dependencies:
       reusify: 1.0.4
 
+  /fault@1.0.4:
+    resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+    dependencies:
+      format: 0.2.2
+    dev: true
+
   /fb-watchman@2.0.2:
     resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
     dependencies:
@@ -8025,6 +11305,10 @@ packages:
       node-domexception: 1.0.0
       web-streams-polyfill: 3.2.1
 
+  /fetch-retry@5.0.4:
+    resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==}
+    dev: true
+
   /figures@3.2.0:
     resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
     engines: {node: '>=8'}
@@ -8039,6 +11323,13 @@ packages:
       flat-cache: 3.0.4
     dev: true
 
+  /file-system-cache@2.0.2:
+    resolution: {integrity: sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA==}
+    dependencies:
+      fs-extra: 11.1.0
+      ramda: 0.28.0
+    dev: true
+
   /file-type@17.1.6:
     resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8061,7 +11352,6 @@ packages:
     resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
     dependencies:
       minimatch: 5.1.2
-    dev: false
 
   /filename-reserved-regex@3.0.0:
     resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
@@ -8093,6 +11383,39 @@ packages:
     dependencies:
       to-regex-range: 5.0.1
 
+  /finalhandler@1.2.0:
+    resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      debug: 2.6.9
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      on-finished: 2.4.1
+      parseurl: 1.3.3
+      statuses: 2.0.1
+      unpipe: 1.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /find-cache-dir@2.1.0:
+    resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      commondir: 1.0.1
+      make-dir: 2.1.0
+      pkg-dir: 3.0.0
+    dev: true
+
+  /find-cache-dir@3.3.2:
+    resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
+    engines: {node: '>=8'}
+    dependencies:
+      commondir: 1.0.1
+      make-dir: 3.1.0
+      pkg-dir: 4.2.0
+    dev: true
+
   /find-my-way@7.6.0:
     resolution: {integrity: sha512-H7berWdHJ+5CNVr4ilLWPai4ml7Y2qAsxjw3pfeBxPigZmaDTzF0wjJLj90xRCmGcWYcyt050yN+34OZDJm1eQ==}
     engines: {node: '>=14'}
@@ -8110,6 +11433,13 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
+  /find-up@3.0.0:
+    resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+    engines: {node: '>=6'}
+    dependencies:
+      locate-path: 3.0.0
+    dev: true
+
   /find-up@4.1.0:
     resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
     engines: {node: '>=8'}
@@ -8188,6 +11518,11 @@ packages:
     resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==}
     dev: false
 
+  /flow-parser@0.202.0:
+    resolution: {integrity: sha512-ZiXxSIXK3zPmY3zrzCofFonM2T+/3Jz5QZKJyPVtUERQEJUnYkXBQ+0H3FzyqiyJs+VXqb/UNU6/K6sziVYdxw==}
+    engines: {node: '>=0.4.0'}
+    dev: true
+
   /fluent-ffmpeg@2.1.2:
     resolution: {integrity: sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==}
     engines: {node: '>=0.8.0'}
@@ -8262,7 +11597,6 @@ packages:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       mime-types: 2.1.35
-    dev: false
 
   /form-data@4.0.0:
     resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
@@ -8272,6 +11606,11 @@ packages:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
+  /format@0.2.2:
+    resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+    engines: {node: '>=0.4.x'}
+    dev: true
+
   /formdata-polyfill@4.0.10:
     resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
     engines: {node: '>=12.20.0'}
@@ -8281,7 +11620,6 @@ packages:
   /forwarded@0.2.0:
     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
     engines: {node: '>= 0.6'}
-    dev: false
 
   /fragment-cache@0.2.1:
     resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
@@ -8290,19 +11628,32 @@ packages:
       map-cache: 0.2.2
     dev: false
 
+  /fresh@0.5.2:
+    resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /from@0.1.7:
     resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
     dev: true
 
   /fs-constants@1.0.0:
     resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-    dev: false
+
+  /fs-extra@11.1.0:
+    resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
+    engines: {node: '>=14.14'}
+    dependencies:
+      graceful-fs: 4.2.11
+      jsonfile: 6.1.0
+      universalify: 2.0.0
+    dev: true
 
   /fs-extra@7.0.1:
     resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
     engines: {node: '>=6 <7 || >=8'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jsonfile: 4.0.0
       universalify: 0.1.2
     dev: true
@@ -8311,7 +11662,7 @@ packages:
     resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
     engines: {node: '>=6 <7 || >=8'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jsonfile: 4.0.0
       universalify: 0.1.2
     dev: false
@@ -8321,7 +11672,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       at-least-node: 1.0.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jsonfile: 6.1.0
       universalify: 2.0.0
     dev: true
@@ -8338,13 +11689,12 @@ packages:
     engines: {node: '>= 8'}
     dependencies:
       minipass: 3.3.6
-    dev: false
 
   /fs-mkdirp-stream@1.0.0:
     resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
     engines: {node: '>= 0.10'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       through2: 2.0.5
     dev: false
 
@@ -8362,7 +11712,7 @@ packages:
     resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
     engines: {node: '>=0.6'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       inherits: 2.0.4
       mkdirp: 0.5.6
       rimraf: 2.7.1
@@ -8398,8 +11748,6 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wide-align: 1.1.5
-    dev: false
-    optional: true
 
   /gauge@4.0.4:
     resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
@@ -8437,13 +11785,6 @@ packages:
     resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
     dev: true
 
-  /get-intrinsic@1.1.3:
-    resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
-    dependencies:
-      function-bind: 1.1.1
-      has: 1.0.3
-      has-symbols: 1.0.3
-
   /get-intrinsic@1.2.0:
     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
     dependencies:
@@ -8451,6 +11792,11 @@ packages:
       has: 1.0.3
       has-symbols: 1.0.3
 
+  /get-npm-tarball-url@2.0.3:
+    resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==}
+    engines: {node: '>=12.17'}
+    dev: true
+
   /get-package-type@0.1.0:
     resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
     engines: {node: '>=8.0.0'}
@@ -8522,10 +11868,29 @@ packages:
       readable-stream: 1.1.14
     dev: false
 
+  /giget@1.1.2:
+    resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
+    hasBin: true
+    dependencies:
+      colorette: 2.0.19
+      defu: 6.1.2
+      https-proxy-agent: 5.0.1
+      mri: 1.2.0
+      node-fetch-native: 1.0.2
+      pathe: 1.1.0
+      tar: 6.1.13
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /github-from-package@0.0.0:
     resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
     dev: false
 
+  /github-slugger@1.5.0:
+    resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
+    dev: true
+
   /glob-parent@3.1.0:
     resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
     dependencies:
@@ -8546,6 +11911,26 @@ packages:
       is-glob: 4.0.3
     dev: true
 
+  /glob-promise@4.2.2(glob@7.2.3):
+    resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==}
+    engines: {node: '>=12'}
+    peerDependencies:
+      glob: ^7.1.6
+    dependencies:
+      '@types/glob': 7.2.0
+      glob: 7.2.3
+    dev: true
+
+  /glob-promise@6.0.2(glob@8.1.0):
+    resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      glob: ^8.0.3
+    dependencies:
+      '@types/glob': 8.1.0
+      glob: 8.1.0
+    dev: true
+
   /glob-stream@6.1.0:
     resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
     engines: {node: '>= 0.10'}
@@ -8562,6 +11947,10 @@ packages:
       unique-stream: 2.3.1
     dev: false
 
+  /glob-to-regexp@0.4.1:
+    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+    dev: true
+
   /glob-watcher@5.0.5:
     resolution: {integrity: sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==}
     engines: {node: '>= 0.10'}
@@ -8624,6 +12013,13 @@ packages:
       which: 1.3.1
     dev: false
 
+  /global@4.4.0:
+    resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
+    dependencies:
+      min-document: 2.19.0
+      process: 0.11.10
+    dev: true
+
   /globals@11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
     engines: {node: '>=4'}
@@ -8680,7 +12076,6 @@ packages:
       lowercase-keys: 2.0.0
       p-cancelable: 2.1.1
       responselike: 2.0.1
-    dev: false
 
   /got@12.6.0:
     resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==}
@@ -8700,11 +12095,20 @@ packages:
 
   /graceful-fs@4.2.10:
     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+    dev: false
+
+  /graceful-fs@4.2.11:
+    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
 
   /grapheme-splitter@1.0.4:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
     dev: true
 
+  /graphql@16.6.0:
+    resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==}
+    engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+    dev: true
+
   /gsap@3.11.5:
     resolution: {integrity: sha512-Q89nKCLgoX5xUjznh9LcaIUkz54k1voNucT1Rpf9SJNFIQznBwFqt5qUUQbeVInFyN/n18OUJkpeI6CNEDt74w==}
     dev: false
@@ -8754,7 +12158,7 @@ packages:
     resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==}
     engines: {node: '>=10'}
     dependencies:
-      '@types/node': 17.0.5
+      '@types/node': 18.11.18
       '@types/vinyl': 2.0.7
       istextorbinary: 3.3.0
       replacestream: 4.0.3
@@ -8790,11 +12194,36 @@ packages:
       glogg: 1.0.2
     dev: false
 
+  /gunzip-maybe@1.4.2:
+    resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
+    hasBin: true
+    dependencies:
+      browserify-zlib: 0.1.4
+      is-deflate: 1.0.0
+      is-gzip: 1.0.0
+      peek-stream: 1.1.3
+      pumpify: 1.5.1
+      through2: 2.0.5
+    dev: true
+
   /hammerjs@2.0.8:
     resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
     engines: {node: '>=0.8.0'}
     dev: false
 
+  /handlebars@4.7.7:
+    resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
+    engines: {node: '>=0.4.7'}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.7
+      neo-async: 2.6.2
+      source-map: 0.6.1
+      wordwrap: 1.0.0
+    optionalDependencies:
+      uglify-js: 3.17.4
+    dev: true
+
   /happy-dom@8.9.0:
     resolution: {integrity: sha512-JZwJuGdR7ko8L61136YzmrLv7LgTh5b8XaEM3P709mLjyQuXJ3zHTDXvUtBBahRjGlcYW0zGjIiEWizoTUGKfA==}
     dependencies:
@@ -8868,7 +12297,6 @@ packages:
 
   /has-unicode@2.0.1:
     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-    dev: false
 
   /has-value@0.3.1:
     resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
@@ -8907,14 +12335,36 @@ packages:
     dependencies:
       function-bind: 1.1.1
 
+  /hash-sum@2.0.0:
+    resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
+    dev: true
+
   /hashlru@2.3.0:
     resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==}
     dev: false
 
+  /hast-util-parse-selector@2.2.5:
+    resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
+    dev: true
+
+  /hastscript@6.0.0:
+    resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
+    dependencies:
+      '@types/hast': 2.3.4
+      comma-separated-tokens: 1.0.8
+      hast-util-parse-selector: 2.2.5
+      property-information: 5.6.0
+      space-separated-tokens: 1.1.5
+    dev: true
+
   /he@1.2.0:
     resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
     hasBin: true
 
+  /headers-polyfill@3.1.2:
+    resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==}
+    dev: true
+
   /hexoid@1.0.0:
     resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
     engines: {node: '>=8'}
@@ -8922,7 +12372,6 @@ packages:
 
   /highlight.js@10.7.3:
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
-    dev: false
 
   /homedir-polyfill@1.0.3:
     resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
@@ -8964,6 +12413,11 @@ packages:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
     dev: true
 
+  /html-tags@3.2.0:
+    resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
+    engines: {node: '>=8'}
+    dev: true
+
   /htmlparser2@8.0.1:
     resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
     dependencies:
@@ -8984,7 +12438,6 @@ packages:
       setprototypeof: 1.2.0
       statuses: 2.0.1
       toidentifier: 1.0.1
-    dev: false
 
   /http-proxy-agent@5.0.0:
     resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
@@ -9021,7 +12474,6 @@ packages:
     dependencies:
       quick-lru: 5.1.1
       resolve-alpn: 1.2.1
-    dev: false
 
   /http2-wrapper@2.2.0:
     resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==}
@@ -9048,6 +12500,16 @@ packages:
     dev: false
     optional: true
 
+  /https-proxy-agent@4.0.0:
+    resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==}
+    engines: {node: '>= 6.0.0'}
+    dependencies:
+      agent-base: 5.1.1
+      debug: 4.3.4(supports-color@8.1.1)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /https-proxy-agent@5.0.1:
     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
     engines: {node: '>= 6'}
@@ -9056,7 +12518,6 @@ packages:
       debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
   /human-signals@1.1.1:
     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
@@ -9083,7 +12544,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       safer-buffer: 2.1.2
-    dev: false
 
   /iconv-lite@0.6.3:
     resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
@@ -9162,6 +12622,27 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /inquirer@8.2.5:
+    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      ansi-escapes: 4.3.2
+      chalk: 4.1.2
+      cli-cursor: 3.1.0
+      cli-width: 3.0.0
+      external-editor: 3.1.0
+      figures: 3.2.0
+      lodash: 4.17.21
+      mute-stream: 0.0.8
+      ora: 5.4.1
+      run-async: 2.4.1
+      rxjs: 7.8.0
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      through: 2.3.8
+      wrap-ansi: 7.0.0
+    dev: true
+
   /insert-text-at-cursor@0.3.0:
     resolution: {integrity: sha512-/nPtyeX9xPUvxZf+r0518B7uqNKlP+LqNJqSiXFEaa2T71rWIwTVXGH7hB9xO/EVdwa5/pWlFCPwShOW81XIxQ==}
     dev: false
@@ -9182,7 +12663,6 @@ packages:
   /interpret@1.4.0:
     resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
     engines: {node: '>= 0.10'}
-    dev: false
 
   /invert-kv@1.0.0:
     resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
@@ -9255,12 +12735,10 @@ packages:
 
   /ip@2.0.0:
     resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
-    dev: false
 
   /ipaddr.js@1.9.1:
     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
     engines: {node: '>= 0.10'}
-    dev: false
 
   /ipaddr.js@2.0.1:
     resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==}
@@ -9276,6 +12754,16 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /is-absolute-url@3.0.3:
+    resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /is-absolute-url@4.0.1:
+    resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    dev: true
+
   /is-absolute@1.0.0:
     resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
     engines: {node: '>=0.10.0'}
@@ -9298,6 +12786,17 @@ packages:
       kind-of: 6.0.3
     dev: false
 
+  /is-alphabetical@1.0.4:
+    resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+    dev: true
+
+  /is-alphanumerical@1.0.4:
+    resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+    dependencies:
+      is-alphabetical: 1.0.4
+      is-decimal: 1.0.4
+    dev: true
+
   /is-arguments@1.1.1:
     resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
     engines: {node: '>= 0.4'}
@@ -9345,6 +12844,11 @@ packages:
     resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
     dev: false
 
+  /is-buffer@2.0.5:
+    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+    engines: {node: '>=4'}
+    dev: true
+
   /is-callable@1.2.7:
     resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
     engines: {node: '>= 0.4'}
@@ -9383,6 +12887,14 @@ packages:
       has-tostringtag: 1.0.0
     dev: true
 
+  /is-decimal@1.0.4:
+    resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+    dev: true
+
+  /is-deflate@1.0.0:
+    resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
+    dev: true
+
   /is-descriptor@0.1.6:
     resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
     engines: {node: '>=0.10.0'}
@@ -9401,12 +12913,17 @@ packages:
       kind-of: 6.0.3
     dev: false
 
+  /is-docker@2.2.1:
+    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+    engines: {node: '>=8'}
+    hasBin: true
+    dev: true
+
   /is-expression@4.0.0:
     resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==}
     dependencies:
       acorn: 7.4.1
       object-assign: 4.1.1
-    dev: false
 
   /is-extendable@0.1.1:
     resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
@@ -9435,6 +12952,11 @@ packages:
       number-is-nan: 1.0.1
     dev: false
 
+  /is-fullwidth-code-point@2.0.0:
+    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+    engines: {node: '>=4'}
+    dev: true
+
   /is-fullwidth-code-point@3.0.0:
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     engines: {node: '>=8'}
@@ -9444,11 +12966,22 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /is-function@1.0.2:
+    resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
+    dev: true
+
   /is-generator-fn@2.1.0:
     resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
     engines: {node: '>=6'}
     dev: true
 
+  /is-generator-function@1.0.10:
+    resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
   /is-glob@3.1.0:
     resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
     engines: {node: '>=0.10.0'}
@@ -9462,6 +12995,15 @@ packages:
     dependencies:
       is-extglob: 2.1.1
 
+  /is-gzip@1.0.0:
+    resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /is-hexadecimal@1.0.4:
+    resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+    dev: true
+
   /is-installed-globally@0.4.0:
     resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
     engines: {node: '>=10'}
@@ -9470,6 +13012,11 @@ packages:
       is-path-inside: 3.0.3
     dev: true
 
+  /is-interactive@1.0.0:
+    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+    engines: {node: '>=8'}
+    dev: true
+
   /is-ip@3.1.0:
     resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
     engines: {node: '>=8'}
@@ -9484,6 +13031,14 @@ packages:
     resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
     dev: true
 
+  /is-nan@1.3.2:
+    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.2
+      define-properties: 1.1.4
+    dev: true
+
   /is-negated-glob@1.0.0:
     resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
     engines: {node: '>=0.10.0'}
@@ -9494,6 +13049,10 @@ packages:
     engines: {node: '>= 0.4'}
     dev: true
 
+  /is-node-process@1.0.1:
+    resolution: {integrity: sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==}
+    dev: true
+
   /is-number-object@1.0.7:
     resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
     engines: {node: '>= 0.4'}
@@ -9517,6 +13076,11 @@ packages:
     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
     engines: {node: '>=0.12.0'}
 
+  /is-path-cwd@2.2.0:
+    resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
+    engines: {node: '>=6'}
+    dev: true
+
   /is-path-inside@3.0.3:
     resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
     engines: {node: '>=8'}
@@ -9526,17 +13090,20 @@ packages:
     resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
     engines: {node: '>=0.10.0'}
 
+  /is-plain-obj@4.1.0:
+    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+    engines: {node: '>=12'}
+    dev: true
+
   /is-plain-object@2.0.4:
     resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
     engines: {node: '>=0.10.0'}
     dependencies:
       isobject: 3.0.1
-    dev: false
 
   /is-plain-object@5.0.0:
     resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /is-potential-custom-element-name@1.0.1:
     resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -9544,7 +13111,6 @@ packages:
 
   /is-promise@2.2.2:
     resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
-    dev: false
 
   /is-regex@1.1.4:
     resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
@@ -9669,12 +13235,22 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /is-wsl@2.2.0:
+    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+    engines: {node: '>=8'}
+    dependencies:
+      is-docker: 2.2.1
+    dev: true
+
+  /is@3.3.0:
+    resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==}
+    dev: true
+
   /isarray@0.0.1:
     resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
 
   /isarray@1.0.0:
     resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-    dev: false
 
   /isarray@2.0.5:
     resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -9693,7 +13269,20 @@ packages:
   /isobject@3.0.1:
     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
     engines: {node: '>=0.10.0'}
-    dev: false
+
+  /isobject@4.0.0:
+    resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /isomorphic-unfetch@3.1.0:
+    resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
+    dependencies:
+      node-fetch: 2.6.7
+      unfetch: 4.2.0
+    transitivePeerDependencies:
+      - encoding
+    dev: true
 
   /isstream@0.1.2:
     resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
@@ -9707,8 +13296,8 @@ packages:
     resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
     engines: {node: '>=8'}
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/parser': 7.20.7
+      '@babel/core': 7.21.3
+      '@babel/parser': 7.21.3
       '@istanbuljs/schema': 0.1.3
       istanbul-lib-coverage: 3.2.0
       semver: 6.3.0
@@ -9766,7 +13355,6 @@ packages:
       chalk: 4.1.2
       filelist: 1.0.4
       minimatch: 3.1.2
-    dev: false
 
   /jest-changed-files@29.5.0:
     resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
@@ -9819,7 +13407,7 @@ packages:
       '@jest/types': 29.5.0
       chalk: 4.1.2
       exit: 0.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       import-local: 3.1.0
       jest-config: 29.5.0(@types/node@18.15.11)
       jest-util: 29.5.0
@@ -9844,16 +13432,16 @@ packages:
       ts-node:
         optional: true
     dependencies:
-      '@babel/core': 7.20.12
+      '@babel/core': 7.21.3
       '@jest/test-sequencer': 29.5.0
       '@jest/types': 29.5.0
       '@types/node': 18.15.11
-      babel-jest: 29.5.0(@babel/core@7.20.12)
+      babel-jest: 29.5.0(@babel/core@7.21.3)
       chalk: 4.1.2
       ci-info: 3.7.1
       deepmerge: 4.2.2
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-circus: 29.5.0
       jest-environment-node: 29.5.0
       jest-get-type: 29.4.3
@@ -9949,7 +13537,7 @@ packages:
       '@types/node': 18.15.11
       anymatch: 3.1.3
       fb-watchman: 2.0.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-regex-util: 29.4.3
       jest-util: 29.5.0
       jest-worker: 29.5.0
@@ -9985,13 +13573,21 @@ packages:
       '@jest/types': 29.5.0
       '@types/stack-utils': 2.0.1
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       micromatch: 4.0.5
       pretty-format: 29.5.0
       slash: 3.0.0
       stack-utils: 2.0.6
     dev: true
 
+  /jest-mock@27.5.1:
+    resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==}
+    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+    dependencies:
+      '@jest/types': 27.5.1
+      '@types/node': 18.15.11
+    dev: true
+
   /jest-mock@29.5.0:
     resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -10033,7 +13629,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       chalk: 4.1.2
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0)
       jest-util: 29.5.0
@@ -10055,7 +13651,7 @@ packages:
       '@types/node': 18.15.11
       chalk: 4.1.2
       emittery: 0.13.1
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-docblock: 29.4.3
       jest-environment-node: 29.5.0
       jest-haste-map: 29.5.0
@@ -10088,7 +13684,7 @@ packages:
       cjs-module-lexer: 1.2.2
       collect-v8-coverage: 1.0.1
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-haste-map: 29.5.0
       jest-message-util: 29.5.0
       jest-mock: 29.5.0
@@ -10106,21 +13702,21 @@ packages:
     resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@babel/core': 7.20.12
-      '@babel/generator': 7.20.7
-      '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12)
-      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.12)
-      '@babel/traverse': 7.20.12
-      '@babel/types': 7.20.7
+      '@babel/core': 7.21.3
+      '@babel/generator': 7.21.3
+      '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3)
+      '@babel/traverse': 7.21.3
+      '@babel/types': 7.21.3
       '@jest/expect-utils': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
       '@types/babel__traverse': 7.18.3
       '@types/prettier': 2.7.2
-      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12)
+      babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
       chalk: 4.1.2
       expect: 29.5.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       jest-diff: 29.5.0
       jest-get-type: 29.4.3
       jest-matcher-utils: 29.5.0
@@ -10141,7 +13737,7 @@ packages:
       '@types/node': 18.15.11
       chalk: 4.1.2
       ci-info: 3.7.1
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       picomatch: 2.3.1
     dev: true
 
@@ -10245,13 +13841,17 @@ packages:
       nopt: 6.0.0
     dev: true
 
+  /js-levenshtein@1.1.6:
+    resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /js-sdsl@4.2.0:
     resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
     dev: true
 
   /js-stringify@1.0.2:
     resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
-    dev: false
 
   /js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -10289,6 +13889,36 @@ packages:
     resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==}
     engines: {node: '>=0.1.90'}
 
+  /jscodeshift@0.14.0(@babel/preset-env@7.20.2):
+    resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
+    hasBin: true
+    peerDependencies:
+      '@babel/preset-env': ^7.1.6
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/preset-flow': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-typescript': 7.21.0(@babel/core@7.21.3)
+      '@babel/register': 7.21.0(@babel/core@7.21.3)
+      babel-core: 7.0.0-bridge.0(@babel/core@7.21.3)
+      chalk: 4.1.2
+      flow-parser: 0.202.0
+      graceful-fs: 4.2.11
+      micromatch: 4.0.5
+      neo-async: 2.6.2
+      node-dir: 0.1.17
+      recast: 0.21.5
+      temp: 0.8.4
+      write-file-atomic: 2.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /jsdom@21.1.1:
     resolution: {integrity: sha512-Jjgdmw48RKcdAIQyUD1UdBh2ecH7VqwaXPN3ehoZN6MqgVbMn+lRm1aAT1AsdJRAJpwfa4IpwgzySn61h2qu3w==}
     engines: {node: '>=14'}
@@ -10330,6 +13960,11 @@ packages:
       - utf-8-validate
     dev: false
 
+  /jsesc@0.5.0:
+    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+    hasBin: true
+    dev: true
+
   /jsesc@2.5.2:
     resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
     engines: {node: '>=4'}
@@ -10339,6 +13974,17 @@ packages:
   /json-buffer@3.0.1:
     resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
 
+  /json-file-plus@3.3.1:
+    resolution: {integrity: sha512-wo0q1UuiV5NsDPQDup1Km8IwEeqe+olr8tkWxeJq9Bjtcp7DZ0l+yrg28fSC3DEtrE311mhTZ54QGS6oiqnZEA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is: 3.3.0
+      node.extend: 2.0.2
+      object.assign: 4.1.4
+      promiseback: 2.0.3
+      safer-buffer: 2.1.2
+    dev: true
+
   /json-parse-even-better-errors@2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
     dev: true
@@ -10369,7 +14015,6 @@ packages:
   /json5@2.2.3:
     resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
     engines: {node: '>=6'}
-    hasBin: true
 
   /jsonc-parser@3.2.0:
     resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
@@ -10378,14 +14023,14 @@ packages:
   /jsonfile@4.0.0:
     resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
 
   /jsonfile@5.0.0:
     resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
     dependencies:
       universalify: 0.1.2
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: false
 
   /jsonfile@6.1.0:
@@ -10393,7 +14038,7 @@ packages:
     dependencies:
       universalify: 2.0.0
     optionalDependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
     dev: true
 
   /jsonld@8.1.1:
@@ -10441,7 +14086,6 @@ packages:
     dependencies:
       is-promise: 2.2.2
       promise: 7.3.1
-    dev: false
 
   /just-debounce@1.1.0:
     resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==}
@@ -10532,6 +14176,15 @@ packages:
     engines: {node: '> 0.8'}
     dev: true
 
+  /lazy-universal-dotenv@4.0.0:
+    resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==}
+    engines: {node: '>=14.0.0'}
+    dependencies:
+      app-root-dir: 1.0.2
+      dotenv: 16.0.3
+      dotenv-expand: 10.0.0
+    dev: true
+
   /lazystream@1.0.1:
     resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
     engines: {node: '>= 0.6.3'}
@@ -10564,7 +14217,6 @@ packages:
     dependencies:
       prelude-ls: 1.1.2
       type-check: 0.3.2
-    dev: false
 
   /levn@0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
@@ -10630,7 +14282,7 @@ packages:
     resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
     engines: {node: '>=0.10.0'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       parse-json: 2.2.0
       pify: 2.3.0
       pinkie-promise: 2.0.1
@@ -10646,6 +14298,14 @@ packages:
     engines: {node: '>=14'}
     dev: true
 
+  /locate-path@3.0.0:
+    resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+    engines: {node: '>=6'}
+    dependencies:
+      p-locate: 3.0.0
+      path-exists: 3.0.0
+    dev: true
+
   /locate-path@5.0.0:
     resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
     engines: {node: '>=8'}
@@ -10659,6 +14319,22 @@ packages:
       p-locate: 5.0.0
     dev: true
 
+  /lodash.clone@4.5.0:
+    resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==}
+    dev: true
+
+  /lodash.clonedeep@4.5.0:
+    resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+    dev: true
+
+  /lodash.constant@3.0.0:
+    resolution: {integrity: sha512-X5XMrB+SdI1mFa81162NSTo/YNd23SLdLOLzcXTwS4inDZ5YCL8X67UFzZJAH4CqIa6R8cr56CShfA5K5MFiYQ==}
+    dev: true
+
+  /lodash.debounce@4.0.8:
+    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+    dev: true
+
   /lodash.defaults@4.2.0:
     resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
 
@@ -10666,25 +14342,61 @@ packages:
     resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
     dev: false
 
+  /lodash.filter@4.6.0:
+    resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==}
+    dev: true
+
+  /lodash.flatmap@4.5.0:
+    resolution: {integrity: sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==}
+    dev: true
+
   /lodash.flatten@4.4.0:
     resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
     dev: false
 
+  /lodash.foreach@4.5.0:
+    resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
+    dev: true
+
   /lodash.get@4.4.2:
     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
     dev: true
 
+  /lodash.has@4.5.2:
+    resolution: {integrity: sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==}
+    dev: true
+
   /lodash.isarguments@3.1.0:
     resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
 
+  /lodash.isempty@4.4.0:
+    resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
+    dev: true
+
   /lodash.isequal@4.5.0:
     resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
     dev: true
 
+  /lodash.isfunction@3.0.9:
+    resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
+    dev: true
+
   /lodash.isplainobject@4.0.6:
     resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
     dev: false
 
+  /lodash.isundefined@3.0.1:
+    resolution: {integrity: sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==}
+    dev: true
+
+  /lodash.keys@4.2.0:
+    resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==}
+    dev: true
+
+  /lodash.map@4.6.0:
+    resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
+    dev: true
+
   /lodash.memoize@4.1.2:
     resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
     dev: false
@@ -10696,14 +14408,37 @@ packages:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
     dev: true
 
+  /lodash.reduce@4.6.0:
+    resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==}
+    dev: true
+
+  /lodash.size@4.2.0:
+    resolution: {integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==}
+    dev: true
+
+  /lodash.throttle@4.1.1:
+    resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+    dev: true
+
+  /lodash.topairs@4.3.0:
+    resolution: {integrity: sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==}
+    dev: true
+
+  /lodash.transform@4.6.0:
+    resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==}
+    dev: true
+
   /lodash.union@4.6.0:
     resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
-    dev: false
 
   /lodash.uniq@4.5.0:
     resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
     dev: false
 
+  /lodash.values@4.3.0:
+    resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==}
+    dev: true
+
   /lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
@@ -10729,6 +14464,13 @@ packages:
     resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
     dev: false
 
+  /loose-envify@1.4.0:
+    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+    hasBin: true
+    dependencies:
+      js-tokens: 4.0.0
+    dev: true
+
   /loupe@2.3.6:
     resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
     dependencies:
@@ -10738,12 +14480,18 @@ packages:
   /lowercase-keys@2.0.0:
     resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
     engines: {node: '>=8'}
-    dev: false
 
   /lowercase-keys@3.0.0:
     resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  /lowlight@1.20.0:
+    resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+    dependencies:
+      fault: 1.0.4
+      highlight.js: 10.7.3
+    dev: true
+
   /lru-cache@4.1.5:
     resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
     dependencies:
@@ -10767,6 +14515,11 @@ packages:
     engines: {node: '>=12'}
     dev: false
 
+  /lru-cache@8.0.4:
+    resolution: {integrity: sha512-E9FF6+Oc/uFLqZCuZwRKUzgFt5Raih6LfxknOSAVTjNkrCZkBf7DQCwJxZQgd9l4eHjIJDGR+E+1QKD1RhThPw==}
+    engines: {node: '>=16.14'}
+    dev: true
+
   /luxon@3.2.1:
     resolution: {integrity: sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==}
     engines: {node: '>=12'}
@@ -10781,10 +14534,25 @@ packages:
     dependencies:
       sourcemap-codec: 1.4.8
 
+  /magic-string@0.27.0:
+    resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+    engines: {node: '>=12'}
+    dependencies:
+      '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
+
   /mailcheck@1.1.1:
     resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
     dev: false
 
+  /make-dir@2.1.0:
+    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+    engines: {node: '>=6'}
+    dependencies:
+      pify: 4.0.1
+      semver: 5.7.1
+    dev: true
+
   /make-dir@3.1.0:
     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
     engines: {node: '>=8'}
@@ -10844,6 +14612,10 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /map-or-similar@1.5.0:
+    resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
+    dev: true
+
   /map-stream@0.1.0:
     resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
     dev: true
@@ -10855,6 +14627,15 @@ packages:
       object-visit: 1.0.1
     dev: false
 
+  /markdown-to-jsx@7.2.0(react@18.2.0):
+    resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==}
+    engines: {node: '>= 10'}
+    peerDependencies:
+      react: '>= 0.14.0'
+    dependencies:
+      react: 18.2.0
+    dev: true
+
   /matchdep@2.0.0:
     resolution: {integrity: sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==}
     engines: {node: '>= 0.10.0'}
@@ -10875,6 +14656,41 @@ packages:
     resolution: {integrity: sha512-v2huwvQGOHTGOkMqtHd2hercCG3f6QAObTisPPHg8TZqq2lz7eIY/5i/5YUV8Ibf3mEioFEmwibcPUF2/fnKKQ==}
     dev: false
 
+  /mdast-util-definitions@4.0.0:
+    resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
+    dependencies:
+      unist-util-visit: 2.0.3
+    dev: true
+
+  /mdast-util-definitions@5.1.2:
+    resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+    dependencies:
+      '@types/mdast': 3.0.11
+      '@types/unist': 2.0.6
+      unist-util-visit: 4.1.2
+    dev: true
+
+  /mdast-util-to-string@1.1.0:
+    resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
+    dev: true
+
+  /mdast-util-to-string@3.1.1:
+    resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
+    dependencies:
+      '@types/mdast': 3.0.11
+    dev: true
+
+  /media-typer@0.3.0:
+    resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
+  /memoizerific@1.11.3:
+    resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
+    dependencies:
+      map-or-similar: 1.5.0
+    dev: true
+
   /meow@9.0.0:
     resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
     engines: {node: '>=10'}
@@ -10893,6 +14709,10 @@ packages:
       yargs-parser: 20.2.9
     dev: true
 
+  /merge-descriptors@1.0.1:
+    resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+    dev: true
+
   /merge-stream@2.0.0:
     resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
 
@@ -10900,6 +14720,11 @@ packages:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
 
+  /methods@1.1.2:
+    resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /mfm-js@0.23.3:
     resolution: {integrity: sha512-o8scYmbey6rMUmWAlT3k3ntt6khaCLdxlmHhAWV5wTTMj2OK1atQvZfRUq0SIVm1Jig08qlZg/ps71xUqrScNA==}
     dependencies:
@@ -10944,6 +14769,18 @@ packages:
     dependencies:
       mime-db: 1.52.0
 
+  /mime@1.6.0:
+    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
+  /mime@2.6.0:
+    resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+    engines: {node: '>=4.0.0'}
+    hasBin: true
+    dev: true
+
   /mime@3.0.0:
     resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
     engines: {node: '>=10.0.0'}
@@ -10961,7 +14798,6 @@ packages:
   /mimic-response@1.0.1:
     resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
     engines: {node: '>=4'}
-    dev: false
 
   /mimic-response@3.1.0:
     resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
@@ -10971,6 +14807,12 @@ packages:
     resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  /min-document@2.19.0:
+    resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
+    dependencies:
+      dom-walk: 0.1.2
+    dev: true
+
   /min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
@@ -11062,14 +14904,10 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       yallist: 4.0.0
-    dev: false
 
-  /minipass@4.0.0:
-    resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==}
+  /minipass@4.2.5:
+    resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==}
     engines: {node: '>=8'}
-    dependencies:
-      yallist: 4.0.0
-    dev: false
 
   /minizlib@1.3.3:
     resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==}
@@ -11084,7 +14922,6 @@ packages:
     dependencies:
       minipass: 3.3.6
       yallist: 4.0.0
-    dev: false
 
   /mixin-deep@1.3.2:
     resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
@@ -11096,18 +14933,17 @@ packages:
 
   /mkdirp-classic@0.5.3:
     resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-    dev: false
 
   /mkdirp@0.5.6:
     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+    hasBin: true
     dependencies:
       minimist: 1.2.7
-    dev: false
 
   /mkdirp@1.0.4:
     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
     engines: {node: '>=10'}
-    dev: false
+    hasBin: true
 
   /mlly@1.1.1:
     resolution: {integrity: sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==}
@@ -11129,9 +14965,17 @@ packages:
     engines: {node: '>= 8'}
     dev: true
 
+  /mri@1.2.0:
+    resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+    engines: {node: '>=4'}
+    dev: true
+
   /ms@2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-    dev: false
+
+  /ms@2.1.1:
+    resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
+    dev: true
 
   /ms@2.1.2:
     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -11163,6 +15007,51 @@ packages:
     optionalDependencies:
       msgpackr-extract: 2.2.0
 
+  /msw-storybook-addon@1.8.0(msw@1.1.0):
+    resolution: {integrity: sha512-dw3vZwqjixmiur0vouRSOax7wPSu9Og2Hspy9JZFHf49bZRjwDiLF0Pfn2NXEkGviYJOJiGxS1ejoTiUwoSg4A==}
+    peerDependencies:
+      msw: '>=0.35.0 <2.0.0'
+    dependencies:
+      is-node-process: 1.0.1
+      msw: 1.1.0(typescript@5.0.2)
+    dev: true
+
+  /msw@1.1.0(typescript@5.0.2):
+    resolution: {integrity: sha512-oqMvUXm1bMbwvGpoXAQVz8vXXQyQyx52HBDg3EDOK+dFXkQHssgkXEG4LfMwwZyr2Qt18I/w04XPaY4BkFTkzA==}
+    engines: {node: '>=14'}
+    hasBin: true
+    requiresBuild: true
+    peerDependencies:
+      typescript: '>= 4.4.x <= 4.9.x'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@mswjs/cookies': 0.2.2
+      '@mswjs/interceptors': 0.17.9
+      '@open-draft/until': 1.0.3
+      '@types/cookie': 0.4.1
+      '@types/js-levenshtein': 1.1.1
+      chalk: 4.1.1
+      chokidar: 3.5.3
+      cookie: 0.4.2
+      graphql: 16.6.0
+      headers-polyfill: 3.1.2
+      inquirer: 8.2.5
+      is-node-process: 1.0.1
+      js-levenshtein: 1.1.6
+      node-fetch: 2.6.7
+      outvariant: 1.3.0
+      path-to-regexp: 6.2.1
+      strict-event-emitter: 0.4.6
+      type-fest: 2.19.0
+      typescript: 5.0.2
+      yargs: 17.6.2
+    transitivePeerDependencies:
+      - encoding
+      - supports-color
+    dev: true
+
   /muggle-string@0.2.2:
     resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
     dev: true
@@ -11176,6 +15065,10 @@ packages:
     engines: {node: '>= 0.10'}
     dev: false
 
+  /mute-stream@0.0.8:
+    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+    dev: true
+
   /mylas@2.1.13:
     resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==}
     engines: {node: '>=12.0.0'}
@@ -11270,7 +15163,10 @@ packages:
   /negotiator@0.6.3:
     resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
     engines: {node: '>= 0.6'}
-    dev: false
+
+  /neo-async@2.6.2:
+    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+    dev: true
 
   /nested-property@4.0.0:
     resolution: {integrity: sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==}
@@ -11314,10 +15210,21 @@ packages:
     engines: {node: '>=v0.6.5'}
     dev: false
 
+  /node-dir@0.1.17:
+    resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==}
+    engines: {node: '>= 0.10.5'}
+    dependencies:
+      minimatch: 3.1.2
+    dev: true
+
   /node-domexception@1.0.0:
     resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
     engines: {node: '>=10.5.0'}
 
+  /node-fetch-native@1.0.2:
+    resolution: {integrity: sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ==}
+    dev: true
+
   /node-fetch@2.6.7:
     resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
     engines: {node: 4.x || >=6.0.0}
@@ -11351,7 +15258,7 @@ packages:
     dependencies:
       env-paths: 2.2.1
       glob: 7.2.3
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       make-fetch-happen: 10.2.1
       nopt: 6.0.0
       npmlog: 6.0.2
@@ -11372,6 +15279,14 @@ packages:
     resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
     dev: true
 
+  /node.extend@2.0.2:
+    resolution: {integrity: sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==}
+    engines: {node: '>=0.4.0'}
+    dependencies:
+      has: 1.0.3
+      is: 3.3.0
+    dev: true
+
   /nodemailer@6.9.1:
     resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==}
     engines: {node: '>=6.0.0'}
@@ -11384,6 +15299,7 @@ packages:
   /nopt@5.0.0:
     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
     engines: {node: '>=6'}
+    hasBin: true
     dependencies:
       abbrev: 1.1.1
     dev: false
@@ -11443,7 +15359,6 @@ packages:
   /normalize-url@6.1.0:
     resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
     engines: {node: '>=10'}
-    dev: false
 
   /normalize-url@8.0.0:
     resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==}
@@ -11483,8 +15398,6 @@ packages:
       console-control-strings: 1.1.0
       gauge: 3.0.2
       set-blocking: 2.0.0
-    dev: false
-    optional: true
 
   /npmlog@6.0.2:
     resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
@@ -11538,7 +15451,6 @@ packages:
   /object-assign@4.1.1:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /object-copy@0.1.0:
     resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
@@ -11549,6 +15461,11 @@ packages:
       kind-of: 3.2.2
     dev: false
 
+  /object-hash@3.0.0:
+    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+    engines: {node: '>= 6'}
+    dev: true
+
   /object-inspect@1.12.2:
     resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
     dev: true
@@ -11639,6 +15556,24 @@ packages:
     resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
     dev: false
 
+  /on-finished@2.4.1:
+    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      ee-first: 1.1.1
+    dev: true
+
+  /on-headers@1.0.2:
+    resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
+  /once@1.3.3:
+    resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==}
+    dependencies:
+      wrappy: 1.0.2
+    dev: true
+
   /once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
     dependencies:
@@ -11657,6 +15592,23 @@ packages:
       mimic-fn: 4.0.0
     dev: true
 
+  /open@7.4.2:
+    resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
+    engines: {node: '>=8'}
+    dependencies:
+      is-docker: 2.2.1
+      is-wsl: 2.2.0
+    dev: true
+
+  /open@8.4.2:
+    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+    engines: {node: '>=12'}
+    dependencies:
+      define-lazy-prop: 2.0.0
+      is-docker: 2.2.1
+      is-wsl: 2.2.0
+    dev: true
+
   /opentype.js@0.4.11:
     resolution: {integrity: sha512-GthxucX/6aftfLdeU5Ho7o7zmQcC8uVtqdcelVq12X++ndxwBZG8Xb5rFEKT7nEcWDD2P1x+TNuJ70jtj1Mbpw==}
     dev: false
@@ -11671,7 +15623,6 @@ packages:
       prelude-ls: 1.1.2
       type-check: 0.3.2
       word-wrap: 1.2.3
-    dev: false
 
   /optionator@0.9.1:
     resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
@@ -11685,6 +15636,21 @@ packages:
       word-wrap: 1.2.3
     dev: true
 
+  /ora@5.4.1:
+    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      bl: 4.1.0
+      chalk: 4.1.2
+      cli-cursor: 3.1.0
+      cli-spinners: 2.7.0
+      is-interactive: 1.0.0
+      is-unicode-supported: 0.1.0
+      log-symbols: 4.1.0
+      strip-ansi: 6.0.1
+      wcwidth: 1.0.1
+    dev: true
+
   /ordered-read-streams@1.0.1:
     resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==}
     dependencies:
@@ -11705,6 +15671,11 @@ packages:
       lcid: 1.0.0
     dev: false
 
+  /os-tmpdir@1.0.2:
+    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /os-utils@0.0.14:
     resolution: {integrity: sha512-ajB8csaHLBvJOYsHJkp8YdO2FvlBbf/ZxaYQwXXRDyQ84UoE+uTuLXxqd0shekXMX6Qr/pt/DDyLMRAMsgfWzg==}
     dev: false
@@ -11719,10 +15690,13 @@ packages:
       jssha: 3.3.0
     dev: false
 
+  /outvariant@1.3.0:
+    resolution: {integrity: sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==}
+    dev: true
+
   /p-cancelable@2.1.1:
     resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
     engines: {node: '>=8'}
-    dev: false
 
   /p-cancelable@3.0.0:
     resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
@@ -11752,6 +15726,13 @@ packages:
       yocto-queue: 1.0.0
     dev: true
 
+  /p-locate@3.0.0:
+    resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      p-limit: 2.3.0
+    dev: true
+
   /p-locate@4.1.0:
     resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
     engines: {node: '>=8'}
@@ -11795,10 +15776,18 @@ packages:
     resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
     engines: {node: '>=6'}
 
+  /packageurl-js@1.0.1:
+    resolution: {integrity: sha512-EtXC0kgLjy/C7S4SN3Kk1SDRWLzIn/LUK0gXlz3gsxDdpI0k7q8C3SASpV0pc+v0yADBTt5rWewq/flGdGxtoQ==}
+    dev: true
+
   /packet-reader@1.0.0:
     resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==}
     dev: false
 
+  /pako@0.2.9:
+    resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
+    dev: true
+
   /parent-module@1.0.1:
     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
     engines: {node: '>=6'}
@@ -11812,6 +15801,17 @@ packages:
       data-uri-to-buffer: 0.0.3
     dev: false
 
+  /parse-entities@2.0.0:
+    resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+    dependencies:
+      character-entities: 1.2.4
+      character-entities-legacy: 1.1.4
+      character-reference-invalid: 1.1.4
+      is-alphanumerical: 1.0.4
+      is-decimal: 1.0.4
+      is-hexadecimal: 1.0.4
+    dev: true
+
   /parse-filepath@1.0.2:
     resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
     engines: {node: '>=0.8'}
@@ -11877,6 +15877,11 @@ packages:
     dependencies:
       entities: 4.4.0
 
+  /parseurl@1.3.3:
+    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
   /pascalcase@0.1.1:
     resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
     engines: {node: '>=0.10.0'}
@@ -11893,6 +15898,11 @@ packages:
       pinkie-promise: 2.0.1
     dev: false
 
+  /path-exists@3.0.0:
+    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+    engines: {node: '>=4'}
+    dev: true
+
   /path-exists@4.0.0:
     resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
     engines: {node: '>=8'}
@@ -11930,6 +15940,10 @@ packages:
       path-root-regex: 0.1.2
     dev: false
 
+  /path-to-regexp@0.1.7:
+    resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+    dev: true
+
   /path-to-regexp@1.8.0:
     resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==}
     dependencies:
@@ -11940,11 +15954,15 @@ packages:
     resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==}
     dev: false
 
+  /path-to-regexp@6.2.1:
+    resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
+    dev: true
+
   /path-type@1.1.0:
     resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
     engines: {node: '>=0.10.0'}
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       pify: 2.3.0
       pinkie-promise: 2.0.1
     dev: false
@@ -11972,6 +15990,14 @@ packages:
     engines: {node: '>=14.16'}
     dev: false
 
+  /peek-stream@1.1.3:
+    resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==}
+    dependencies:
+      buffer-from: 1.1.2
+      duplexify: 3.7.1
+      through2: 2.0.5
+    dev: true
+
   /pend@1.2.0:
     resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
     dev: true
@@ -12053,6 +16079,11 @@ packages:
     resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
     engines: {node: '>=0.10.0'}
 
+  /pify@4.0.1:
+    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+    engines: {node: '>=6'}
+    dev: true
+
   /pinkie-promise@2.0.1:
     resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
     engines: {node: '>=0.10.0'}
@@ -12098,6 +16129,13 @@ packages:
     engines: {node: '>= 6'}
     dev: true
 
+  /pkg-dir@3.0.0:
+    resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
+    engines: {node: '>=6'}
+    dependencies:
+      find-up: 3.0.0
+    dev: true
+
   /pkg-dir@4.2.0:
     resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
     engines: {node: '>=8'}
@@ -12105,6 +16143,13 @@ packages:
       find-up: 4.1.0
     dev: true
 
+  /pkg-dir@5.0.0:
+    resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
+    engines: {node: '>=10'}
+    dependencies:
+      find-up: 5.0.0
+    dev: true
+
   /pkg-types@1.0.2:
     resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
     dependencies:
@@ -12136,6 +16181,11 @@ packages:
       irregular-plurals: 3.5.0
     dev: true
 
+  /pluralize@7.0.0:
+    resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==}
+    engines: {node: '>=4'}
+    dev: true
+
   /pngjs-nozlib@1.0.0:
     resolution: {integrity: sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==}
     engines: {iojs: '>= 1.0.0', node: '>=0.10.0'}
@@ -12151,6 +16201,13 @@ packages:
     engines: {node: '>=10.13.0'}
     dev: false
 
+  /polished@4.2.2:
+    resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      '@babel/runtime': 7.20.7
+    dev: true
+
   /posix-character-classes@0.1.1:
     resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
     engines: {node: '>=0.10.0'}
@@ -12423,7 +16480,6 @@ packages:
   /prelude-ls@1.1.2:
     resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
     engines: {node: '>= 0.8.0'}
-    dev: false
 
   /prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -12435,6 +16491,12 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
+  /prettier@2.8.4:
+    resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==}
+    engines: {node: '>=10.13.0'}
+    hasBin: true
+    dev: true
+
   /pretty-bytes@5.6.0:
     resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
     engines: {node: '>=6'}
@@ -12471,12 +16533,15 @@ packages:
   /pretty-hrtime@1.0.3:
     resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
     engines: {node: '>= 0.8'}
-    dev: false
+
+  /prismjs@1.27.0:
+    resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
+    engines: {node: '>=6'}
+    dev: true
 
   /prismjs@1.29.0:
     resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
     engines: {node: '>=6'}
-    dev: false
 
   /private-ip@2.3.3:
     resolution: {integrity: sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==}
@@ -12516,13 +16581,17 @@ packages:
   /process@0.11.10:
     resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
     engines: {node: '>= 0.6.0'}
-    dev: false
 
   /progress@2.0.3:
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     engines: {node: '>=0.4.0'}
-    dev: false
-    optional: true
+
+  /promise-deferred@2.0.3:
+    resolution: {integrity: sha512-n10XaoznCzLfyPFOlEE8iurezHpxrYzyjgq/1eW9Wk1gJwur/N7BdBmjJYJpqMeMcXK4wEbzo2EvZQcqjYcKUQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      promise: 7.3.1
+    dev: true
 
   /promise-inflight@1.0.1:
     resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
@@ -12553,7 +16622,14 @@ packages:
     resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
     dependencies:
       asap: 2.0.6
-    dev: false
+
+  /promiseback@2.0.3:
+    resolution: {integrity: sha512-VZXdCwS0ppVNTIRfNsCvVwJAaP2b+pxQF7lM8DMWfmpNWyTxB6O5YNbzs+8z0ki/KIBHKHk308NTIl4kJUem3w==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is-callable: 1.2.7
+      promise-deferred: 2.0.3
+    dev: true
 
   /prompts@2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
@@ -12563,6 +16639,20 @@ packages:
       sisteransi: 1.0.5
     dev: true
 
+  /prop-types@15.8.1:
+    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react-is: 16.13.1
+    dev: true
+
+  /property-information@5.6.0:
+    resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+    dependencies:
+      xtend: 4.0.2
+    dev: true
+
   /proto-list@1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
     dev: true
@@ -12573,7 +16663,6 @@ packages:
     dependencies:
       forwarded: 0.2.0
       ipaddr.js: 1.9.1
-    dev: false
 
   /proxy-from-env@1.0.0:
     resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
@@ -12599,7 +16688,6 @@ packages:
       constantinople: 4.0.1
       js-stringify: 1.0.2
       pug-runtime: 3.0.1
-    dev: false
 
   /pug-code-gen@3.0.2:
     resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==}
@@ -12612,11 +16700,9 @@ packages:
       pug-runtime: 3.0.1
       void-elements: 3.1.0
       with: 7.0.2
-    dev: false
 
   /pug-error@2.0.0:
     resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==}
-    dev: false
 
   /pug-filters@4.0.0:
     resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==}
@@ -12626,7 +16712,6 @@ packages:
       pug-error: 2.0.0
       pug-walk: 2.0.0
       resolve: 1.22.1
-    dev: false
 
   /pug-lexer@5.0.1:
     resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==}
@@ -12634,42 +16719,35 @@ packages:
       character-parser: 2.2.0
       is-expression: 4.0.0
       pug-error: 2.0.0
-    dev: false
 
   /pug-linker@4.0.0:
     resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==}
     dependencies:
       pug-error: 2.0.0
       pug-walk: 2.0.0
-    dev: false
 
   /pug-load@3.0.0:
     resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==}
     dependencies:
       object-assign: 4.1.1
       pug-walk: 2.0.0
-    dev: false
 
   /pug-parser@6.0.0:
     resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==}
     dependencies:
       pug-error: 2.0.0
       token-stream: 1.0.0
-    dev: false
 
   /pug-runtime@3.0.1:
     resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==}
-    dev: false
 
   /pug-strip-comments@2.0.0:
     resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==}
     dependencies:
       pug-error: 2.0.0
-    dev: false
 
   /pug-walk@2.0.0:
     resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==}
-    dev: false
 
   /pug@3.0.2:
     resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==}
@@ -12682,14 +16760,12 @@ packages:
       pug-parser: 6.0.0
       pug-runtime: 3.0.1
       pug-strip-comments: 2.0.0
-    dev: false
 
   /pump@2.0.1:
     resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
-    dev: false
 
   /pump@3.0.0:
     resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
@@ -12703,12 +16779,31 @@ packages:
       duplexify: 3.7.1
       inherits: 2.0.4
       pump: 2.0.1
-    dev: false
 
   /punycode@2.3.0:
     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
     engines: {node: '>=6'}
 
+  /puppeteer-core@2.1.1:
+    resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==}
+    engines: {node: '>=8.16.0'}
+    dependencies:
+      '@types/mime-types': 2.1.1
+      debug: 4.3.4(supports-color@8.1.1)
+      extract-zip: 1.7.0
+      https-proxy-agent: 4.0.0
+      mime: 2.6.0
+      mime-types: 2.1.35
+      progress: 2.0.3
+      proxy-from-env: 1.0.0
+      rimraf: 2.7.1
+      ws: 6.2.2
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+    dev: true
+
   /pure-rand@6.0.0:
     resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==}
     dev: true
@@ -12744,6 +16839,20 @@ packages:
       side-channel: 1.0.4
     dev: true
 
+  /qs@6.11.0:
+    resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+    engines: {node: '>=0.6'}
+    dependencies:
+      side-channel: 1.0.4
+    dev: true
+
+  /qs@6.11.1:
+    resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==}
+    engines: {node: '>=0.6'}
+    dependencies:
+      side-channel: 1.0.4
+    dev: true
+
   /qs@6.5.3:
     resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
     engines: {node: '>=0.6'}
@@ -12786,6 +16895,10 @@ packages:
     resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
     engines: {node: '>=10'}
 
+  /ramda@0.28.0:
+    resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==}
+    dev: true
+
   /random-seed@0.3.0:
     resolution: {integrity: sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==}
     engines: {node: '>= 0.6.0'}
@@ -12793,6 +16906,11 @@ packages:
       json-stringify-safe: 5.0.1
     dev: false
 
+  /range-parser@1.2.1:
+    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+    engines: {node: '>= 0.6'}
+    dev: true
+
   /rangestr@0.0.1:
     resolution: {integrity: sha512-9CRCUX/w4+fNMzlYgA8GeJz7BZwBPwaGm3FhAm9Hi50k8wNy2CyiJQa8awygWJay87uVVCV0/FwbLcD6+/A9KQ==}
     dev: false
@@ -12805,6 +16923,16 @@ packages:
     resolution: {integrity: sha512-5FJbRW/Jkkdk29ksedAfWFkQkhbUrMx3QJGwMKAypeIiQf4yrLW+gtPKZiaWt4zPrtw1uGufOjGO7UGM6VllsQ==}
     dev: false
 
+  /raw-body@2.5.1:
+    resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+    engines: {node: '>= 0.8'}
+    dependencies:
+      bytes: 3.1.2
+      http-errors: 2.0.0
+      iconv-lite: 0.4.24
+      unpipe: 1.0.0
+    dev: true
+
   /rc@1.2.8:
     resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
     hasBin: true
@@ -12834,14 +16962,115 @@ packages:
       - supports-color
     dev: false
 
+  /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
+    peerDependencies:
+      react: '>=16.8.0'
+      react-dom: '>=16.8.0'
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /react-docgen-typescript@2.2.2(typescript@5.0.2):
+    resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
+    peerDependencies:
+      typescript: '>= 4.3.x'
+    dependencies:
+      typescript: 5.0.2
+    dev: true
+
+  /react-docgen@6.0.0-alpha.3:
+    resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==}
+    engines: {node: '>=12.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/generator': 7.21.3
+      ast-types: 0.14.2
+      commander: 2.20.3
+      doctrine: 3.0.0
+      estree-to-babel: 3.2.1
+      neo-async: 2.6.2
+      node-dir: 0.1.17
+      resolve: 1.22.1
+      strip-indent: 3.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /react-dom@18.2.0(react@18.2.0):
+    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+    peerDependencies:
+      react: ^18.2.0
+    dependencies:
+      loose-envify: 1.4.0
+      react: 18.2.0
+      scheduler: 0.23.0
+    dev: true
+
+  /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==}
+    peerDependencies:
+      react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+      react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+    dependencies:
+      '@base2/pretty-print-object': 1.0.1
+      is-plain-object: 5.0.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-is: 18.1.0
+    dev: true
+
+  /react-inspector@6.0.1(react@18.2.0):
+    resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==}
+    peerDependencies:
+      react: ^16.8.4 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+    dev: true
+
+  /react-is@16.13.1:
+    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+    dev: true
+
   /react-is@17.0.2:
     resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
     dev: true
 
+  /react-is@18.1.0:
+    resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
+    dev: true
+
   /react-is@18.2.0:
     resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
     dev: true
 
+  /react-refresh@0.14.0:
+    resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /react-syntax-highlighter@15.5.0(react@18.2.0):
+    resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
+    peerDependencies:
+      react: '>= 0.14.0'
+    dependencies:
+      '@babel/runtime': 7.20.7
+      highlight.js: 10.7.3
+      lowlight: 1.20.0
+      prismjs: 1.29.0
+      react: 18.2.0
+      refractor: 3.6.0
+    dev: true
+
+  /react@18.2.0:
+    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: true
+
   /read-pkg-up@1.0.1:
     resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
     engines: {node: '>=0.10.0'}
@@ -12897,7 +17126,6 @@ packages:
       safe-buffer: 5.1.2
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
-    dev: false
 
   /readable-stream@3.6.0:
     resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
@@ -12906,7 +17134,6 @@ packages:
       inherits: 2.0.4
       string_decoder: 1.3.0
       util-deprecate: 1.0.2
-    dev: false
 
   /readable-stream@4.3.0:
     resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==}
@@ -12942,12 +17169,43 @@ packages:
     engines: {node: '>= 12.13.0'}
     dev: false
 
+  /recast@0.21.5:
+    resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==}
+    engines: {node: '>= 4'}
+    dependencies:
+      ast-types: 0.15.2
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
+  /recast@0.22.0:
+    resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==}
+    engines: {node: '>= 4'}
+    dependencies:
+      assert: 2.0.0
+      ast-types: 0.15.2
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
+  /recast@0.23.1:
+    resolution: {integrity: sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==}
+    engines: {node: '>= 4'}
+    dependencies:
+      assert: 2.0.0
+      ast-types: 0.16.1
+      esprima: 4.0.1
+      source-map: 0.6.1
+      tslib: 2.5.0
+    dev: true
+
   /rechoir@0.6.2:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}
     dependencies:
       resolve: 1.22.1
-    dev: false
 
   /reconnecting-websocket@4.4.0:
     resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==}
@@ -13015,9 +17273,34 @@ packages:
     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
     dev: false
 
+  /refractor@3.6.0:
+    resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
+    dependencies:
+      hastscript: 6.0.0
+      parse-entities: 2.0.0
+      prismjs: 1.27.0
+    dev: true
+
+  /regenerate-unicode-properties@10.1.0:
+    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      regenerate: 1.4.2
+    dev: true
+
+  /regenerate@1.4.2:
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+    dev: true
+
   /regenerator-runtime@0.13.11:
     resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
 
+  /regenerator-transform@0.15.1:
+    resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
+    dependencies:
+      '@babel/runtime': 7.20.7
+    dev: true
+
   /regex-not@1.0.2:
     resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
     engines: {node: '>=0.10.0'}
@@ -13035,6 +17318,67 @@ packages:
       functions-have-names: 1.2.3
     dev: true
 
+  /regexpu-core@5.3.2:
+    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      '@babel/regjsgen': 0.8.0
+      regenerate: 1.4.2
+      regenerate-unicode-properties: 10.1.0
+      regjsparser: 0.9.1
+      unicode-match-property-ecmascript: 2.0.0
+      unicode-match-property-value-ecmascript: 2.1.0
+    dev: true
+
+  /regjsparser@0.9.1:
+    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+    hasBin: true
+    dependencies:
+      jsesc: 0.5.0
+    dev: true
+
+  /remark-external-links@8.0.0:
+    resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==}
+    dependencies:
+      extend: 3.0.2
+      is-absolute-url: 3.0.3
+      mdast-util-definitions: 4.0.0
+      space-separated-tokens: 1.1.5
+      unist-util-visit: 2.0.3
+    dev: true
+
+  /remark-external-links@9.0.1:
+    resolution: {integrity: sha512-EYw+p8Zqy5oT5+W8iSKzInfRLY+zeKWHCf0ut+Q5SwnaSIDGXd2zzvp4SWqyAuVbinNmZ0zjMrDKaExWZnTYqQ==}
+    dependencies:
+      '@types/hast': 2.3.4
+      '@types/mdast': 3.0.11
+      extend: 3.0.2
+      is-absolute-url: 4.0.1
+      mdast-util-definitions: 5.1.2
+      space-separated-tokens: 2.0.2
+      unified: 10.1.2
+      unist-util-visit: 4.1.2
+    dev: true
+
+  /remark-slug@6.1.0:
+    resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==}
+    dependencies:
+      github-slugger: 1.5.0
+      mdast-util-to-string: 1.1.0
+      unist-util-visit: 2.0.3
+    dev: true
+
+  /remark-slug@7.0.1:
+    resolution: {integrity: sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==}
+    dependencies:
+      '@types/hast': 2.3.4
+      '@types/mdast': 3.0.11
+      github-slugger: 1.5.0
+      mdast-util-to-string: 3.1.1
+      unified: 10.1.2
+      unist-util-visit: 4.1.2
+    dev: true
+
   /remove-bom-buffer@3.0.0:
     resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
     engines: {node: '>=0.10.0'}
@@ -13143,7 +17487,6 @@ packages:
 
   /require-main-filename@2.0.0:
     resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-    dev: false
 
   /requires-port@1.0.0:
     resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
@@ -13212,7 +17555,6 @@ packages:
     resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
     dependencies:
       lowercase-keys: 2.0.0
-    dev: false
 
   /responselike@3.0.0:
     resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
@@ -13250,12 +17592,18 @@ packages:
   /rfdc@1.3.0:
     resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
 
+  /rimraf@2.6.3:
+    resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+    dev: true
+
   /rimraf@2.7.1:
     resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
     hasBin: true
     dependencies:
       glob: 7.2.3
-    dev: false
 
   /rimraf@3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
@@ -13288,6 +17636,11 @@ packages:
       xml2js: 0.4.23
     dev: false
 
+  /run-async@2.4.1:
+    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
   /run-parallel@1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
     dependencies:
@@ -13296,7 +17649,7 @@ packages:
   /rxjs@7.8.0:
     resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
     dependencies:
-      tslib: 2.4.1
+      tslib: 2.5.0
 
   /s-age@1.1.2:
     resolution: {integrity: sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==}
@@ -13306,9 +17659,12 @@ packages:
     resolution: {integrity: sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==}
     dev: false
 
+  /safe-buffer@5.1.1:
+    resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==}
+    dev: true
+
   /safe-buffer@5.1.2:
     resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-    dev: false
 
   /safe-buffer@5.2.1:
     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -13372,6 +17728,12 @@ packages:
       xmlchars: 2.2.0
     dev: false
 
+  /scheduler@0.23.0:
+    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: true
+
   /secure-json-parse@2.7.0:
     resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
     dev: false
@@ -13411,6 +17773,11 @@ packages:
     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
     hasBin: true
 
+  /semver@7.0.0:
+    resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
+    hasBin: true
+    dev: true
+
   /semver@7.3.8:
     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
     engines: {node: '>=10'}
@@ -13418,13 +17785,55 @@ packages:
     dependencies:
       lru-cache: 6.0.0
 
+  /send@0.18.0:
+    resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      debug: 2.6.9
+      depd: 2.0.0
+      destroy: 1.2.0
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      fresh: 0.5.2
+      http-errors: 2.0.0
+      mime: 1.6.0
+      ms: 2.1.3
+      on-finished: 2.4.1
+      range-parser: 1.2.1
+      statuses: 2.0.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /serve-favicon@2.5.0:
+    resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      etag: 1.8.1
+      fresh: 0.5.2
+      ms: 2.1.1
+      parseurl: 1.3.3
+      safe-buffer: 5.1.1
+    dev: true
+
+  /serve-static@1.15.0:
+    resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      parseurl: 1.3.3
+      send: 0.18.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /set-blocking@2.0.0:
     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-    dev: false
 
   /set-cookie-parser@2.5.1:
     resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
-    dev: false
 
   /set-value@2.0.1:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
@@ -13442,7 +17851,6 @@ packages:
 
   /setprototypeof@1.2.0:
     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-    dev: false
 
   /sha.js@2.4.11:
     resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
@@ -13451,6 +17859,13 @@ packages:
       safe-buffer: 5.2.1
     dev: false
 
+  /shallow-clone@3.0.1:
+    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+    engines: {node: '>=8'}
+    dependencies:
+      kind-of: 6.0.3
+    dev: true
+
   /sharp@0.31.3:
     resolution: {integrity: sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==}
     engines: {node: '>=14.15.0'}
@@ -13503,11 +17918,21 @@ packages:
     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
     engines: {node: '>=8'}
 
+  /shelljs@0.8.5:
+    resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+      interpret: 1.4.0
+      rechoir: 0.6.2
+    dev: true
+
   /side-channel@1.0.4:
     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
     dependencies:
       call-bind: 1.0.2
-      get-intrinsic: 1.1.3
+      get-intrinsic: 1.2.0
       object-inspect: 1.12.2
     dev: true
 
@@ -13540,6 +17965,13 @@ packages:
       is-arrayish: 0.3.2
     dev: false
 
+  /simple-update-notifier@1.1.0:
+    resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      semver: 7.0.0
+    dev: true
+
   /sinon@14.0.2:
     resolution: {integrity: sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==}
     dependencies:
@@ -13627,6 +18059,41 @@ packages:
       - supports-color
     dev: false
 
+  /snyk-config@5.1.0:
+    resolution: {integrity: sha512-wqVMxUGqjjHX+MJrz0WHa/pJTDWU17aRv6cnI/6i7cq93J3TkkJZ8sjgvwCgP8cWX5wTHIlRuMV+IAd59K4X/g==}
+    dependencies:
+      async: 3.2.4
+      debug: 4.3.4(supports-color@8.1.1)
+      lodash.merge: 4.6.2
+      minimist: 1.2.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /snyk-nodejs-lockfile-parser@1.48.2:
+    resolution: {integrity: sha512-CiuKigz4Ed/prR61T2hDDNnvqCr9JA4zTWE9xD4x+emt2zUVRHKF2RBKq2s82RA8jcts1OOXnREr1v1OvNxIpg==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      '@snyk/dep-graph': 2.6.0
+      '@snyk/graphlib': 2.1.9-patch.3
+      '@yarnpkg/core': 2.4.0
+      '@yarnpkg/lockfile': 1.1.0
+      event-loop-spinner: 2.2.0
+      js-yaml: 4.1.0
+      lodash.clonedeep: 4.5.0
+      lodash.flatmap: 4.5.0
+      lodash.isempty: 4.4.0
+      lodash.topairs: 4.3.0
+      micromatch: 4.0.5
+      semver: 7.3.8
+      snyk-config: 5.1.0
+      tslib: 1.14.1
+      uuid: 8.3.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /socks-proxy-agent@7.0.0:
     resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
     engines: {node: '>= 10'}
@@ -13696,7 +18163,6 @@ packages:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
-    dev: false
 
   /source-map-url@0.4.1:
     resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
@@ -13719,6 +18185,14 @@ packages:
   /sourcemap-codec@1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
 
+  /space-separated-tokens@1.1.5:
+    resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+    dev: true
+
+  /space-separated-tokens@2.0.2:
+    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+    dev: true
+
   /sparkles@1.0.1:
     resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
     engines: {node: '>= 0.10'}
@@ -13834,7 +18308,6 @@ packages:
   /statuses@2.0.1:
     resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
     engines: {node: '>= 0.8'}
-    dev: false
 
   /std-env@3.3.2:
     resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
@@ -13847,6 +18320,22 @@ packages:
       internal-slot: 1.0.5
     dev: true
 
+  /store2@2.14.2:
+    resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
+    dev: true
+
+  /storybook@7.0.0-rc.10:
+    resolution: {integrity: sha512-lVX1N8+VMs9E/mm+YLrCPfvFvKsJ4AVMfWg548MiJR7OZpPC2bDK8mSEnVDAeJaehIK6IprB4Y0W1FvvvjGIsw==}
+    hasBin: true
+    dependencies:
+      '@storybook/cli': 7.0.0-rc.10
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
   /stream-browserify@3.0.0:
     resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
     dependencies:
@@ -13854,6 +18343,11 @@ packages:
       readable-stream: 3.6.0
     dev: false
 
+  /stream-buffers@3.0.2:
+    resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==}
+    engines: {node: '>= 0.10.0'}
+    dev: true
+
   /stream-combiner@0.0.4:
     resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
     dependencies:
@@ -13873,7 +18367,20 @@ packages:
 
   /stream-shift@1.0.1:
     resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
-    dev: false
+
+  /stream-to-array@2.3.0:
+    resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==}
+    dependencies:
+      any-promise: 1.3.0
+    dev: true
+
+  /stream-to-promise@2.2.0:
+    resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==}
+    dependencies:
+      any-promise: 1.3.0
+      end-of-stream: 1.1.0
+      stream-to-array: 2.3.0
+    dev: true
 
   /stream-wormhole@1.1.0:
     resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==}
@@ -13889,6 +18396,16 @@ packages:
     resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==}
     dev: false
 
+  /strict-event-emitter@0.2.8:
+    resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==}
+    dependencies:
+      events: 3.3.0
+    dev: true
+
+  /strict-event-emitter@0.4.6:
+    resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==}
+    dev: true
+
   /strict-uri-encode@1.1.0:
     resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
     engines: {node: '>=0.10.0'}
@@ -13916,6 +18433,15 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
+  /string-width@3.1.0:
+    resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+    engines: {node: '>=6'}
+    dependencies:
+      emoji-regex: 7.0.3
+      is-fullwidth-code-point: 2.0.0
+      strip-ansi: 5.2.0
+    dev: true
+
   /string-width@4.2.3:
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
     engines: {node: '>=8'}
@@ -13957,13 +18483,11 @@ packages:
     resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
     dependencies:
       safe-buffer: 5.1.2
-    dev: false
 
   /string_decoder@1.3.0:
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
     dependencies:
       safe-buffer: 5.2.1
-    dev: false
 
   /stringz@2.1.0:
     resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==}
@@ -13978,6 +18502,13 @@ packages:
       ansi-regex: 2.1.1
     dev: false
 
+  /strip-ansi@5.2.0:
+    resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+    engines: {node: '>=6'}
+    dependencies:
+      ansi-regex: 4.1.1
+    dev: true
+
   /strip-ansi@6.0.1:
     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
     engines: {node: '>=8'}
@@ -14128,6 +18659,10 @@ packages:
     resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
     dev: false
 
+  /synchronous-promise@2.0.17:
+    resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==}
+    dev: true
+
   /systeminformation@5.17.12:
     resolution: {integrity: sha512-I3pfMW2vue53u+X08BNxaJieaHkRoMMKjWetY9lbYJeWFaeWPO6P4FkNc4XOCX8F9vbQ0HqQ25RJoz3U/B7liw==}
     engines: {node: '>=8.0.0'}
@@ -14146,7 +18681,6 @@ packages:
       mkdirp-classic: 0.5.3
       pump: 3.0.0
       tar-stream: 2.2.0
-    dev: false
 
   /tar-stream@2.2.0:
     resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
@@ -14157,7 +18691,6 @@ packages:
       fs-constants: 1.0.0
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: false
 
   /tar@4.4.19:
     resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==}
@@ -14179,11 +18712,52 @@ packages:
     dependencies:
       chownr: 2.0.0
       fs-minipass: 2.1.0
-      minipass: 4.0.0
+      minipass: 4.2.5
       minizlib: 2.1.2
       mkdirp: 1.0.4
       yallist: 4.0.0
-    dev: false
+
+  /telejson@6.0.8:
+    resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==}
+    dependencies:
+      '@types/is-function': 1.0.1
+      global: 4.4.0
+      is-function: 1.0.2
+      is-regex: 1.1.4
+      is-symbol: 1.0.4
+      isobject: 4.0.0
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+    dev: true
+
+  /telejson@7.0.4:
+    resolution: {integrity: sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA==}
+    dependencies:
+      memoizerific: 1.11.3
+    dev: true
+
+  /temp-dir@2.0.0:
+    resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /temp@0.8.4:
+    resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      rimraf: 2.6.3
+    dev: true
+
+  /tempy@1.0.1:
+    resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==}
+    engines: {node: '>=10'}
+    dependencies:
+      del: 6.1.1
+      is-stream: 2.0.1
+      temp-dir: 2.0.0
+      type-fest: 0.16.0
+      unique-string: 2.0.0
+    dev: true
 
   /terser@5.16.1:
     resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==}
@@ -14265,7 +18839,6 @@ packages:
     dependencies:
       readable-stream: 2.3.7
       xtend: 4.0.2
-    dev: false
 
   /through2@4.0.2:
     resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
@@ -14308,6 +18881,13 @@ packages:
     engines: {node: '>=14.0.0'}
     dev: true
 
+  /tmp@0.0.33:
+    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+    engines: {node: '>=0.6.0'}
+    dependencies:
+      os-tmpdir: 1.0.2
+    dev: true
+
   /tmp@0.2.1:
     resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
     engines: {node: '>=8.17.0'}
@@ -14375,11 +18955,9 @@ packages:
   /toidentifier@1.0.1:
     resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
     engines: {node: '>=0.6'}
-    dev: false
 
   /token-stream@1.0.0:
     resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
-    dev: false
 
   /token-types@5.0.1:
     resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==}
@@ -14423,6 +19001,11 @@ packages:
     resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
     dev: false
 
+  /treeify@1.1.0:
+    resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==}
+    engines: {node: '>=0.6'}
+    dev: true
+
   /trim-newlines@3.0.1:
     resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
     engines: {node: '>=8'}
@@ -14435,6 +19018,19 @@ packages:
       escape-string-regexp: 5.0.0
     dev: false
 
+  /trough@2.1.0:
+    resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
+    dev: true
+
+  /ts-dedent@2.2.0:
+    resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+    engines: {node: '>=6.10'}
+    dev: true
+
+  /ts-map@1.0.3:
+    resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==}
+    dev: true
+
   /tsc-alias@1.8.5:
     resolution: {integrity: sha512-Y3ka0olwSRdbHPyX5kXhYY2aoBKuT53DFdeY+PpQUR4hg5M/b8eIRmC8dL4FBdd0wT366iWc6iDUUGe6QwI7mg==}
     hasBin: true
@@ -14482,9 +19078,6 @@ packages:
   /tslib@1.14.1:
     resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
 
-  /tslib@2.4.1:
-    resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
-
   /tslib@2.5.0:
     resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
 
@@ -14503,6 +19096,11 @@ packages:
     dependencies:
       safe-buffer: 5.2.1
 
+  /tunnel@0.0.6:
+    resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
+    engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+    dev: true
+
   /tweetnacl@0.14.5:
     resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
 
@@ -14515,7 +19113,6 @@ packages:
     engines: {node: '>= 0.8.0'}
     dependencies:
       prelude-ls: 1.1.2
-    dev: false
 
   /type-check@0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -14528,6 +19125,11 @@ packages:
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     engines: {node: '>=4'}
 
+  /type-fest@0.16.0:
+    resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
+    engines: {node: '>=10'}
+    dev: true
+
   /type-fest@0.18.1:
     resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
     engines: {node: '>=10'}
@@ -14553,6 +19155,19 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /type-fest@2.19.0:
+    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+    engines: {node: '>=12.20'}
+    dev: true
+
+  /type-is@1.6.18:
+    resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+    engines: {node: '>= 0.6'}
+    dependencies:
+      media-typer: 0.3.0
+      mime-types: 2.1.35
+    dev: true
+
   /type@1.2.0:
     resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
     dev: false
@@ -14569,7 +19184,6 @@ packages:
 
   /typedarray@0.0.6:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
-    dev: false
 
   /typeorm@0.3.11(ioredis@4.28.5)(pg@8.10.0):
     resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
@@ -14667,6 +19281,14 @@ packages:
     resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
     dev: true
 
+  /uglify-js@3.17.4:
+    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+    engines: {node: '>=0.8.0'}
+    hasBin: true
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /uid@2.0.1:
     resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==}
     engines: {node: '>=8'}
@@ -14727,6 +19349,45 @@ packages:
       busboy: 1.6.0
     dev: false
 
+  /unfetch@4.2.0:
+    resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==}
+    dev: true
+
+  /unicode-canonical-property-names-ecmascript@2.0.0:
+    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-match-property-ecmascript@2.0.0:
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      unicode-canonical-property-names-ecmascript: 2.0.0
+      unicode-property-aliases-ecmascript: 2.1.0
+    dev: true
+
+  /unicode-match-property-value-ecmascript@2.1.0:
+    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-property-aliases-ecmascript@2.1.0:
+    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unified@10.1.2:
+    resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+    dependencies:
+      '@types/unist': 2.0.6
+      bail: 2.0.2
+      extend: 3.0.2
+      is-buffer: 2.0.5
+      is-plain-obj: 4.1.0
+      trough: 2.1.0
+      vfile: 5.3.7
+    dev: true
+
   /union-value@1.0.1:
     resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
     engines: {node: '>=0.10.0'}
@@ -14766,6 +19427,59 @@ packages:
       through2-filter: 3.0.0
     dev: false
 
+  /unique-string@2.0.0:
+    resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+    engines: {node: '>=8'}
+    dependencies:
+      crypto-random-string: 2.0.0
+    dev: true
+
+  /unist-util-is@4.1.0:
+    resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
+    dev: true
+
+  /unist-util-is@5.2.1:
+    resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /unist-util-stringify-position@3.0.3:
+    resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+    dependencies:
+      '@types/unist': 2.0.6
+    dev: true
+
+  /unist-util-visit-parents@3.1.1:
+    resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 4.1.0
+    dev: true
+
+  /unist-util-visit-parents@5.1.3:
+    resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 5.2.1
+    dev: true
+
+  /unist-util-visit@2.0.3:
+    resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 4.1.0
+      unist-util-visit-parents: 3.1.1
+    dev: true
+
+  /unist-util-visit@4.1.2:
+    resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-is: 5.2.1
+      unist-util-visit-parents: 5.1.3
+    dev: true
+
   /universalify@0.1.2:
     resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
     engines: {node: '>= 4.0.0'}
@@ -14784,6 +19498,20 @@ packages:
     resolution: {integrity: sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==}
     dev: false
 
+  /unpipe@1.0.0:
+    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+    engines: {node: '>= 0.8'}
+    dev: true
+
+  /unplugin@0.10.2:
+    resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==}
+    dependencies:
+      acorn: 8.8.2
+      chokidar: 3.5.3
+      webpack-sources: 3.2.3
+      webpack-virtual-modules: 0.4.6
+    dev: true
+
   /unset-value@1.0.0:
     resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
     engines: {node: '>=0.10.0'}
@@ -14812,13 +19540,13 @@ packages:
       setimmediate: 1.0.5
     dev: false
 
-  /update-browserslist-db@1.0.10(browserslist@4.21.4):
+  /update-browserslist-db@1.0.10(browserslist@4.21.5):
     resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
     hasBin: true
     peerDependencies:
       browserslist: '>= 4.21.0'
     dependencies:
-      browserslist: 4.21.4
+      browserslist: 4.21.5
       escalade: 3.1.1
       picocolors: 1.0.0
     dev: true
@@ -14847,6 +19575,17 @@ packages:
     resolution: {integrity: sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==}
     dev: false
 
+  /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==}
+    peerDependencies:
+      react: 16.8.0 - 18
+      react-dom: 16.8.0 - 18
+    dependencies:
+      '@juggle/resize-observer': 3.4.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
   /use@3.1.1:
     resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
     engines: {node: '>=0.10.0'}
@@ -14863,6 +19602,25 @@ packages:
   /util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
+  /util@0.12.5:
+    resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+    dependencies:
+      inherits: 2.0.4
+      is-arguments: 1.1.1
+      is-generator-function: 1.0.10
+      is-typed-array: 1.1.10
+      which-typed-array: 1.1.9
+    dev: true
+
+  /utils-merge@1.0.1:
+    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+    engines: {node: '>= 0.4.0'}
+    dev: true
+
+  /uuid-browser@3.1.0:
+    resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==}
+    dev: true
+
   /uuid@3.4.0:
     resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
     deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
@@ -14916,7 +19674,6 @@ packages:
   /vary@1.1.2:
     resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
     engines: {node: '>= 0.8'}
-    dev: false
 
   /vendors@1.0.4:
     resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==}
@@ -14930,13 +19687,29 @@ packages:
       core-util-is: 1.0.2
       extsprintf: 1.3.0
 
+  /vfile-message@3.1.4:
+    resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+    dependencies:
+      '@types/unist': 2.0.6
+      unist-util-stringify-position: 3.0.3
+    dev: true
+
+  /vfile@5.3.7:
+    resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+    dependencies:
+      '@types/unist': 2.0.6
+      is-buffer: 2.0.5
+      unist-util-stringify-position: 3.0.3
+      vfile-message: 3.1.4
+    dev: true
+
   /vinyl-fs@3.0.3:
     resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==}
     engines: {node: '>= 0.10'}
     dependencies:
       fs-mkdirp-stream: 1.0.0
       glob-stream: 6.1.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       is-valid-glob: 1.0.0
       lazystream: 1.0.1
       lead: 1.0.0
@@ -14959,7 +19732,7 @@ packages:
     dependencies:
       append-buffer: 1.0.2
       convert-source-map: 1.9.0
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       normalize-path: 2.1.1
       now-and-later: 2.0.1
       remove-bom-buffer: 3.0.0
@@ -15119,7 +19892,24 @@ packages:
   /void-elements@3.1.0:
     resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
     engines: {node: '>=0.10.0'}
-    dev: false
+
+  /vue-docgen-api@4.64.1(vue@3.2.47):
+    resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==}
+    dependencies:
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
+      '@vue/compiler-dom': 3.2.47
+      '@vue/compiler-sfc': 3.2.47
+      ast-types: 0.14.2
+      hash-sum: 2.0.0
+      lru-cache: 8.0.4
+      pug: 3.0.2
+      recast: 0.22.0
+      ts-map: 1.0.3
+      vue-inbrowser-compiler-independent-utils: 4.64.1(vue@3.2.47)
+    transitivePeerDependencies:
+      - vue
+    dev: true
 
   /vue-eslint-parser@9.1.0(eslint@8.37.0):
     resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
@@ -15139,6 +19929,14 @@ packages:
       - supports-color
     dev: true
 
+  /vue-inbrowser-compiler-independent-utils@4.64.1(vue@3.2.47):
+    resolution: {integrity: sha512-Hn32n07XZ8j9W8+fmOXPQL+i+W2e/8i6mkH4Ju3H6nR0+cfvmWM95GhczYi5B27+Y8JlCKgAo04IUiYce4mKAw==}
+    peerDependencies:
+      vue: '>=2'
+    dependencies:
+      vue: 3.2.47
+    dev: true
+
   /vue-plyr@7.0.0:
     resolution: {integrity: sha512-NvbO/ZzV1IxlBQQbQlon5Sk8hKuGAj3k4k0XVdi7gM4oSqu8mZMhJ3WM3FfAtNfV790jbLnb8P3dHYqaBqIv6g==}
     dependencies:
@@ -15225,6 +20023,28 @@ packages:
       makeerror: 1.0.12
     dev: true
 
+  /watchpack@2.4.0:
+    resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.11
+    dev: true
+
+  /wcwidth@1.0.1:
+    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+    dependencies:
+      defaults: 1.0.4
+    dev: true
+
+  /web-encoding@1.1.5:
+    resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==}
+    dependencies:
+      util: 0.12.5
+    optionalDependencies:
+      '@zxing/text-encoding': 0.9.0
+    dev: true
+
   /web-push@3.5.0:
     resolution: {integrity: sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==}
     engines: {node: '>= 6'}
@@ -15250,6 +20070,15 @@ packages:
     resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
     engines: {node: '>=12'}
 
+  /webpack-sources@3.2.3:
+    resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+    engines: {node: '>=10.13.0'}
+    dev: true
+
+  /webpack-virtual-modules@0.4.6:
+    resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==}
+    dev: true
+
   /websocket@1.0.34:
     resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==}
     engines: {node: '>=4.0.0'}
@@ -15318,7 +20147,6 @@ packages:
 
   /which-module@2.0.0:
     resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
-    dev: false
 
   /which-typed-array@1.1.9:
     resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
@@ -15359,22 +20187,31 @@ packages:
     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
     dependencies:
       string-width: 4.2.3
-    dev: false
+
+  /widest-line@3.1.0:
+    resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
+    engines: {node: '>=8'}
+    dependencies:
+      string-width: 4.2.3
+    dev: true
 
   /with@7.0.2:
     resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/parser': 7.20.7
-      '@babel/types': 7.20.7
+      '@babel/parser': 7.21.3
+      '@babel/types': 7.21.3
       assert-never: 1.2.1
       babel-walk: 3.0.0-canary-5
-    dev: false
 
   /word-wrap@1.2.3:
     resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
     engines: {node: '>=0.10.0'}
 
+  /wordwrap@1.0.0:
+    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+    dev: true
+
   /wrap-ansi@2.1.0:
     resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
     engines: {node: '>=0.10.0'}
@@ -15383,6 +20220,15 @@ packages:
       strip-ansi: 3.0.1
     dev: false
 
+  /wrap-ansi@5.1.0:
+    resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
+    engines: {node: '>=6'}
+    dependencies:
+      ansi-styles: 3.2.1
+      string-width: 3.1.0
+      strip-ansi: 5.2.0
+    dev: true
+
   /wrap-ansi@6.2.0:
     resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
     engines: {node: '>=8'}
@@ -15402,6 +20248,14 @@ packages:
   /wrappy@1.0.2:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 
+  /write-file-atomic@2.4.3:
+    resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+    dependencies:
+      graceful-fs: 4.2.11
+      imurmurhash: 0.1.4
+      signal-exit: 3.0.7
+    dev: true
+
   /write-file-atomic@4.0.2:
     resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -15410,6 +20264,20 @@ packages:
       signal-exit: 3.0.7
     dev: true
 
+  /ws@6.2.2:
+    resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==}
+    peerDependencies:
+      bufferutil: ^4.0.1
+      utf-8-validate: ^5.0.2
+    peerDependenciesMeta:
+      bufferutil:
+        optional: true
+      utf-8-validate:
+        optional: true
+    dependencies:
+      async-limiter: 1.0.1
+    dev: true
+
   /ws@8.13.0:
     resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
     engines: {node: '>=10.0.0'}
@@ -15421,7 +20289,6 @@ packages:
         optional: true
       utf-8-validate:
         optional: true
-    dev: false
 
   /xev@3.0.2:
     resolution: {integrity: sha512-8kxuH95iMXzHZj+fwqfA4UrPcYOy6bGIgfWzo9Ji23JoEc30ge/Z++Ubkiuy8c0+M64nXmmxrmJ7C8wnuBhluw==}
@@ -15464,7 +20331,6 @@ packages:
 
   /y18n@4.0.3:
     resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-    dev: false
 
   /y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
@@ -15484,6 +20350,13 @@ packages:
   /yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
 
+  /yargs-parser@13.1.2:
+    resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
+    dependencies:
+      camelcase: 5.3.1
+      decamelize: 1.2.0
+    dev: true
+
   /yargs-parser@18.1.3:
     resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
     engines: {node: '>=6'}
@@ -15507,6 +20380,21 @@ packages:
       object.assign: 4.1.4
     dev: false
 
+  /yargs@13.3.2:
+    resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
+    dependencies:
+      cliui: 5.0.0
+      find-up: 3.0.0
+      get-caller-file: 2.0.5
+      require-directory: 2.1.1
+      require-main-filename: 2.0.0
+      set-blocking: 2.0.0
+      string-width: 3.1.0
+      which-module: 2.0.0
+      y18n: 4.0.3
+      yargs-parser: 13.1.2
+    dev: true
+
   /yargs@15.4.1:
     resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
     engines: {node: '>=8'}
@@ -15619,6 +20507,38 @@ packages:
       sharp: 0.31.3
     dev: false
 
+  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0):
+    resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
+    id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
+    name: storybook-addon-misskey-theme
+    version: 0.0.0
+    peerDependencies:
+      '@storybook/blocks': ^7.0.0-rc.4
+      '@storybook/components': ^7.0.0-rc.4
+      '@storybook/core-events': ^7.0.0-rc.4
+      '@storybook/manager-api': ^7.0.0-rc.4
+      '@storybook/preview-api': ^7.0.0-rc.4
+      '@storybook/theming': ^7.0.0-rc.4
+      '@storybook/types': ^7.0.0-rc.4
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    peerDependenciesMeta:
+      react:
+        optional: true
+      react-dom:
+        optional: true
+    dependencies:
+      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.0-rc.10
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
   github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992:
     resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992}
     name: summaly
@@ -15638,7 +20558,7 @@ packages:
     name: plyr
     version: 3.7.0
     dependencies:
-      core-js: 3.27.1
+      core-js: 3.29.1
       custom-event-polyfill: 1.0.7
       loadjs: 4.2.0
       rangetouch: 2.0.1

From c25d89ef9c8f47adfb78867310b8297435c9106f Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Tue, 4 Apr 2023 01:45:01 +0000
Subject: [PATCH 94/99] fix(client): fix prop type in MkOmit

---
 packages/frontend/src/components/MkOmit.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/src/components/MkOmit.vue b/packages/frontend/src/components/MkOmit.vue
index 9232ebb7c9..0f148022bf 100644
--- a/packages/frontend/src/components/MkOmit.vue
+++ b/packages/frontend/src/components/MkOmit.vue
@@ -12,7 +12,7 @@ import { onMounted } from 'vue';
 import { i18n } from '@/i18n';
 
 const props = withDefaults(defineProps<{
-	maxHeight: number;
+	maxHeight?: number;
 }>(), {
 	maxHeight: 200,
 });

From 30d699268450af375dabc2226ec4f3196a53f7f7 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 4 Apr 2023 14:06:57 +0900
Subject: [PATCH 95/99] =?UTF-8?q?perf(backend):=20=E9=80=9A=E7=9F=A5?=
 =?UTF-8?q?=E3=82=92Redis=E3=81=AB=E4=BF=9D=E5=AD=98=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Resolve #10168
---
 CHANGELOG.md                                  |   1 +
 .../migration/1680582195041-cleanup.js        |  11 ++
 packages/backend/src/core/NoteReadService.ts  |   4 -
 .../backend/src/core/NotificationService.ts   | 117 +++++++--------
 .../src/core/PushNotificationService.ts       |  12 --
 .../entities/NotificationEntityService.ts     |  74 ++++++----
 .../src/core/entities/UserEntityService.ts    |  33 ++---
 packages/backend/src/di-symbols.ts            |   1 -
 .../backend/src/models/RepositoryModule.ts    |  10 +-
 .../src/models/entities/Notification.ts       | 134 +++---------------
 packages/backend/src/models/index.ts          |   3 -
 .../src/models/json-schema/notification.ts    |   4 -
 packages/backend/src/postgres.ts              |   2 -
 .../queue/processors/CleanProcessorService.ts |   9 +-
 .../backend/src/server/api/EndpointsModule.ts |   4 -
 packages/backend/src/server/api/endpoints.ts  |   2 -
 .../api/endpoints/admin/suspend-user.ts       |  16 +--
 .../server/api/endpoints/i/notifications.ts   | 106 ++++----------
 .../notifications/mark-all-as-read.ts         |  22 +--
 .../api/endpoints/notifications/read.ts       |  57 --------
 .../backend/src/server/api/stream/index.ts    |   3 +-
 .../src/components/MkNotification.vue         |  32 +----
 .../src/components/MkNotifications.vue        |  35 +----
 packages/frontend/src/pages/notifications.vue |   9 +-
 packages/frontend/src/ui/_common_/common.vue  |   4 +-
 packages/misskey-js/src/api.types.ts          |   1 -
 packages/sw/src/scripts/notification-read.ts  |  58 --------
 packages/sw/src/sw.ts                         |  30 +---
 packages/sw/src/types.ts                      |   4 -
 29 files changed, 185 insertions(+), 613 deletions(-)
 create mode 100644 packages/backend/migration/1680582195041-cleanup.js
 delete mode 100644 packages/backend/src/server/api/endpoints/notifications/read.ts
 delete mode 100644 packages/sw/src/scripts/notification-read.ts

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5cee783ee0..00c90987d4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -34,6 +34,7 @@
 - ノート作成時のパフォーマンスを向上
 - アンテナのタイムライン取得時のパフォーマンスを向上
 - チャンネルのタイムライン取得時のパフォーマンスを向上
+- 通知に関する全体的なパフォーマンスを向上
 
 ## 13.10.3
 
diff --git a/packages/backend/migration/1680582195041-cleanup.js b/packages/backend/migration/1680582195041-cleanup.js
new file mode 100644
index 0000000000..c587e456a5
--- /dev/null
+++ b/packages/backend/migration/1680582195041-cleanup.js
@@ -0,0 +1,11 @@
+export class cleanup1680582195041 {
+    name = 'cleanup1680582195041'
+
+    async up(queryRunner) {
+			await queryRunner.query(`DROP TABLE "notification" `);
+    }
+
+    async down(queryRunner) {
+        
+    }
+}
diff --git a/packages/backend/src/core/NoteReadService.ts b/packages/backend/src/core/NoteReadService.ts
index 1bf0eb918f..7c6808fbd0 100644
--- a/packages/backend/src/core/NoteReadService.ts
+++ b/packages/backend/src/core/NoteReadService.ts
@@ -169,10 +169,6 @@ export class NoteReadService implements OnApplicationShutdown {
 					this.globalEventService.publishMainStream(userId, 'readAllChannels');
 				}
 			});
-	
-			this.notificationService.readNotificationByQuery(userId, {
-				noteId: In([...readMentions.map(n => n.id), ...readSpecifiedNotes.map(n => n.id)]),
-			});
 		}
 	}
 
diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index b984f3c77b..2a4dbba6a4 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -1,8 +1,9 @@
 import { setTimeout } from 'node:timers/promises';
+import Redis from 'ioredis';
 import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
 import { In } from 'typeorm';
 import { DI } from '@/di-symbols.js';
-import type { MutingsRepository, NotificationsRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type { MutingsRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
 import type { User } from '@/models/entities/User.js';
 import type { Notification } from '@/models/entities/Notification.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
@@ -17,15 +18,15 @@ export class NotificationService implements OnApplicationShutdown {
 	#shutdownController = new AbortController();
 
 	constructor(
+		@Inject(DI.redis)
+		private redisClient: Redis.Redis,
+
 		@Inject(DI.usersRepository)
 		private usersRepository: UsersRepository,
 
 		@Inject(DI.userProfilesRepository)
 		private userProfilesRepository: UserProfilesRepository,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
-
 		@Inject(DI.mutingsRepository)
 		private mutingsRepository: MutingsRepository,
 
@@ -38,50 +39,31 @@ export class NotificationService implements OnApplicationShutdown {
 	}
 
 	@bindThis
-	public async readNotification(
+	public async readAllNotification(
 		userId: User['id'],
-		notificationIds: Notification['id'][],
 	) {
-		if (notificationIds.length === 0) return;
+		const latestReadNotificationId = await this.redisClient.get(`latestReadNotification:${userId}`);
+		
+		const latestNotificationIdsRes = await this.redisClient.xrevrange(
+			`notificationTimeline:${userId}`,
+			'+',
+			'-',
+			'COUNT', 1);
+		console.log('latestNotificationIdsRes', latestNotificationIdsRes);
+		const latestNotificationId = latestNotificationIdsRes[0]?.[0];
 
-		// Update documents
-		const result = await this.notificationsRepository.update({
-			notifieeId: userId,
-			id: In(notificationIds),
-			isRead: false,
-		}, {
-			isRead: true,
-		});
+		if (latestNotificationId == null) return;
 
-		if (result.affected === 0) return;
+		this.redisClient.set(`latestReadNotification:${userId}`, latestNotificationId);
 
-		if (!await this.userEntityService.getHasUnreadNotification(userId)) return this.postReadAllNotifications(userId);
-		else return this.postReadNotifications(userId, notificationIds);
-	}
-
-	@bindThis
-	public async readNotificationByQuery(
-		userId: User['id'],
-		query: Record<string, any>,
-	) {
-		const notificationIds = await this.notificationsRepository.findBy({
-			...query,
-			notifieeId: userId,
-			isRead: false,
-		}).then(notifications => notifications.map(notification => notification.id));
-
-		return this.readNotification(userId, notificationIds);
+		if (latestReadNotificationId == null || (latestReadNotificationId < latestNotificationId)) {
+			return this.postReadAllNotifications(userId);
+		}
 	}
 
 	@bindThis
 	private postReadAllNotifications(userId: User['id']) {
 		this.globalEventService.publishMainStream(userId, 'readAllNotifications');
-		return this.pushNotificationService.pushNotification(userId, 'readAllNotifications', undefined);
-	}
-
-	@bindThis
-	private postReadNotifications(userId: User['id'], notificationIds: Notification['id'][]) {
-		return this.pushNotificationService.pushNotification(userId, 'readNotifications', { notificationIds });
 	}
 
 	@bindThis
@@ -90,47 +72,48 @@ export class NotificationService implements OnApplicationShutdown {
 		type: Notification['type'],
 		data: Partial<Notification>,
 	): Promise<Notification | null> {
-		if (data.notifierId && (notifieeId === data.notifierId)) {
-			return null;
+		// TODO: Cache
+		const profile = await this.userProfilesRepository.findOneBy({ userId: notifieeId });
+		const isMuted = profile?.mutingNotificationTypes.includes(type);
+		if (isMuted) return null;
+
+		if (data.notifierId) {
+			if (notifieeId === data.notifierId) {
+				return null;
+			}
+
+			// TODO: cache
+			const mutings = await this.mutingsRepository.findOneBy({
+				muterId: notifieeId,
+				muteeId: data.notifierId,
+			});
+			if (mutings) {
+				return null;
+			}
 		}
 
-		const profile = await this.userProfilesRepository.findOneBy({ userId: notifieeId });
-
-		// TODO: Cache
-		const isMuted = profile?.mutingNotificationTypes.includes(type);
-
-		// Create notification
-		const notification = await this.notificationsRepository.insert({
+		const notification = {
 			id: this.idService.genId(),
 			createdAt: new Date(),
-			notifieeId: notifieeId,
 			type: type,
-			// 相手がこの通知をミュートしているようなら、既読を予めつけておく
-			isRead: isMuted,
 			...data,
-		} as Partial<Notification>)
-			.then(x => this.notificationsRepository.findOneByOrFail(x.identifiers[0]));
+		} as Notification;
 
-		const packed = await this.notificationEntityService.pack(notification, {});
+		this.redisClient.xadd(
+			`notificationTimeline:${notifieeId}`,
+			'MAXLEN', '~', '300',
+			`${this.idService.parse(notification.id).date.getTime()}-*`,
+			'data', JSON.stringify(notification));
+
+		const packed = await this.notificationEntityService.pack(notification, notifieeId, {});
 
 		// Publish notification event
 		this.globalEventService.publishMainStream(notifieeId, 'notification', packed);
 
 		// 2秒経っても(今回作成した)通知が既読にならなかったら「未読の通知がありますよ」イベントを発行する
-		setTimeout(2000, 'unread note', { signal: this.#shutdownController.signal }).then(async () => {
-			const fresh = await this.notificationsRepository.findOneBy({ id: notification.id });
-			if (fresh == null) return; // 既に削除されているかもしれない
-			if (fresh.isRead) return;
-
-			//#region ただしミュートしているユーザーからの通知なら無視
-			// TODO: Cache
-			const mutings = await this.mutingsRepository.findBy({
-				muterId: notifieeId,
-			});
-			if (data.notifierId && mutings.map(m => m.muteeId).includes(data.notifierId)) {
-				return;
-			}
-			//#endregion
+		setTimeout(2000, 'unread notification', { signal: this.#shutdownController.signal }).then(async () => {
+			const latestReadNotificationId = await this.redisClient.get(`latestReadNotification:${notifieeId}`);
+			if (latestReadNotificationId && (latestReadNotificationId >= notification.id)) return;
 
 			this.globalEventService.publishMainStream(notifieeId, 'unreadNotification', packed);
 			this.pushNotificationService.pushNotification(notifieeId, 'notification', packed);
diff --git a/packages/backend/src/core/PushNotificationService.ts b/packages/backend/src/core/PushNotificationService.ts
index 32c38ad480..69020f7e84 100644
--- a/packages/backend/src/core/PushNotificationService.ts
+++ b/packages/backend/src/core/PushNotificationService.ts
@@ -15,10 +15,6 @@ type PushNotificationsTypes = {
 		antenna: { id: string, name: string };
 		note: Packed<'Note'>;
 	};
-	'readNotifications': { notificationIds: string[] };
-	'readAllNotifications': undefined;
-	'readAntenna': { antennaId: string };
-	'readAllAntennas': undefined;
 };
 
 // Reduce length because push message servers have character limits
@@ -72,14 +68,6 @@ export class PushNotificationService {
 		});
 	
 		for (const subscription of subscriptions) {
-			// Continue if sendReadMessage is false
-			if ([
-				'readNotifications',
-				'readAllNotifications',
-				'readAntenna',
-				'readAllAntennas',
-			].includes(type) && !subscription.sendReadMessage) continue;
-
 			const pushSubscription = {
 				endpoint: subscription.endpoint,
 				keys: {
diff --git a/packages/backend/src/core/entities/NotificationEntityService.ts b/packages/backend/src/core/entities/NotificationEntityService.ts
index 70e56cb3d7..7cffb8d568 100644
--- a/packages/backend/src/core/entities/NotificationEntityService.ts
+++ b/packages/backend/src/core/entities/NotificationEntityService.ts
@@ -1,7 +1,8 @@
 import { Inject, Injectable } from '@nestjs/common';
 import { ModuleRef } from '@nestjs/core';
+import { In } from 'typeorm';
 import { DI } from '@/di-symbols.js';
-import type { AccessTokensRepository, NoteReactionsRepository, NotificationsRepository, User } from '@/models/index.js';
+import type { AccessTokensRepository, NoteReactionsRepository, NotesRepository, User, UsersRepository } from '@/models/index.js';
 import { awaitAll } from '@/misc/prelude/await-all.js';
 import type { Notification } from '@/models/entities/Notification.js';
 import type { Note } from '@/models/entities/Note.js';
@@ -25,8 +26,11 @@ export class NotificationEntityService implements OnModuleInit {
 	constructor(
 		private moduleRef: ModuleRef,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
+		@Inject(DI.notesRepository)
+		private notesRepository: NotesRepository,
+
+		@Inject(DI.usersRepository)
+		private usersRepository: UsersRepository,
 
 		@Inject(DI.noteReactionsRepository)
 		private noteReactionsRepository: NoteReactionsRepository,
@@ -48,30 +52,39 @@ export class NotificationEntityService implements OnModuleInit {
 
 	@bindThis
 	public async pack(
-		src: Notification['id'] | Notification,
+		src: Notification,
+		meId: User['id'],
 		options: {
-			_hint_?: {
-				packedNotes: Map<Note['id'], Packed<'Note'>>;
-			};
+			
+		},
+		hint?: {
+			packedNotes: Map<Note['id'], Packed<'Note'>>;
+			packedUsers: Map<User['id'], Packed<'User'>>;
 		},
 	): Promise<Packed<'Notification'>> {
-		const notification = typeof src === 'object' ? src : await this.notificationsRepository.findOneByOrFail({ id: src });
+		const notification = src;
 		const token = notification.appAccessTokenId ? await this.accessTokensRepository.findOneByOrFail({ id: notification.appAccessTokenId }) : null;
 		const noteIfNeed = NOTE_REQUIRED_NOTIFICATION_TYPES.has(notification.type) && notification.noteId != null ? (
-			options._hint_?.packedNotes != null
-				? options._hint_.packedNotes.get(notification.noteId)
-				: this.noteEntityService.pack(notification.note ?? notification.noteId!, { id: notification.notifieeId }, {
+			hint?.packedNotes != null
+				? hint.packedNotes.get(notification.noteId)
+				: this.noteEntityService.pack(notification.noteId!, { id: meId }, {
 					detail: true,
 				})
 		) : undefined;
+		const userIfNeed = notification.notifierId != null ? (
+			hint?.packedUsers != null
+				? hint.packedUsers.get(notification.notifierId)
+				: this.userEntityService.pack(notification.notifierId!, { id: meId }, {
+					detail: false,
+				})
+		) : undefined;
 
 		return await awaitAll({
 			id: notification.id,
-			createdAt: notification.createdAt.toISOString(),
+			createdAt: new Date(notification.createdAt).toISOString(),
 			type: notification.type,
-			isRead: notification.isRead,
 			userId: notification.notifierId,
-			user: notification.notifierId ? this.userEntityService.pack(notification.notifier ?? notification.notifierId) : null,
+			...(userIfNeed != null ? { user: userIfNeed } : {}),
 			...(noteIfNeed != null ? { note: noteIfNeed } : {}),
 			...(notification.type === 'reaction' ? {
 				reaction: notification.reaction,
@@ -87,33 +100,36 @@ export class NotificationEntityService implements OnModuleInit {
 		});
 	}
 
-	/**
-	 * @param notifications you should join "note" property when fetch from DB, and all notifieeId should be same as meId
-	 */
 	@bindThis
 	public async packMany(
 		notifications: Notification[],
 		meId: User['id'],
 	) {
 		if (notifications.length === 0) return [];
-		
-		for (const notification of notifications) {
-			if (meId !== notification.notifieeId) {
-				// because we call note packMany with meId, all notifieeId should be same as meId
-				throw new Error('TRY_TO_PACK_ANOTHER_USER_NOTIFICATION');
-			}
-		}
 
-		const notes = notifications.map(x => x.note).filter(isNotNull);
+		const noteIds = notifications.map(x => x.noteId).filter(isNotNull);
+		const notes = noteIds.length > 0 ? await this.notesRepository.find({
+			where: { id: In(noteIds) },
+			relations: ['user', 'user.avatar', 'user.banner', 'reply', 'reply.user', 'reply.user.avatar', 'reply.user.banner', 'renote', 'renote.user', 'renote.user.avatar', 'renote.user.banner'],
+		}) : [];
 		const packedNotesArray = await this.noteEntityService.packMany(notes, { id: meId }, {
 			detail: true,
 		});
 		const packedNotes = new Map(packedNotesArray.map(p => [p.id, p]));
 
-		return await Promise.all(notifications.map(x => this.pack(x, {
-			_hint_: {
-				packedNotes,
-			},
+		const userIds = notifications.map(x => x.notifierId).filter(isNotNull);
+		const users = userIds.length > 0 ? await this.usersRepository.find({
+			where: { id: In(userIds) },
+			relations: ['avatar', 'banner'],
+		}) : [];
+		const packedUsersArray = await this.userEntityService.packMany(users, { id: meId }, {
+			detail: false,
+		});
+		const packedUsers = new Map(packedUsersArray.map(p => [p.id, p]));
+
+		return await Promise.all(notifications.map(x => this.pack(x, meId, {}, {
+			packedNotes,
+			packedUsers,
 		})));
 	}
 }
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index 61fd6f2f66..ae7c47a990 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -1,5 +1,6 @@
 import { Inject, Injectable } from '@nestjs/common';
 import { In, Not } from 'typeorm';
+import Redis from 'ioredis';
 import Ajv from 'ajv';
 import { ModuleRef } from '@nestjs/core';
 import { DI } from '@/di-symbols.js';
@@ -12,7 +13,7 @@ import { KVCache } from '@/misc/cache.js';
 import type { Instance } from '@/models/entities/Instance.js';
 import type { LocalUser, RemoteUser, User } from '@/models/entities/User.js';
 import { birthdaySchema, descriptionSchema, localUsernameSchema, locationSchema, nameSchema, passwordSchema } from '@/models/entities/User.js';
-import type { UsersRepository, UserSecurityKeysRepository, FollowingsRepository, FollowRequestsRepository, BlockingsRepository, MutingsRepository, DriveFilesRepository, NoteUnreadsRepository, ChannelFollowingsRepository, NotificationsRepository, UserNotePiningsRepository, UserProfilesRepository, InstancesRepository, AnnouncementReadsRepository, AnnouncementsRepository, PagesRepository, UserProfile, RenoteMutingsRepository } from '@/models/index.js';
+import type { UsersRepository, UserSecurityKeysRepository, FollowingsRepository, FollowRequestsRepository, BlockingsRepository, MutingsRepository, DriveFilesRepository, NoteUnreadsRepository, ChannelFollowingsRepository, UserNotePiningsRepository, UserProfilesRepository, InstancesRepository, AnnouncementReadsRepository, AnnouncementsRepository, PagesRepository, UserProfile, RenoteMutingsRepository } from '@/models/index.js';
 import { bindThis } from '@/decorators.js';
 import { RoleService } from '@/core/RoleService.js';
 import type { OnModuleInit } from '@nestjs/common';
@@ -60,6 +61,9 @@ export class UserEntityService implements OnModuleInit {
 		@Inject(DI.config)
 		private config: Config,
 
+		@Inject(DI.redis)
+		private redisClient: Redis.Redis,
+
 		@Inject(DI.usersRepository)
 		private usersRepository: UsersRepository,
 
@@ -90,9 +94,6 @@ export class UserEntityService implements OnModuleInit {
 		@Inject(DI.channelFollowingsRepository)
 		private channelFollowingsRepository: ChannelFollowingsRepository,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
-
 		@Inject(DI.userNotePiningsRepository)
 		private userNotePiningsRepository: UserNotePiningsRepository,
 
@@ -247,21 +248,17 @@ export class UserEntityService implements OnModuleInit {
 
 	@bindThis
 	public async getHasUnreadNotification(userId: User['id']): Promise<boolean> {
-		const mute = await this.mutingsRepository.findBy({
-			muterId: userId,
-		});
-		const mutedUserIds = mute.map(m => m.muteeId);
+		const latestReadNotificationId = await this.redisClient.get(`latestReadNotification:${userId}`);
+		
+		const latestNotificationIdsRes = await this.redisClient.xrevrange(
+			`notificationTimeline:${userId}`,
+			'+',
+			'-',
+			'COUNT', 1);
+		console.log('latestNotificationIdsRes', latestNotificationIdsRes);
+		const latestNotificationId = latestNotificationIdsRes[0]?.[0];
 
-		const count = await this.notificationsRepository.count({
-			where: {
-				notifieeId: userId,
-				...(mutedUserIds.length > 0 ? { notifierId: Not(In(mutedUserIds)) } : {}),
-				isRead: false,
-			},
-			take: 1,
-		});
-
-		return count > 0;
+		return latestNotificationId != null && (latestReadNotificationId == null || latestReadNotificationId < latestNotificationId);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/di-symbols.ts b/packages/backend/src/di-symbols.ts
index f2ab6cb864..56ce755a1a 100644
--- a/packages/backend/src/di-symbols.ts
+++ b/packages/backend/src/di-symbols.ts
@@ -33,7 +33,6 @@ export const DI = {
 	emojisRepository: Symbol('emojisRepository'),
 	driveFilesRepository: Symbol('driveFilesRepository'),
 	driveFoldersRepository: Symbol('driveFoldersRepository'),
-	notificationsRepository: Symbol('notificationsRepository'),
 	metasRepository: Symbol('metasRepository'),
 	mutingsRepository: Symbol('mutingsRepository'),
 	renoteMutingsRepository: Symbol('renoteMutingsRepository'),
diff --git a/packages/backend/src/models/RepositoryModule.ts b/packages/backend/src/models/RepositoryModule.ts
index b74ee3689c..7be7b81904 100644
--- a/packages/backend/src/models/RepositoryModule.ts
+++ b/packages/backend/src/models/RepositoryModule.ts
@@ -1,6 +1,6 @@
 import { Module } from '@nestjs/common';
 import { DI } from '@/di-symbols.js';
-import { User, Note, Announcement, AnnouncementRead, App, NoteFavorite, NoteThreadMuting, NoteReaction, NoteUnread, Notification, Poll, PollVote, UserProfile, UserKeypair, UserPending, AttestationChallenge, UserSecurityKey, UserPublickey, UserList, UserListJoining, UserNotePining, UserIp, UsedUsername, Following, FollowRequest, Instance, Emoji, DriveFile, DriveFolder, Meta, Muting, RenoteMuting, Blocking, SwSubscription, Hashtag, AbuseUserReport, RegistrationTicket, AuthSession, AccessToken, Signin, Page, PageLike, GalleryPost, GalleryLike, ModerationLog, Clip, ClipNote, Antenna, PromoNote, PromoRead, Relay, MutedNote, Channel, ChannelFollowing, ChannelFavorite, RegistryItem, Webhook, Ad, PasswordResetRequest, RetentionAggregation, FlashLike, Flash, Role, RoleAssignment, ClipFavorite } from './index.js';
+import { User, Note, Announcement, AnnouncementRead, App, NoteFavorite, NoteThreadMuting, NoteReaction, NoteUnread, Poll, PollVote, UserProfile, UserKeypair, UserPending, AttestationChallenge, UserSecurityKey, UserPublickey, UserList, UserListJoining, UserNotePining, UserIp, UsedUsername, Following, FollowRequest, Instance, Emoji, DriveFile, DriveFolder, Meta, Muting, RenoteMuting, Blocking, SwSubscription, Hashtag, AbuseUserReport, RegistrationTicket, AuthSession, AccessToken, Signin, Page, PageLike, GalleryPost, GalleryLike, ModerationLog, Clip, ClipNote, Antenna, PromoNote, PromoRead, Relay, MutedNote, Channel, ChannelFollowing, ChannelFavorite, RegistryItem, Webhook, Ad, PasswordResetRequest, RetentionAggregation, FlashLike, Flash, Role, RoleAssignment, ClipFavorite } from './index.js';
 import type { DataSource } from 'typeorm';
 import type { Provider } from '@nestjs/common';
 
@@ -172,12 +172,6 @@ const $driveFoldersRepository: Provider = {
 	inject: [DI.db],
 };
 
-const $notificationsRepository: Provider = {
-	provide: DI.notificationsRepository,
-	useFactory: (db: DataSource) => db.getRepository(Notification),
-	inject: [DI.db],
-};
-
 const $metasRepository: Provider = {
 	provide: DI.metasRepository,
 	useFactory: (db: DataSource) => db.getRepository(Meta),
@@ -426,7 +420,6 @@ const $roleAssignmentsRepository: Provider = {
 		$emojisRepository,
 		$driveFilesRepository,
 		$driveFoldersRepository,
-		$notificationsRepository,
 		$metasRepository,
 		$mutingsRepository,
 		$renoteMutingsRepository,
@@ -493,7 +486,6 @@ const $roleAssignmentsRepository: Provider = {
 		$emojisRepository,
 		$driveFilesRepository,
 		$driveFoldersRepository,
-		$notificationsRepository,
 		$metasRepository,
 		$mutingsRepository,
 		$renoteMutingsRepository,
diff --git a/packages/backend/src/models/entities/Notification.ts b/packages/backend/src/models/entities/Notification.ts
index 51117efba5..aa6f997124 100644
--- a/packages/backend/src/models/entities/Notification.ts
+++ b/packages/backend/src/models/entities/Notification.ts
@@ -1,54 +1,19 @@
-import { Entity, Index, JoinColumn, ManyToOne, Column, PrimaryColumn } from 'typeorm';
-import { notificationTypes, obsoleteNotificationTypes } from '@/types.js';
-import { id } from '../id.js';
+import { notificationTypes } from '@/types.js';
 import { User } from './User.js';
 import { Note } from './Note.js';
 import { FollowRequest } from './FollowRequest.js';
 import { AccessToken } from './AccessToken.js';
 
-@Entity()
-export class Notification {
-	@PrimaryColumn(id())
-	public id: string;
+export type Notification = {
+	id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Notification.',
-	})
-	public createdAt: Date;
-
-	/**
-	 * 通知の受信者
-	 */
-	@Index()
-	@Column({
-		...id(),
-		comment: 'The ID of recipient user of the Notification.',
-	})
-	public notifieeId: User['id'];
-
-	@ManyToOne(type => User, {
-		onDelete: 'CASCADE',
-	})
-	@JoinColumn()
-	public notifiee: User | null;
+	// RedisのためDateではなくstring
+	createdAt: string;
 
 	/**
 	 * 通知の送信者(initiator)
 	 */
-	@Index()
-	@Column({
-		...id(),
-		nullable: true,
-		comment: 'The ID of sender user of the Notification.',
-	})
-	public notifierId: User['id'] | null;
-
-	@ManyToOne(type => User, {
-		onDelete: 'CASCADE',
-	})
-	@JoinColumn()
-	public notifier: User | null;
+	notifierId: User['id'] | null;
 
 	/**
 	 * 通知の種類。
@@ -64,104 +29,37 @@ export class Notification {
 	 * achievementEarned - 実績を獲得
 	 * app - アプリ通知
 	 */
-	@Index()
-	@Column('enum', {
-		enum: [
-			...notificationTypes,
-			...obsoleteNotificationTypes,
-		],
-		comment: 'The type of the Notification.',
-	})
-	public type: typeof notificationTypes[number];
+	type: typeof notificationTypes[number];
 
-	/**
-	 * 通知が読まれたかどうか
-	 */
-	@Index()
-	@Column('boolean', {
-		default: false,
-		comment: 'Whether the Notification is read.',
-	})
-	public isRead: boolean;
+	noteId: Note['id'] | null;
 
-	@Column({
-		...id(),
-		nullable: true,
-	})
-	public noteId: Note['id'] | null;
+	followRequestId: FollowRequest['id'] | null;
 
-	@ManyToOne(type => Note, {
-		onDelete: 'CASCADE',
-	})
-	@JoinColumn()
-	public note: Note | null;
+	reaction: string | null;
 
-	@Column({
-		...id(),
-		nullable: true,
-	})
-	public followRequestId: FollowRequest['id'] | null;
+	choice: number | null;
 
-	@ManyToOne(type => FollowRequest, {
-		onDelete: 'CASCADE',
-	})
-	@JoinColumn()
-	public followRequest: FollowRequest | null;
-
-	@Column('varchar', {
-		length: 128, nullable: true,
-	})
-	public reaction: string | null;
-
-	@Column('integer', {
-		nullable: true,
-	})
-	public choice: number | null;
-
-	@Column('varchar', {
-		length: 128, nullable: true,
-	})
-	public achievement: string | null;
+	achievement: string | null;
 
 	/**
 	 * アプリ通知のbody
 	 */
-	@Column('varchar', {
-		length: 2048, nullable: true,
-	})
-	public customBody: string | null;
+	customBody: string | null;
 
 	/**
 	 * アプリ通知のheader
 	 * (省略時はアプリ名で表示されることを期待)
 	 */
-	@Column('varchar', {
-		length: 256, nullable: true,
-	})
-	public customHeader: string | null;
+	customHeader: string | null;
 
 	/**
 	 * アプリ通知のicon(URL)
 	 * (省略時はアプリアイコンで表示されることを期待)
 	 */
-	@Column('varchar', {
-		length: 1024, nullable: true,
-	})
-	public customIcon: string | null;
+	customIcon: string | null;
 
 	/**
 	 * アプリ通知のアプリ(のトークン)
 	 */
-	@Index()
-	@Column({
-		...id(),
-		nullable: true,
-	})
-	public appAccessTokenId: AccessToken['id'] | null;
-
-	@ManyToOne(type => AccessToken, {
-		onDelete: 'CASCADE',
-	})
-	@JoinColumn()
-	public appAccessToken: AccessToken | null;
+	appAccessTokenId: AccessToken['id'] | null;
 }
diff --git a/packages/backend/src/models/index.ts b/packages/backend/src/models/index.ts
index c4c9717ed5..48d6e15f2a 100644
--- a/packages/backend/src/models/index.ts
+++ b/packages/backend/src/models/index.ts
@@ -32,7 +32,6 @@ import { NoteFavorite } from '@/models/entities/NoteFavorite.js';
 import { NoteReaction } from '@/models/entities/NoteReaction.js';
 import { NoteThreadMuting } from '@/models/entities/NoteThreadMuting.js';
 import { NoteUnread } from '@/models/entities/NoteUnread.js';
-import { Notification } from '@/models/entities/Notification.js';
 import { Page } from '@/models/entities/Page.js';
 import { PageLike } from '@/models/entities/PageLike.js';
 import { PasswordResetRequest } from '@/models/entities/PasswordResetRequest.js';
@@ -100,7 +99,6 @@ export {
 	NoteReaction,
 	NoteThreadMuting,
 	NoteUnread,
-	Notification,
 	Page,
 	PageLike,
 	PasswordResetRequest,
@@ -167,7 +165,6 @@ export type NoteFavoritesRepository = Repository<NoteFavorite>;
 export type NoteReactionsRepository = Repository<NoteReaction>;
 export type NoteThreadMutingsRepository = Repository<NoteThreadMuting>;
 export type NoteUnreadsRepository = Repository<NoteUnread>;
-export type NotificationsRepository = Repository<Notification>;
 export type PagesRepository = Repository<Page>;
 export type PageLikesRepository = Repository<PageLike>;
 export type PasswordResetRequestsRepository = Repository<PasswordResetRequest>;
diff --git a/packages/backend/src/models/json-schema/notification.ts b/packages/backend/src/models/json-schema/notification.ts
index d3f2405cdd..e88ca61ba0 100644
--- a/packages/backend/src/models/json-schema/notification.ts
+++ b/packages/backend/src/models/json-schema/notification.ts
@@ -14,10 +14,6 @@ export const packedNotificationSchema = {
 			optional: false, nullable: false,
 			format: 'date-time',
 		},
-		isRead: {
-			type: 'boolean',
-			optional: false, nullable: false,
-		},
 		type: {
 			type: 'string',
 			optional: false, nullable: false,
diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts
index 024aa114fc..efeca46b49 100644
--- a/packages/backend/src/postgres.ts
+++ b/packages/backend/src/postgres.ts
@@ -40,7 +40,6 @@ import { NoteFavorite } from '@/models/entities/NoteFavorite.js';
 import { NoteReaction } from '@/models/entities/NoteReaction.js';
 import { NoteThreadMuting } from '@/models/entities/NoteThreadMuting.js';
 import { NoteUnread } from '@/models/entities/NoteUnread.js';
-import { Notification } from '@/models/entities/Notification.js';
 import { Page } from '@/models/entities/Page.js';
 import { PageLike } from '@/models/entities/PageLike.js';
 import { PasswordResetRequest } from '@/models/entities/PasswordResetRequest.js';
@@ -155,7 +154,6 @@ export const entities = [
 	DriveFolder,
 	Poll,
 	PollVote,
-	Notification,
 	Emoji,
 	Hashtag,
 	SwSubscription,
diff --git a/packages/backend/src/queue/processors/CleanProcessorService.ts b/packages/backend/src/queue/processors/CleanProcessorService.ts
index 3feb86f86f..1936e8df23 100644
--- a/packages/backend/src/queue/processors/CleanProcessorService.ts
+++ b/packages/backend/src/queue/processors/CleanProcessorService.ts
@@ -1,7 +1,7 @@
 import { Inject, Injectable } from '@nestjs/common';
 import { In, LessThan } from 'typeorm';
 import { DI } from '@/di-symbols.js';
-import type { AntennasRepository, MutedNotesRepository, NotificationsRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
+import type { AntennasRepository, MutedNotesRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
 import type { Config } from '@/config.js';
 import type Logger from '@/logger.js';
 import { bindThis } from '@/decorators.js';
@@ -20,9 +20,6 @@ export class CleanProcessorService {
 		@Inject(DI.userIpsRepository)
 		private userIpsRepository: UserIpsRepository,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
-
 		@Inject(DI.mutedNotesRepository)
 		private mutedNotesRepository: MutedNotesRepository,
 
@@ -46,10 +43,6 @@ export class CleanProcessorService {
 			createdAt: LessThan(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90))),
 		});
 
-		this.notificationsRepository.delete({
-			createdAt: LessThan(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90))),
-		});
-
 		this.mutedNotesRepository.delete({
 			id: LessThan(this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90)))),
 			reason: 'word',
diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts
index f39643abeb..cab2477414 100644
--- a/packages/backend/src/server/api/EndpointsModule.ts
+++ b/packages/backend/src/server/api/EndpointsModule.ts
@@ -268,7 +268,6 @@ import * as ep___notes_unrenote from './endpoints/notes/unrenote.js';
 import * as ep___notes_userListTimeline from './endpoints/notes/user-list-timeline.js';
 import * as ep___notifications_create from './endpoints/notifications/create.js';
 import * as ep___notifications_markAllAsRead from './endpoints/notifications/mark-all-as-read.js';
-import * as ep___notifications_read from './endpoints/notifications/read.js';
 import * as ep___pagePush from './endpoints/page-push.js';
 import * as ep___pages_create from './endpoints/pages/create.js';
 import * as ep___pages_delete from './endpoints/pages/delete.js';
@@ -600,7 +599,6 @@ const $notes_unrenote: Provider = { provide: 'ep:notes/unrenote', useClass: ep__
 const $notes_userListTimeline: Provider = { provide: 'ep:notes/user-list-timeline', useClass: ep___notes_userListTimeline.default };
 const $notifications_create: Provider = { provide: 'ep:notifications/create', useClass: ep___notifications_create.default };
 const $notifications_markAllAsRead: Provider = { provide: 'ep:notifications/mark-all-as-read', useClass: ep___notifications_markAllAsRead.default };
-const $notifications_read: Provider = { provide: 'ep:notifications/read', useClass: ep___notifications_read.default };
 const $pagePush: Provider = { provide: 'ep:page-push', useClass: ep___pagePush.default };
 const $pages_create: Provider = { provide: 'ep:pages/create', useClass: ep___pages_create.default };
 const $pages_delete: Provider = { provide: 'ep:pages/delete', useClass: ep___pages_delete.default };
@@ -936,7 +934,6 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
 		$notes_userListTimeline,
 		$notifications_create,
 		$notifications_markAllAsRead,
-		$notifications_read,
 		$pagePush,
 		$pages_create,
 		$pages_delete,
@@ -1266,7 +1263,6 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
 		$notes_userListTimeline,
 		$notifications_create,
 		$notifications_markAllAsRead,
-		$notifications_read,
 		$pagePush,
 		$pages_create,
 		$pages_delete,
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index 16b20c1a4d..e33c2349cd 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -268,7 +268,6 @@ import * as ep___notes_unrenote from './endpoints/notes/unrenote.js';
 import * as ep___notes_userListTimeline from './endpoints/notes/user-list-timeline.js';
 import * as ep___notifications_create from './endpoints/notifications/create.js';
 import * as ep___notifications_markAllAsRead from './endpoints/notifications/mark-all-as-read.js';
-import * as ep___notifications_read from './endpoints/notifications/read.js';
 import * as ep___pagePush from './endpoints/page-push.js';
 import * as ep___pages_create from './endpoints/pages/create.js';
 import * as ep___pages_delete from './endpoints/pages/delete.js';
@@ -598,7 +597,6 @@ const eps = [
 	['notes/user-list-timeline', ep___notes_userListTimeline],
 	['notifications/create', ep___notifications_create],
 	['notifications/mark-all-as-read', ep___notifications_markAllAsRead],
-	['notifications/read', ep___notifications_read],
 	['page-push', ep___pagePush],
 	['pages/create', ep___pages_create],
 	['pages/delete', ep___pages_delete],
diff --git a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
index 3ad6c7c484..770b61850a 100644
--- a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
@@ -1,6 +1,6 @@
 import { Inject, Injectable } from '@nestjs/common';
 import { Endpoint } from '@/server/api/endpoint-base.js';
-import type { UsersRepository, FollowingsRepository, NotificationsRepository } from '@/models/index.js';
+import type { UsersRepository, FollowingsRepository } from '@/models/index.js';
 import type { User } from '@/models/entities/User.js';
 import { GlobalEventService } from '@/core/GlobalEventService.js';
 import { ModerationLogService } from '@/core/ModerationLogService.js';
@@ -36,9 +36,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		@Inject(DI.followingsRepository)
 		private followingsRepository: FollowingsRepository,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
-
 		private userEntityService: UserEntityService,
 		private userFollowingService: UserFollowingService,
 		private userSuspendService: UserSuspendService,
@@ -73,7 +70,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			(async () => {
 				await this.userSuspendService.doPostSuspend(user).catch(e => {});
 				await this.unFollowAll(user).catch(e => {});
-				await this.readAllNotify(user).catch(e => {});
 			})();
 		});
 	}
@@ -96,14 +92,4 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			await this.userFollowingService.unfollow(follower, followee, true);
 		}
 	}
-	
-	@bindThis
-	private async readAllNotify(notifier: User) {
-		await this.notificationsRepository.update({
-			notifierId: notifier.id,
-			isRead: false,
-		}, {
-			isRead: true,
-		});
-	}
 }
diff --git a/packages/backend/src/server/api/endpoints/i/notifications.ts b/packages/backend/src/server/api/endpoints/i/notifications.ts
index e3897d38bd..f27b4e86d4 100644
--- a/packages/backend/src/server/api/endpoints/i/notifications.ts
+++ b/packages/backend/src/server/api/endpoints/i/notifications.ts
@@ -1,6 +1,7 @@
-import { Brackets } from 'typeorm';
+import { Brackets, In } from 'typeorm';
+import Redis from 'ioredis';
 import { Inject, Injectable } from '@nestjs/common';
-import type { UsersRepository, FollowingsRepository, MutingsRepository, UserProfilesRepository, NotificationsRepository } from '@/models/index.js';
+import type { UsersRepository, FollowingsRepository, MutingsRepository, UserProfilesRepository, NotesRepository } from '@/models/index.js';
 import { obsoleteNotificationTypes, notificationTypes } from '@/types.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import { QueryService } from '@/core/QueryService.js';
@@ -8,6 +9,8 @@ import { NoteReadService } from '@/core/NoteReadService.js';
 import { NotificationEntityService } from '@/core/entities/NotificationEntityService.js';
 import { NotificationService } from '@/core/NotificationService.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
+import { Notification } from '@/models/entities/Notification.js';
 
 export const meta = {
 	tags: ['account', 'notifications'],
@@ -38,8 +41,6 @@ export const paramDef = {
 		limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
 		sinceId: { type: 'string', format: 'misskey:id' },
 		untilId: { type: 'string', format: 'misskey:id' },
-		following: { type: 'boolean', default: false },
-		unreadOnly: { type: 'boolean', default: false },
 		markAsRead: { type: 'boolean', default: true },
 		// 後方互換のため、廃止された通知タイプも受け付ける
 		includeTypes: { type: 'array', items: {
@@ -56,21 +57,22 @@ export const paramDef = {
 @Injectable()
 export default class extends Endpoint<typeof meta, typeof paramDef> {
 	constructor(
+		@Inject(DI.redis)
+		private redisClient: Redis.Redis,
+
 		@Inject(DI.usersRepository)
 		private usersRepository: UsersRepository,
 
-		@Inject(DI.followingsRepository)
-		private followingsRepository: FollowingsRepository,
-
 		@Inject(DI.mutingsRepository)
 		private mutingsRepository: MutingsRepository,
 
 		@Inject(DI.userProfilesRepository)
 		private userProfilesRepository: UserProfilesRepository,
 
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
+		@Inject(DI.notesRepository)
+		private notesRepository: NotesRepository,
 
+		private idService: IdService,
 		private notificationEntityService: NotificationEntityService,
 		private notificationService: NotificationService,
 		private queryService: QueryService,
@@ -89,85 +91,39 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			const includeTypes = ps.includeTypes && ps.includeTypes.filter(type => !(obsoleteNotificationTypes).includes(type as any)) as typeof notificationTypes[number][];
 			const excludeTypes = ps.excludeTypes && ps.excludeTypes.filter(type => !(obsoleteNotificationTypes).includes(type as any)) as typeof notificationTypes[number][];
 
-			const followingQuery = this.followingsRepository.createQueryBuilder('following')
-				.select('following.followeeId')
-				.where('following.followerId = :followerId', { followerId: me.id });
+			const notificationsRes = await this.redisClient.xrevrange(
+				`notificationTimeline:${me.id}`,
+				ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : '+',
+				'-',
+				'COUNT', ps.limit + 1); // untilIdに指定したものも含まれるため+1
 
-			const mutingQuery = this.mutingsRepository.createQueryBuilder('muting')
-				.select('muting.muteeId')
-				.where('muting.muterId = :muterId', { muterId: me.id });
-
-			const mutingInstanceQuery = this.userProfilesRepository.createQueryBuilder('user_profile')
-				.select('user_profile.mutedInstances')
-				.where('user_profile.userId = :muterId', { muterId: me.id });
-
-			const suspendedQuery = this.usersRepository.createQueryBuilder('users')
-				.select('users.id')
-				.where('users.isSuspended = TRUE');
-
-			const query = this.queryService.makePaginationQuery(this.notificationsRepository.createQueryBuilder('notification'), ps.sinceId, ps.untilId)
-				.andWhere('notification.notifieeId = :meId', { meId: me.id })
-				.leftJoinAndSelect('notification.notifier', 'notifier')
-				.leftJoinAndSelect('notification.note', 'note')
-				.leftJoinAndSelect('notifier.avatar', 'notifierAvatar')
-				.leftJoinAndSelect('notifier.banner', 'notifierBanner')
-				.leftJoinAndSelect('note.user', 'user')
-				.leftJoinAndSelect('user.avatar', 'avatar')
-				.leftJoinAndSelect('user.banner', 'banner')
-				.leftJoinAndSelect('note.reply', 'reply')
-				.leftJoinAndSelect('note.renote', 'renote')
-				.leftJoinAndSelect('reply.user', 'replyUser')
-				.leftJoinAndSelect('replyUser.avatar', 'replyUserAvatar')
-				.leftJoinAndSelect('replyUser.banner', 'replyUserBanner')
-				.leftJoinAndSelect('renote.user', 'renoteUser')
-				.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
-				.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner');
-
-			// muted users
-			query.andWhere(new Brackets(qb => { qb
-				.where(`notification.notifierId NOT IN (${ mutingQuery.getQuery() })`)
-				.orWhere('notification.notifierId IS NULL');
-			}));
-			query.setParameters(mutingQuery.getParameters());
-
-			// muted instances
-			query.andWhere(new Brackets(qb => { qb
-				.andWhere('notifier.host IS NULL')
-				.orWhere(`NOT (( ${mutingInstanceQuery.getQuery()} )::jsonb ? notifier.host)`);
-			}));
-			query.setParameters(mutingInstanceQuery.getParameters());
-
-			// suspended users
-			query.andWhere(new Brackets(qb => { qb
-				.where(`notification.notifierId NOT IN (${ suspendedQuery.getQuery() })`)
-				.orWhere('notification.notifierId IS NULL');
-			}));
-
-			if (ps.following) {
-				query.andWhere(`((notification.notifierId IN (${ followingQuery.getQuery() })) OR (notification.notifierId = :meId))`, { meId: me.id });
-				query.setParameters(followingQuery.getParameters());
+			if (notificationsRes.length === 0) {
+				return [];
 			}
 
+			let notifications = notificationsRes.map(x => JSON.parse(x[1][1])).filter(x => x.id !== ps.untilId) as Notification[];
+
 			if (includeTypes && includeTypes.length > 0) {
-				query.andWhere('notification.type IN (:...includeTypes)', { includeTypes });
+				notifications = notifications.filter(notification => includeTypes.includes(notification.type));
 			} else if (excludeTypes && excludeTypes.length > 0) {
-				query.andWhere('notification.type NOT IN (:...excludeTypes)', { excludeTypes });
+				notifications = notifications.filter(notification => !excludeTypes.includes(notification.type));
 			}
 
-			if (ps.unreadOnly) {
-				query.andWhere('notification.isRead = false');
+			if (notifications.length === 0) {
+				return [];
 			}
 
-			const notifications = await query.take(ps.limit).getMany();
-
 			// Mark all as read
-			if (notifications.length > 0 && ps.markAsRead) {
-				this.notificationService.readNotification(me.id, notifications.map(x => x.id));
+			if (ps.markAsRead) {
+				this.notificationService.readAllNotification(me.id);
 			}
 
-			const notes = notifications.filter(notification => ['mention', 'reply', 'quote'].includes(notification.type)).map(notification => notification.note!);
+			const noteIds = notifications
+				.filter(notification => ['mention', 'reply', 'quote'].includes(notification.type))
+				.map(notification => notification.noteId!);
 
-			if (notes.length > 0) {
+			if (noteIds.length > 0) {
+				const notes = await this.notesRepository.findBy({ id: In(noteIds) });
 				this.noteReadService.read(me.id, notes);
 			}
 
diff --git a/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts b/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
index 09134cf48f..9ba6079189 100644
--- a/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
+++ b/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
@@ -1,9 +1,7 @@
 import { Inject, Injectable } from '@nestjs/common';
-import type { NotificationsRepository } from '@/models/index.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
-import { GlobalEventService } from '@/core/GlobalEventService.js';
-import { PushNotificationService } from '@/core/PushNotificationService.js';
 import { DI } from '@/di-symbols.js';
+import { NotificationService } from '@/core/NotificationService.js';
 
 export const meta = {
 	tags: ['notifications', 'account'],
@@ -23,24 +21,10 @@ export const paramDef = {
 @Injectable()
 export default class extends Endpoint<typeof meta, typeof paramDef> {
 	constructor(
-		@Inject(DI.notificationsRepository)
-		private notificationsRepository: NotificationsRepository,
-
-		private globalEventService: GlobalEventService,
-		private pushNotificationService: PushNotificationService,
+		private notificationService: NotificationService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			// Update documents
-			await this.notificationsRepository.update({
-				notifieeId: me.id,
-				isRead: false,
-			}, {
-				isRead: true,
-			});
-
-			// 全ての通知を読みましたよというイベントを発行
-			this.globalEventService.publishMainStream(me.id, 'readAllNotifications');
-			this.pushNotificationService.pushNotification(me.id, 'readAllNotifications', undefined);
+			this.notificationService.readAllNotification(me.id);
 		});
 	}
 }
diff --git a/packages/backend/src/server/api/endpoints/notifications/read.ts b/packages/backend/src/server/api/endpoints/notifications/read.ts
deleted file mode 100644
index 6262c47fd0..0000000000
--- a/packages/backend/src/server/api/endpoints/notifications/read.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { Injectable } from '@nestjs/common';
-import { Endpoint } from '@/server/api/endpoint-base.js';
-import { NotificationService } from '@/core/NotificationService.js';
-
-export const meta = {
-	tags: ['notifications', 'account'],
-
-	requireCredential: true,
-
-	kind: 'write:notifications',
-
-	description: 'Mark a notification as read.',
-
-	errors: {
-		noSuchNotification: {
-			message: 'No such notification.',
-			code: 'NO_SUCH_NOTIFICATION',
-			id: 'efa929d5-05b5-47d1-beec-e6a4dbed011e',
-		},
-	},
-} as const;
-
-export const paramDef = {
-	oneOf: [
-		{
-			type: 'object',
-			properties: {
-				notificationId: { type: 'string', format: 'misskey:id' },
-			},
-			required: ['notificationId'],
-		},
-		{
-			type: 'object',
-			properties: {
-				notificationIds: {
-					type: 'array',
-					items: { type: 'string', format: 'misskey:id' },
-					maxItems: 100,
-				},
-			},
-			required: ['notificationIds'],
-		},
-	],
-} as const;
-
-// eslint-disable-next-line import/no-default-export
-@Injectable()
-export default class extends Endpoint<typeof meta, typeof paramDef> {
-	constructor(
-		private notificationService: NotificationService,
-	) {
-		super(meta, paramDef, async (ps, me) => {
-			if ('notificationId' in ps) return this.notificationService.readNotification(me.id, [ps.notificationId]);
-			return this.notificationService.readNotification(me.id, ps.notificationIds);
-		});
-	}
-}
diff --git a/packages/backend/src/server/api/stream/index.ts b/packages/backend/src/server/api/stream/index.ts
index 7c6eb9a20a..f1f8bfd3a2 100644
--- a/packages/backend/src/server/api/stream/index.ts
+++ b/packages/backend/src/server/api/stream/index.ts
@@ -195,8 +195,7 @@ export default class Connection {
 
 	@bindThis
 	private onReadNotification(payload: any) {
-		if (!payload.id) return;
-		this.notificationService.readNotification(this.user!.id, [payload.id]);
+		this.notificationService.readAllNotification(this.user!.id);
 	}
 
 	/**
diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue
index b60967de02..efae687e66 100644
--- a/packages/frontend/src/components/MkNotification.vue
+++ b/packages/frontend/src/components/MkNotification.vue
@@ -83,7 +83,7 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, shallowRef, onMounted, onUnmounted, watch } from 'vue';
+import { ref, shallowRef } from 'vue';
 import * as misskey from 'misskey-js';
 import MkReactionIcon from '@/components/MkReactionIcon.vue';
 import MkFollowButton from '@/components/MkFollowButton.vue';
@@ -94,7 +94,6 @@ import { notePage } from '@/filters/note';
 import { userPage } from '@/filters/user';
 import { i18n } from '@/i18n';
 import * as os from '@/os';
-import { stream } from '@/stream';
 import { useTooltip } from '@/scripts/use-tooltip';
 import { $i } from '@/account';
 
@@ -110,35 +109,6 @@ const props = withDefaults(defineProps<{
 const elRef = shallowRef<HTMLElement>(null);
 const reactionRef = ref(null);
 
-let readObserver: IntersectionObserver | undefined;
-let connection;
-
-onMounted(() => {
-	if (!props.notification.isRead) {
-		readObserver = new IntersectionObserver((entries, observer) => {
-			if (!entries.some(entry => entry.isIntersecting)) return;
-			stream.send('readNotification', {
-				id: props.notification.id,
-			});
-			observer.disconnect();
-		});
-
-		readObserver.observe(elRef.value);
-
-		connection = stream.useChannel('main');
-		connection.on('readAllNotifications', () => readObserver.disconnect());
-
-		watch(props.notification.isRead, () => {
-			readObserver.disconnect();
-		});
-	}
-});
-
-onUnmounted(() => {
-	if (readObserver) readObserver.disconnect();
-	if (connection) connection.dispose();
-});
-
 const followRequestDone = ref(false);
 
 const acceptFollowRequest = () => {
diff --git a/packages/frontend/src/components/MkNotifications.vue b/packages/frontend/src/components/MkNotifications.vue
index 874f1f90ea..1aea95fe0e 100644
--- a/packages/frontend/src/components/MkNotifications.vue
+++ b/packages/frontend/src/components/MkNotifications.vue
@@ -29,7 +29,6 @@ import { notificationTypes } from '@/const';
 
 const props = defineProps<{
 	includeTypes?: typeof notificationTypes[number][];
-	unreadOnly?: boolean;
 }>();
 
 const pagingComponent = shallowRef<InstanceType<typeof MkPagination>>();
@@ -40,23 +39,17 @@ const pagination: Paging = {
 	params: computed(() => ({
 		includeTypes: props.includeTypes ?? undefined,
 		excludeTypes: props.includeTypes ? undefined : $i.mutingNotificationTypes,
-		unreadOnly: props.unreadOnly,
 	})),
 };
 
 const onNotification = (notification) => {
 	const isMuted = props.includeTypes ? !props.includeTypes.includes(notification.type) : $i.mutingNotificationTypes.includes(notification.type);
 	if (isMuted || document.visibilityState === 'visible') {
-		stream.send('readNotification', {
-			id: notification.id,
-		});
+		stream.send('readNotification');
 	}
 
 	if (!isMuted) {
-		pagingComponent.value.prepend({
-			...notification,
-			isRead: document.visibilityState === 'visible',
-		});
+		pagingComponent.value.prepend(notification);
 	}
 };
 
@@ -65,30 +58,6 @@ let connection;
 onMounted(() => {
 	connection = stream.useChannel('main');
 	connection.on('notification', onNotification);
-	connection.on('readAllNotifications', () => {
-		if (pagingComponent.value) {
-			for (const item of pagingComponent.value.queue) {
-				item.isRead = true;
-			}
-			for (const item of pagingComponent.value.items) {
-				item.isRead = true;
-			}
-		}
-	});
-	connection.on('readNotifications', notificationIds => {
-		if (pagingComponent.value) {
-			for (let i = 0; i < pagingComponent.value.queue.length; i++) {
-				if (notificationIds.includes(pagingComponent.value.queue[i].id)) {
-					pagingComponent.value.queue[i].isRead = true;
-				}
-			}
-			for (let i = 0; i < (pagingComponent.value.items || []).length; i++) {
-				if (notificationIds.includes(pagingComponent.value.items[i].id)) {
-					pagingComponent.value.items[i].isRead = true;
-				}
-			}
-		}
-	});
 });
 
 onUnmounted(() => {
diff --git a/packages/frontend/src/pages/notifications.vue b/packages/frontend/src/pages/notifications.vue
index a5c7cdaa71..1789606cd8 100644
--- a/packages/frontend/src/pages/notifications.vue
+++ b/packages/frontend/src/pages/notifications.vue
@@ -2,8 +2,8 @@
 <MkStickyContainer>
 	<template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template>
 	<MkSpacer :content-max="800">
-		<div v-if="tab === 'all' || tab === 'unread'">
-			<XNotifications class="notifications" :include-types="includeTypes" :unread-only="unreadOnly"/>
+		<div v-if="tab === 'all'">
+			<XNotifications class="notifications" :include-types="includeTypes"/>
 		</div>
 		<div v-else-if="tab === 'mentions'">
 			<MkNotes :pagination="mentionsPagination"/>
@@ -26,7 +26,6 @@ import { notificationTypes } from '@/const';
 
 let tab = $ref('all');
 let includeTypes = $ref<string[] | null>(null);
-let unreadOnly = $computed(() => tab === 'unread');
 
 const mentionsPagination = {
 	endpoint: 'notes/mentions' as const,
@@ -76,10 +75,6 @@ const headerTabs = $computed(() => [{
 	key: 'all',
 	title: i18n.ts.all,
 	icon: 'ti ti-point',
-}, {
-	key: 'unread',
-	title: i18n.ts.unread,
-	icon: 'ti ti-loader',
 }, {
 	key: 'mentions',
 	title: i18n.ts.mentions,
diff --git a/packages/frontend/src/ui/_common_/common.vue b/packages/frontend/src/ui/_common_/common.vue
index e1561cb396..5a32c076a4 100644
--- a/packages/frontend/src/ui/_common_/common.vue
+++ b/packages/frontend/src/ui/_common_/common.vue
@@ -53,9 +53,7 @@ function onNotification(notification) {
 	if ($i.mutingNotificationTypes.includes(notification.type)) return;
 
 	if (document.visibilityState === 'visible') {
-		stream.send('readNotification', {
-			id: notification.id,
-		});
+		stream.send('readNotification');
 
 		notifications.unshift(notification);
 		window.setTimeout(() => {
diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts
index 8659261949..d72e163cd4 100644
--- a/packages/misskey-js/src/api.types.ts
+++ b/packages/misskey-js/src/api.types.ts
@@ -515,7 +515,6 @@ export type Endpoints = {
 	// notifications
 	'notifications/create': { req: { body: string; header?: string | null; icon?: string | null; }; res: null; };
 	'notifications/mark-all-as-read': { req: NoParams; res: null; };
-	'notifications/read': { req: { notificationId: Notification['id']; }; res: null; };
 
 	// page-push
 	'page-push': { req: { pageId: Page['id']; event: string; var?: any; }; res: null; };
diff --git a/packages/sw/src/scripts/notification-read.ts b/packages/sw/src/scripts/notification-read.ts
deleted file mode 100644
index 3b1dde0cd5..0000000000
--- a/packages/sw/src/scripts/notification-read.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { get } from 'idb-keyval';
-import { pushNotificationDataMap } from '@/types';
-import { api } from '@/scripts/operations';
-
-type Accounts = {
-	[x: string]: {
-		queue: string[],
-		timeout: number | null
-	}
-};
-
-class SwNotificationReadManager {
-	private accounts: Accounts = {};
-
-	public async construct() {
-		const accounts = await get('accounts');
-		if (!accounts) Error('Accounts are not recorded');
-
-		this.accounts = accounts.reduce((acc, e) => {
-			acc[e.id] = {
-				queue: [],
-				timeout: null
-			};
-			return acc;
-		}, {} as Accounts);
-
-		return this;
-	}
-
-	// プッシュ通知の既読をサーバーに送信
-	public async read(data: pushNotificationDataMap[keyof pushNotificationDataMap]) {
-		if (data.type !== 'notification' || !(data.userId in this.accounts)) return;
-
-		const account = this.accounts[data.userId];
-
-		account.queue.push(data.body.id as string);
-
-		if (account.queue.length >= 20) {
-			if (account.timeout) clearTimeout(account.timeout);
-			const notificationIds = account.queue;
-			account.queue = [];
-			await api('notifications/read', data.userId, { notificationIds });
-			return;
-		}
-
-		// 最後の呼び出しから200ms待ってまとめて処理する
-		if (account.timeout) clearTimeout(account.timeout);
-		account.timeout = setTimeout(() => {
-			account.timeout = null;
-
-			const notificationIds = account.queue;
-			account.queue = [];
-			api('notifications/read', data.userId, { notificationIds });
-		}, 200);
-	}
-}
-
-export const swNotificationRead = (new SwNotificationReadManager()).construct();
diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts
index 6f4c487354..9ceef890dd 100644
--- a/packages/sw/src/sw.ts
+++ b/packages/sw/src/sw.ts
@@ -1,6 +1,6 @@
 import { createEmptyNotification, createNotification } from '@/scripts/create-notification';
 import { swLang } from '@/scripts/lang';
-import { swNotificationRead } from '@/scripts/notification-read';
+import { api } from '@/scripts/operations';
 import { pushNotificationDataMap } from '@/types';
 import * as swos from '@/scripts/operations';
 import { acct as getAcct } from '@/filters/user';
@@ -54,30 +54,6 @@ globalThis.addEventListener('push', ev => {
 				if ((new Date()).getTime() - data.dateTime > 1000 * 60 * 60 * 24) break;
 
 				return createNotification(data);
-			case 'readAllNotifications':
-				for (const n of await globalThis.registration.getNotifications()) {
-					if (n?.data?.type === 'notification') n.close();
-				}
-				break;
-			case 'readAllAntennas':
-				for (const n of await globalThis.registration.getNotifications()) {
-					if (n?.data?.type === 'unreadAntennaNote') n.close();
-				}
-				break;
-			case 'readNotifications':
-				for (const n of await globalThis.registration.getNotifications()) {
-					if (data.body.notificationIds.includes(n.data.body.id)) {
-						n.close();
-					}
-				}
-				break;
-			case 'readAntenna':
-				for (const n of await globalThis.registration.getNotifications()) {
-					if (n?.data?.type === 'unreadAntennaNote' && data.body.antennaId === n.data.body.antenna.id) {
-						n.close();
-					}
-				}
-				break;
 		}
 
 		await createEmptyNotification();
@@ -154,7 +130,7 @@ globalThis.addEventListener('notificationclick', (ev: ServiceWorkerGlobalScopeEv
 			client.focus();
 		}
 		if (data.type === 'notification') {
-			swNotificationRead.then(that => that.read(data));
+			api('notifications/mark-all-as-read', data.userId);
 		}
 
 		notification.close();
@@ -165,7 +141,7 @@ globalThis.addEventListener('notificationclose', (ev: ServiceWorkerGlobalScopeEv
 	const data: pushNotificationDataMap[keyof pushNotificationDataMap] = ev.notification.data;
 
 	if (data.type === 'notification') {
-		swNotificationRead.then(that => that.read(data));
+		api('notifications/mark-all-as-read', data.userId);
 	}
 });
 
diff --git a/packages/sw/src/types.ts b/packages/sw/src/types.ts
index 5b53ddecac..176b181be0 100644
--- a/packages/sw/src/types.ts
+++ b/packages/sw/src/types.ts
@@ -17,10 +17,6 @@ type pushNotificationDataSourceMap = {
 		antenna: { id: string, name: string };
 		note: Misskey.entities.Note;
 	};
-	readNotifications: { notificationIds: string[] };
-	readAllNotifications: undefined;
-	readAntenna: { antennaId: string };
-	readAllAntennas: undefined;
 };
 
 export type pushNotificationData<K extends keyof pushNotificationDataSourceMap> = {

From 55652a7a189e237fc4f20d6029259ccbf0a55c1f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 4 Apr 2023 15:01:55 +0900
Subject: [PATCH 96/99] build(#10336): bump storybook to v7

---
 packages/frontend/package.json |   34 +-
 pnpm-lock.yaml                 | 1270 +++++++++++++++-----------------
 2 files changed, 610 insertions(+), 694 deletions(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index d97f1284c2..2d96d5514e 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -74,23 +74,23 @@
 		"vuedraggable": "next"
 	},
 	"devDependencies": {
-		"@storybook/addon-essentials": "7.0.0-rc.10",
-		"@storybook/addon-interactions": "7.0.0-rc.10",
-		"@storybook/addon-links": "7.0.0-rc.10",
-		"@storybook/addon-storysource": "7.0.0-rc.10",
-		"@storybook/addons": "7.0.0-rc.10",
-		"@storybook/blocks": "7.0.0-rc.10",
-		"@storybook/core-events": "7.0.0-rc.10",
-		"@storybook/jest": "0.0.10",
-		"@storybook/manager-api": "7.0.0-rc.10",
-		"@storybook/preview-api": "7.0.0-rc.10",
-		"@storybook/react": "7.0.0-rc.10",
-		"@storybook/react-vite": "7.0.0-rc.10",
+		"@storybook/addon-essentials": "7.0.2",
+		"@storybook/addon-interactions": "7.0.2",
+		"@storybook/addon-links": "7.0.2",
+		"@storybook/addon-storysource": "7.0.2",
+		"@storybook/addons": "7.0.2",
+		"@storybook/blocks": "7.0.2",
+		"@storybook/core-events": "7.0.2",
+		"@storybook/jest": "0.1.0",
+		"@storybook/manager-api": "7.0.2",
+		"@storybook/preview-api": "7.0.2",
+		"@storybook/react": "7.0.2",
+		"@storybook/react-vite": "7.0.2",
 		"@storybook/testing-library": "0.0.14-next.1",
-		"@storybook/theming": "7.0.0-rc.10",
-		"@storybook/types": "7.0.0-rc.10",
-		"@storybook/vue3": "7.0.0-rc.10",
-		"@storybook/vue3-vite": "7.0.0-rc.10",
+		"@storybook/theming": "7.0.2",
+		"@storybook/types": "7.0.2",
+		"@storybook/vue3": "7.0.2",
+		"@storybook/vue3-vite": "7.0.2",
 		"@testing-library/jest-dom": "^5.16.5",
 		"@testing-library/vue": "^6.6.1",
 		"@types/escape-regexp": "0.0.1",
@@ -128,7 +128,7 @@
 		"react": "^18.2.0",
 		"react-dom": "^18.2.0",
 		"start-server-and-test": "2.0.0",
-		"storybook": "7.0.0-rc.10",
+		"storybook": "7.0.2",
 		"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
 		"summaly": "github:misskey-dev/summaly",
 		"vitest": "^0.29.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5d08fb292d..a130bb12c6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -764,56 +764,56 @@ importers:
         version: 4.1.0(vue@3.2.47)
     devDependencies:
       '@storybook/addon-essentials':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-interactions':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-links':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-storysource':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addons':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/blocks':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/core-events':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10
+        specifier: 7.0.2
+        version: 7.0.2
       '@storybook/jest':
-        specifier: 0.0.10
-        version: 0.0.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 0.1.0
+        version: 0.1.0
       '@storybook/manager-api':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/preview-api':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10
+        specifier: 7.0.2
+        version: 7.0.2
       '@storybook/react':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
       '@storybook/react-vite':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)
       '@storybook/testing-library':
         specifier: 0.0.14-next.1
         version: 0.0.14-next.1
       '@storybook/theming':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/types':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10
+        specifier: 7.0.2
+        version: 7.0.2
       '@storybook/vue3':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(vue@3.2.47)
+        specifier: 7.0.2
+        version: 7.0.2(vue@3.2.47)
       '@storybook/vue3-vite':
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47)
+        specifier: 7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47)
       '@testing-library/jest-dom':
         specifier: ^5.16.5
         version: 5.16.5
@@ -926,11 +926,11 @@ importers:
         specifier: 2.0.0
         version: 2.0.0
       storybook:
-        specifier: 7.0.0-rc.10
-        version: 7.0.0-rc.10
+        specifier: 7.0.2
+        version: 7.0.2
       storybook-addon-misskey-theme:
         specifier: github:misskey-dev/storybook-addon-misskey-theme
-        version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0)
+        version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.2)(@storybook/components@7.0.2)(@storybook/core-events@7.0.2)(@storybook/manager-api@7.0.2)(@storybook/preview-api@7.0.2)(@storybook/theming@7.0.2)(@storybook/types@7.0.2)(react-dom@18.2.0)(react@18.2.0)
       summaly:
         specifier: github:misskey-dev/summaly
         version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992
@@ -2035,6 +2035,11 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
+  /@babel/compat-data@7.21.4:
+    resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
   /@babel/core@7.21.3:
     resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
     engines: {node: '>=6.9.0'}
@@ -2080,7 +2085,7 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-explode-assignable-expression': 7.18.6
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3):
@@ -2097,6 +2102,20 @@ packages:
       semver: 6.3.0
     dev: true
 
+  /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/compat-data': 7.21.4
+      '@babel/core': 7.21.3
+      '@babel/helper-validator-option': 7.21.0
+      browserslist: 4.21.5
+      lru-cache: 5.1.1
+      semver: 6.3.0
+    dev: true
+
   /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3):
     resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
     engines: {node: '>=6.9.0'}
@@ -2133,7 +2152,7 @@ packages:
       '@babel/core': ^7.4.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       debug: 4.3.4(supports-color@8.1.1)
       lodash.debounce: 4.0.8
@@ -2152,7 +2171,7 @@ packages:
     resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-function-name@7.21.0:
@@ -2160,21 +2179,21 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-hoist-variables@7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-member-expression-to-functions@7.21.0:
     resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-module-imports@7.18.6:
@@ -2204,7 +2223,7 @@ packages:
     resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-plugin-utils@7.20.2:
@@ -2222,7 +2241,7 @@ packages:
       '@babel/helper-annotate-as-pure': 7.18.6
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-wrap-function': 7.20.5
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -2236,7 +2255,7 @@ packages:
       '@babel/helper-optimise-call-expression': 7.18.6
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -2245,21 +2264,21 @@ packages:
     resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-skip-transparent-expression-wrappers@7.20.0:
     resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-split-export-declaration@7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-string-parser@7.19.4:
@@ -2282,7 +2301,7 @@ packages:
       '@babel/helper-function-name': 7.21.0
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -2312,7 +2331,7 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/parser@7.21.3:
     resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
@@ -2457,9 +2476,9 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.20.10
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
       '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
@@ -2766,7 +2785,7 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-optimise-call-expression': 7.18.6
@@ -2859,7 +2878,7 @@ packages:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
@@ -3221,6 +3240,92 @@ packages:
       - supports-color
     dev: true
 
+  /@babel/preset-env@7.21.4(@babel/core@7.21.3):
+    resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.21.4
+      '@babel/core': 7.21.3
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
+      '@babel/helper-plugin-utils': 7.20.2
+      '@babel/helper-validator-option': 7.21.0
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
+      '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3)
+      '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3)
+      '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3)
+      '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-modules': 0.1.5(@babel/core@7.21.3)
+      '@babel/types': 7.21.4
+      babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
+      babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
+      babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
+      core-js-compat: 3.29.1
+      semver: 6.3.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/preset-flow@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==}
     engines: {node: '>=6.9.0'}
@@ -3242,7 +3347,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
       '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       esutils: 2.0.3
     dev: true
 
@@ -3319,6 +3424,14 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
+  /@babel/types@7.21.4:
+    resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.19.4
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
   /@base2/pretty-print-object@1.0.1:
     resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
     dev: true
@@ -4774,8 +4887,8 @@ packages:
     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
     dev: false
 
-  /@storybook/addon-actions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-n7QVyN4qaMMjuu2HyT94VO8DklCgQLqw3tHVMZgSOUEtK5JhS5+OqPCWt1juwQjNyQiDqjrVwrkbJNbuMld4IA==}
+  /@storybook/addon-actions@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-rcj39u9MrmzsrDWYt1zsoVxrogZ1Amrv9xkEofEY/QKUr2R3xpHhTALveY9BKIlG1GoE8zLlLoP2k4nz3sNNwQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4785,14 +4898,14 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       dequal: 2.0.3
       lodash: 4.17.21
       polished: 4.2.2
@@ -4805,8 +4918,8 @@ packages:
       uuid-browser: 3.1.0
     dev: true
 
-  /@storybook/addon-backgrounds@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-7hW961WzTV29jbVM051IzN7pNYTRrk5njDMV6eMsKD7KyzGDiqBAX3QuXnv95s8MLWUKSee7UZa4DUgQYfjxRg==}
+  /@storybook/addon-backgrounds@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-yRNHQ4PPRJ+HIORQPhDGxn5xolw1xW0ByQZoNRpMD+AMEyfUNFdWbCsRQAOWjNhawxVMHM7EeA2Exrb41zhEjA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4816,22 +4929,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       memoizerific: 1.11.3
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-controls@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-25lH3wRmCHtW4N9PN9v12XsCttpi8rU80ZL+qzlAvak/bmdT7xXidNi9MTZHDZxbqDeBcs8N49wbymqixvEfMQ==}
+  /@storybook/addon-controls@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-dMpRtj5cmfC9vEMve5ncvbWCEC+WD9YuzJ+grdc48E/Hd//p+O2FE6klSkrz5FAjrc+rHINixdyssekpEL6nYQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4841,15 +4954,15 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/blocks': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.2
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       lodash: 4.17.21
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -4858,8 +4971,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-docs@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-TT85AUqPRqH9Ry9Y80aVI+GoRCyLYC4xg0hWpNfhP3vdez4c2cpTHVGKY1aUIes0blj/iLd5eWv0IpAO9Jmg9g==}
+  /@storybook/addon-docs@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-q3rDWoZEym6Lkmhqc/HBNfLDAmTY8l0WINGUZo/nF98eP5iu4B7Nk7V6BRGYGQt6Y6ZyIQ8WKH0e/eJww2zIog==}
     peerDependencies:
       '@storybook/mdx1-csf': '>=1.0.0-0'
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4872,19 +4985,19 @@ packages:
       '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3)
       '@jest/transform': 29.5.0
       '@mdx-js/react': 2.3.0(react@18.2.0)
-      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/csf-plugin': 7.0.0-rc.10
-      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/blocks': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/csf-plugin': 7.0.2
+      '@storybook/csf-tools': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/mdx2-csf': 1.0.0-next.7
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/postinstall': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/mdx2-csf': 1.0.0
+      '@storybook/node-logger': 7.0.2
+      '@storybook/postinstall': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/react-dom-shim': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       fs-extra: 11.1.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -4895,25 +5008,25 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-essentials@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-a4Tnfu+v1yneou2oYrDikAmNHsv4z7jAjyS4npuJTEW2a1WW+WPw8340BfZBI/y89nFYM6zyZGqy26Gie/QqVA==}
+  /@storybook/addon-essentials@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-LAsWsXa/Pp2B4Ve2WVgc990FtsiHpFDRsq7S3V7xRrZP8DYRbtJIVdszPMDS5uKC+yzbswFEXz08lqbGvq8zgQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/addon-actions': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-backgrounds': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-controls': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-docs': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-highlight': 7.0.0-rc.10
-      '@storybook/addon-measure': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-outline': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-toolbars': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/addon-viewport': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/addon-actions': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-backgrounds': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-controls': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-docs': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-highlight': 7.0.2
+      '@storybook/addon-measure': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-outline': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-toolbars': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/addon-viewport': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.2
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
@@ -4922,16 +5035,16 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-highlight@7.0.0-rc.10:
-    resolution: {integrity: sha512-AvCElbBqs2nS6W5wh79zkeRINEAL3LH3RFcT3oLFwSR5sI3NiWAuADN37XK+HN2RGf6E6Z7/ue3EcqELZAgCLw==}
+  /@storybook/addon-highlight@7.0.2:
+    resolution: {integrity: sha512-9BkL1OOanguuy73S6nLK0isUb045tOkFONd/PQldOJ0PV3agCvKxKHyzlBz7Hsba8KZhY5jQs+nVW2NiREyGYg==}
     dependencies:
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.2
     dev: true
 
-  /@storybook/addon-interactions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-6MdBhlZ+vmS7tPoHPZn8hB5BJOw38ii670TvTy005UGj92+VeQRqlf9gVT5X7vnynmq6h/sj8MgSkSuqxL+3XA==}
+  /@storybook/addon-interactions@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-vPWnyGND4s9nVp+U21N/jE00dCRsHcKU68SoL4OiIZioTTRbLvrTG9eAdBkZXsVPpFHq8gndma3nXfplOSSckg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4941,16 +5054,16 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-common': 7.0.2
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/instrumenter': 7.0.0-rc.10
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/instrumenter': 7.0.2
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       jest-mock: 27.5.1
       polished: 4.2.2
       react: 18.2.0
@@ -4960,8 +5073,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-links@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-Xgrm7o4RAqdnLwh/wGKyk7tL12eqQDLiyR2uahQrNUYG+MFz9hJCHzbBs/pVcOW2gdHRmdYMD6ZrZsk4/NehLA==}
+  /@storybook/addon-links@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-lPtfy2MqrcI9YjupBM2eRKGPdFKVPCz7WgO/JQQakGugORJTEGCyJrNJNtWY9jDenv8ynLZ40OxtPBZi54Sr6Q==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4971,22 +5084,22 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/router': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       prop-types: 15.8.1
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-measure@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-GRjJPmjOcG0vLfJ5HvCoXq6GTjgR/Yxe8IXiC84aoUcwFTzMBHOb8J7doAY30SOqfuqBM3MTmTi7PBCHhFY6Cw==}
+  /@storybook/addon-measure@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-cf/d5MXpHAjyUiDIVfc8pLn79CPHgnryDmNNlSiP2zEFKcivrRWiu8Rmrad8pGqLkuAh+PXLKCGn9uiqDvg7QQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4996,19 +5109,19 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-outline@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-Om+MFhkROJRtxHlVJ+DpLg+ROzdtFyNtWXgkQVH9YAo44SBkrBJbAAUj+0XmeWxr2gO3HEdLhRS4whoWBKAVbg==}
+  /@storybook/addon-outline@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-thVISO4NM22xlETisBvAPvz2yFD3qLGOjgzBmj8l8r9Rv0IEdwdPrwm5j0WTv8OtbhC4A8lPpvMsn5FhY5mDXg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5018,20 +5131,20 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-storysource@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-wJnPzQU5ZMxL9aK+gfi155pTXdXqSnWIMoVWx0HQXXhhXJNbT5l+y1T+VEC/8hcgqcj709MZAvGl48xmgL/qlQ==}
+  /@storybook/addon-storysource@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-0F47HIc97bNKSDTNnUy0M4ch/tNziWwnw+EDRCNoE6kOMJ9uF6caiTk4QCahCRoA/iNbBWCn91mnU4ZRp22Wiw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5041,13 +5154,13 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/source-loader': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/router': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/source-loader': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
       estraverse: 5.3.0
       prop-types: 15.8.1
       react: 18.2.0
@@ -5055,8 +5168,8 @@ packages:
       react-syntax-highlighter: 15.5.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-toolbars@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-zpCFJKO5TOfEcVPRWj9oyftgsONJltFndLVtuWwVGaILcL0bGSahFtVhtwen3geCm+mi3AISgmsbCz5ABbsPyg==}
+  /@storybook/addon-toolbars@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-tAxZ2+nUYsJdT1sx3BrmoMAZFM19+OzWJY6qSnbEq5zoRgvGZaXGR6tLMKydDoHQBU9Ta9YHGo7N7u7h1C23yg==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5066,17 +5179,17 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addon-viewport@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-aAEp2TEFSTjVmAfpWll3Kb0/tMFezWVEGI3WKlx2M5ladEC+jDygZrGovb4BpnknDQaHkrN0s9dsjUWTLmslww==}
+  /@storybook/addon-viewport@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-TaHJWIIazPM/TerRbka9RqjMPNpwaRsGRdVRBtVoVosy1FzsEjAdQSO7RBMe4G03m5CacSqdsDiJCblI2AXaew==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5086,97 +5199,49 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
       memoizerific: 1.11.3
       prop-types: 15.8.1
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/addons@6.5.16(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==}
+  /@storybook/addons@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-2+amBRcmJ5kD2ZNeftiyp9Or9Kd7oVjwycZZX5SBB4EFQvRNKyM0w4GVgwbeJAdx5uuw7tJFtQgnakb39mxAgA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/api': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/channels': 6.5.16
-      '@storybook/client-logger': 6.5.16
-      '@storybook/core-events': 6.5.16
-      '@storybook/csf': 0.0.2--canary.4566f4d.1
-      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      '@types/webpack-env': 1.18.0
-      core-js: 3.29.1
-      global: 4.4.0
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      regenerator-runtime: 0.13.11
-    dev: true
-
-  /@storybook/addons@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-3funGKp6w/uqrTl/0Vsz/oTMmOziSl+JEotjf0G5SBJfaa6gBaz2feddUcRl47I9MNfRYRV01m5a4bCR1QJnwQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/api@6.5.16(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==}
+  /@storybook/blocks@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-JzHmU8jZLzeQ6bunzci8j/2Ji18GBTyhrPFLk5RjEbMNGWpGjvER/yR127tZOdbPguVNr4iVbRfGzd1wGHlrzA==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 6.5.16
-      '@storybook/client-logger': 6.5.16
-      '@storybook/core-events': 6.5.16
-      '@storybook/csf': 0.0.2--canary.4566f4d.1
-      '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/semver': 7.3.2
-      '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      core-js: 3.29.1
-      fast-deep-equal: 3.1.3
-      global: 4.4.0
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      regenerator-runtime: 0.13.11
-      store2: 2.14.2
-      telejson: 6.0.8
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
-    dev: true
-
-  /@storybook/blocks@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-E+v4EjHaSaHbFK2hiFcBW3X2Yz8+xANmioT94jr2AxvywAELMh5eOLByFwVdNK7e9umv7Qo2/icNvAzpaJdmrw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/docs-tools': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       '@types/lodash': 4.14.191
       color-convert: 2.0.1
       dequal: 2.0.3
@@ -5194,13 +5259,13 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-manager@7.0.0-rc.10:
-    resolution: {integrity: sha512-uAlbCZcbtVNQOSqzeddGG6Xdrz6cNmXbrV9aN1Jbua7HPAvq/p4SenJuf9YQLt7i2KAkMsNLcfM5kf9HHyPzIw==}
+  /@storybook/builder-manager@7.0.2:
+    resolution: {integrity: sha512-Oej/n8D7eaWgmWF7nN2hXLRM53lcYOdh6umSN8Mh/LcYUfxB+dvUBFzUjoLE0xjhW6xRinrKrENT5LcP/f/HBQ==}
     dependencies:
       '@fal-works/esbuild-plugin-global-externals': 2.1.2
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/manager': 7.0.0-rc.10
-      '@storybook/node-logger': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.2
+      '@storybook/manager': 7.0.2
+      '@storybook/node-logger': 7.0.2
       '@types/ejs': 3.1.2
       '@types/find-cache-dir': 3.2.1
       '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.14)
@@ -5217,8 +5282,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-vite@7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1):
-    resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==}
+  /@storybook/builder-vite@7.0.2(typescript@5.0.2)(vite@4.2.1):
+    resolution: {integrity: sha512-G6CD2Gf2zwzRslvNvqgz4FeADVEA9XA4Mw6+NM6Twc+Wy/Ah482dvHS9ApSgirtGyBKjOfdHn1xQT4Z+kzbJnw==}
     peerDependencies:
       '@preact/preset-vite': '*'
       '@storybook/mdx1-csf': '>=1.0.0-next.1'
@@ -5235,16 +5300,16 @@ packages:
       vite-plugin-glimmerx:
         optional: true
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.10
-      '@storybook/channel-websocket': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/csf-plugin': 7.0.0-rc.10
-      '@storybook/mdx2-csf': 1.0.0-next.7
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/preview': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/channel-postmessage': 7.0.2
+      '@storybook/channel-websocket': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/csf-plugin': 7.0.2
+      '@storybook/mdx2-csf': 1.0.0
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       browser-assert: 1.2.1
       es-module-lexer: 0.9.3
       express: 4.18.2
@@ -5252,8 +5317,8 @@ packages:
       glob: 8.1.0
       glob-promise: 6.0.2(glob@8.1.0)
       magic-string: 0.27.0
-      remark-external-links: 9.0.1
-      remark-slug: 7.0.1
+      remark-external-links: 8.0.0
+      remark-slug: 6.1.0
       rollup: 3.20.2
       typescript: 5.0.2
       vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0)
@@ -5272,56 +5337,63 @@ packages:
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-postmessage@7.0.0-rc.10:
-    resolution: {integrity: sha512-U7jx10NwqXiQRMnsY+Dwl8Lkc7a1zAA6fHHDMxxa1AKE7ISDoRi4dIrWs5BmOgi2IdFo52bexIE9RTOgPTuUew==}
+  /@storybook/channel-postmessage@7.0.1:
+    resolution: {integrity: sha512-wcJfnq49PwqKhfMJciDCJ1P5YcpN43gj9MLXIEprq7escegiM4YHBeOHCsu/YZnaE7pLnYRSxqCoy/MpWZPbIQ==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/channels': 7.0.1
+      '@storybook/client-logger': 7.0.1
+      '@storybook/core-events': 7.0.1
       '@storybook/global': 5.0.0
       qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-websocket@7.0.0-rc.10:
-    resolution: {integrity: sha512-18xZYdV3CqiGpxIF8os5Vm+T76p+5lx0t8fRTpiPuOfuPF72QYdqmUuXF/tLH4hzj/qwPp56y6Nb7My7pcGPug==}
+  /@storybook/channel-postmessage@7.0.2:
+    resolution: {integrity: sha512-SZ/KqnZcx10W9hJbrzBKcP9dmgaeTaXugUhcgw1IkmjKWdsKazqFZCPwQWZZKAmhO4wYbyYOhkz3wfSIeB4mFw==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
+      qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channels@6.5.16:
-    resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==}
+  /@storybook/channel-websocket@7.0.2:
+    resolution: {integrity: sha512-YU3lFId6Nsi75ddA+3qfbnLfNUPswboYyx+SALhaLuXqz7zqfzX4ezMgxeS/h0gRlUJ7nf2/yJ5qie/kZaizjw==}
     dependencies:
-      core-js: 3.29.1
-      ts-dedent: 2.2.0
-      util-deprecate: 1.0.2
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/global': 5.0.0
+      telejson: 7.0.4
     dev: true
 
   /@storybook/channels@7.0.0:
     resolution: {integrity: sha512-adPIkvL4q37dGTWCpSzV8ETLdkxsg7BAgzeT9pustZJjRIZqAHGUAm7krDtGT7jbV4dU0Zw0VpUrnmyfxIkOKQ==}
     dev: true
 
-  /@storybook/channels@7.0.0-rc.10:
-    resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==}
+  /@storybook/channels@7.0.1:
+    resolution: {integrity: sha512-Hm/vrCkpxvZRIIjs9vwLDvK4TVINj8E3xRBPq29qUs/kdpf3f8+NiYd/gRXN+JNH7Ov1NC4L5khlR1rXh5AUNQ==}
     dev: true
 
-  /@storybook/cli@7.0.0-rc.10:
-    resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==}
+  /@storybook/channels@7.0.2:
+    resolution: {integrity: sha512-qkI8mFy9c8mxN2f01etayKhCaauL6RAsxRzbX1/pKj6UqhHWqqUbtHwymrv4hG5qDYjV1e9pd7ae5eNF8Kui0g==}
+    dev: true
+
+  /@storybook/cli@7.0.2:
+    resolution: {integrity: sha512-xMM2QdXNGg09wuXzAGroKrbsnaHSFPmtmefX1XGALhHuKVwxOoC2apWMpek6gY/9vh5EIRTog2Dvfd2BzNrT6Q==}
     hasBin: true
     dependencies:
       '@babel/core': 7.21.3
       '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
       '@ndelangen/get-tarball': 3.0.7
-      '@storybook/codemod': 7.0.0-rc.10
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/core-server': 7.0.0-rc.10
-      '@storybook/csf-tools': 7.0.0-rc.10
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/telemetry': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/codemod': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/core-server': 7.0.2
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/telemetry': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/semver': 7.3.13
       boxen: 5.1.2
       chalk: 4.1.2
@@ -5357,38 +5429,37 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/client-logger@6.5.16:
-    resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==}
-    dependencies:
-      core-js: 3.29.1
-      global: 4.4.0
-    dev: true
-
   /@storybook/client-logger@7.0.0:
     resolution: {integrity: sha512-wRZZiPta37DFc8SVZ8Q3ZqyTrs5qgO6bcCuVDRLQAcO0Oz4xKEVPEVfVVxSPZU/+p2ypqdBBCP2pdL/Jy86AJg==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/client-logger@7.0.0-rc.10:
-    resolution: {integrity: sha512-K+3SySLua2tcALuk0Mco/o37bX4CeugA9aQClqDyXmVB+Fh6rg8A+uwiraDPooeq+P8AtMxuFc/dKwRejGicLg==}
+  /@storybook/client-logger@7.0.1:
+    resolution: {integrity: sha512-yR8tGywLSTY/cmCae9yCmo6CzU+F4QAzA2RqgKRHpM44LHjsD1rG3wQxnBa5cZs7/zopMKYK1Bt7xhp/dSS56g==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/codemod@7.0.0-rc.10:
-    resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==}
+  /@storybook/client-logger@7.0.2:
+    resolution: {integrity: sha512-rv7W2BhzIQHbFpUM5/CP/acS6T5lTmaxT0MbZ9n+9h++9QQU/cFOdkZgSUbLVAb1AeUGoLsk0HYzcqPpV35Xsw==}
+    dependencies:
+      '@storybook/global': 5.0.0
+    dev: true
+
+  /@storybook/codemod@7.0.2:
+    resolution: {integrity: sha512-D9PdByxJlFiaDJcLkM+RN1DHCj4VfQIlSZkADOcNtI4o9H064oiMloWDGZiR1i1FCYMSXuWmW6tMsuCVebA+Nw==}
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.21.4(@babel/core@7.21.3)
       '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/csf-tools': 7.0.0-rc.10
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/csf': 0.1.0
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/types': 7.0.2
       cross-spawn: 7.0.3
       globby: 11.1.0
-      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
+      jscodeshift: 0.14.0(@babel/preset-env@7.21.4)
       lodash: 4.17.21
       prettier: 2.8.4
       recast: 0.23.1
@@ -5396,17 +5467,17 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/components@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-iCJnu+cXAZ+4nz+3iObhH0LLB8PjakgvSeeG4puRQ8pYu2tTtJvEoQKjZQ1h7om6sv2sjHcnyz38Slb1CdmYQw==}
+  /@storybook/components@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Ee9pY6WlpricPUdYiyR0Ov8zgHkUt541yl1CZ6Ytaom2TA12cAnRjKewbLAgVPPhIE1LsMRhOPFYql0JMtnN4Q==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/client-logger': 7.0.2
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       memoizerific: 1.11.3
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -5414,18 +5485,18 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/core-client@7.0.0-rc.10:
-    resolution: {integrity: sha512-Z1zhznMt0NA9PNvBB/JplGAubZp3OszVseIYKj52WmPJHhD/VSlrCMGh9AVkSUsVunF4ciK92GvyMBPuYE/5LA==}
+  /@storybook/core-client@7.0.2:
+    resolution: {integrity: sha512-tr6Uv41YD2O0xiUrtgujiY1QxuznhbyUI0BRsSh49e8cx3QoW7FgPy7IVZHgb17DXKZ/wY/hgdyTTB87H6IbLA==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
     dev: true
 
-  /@storybook/core-common@7.0.0-rc.10:
-    resolution: {integrity: sha512-csHdcVH7+YMj13WQ68OU6+6H9eYF9Sjhj84RDvlOuwJ0reXftf0RLFJwNrazwLPi7Wypxd0K/MhiM/mZOoY2+A==}
+  /@storybook/core-common@7.0.2:
+    resolution: {integrity: sha512-DayFPTCj695tnEKLuDlogclBim8mzdrbj9U1xzFm23BUReheGSGdLl2zrb3mP1l9Zj4xJ/Ctst1KN9SFbW84vw==}
     dependencies:
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/node-logger': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/node': 16.18.16
       '@types/pretty-hrtime': 1.0.1
       chalk: 4.1.2
@@ -5447,37 +5518,35 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/core-events@6.5.16:
-    resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==}
-    dependencies:
-      core-js: 3.29.1
-    dev: true
-
   /@storybook/core-events@7.0.0:
     resolution: {integrity: sha512-pxzNmgEI1p90bHyAYABHDDtB2XM5pffq6CqIHboK6aSCux7Cdc16IjOYq6BJIhCKaaI+qQHaFLR4JfaFAsxwQQ==}
     dev: true
 
-  /@storybook/core-events@7.0.0-rc.10:
-    resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==}
+  /@storybook/core-events@7.0.1:
+    resolution: {integrity: sha512-Q3wBHoahO5d7Zm0S0zvXIqnG/fuf02RNMjTiAMYG55MlPZEmu3ll4VzDtroeku4Zwo9xbHGxgVQH5LFScQncEQ==}
     dev: true
 
-  /@storybook/core-server@7.0.0-rc.10:
-    resolution: {integrity: sha512-S+E8WRU4vik+lNbXukVSsZPrRgsujFpy9RvgLckH/QI4T2SYe94mAuKGVkW/720jBD4DNss+IUGQQvkafLPl5A==}
+  /@storybook/core-events@7.0.2:
+    resolution: {integrity: sha512-1DCHCwHRL3+rlvnVVc/BCfReP31XaT2WYgcLeGTmkX1E43Po1MkgcM7PnJPSaa9POvSqZ+6YLZv5Bs1SXbufow==}
+    dev: true
+
+  /@storybook/core-server@7.0.2:
+    resolution: {integrity: sha512-7ipGws8YffVaiwkc+D0+MfZc/Sy52aKenG3nDJdK4Ajmp5LPAlelb/sxIhfRvoHDbDsy2FQNz++Mb55Yh03KkA==}
     dependencies:
       '@aw-web-design/x-default-browser': 1.4.88
       '@discoveryjs/json-ext': 0.5.7
-      '@storybook/builder-manager': 7.0.0-rc.10
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/csf-tools': 7.0.0-rc.10
-      '@storybook/docs-mdx': 0.0.1-next.6
+      '@storybook/builder-manager': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/docs-mdx': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/manager': 7.0.0-rc.10
-      '@storybook/node-logger': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/telemetry': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/manager': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/telemetry': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/detect-port': 1.3.2
       '@types/node': 16.18.16
       '@types/node-fetch': 2.6.2
@@ -5513,24 +5582,24 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@storybook/csf-plugin@7.0.0-rc.10:
-    resolution: {integrity: sha512-+o8eQ1FFV7JXWh17pi5oFhuuSSpzsIP+5+/qY2ugE5JJBuVL8fM3jW0bFClZy9qpOeXYDgtfqMNlk9qSjvCQDw==}
+  /@storybook/csf-plugin@7.0.2:
+    resolution: {integrity: sha512-aGuo+G6G5IwSGkmc+OUA796sOfvJMaQj8QS/Zh5F0nL4ZlQvghHpXON8cRHHvmXHQqUo07KLiy7CZh2I2oq4iQ==}
     dependencies:
-      '@storybook/csf-tools': 7.0.0-rc.10
+      '@storybook/csf-tools': 7.0.2
       unplugin: 0.10.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/csf-tools@7.0.0-rc.10:
-    resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==}
+  /@storybook/csf-tools@7.0.2:
+    resolution: {integrity: sha512-sOp355yQSpYiMqNSopmFYWZkPPRJdGgy4tpxGGLxpOZMygK3j1wQ/WQtl2Z0h61KP0S0dl6hrs0pHQz3A/eVrw==}
     dependencies:
       '@babel/generator': 7.21.3
       '@babel/parser': 7.21.3
       '@babel/traverse': 7.21.3
       '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/csf': 0.1.0
+      '@storybook/types': 7.0.2
       fs-extra: 11.1.0
       recast: 0.23.1
       ts-dedent: 2.2.0
@@ -5538,29 +5607,29 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/csf@0.0.2--canary.4566f4d.1:
-    resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==}
-    dependencies:
-      lodash: 4.17.21
-    dev: true
-
   /@storybook/csf@0.0.2-next.11:
     resolution: {integrity: sha512-xGt0YSVxZb43sKmEf1GIQD8xEbo+c+S6khDEL7Qu/pYA0gh5z3WUuhOlovnelYj/YJod+XRsfVvk23AaRfUJ4Q==}
     dependencies:
       type-fest: 2.19.0
     dev: true
 
-  /@storybook/docs-mdx@0.0.1-next.6:
-    resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
+  /@storybook/csf@0.1.0:
+    resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==}
+    dependencies:
+      type-fest: 2.19.0
     dev: true
 
-  /@storybook/docs-tools@7.0.0-rc.10:
-    resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==}
+  /@storybook/docs-mdx@0.1.0:
+    resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==}
+    dev: true
+
+  /@storybook/docs-tools@7.0.2:
+    resolution: {integrity: sha512-w4D5BURrYjLbLGG9VKAaKU2dSdukszxRE3HWkJyhQU9R1JHvS3n8ntcMqYPqRfoHCOeBLBxP0edDYcAfzGNDYQ==}
     dependencies:
       '@babel/core': 7.21.3
-      '@storybook/core-common': 7.0.0-rc.10
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/core-common': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/doctrine': 0.0.3
       doctrine: 3.0.0
       lodash: 4.17.21
@@ -5578,19 +5647,6 @@ packages:
     resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
 
-  /@storybook/instrumenter@6.5.16(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-q8/GaBk8PA/cL7m5OW+ec5t63+Zja9YvYSPGXrYtW17koSv7OnNPmk6RvI7tIHHO0mODBYnaHjF4zQfEGoyR5Q==}
-    dependencies:
-      '@storybook/addons': 6.5.16(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/client-logger': 6.5.16
-      '@storybook/core-events': 6.5.16
-      core-js: 3.29.1
-      global: 4.4.0
-    transitivePeerDependencies:
-      - react
-      - react-dom
-    dev: true
-
   /@storybook/instrumenter@7.0.0:
     resolution: {integrity: sha512-A7jBrV7VM3OxRgall8rpjagy3VC78A/OV1g1aYVVLpAF/+Odj+MeHHF179+fR6JBLnBgukNfsG7/ZHHGs0gL5Q==}
     dependencies:
@@ -5601,42 +5657,49 @@ packages:
       '@storybook/preview-api': 7.0.0
     dev: true
 
-  /@storybook/instrumenter@7.0.0-rc.10:
-    resolution: {integrity: sha512-XaU6pxbcUnGgM7OywPs8E/k3H6Up/mf2kPfrHp9qhztx7ypKsKZi2lfxpOlmORy/s6JZl8kZATDyfgAGmVnbvg==}
+  /@storybook/instrumenter@7.0.1:
+    resolution: {integrity: sha512-QeM4Jkib9/2KwPiw1dPlvwJ6ld9AZCweeKAH+uQg2BiU4qPINg6SGFoa2SwLxviZZzsMjAU/XvUei1BW2QLaow==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
+      '@storybook/channels': 7.0.1
+      '@storybook/client-logger': 7.0.1
+      '@storybook/core-events': 7.0.1
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.1
     dev: true
 
-  /@storybook/jest@0.0.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==}
+  /@storybook/instrumenter@7.0.2:
+    resolution: {integrity: sha512-zr9/fuaYtGVUtcL8XgjA4Iq5jtzdcqQyOSH4XLXtz6JtSad3lkRagbJo2Vzbw7dO/4vzjfTMxEzvWjUuPxLOhA==}
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.2
+    dev: true
+
+  /@storybook/jest@0.1.0:
+    resolution: {integrity: sha512-TmybnEXlv5Fu2/Hq4nRj7alS9mw4CasLR0RDwaAzS+Vpvu1TC4+j9rh+b1BHtmWebbJh0JMT6mgzPqOyJdgtQA==}
     dependencies:
       '@storybook/expect': 27.5.2-0
-      '@storybook/instrumenter': 6.5.16(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/instrumenter': 7.0.0
       '@testing-library/jest-dom': 5.16.5
       jest-mock: 27.5.1
-    transitivePeerDependencies:
-      - react
-      - react-dom
     dev: true
 
-  /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-sWMifsQKFEEnjgrmi4cuRTXaX1KfmbIDqCaBg+9A8PeqKbk/sBaapk/istUj2vXz0tTxh7P5cosoXr8K2q5IhA==}
+  /@storybook/manager-api@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-PbLj9Rc5uCMPfMdaXv1wE3koA3+d0rmZ3BJI8jeq+mfZEvpvfI4OOpRioT1q04CkkVomFOVFTyO0Q/o6Rb5N7g==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/router': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       dequal: 2.0.3
       lodash: 4.17.21
       memoizerific: 1.11.3
@@ -5648,16 +5711,16 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/manager@7.0.0-rc.10:
-    resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==}
+  /@storybook/manager@7.0.2:
+    resolution: {integrity: sha512-jsFsFKG0rPNYfuRm/WSXGMBy8vnALyFWU330ObDmfU0JID3SeLlVqAOZT1GlwI6vupYpWodsN6qPZKRmC8onRw==}
     dev: true
 
-  /@storybook/mdx2-csf@1.0.0-next.7:
-    resolution: {integrity: sha512-xcQ8w4IecABAjsakaZTGiUEnEgFZzVKsMjqECjd+qdkwgD3R/kwrBdfyC15CLM5Ye1miPwYBIwJGeBXB9qxsZg==}
+  /@storybook/mdx2-csf@1.0.0:
+    resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==}
     dev: true
 
-  /@storybook/node-logger@7.0.0-rc.10:
-    resolution: {integrity: sha512-C+NEudQz8t0VS5U5bOUbIXtz/FL8y2Za/qcG7hI7fa9NglQvtdBYpNzwg8M4YSOUvOoa3eEqoD26tnjAkEfEQQ==}
+  /@storybook/node-logger@7.0.2:
+    resolution: {integrity: sha512-UENpXxB1yDqP7JXaODJo+pbGt5y3NFBNurBr4+pI4bMAC4ARjpgRE4wp6fxUKFPu9MAR10oCdcLEHkaVUAjYRg==}
     dependencies:
       '@types/npmlog': 4.1.4
       chalk: 4.1.2
@@ -5665,8 +5728,8 @@ packages:
       pretty-hrtime: 1.0.3
     dev: true
 
-  /@storybook/postinstall@7.0.0-rc.10:
-    resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==}
+  /@storybook/postinstall@7.0.2:
+    resolution: {integrity: sha512-Hhiu3+N3ZDcbrhOCBJTDJbn/mC4l0v3ziyAP3yalq/2ZR9R5kfsEHHakKmswsKKV+ey0gNGijFTy3soU5oSs+A==}
     dev: true
 
   /@storybook/preview-api@7.0.0:
@@ -5689,16 +5752,16 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview-api@7.0.0-rc.10:
-    resolution: {integrity: sha512-3oBm6Che7ctbOLS3TTbuySbLdxA1xqLDgn8AaOadCd4SmCfhxZNor35RO1TlN8S8pQPsGlT9UBWB4xKxhq0e2A==}
+  /@storybook/preview-api@7.0.1:
+    resolution: {integrity: sha512-7MIDCND5plj1RSuCUnRBlJGkH4lBr3j8fIqqmzkoBaw7sMggtWlgGg6lF9j/OOzirpQeDKf4pjKhF0DdL6UAWw==}
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.10
-      '@storybook/channels': 7.0.0-rc.10
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/channel-postmessage': 7.0.1
+      '@storybook/channels': 7.0.1
+      '@storybook/client-logger': 7.0.1
+      '@storybook/core-events': 7.0.1
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/types': 7.0.1
       '@types/qs': 6.9.7
       dequal: 2.0.3
       lodash: 4.17.21
@@ -5709,12 +5772,32 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview@7.0.0-rc.10:
-    resolution: {integrity: sha512-885uU20XL54s31lAyIu5MaiD4t23gJ0X/JEMz2/LTvfluYDtQg66gXhMibKqEPgMHcPOND5ZrGoYPdaLDG20Dw==}
+  /@storybook/preview-api@7.0.2:
+    resolution: {integrity: sha512-QAlJM/r92+dQe/kB7MTTR9b/1mt9UJjxNjazGdEWipA/nw23kOF3o/hBcvKwBYkit4zGYsX70H+vuzW8hCo/lA==}
+    dependencies:
+      '@storybook/channel-postmessage': 7.0.2
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/global': 5.0.0
+      '@storybook/types': 7.0.2
+      '@types/qs': 6.9.7
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      synchronous-promise: 2.0.17
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/react-dom-shim@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-oRmjN4HLo/gumufM6xrCYMncggbsNQ2UC+0Wju2zs86v6mLmoG8CCVnTE2nyUBiy5IDZ464nBhdGYkkuUEYzrg==}
+  /@storybook/preview@7.0.2:
+    resolution: {integrity: sha512-U7MZkDT9bBq7HggLAXmTO9gI4eqhYs26fZS0L6iTE/PCX4Wg2TJBJSq2X8jhDXRqJFOt8SrQ756+V5Vtwrh4Og==}
+    dev: true
+
+  /@storybook/react-dom-shim@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-fMl0aV7mJ3wyQKvt6z+rZuiIiSd9YinS77IJ1ETHqVZ4SxWriOS0GFKP6sZflrlpShoZBh+zl1lDPG7ZZdrQGw==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5723,8 +5806,8 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1):
-    resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==}
+  /@storybook/react-vite@7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1):
+    resolution: {integrity: sha512-1bDrmGo6imxBzZKJJ+SEHPuDn474JY3Yatm0cPaNVtlYhbnbiTPa3PxhI4U3233l4Qsc6DXNLKvi++j/knXDCw==}
     engines: {node: '>=16'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5733,8 +5816,8 @@ packages:
     dependencies:
       '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.0.2)(vite@4.2.1)
       '@rollup/pluginutils': 4.2.1
-      '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1)
-      '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
+      '@storybook/builder-vite': 7.0.2(typescript@5.0.2)(vite@4.2.1)
+      '@storybook/react': 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)
       '@vitejs/plugin-react': 3.1.0(vite@4.2.1)
       ast-types: 0.14.2
       magic-string: 0.27.0
@@ -5750,8 +5833,8 @@ packages:
       - vite-plugin-glimmerx
     dev: true
 
-  /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2):
-    resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==}
+  /@storybook/react@7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-2P7Oju1XKWMyn75dO0vjL4gthzBL/lLiCBRyAHKXZJ1H2eNdWjXkOOtH1HxnbRcXjWSU4tW96dqKY8m0iR9zAA==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5761,13 +5844,13 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-client': 7.0.0-rc.10
-      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-client': 7.0.2
+      '@storybook/docs-tools': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.2
+      '@storybook/react-dom-shim': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       '@types/escodegen': 0.0.6
       '@types/estree': 0.0.51
       '@types/node': 16.18.16
@@ -5789,51 +5872,27 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/router@6.5.16(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==}
+  /@storybook/router@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ZB2vucfayZUrMLBlXju4v6CNOQQb0YKDLw5RoojdBxOsUFtnp5UiPOE+I8PQR63EBwnRjozeibV1XSM+GlQb5w==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/client-logger': 6.5.16
-      core-js: 3.29.1
-      memoizerific: 1.11.3
-      qs: 6.11.1
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      regenerator-runtime: 0.13.11
-    dev: true
-
-  /@storybook/router@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-wg8tMCPFXKf90U4Y8Gpkc347wgWlNiX+FJN2UmiTIpyFkOc+GI+9mWBqcSZDfhgQpBjmxCGgJaD/Uz03Y+vIVg==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
       memoizerific: 1.11.3
       qs: 6.11.1
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/semver@7.3.2:
-    resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      core-js: 3.29.1
-      find-up: 4.1.0
-    dev: true
-
-  /@storybook/source-loader@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-8DJtoNoFfBuw2ZnWWvyvX3r7NnKSvdSAIk1XJGcZybLsQnOSVyXAQhZNfG5Ah5E6V2/7IksDDST9h5HNUAdU7A==}
+  /@storybook/source-loader@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-YIEluNmRHxDZByhwnwTwo+NXKuPrxlCDjdtkMHqvlLQW60KV4l8zaBaBP4//Jq4ycYI1Qt85UKzeZPYzJVT50g==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/csf': 0.1.0
+      '@storybook/types': 7.0.2
       estraverse: 5.3.0
       lodash: 4.17.21
       prettier: 2.8.4
@@ -5841,11 +5900,11 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/telemetry@7.0.0-rc.10:
-    resolution: {integrity: sha512-ZikQZtTzBIVJfEvLUNQ0jMEjhE4naTnjRAHfpEdLWwmd41s5L4kH4YNhyJthdc8K72RdEMA1uQey6aLjjDFa+A==}
+  /@storybook/telemetry@7.0.2:
+    resolution: {integrity: sha512-s2PIwI9nVYQBf3h40EFHLynYUfdqzRJMXyaCWJdVQuvdQfRkAn3CLXaubK+VdjC869z3ZfW20EMu3Mbgzcc0HA==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.10
-      '@storybook/core-common': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-common': 7.0.2
       chalk: 4.1.2
       detect-package-manager: 2.0.1
       fetch-retry: 5.0.4
@@ -5861,35 +5920,21 @@ packages:
   /@storybook/testing-library@0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0
-      '@storybook/instrumenter': 7.0.0
+      '@storybook/client-logger': 7.0.1
+      '@storybook/instrumenter': 7.0.1
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0)
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/theming@6.5.16(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-    dependencies:
-      '@storybook/client-logger': 6.5.16
-      core-js: 3.29.1
-      memoizerific: 1.11.3
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      regenerator-runtime: 0.13.11
-    dev: true
-
-  /@storybook/theming@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-hzUaqmDcFJKgFfY+tec9Q06d9TTgDHBByCNIE2WxUu7U+NWZQe9kFVoEwLTSlrYU2aG6/LYhTC4oJBtQ9FSCyQ==}
+  /@storybook/theming@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-c9sE+QAZNbopPvLiJ6BMxBERfTaq1ATyIri97FBvTucuSotNXw7X5q+ip5/nrCOPZuvK2f5wF4DRyD2HnB/rIQ==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
       '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
-      '@storybook/client-logger': 7.0.0-rc.10
+      '@storybook/client-logger': 7.0.2
       '@storybook/global': 5.0.0
       memoizerific: 1.11.3
       react: 18.2.0
@@ -5905,26 +5950,35 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/types@7.0.0-rc.10:
-    resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==}
+  /@storybook/types@7.0.1:
+    resolution: {integrity: sha512-Tpmxv0cZzujB6fktjf5hHZk9nBMQ5dA+dez3avGfow3BkSuqSZgNZ3NF5Bb6sDR/ccO2hWh+zttZqfS4SngVvQ==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.10
+      '@storybook/channels': 7.0.1
       '@types/babel__core': 7.20.0
       '@types/express': 4.17.17
       file-system-cache: 2.0.2
     dev: true
 
-  /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47):
-    resolution: {integrity: sha512-gNUlREXPv9C61VqmLW9MmlAFAgki9o60+CKwMDLp3Ey/WxEwH+JGOmhc5ne6H4du9FZLnDbBa3zphkS0Ve7qWw==}
+  /@storybook/types@7.0.2:
+    resolution: {integrity: sha512-0OCt/kAexa8MCcljxA+yZxGMn0n2U2Ync0KxotItqNbKBKVkaLQUls0+IXTWSCpC/QJvNZ049jxUHHanNi/96w==}
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
+  /@storybook/vue3-vite@7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47):
+    resolution: {integrity: sha512-lmxnHA9wHkgbNq+oW6dVnXbe9QOFjOz4Ejkl1AAjjg0blJ+VGautVa3mSeYM99szx5EigSfQjFAkv/TAJVC80Q==}
     engines: {node: ^14.18 || >=16}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
       vite: ^3.0.0 || ^4.0.0
     dependencies:
-      '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1)
-      '@storybook/core-server': 7.0.0-rc.10
-      '@storybook/vue3': 7.0.0-rc.10(vue@3.2.47)
+      '@storybook/builder-vite': 7.0.2(typescript@5.0.2)(vite@4.2.1)
+      '@storybook/core-server': 7.0.2
+      '@storybook/vue3': 7.0.2(vue@3.2.47)
       '@vitejs/plugin-vue': 4.1.0(vite@4.2.1)(vue@3.2.47)
       magic-string: 0.27.0
       react: 18.2.0
@@ -5943,17 +5997,17 @@ packages:
       - vue
     dev: true
 
-  /@storybook/vue3@7.0.0-rc.10(vue@3.2.47):
-    resolution: {integrity: sha512-v34ZvjQy3B8it6FNzdCEbT8KDsDeySOCGWZcGGZZ+aQALmXwVM4Kpo76AaOR6APt0gMppegEuYqtMY9PfkcELQ==}
+  /@storybook/vue3@7.0.2(vue@3.2.47):
+    resolution: {integrity: sha512-0KDwhDYg9TQTB9awEcm8IeBMkxD6ZQFHuSHfE7TEWSx83H9pGb6CkVkAgjZlmfMiSY6gI160G4mJt2/tgTxbiA==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       vue: ^3.0.0
     dependencies:
-      '@storybook/core-client': 7.0.0-rc.10
-      '@storybook/docs-tools': 7.0.0-rc.10
+      '@storybook/core-client': 7.0.2
+      '@storybook/docs-tools': 7.0.2
       '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       vue: 3.2.47
@@ -6566,10 +6620,6 @@ packages:
       '@types/node': 18.15.11
     dev: true
 
-  /@types/is-function@1.0.1:
-    resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==}
-    dev: true
-
   /@types/istanbul-lib-coverage@2.0.4:
     resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
     dev: true
@@ -6642,12 +6692,6 @@ packages:
     resolution: {integrity: sha512-W9UC9DOPNBRTUocqqPZmzX3cbHmlZBI9jLn6SuxZz0n5QrPk382Ig3hbBWHqYU8TRUmTCJJhuanXeyMTavF7Mg==}
     dev: true
 
-  /@types/mdast@3.0.11:
-    resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
-    dependencies:
-      '@types/unist': 2.0.6
-    dev: true
-
   /@types/mdx@2.0.3:
     resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
     dev: true
@@ -8132,7 +8176,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       '@types/babel__core': 7.20.0
       '@types/babel__traverse': 7.18.3
     dev: true
@@ -8142,7 +8186,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.20.10
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
       '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
       semver: 6.3.0
@@ -8208,7 +8252,7 @@ packages:
     resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /bach@1.2.0:
     resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==}
@@ -8225,10 +8269,6 @@ packages:
       now-and-later: 2.0.1
     dev: false
 
-  /bail@2.0.2:
-    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
-    dev: true
-
   /balanced-match@0.4.2:
     resolution: {integrity: sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==}
     dev: false
@@ -9360,7 +9400,7 @@ packages:
     resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
     dependencies:
       '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /content-disposition@0.5.4:
     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
@@ -9419,6 +9459,7 @@ packages:
   /core-js@3.29.1:
     resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
     requiresBuild: true
+    dev: false
 
   /core-util-is@1.0.2:
     resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -10031,10 +10072,6 @@ packages:
       domhandler: 5.0.3
       entities: 4.4.0
 
-  /dom-walk@0.1.2:
-    resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
-    dev: true
-
   /domelementtype@2.3.0:
     resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
 
@@ -12013,13 +12050,6 @@ packages:
       which: 1.3.1
     dev: false
 
-  /global@4.4.0:
-    resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
-    dependencies:
-      min-document: 2.19.0
-      process: 0.11.10
-    dev: true
-
   /globals@11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
     engines: {node: '>=4'}
@@ -12759,11 +12789,6 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
-  /is-absolute-url@4.0.1:
-    resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dev: true
-
   /is-absolute@1.0.0:
     resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
     engines: {node: '>=0.10.0'}
@@ -12844,11 +12869,6 @@ packages:
     resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
     dev: false
 
-  /is-buffer@2.0.5:
-    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
-    engines: {node: '>=4'}
-    dev: true
-
   /is-callable@1.2.7:
     resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
     engines: {node: '>= 0.4'}
@@ -12966,10 +12986,6 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /is-function@1.0.2:
-    resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
-    dev: true
-
   /is-generator-fn@2.1.0:
     resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
     engines: {node: '>=6'}
@@ -13090,11 +13106,6 @@ packages:
     resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
     engines: {node: '>=0.10.0'}
 
-  /is-plain-obj@4.1.0:
-    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
-    engines: {node: '>=12'}
-    dev: true
-
   /is-plain-object@2.0.4:
     resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
     engines: {node: '>=0.10.0'}
@@ -13270,11 +13281,6 @@ packages:
     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
     engines: {node: '>=0.10.0'}
 
-  /isobject@4.0.0:
-    resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
   /isomorphic-unfetch@3.1.0:
     resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
     dependencies:
@@ -13707,7 +13713,7 @@ packages:
       '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
       '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3)
       '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       '@jest/expect-utils': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
@@ -13919,6 +13925,36 @@ packages:
       - supports-color
     dev: true
 
+  /jscodeshift@0.14.0(@babel/preset-env@7.21.4):
+    resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
+    hasBin: true
+    peerDependencies:
+      '@babel/preset-env': ^7.1.6
+    dependencies:
+      '@babel/core': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
+      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.21.4(@babel/core@7.21.3)
+      '@babel/preset-flow': 7.18.6(@babel/core@7.21.3)
+      '@babel/preset-typescript': 7.21.0(@babel/core@7.21.3)
+      '@babel/register': 7.21.0(@babel/core@7.21.3)
+      babel-core: 7.0.0-bridge.0(@babel/core@7.21.3)
+      chalk: 4.1.2
+      flow-parser: 0.202.0
+      graceful-fs: 4.2.11
+      micromatch: 4.0.5
+      neo-async: 2.6.2
+      node-dir: 0.1.17
+      recast: 0.21.5
+      temp: 0.8.4
+      write-file-atomic: 2.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /jsdom@21.1.1:
     resolution: {integrity: sha512-Jjgdmw48RKcdAIQyUD1UdBh2ecH7VqwaXPN3ehoZN6MqgVbMn+lRm1aAT1AsdJRAJpwfa4IpwgzySn61h2qu3w==}
     engines: {node: '>=14'}
@@ -14662,24 +14698,10 @@ packages:
       unist-util-visit: 2.0.3
     dev: true
 
-  /mdast-util-definitions@5.1.2:
-    resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
-    dependencies:
-      '@types/mdast': 3.0.11
-      '@types/unist': 2.0.6
-      unist-util-visit: 4.1.2
-    dev: true
-
   /mdast-util-to-string@1.1.0:
     resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
     dev: true
 
-  /mdast-util-to-string@3.1.1:
-    resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
-    dependencies:
-      '@types/mdast': 3.0.11
-    dev: true
-
   /media-typer@0.3.0:
     resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
     engines: {node: '>= 0.6'}
@@ -14807,12 +14829,6 @@ packages:
     resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
-  /min-document@2.19.0:
-    resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
-    dependencies:
-      dom-walk: 0.1.2
-    dev: true
-
   /min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
@@ -17347,19 +17363,6 @@ packages:
       unist-util-visit: 2.0.3
     dev: true
 
-  /remark-external-links@9.0.1:
-    resolution: {integrity: sha512-EYw+p8Zqy5oT5+W8iSKzInfRLY+zeKWHCf0ut+Q5SwnaSIDGXd2zzvp4SWqyAuVbinNmZ0zjMrDKaExWZnTYqQ==}
-    dependencies:
-      '@types/hast': 2.3.4
-      '@types/mdast': 3.0.11
-      extend: 3.0.2
-      is-absolute-url: 4.0.1
-      mdast-util-definitions: 5.1.2
-      space-separated-tokens: 2.0.2
-      unified: 10.1.2
-      unist-util-visit: 4.1.2
-    dev: true
-
   /remark-slug@6.1.0:
     resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==}
     dependencies:
@@ -17368,17 +17371,6 @@ packages:
       unist-util-visit: 2.0.3
     dev: true
 
-  /remark-slug@7.0.1:
-    resolution: {integrity: sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==}
-    dependencies:
-      '@types/hast': 2.3.4
-      '@types/mdast': 3.0.11
-      github-slugger: 1.5.0
-      mdast-util-to-string: 3.1.1
-      unified: 10.1.2
-      unist-util-visit: 4.1.2
-    dev: true
-
   /remove-bom-buffer@3.0.0:
     resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
     engines: {node: '>=0.10.0'}
@@ -18189,10 +18181,6 @@ packages:
     resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
     dev: true
 
-  /space-separated-tokens@2.0.2:
-    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
-    dev: true
-
   /sparkles@1.0.1:
     resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
     engines: {node: '>= 0.10'}
@@ -18324,11 +18312,11 @@ packages:
     resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
     dev: true
 
-  /storybook@7.0.0-rc.10:
-    resolution: {integrity: sha512-lVX1N8+VMs9E/mm+YLrCPfvFvKsJ4AVMfWg548MiJR7OZpPC2bDK8mSEnVDAeJaehIK6IprB4Y0W1FvvvjGIsw==}
+  /storybook@7.0.2:
+    resolution: {integrity: sha512-/XBLhT9Vb14yNBcA9rlW15y+C6IsCA3kx5PKvK9kL10sKCi8invcY94UfCSisXe8HqsO3u6peumo2xpYucKMjw==}
     hasBin: true
     dependencies:
-      '@storybook/cli': 7.0.0-rc.10
+      '@storybook/cli': 7.0.2
     transitivePeerDependencies:
       - bufferutil
       - encoding
@@ -18717,19 +18705,6 @@ packages:
       mkdirp: 1.0.4
       yallist: 4.0.0
 
-  /telejson@6.0.8:
-    resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==}
-    dependencies:
-      '@types/is-function': 1.0.1
-      global: 4.4.0
-      is-function: 1.0.2
-      is-regex: 1.1.4
-      is-symbol: 1.0.4
-      isobject: 4.0.0
-      lodash: 4.17.21
-      memoizerific: 1.11.3
-    dev: true
-
   /telejson@7.0.4:
     resolution: {integrity: sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA==}
     dependencies:
@@ -19018,10 +18993,6 @@ packages:
       escape-string-regexp: 5.0.0
     dev: false
 
-  /trough@2.1.0:
-    resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
-    dev: true
-
   /ts-dedent@2.2.0:
     resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
     engines: {node: '>=6.10'}
@@ -19376,18 +19347,6 @@ packages:
     engines: {node: '>=4'}
     dev: true
 
-  /unified@10.1.2:
-    resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
-    dependencies:
-      '@types/unist': 2.0.6
-      bail: 2.0.2
-      extend: 3.0.2
-      is-buffer: 2.0.5
-      is-plain-obj: 4.1.0
-      trough: 2.1.0
-      vfile: 5.3.7
-    dev: true
-
   /union-value@1.0.1:
     resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
     engines: {node: '>=0.10.0'}
@@ -19438,18 +19397,6 @@ packages:
     resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
     dev: true
 
-  /unist-util-is@5.2.1:
-    resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
-    dependencies:
-      '@types/unist': 2.0.6
-    dev: true
-
-  /unist-util-stringify-position@3.0.3:
-    resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
-    dependencies:
-      '@types/unist': 2.0.6
-    dev: true
-
   /unist-util-visit-parents@3.1.1:
     resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
     dependencies:
@@ -19457,13 +19404,6 @@ packages:
       unist-util-is: 4.1.0
     dev: true
 
-  /unist-util-visit-parents@5.1.3:
-    resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
-    dependencies:
-      '@types/unist': 2.0.6
-      unist-util-is: 5.2.1
-    dev: true
-
   /unist-util-visit@2.0.3:
     resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
     dependencies:
@@ -19472,14 +19412,6 @@ packages:
       unist-util-visit-parents: 3.1.1
     dev: true
 
-  /unist-util-visit@4.1.2:
-    resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
-    dependencies:
-      '@types/unist': 2.0.6
-      unist-util-is: 5.2.1
-      unist-util-visit-parents: 5.1.3
-    dev: true
-
   /universalify@0.1.2:
     resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
     engines: {node: '>= 4.0.0'}
@@ -19687,22 +19619,6 @@ packages:
       core-util-is: 1.0.2
       extsprintf: 1.3.0
 
-  /vfile-message@3.1.4:
-    resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
-    dependencies:
-      '@types/unist': 2.0.6
-      unist-util-stringify-position: 3.0.3
-    dev: true
-
-  /vfile@5.3.7:
-    resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
-    dependencies:
-      '@types/unist': 2.0.6
-      is-buffer: 2.0.5
-      unist-util-stringify-position: 3.0.3
-      vfile-message: 3.1.4
-    dev: true
-
   /vinyl-fs@3.0.3:
     resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==}
     engines: {node: '>= 0.10'}
@@ -20200,7 +20116,7 @@ packages:
     engines: {node: '>= 10.0.0'}
     dependencies:
       '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       assert-never: 1.2.1
       babel-walk: 3.0.0-canary-5
 
@@ -20507,7 +20423,7 @@ packages:
       sharp: 0.31.3
     dev: false
 
-  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.0-rc.10)(@storybook/components@7.0.0-rc.10)(@storybook/core-events@7.0.0-rc.10)(@storybook/manager-api@7.0.0-rc.10)(@storybook/preview-api@7.0.0-rc.10)(@storybook/theming@7.0.0-rc.10)(@storybook/types@7.0.0-rc.10)(react-dom@18.2.0)(react@18.2.0):
+  github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.2)(@storybook/components@7.0.2)(@storybook/core-events@7.0.2)(@storybook/manager-api@7.0.2)(@storybook/preview-api@7.0.2)(@storybook/theming@7.0.2)(@storybook/types@7.0.2)(react-dom@18.2.0)(react@18.2.0):
     resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
     id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
     name: storybook-addon-misskey-theme
@@ -20528,13 +20444,13 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/core-events': 7.0.0-rc.10
-      '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.10
-      '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.10
+      '@storybook/blocks': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     dev: true

From d6e04da20b20dfd2579d53334fbd60113a7ebcbc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 4 Apr 2023 15:03:45 +0900
Subject: [PATCH 97/99] style(#10336): update comment-out codes

---
 packages/frontend/.storybook/generate.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index f2c87016c8..f0865fcc24 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -394,7 +394,7 @@ function toStories(component: string): string {
 	);
 }
 
-// promisify(glob)('src/{components,pages,ui,widgets}/**/*.vue').then(
+// glob('src/{components,pages,ui,widgets}/**/*.vue').then(
 glob('src/components/global/**/*.vue').then(
 	(components) =>
 		Promise.all(

From 7f3afac0a21b0a1465cb6c4ac19be608dcdbfe1d Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 4 Apr 2023 15:56:47 +0900
Subject: [PATCH 98/99] refactor(backend): rename Cache -> MemoryCache

---
 .../backend/src/core/CustomEmojiService.ts     |  6 +++---
 .../src/core/FederatedInstanceService.ts       |  6 +++---
 .../backend/src/core/InstanceActorService.ts   |  6 +++---
 packages/backend/src/core/NoteCreateService.ts |  4 ++--
 packages/backend/src/core/RelayService.ts      |  6 +++---
 packages/backend/src/core/RoleService.ts       | 10 +++++-----
 .../backend/src/core/UserBlockingService.ts    |  6 +++---
 packages/backend/src/core/UserCacheService.ts  | 18 +++++++++---------
 .../src/core/UserKeypairStoreService.ts        |  6 +++---
 .../core/activitypub/ApDbResolverService.ts    | 10 +++++-----
 .../src/core/entities/UserEntityService.ts     |  6 +++---
 packages/backend/src/misc/cache.ts             |  8 ++++----
 .../processors/DeliverProcessorService.ts      |  6 +++---
 .../src/server/NodeinfoServerService.ts        |  4 ++--
 .../src/server/api/AuthenticateService.ts      |  6 +++---
 15 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index a62854c61c..1c3b60e5d7 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -8,7 +8,7 @@ import type { DriveFile } from '@/models/entities/DriveFile.js';
 import type { Emoji } from '@/models/entities/Emoji.js';
 import type { EmojisRepository, Note } from '@/models/index.js';
 import { bindThis } from '@/decorators.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import { UtilityService } from '@/core/UtilityService.js';
 import type { Config } from '@/config.js';
 import { ReactionService } from '@/core/ReactionService.js';
@@ -16,7 +16,7 @@ import { query } from '@/misc/prelude/url.js';
 
 @Injectable()
 export class CustomEmojiService {
-	private cache: KVCache<Emoji | null>;
+	private cache: MemoryKVCache<Emoji | null>;
 
 	constructor(
 		@Inject(DI.config)
@@ -34,7 +34,7 @@ export class CustomEmojiService {
 		private globalEventService: GlobalEventService,
 		private reactionService: ReactionService,
 	) {
-		this.cache = new KVCache<Emoji | null>(1000 * 60 * 60 * 12);
+		this.cache = new MemoryKVCache<Emoji | null>(1000 * 60 * 60 * 12);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/FederatedInstanceService.ts b/packages/backend/src/core/FederatedInstanceService.ts
index b85791e43f..2c6d3ac508 100644
--- a/packages/backend/src/core/FederatedInstanceService.ts
+++ b/packages/backend/src/core/FederatedInstanceService.ts
@@ -1,7 +1,7 @@
 import { Inject, Injectable } from '@nestjs/common';
 import type { InstancesRepository } from '@/models/index.js';
 import type { Instance } from '@/models/entities/Instance.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import { IdService } from '@/core/IdService.js';
 import { DI } from '@/di-symbols.js';
 import { UtilityService } from '@/core/UtilityService.js';
@@ -9,7 +9,7 @@ import { bindThis } from '@/decorators.js';
 
 @Injectable()
 export class FederatedInstanceService {
-	private cache: KVCache<Instance>;
+	private cache: MemoryKVCache<Instance>;
 
 	constructor(
 		@Inject(DI.instancesRepository)
@@ -18,7 +18,7 @@ export class FederatedInstanceService {
 		private utilityService: UtilityService,
 		private idService: IdService,
 	) {
-		this.cache = new KVCache<Instance>(1000 * 60 * 60);
+		this.cache = new MemoryKVCache<Instance>(1000 * 60 * 60);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/InstanceActorService.ts b/packages/backend/src/core/InstanceActorService.ts
index ef87051a74..049e27dec8 100644
--- a/packages/backend/src/core/InstanceActorService.ts
+++ b/packages/backend/src/core/InstanceActorService.ts
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import { IsNull } from 'typeorm';
 import type { LocalUser } from '@/models/entities/User.js';
 import type { UsersRepository } from '@/models/index.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import { DI } from '@/di-symbols.js';
 import { CreateSystemUserService } from '@/core/CreateSystemUserService.js';
 import { bindThis } from '@/decorators.js';
@@ -11,7 +11,7 @@ const ACTOR_USERNAME = 'instance.actor' as const;
 
 @Injectable()
 export class InstanceActorService {
-	private cache: KVCache<LocalUser>;
+	private cache: MemoryKVCache<LocalUser>;
 
 	constructor(
 		@Inject(DI.usersRepository)
@@ -19,7 +19,7 @@ export class InstanceActorService {
 
 		private createSystemUserService: CreateSystemUserService,
 	) {
-		this.cache = new KVCache<LocalUser>(Infinity);
+		this.cache = new MemoryKVCache<LocalUser>(Infinity);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 7af7099432..552f241044 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -20,7 +20,7 @@ import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js
 import { checkWordMute } from '@/misc/check-word-mute.js';
 import type { Channel } from '@/models/entities/Channel.js';
 import { normalizeForSearch } from '@/misc/normalize-for-search.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { UserProfile } from '@/models/entities/UserProfile.js';
 import { RelayService } from '@/core/RelayService.js';
 import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
@@ -47,7 +47,7 @@ import { DB_MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 import { RoleService } from '@/core/RoleService.js';
 import { MetaService } from '@/core/MetaService.js';
 
-const mutedWordsCache = new KVCache<{ userId: UserProfile['userId']; mutedWords: UserProfile['mutedWords']; }[]>(1000 * 60 * 5);
+const mutedWordsCache = new MemoryKVCache<{ userId: UserProfile['userId']; mutedWords: UserProfile['mutedWords']; }[]>(1000 * 60 * 5);
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
diff --git a/packages/backend/src/core/RelayService.ts b/packages/backend/src/core/RelayService.ts
index 4537f1b81a..be5a4d4b02 100644
--- a/packages/backend/src/core/RelayService.ts
+++ b/packages/backend/src/core/RelayService.ts
@@ -3,7 +3,7 @@ import { IsNull } from 'typeorm';
 import type { LocalUser, User } from '@/models/entities/User.js';
 import type { RelaysRepository, UsersRepository } from '@/models/index.js';
 import { IdService } from '@/core/IdService.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { Relay } from '@/models/entities/Relay.js';
 import { QueueService } from '@/core/QueueService.js';
 import { CreateSystemUserService } from '@/core/CreateSystemUserService.js';
@@ -16,7 +16,7 @@ const ACTOR_USERNAME = 'relay.actor' as const;
 
 @Injectable()
 export class RelayService {
-	private relaysCache: KVCache<Relay[]>;
+	private relaysCache: MemoryKVCache<Relay[]>;
 
 	constructor(
 		@Inject(DI.usersRepository)
@@ -30,7 +30,7 @@ export class RelayService {
 		private createSystemUserService: CreateSystemUserService,
 		private apRendererService: ApRendererService,
 	) {
-		this.relaysCache = new KVCache<Relay[]>(1000 * 60 * 10);
+		this.relaysCache = new MemoryKVCache<Relay[]>(1000 * 60 * 10);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 7b63e43cb1..678bcfc337 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import Redis from 'ioredis';
 import { In } from 'typeorm';
 import type { Role, RoleAssignment, RoleAssignmentsRepository, RolesRepository, UsersRepository } from '@/models/index.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { User } from '@/models/entities/User.js';
 import { DI } from '@/di-symbols.js';
 import { bindThis } from '@/decorators.js';
@@ -57,8 +57,8 @@ export const DEFAULT_POLICIES: RolePolicies = {
 
 @Injectable()
 export class RoleService implements OnApplicationShutdown {
-	private rolesCache: KVCache<Role[]>;
-	private roleAssignmentByUserIdCache: KVCache<RoleAssignment[]>;
+	private rolesCache: MemoryKVCache<Role[]>;
+	private roleAssignmentByUserIdCache: MemoryKVCache<RoleAssignment[]>;
 
 	public static AlreadyAssignedError = class extends Error {};
 	public static NotAssignedError = class extends Error {};
@@ -84,8 +84,8 @@ export class RoleService implements OnApplicationShutdown {
 	) {
 		//this.onMessage = this.onMessage.bind(this);
 
-		this.rolesCache = new KVCache<Role[]>(Infinity);
-		this.roleAssignmentByUserIdCache = new KVCache<RoleAssignment[]>(Infinity);
+		this.rolesCache = new MemoryKVCache<Role[]>(Infinity);
+		this.roleAssignmentByUserIdCache = new MemoryKVCache<RoleAssignment[]>(Infinity);
 
 		this.redisSubscriber.on('message', this.onMessage);
 	}
diff --git a/packages/backend/src/core/UserBlockingService.ts b/packages/backend/src/core/UserBlockingService.ts
index 33b51537a6..040b6de2ef 100644
--- a/packages/backend/src/core/UserBlockingService.ts
+++ b/packages/backend/src/core/UserBlockingService.ts
@@ -15,7 +15,7 @@ import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
 import { LoggerService } from '@/core/LoggerService.js';
 import { WebhookService } from '@/core/WebhookService.js';
 import { bindThis } from '@/decorators.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import { StreamMessages } from '@/server/api/stream/types.js';
 
 @Injectable()
@@ -23,7 +23,7 @@ export class UserBlockingService implements OnApplicationShutdown {
 	private logger: Logger;
 
 	// キーがユーザーIDで、値がそのユーザーがブロックしているユーザーのIDのリストなキャッシュ
-	private blockingsByUserIdCache: KVCache<User['id'][]>;
+	private blockingsByUserIdCache: MemoryKVCache<User['id'][]>;
 
 	constructor(
 		@Inject(DI.redisSubscriber)
@@ -58,7 +58,7 @@ export class UserBlockingService implements OnApplicationShutdown {
 	) {
 		this.logger = this.loggerService.getLogger('user-block');
 
-		this.blockingsByUserIdCache = new KVCache<User['id'][]>(Infinity);
+		this.blockingsByUserIdCache = new MemoryKVCache<User['id'][]>(Infinity);
 
 		this.redisSubscriber.on('message', this.onMessage);
 	}
diff --git a/packages/backend/src/core/UserCacheService.ts b/packages/backend/src/core/UserCacheService.ts
index 631eb44062..e452caf5d1 100644
--- a/packages/backend/src/core/UserCacheService.ts
+++ b/packages/backend/src/core/UserCacheService.ts
@@ -1,7 +1,7 @@
 import { Inject, Injectable } from '@nestjs/common';
 import Redis from 'ioredis';
 import type { UsersRepository } from '@/models/index.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { LocalUser, User } from '@/models/entities/User.js';
 import { DI } from '@/di-symbols.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
@@ -11,10 +11,10 @@ import type { OnApplicationShutdown } from '@nestjs/common';
 
 @Injectable()
 export class UserCacheService implements OnApplicationShutdown {
-	public userByIdCache: KVCache<User>;
-	public localUserByNativeTokenCache: KVCache<LocalUser | null>;
-	public localUserByIdCache: KVCache<LocalUser>;
-	public uriPersonCache: KVCache<User | null>;
+	public userByIdCache: MemoryKVCache<User>;
+	public localUserByNativeTokenCache: MemoryKVCache<LocalUser | null>;
+	public localUserByIdCache: MemoryKVCache<LocalUser>;
+	public uriPersonCache: MemoryKVCache<User | null>;
 
 	constructor(
 		@Inject(DI.redisSubscriber)
@@ -27,10 +27,10 @@ export class UserCacheService implements OnApplicationShutdown {
 	) {
 		//this.onMessage = this.onMessage.bind(this);
 
-		this.userByIdCache = new KVCache<User>(Infinity);
-		this.localUserByNativeTokenCache = new KVCache<LocalUser | null>(Infinity);
-		this.localUserByIdCache = new KVCache<LocalUser>(Infinity);
-		this.uriPersonCache = new KVCache<User | null>(Infinity);
+		this.userByIdCache = new MemoryKVCache<User>(Infinity);
+		this.localUserByNativeTokenCache = new MemoryKVCache<LocalUser | null>(Infinity);
+		this.localUserByIdCache = new MemoryKVCache<LocalUser>(Infinity);
+		this.uriPersonCache = new MemoryKVCache<User | null>(Infinity);
 
 		this.redisSubscriber.on('message', this.onMessage);
 	}
diff --git a/packages/backend/src/core/UserKeypairStoreService.ts b/packages/backend/src/core/UserKeypairStoreService.ts
index 61c9293f86..872a0335ea 100644
--- a/packages/backend/src/core/UserKeypairStoreService.ts
+++ b/packages/backend/src/core/UserKeypairStoreService.ts
@@ -1,20 +1,20 @@
 import { Inject, Injectable } from '@nestjs/common';
 import type { User } from '@/models/entities/User.js';
 import type { UserKeypairsRepository } from '@/models/index.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { UserKeypair } from '@/models/entities/UserKeypair.js';
 import { DI } from '@/di-symbols.js';
 import { bindThis } from '@/decorators.js';
 
 @Injectable()
 export class UserKeypairStoreService {
-	private cache: KVCache<UserKeypair>;
+	private cache: MemoryKVCache<UserKeypair>;
 
 	constructor(
 		@Inject(DI.userKeypairsRepository)
 		private userKeypairsRepository: UserKeypairsRepository,
 	) {
-		this.cache = new KVCache<UserKeypair>(Infinity);
+		this.cache = new MemoryKVCache<UserKeypair>(Infinity);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/activitypub/ApDbResolverService.ts b/packages/backend/src/core/activitypub/ApDbResolverService.ts
index c3b3875613..dc0a865bbe 100644
--- a/packages/backend/src/core/activitypub/ApDbResolverService.ts
+++ b/packages/backend/src/core/activitypub/ApDbResolverService.ts
@@ -3,7 +3,7 @@ import escapeRegexp from 'escape-regexp';
 import { DI } from '@/di-symbols.js';
 import type { NotesRepository, UserPublickeysRepository, UsersRepository } from '@/models/index.js';
 import type { Config } from '@/config.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { UserPublickey } from '@/models/entities/UserPublickey.js';
 import { UserCacheService } from '@/core/UserCacheService.js';
 import type { Note } from '@/models/entities/Note.js';
@@ -31,8 +31,8 @@ export type UriParseResult = {
 
 @Injectable()
 export class ApDbResolverService {
-	private publicKeyCache: KVCache<UserPublickey | null>;
-	private publicKeyByUserIdCache: KVCache<UserPublickey | null>;
+	private publicKeyCache: MemoryKVCache<UserPublickey | null>;
+	private publicKeyByUserIdCache: MemoryKVCache<UserPublickey | null>;
 
 	constructor(
 		@Inject(DI.config)
@@ -50,8 +50,8 @@ export class ApDbResolverService {
 		private userCacheService: UserCacheService,
 		private apPersonService: ApPersonService,
 	) {
-		this.publicKeyCache = new KVCache<UserPublickey | null>(Infinity);
-		this.publicKeyByUserIdCache = new KVCache<UserPublickey | null>(Infinity);
+		this.publicKeyCache = new MemoryKVCache<UserPublickey | null>(Infinity);
+		this.publicKeyByUserIdCache = new MemoryKVCache<UserPublickey | null>(Infinity);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index ae7c47a990..71aa2ee6de 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -9,7 +9,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { Promiseable } from '@/misc/prelude/await-all.js';
 import { awaitAll } from '@/misc/prelude/await-all.js';
 import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { Instance } from '@/models/entities/Instance.js';
 import type { LocalUser, RemoteUser, User } from '@/models/entities/User.js';
 import { birthdaySchema, descriptionSchema, localUsernameSchema, locationSchema, nameSchema, passwordSchema } from '@/models/entities/User.js';
@@ -53,7 +53,7 @@ export class UserEntityService implements OnModuleInit {
 	private customEmojiService: CustomEmojiService;
 	private antennaService: AntennaService;
 	private roleService: RoleService;
-	private userInstanceCache: KVCache<Instance | null>;
+	private userInstanceCache: MemoryKVCache<Instance | null>;
 
 	constructor(
 		private moduleRef: ModuleRef,
@@ -119,7 +119,7 @@ export class UserEntityService implements OnModuleInit {
 		//private antennaService: AntennaService,
 		//private roleService: RoleService,
 	) {
-		this.userInstanceCache = new KVCache<Instance | null>(1000 * 60 * 60 * 3);
+		this.userInstanceCache = new MemoryKVCache<Instance | null>(1000 * 60 * 60 * 3);
 	}
 
 	onModuleInit() {
diff --git a/packages/backend/src/misc/cache.ts b/packages/backend/src/misc/cache.ts
index b249cf4480..a805d18421 100644
--- a/packages/backend/src/misc/cache.ts
+++ b/packages/backend/src/misc/cache.ts
@@ -2,11 +2,11 @@ import { bindThis } from '@/decorators.js';
 
 // TODO: メモリ節約のためあまり参照されないキーを定期的に削除できるようにする?
 
-export class KVCache<T> {
+export class MemoryKVCache<T> {
 	public cache: Map<string | null, { date: number; value: T; }>;
 	private lifetime: number;
 
-	constructor(lifetime: KVCache<never>['lifetime']) {
+	constructor(lifetime: MemoryKVCache<never>['lifetime']) {
 		this.cache = new Map();
 		this.lifetime = lifetime;
 	}
@@ -88,12 +88,12 @@ export class KVCache<T> {
 	}
 }
 
-export class Cache<T> {
+export class MemoryCache<T> {
 	private cachedAt: number | null = null;
 	private value: T | undefined;
 	private lifetime: number;
 
-	constructor(lifetime: Cache<never>['lifetime']) {
+	constructor(lifetime: MemoryCache<never>['lifetime']) {
 		this.lifetime = lifetime;
 	}
 
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts
index f637bf8818..71865c778a 100644
--- a/packages/backend/src/queue/processors/DeliverProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts
@@ -7,7 +7,7 @@ import { MetaService } from '@/core/MetaService.js';
 import { ApRequestService } from '@/core/activitypub/ApRequestService.js';
 import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 import { FetchInstanceMetadataService } from '@/core/FetchInstanceMetadataService.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { Instance } from '@/models/entities/Instance.js';
 import InstanceChart from '@/core/chart/charts/instance.js';
 import ApRequestChart from '@/core/chart/charts/ap-request.js';
@@ -22,7 +22,7 @@ import type { DeliverJobData } from '../types.js';
 @Injectable()
 export class DeliverProcessorService {
 	private logger: Logger;
-	private suspendedHostsCache: KVCache<Instance[]>;
+	private suspendedHostsCache: MemoryKVCache<Instance[]>;
 	private latest: string | null;
 
 	constructor(
@@ -46,7 +46,7 @@ export class DeliverProcessorService {
 		private queueLoggerService: QueueLoggerService,
 	) {
 		this.logger = this.queueLoggerService.logger.createSubLogger('deliver');
-		this.suspendedHostsCache = new KVCache<Instance[]>(1000 * 60 * 60);
+		this.suspendedHostsCache = new MemoryKVCache<Instance[]>(1000 * 60 * 60);
 	}
 
 	@bindThis
diff --git a/packages/backend/src/server/NodeinfoServerService.ts b/packages/backend/src/server/NodeinfoServerService.ts
index 86019d4166..3387bd53aa 100644
--- a/packages/backend/src/server/NodeinfoServerService.ts
+++ b/packages/backend/src/server/NodeinfoServerService.ts
@@ -4,7 +4,7 @@ import type { NotesRepository, UsersRepository } from '@/models/index.js';
 import type { Config } from '@/config.js';
 import { MetaService } from '@/core/MetaService.js';
 import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
 import { bindThis } from '@/decorators.js';
 import NotesChart from '@/core/chart/charts/notes.js';
@@ -118,7 +118,7 @@ export class NodeinfoServerService {
 			};
 		};
 
-		const cache = new KVCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10);
+		const cache = new MemoryKVCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10);
 
 		fastify.get(nodeinfo2_1path, async (request, reply) => {
 			const base = await cache.fetch(null, () => nodeinfo2());
diff --git a/packages/backend/src/server/api/AuthenticateService.ts b/packages/backend/src/server/api/AuthenticateService.ts
index a1895e3705..cd6bce9ef9 100644
--- a/packages/backend/src/server/api/AuthenticateService.ts
+++ b/packages/backend/src/server/api/AuthenticateService.ts
@@ -3,7 +3,7 @@ import { DI } from '@/di-symbols.js';
 import type { AccessTokensRepository, AppsRepository, UsersRepository } from '@/models/index.js';
 import type { LocalUser } from '@/models/entities/User.js';
 import type { AccessToken } from '@/models/entities/AccessToken.js';
-import { KVCache } from '@/misc/cache.js';
+import { MemoryKVCache } from '@/misc/cache.js';
 import type { App } from '@/models/entities/App.js';
 import { UserCacheService } from '@/core/UserCacheService.js';
 import isNativeToken from '@/misc/is-native-token.js';
@@ -18,7 +18,7 @@ export class AuthenticationError extends Error {
 
 @Injectable()
 export class AuthenticateService {
-	private appCache: KVCache<App>;
+	private appCache: MemoryKVCache<App>;
 
 	constructor(
 		@Inject(DI.usersRepository)
@@ -32,7 +32,7 @@ export class AuthenticateService {
 
 		private userCacheService: UserCacheService,
 	) {
-		this.appCache = new KVCache<App>(Infinity);
+		this.appCache = new MemoryKVCache<App>(Infinity);
 	}
 
 	@bindThis

From ecaf152b4a6eb702375debaef0dddc2cca798116 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 4 Apr 2023 17:32:09 +0900
Subject: [PATCH 99/99] enhance(backend): improve cache

---
 .../{UserCacheService.ts => CacheService.ts}  | 17 +++-
 packages/backend/src/core/CoreModule.ts       | 12 +--
 .../backend/src/core/InstanceActorService.ts  | 12 +--
 .../backend/src/core/NoteCreateService.ts     |  6 +-
 .../backend/src/core/NotificationService.ts   | 18 ++--
 packages/backend/src/core/RelayService.ts     |  8 +-
 packages/backend/src/core/RoleService.ts      | 30 +++---
 .../core/activitypub/ApDbResolverService.ts   | 10 +-
 .../activitypub/models/ApPersonService.ts     | 14 +--
 .../entities/NotificationEntityService.ts     |  1 +
 .../src/core/entities/UserEntityService.ts    |  1 -
 packages/backend/src/misc/cache.ts            | 97 +++++++++++++++++--
 .../processors/DeliverProcessorService.ts     | 10 +-
 .../src/server/NodeinfoServerService.ts       |  8 +-
 .../src/server/api/AuthenticateService.ts     |  8 +-
 .../api/endpoints/i/regenerate-token.ts       |  2 +-
 .../src/server/api/endpoints/i/update.ts      |  8 +-
 .../src/server/api/endpoints/mute/create.ts   |  3 +
 .../api/endpoints/renote-mute/create.ts       |  2 -
 .../backend/src/server/api/stream/types.ts    |  2 +-
 packages/backend/test/unit/RoleService.ts     |  4 +-
 21 files changed, 184 insertions(+), 89 deletions(-)
 rename packages/backend/src/core/{UserCacheService.ts => CacheService.ts} (79%)

diff --git a/packages/backend/src/core/UserCacheService.ts b/packages/backend/src/core/CacheService.ts
similarity index 79%
rename from packages/backend/src/core/UserCacheService.ts
rename to packages/backend/src/core/CacheService.ts
index e452caf5d1..887baeb2c2 100644
--- a/packages/backend/src/core/UserCacheService.ts
+++ b/packages/backend/src/core/CacheService.ts
@@ -1,7 +1,7 @@
 import { Inject, Injectable } from '@nestjs/common';
 import Redis from 'ioredis';
-import type { UsersRepository } from '@/models/index.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import type { UserProfile, UsersRepository } from '@/models/index.js';
+import { MemoryKVCache, RedisKVCache } from '@/misc/cache.js';
 import type { LocalUser, User } from '@/models/entities/User.js';
 import { DI } from '@/di-symbols.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
@@ -10,13 +10,18 @@ import { StreamMessages } from '@/server/api/stream/types.js';
 import type { OnApplicationShutdown } from '@nestjs/common';
 
 @Injectable()
-export class UserCacheService implements OnApplicationShutdown {
+export class CacheService implements OnApplicationShutdown {
 	public userByIdCache: MemoryKVCache<User>;
 	public localUserByNativeTokenCache: MemoryKVCache<LocalUser | null>;
 	public localUserByIdCache: MemoryKVCache<LocalUser>;
 	public uriPersonCache: MemoryKVCache<User | null>;
+	public userProfileCache: RedisKVCache<UserProfile>;
+	public userMutingsCache: RedisKVCache<string[]>;
 
 	constructor(
+		@Inject(DI.redis)
+		private redisClient: Redis.Redis,
+
 		@Inject(DI.redisSubscriber)
 		private redisSubscriber: Redis.Redis,
 
@@ -31,6 +36,8 @@ export class UserCacheService implements OnApplicationShutdown {
 		this.localUserByNativeTokenCache = new MemoryKVCache<LocalUser | null>(Infinity);
 		this.localUserByIdCache = new MemoryKVCache<LocalUser>(Infinity);
 		this.uriPersonCache = new MemoryKVCache<User | null>(Infinity);
+		this.userProfileCache = new RedisKVCache<UserProfile>(this.redisClient, 'userProfile', 1000 * 60 * 60 * 24, 1000 * 60);
+		this.userMutingsCache = new RedisKVCache<string[]>(this.redisClient, 'userMutings', 1000 * 60 * 60 * 24, 1000 * 60);
 
 		this.redisSubscriber.on('message', this.onMessage);
 	}
@@ -52,7 +59,7 @@ export class UserCacheService implements OnApplicationShutdown {
 						}
 					}
 					if (this.userEntityService.isLocalUser(user)) {
-						this.localUserByNativeTokenCache.set(user.token, user);
+						this.localUserByNativeTokenCache.set(user.token!, user);
 						this.localUserByIdCache.set(user.id, user);
 					}
 					break;
@@ -77,7 +84,7 @@ export class UserCacheService implements OnApplicationShutdown {
 	}
 
 	@bindThis
-	public findById(userId: User['id']) {
+	public findUserById(userId: User['id']) {
 		return this.userByIdCache.fetch(userId, () => this.usersRepository.findOneByOrFail({ id: userId }));
 	}
 
diff --git a/packages/backend/src/core/CoreModule.ts b/packages/backend/src/core/CoreModule.ts
index d67e80fc1d..5c867e6cfc 100644
--- a/packages/backend/src/core/CoreModule.ts
+++ b/packages/backend/src/core/CoreModule.ts
@@ -38,7 +38,7 @@ import { S3Service } from './S3Service.js';
 import { SignupService } from './SignupService.js';
 import { TwoFactorAuthenticationService } from './TwoFactorAuthenticationService.js';
 import { UserBlockingService } from './UserBlockingService.js';
-import { UserCacheService } from './UserCacheService.js';
+import { CacheService } from './CacheService.js';
 import { UserFollowingService } from './UserFollowingService.js';
 import { UserKeypairStoreService } from './UserKeypairStoreService.js';
 import { UserListService } from './UserListService.js';
@@ -159,7 +159,7 @@ const $S3Service: Provider = { provide: 'S3Service', useExisting: S3Service };
 const $SignupService: Provider = { provide: 'SignupService', useExisting: SignupService };
 const $TwoFactorAuthenticationService: Provider = { provide: 'TwoFactorAuthenticationService', useExisting: TwoFactorAuthenticationService };
 const $UserBlockingService: Provider = { provide: 'UserBlockingService', useExisting: UserBlockingService };
-const $UserCacheService: Provider = { provide: 'UserCacheService', useExisting: UserCacheService };
+const $CacheService: Provider = { provide: 'CacheService', useExisting: CacheService };
 const $UserFollowingService: Provider = { provide: 'UserFollowingService', useExisting: UserFollowingService };
 const $UserKeypairStoreService: Provider = { provide: 'UserKeypairStoreService', useExisting: UserKeypairStoreService };
 const $UserListService: Provider = { provide: 'UserListService', useExisting: UserListService };
@@ -282,7 +282,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
 		SignupService,
 		TwoFactorAuthenticationService,
 		UserBlockingService,
-		UserCacheService,
+		CacheService,
 		UserFollowingService,
 		UserKeypairStoreService,
 		UserListService,
@@ -399,7 +399,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
 		$SignupService,
 		$TwoFactorAuthenticationService,
 		$UserBlockingService,
-		$UserCacheService,
+		$CacheService,
 		$UserFollowingService,
 		$UserKeypairStoreService,
 		$UserListService,
@@ -517,7 +517,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
 		SignupService,
 		TwoFactorAuthenticationService,
 		UserBlockingService,
-		UserCacheService,
+		CacheService,
 		UserFollowingService,
 		UserKeypairStoreService,
 		UserListService,
@@ -633,7 +633,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
 		$SignupService,
 		$TwoFactorAuthenticationService,
 		$UserBlockingService,
-		$UserCacheService,
+		$CacheService,
 		$UserFollowingService,
 		$UserKeypairStoreService,
 		$UserListService,
diff --git a/packages/backend/src/core/InstanceActorService.ts b/packages/backend/src/core/InstanceActorService.ts
index 049e27dec8..898fb4ce85 100644
--- a/packages/backend/src/core/InstanceActorService.ts
+++ b/packages/backend/src/core/InstanceActorService.ts
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import { IsNull } from 'typeorm';
 import type { LocalUser } from '@/models/entities/User.js';
 import type { UsersRepository } from '@/models/index.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryCache } from '@/misc/cache.js';
 import { DI } from '@/di-symbols.js';
 import { CreateSystemUserService } from '@/core/CreateSystemUserService.js';
 import { bindThis } from '@/decorators.js';
@@ -11,7 +11,7 @@ const ACTOR_USERNAME = 'instance.actor' as const;
 
 @Injectable()
 export class InstanceActorService {
-	private cache: MemoryKVCache<LocalUser>;
+	private cache: MemoryCache<LocalUser>;
 
 	constructor(
 		@Inject(DI.usersRepository)
@@ -19,12 +19,12 @@ export class InstanceActorService {
 
 		private createSystemUserService: CreateSystemUserService,
 	) {
-		this.cache = new MemoryKVCache<LocalUser>(Infinity);
+		this.cache = new MemoryCache<LocalUser>(Infinity);
 	}
 
 	@bindThis
 	public async getInstanceActor(): Promise<LocalUser> {
-		const cached = this.cache.get(null);
+		const cached = this.cache.get();
 		if (cached) return cached;
 	
 		const user = await this.usersRepository.findOneBy({
@@ -33,11 +33,11 @@ export class InstanceActorService {
 		}) as LocalUser | undefined;
 	
 		if (user) {
-			this.cache.set(null, user);
+			this.cache.set(user);
 			return user;
 		} else {
 			const created = await this.createSystemUserService.createSystemUser(ACTOR_USERNAME) as LocalUser;
-			this.cache.set(null, created);
+			this.cache.set(created);
 			return created;
 		}
 	}
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 552f241044..83290b310e 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -20,7 +20,7 @@ import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js
 import { checkWordMute } from '@/misc/check-word-mute.js';
 import type { Channel } from '@/models/entities/Channel.js';
 import { normalizeForSearch } from '@/misc/normalize-for-search.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryCache } from '@/misc/cache.js';
 import type { UserProfile } from '@/models/entities/UserProfile.js';
 import { RelayService } from '@/core/RelayService.js';
 import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
@@ -47,7 +47,7 @@ import { DB_MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 import { RoleService } from '@/core/RoleService.js';
 import { MetaService } from '@/core/MetaService.js';
 
-const mutedWordsCache = new MemoryKVCache<{ userId: UserProfile['userId']; mutedWords: UserProfile['mutedWords']; }[]>(1000 * 60 * 5);
+const mutedWordsCache = new MemoryCache<{ userId: UserProfile['userId']; mutedWords: UserProfile['mutedWords']; }[]>(1000 * 60 * 5);
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
@@ -473,7 +473,7 @@ export class NoteCreateService implements OnApplicationShutdown {
 		this.incNotesCountOfUser(user);
 
 		// Word mute
-		mutedWordsCache.fetch(null, () => this.userProfilesRepository.find({
+		mutedWordsCache.fetch(() => this.userProfilesRepository.find({
 			where: {
 				enableWordMute: true,
 			},
diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index 2a4dbba6a4..9c179f9318 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -3,7 +3,7 @@ import Redis from 'ioredis';
 import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
 import { In } from 'typeorm';
 import { DI } from '@/di-symbols.js';
-import type { MutingsRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type { MutingsRepository, UserProfile, UserProfilesRepository, UsersRepository } from '@/models/index.js';
 import type { User } from '@/models/entities/User.js';
 import type { Notification } from '@/models/entities/Notification.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
@@ -12,6 +12,7 @@ import { GlobalEventService } from '@/core/GlobalEventService.js';
 import { PushNotificationService } from '@/core/PushNotificationService.js';
 import { NotificationEntityService } from '@/core/entities/NotificationEntityService.js';
 import { IdService } from '@/core/IdService.js';
+import { CacheService } from '@/core/CacheService.js';
 
 @Injectable()
 export class NotificationService implements OnApplicationShutdown {
@@ -35,6 +36,7 @@ export class NotificationService implements OnApplicationShutdown {
 		private idService: IdService,
 		private globalEventService: GlobalEventService,
 		private pushNotificationService: PushNotificationService,
+		private cacheService: CacheService,
 	) {
 	}
 
@@ -49,7 +51,6 @@ export class NotificationService implements OnApplicationShutdown {
 			'+',
 			'-',
 			'COUNT', 1);
-		console.log('latestNotificationIdsRes', latestNotificationIdsRes);
 		const latestNotificationId = latestNotificationIdsRes[0]?.[0];
 
 		if (latestNotificationId == null) return;
@@ -72,9 +73,8 @@ export class NotificationService implements OnApplicationShutdown {
 		type: Notification['type'],
 		data: Partial<Notification>,
 	): Promise<Notification | null> {
-		// TODO: Cache
-		const profile = await this.userProfilesRepository.findOneBy({ userId: notifieeId });
-		const isMuted = profile?.mutingNotificationTypes.includes(type);
+		const profile = await this.cacheService.userProfileCache.fetch(notifieeId, () => this.userProfilesRepository.findOneByOrFail({ userId: notifieeId }));
+		const isMuted = profile.mutingNotificationTypes.includes(type);
 		if (isMuted) return null;
 
 		if (data.notifierId) {
@@ -82,12 +82,8 @@ export class NotificationService implements OnApplicationShutdown {
 				return null;
 			}
 
-			// TODO: cache
-			const mutings = await this.mutingsRepository.findOneBy({
-				muterId: notifieeId,
-				muteeId: data.notifierId,
-			});
-			if (mutings) {
+			const mutings = await this.cacheService.userMutingsCache.fetch(notifieeId, () => this.mutingsRepository.findBy({ muterId: notifieeId }).then(xs => xs.map(x => x.muteeId)));
+			if (mutings.includes(data.notifierId)) {
 				return null;
 			}
 		}
diff --git a/packages/backend/src/core/RelayService.ts b/packages/backend/src/core/RelayService.ts
index be5a4d4b02..4df7fb3bff 100644
--- a/packages/backend/src/core/RelayService.ts
+++ b/packages/backend/src/core/RelayService.ts
@@ -3,7 +3,7 @@ import { IsNull } from 'typeorm';
 import type { LocalUser, User } from '@/models/entities/User.js';
 import type { RelaysRepository, UsersRepository } from '@/models/index.js';
 import { IdService } from '@/core/IdService.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryCache } from '@/misc/cache.js';
 import type { Relay } from '@/models/entities/Relay.js';
 import { QueueService } from '@/core/QueueService.js';
 import { CreateSystemUserService } from '@/core/CreateSystemUserService.js';
@@ -16,7 +16,7 @@ const ACTOR_USERNAME = 'relay.actor' as const;
 
 @Injectable()
 export class RelayService {
-	private relaysCache: MemoryKVCache<Relay[]>;
+	private relaysCache: MemoryCache<Relay[]>;
 
 	constructor(
 		@Inject(DI.usersRepository)
@@ -30,7 +30,7 @@ export class RelayService {
 		private createSystemUserService: CreateSystemUserService,
 		private apRendererService: ApRendererService,
 	) {
-		this.relaysCache = new MemoryKVCache<Relay[]>(1000 * 60 * 10);
+		this.relaysCache = new MemoryCache<Relay[]>(1000 * 60 * 10);
 	}
 
 	@bindThis
@@ -109,7 +109,7 @@ export class RelayService {
 	public async deliverToRelays(user: { id: User['id']; host: null; }, activity: any): Promise<void> {
 		if (activity == null) return;
 	
-		const relays = await this.relaysCache.fetch(null, () => this.relaysRepository.findBy({
+		const relays = await this.relaysCache.fetch(() => this.relaysRepository.findBy({
 			status: 'accepted',
 		}));
 		if (relays.length === 0) return;
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 678bcfc337..52e6292a1e 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -2,12 +2,12 @@ import { Inject, Injectable } from '@nestjs/common';
 import Redis from 'ioredis';
 import { In } from 'typeorm';
 import type { Role, RoleAssignment, RoleAssignmentsRepository, RolesRepository, UsersRepository } from '@/models/index.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryKVCache, MemoryCache } from '@/misc/cache.js';
 import type { User } from '@/models/entities/User.js';
 import { DI } from '@/di-symbols.js';
 import { bindThis } from '@/decorators.js';
 import { MetaService } from '@/core/MetaService.js';
-import { UserCacheService } from '@/core/UserCacheService.js';
+import { CacheService } from '@/core/CacheService.js';
 import type { RoleCondFormulaValue } from '@/models/entities/Role.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
 import { StreamMessages } from '@/server/api/stream/types.js';
@@ -57,7 +57,7 @@ export const DEFAULT_POLICIES: RolePolicies = {
 
 @Injectable()
 export class RoleService implements OnApplicationShutdown {
-	private rolesCache: MemoryKVCache<Role[]>;
+	private rolesCache: MemoryCache<Role[]>;
 	private roleAssignmentByUserIdCache: MemoryKVCache<RoleAssignment[]>;
 
 	public static AlreadyAssignedError = class extends Error {};
@@ -77,14 +77,14 @@ export class RoleService implements OnApplicationShutdown {
 		private roleAssignmentsRepository: RoleAssignmentsRepository,
 
 		private metaService: MetaService,
-		private userCacheService: UserCacheService,
+		private cacheService: CacheService,
 		private userEntityService: UserEntityService,
 		private globalEventService: GlobalEventService,
 		private idService: IdService,
 	) {
 		//this.onMessage = this.onMessage.bind(this);
 
-		this.rolesCache = new MemoryKVCache<Role[]>(Infinity);
+		this.rolesCache = new MemoryCache<Role[]>(Infinity);
 		this.roleAssignmentByUserIdCache = new MemoryKVCache<RoleAssignment[]>(Infinity);
 
 		this.redisSubscriber.on('message', this.onMessage);
@@ -98,7 +98,7 @@ export class RoleService implements OnApplicationShutdown {
 			const { type, body } = obj.message as StreamMessages['internal']['payload'];
 			switch (type) {
 				case 'roleCreated': {
-					const cached = this.rolesCache.get(null);
+					const cached = this.rolesCache.get();
 					if (cached) {
 						cached.push({
 							...body,
@@ -110,7 +110,7 @@ export class RoleService implements OnApplicationShutdown {
 					break;
 				}
 				case 'roleUpdated': {
-					const cached = this.rolesCache.get(null);
+					const cached = this.rolesCache.get();
 					if (cached) {
 						const i = cached.findIndex(x => x.id === body.id);
 						if (i > -1) {
@@ -125,9 +125,9 @@ export class RoleService implements OnApplicationShutdown {
 					break;
 				}
 				case 'roleDeleted': {
-					const cached = this.rolesCache.get(null);
+					const cached = this.rolesCache.get();
 					if (cached) {
-						this.rolesCache.set(null, cached.filter(x => x.id !== body.id));
+						this.rolesCache.set(cached.filter(x => x.id !== body.id));
 					}
 					break;
 				}
@@ -214,9 +214,9 @@ export class RoleService implements OnApplicationShutdown {
 		// 期限切れのロールを除外
 		assigns = assigns.filter(a => a.expiresAt == null || (a.expiresAt.getTime() > now));
 		const assignedRoleIds = assigns.map(x => x.roleId);
-		const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({}));
+		const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({}));
 		const assignedRoles = roles.filter(r => assignedRoleIds.includes(r.id));
-		const user = roles.some(r => r.target === 'conditional') ? await this.userCacheService.findById(userId) : null;
+		const user = roles.some(r => r.target === 'conditional') ? await this.cacheService.findUserById(userId) : null;
 		const matchedCondRoles = roles.filter(r => r.target === 'conditional' && this.evalCond(user!, r.condFormula));
 		return [...assignedRoles, ...matchedCondRoles];
 	}
@@ -231,11 +231,11 @@ export class RoleService implements OnApplicationShutdown {
 		// 期限切れのロールを除外
 		assigns = assigns.filter(a => a.expiresAt == null || (a.expiresAt.getTime() > now));
 		const assignedRoleIds = assigns.map(x => x.roleId);
-		const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({}));
+		const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({}));
 		const assignedBadgeRoles = roles.filter(r => r.asBadge && assignedRoleIds.includes(r.id));
 		const badgeCondRoles = roles.filter(r => r.asBadge && (r.target === 'conditional'));
 		if (badgeCondRoles.length > 0) {
-			const user = roles.some(r => r.target === 'conditional') ? await this.userCacheService.findById(userId) : null;
+			const user = roles.some(r => r.target === 'conditional') ? await this.cacheService.findUserById(userId) : null;
 			const matchedBadgeCondRoles = badgeCondRoles.filter(r => this.evalCond(user!, r.condFormula));
 			return [...assignedBadgeRoles, ...matchedBadgeCondRoles];
 		} else {
@@ -301,7 +301,7 @@ export class RoleService implements OnApplicationShutdown {
 
 	@bindThis
 	public async getModeratorIds(includeAdmins = true): Promise<User['id'][]> {
-		const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({}));
+		const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({}));
 		const moderatorRoles = includeAdmins ? roles.filter(r => r.isModerator || r.isAdministrator) : roles.filter(r => r.isModerator);
 		const assigns = moderatorRoles.length > 0 ? await this.roleAssignmentsRepository.findBy({
 			roleId: In(moderatorRoles.map(r => r.id)),
@@ -321,7 +321,7 @@ export class RoleService implements OnApplicationShutdown {
 
 	@bindThis
 	public async getAdministratorIds(): Promise<User['id'][]> {
-		const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({}));
+		const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({}));
 		const administratorRoles = roles.filter(r => r.isAdministrator);
 		const assigns = administratorRoles.length > 0 ? await this.roleAssignmentsRepository.findBy({
 			roleId: In(administratorRoles.map(r => r.id)),
diff --git a/packages/backend/src/core/activitypub/ApDbResolverService.ts b/packages/backend/src/core/activitypub/ApDbResolverService.ts
index dc0a865bbe..4b032be89a 100644
--- a/packages/backend/src/core/activitypub/ApDbResolverService.ts
+++ b/packages/backend/src/core/activitypub/ApDbResolverService.ts
@@ -5,7 +5,7 @@ import type { NotesRepository, UserPublickeysRepository, UsersRepository } from
 import type { Config } from '@/config.js';
 import { MemoryKVCache } from '@/misc/cache.js';
 import type { UserPublickey } from '@/models/entities/UserPublickey.js';
-import { UserCacheService } from '@/core/UserCacheService.js';
+import { CacheService } from '@/core/CacheService.js';
 import type { Note } from '@/models/entities/Note.js';
 import { bindThis } from '@/decorators.js';
 import { RemoteUser, User } from '@/models/entities/User.js';
@@ -47,7 +47,7 @@ export class ApDbResolverService {
 		@Inject(DI.userPublickeysRepository)
 		private userPublickeysRepository: UserPublickeysRepository,
 
-		private userCacheService: UserCacheService,
+		private cacheService: CacheService,
 		private apPersonService: ApPersonService,
 	) {
 		this.publicKeyCache = new MemoryKVCache<UserPublickey | null>(Infinity);
@@ -107,11 +107,11 @@ export class ApDbResolverService {
 		if (parsed.local) {
 			if (parsed.type !== 'users') return null;
 
-			return await this.userCacheService.userByIdCache.fetchMaybe(parsed.id, () => this.usersRepository.findOneBy({
+			return await this.cacheService.userByIdCache.fetchMaybe(parsed.id, () => this.usersRepository.findOneBy({
 				id: parsed.id,
 			}).then(x => x ?? undefined)) ?? null;
 		} else {
-			return await this.userCacheService.uriPersonCache.fetch(parsed.uri, () => this.usersRepository.findOneBy({
+			return await this.cacheService.uriPersonCache.fetch(parsed.uri, () => this.usersRepository.findOneBy({
 				uri: parsed.uri,
 			}));
 		}
@@ -138,7 +138,7 @@ export class ApDbResolverService {
 		if (key == null) return null;
 
 		return {
-			user: await this.userCacheService.findById(key.userId) as RemoteUser,
+			user: await this.cacheService.findUserById(key.userId) as RemoteUser,
 			key,
 		};
 	}
diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts
index 41f7eafa41..67e907c271 100644
--- a/packages/backend/src/core/activitypub/models/ApPersonService.ts
+++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts
@@ -8,7 +8,7 @@ import type { Config } from '@/config.js';
 import type { RemoteUser } from '@/models/entities/User.js';
 import { User } from '@/models/entities/User.js';
 import { truncate } from '@/misc/truncate.js';
-import type { UserCacheService } from '@/core/UserCacheService.js';
+import type { CacheService } from '@/core/CacheService.js';
 import { normalizeForSearch } from '@/misc/normalize-for-search.js';
 import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
 import type Logger from '@/logger.js';
@@ -54,7 +54,7 @@ export class ApPersonService implements OnModuleInit {
 	private metaService: MetaService;
 	private federatedInstanceService: FederatedInstanceService;
 	private fetchInstanceMetadataService: FetchInstanceMetadataService;
-	private userCacheService: UserCacheService;
+	private cacheService: CacheService;
 	private apResolverService: ApResolverService;
 	private apNoteService: ApNoteService;
 	private apImageService: ApImageService;
@@ -97,7 +97,7 @@ export class ApPersonService implements OnModuleInit {
 		//private metaService: MetaService,
 		//private federatedInstanceService: FederatedInstanceService,
 		//private fetchInstanceMetadataService: FetchInstanceMetadataService,
-		//private userCacheService: UserCacheService,
+		//private cacheService: CacheService,
 		//private apResolverService: ApResolverService,
 		//private apNoteService: ApNoteService,
 		//private apImageService: ApImageService,
@@ -118,7 +118,7 @@ export class ApPersonService implements OnModuleInit {
 		this.metaService = this.moduleRef.get('MetaService');
 		this.federatedInstanceService = this.moduleRef.get('FederatedInstanceService');
 		this.fetchInstanceMetadataService = this.moduleRef.get('FetchInstanceMetadataService');
-		this.userCacheService = this.moduleRef.get('UserCacheService');
+		this.cacheService = this.moduleRef.get('CacheService');
 		this.apResolverService = this.moduleRef.get('ApResolverService');
 		this.apNoteService = this.moduleRef.get('ApNoteService');
 		this.apImageService = this.moduleRef.get('ApImageService');
@@ -207,14 +207,14 @@ export class ApPersonService implements OnModuleInit {
 	public async fetchPerson(uri: string, resolver?: Resolver): Promise<User | null> {
 		if (typeof uri !== 'string') throw new Error('uri is not string');
 
-		const cached = this.userCacheService.uriPersonCache.get(uri);
+		const cached = this.cacheService.uriPersonCache.get(uri);
 		if (cached) return cached;
 
 		// URIがこのサーバーを指しているならデータベースからフェッチ
 		if (uri.startsWith(this.config.url + '/')) {
 			const id = uri.split('/').pop();
 			const u = await this.usersRepository.findOneBy({ id });
-			if (u) this.userCacheService.uriPersonCache.set(uri, u);
+			if (u) this.cacheService.uriPersonCache.set(uri, u);
 			return u;
 		}
 
@@ -222,7 +222,7 @@ export class ApPersonService implements OnModuleInit {
 		const exist = await this.usersRepository.findOneBy({ uri });
 
 		if (exist) {
-			this.userCacheService.uriPersonCache.set(uri, exist);
+			this.cacheService.uriPersonCache.set(uri, exist);
 			return exist;
 		}
 		//#endregion
diff --git a/packages/backend/src/core/entities/NotificationEntityService.ts b/packages/backend/src/core/entities/NotificationEntityService.ts
index 7cffb8d568..6b9a9d3320 100644
--- a/packages/backend/src/core/entities/NotificationEntityService.ts
+++ b/packages/backend/src/core/entities/NotificationEntityService.ts
@@ -54,6 +54,7 @@ export class NotificationEntityService implements OnModuleInit {
 	public async pack(
 		src: Notification,
 		meId: User['id'],
+		// eslint-disable-next-line @typescript-eslint/ban-types
 		options: {
 			
 		},
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index 71aa2ee6de..e8474c7e0e 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -255,7 +255,6 @@ export class UserEntityService implements OnModuleInit {
 			'+',
 			'-',
 			'COUNT', 1);
-		console.log('latestNotificationIdsRes', latestNotificationIdsRes);
 		const latestNotificationId = latestNotificationIdsRes[0]?.[0];
 
 		return latestNotificationId != null && (latestReadNotificationId == null || latestReadNotificationId < latestNotificationId);
diff --git a/packages/backend/src/misc/cache.ts b/packages/backend/src/misc/cache.ts
index a805d18421..870dfd237c 100644
--- a/packages/backend/src/misc/cache.ts
+++ b/packages/backend/src/misc/cache.ts
@@ -1,9 +1,94 @@
+import Redis from 'ioredis';
 import { bindThis } from '@/decorators.js';
 
+// redis通すとDateのインスタンスはstringに変換されるので
+type Serialized<T> = {
+	[K in keyof T]:
+		T[K] extends Date
+			? string
+			: T[K] extends (Date | null)
+				? (string | null)
+				: T[K] extends Record<string, any>
+					? Serialized<T[K]>
+					: T[K];
+};
+
+export class RedisKVCache<T> {
+	private redisClient: Redis.Redis;
+	private name: string;
+	private lifetime: number;
+	private memoryCache: MemoryKVCache<T>;
+
+	constructor(redisClient: RedisKVCache<never>['redisClient'], name: RedisKVCache<never>['name'], lifetime: RedisKVCache<never>['lifetime'], memoryCacheLifetime: number) {
+		this.redisClient = redisClient;
+		this.name = name;
+		this.lifetime = lifetime;
+		this.memoryCache = new MemoryKVCache(memoryCacheLifetime);
+	}
+
+	@bindThis
+	public async set(key: string, value: T): Promise<void> {
+		this.memoryCache.set(key, value);
+		if (this.lifetime === Infinity) {
+			await this.redisClient.set(
+				`kvcache:${this.name}:${key}`,
+				JSON.stringify(value),
+			);
+		} else {
+			await this.redisClient.set(
+				`kvcache:${this.name}:${key}`,
+				JSON.stringify(value),
+				'ex', Math.round(this.lifetime / 1000),
+			);
+		}
+	}
+
+	@bindThis
+	public async get(key: string): Promise<Serialized<T> | T | undefined> {
+		const memoryCached = this.memoryCache.get(key);
+		if (memoryCached !== undefined) return memoryCached;
+
+		const cached = await this.redisClient.get(`kvcache:${this.name}:${key}`);
+		if (cached == null) return undefined;
+		return JSON.parse(cached);
+	}
+
+	@bindThis
+	public async delete(key: string): Promise<void> {
+		this.memoryCache.delete(key);
+		await this.redisClient.del(`kvcache:${this.name}:${key}`);
+	}
+
+	/**
+ * キャッシュがあればそれを返し、無ければfetcherを呼び出して結果をキャッシュ&返します
+ * optional: キャッシュが存在してもvalidatorでfalseを返すとキャッシュ無効扱いにします
+ */
+	@bindThis
+	public async fetch(key: string, fetcher: () => Promise<T>, validator?: (cachedValue: Serialized<T> | T) => boolean): Promise<Serialized<T> | T> {
+		const cachedValue = await this.get(key);
+		if (cachedValue !== undefined) {
+			if (validator) {
+				if (validator(cachedValue)) {
+					// Cache HIT
+					return cachedValue;
+				}
+			} else {
+				// Cache HIT
+				return cachedValue;
+			}
+		}
+
+		// Cache MISS
+		const value = await fetcher();
+		this.set(key, value);
+		return value;
+	}
+}
+
 // TODO: メモリ節約のためあまり参照されないキーを定期的に削除できるようにする?
 
 export class MemoryKVCache<T> {
-	public cache: Map<string | null, { date: number; value: T; }>;
+	public cache: Map<string, { date: number; value: T; }>;
 	private lifetime: number;
 
 	constructor(lifetime: MemoryKVCache<never>['lifetime']) {
@@ -12,7 +97,7 @@ export class MemoryKVCache<T> {
 	}
 
 	@bindThis
-	public set(key: string | null, value: T): void {
+	public set(key: string, value: T): void {
 		this.cache.set(key, {
 			date: Date.now(),
 			value,
@@ -20,7 +105,7 @@ export class MemoryKVCache<T> {
 	}
 
 	@bindThis
-	public get(key: string | null): T | undefined {
+	public get(key: string): T | undefined {
 		const cached = this.cache.get(key);
 		if (cached == null) return undefined;
 		if ((Date.now() - cached.date) > this.lifetime) {
@@ -31,7 +116,7 @@ export class MemoryKVCache<T> {
 	}
 
 	@bindThis
-	public delete(key: string | null) {
+	public delete(key: string) {
 		this.cache.delete(key);
 	}
 
@@ -40,7 +125,7 @@ export class MemoryKVCache<T> {
 	 * optional: キャッシュが存在してもvalidatorでfalseを返すとキャッシュ無効扱いにします
 	 */
 	@bindThis
-	public async fetch(key: string | null, fetcher: () => Promise<T>, validator?: (cachedValue: T) => boolean): Promise<T> {
+	public async fetch(key: string, fetcher: () => Promise<T>, validator?: (cachedValue: T) => boolean): Promise<T> {
 		const cachedValue = this.get(key);
 		if (cachedValue !== undefined) {
 			if (validator) {
@@ -65,7 +150,7 @@ export class MemoryKVCache<T> {
 	 * optional: キャッシュが存在してもvalidatorでfalseを返すとキャッシュ無効扱いにします
 	 */
 	@bindThis
-	public async fetchMaybe(key: string | null, fetcher: () => Promise<T | undefined>, validator?: (cachedValue: T) => boolean): Promise<T | undefined> {
+	public async fetchMaybe(key: string, fetcher: () => Promise<T | undefined>, validator?: (cachedValue: T) => boolean): Promise<T | undefined> {
 		const cachedValue = this.get(key);
 		if (cachedValue !== undefined) {
 			if (validator) {
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts
index 71865c778a..a9af22ad09 100644
--- a/packages/backend/src/queue/processors/DeliverProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts
@@ -7,7 +7,7 @@ import { MetaService } from '@/core/MetaService.js';
 import { ApRequestService } from '@/core/activitypub/ApRequestService.js';
 import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 import { FetchInstanceMetadataService } from '@/core/FetchInstanceMetadataService.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryCache } from '@/misc/cache.js';
 import type { Instance } from '@/models/entities/Instance.js';
 import InstanceChart from '@/core/chart/charts/instance.js';
 import ApRequestChart from '@/core/chart/charts/ap-request.js';
@@ -22,7 +22,7 @@ import type { DeliverJobData } from '../types.js';
 @Injectable()
 export class DeliverProcessorService {
 	private logger: Logger;
-	private suspendedHostsCache: MemoryKVCache<Instance[]>;
+	private suspendedHostsCache: MemoryCache<Instance[]>;
 	private latest: string | null;
 
 	constructor(
@@ -46,7 +46,7 @@ export class DeliverProcessorService {
 		private queueLoggerService: QueueLoggerService,
 	) {
 		this.logger = this.queueLoggerService.logger.createSubLogger('deliver');
-		this.suspendedHostsCache = new MemoryKVCache<Instance[]>(1000 * 60 * 60);
+		this.suspendedHostsCache = new MemoryCache<Instance[]>(1000 * 60 * 60);
 	}
 
 	@bindThis
@@ -60,14 +60,14 @@ export class DeliverProcessorService {
 		}
 
 		// isSuspendedなら中断
-		let suspendedHosts = this.suspendedHostsCache.get(null);
+		let suspendedHosts = this.suspendedHostsCache.get();
 		if (suspendedHosts == null) {
 			suspendedHosts = await this.instancesRepository.find({
 				where: {
 					isSuspended: true,
 				},
 			});
-			this.suspendedHostsCache.set(null, suspendedHosts);
+			this.suspendedHostsCache.set(suspendedHosts);
 		}
 		if (suspendedHosts.map(x => x.host).includes(this.utilityService.toPuny(host))) {
 			return 'skip (suspended)';
diff --git a/packages/backend/src/server/NodeinfoServerService.ts b/packages/backend/src/server/NodeinfoServerService.ts
index 3387bd53aa..66c1faaac2 100644
--- a/packages/backend/src/server/NodeinfoServerService.ts
+++ b/packages/backend/src/server/NodeinfoServerService.ts
@@ -4,7 +4,7 @@ import type { NotesRepository, UsersRepository } from '@/models/index.js';
 import type { Config } from '@/config.js';
 import { MetaService } from '@/core/MetaService.js';
 import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
-import { MemoryKVCache } from '@/misc/cache.js';
+import { MemoryCache } from '@/misc/cache.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
 import { bindThis } from '@/decorators.js';
 import NotesChart from '@/core/chart/charts/notes.js';
@@ -118,17 +118,17 @@ export class NodeinfoServerService {
 			};
 		};
 
-		const cache = new MemoryKVCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10);
+		const cache = new MemoryCache<Awaited<ReturnType<typeof nodeinfo2>>>(1000 * 60 * 10);
 
 		fastify.get(nodeinfo2_1path, async (request, reply) => {
-			const base = await cache.fetch(null, () => nodeinfo2());
+			const base = await cache.fetch(() => nodeinfo2());
 
 			reply.header('Cache-Control', 'public, max-age=600');
 			return { version: '2.1', ...base };
 		});
 
 		fastify.get(nodeinfo2_0path, async (request, reply) => {
-			const base = await cache.fetch(null, () => nodeinfo2());
+			const base = await cache.fetch(() => nodeinfo2());
 
 			delete (base as any).software.repository;
 
diff --git a/packages/backend/src/server/api/AuthenticateService.ts b/packages/backend/src/server/api/AuthenticateService.ts
index cd6bce9ef9..6548c475b2 100644
--- a/packages/backend/src/server/api/AuthenticateService.ts
+++ b/packages/backend/src/server/api/AuthenticateService.ts
@@ -5,7 +5,7 @@ import type { LocalUser } from '@/models/entities/User.js';
 import type { AccessToken } from '@/models/entities/AccessToken.js';
 import { MemoryKVCache } from '@/misc/cache.js';
 import type { App } from '@/models/entities/App.js';
-import { UserCacheService } from '@/core/UserCacheService.js';
+import { CacheService } from '@/core/CacheService.js';
 import isNativeToken from '@/misc/is-native-token.js';
 import { bindThis } from '@/decorators.js';
 
@@ -30,7 +30,7 @@ export class AuthenticateService {
 		@Inject(DI.appsRepository)
 		private appsRepository: AppsRepository,
 
-		private userCacheService: UserCacheService,
+		private cacheService: CacheService,
 	) {
 		this.appCache = new MemoryKVCache<App>(Infinity);
 	}
@@ -42,7 +42,7 @@ export class AuthenticateService {
 		}
 	
 		if (isNativeToken(token)) {
-			const user = await this.userCacheService.localUserByNativeTokenCache.fetch(token,
+			const user = await this.cacheService.localUserByNativeTokenCache.fetch(token,
 				() => this.usersRepository.findOneBy({ token }) as Promise<LocalUser | null>);
 	
 			if (user == null) {
@@ -67,7 +67,7 @@ export class AuthenticateService {
 				lastUsedAt: new Date(),
 			});
 	
-			const user = await this.userCacheService.localUserByIdCache.fetch(accessToken.userId,
+			const user = await this.cacheService.localUserByIdCache.fetch(accessToken.userId,
 				() => this.usersRepository.findOneBy({
 					id: accessToken.userId,
 				}) as Promise<LocalUser>);
diff --git a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
index f942f43cc8..786e64374c 100644
--- a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
+++ b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
@@ -34,7 +34,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const freshUser = await this.usersRepository.findOneByOrFail({ id: me.id });
-			const oldToken = freshUser.token;
+			const oldToken = freshUser.token!;
 
 			const profile = await this.userProfilesRepository.findOneByOrFail({ userId: me.id });
 
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index b1eaab3908..46b16e9dce 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -18,6 +18,7 @@ import { AccountUpdateService } from '@/core/AccountUpdateService.js';
 import { HashtagService } from '@/core/HashtagService.js';
 import { DI } from '@/di-symbols.js';
 import { RoleService } from '@/core/RoleService.js';
+import { CacheService } from '@/core/CacheService.js';
 import { ApiError } from '../../error.js';
 
 export const meta = {
@@ -152,6 +153,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		private accountUpdateService: AccountUpdateService,
 		private hashtagService: HashtagService,
 		private roleService: RoleService,
+		private cacheService: CacheService,
 	) {
 		super(meta, paramDef, async (ps, _user, token) => {
 			const user = await this.usersRepository.findOneByOrFail({ id: _user.id });
@@ -276,9 +278,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				includeSecrets: isSecure,
 			});
 
+			const updatedProfile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id });
+
+			this.cacheService.userProfileCache.set(user.id, updatedProfile);
+
 			// Publish meUpdated event
 			this.globalEventService.publishMainStream(user.id, 'meUpdated', iObj);
-			this.globalEventService.publishUserEvent(user.id, 'updateUserProfile', await this.userProfilesRepository.findOneByOrFail({ userId: user.id }));
+			this.globalEventService.publishUserEvent(user.id, 'updateUserProfile', updatedProfile);
 
 			// 鍵垢を解除したとき、溜まっていたフォローリクエストがあるならすべて承認
 			if (user.isLocked && ps.isLocked === false) {
diff --git a/packages/backend/src/server/api/endpoints/mute/create.ts b/packages/backend/src/server/api/endpoints/mute/create.ts
index 9099eea52e..fd062e1cab 100644
--- a/packages/backend/src/server/api/endpoints/mute/create.ts
+++ b/packages/backend/src/server/api/endpoints/mute/create.ts
@@ -7,6 +7,7 @@ import type { Muting } from '@/models/entities/Muting.js';
 import { GlobalEventService } from '@/core/GlobalEventService.js';
 import { DI } from '@/di-symbols.js';
 import { GetterService } from '@/server/api/GetterService.js';
+import { CacheService } from '@/core/CacheService.js';
 import { ApiError } from '../../error.js';
 
 export const meta = {
@@ -65,6 +66,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		private globalEventService: GlobalEventService,
 		private getterService: GetterService,
 		private idService: IdService,
+		private cacheService: CacheService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const muter = me;
@@ -103,6 +105,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				muteeId: mutee.id,
 			} as Muting);
 
+			this.cacheService.userMutingsCache.delete(muter.id);
 			this.globalEventService.publishUserEvent(me.id, 'mute', mutee);
 		});
 	}
diff --git a/packages/backend/src/server/api/endpoints/renote-mute/create.ts b/packages/backend/src/server/api/endpoints/renote-mute/create.ts
index 051a005b67..b285269617 100644
--- a/packages/backend/src/server/api/endpoints/renote-mute/create.ts
+++ b/packages/backend/src/server/api/endpoints/renote-mute/create.ts
@@ -92,8 +92,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				muterId: muter.id,
 				muteeId: mutee.id,
 			} as RenoteMuting);
-
-		// publishUserEvent(user.id, 'mute', mutee);
 		});
 	}
 }
diff --git a/packages/backend/src/server/api/stream/types.ts b/packages/backend/src/server/api/stream/types.ts
index b8f50e0546..1e6e51e76d 100644
--- a/packages/backend/src/server/api/stream/types.ts
+++ b/packages/backend/src/server/api/stream/types.ts
@@ -19,7 +19,7 @@ import type { EventEmitter } from 'events';
 //#region Stream type-body definitions
 export interface InternalStreamTypes {
 	userChangeSuspendedState: { id: User['id']; isSuspended: User['isSuspended']; };
-	userTokenRegenerated: { id: User['id']; oldToken: User['token']; newToken: User['token']; };
+	userTokenRegenerated: { id: User['id']; oldToken: string; newToken: string; };
 	remoteUserUpdated: { id: User['id']; };
 	follow: { followerId: User['id']; followeeId: User['id']; };
 	unfollow: { followerId: User['id']; followeeId: User['id']; };
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
index 6fe04274e6..907f1f2edc 100644
--- a/packages/backend/test/unit/RoleService.ts
+++ b/packages/backend/test/unit/RoleService.ts
@@ -11,7 +11,7 @@ import type { Role, RolesRepository, RoleAssignmentsRepository, UsersRepository,
 import { DI } from '@/di-symbols.js';
 import { MetaService } from '@/core/MetaService.js';
 import { genAid } from '@/misc/id/aid.js';
-import { UserCacheService } from '@/core/UserCacheService.js';
+import { CacheService } from '@/core/CacheService.js';
 import { IdService } from '@/core/IdService.js';
 import { GlobalEventService } from '@/core/GlobalEventService.js';
 import { sleep } from '../utils.js';
@@ -65,7 +65,7 @@ describe('RoleService', () => {
 			],
 			providers: [
 				RoleService,
-				UserCacheService,
+				CacheService,
 				IdService,
 				GlobalEventService,
 			],