diff --git a/.config/docker_example.yml b/.config/docker_example.yml index 39682e1542..5cb17a44d1 100644 --- a/.config/docker_example.yml +++ b/.config/docker_example.yml @@ -103,6 +103,7 @@ redis: # port: 7700 # apiKey: '' # ssl: true +# index: '' # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── diff --git a/.config/example.yml b/.config/example.yml index ef8373c4da..c179395966 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -103,6 +103,7 @@ redis: # port: 7700 # apiKey: '' # ssl: true +# index: '' # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── diff --git a/.devcontainer/devcontainer.yml b/.devcontainer/devcontainer.yml index 1d761ae75e..824a046dc0 100644 --- a/.devcontainer/devcontainer.yml +++ b/.devcontainer/devcontainer.yml @@ -103,6 +103,7 @@ redis: # port: 7700 # apiKey: '' # ssl: true +# index: '' # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── diff --git a/.github/reviewer-lottery.yml b/.github/reviewer-lottery.yml index fd2fb1913f..c88e1342de 100644 --- a/.github/reviewer-lottery.yml +++ b/.github/reviewer-lottery.yml @@ -6,5 +6,4 @@ groups: - syuilo - acid-chicken - EbiseLutica - - rinsuki - tamaina diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml index eb6ace27da..b04f4260c3 100644 --- a/.github/workflows/storybook.yml +++ b/.github/workflows/storybook.yml @@ -20,7 +20,7 @@ jobs: fetch-depth: 0 submodules: true - name: Checkout HEAD - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request_target' run: git checkout ${{ github.head_ref }} - name: Install pnpm uses: pnpm/action-setup@v2 @@ -41,12 +41,12 @@ jobs: - name: Build storybook run: pnpm --filter frontend build-storybook - name: Publish to Chromatic - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/master' + if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/master' run: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static env: CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - name: Publish to Chromatic - if: github.event_name != 'pull_request' && github.ref != 'refs/heads/master' + if: github.event_name != 'pull_request_target' && github.ref != 'refs/heads/master' id: chromatic_push run: | DIFF="${{ github.event.before }} HEAD" @@ -57,11 +57,15 @@ jobs: if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then echo "skip=true" >> $GITHUB_OUTPUT fi - pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER") + if pnpm --filter frontend chromatic -d storybook-static $(echo "$CHROMATIC_PARAMETER"); then + echo "success=true" >> $GITHUB_OUTPUT + else + echo "success=false" >> $GITHUB_OUTPUT + fi env: CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - name: Publish to Chromatic - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request_target' id: chromatic_pull_request run: | DIFF="${{ github.base_ref }} HEAD" @@ -75,9 +79,21 @@ jobs: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER") env: CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + - name: Notify that Chromatic detects changes + uses: actions/github-script@v6.4.0 + if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false' + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + github.rest.repos.createCommitComment({ + owner: context.repo.owner, + repo: context.repo.repo, + commit_sha: context.sha, + body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).' + }) - name: Notify that Chromatic will skip testing uses: actions/github-script@v6.4.0 - if: github.event_name == 'pull_request' && steps.chromatic_pull_request.outputs.skip == 'true' + if: github.event_name == 'pull_request_target' && steps.chromatic_pull_request.outputs.skip == 'true' with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e097c683..8594c42d10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,30 @@ --> +## 13.12.2 + +## NOTE +Meilisearchの設定に`index`が必要になりました。値はMisskeyサーバーのホスト名にすることをお勧めします(アルファベット、ハイフン、アンダーバーのみ使用可能)。例: `misskey-io` +過去に作成された`notes`インデックスは、`<index名>---notes`にリネームが必要です。例: `misskey-io---notes` + +### General +- 投稿したコンテンツのAIによる学習を軽減するオプションを追加 + +### Client +- ユーザーを指定してのノート検索が可能に +- アカウント初期設定ウィザードにプライバシー設定を追加 +- リテンション率チャートに折れ線グラフを追加 +- Fix: ブラーエフェクトを有効にしている状態で高負荷になる問題を修正 +- Fix: Pageにおいて画像ブロックに画像を設定できない問題を修正 +- Fix: カラーバーがリプライには表示されないのを修正 +- Fix: チャンネル内の検索ボックスが挙動不審な問題を修正 +- Fix: リテンションチャートのレンダリングを修正 +- Fix: リアクションエフェクトのレンダリングの問題を修正 + +### Server +- センシティブワードの登録にAnd、正規表現が使用できるようになりました。 +- Fix: ひとつのMeilisearchサーバーを複数のMisskeyサーバーで使えない問題を修正 + ## 13.12.1 ### Client diff --git a/chart/files/default.yml b/chart/files/default.yml index 342c6091f0..e62032abfd 100644 --- a/chart/files/default.yml +++ b/chart/files/default.yml @@ -124,6 +124,7 @@ redis: # port: 7700 # apiKey: '' # ssl: true +# index: '' # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── diff --git a/cypress/e2e/basic.cy.js b/cypress/e2e/basic.cy.js index 73f6e7a0f0..2515c14ad6 100644 --- a/cypress/e2e/basic.cy.js +++ b/cypress/e2e/basic.cy.js @@ -171,6 +171,10 @@ describe('After user signed in', () => { cy.get('[data-cy-user-setup-continue]').click(); + // プライバシー設定 + + cy.get('[data-cy-user-setup-continue]').click(); + // フォローはスキップ cy.get('[data-cy-user-setup-continue]').click(); diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 9a5936660e..bfca086f5c 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -19,6 +19,7 @@ noNotes: "لم يُعثر على أية ملاحظات" noNotifications: "ليس هناك أية اشعارات" instance: "مثيل الخادم" settings: "الاعدادات" +notificationSettings: "إعدادات الإشعارات" basicSettings: "الاعدادات الأساسية" otherSettings: "إعدادات أخرى" openInWindow: "افتح في نافذة جديدة" @@ -127,6 +128,7 @@ unblockConfirm: "أمتأكد من إلغاء حجب هذا الحساب؟" suspendConfirm: "أمتأكد من تعليق الحساب؟" unsuspendConfirm: "أمتأكد من إلغاء تعليق؟" selectList: "اختر قائمة" +selectChannel: "اختر قناة" selectAntenna: "اختر هوائيًا" selectWidget: "اختر ودجة" editWidgets: "عدّل الودجات" @@ -250,6 +252,9 @@ noMoreHistory: "لا يوجد المزيد من التاريخ" startMessaging: "ابدأ محادثة" nUsersRead: "قرأه {n}" agreeTo: "اوافق على {0}" +agree: "أقبل" +basicNotesBeforeCreateAccount: "ملاحظات مهمة" +termsOfService: "شروط الخدمة" start: "البداية" home: "الرئيسي" remoteUserCaution: "هذه المعلومات قد لا تكون مكتملة بما أن المستخدم من مثيل بعيد." @@ -379,6 +384,8 @@ about: "عن" aboutMisskey: "عن Misskey" administrator: "المدير" token: "الرمز المميز" +2fa: "الاستيثاق بعاملَيْن" +totp: "تطبيق استيثاق" moderator: "مشرِف" moderation: "الإشراف" nUsersMentioned: "{n} مستخدمين أُشير إليهم" @@ -506,6 +513,7 @@ userSuspended: "عُلق هذا المستخدم." userSilenced: "كُتم هذا المستخدم." yourAccountSuspendedTitle: "هذا الحساب معلق" yourAccountSuspendedDescription: "عُلق الحساب بسبب انتهاك شروط خدمة المثيل و ما شابه. إذا أردت معرفة التفصيل تواصل مع مدير المثيل. رجاءً لا تنشئ حساب جديد." +accountDeleted: "حُذف الحساب" menu: "القائمة" divider: "فاصل" addItem: "إضافة عنصر" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index d678fadd4a..843470cf46 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -990,6 +990,7 @@ rolesAssignedToMe: "Mir zugewiesene Rollen" resetPasswordConfirm: "Wirklich Passwort zurücksetzen?" sensitiveWords: "Sensible Wörter" sensitiveWordsDescription: "Die Notizsichtbarkeit aller Notizen, die diese Wörter enthalten, wird automatisch auf \"Startseite\" gesetzt. Durch Zeilenumbrüche können mehrere konfiguriert werden." +sensitiveWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-Verknüpfungen angegeben werden und durch das Umgeben von Schrägstrichen können reguläre Ausdrücke verwendet werden." notesSearchNotAvailable: "Die Notizsuche ist nicht verfügbar." license: "Lizenz" unfavoriteConfirm: "Wirklich aus Favoriten entfernen?" @@ -1038,10 +1039,16 @@ thisChannelArchived: "Dieser Kanal wurde archiviert." displayOfNote: "Anzeige von Notizen" initialAccountSetting: "Kontoeinrichtung" youFollowing: "Gefolgt" +preventAiLearning: "Verwendung in machinellem Lernen (Generative bzw. Prediktive AI/KI) ablehnen" +preventAiLearningDescription: "Fordert Crawler auf, gepostetes Text- oder Bildmaterial usw. nicht in Datensätzen für maschinelles Lernen (Generative bzw. Prediktive AI/KI) zu verwenden. Dies wird durch das Hinzufügen einer \"noai\"-Flag in der HTML-Antwort des jeweiligen Inhalts erreicht. Da diese Flag jedoch ignoriert werden kann, ist eine vollständige Verhinderung hierdurch nicht möglich." +options: "Optionen" +specifyUser: "Spezifischer Benutzer" _initialAccountSetting: accountCreated: "Dein Konto wurde erfolgreich erstellt!" + letsStartAccountSetup: "Lass uns nun dein Konto einrichten." letsFillYourProfile: "Lass uns zuerst dein Profil einrichten." profileSetting: "Profileinstellungen" + privacySetting: "Privatsphäreneinstellungen" theseSettingsCanEditLater: "Diese Einstellungen kannst du jederzeit ändern." youCanEditMoreSettingsInSettingsPageLater: "In den Einstellungen findest du noch viele weitere Optionen. Schau dort später mal vorbei." followUsers: "Folge zuerst ein paar Nutzern, um deine Chronik zu füllen." diff --git a/locales/en-US.yml b/locales/en-US.yml index ea91bcc0e5..3ea2313b2f 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -990,6 +990,7 @@ rolesAssignedToMe: "Roles assigned to me" resetPasswordConfirm: "Really reset your password?" sensitiveWords: "Sensitive words" sensitiveWordsDescription: "The visibility of all notes containing any of the configured words will be set to \"Home\" automatically. You can list multiple by separating them via line breaks." +sensitiveWordsDescription2: "Using spaces will create AND expressions and surrounding keywords with slashes will turn them into a regular expression." notesSearchNotAvailable: "Note search is unavailable." license: "License" unfavoriteConfirm: "Really remove from favorites?" @@ -1036,20 +1037,26 @@ channelArchiveConfirmTitle: "Really archive {name}?" channelArchiveConfirmDescription: "An archived channel won't appear in the channel list or search results anymore. New posts can also not be added to it anymore." thisChannelArchived: "This channel has been archived." displayOfNote: "Note display" -initialAccountSetting: "Profile configuration" +initialAccountSetting: "Profile setup" youFollowing: "Followed" +preventAiLearning: "Reject usage in Machine Learning (Generative AI)" +preventAiLearningDescription: "Requests crawlers to not use posted text or image material etc. in machine learning (Predictive / Generative AI) data sets. This is achieved by adding a \"noai\" HTML-Response flag to the respective content. A complete prevention can however not be achieved through this flag, as it may simply be ignored." +options: "Options" +specifyUser: "Specific user" _initialAccountSetting: accountCreated: "Your account was successfully created!" + letsStartAccountSetup: "For starters, let's set up your profile." letsFillYourProfile: "First, let's set up your profile." profileSetting: "Profile settings" + privacySetting: "Privacy settings" theseSettingsCanEditLater: "You can always change these settings later." youCanEditMoreSettingsInSettingsPageLater: "There are many more settings you can configure from the \"Settings\" page. Be sure to visit it later." followUsers: "Try following some users that interest you to build up your timeline." pushNotificationDescription: "Enabling push notifications will allow you to receive notifications from {name} directly on your device." - initialAccountSettingCompleted: "Profile configuration complete!" + initialAccountSettingCompleted: "Profile setup complete!" haveFun: "Enjoy {name}!" ifYouNeedLearnMore: "If you'd like to learn more about how to use {name} (Misskey), please visit {link}." - skipAreYouSure: "Really skip profile configuration?" + skipAreYouSure: "Really skip profile setup?" _serverRules: description: "A set of rules to be displayed before registration. Setting a summary of the Terms of Service is recommended." _accountMigration: @@ -1321,7 +1328,7 @@ _role: isConditionalRole: "This is a conditional role." isPublic: "Public role" descriptionOfIsPublic: "Anyone will be able to view a list of users assigned to this role. In addition, this role will be displayed in the profiles of assigned users." - options: "Role options" + options: "Options" policies: "Policies" baseRole: "Role template" useBaseValue: "Use role template value" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 42d52e5a2b..b043ecf3cf 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -993,6 +993,7 @@ accountMigration: "Migración de cuenta" accountMoved: "Este usuario se ha mudado a una nueva cuenta:" horizontal: "Horizontal" youFollowing: "Siguiendo" +options: "Opción" _accountMigration: moveFrom: "Trasladar de otra cuenta a ésta" moveFromLabel: "Cuenta desde la que se realiza el traslado:" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index e98ee9ff9b..d8ac41c925 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -452,6 +452,7 @@ native: "Natif" disableDrawer: "Les menus ne s'affichent pas dans le tiroir" noHistory: "Pas d'historique" signinHistory: "Historique de connexion" +enableAdvancedMfm: "Activer la MFM avancée" doing: "En cours..." category: "Catégorie" tags: "Étiquettes" @@ -846,6 +847,7 @@ rateLimitExceeded: "Limite de taux dépassée" cropImage: "Recadrer l'image" cropImageAsk: "Voulez-vous recadrer cette image ?" cropYes: "Rogner" +cropNo: "Utiliser en l'état" file: "Fichiers" recentNHours: "Dernières {n} heures" recentNDays: "Derniers {n} jours" @@ -912,6 +914,7 @@ color: "Couleur" manageCustomEmojis: "Gestion des émojis personnalisés" preset: "Préréglage" selectFromPresets: "Sélectionner à partir des préréglages" +thisPostMayBeAnnoyingCancel: "Annuler" license: "Licence" video: "Vidéo" videos: "Vidéos" @@ -925,6 +928,7 @@ leftBottom: "En bas à gauche" rightBottom: "En bas à droite" vertical: "Vertical" horizontal: "Latéral" +serverRules: "Règles du serveur" youFollowing: "Abonné·e" _achievements: _types: @@ -934,10 +938,13 @@ _achievements: _notes100000: title: "ALL YOUR NOTE ARE BELONG TO US" _login3: + title: "Débutant Ⅰ" description: "Se connecter pour un total de 3 jours" _login7: + title: "Débutant Ⅱ" description: "Se connecter pour un total de 7 jours" _login15: + title: "Débutant Ⅲ" description: "Se connecter pour un total de 15 jours" _login30: description: "Se connecter pour un total de 30 jours" @@ -945,6 +952,22 @@ _achievements: description: "Se connecter pour un total de 60 jours" _login100: description: "Se connecter pour un total de 100 jours" + _login200: + description: "Se connecter pour un total de 200 jours" + _login300: + description: "Se connecter pour un total de 300 jours" + _login400: + description: "Se connecter pour un total de 400 jours" + _login500: + description: "Se connecter pour un total de 500 jours" + _login600: + description: "Se connecter pour un total de 600 jours" + _login700: + description: "Se connecter pour un total de 700 jours" + _login800: + description: "Se connecter pour un total de 800 jours" + _login900: + description: "Se connecter pour un total de 900 jours" _login1000: flavor: "Merci d'utiliser Misskey !" _markedAsCat: @@ -954,8 +977,12 @@ _achievements: title: "Beaucoup d'amis" _followers10: title: "Abonnez-moi !" + _iLoveMisskey: + title: "J’adore Misskey" _viewInstanceChart: title: "Analyste" + _loggedInOnBirthday: + title: "Joyeux Anniversaire !" _loggedInOnNewYearsDay: title: "Bonne année !" _role: diff --git a/locales/id-ID.yml b/locales/id-ID.yml index 5159775fc4..df42697ccb 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -955,6 +955,7 @@ disableFederationConfirmWarn: "Mematikan federasi tidak membuat kiriman menjadi disableFederationOk: "Matikan federasi" horizontal: "Horisontal" youFollowing: "Mengikuti" +options: "Opsi peran" _achievements: earnedAt: "Terbuka pada" _types: diff --git a/locales/it-IT.yml b/locales/it-IT.yml index cacd91cac9..3c1a26e85c 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -1020,6 +1020,7 @@ pleaseConfirmBelowBeforeSignup: "Ai sensi del regolamento EU 679/2016 GDPR, auto pleaseAgreeAllToContinue: "Per continuare, occorre selezionare ed essere d'accordo su tutto." continue: "Continua" youFollowing: "Seguiti" +options: "Opzioni del ruolo" _serverRules: description: "In Europa è necessario mostrare l'informativa sul trattamento dei dati personali, prima della registrazione al servizio." _accountMigration: diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 8bbf9459f5..0b7108fe6d 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -689,7 +689,7 @@ no: "いいえ" driveFilesCount: "ドライブのファイル数" driveUsage: "ドライブ使用量" noCrawle: "クローラーによるインデックスを拒否" -noCrawleDescription: "検索エンジンにあなたのユーザーページ、ノート、Pagesなどのコンテンツを登録(インデックス)しないよう要請します。" +noCrawleDescription: "外部の検索エンジンにあなたのユーザーページ、ノート、Pagesなどのコンテンツを登録(インデックス)しないよう要求します。" lockedAccountInfo: "フォローを承認制にしても、ノートの公開範囲を「フォロワー」にしない限り、誰でもあなたのノートを見ることができます。" alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする" loadRawImages: "添付画像のサムネイルをオリジナル画質にする" @@ -832,6 +832,8 @@ breakFollow: "フォロワーを解除" breakFollowConfirm: "フォロワー解除しますか?" itsOn: "オンになっています" itsOff: "オフになっています" +on: "オン" +off: "オフ" emailRequiredForSignup: "アカウント登録にメールアドレスを必須にする" unread: "未読" filter: "フィルタ" @@ -990,6 +992,7 @@ rolesAssignedToMe: "自分に割り当てられたロール" resetPasswordConfirm: "パスワードリセットしますか?" sensitiveWords: "センシティブワード" sensitiveWordsDescription: "設定したワードが含まれるノートの公開範囲をホームにします。改行で区切って複数設定できます。" +sensitiveWordsDescription2: "スペースで区切るとAND指定になり、キーワードをスラッシュで囲むと正規表現になります。" notesSearchNotAvailable: "ノート検索は利用できません。" license: "ライセンス" unfavoriteConfirm: "お気に入り解除しますか?" @@ -1038,12 +1041,17 @@ thisChannelArchived: "このチャンネルはアーカイブされています displayOfNote: "ノートの表示" initialAccountSetting: "初期設定" youFollowing: "フォロー中" +preventAiLearning: "生成AIによる学習を拒否" +preventAiLearningDescription: "外部の文章生成AIや画像生成AIに対して、投稿したノートや画像などのコンテンツを学習の対象にしないように要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されますが、この要求に従うかはそのAI次第であるため、学習を完全に防止するものではありません。" +options: "オプション" +specifyUser: "ユーザー指定" _initialAccountSetting: accountCreated: "アカウントの作成が完了しました!" letsStartAccountSetup: "アカウントの初期設定を行いましょう。" letsFillYourProfile: "まずはあなたのプロフィールを設定しましょう。" profileSetting: "プロフィール設定" + privacySetting: "プライバシー設定" theseSettingsCanEditLater: "これらの設定は後から変更できます。" youCanEditMoreSettingsInSettingsPageLater: "この他にも様々な設定を「設定」ページから行えます。ぜひ後で確認してみてください。" followUsers: "タイムラインを構築するため、気になるユーザーをフォローしてみましょう。" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 512cce1452..d09f75155d 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -689,7 +689,7 @@ no: "あかん" driveFilesCount: "ドライブのファイル数" driveUsage: "ドライブ使用量やで" noCrawle: "クローラーによるインデックスを拒否するで" -noCrawleDescription: "検索エンジンにあんたのユーザーページ、ノート、Pagesとかのコンテンツを登録(インデックス)せんように頼むで。邪魔すんねんやったら帰って〜。" +noCrawleDescription: "検索エンジンにあんたのユーザーページ、ノート、Pagesとかのコンテンツを登録(インデックス)せぇへんように頼むで。" lockedAccountInfo: "フォローを承認制にしとっても、ノートの公開範囲を「フォロワー」にせぇへん限り、誰でもあんたのノートを見れるで。" alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで" loadRawImages: "添付画像のサムネイルをオリジナル画質にするで" @@ -990,6 +990,7 @@ rolesAssignedToMe: "自分に割り当てられたロール" resetPasswordConfirm: "パスワード作り直すんでええな?" sensitiveWords: "けったいな単語" sensitiveWordsDescription: "設定した単語が入っとるノートの公開範囲をホームにしたるわ。改行で区切ったら複数設定できるで。" +sensitiveWordsDescription2: "スペースで区切るとAND指定、キーワードをスラッシュで囲んだら正規表現や。" notesSearchNotAvailable: "ノート検索は使われへんで。" license: "ライセンス" unfavoriteConfirm: "ほんまに気に入らんの?" @@ -1038,10 +1039,16 @@ thisChannelArchived: "このチャンネル、アーカイブされとるで。" displayOfNote: "ノートの表示" initialAccountSetting: "初期設定" youFollowing: "フォロー中やで" +preventAiLearning: "生成AIの学習に使わんといて" +preventAiLearningDescription: "他の文章生成AIとか画像生成AIに、投稿したノートとか画像なんかを勝手に使わんように頼むで。具体的にはnoaiフラグをHTMLレスポンスに含めるんやけど、これ聞いてくれるんはAIの気分次第やから、使われる可能性もちょっとはあるな。" +options: "オプション" +specifyUser: "ユーザー指定" _initialAccountSetting: accountCreated: "アカウント作り終わったで。" + letsStartAccountSetup: "アカウントの初期設定をしよか。" letsFillYourProfile: "最初はあんたのプロフィールを設定しよか。" profileSetting: "プロフィール設定" + privacySetting: "プライバシー設定" theseSettingsCanEditLater: "この設定はあとから変えれるで。" youCanEditMoreSettingsInSettingsPageLater: "これ以外にもいろんな設定を「設定」ページからできるで。後で確認してみてな。" followUsers: "タイムラインを構築するために、気になるユーザーをフォローしてみ。" @@ -1060,11 +1067,12 @@ _accountMigration: moveTo: "このアカウントをさらのアカウントに引っ越すで" moveToLabel: "引っ越し先のアカウント:" moveCannotBeUndone: "アカウントを移行すると、取り消すことはできへんくなります。" - moveAccountDescription: "この操作は戻されへんで。まず引っ越し先のアカウントでこのアカウントへのエイリアスが作れたか確認してきなはれや。エイリアスができてたら、引っ越し先のアカウントをこんな風に入力してくれへんか?:@person@instance.com" + moveAccountDescription: "おニューのアカウントに移行すんで。\n ・フォロワーがおニューの方を勝手にフォローすんで。\n ・このアカウントからのフォローはまるまる全部解除されんで。\n ・このアカウントでノート作れへんようになるで。\n\nフォロワーの移行は勝手にこっちでやっとくけど、フォローの移行は自分でしてや。移行前にこのアカウントでフォローエクスポートして、移行したあとすぐにおニューのところでインポートしてくれな。\nリストとかミュート、あとブロックもおんなじや。自分で移行してな。\n\n(この説明はこのサーバー、つまりMisskey v13.12.0から後の仕様や。Mastodonとか他のActivityPubソフトやとちょっと挙動が違うこともあんで。)" moveAccountHowTo: "アカウントの引っ越しには、まず引っ越し先のアカウントで自分のアカウントに対しエイリアスを作成しなはれや。\nエイリアス作成した後、引っ越し先のアカウントを次のように入力してくれへんか?:@username@server.example.com" startMigration: "引っ越しする" migrationConfirm: "ほんまにこのアカウントを {account} に引っ越すんか?一回引っ越してもうたら取り消されへんし、二度とこのアカウントを元に戻されへんくなるで。\nそれと、引っ越し先のアカウントでエイリアスが作れたかちゃ~んと確認しーや?" movedAndCannotBeUndone: "\nアカウントはもう引っ越されてます。\n引っ越しを取り消すことはできまへん。" + postMigrationNote: "このアカウントからのフォロー解除は移行操作から丸一日経ったら実行されんで。\nこのアカウントのフォロー・フォロワー数はどっちも0や。フォローの解除はされへんから、あんたのフォロワーはこのアカウントのフォロワー向けの投稿をこの後も見れるで。" movedTo: "引っ越し先のアカウント:" _achievements: earnedAt: "貰った日ぃ" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index ef690d260b..39574d3321 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1038,6 +1038,7 @@ thisChannelArchived: "이 채널은 아카이브되었습니다." displayOfNote: "노트 표시" initialAccountSetting: "초기 설정" youFollowing: "팔로잉" +options: "옵션" _initialAccountSetting: accountCreated: "계정 생성이 완료되었습니다!" letsStartAccountSetup: "계정의 초기 설정을 진행합니다." @@ -1240,6 +1241,7 @@ _achievements: title: "잠깐 쉬어" description: "클라이언트를 시작하고 30분이 경과하였습니다" _client60min: + title: "No \"Miss\" in Misskey" description: "클라이언트를 시작하고 60분이 경과하였습니다" _noteDeletedWithin1min: title: "있었는데요 없었습니다" diff --git a/locales/no-NO.yml b/locales/no-NO.yml index f7f0d442d4..36c29295f6 100644 --- a/locales/no-NO.yml +++ b/locales/no-NO.yml @@ -278,6 +278,7 @@ video: "Video" videos: "Videoer" continue: "Fortsett" youFollowing: "Følger" +options: "Alternativ" _initialAccountSetting: theseSettingsCanEditLater: "Du kan endre disse innstillingene senere." _achievements: diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 55d4b70590..a123ad7266 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -1006,6 +1006,7 @@ videos: "Видео" dataSaver: "Экономия трафика" horizontal: "Сбоку" youFollowing: "Подписки" +options: "Настройки ролей" _achievements: earnedAt: "Разблокировано в" _types: diff --git a/locales/th-TH.yml b/locales/th-TH.yml index d1f87dbfdb..22f110ebad 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -1031,6 +1031,7 @@ preservedUsernames: "ชื่อผู้ใช้ที่สงวนไว preservedUsernamesDescription: "ลิสต์ชื่อผู้ใช้ที่จะสำรองโดยคั่นด้วยการแบ่งบรรทัดนั้น เพราะสิ่งเหล่านี้จะไม่สามารถทำได้ในระหว่างการสร้างบัญชีตามปกติ บัญชีที่มีอยู่แล้วนั้นโดยใช้ชื่อผู้ใช้เหล่านี้จะไม่ได้รับผลกระทบอะไร" createNoteFromTheFile: "เรียบเรียงโน้ตจากไฟล์นี้" youFollowing: "ติดตามแล้ว" +options: "ตัวเลือกบทบาท" _serverRules: description: "ชุดของกฎที่จะแสดงก่อนการลงทะเบียนเราขอแนะนำให้ตั้งค่าสรุปข้อกำหนดในการให้บริการ" _accountMigration: diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 1fe82185be..638cc1cf8a 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1030,6 +1030,13 @@ continue: "继续" preservedUsernames: "保留的用户名" createNoteFromTheFile: "从文件创建帖子" youFollowing: "正在关注" +options: "选项" +_initialAccountSetting: + accountCreated: "账户创建完成了!" + letsStartAccountSetup: "来进行帐户的初始设置吧。" + letsFillYourProfile: "首先,来设定你的个人档案吧!" + profileSetting: "个人资料设置" + theseSettingsCanEditLater: "也可以在稍后修改这里的设置。" _serverRules: description: "在新用户注册前显示服务器的简单规则。推荐显示服务条款的主要内容。" _accountMigration: @@ -1038,8 +1045,11 @@ _accountMigration: moveFromDescription: "如果迁移时需要继承其他账户的关注者,请在此创造别名。此操作需要在实行迁移之前完成!请如已下输入需要迁移的账户:@person@instance.com" moveTo: "把这个账户迁移到新的账户" moveToLabel: "迁移后的账户" + moveCannotBeUndone: "一旦迁移账户,就无法撤销。" moveAccountDescription: "此操作无法取消。请先确认您已在迁移后的账户上,为此账户创造了别名。创造别名后,请如以下输入您的迁移后的账户:@person@instance.com" + startMigration: "迁移" migrationConfirm: "确定要把此账户迁移到{account}吗?一旦确定后,此操作无法取消,此账户也无法以原来的状态使用。\n同时,请确认迁移后的账户,已创造别名。" + movedAndCannotBeUndone: "该账户已被迁移。\n迁移操作无法撤销。" movedTo: "迁移后的账户" _achievements: earnedAt: "达成时间" @@ -1572,6 +1582,9 @@ _time: minute: "分" hour: "小时" day: "日" +_timelineTutorial: + step3_1: "将想说的话发出去了吗?" + step3_2: "太棒了!现在你可以在你的时间线中看到刚刚发布的帖子了。" _2fa: alreadyRegistered: "此设备已被注册" registerTOTP: "开始设置认证应用" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 4073b9629d..d2b42313a7 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -990,6 +990,7 @@ rolesAssignedToMe: "指派給自己的角色" resetPasswordConfirm: "重設密碼?" sensitiveWords: "敏感詞" sensitiveWordsDescription: "將含有設定詞彙的貼文可見性設為發送至首頁。可以用換行來進行複數的設定。" +sensitiveWordsDescription2: "用空格分隔關鍵詞構成AND格式,用斜線包圍關鍵字構成正規表達式。" notesSearchNotAvailable: "無法使用搜尋貼文功能。" license: "授權" unfavoriteConfirm: "要取消收錄我的最愛嗎?" @@ -1036,7 +1037,24 @@ channelArchiveConfirmTitle: "要封存{name}嗎?" channelArchiveConfirmDescription: "封存以後,在頻道列表與搜索結果中不會顯示,也無法發布新的貼文。" thisChannelArchived: "這個頻道已被封存。" displayOfNote: "顯示貼文" -youFollowing: "關注中" +initialAccountSetting: "初始設定" +youFollowing: "追隨中" +preventAiLearning: "拒絕接受產生式AI的學習" +preventAiLearningDescription: "要求外部的文章產生AI或圖像產生AI不以發布的貼文和圖像等內容為學習對象。這是透過在HTML響應中包含noai旗標來實現的,但不能完全防止AI的學習,因為這要看該AI是否遵守這個要求。" +options: "選項" +_initialAccountSetting: + accountCreated: "帳戶已建立完成!" + letsStartAccountSetup: "來進行帳戶的初始設定吧。" + letsFillYourProfile: "首先,來設定您的個人檔案吧。" + profileSetting: "個人檔案設定" + theseSettingsCanEditLater: "這裡的設定可以在之後變更。" + youCanEditMoreSettingsInSettingsPageLater: "除此之外,還可以在「設定」頁面進行各種設定。之後請確認看看。" + followUsers: "為了構築時間軸,試著追蹤您感興趣的使用者吧。" + pushNotificationDescription: "啟用推送通知,就可以在設備上接收{name}的通知。" + initialAccountSettingCompleted: "初始設定完成了!" + haveFun: "盡情享受{name}吧!" + ifYouNeedLearnMore: "關於如何使用{name}(Misskey)的詳細資訊,請見{link}。" + skipAreYouSure: "要略過初始設定嗎?" _serverRules: description: "設定伺服器的簡要規則,在新的註冊之前顯示。建議的內容是使用條款的摘要。" _accountMigration: @@ -1464,7 +1482,7 @@ _channel: removeBanner: "移除橫幅圖像" featured: "熱門貼文" owned: "管理中" - following: "關注中" + following: "追隨中" usersCount: "有{n}人參與" notesCount: "有{n}個貼文" nameAndDescription: "名稱與說明" @@ -1586,6 +1604,16 @@ _time: minute: "分鐘" hour: "小時" day: "日" +_timelineTutorial: + title: "Misskey的使用方法" + step1_1: "這個畫面是「時間軸」。發布到{name}的「貼文」按照時間順序顯示。" + step1_2: "時間軸有多種類型,例如在「首頁時間軸」中流動的是您追蹤的人的貼文;而在「本地時間軸」流動的是{name}全體的貼文。" + step2_1: "試試看,發布個貼文吧!按畫面上鉛筆圖示的按鈕開啟表格。" + step2_2: "初次貼文的內容,建議包括自我介紹以及「開始使用{name}」。" + step3_1: "貼文發出去了嗎?" + step3_2: "如果你的貼文出現在時間軸上,就代表發文成功。" + step4_1: "可以對貼文標記「反應」。" + step4_2: "點擊貼文的「+」圖示,即可選擇喜好的表情符號來標記反應。" _2fa: alreadyRegistered: "此設備已經被註冊過了" registerTOTP: "開始設定驗證應用程式" diff --git a/package.json b/package.json index 28e1cdcf1e..a21d7ab9e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "13.12.1", + "version": "13.12.2", "codename": "nasubi", "repository": { "type": "git", @@ -56,11 +56,11 @@ "devDependencies": { "@types/gulp": "4.0.10", "@types/gulp-rename": "2.0.1", - "@typescript-eslint/eslint-plugin": "5.59.2", - "@typescript-eslint/parser": "5.59.2", + "@typescript-eslint/eslint-plugin": "5.59.5", + "@typescript-eslint/parser": "5.59.5", "cross-env": "7.0.3", - "cypress": "12.11.0", - "eslint": "8.39.0", + "cypress": "12.12.0", + "eslint": "8.40.0", "start-server-and-test": "2.0.0" }, "optionalDependencies": { diff --git a/packages/backend/migration/1683682889948-prevent-ai-larning.js b/packages/backend/migration/1683682889948-prevent-ai-larning.js new file mode 100644 index 0000000000..9d1a19c10b --- /dev/null +++ b/packages/backend/migration/1683682889948-prevent-ai-larning.js @@ -0,0 +1,11 @@ +export class PreventAiLarning1683682889948 { + name = 'PreventAiLarning1683682889948' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "preventAiLarning" boolean NOT NULL DEFAULT true`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "preventAiLarning"`); + } +} diff --git a/packages/backend/migration/1683683083083-public-reactions-default-true.js b/packages/backend/migration/1683683083083-public-reactions-default-true.js new file mode 100644 index 0000000000..195ea02a5e --- /dev/null +++ b/packages/backend/migration/1683683083083-public-reactions-default-true.js @@ -0,0 +1,11 @@ +export class PublicReactionsDefaultTrue1683683083083 { + name = 'PublicReactionsDefaultTrue1683683083083' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "publicReactions" SET DEFAULT true`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "publicReactions" SET DEFAULT false`); + } +} diff --git a/packages/backend/migration/1683789676867-fix-typo.js b/packages/backend/migration/1683789676867-fix-typo.js new file mode 100644 index 0000000000..c0dbbf0050 --- /dev/null +++ b/packages/backend/migration/1683789676867-fix-typo.js @@ -0,0 +1,11 @@ +export class FixTypo1683789676867 { + name = 'FixTypo1683789676867' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" RENAME COLUMN "preventAiLarning" TO "preventAiLearning"`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" RENAME COLUMN "preventAiLearning" TO "preventAiLarning"`); + } +} diff --git a/packages/backend/package.json b/packages/backend/package.json index e0ece2bfe5..4bab4a7341 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -58,7 +58,7 @@ "@fastify/accepts": "4.1.0", "@fastify/cookie": "8.3.0", "@fastify/cors": "8.2.1", - "@fastify/http-proxy": "9.0.0", + "@fastify/http-proxy": "9.1.0", "@fastify/multipart": "7.6.0", "@fastify/static": "6.10.1", "@fastify/view": "7.4.1", @@ -89,11 +89,11 @@ "escape-regexp": "0.0.1", "fastify": "4.17.0", "feed": "4.2.2", - "file-type": "18.3.0", + "file-type": "18.4.0", "fluent-ffmpeg": "2.1.2", "form-data": "4.0.0", "got": "12.6.0", - "happy-dom": "9.10.2", + "happy-dom": "9.16.0", "hpagent": "1.2.0", "ioredis": "5.3.2", "ip-cidr": "3.1.0", @@ -110,11 +110,11 @@ "ms": "3.0.0-canary.1", "nested-property": "4.0.0", "node-fetch": "3.3.1", - "nodemailer": "6.9.1", + "nodemailer": "6.9.2", "nsfwjs": "2.4.2", "oauth": "0.10.0", "os-utils": "0.0.14", - "otpauth": "9.1.1", + "otpauth": "9.1.2", "parse5": "7.1.2", "pg": "8.10.0", "private-ip": "3.0.0", @@ -149,7 +149,7 @@ "tsc-alias": "1.8.6", "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", - "typeorm": "0.3.15", + "typeorm": "0.3.16", "typescript": "5.0.4", "ulid": "2.3.0", "unzipper": "0.10.11", @@ -178,7 +178,7 @@ "@types/jsonld": "1.5.8", "@types/jsrsasign": "10.5.8", "@types/mime-types": "2.1.1", - "@types/node": "18.16.3", + "@types/node": "20.1.3", "@types/node-fetch": "3.0.3", "@types/nodemailer": "6.4.7", "@types/oauth": "0.9.1", @@ -191,7 +191,7 @@ "@types/redis": "4.0.11", "@types/rename": "1.0.4", "@types/sanitize-html": "2.9.0", - "@types/semver": "7.3.13", + "@types/semver": "7.5.0", "@types/sharp": "0.32.0", "@types/sinonjs__fake-timers": "8.1.2", "@types/tinycolor2": "1.4.3", @@ -202,11 +202,11 @@ "@types/web-push": "3.3.2", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.59.2", - "@typescript-eslint/parser": "5.59.2", - "aws-sdk-client-mock": "^2.1.1", + "@typescript-eslint/eslint-plugin": "5.59.5", + "@typescript-eslint/parser": "5.59.5", + "aws-sdk-client-mock": "2.1.1", "cross-env": "7.0.3", - "eslint": "8.39.0", + "eslint": "8.40.0", "eslint-plugin-import": "2.27.5", "execa": "6.1.0", "jest": "29.5.0", diff --git a/packages/backend/src/boot/common.ts b/packages/backend/src/boot/common.ts index 45ded5495c..3995545d7f 100644 --- a/packages/backend/src/boot/common.ts +++ b/packages/backend/src/boot/common.ts @@ -18,10 +18,12 @@ export async function server() { const serverService = app.get(ServerService); await serverService.launch(); - app.get(ChartManagementService).start(); - app.get(JanitorService).start(); - app.get(QueueStatsService).start(); - app.get(ServerStatsService).start(); + if (process.env.NODE_ENV !== 'test') { + app.get(ChartManagementService).start(); + app.get(JanitorService).start(); + app.get(QueueStatsService).start(); + app.get(ServerStatsService).start(); + } return app; } diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index b41fb603bb..c6e1075389 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -62,6 +62,7 @@ export type Source = { port: string; apiKey: string; ssl?: boolean; + index: string; }; proxy?: string; diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 364976e4a7..977c9052c0 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -3,6 +3,7 @@ import * as mfm from 'mfm-js'; import { In, DataSource } from 'typeorm'; import * as Redis from 'ioredis'; import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; +import RE2 from 're2'; import { extractMentions } from '@/misc/extract-mentions.js'; import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm.js'; import { extractHashtags } from '@/misc/extract-hashtags.js'; @@ -238,7 +239,8 @@ export class NoteCreateService implements OnApplicationShutdown { if (data.channel != null) data.localOnly = true; if (data.visibility === 'public' && data.channel == null) { - if ((data.text != null) && (await this.metaService.fetch()).sensitiveWords.some(w => data.text!.includes(w))) { + const sensitiveWords = (await this.metaService.fetch()).sensitiveWords; + if (this.isSensitive(data, sensitiveWords)) { data.visibility = 'home'; } else if ((await this.roleService.getUserPolicies(user.id)).canPublicNote === false) { data.visibility = 'home'; @@ -670,6 +672,31 @@ export class NoteCreateService implements OnApplicationShutdown { // Register to search database this.index(note); } + + @bindThis + private isSensitive(note: Option, sensitiveWord: string[]): boolean { + if (sensitiveWord.length > 0) { + const text = note.cw ?? note.text ?? ''; + if (text === '') return false; + const matched = sensitiveWord.some(filter => { + // represents RegExp + const regexp = filter.match(/^\/(.+)\/(.*)$/); + // This should never happen due to input sanitisation. + if (!regexp) { + const words = filter.split(' '); + return words.every(keyword => text.includes(keyword)); + } + try { + return new RE2(regexp[1], regexp[2]).test(text); + } catch (err) { + // This should never happen due to input sanitisation. + return false; + } + }); + if (matched) return true; + } + return false; + } @bindThis private incRenoteCount(renote: Note) { diff --git a/packages/backend/src/core/QueueModule.ts b/packages/backend/src/core/QueueModule.ts index d4905a5f88..1d73947776 100644 --- a/packages/backend/src/core/QueueModule.ts +++ b/packages/backend/src/core/QueueModule.ts @@ -1,4 +1,5 @@ -import { Module } from '@nestjs/common'; +import { setTimeout } from 'node:timers/promises'; +import { Inject, Module, OnApplicationShutdown } from '@nestjs/common'; import Bull from 'bull'; import { DI } from '@/di-symbols.js'; import type { Config } from '@/config.js'; @@ -41,9 +42,9 @@ export type SystemQueue = Bull.Queue<Record<string, unknown>>; export type EndedPollNotificationQueue = Bull.Queue<EndedPollNotificationJobData>; export type DeliverQueue = Bull.Queue<DeliverJobData>; export type InboxQueue = Bull.Queue<InboxJobData>; -export type DbQueue = Bull.Queue<DbJobData<keyof DbJobMap>>; +export type DbQueue = Bull.Queue; export type RelationshipQueue = Bull.Queue<RelationshipJobData>; -export type ObjectStorageQueue = Bull.Queue<ObjectStorageJobData>; +export type ObjectStorageQueue = Bull.Queue; export type WebhookDeliverQueue = Bull.Queue<WebhookDeliverJobData>; const $system: Provider = { @@ -118,4 +119,36 @@ const $webhookDeliver: Provider = { $webhookDeliver, ], }) -export class QueueModule {} +export class QueueModule implements OnApplicationShutdown { + constructor( + @Inject('queue:system') public systemQueue: SystemQueue, + @Inject('queue:endedPollNotification') public endedPollNotificationQueue: EndedPollNotificationQueue, + @Inject('queue:deliver') public deliverQueue: DeliverQueue, + @Inject('queue:inbox') public inboxQueue: InboxQueue, + @Inject('queue:db') public dbQueue: DbQueue, + @Inject('queue:relationship') public relationshipQueue: RelationshipQueue, + @Inject('queue:objectStorage') public objectStorageQueue: ObjectStorageQueue, + @Inject('queue:webhookDeliver') public webhookDeliverQueue: WebhookDeliverQueue, + ) {} + + async onApplicationShutdown(signal: string): Promise<void> { + if (process.env.NODE_ENV === 'test') { + // XXX: + // Shutting down the existing connections causes errors on Jest as + // Misskey has asynchronous postgres/redis connections that are not + // awaited. + // Let's wait for some random time for them to finish. + await setTimeout(5000); + } + await Promise.all([ + this.systemQueue.close(), + this.endedPollNotificationQueue.close(), + this.deliverQueue.close(), + this.inboxQueue.close(), + this.dbQueue.close(), + this.relationshipQueue.close(), + this.objectStorageQueue.close(), + this.webhookDeliverQueue.close(), + ]); + } +} diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts index e68fde088d..9502afcc9b 100644 --- a/packages/backend/src/core/SearchService.ts +++ b/packages/backend/src/core/SearchService.ts @@ -68,7 +68,7 @@ export class SearchService { private idService: IdService, ) { if (meilisearch) { - this.meilisearchNoteIndex = meilisearch.index('notes'); + this.meilisearchNoteIndex = meilisearch.index(`${config.meilisearch!.index}---notes`); this.meilisearchNoteIndex.updateSettings({ searchableAttributes: [ 'text', @@ -82,6 +82,7 @@ export class SearchService { 'userId', 'userHost', 'channelId', + 'tags', ], typoTolerance: { enabled: false, @@ -107,6 +108,7 @@ export class SearchService { channelId: note.channelId, cw: note.cw, text: note.text, + tags: note.tags, }], { primaryKey: 'id', }); diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index 453c1473dd..7f61e1d6f3 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -445,6 +445,7 @@ export class UserEntityService implements OnModuleInit { carefulBot: profile!.carefulBot, autoAcceptFollowed: profile!.autoAcceptFollowed, noCrawle: profile!.noCrawle, + preventAiLearning: profile!.preventAiLearning, isExplorable: user.isExplorable, isDeleted: user.isDeleted, hideOnlineStatus: user.hideOnlineStatus, diff --git a/packages/backend/src/models/entities/UserProfile.ts b/packages/backend/src/models/entities/UserProfile.ts index 60c1c55de5..236ee8f988 100644 --- a/packages/backend/src/models/entities/UserProfile.ts +++ b/packages/backend/src/models/entities/UserProfile.ts @@ -76,7 +76,7 @@ export class UserProfile { public emailNotificationTypes: string[]; @Column('boolean', { - default: false, + default: true, }) public publicReactions: boolean; @@ -147,6 +147,11 @@ export class UserProfile { }) public noCrawle: boolean; + @Column('boolean', { + default: true, + }) + public preventAiLearning: boolean; + @Column('boolean', { default: false, }) diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 529c1303d1..f9a20ac398 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -302,7 +302,11 @@ export const packedMeDetailedOnlySchema = { }, noCrawle: { type: 'boolean', - nullable: true, optional: false, + nullable: false, optional: false, + }, + preventAiLearning: { + type: 'boolean', + nullable: false, optional: false, }, isExplorable: { type: 'boolean', diff --git a/packages/backend/src/queue/DbQueueProcessorsService.ts b/packages/backend/src/queue/DbQueueProcessorsService.ts deleted file mode 100644 index df8ac3a301..0000000000 --- a/packages/backend/src/queue/DbQueueProcessorsService.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { DI } from '@/di-symbols.js'; -import type { Config } from '@/config.js'; -import { bindThis } from '@/decorators.js'; -import { DeleteDriveFilesProcessorService } from './processors/DeleteDriveFilesProcessorService.js'; -import { ExportCustomEmojisProcessorService } from './processors/ExportCustomEmojisProcessorService.js'; -import { ExportNotesProcessorService } from './processors/ExportNotesProcessorService.js'; -import { ExportFollowingProcessorService } from './processors/ExportFollowingProcessorService.js'; -import { ExportMutingProcessorService } from './processors/ExportMutingProcessorService.js'; -import { ExportBlockingProcessorService } from './processors/ExportBlockingProcessorService.js'; -import { ExportUserListsProcessorService } from './processors/ExportUserListsProcessorService.js'; -import { ExportAntennasProcessorService } from './processors/ExportAntennasProcessorService.js'; -import { ImportFollowingProcessorService } from './processors/ImportFollowingProcessorService.js'; -import { ImportMutingProcessorService } from './processors/ImportMutingProcessorService.js'; -import { ImportBlockingProcessorService } from './processors/ImportBlockingProcessorService.js'; -import { ImportUserListsProcessorService } from './processors/ImportUserListsProcessorService.js'; -import { ImportCustomEmojisProcessorService } from './processors/ImportCustomEmojisProcessorService.js'; -import { ImportAntennasProcessorService } from './processors/ImportAntennasProcessorService.js'; -import { DeleteAccountProcessorService } from './processors/DeleteAccountProcessorService.js'; -import { ExportFavoritesProcessorService } from './processors/ExportFavoritesProcessorService.js'; -import type Bull from 'bull'; - -@Injectable() -export class DbQueueProcessorsService { - constructor( - @Inject(DI.config) - private config: Config, - - private deleteDriveFilesProcessorService: DeleteDriveFilesProcessorService, - private exportCustomEmojisProcessorService: ExportCustomEmojisProcessorService, - private exportNotesProcessorService: ExportNotesProcessorService, - private exportFavoritesProcessorService: ExportFavoritesProcessorService, - private exportFollowingProcessorService: ExportFollowingProcessorService, - private exportMutingProcessorService: ExportMutingProcessorService, - private exportBlockingProcessorService: ExportBlockingProcessorService, - private exportUserListsProcessorService: ExportUserListsProcessorService, - private exportAntennasProcessorService: ExportAntennasProcessorService, - private importFollowingProcessorService: ImportFollowingProcessorService, - private importMutingProcessorService: ImportMutingProcessorService, - private importBlockingProcessorService: ImportBlockingProcessorService, - private importUserListsProcessorService: ImportUserListsProcessorService, - private importCustomEmojisProcessorService: ImportCustomEmojisProcessorService, - private importAntennasProcessorService: ImportAntennasProcessorService, - private deleteAccountProcessorService: DeleteAccountProcessorService, - ) { - } - - @bindThis - public start(q: Bull.Queue): void { - q.process('deleteDriveFiles', (job, done) => this.deleteDriveFilesProcessorService.process(job, done)); - q.process('exportCustomEmojis', (job, done) => this.exportCustomEmojisProcessorService.process(job, done)); - q.process('exportNotes', (job, done) => this.exportNotesProcessorService.process(job, done)); - q.process('exportFavorites', (job, done) => this.exportFavoritesProcessorService.process(job, done)); - q.process('exportFollowing', (job, done) => this.exportFollowingProcessorService.process(job, done)); - q.process('exportMuting', (job, done) => this.exportMutingProcessorService.process(job, done)); - q.process('exportBlocking', (job, done) => this.exportBlockingProcessorService.process(job, done)); - q.process('exportUserLists', (job, done) => this.exportUserListsProcessorService.process(job, done)); - q.process('exportAntennas', (job, done) => this.exportAntennasProcessorService.process(job, done)); - q.process('importFollowing', (job, done) => this.importFollowingProcessorService.process(job, done)); - q.process('importFollowingToDb', (job) => this.importFollowingProcessorService.processDb(job)); - q.process('importMuting', (job, done) => this.importMutingProcessorService.process(job, done)); - q.process('importBlocking', (job, done) => this.importBlockingProcessorService.process(job, done)); - q.process('importBlockingToDb', (job) => this.importBlockingProcessorService.processDb(job)); - q.process('importUserLists', (job, done) => this.importUserListsProcessorService.process(job, done)); - q.process('importCustomEmojis', (job, done) => this.importCustomEmojisProcessorService.process(job, done)); - q.process('importAntennas', (job, done) => this.importAntennasProcessorService.process(job, done)); - q.process('deleteAccount', (job) => this.deleteAccountProcessorService.process(job)); - } -} diff --git a/packages/backend/src/queue/ObjectStorageQueueProcessorsService.ts b/packages/backend/src/queue/ObjectStorageQueueProcessorsService.ts deleted file mode 100644 index 865e47c3f8..0000000000 --- a/packages/backend/src/queue/ObjectStorageQueueProcessorsService.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { DI } from '@/di-symbols.js'; -import type { Config } from '@/config.js'; -import { CleanRemoteFilesProcessorService } from './processors/CleanRemoteFilesProcessorService.js'; -import { DeleteFileProcessorService } from './processors/DeleteFileProcessorService.js'; -import type Bull from 'bull'; -import { bindThis } from '@/decorators.js'; - -@Injectable() -export class ObjectStorageQueueProcessorsService { - constructor( - @Inject(DI.config) - private config: Config, - - private deleteFileProcessorService: DeleteFileProcessorService, - private cleanRemoteFilesProcessorService: CleanRemoteFilesProcessorService, - ) { - } - - @bindThis - public start(q: Bull.Queue): void { - q.process('deleteFile', 16, (job) => this.deleteFileProcessorService.process(job)); - q.process('cleanRemoteFiles', 16, (job, done) => this.cleanRemoteFilesProcessorService.process(job, done)); - } -} diff --git a/packages/backend/src/queue/QueueProcessorModule.ts b/packages/backend/src/queue/QueueProcessorModule.ts index 3d4cc77321..e1c6b93d9b 100644 --- a/packages/backend/src/queue/QueueProcessorModule.ts +++ b/packages/backend/src/queue/QueueProcessorModule.ts @@ -3,14 +3,10 @@ import { CoreModule } from '@/core/CoreModule.js'; import { GlobalModule } from '@/GlobalModule.js'; import { QueueLoggerService } from './QueueLoggerService.js'; import { QueueProcessorService } from './QueueProcessorService.js'; -import { DbQueueProcessorsService } from './DbQueueProcessorsService.js'; -import { RelationshipQueueProcessorsService } from './RelationshipQueueProcessorsService.js'; -import { ObjectStorageQueueProcessorsService } from './ObjectStorageQueueProcessorsService.js'; import { DeliverProcessorService } from './processors/DeliverProcessorService.js'; import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js'; import { InboxProcessorService } from './processors/InboxProcessorService.js'; import { WebhookDeliverProcessorService } from './processors/WebhookDeliverProcessorService.js'; -import { SystemQueueProcessorsService } from './SystemQueueProcessorsService.js'; import { CheckExpiredMutingsProcessorService } from './processors/CheckExpiredMutingsProcessorService.js'; import { CleanChartsProcessorService } from './processors/CleanChartsProcessorService.js'; import { CleanProcessorService } from './processors/CleanProcessorService.js'; @@ -68,10 +64,6 @@ import { RelationshipProcessorService } from './processors/RelationshipProcessor DeleteFileProcessorService, CleanRemoteFilesProcessorService, RelationshipProcessorService, - SystemQueueProcessorsService, - ObjectStorageQueueProcessorsService, - DbQueueProcessorsService, - RelationshipQueueProcessorsService, WebhookDeliverProcessorService, EndedPollNotificationProcessorService, DeliverProcessorService, diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 706110f6fc..dc025f9889 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -5,15 +5,36 @@ import type Logger from '@/logger.js'; import { QueueService } from '@/core/QueueService.js'; import { bindThis } from '@/decorators.js'; import { getJobInfo } from './get-job-info.js'; -import { SystemQueueProcessorsService } from './SystemQueueProcessorsService.js'; -import { ObjectStorageQueueProcessorsService } from './ObjectStorageQueueProcessorsService.js'; -import { DbQueueProcessorsService } from './DbQueueProcessorsService.js'; import { WebhookDeliverProcessorService } from './processors/WebhookDeliverProcessorService.js'; import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js'; import { DeliverProcessorService } from './processors/DeliverProcessorService.js'; import { InboxProcessorService } from './processors/InboxProcessorService.js'; +import { DeleteDriveFilesProcessorService } from './processors/DeleteDriveFilesProcessorService.js'; +import { ExportCustomEmojisProcessorService } from './processors/ExportCustomEmojisProcessorService.js'; +import { ExportNotesProcessorService } from './processors/ExportNotesProcessorService.js'; +import { ExportFollowingProcessorService } from './processors/ExportFollowingProcessorService.js'; +import { ExportMutingProcessorService } from './processors/ExportMutingProcessorService.js'; +import { ExportBlockingProcessorService } from './processors/ExportBlockingProcessorService.js'; +import { ExportUserListsProcessorService } from './processors/ExportUserListsProcessorService.js'; +import { ExportAntennasProcessorService } from './processors/ExportAntennasProcessorService.js'; +import { ImportFollowingProcessorService } from './processors/ImportFollowingProcessorService.js'; +import { ImportMutingProcessorService } from './processors/ImportMutingProcessorService.js'; +import { ImportBlockingProcessorService } from './processors/ImportBlockingProcessorService.js'; +import { ImportUserListsProcessorService } from './processors/ImportUserListsProcessorService.js'; +import { ImportCustomEmojisProcessorService } from './processors/ImportCustomEmojisProcessorService.js'; +import { ImportAntennasProcessorService } from './processors/ImportAntennasProcessorService.js'; +import { DeleteAccountProcessorService } from './processors/DeleteAccountProcessorService.js'; +import { ExportFavoritesProcessorService } from './processors/ExportFavoritesProcessorService.js'; +import { CleanRemoteFilesProcessorService } from './processors/CleanRemoteFilesProcessorService.js'; +import { DeleteFileProcessorService } from './processors/DeleteFileProcessorService.js'; +import { RelationshipProcessorService } from './processors/RelationshipProcessorService.js'; +import { TickChartsProcessorService } from './processors/TickChartsProcessorService.js'; +import { ResyncChartsProcessorService } from './processors/ResyncChartsProcessorService.js'; +import { CleanChartsProcessorService } from './processors/CleanChartsProcessorService.js'; +import { CheckExpiredMutingsProcessorService } from './processors/CheckExpiredMutingsProcessorService.js'; +import { CleanProcessorService } from './processors/CleanProcessorService.js'; +import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; import { QueueLoggerService } from './QueueLoggerService.js'; -import { RelationshipQueueProcessorsService } from './RelationshipQueueProcessorsService.js'; @Injectable() export class QueueProcessorService { @@ -25,14 +46,35 @@ export class QueueProcessorService { private queueLoggerService: QueueLoggerService, private queueService: QueueService, - private systemQueueProcessorsService: SystemQueueProcessorsService, - private objectStorageQueueProcessorsService: ObjectStorageQueueProcessorsService, - private dbQueueProcessorsService: DbQueueProcessorsService, - private relationshipQueueProcessorsService: RelationshipQueueProcessorsService, private webhookDeliverProcessorService: WebhookDeliverProcessorService, private endedPollNotificationProcessorService: EndedPollNotificationProcessorService, private deliverProcessorService: DeliverProcessorService, private inboxProcessorService: InboxProcessorService, + private deleteDriveFilesProcessorService: DeleteDriveFilesProcessorService, + private exportCustomEmojisProcessorService: ExportCustomEmojisProcessorService, + private exportNotesProcessorService: ExportNotesProcessorService, + private exportFavoritesProcessorService: ExportFavoritesProcessorService, + private exportFollowingProcessorService: ExportFollowingProcessorService, + private exportMutingProcessorService: ExportMutingProcessorService, + private exportBlockingProcessorService: ExportBlockingProcessorService, + private exportUserListsProcessorService: ExportUserListsProcessorService, + private exportAntennasProcessorService: ExportAntennasProcessorService, + private importFollowingProcessorService: ImportFollowingProcessorService, + private importMutingProcessorService: ImportMutingProcessorService, + private importBlockingProcessorService: ImportBlockingProcessorService, + private importUserListsProcessorService: ImportUserListsProcessorService, + private importCustomEmojisProcessorService: ImportCustomEmojisProcessorService, + private importAntennasProcessorService: ImportAntennasProcessorService, + private deleteAccountProcessorService: DeleteAccountProcessorService, + private deleteFileProcessorService: DeleteFileProcessorService, + private cleanRemoteFilesProcessorService: CleanRemoteFilesProcessorService, + private relationshipProcessorService: RelationshipProcessorService, + private tickChartsProcessorService: TickChartsProcessorService, + private resyncChartsProcessorService: ResyncChartsProcessorService, + private cleanChartsProcessorService: CleanChartsProcessorService, + private aggregateRetentionProcessorService: AggregateRetentionProcessorService, + private checkExpiredMutingsProcessorService: CheckExpiredMutingsProcessorService, + private cleanProcessorService: CleanProcessorService, ) { this.logger = this.queueLoggerService.logger; } @@ -119,14 +161,6 @@ export class QueueProcessorService { .on('error', (job: any, err: Error) => webhookLogger.error(`error ${err}`, { job, e: renderError(err) })) .on('stalled', (job) => webhookLogger.warn(`stalled ${getJobInfo(job)} to=${job.data.to}`)); - this.queueService.deliverQueue.process(this.config.deliverJobConcurrency ?? 128, (job) => this.deliverProcessorService.process(job)); - this.queueService.inboxQueue.process(this.config.inboxJobConcurrency ?? 16, (job) => this.inboxProcessorService.process(job)); - this.queueService.endedPollNotificationQueue.process((job, done) => this.endedPollNotificationProcessorService.process(job, done)); - this.queueService.webhookDeliverQueue.process(64, (job) => this.webhookDeliverProcessorService.process(job)); - this.dbQueueProcessorsService.start(this.queueService.dbQueue); - this.relationshipQueueProcessorsService.start(this.queueService.relationshipQueue); - this.objectStorageQueueProcessorsService.start(this.queueService.objectStorageQueue); - this.queueService.systemQueue.add('tickCharts', { }, { repeat: { cron: '55 * * * *' }, @@ -163,6 +197,46 @@ export class QueueProcessorService { removeOnComplete: true, }); - this.systemQueueProcessorsService.start(this.queueService.systemQueue); + this.queueService.deliverQueue.process(this.config.deliverJobConcurrency ?? 128, (job) => this.deliverProcessorService.process(job)); + this.queueService.inboxQueue.process(this.config.inboxJobConcurrency ?? 16, (job) => this.inboxProcessorService.process(job)); + this.queueService.endedPollNotificationQueue.process((job, done) => this.endedPollNotificationProcessorService.process(job, done)); + this.queueService.webhookDeliverQueue.process(64, (job) => this.webhookDeliverProcessorService.process(job)); + + this.queueService.dbQueue.process('deleteDriveFiles', (job, done) => this.deleteDriveFilesProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportCustomEmojis', (job, done) => this.exportCustomEmojisProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportNotes', (job, done) => this.exportNotesProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportFavorites', (job, done) => this.exportFavoritesProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportFollowing', (job, done) => this.exportFollowingProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportMuting', (job, done) => this.exportMutingProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportBlocking', (job, done) => this.exportBlockingProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportUserLists', (job, done) => this.exportUserListsProcessorService.process(job, done)); + this.queueService.dbQueue.process('exportAntennas', (job, done) => this.exportAntennasProcessorService.process(job, done)); + this.queueService.dbQueue.process('importFollowing', (job, done) => this.importFollowingProcessorService.process(job, done)); + this.queueService.dbQueue.process('importFollowingToDb', (job) => this.importFollowingProcessorService.processDb(job)); + this.queueService.dbQueue.process('importMuting', (job, done) => this.importMutingProcessorService.process(job, done)); + this.queueService.dbQueue.process('importBlocking', (job, done) => this.importBlockingProcessorService.process(job, done)); + this.queueService.dbQueue.process('importBlockingToDb', (job) => this.importBlockingProcessorService.processDb(job)); + this.queueService.dbQueue.process('importUserLists', (job, done) => this.importUserListsProcessorService.process(job, done)); + this.queueService.dbQueue.process('importCustomEmojis', (job, done) => this.importCustomEmojisProcessorService.process(job, done)); + this.queueService.dbQueue.process('importAntennas', (job, done) => this.importAntennasProcessorService.process(job, done)); + this.queueService.dbQueue.process('deleteAccount', (job) => this.deleteAccountProcessorService.process(job)); + + this.queueService.objectStorageQueue.process('deleteFile', 16, (job) => this.deleteFileProcessorService.process(job)); + this.queueService.objectStorageQueue.process('cleanRemoteFiles', 16, (job, done) => this.cleanRemoteFilesProcessorService.process(job, done)); + + { + const maxJobs = this.config.relashionshipJobConcurrency ?? 16; + this.queueService.relationshipQueue.process('follow', maxJobs, (job) => this.relationshipProcessorService.processFollow(job)); + this.queueService.relationshipQueue.process('unfollow', maxJobs, (job) => this.relationshipProcessorService.processUnfollow(job)); + this.queueService.relationshipQueue.process('block', maxJobs, (job) => this.relationshipProcessorService.processBlock(job)); + this.queueService.relationshipQueue.process('unblock', maxJobs, (job) => this.relationshipProcessorService.processUnblock(job)); + } + + this.queueService.systemQueue.process('tickCharts', (job, done) => this.tickChartsProcessorService.process(job, done)); + this.queueService.systemQueue.process('resyncCharts', (job, done) => this.resyncChartsProcessorService.process(job, done)); + this.queueService.systemQueue.process('cleanCharts', (job, done) => this.cleanChartsProcessorService.process(job, done)); + this.queueService.systemQueue.process('aggregateRetention', (job, done) => this.aggregateRetentionProcessorService.process(job, done)); + this.queueService.systemQueue.process('checkExpiredMutings', (job, done) => this.checkExpiredMutingsProcessorService.process(job, done)); + this.queueService.systemQueue.process('clean', (job, done) => this.cleanProcessorService.process(job, done)); } } diff --git a/packages/backend/src/queue/RelationshipQueueProcessorsService.ts b/packages/backend/src/queue/RelationshipQueueProcessorsService.ts deleted file mode 100644 index 736b4fa80d..0000000000 --- a/packages/backend/src/queue/RelationshipQueueProcessorsService.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { bindThis } from '@/decorators.js'; -import { RelationshipProcessorService } from './processors/RelationshipProcessorService.js'; -import type Bull from 'bull'; -import { DI } from '@/di-symbols.js'; -import type { Config } from '@/config.js'; - -@Injectable() -export class RelationshipQueueProcessorsService { - constructor( - @Inject(DI.config) - private config: Config, - - private relationshipProcessorService: RelationshipProcessorService, - ) { - } - - @bindThis - public start(q: Bull.Queue): void { - const maxJobs = this.config.relashionshipJobConcurrency ?? 16; - q.process('follow', maxJobs, (job) => this.relationshipProcessorService.processFollow(job)); - q.process('unfollow', maxJobs, (job) => this.relationshipProcessorService.processUnfollow(job)); - q.process('block', maxJobs, (job) => this.relationshipProcessorService.processBlock(job)); - q.process('unblock', maxJobs, (job) => this.relationshipProcessorService.processUnblock(job)); - } -} diff --git a/packages/backend/src/queue/SystemQueueProcessorsService.ts b/packages/backend/src/queue/SystemQueueProcessorsService.ts deleted file mode 100644 index 7fb0da4b10..0000000000 --- a/packages/backend/src/queue/SystemQueueProcessorsService.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { DI } from '@/di-symbols.js'; -import type { Config } from '@/config.js'; -import { bindThis } from '@/decorators.js'; -import { TickChartsProcessorService } from './processors/TickChartsProcessorService.js'; -import { ResyncChartsProcessorService } from './processors/ResyncChartsProcessorService.js'; -import { CleanChartsProcessorService } from './processors/CleanChartsProcessorService.js'; -import { CheckExpiredMutingsProcessorService } from './processors/CheckExpiredMutingsProcessorService.js'; -import { CleanProcessorService } from './processors/CleanProcessorService.js'; -import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; -import type Bull from 'bull'; - -@Injectable() -export class SystemQueueProcessorsService { - constructor( - @Inject(DI.config) - private config: Config, - - private tickChartsProcessorService: TickChartsProcessorService, - private resyncChartsProcessorService: ResyncChartsProcessorService, - private cleanChartsProcessorService: CleanChartsProcessorService, - private aggregateRetentionProcessorService: AggregateRetentionProcessorService, - private checkExpiredMutingsProcessorService: CheckExpiredMutingsProcessorService, - private cleanProcessorService: CleanProcessorService, - ) { - } - - @bindThis - public start(q: Bull.Queue): void { - q.process('tickCharts', (job, done) => this.tickChartsProcessorService.process(job, done)); - q.process('resyncCharts', (job, done) => this.resyncChartsProcessorService.process(job, done)); - q.process('cleanCharts', (job, done) => this.cleanChartsProcessorService.process(job, done)); - q.process('aggregateRetention', (job, done) => this.aggregateRetentionProcessorService.process(job, done)); - q.process('checkExpiredMutings', (job, done) => this.checkExpiredMutingsProcessorService.process(job, done)); - q.process('clean', (job, done) => this.cleanProcessorService.process(job, done)); - } -} diff --git a/packages/backend/src/server/api/endpoints/admin/show-user.ts b/packages/backend/src/server/api/endpoints/admin/show-user.ts index 42229c8f23..f49d2a0966 100644 --- a/packages/backend/src/server/api/endpoints/admin/show-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts @@ -68,6 +68,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { emailVerified: profile.emailVerified, autoAcceptFollowed: profile.autoAcceptFollowed, noCrawle: profile.noCrawle, + preventAiLearning: profile.preventAiLearning, alwaysMarkNsfw: profile.alwaysMarkNsfw, autoSensitive: profile.autoSensitive, carefulBot: profile.carefulBot, diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index 6c66300bb7..74be00a8b8 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -98,7 +98,7 @@ export const meta = { message: 'This feature is restricted by your role.', code: 'RESTRICTED_BY_ROLE', id: '8feff0ba-5ab5-585b-31f4-4df816663fad', - } + }, }, res: { @@ -138,6 +138,7 @@ export const paramDef = { carefulBot: { type: 'boolean' }, autoAcceptFollowed: { type: 'boolean' }, noCrawle: { type: 'boolean' }, + preventAiLearning: { type: 'boolean' }, isBot: { type: 'boolean' }, isCat: { type: 'boolean' }, showTimelineReplies: { type: 'boolean' }, @@ -242,6 +243,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { if (typeof ps.carefulBot === 'boolean') profileUpdates.carefulBot = ps.carefulBot; if (typeof ps.autoAcceptFollowed === 'boolean') profileUpdates.autoAcceptFollowed = ps.autoAcceptFollowed; if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle; + if (typeof ps.preventAiLearning === 'boolean') profileUpdates.preventAiLearning = ps.preventAiLearning; if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat; if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote; if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail; diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 50b23a0682..f780280c1f 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -35,8 +35,8 @@ import { RoleService } from '@/core/RoleService.js'; import manifest from './manifest.json' assert { type: 'json' }; import { FeedService } from './FeedService.js'; import { UrlPreviewService } from './UrlPreviewService.js'; -import type { FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify'; import { ClientLoggerService } from './ClientLoggerService.js'; +import type { FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify'; const _filename = fileURLToPath(import.meta.url); const _dirname = dirname(_filename); @@ -423,6 +423,10 @@ export class ClientServerService { : []; reply.header('Cache-Control', 'public, max-age=15'); + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('user', { user, profile, me, avatarUrl: user.avatarUrl ?? this.userEntityService.getIdenticonUrl(user), @@ -467,6 +471,10 @@ export class ClientServerService { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: note.userId }); const meta = await this.metaService.fetch(); reply.header('Cache-Control', 'public, max-age=15'); + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('note', { note: _note, profile, @@ -506,6 +514,10 @@ export class ClientServerService { } else { reply.header('Cache-Control', 'private, max-age=0, must-revalidate'); } + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('page', { page: _page, profile, @@ -530,6 +542,10 @@ export class ClientServerService { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: flash.userId }); const meta = await this.metaService.fetch(); reply.header('Cache-Control', 'public, max-age=15'); + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('flash', { flash: _flash, profile, @@ -554,6 +570,10 @@ export class ClientServerService { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: clip.userId }); const meta = await this.metaService.fetch(); reply.header('Cache-Control', 'public, max-age=15'); + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('clip', { clip: _clip, profile, @@ -576,6 +596,10 @@ export class ClientServerService { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: post.userId }); const meta = await this.metaService.fetch(); reply.header('Cache-Control', 'public, max-age=15'); + if (profile.preventAiLearning) { + reply.header('X-Robots-Tag', 'noimageai'); + reply.header('X-Robots-Tag', 'noai'); + } return await reply.view('gallery-post', { post: _post, profile, diff --git a/packages/backend/src/server/web/views/clip.pug b/packages/backend/src/server/web/views/clip.pug index 4c692bf59b..74dc62f1e7 100644 --- a/packages/backend/src/server/web/views/clip.pug +++ b/packages/backend/src/server/web/views/clip.pug @@ -21,6 +21,9 @@ block og block meta if profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/src/server/web/views/flash.pug b/packages/backend/src/server/web/views/flash.pug index 5166855ea2..5594fcdfbf 100644 --- a/packages/backend/src/server/web/views/flash.pug +++ b/packages/backend/src/server/web/views/flash.pug @@ -21,6 +21,9 @@ block og block meta if profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/src/server/web/views/gallery-post.pug b/packages/backend/src/server/web/views/gallery-post.pug index ca0663a481..10f2d269bc 100644 --- a/packages/backend/src/server/web/views/gallery-post.pug +++ b/packages/backend/src/server/web/views/gallery-post.pug @@ -21,6 +21,9 @@ block og block meta if user.host || profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/src/server/web/views/note.pug b/packages/backend/src/server/web/views/note.pug index 65696ea138..badfcccd61 100644 --- a/packages/backend/src/server/web/views/note.pug +++ b/packages/backend/src/server/web/views/note.pug @@ -22,6 +22,9 @@ block og block meta if user.host || isRenote || profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/src/server/web/views/page.pug b/packages/backend/src/server/web/views/page.pug index 4219e76a52..ddffc361c8 100644 --- a/packages/backend/src/server/web/views/page.pug +++ b/packages/backend/src/server/web/views/page.pug @@ -21,6 +21,9 @@ block og block meta if profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/src/server/web/views/user.pug b/packages/backend/src/server/web/views/user.pug index 119993fdb5..f4c83aa89d 100644 --- a/packages/backend/src/server/web/views/user.pug +++ b/packages/backend/src/server/web/views/user.pug @@ -20,6 +20,9 @@ block og block meta if user.host || profile.noCrawle meta(name='robots' content='noindex') + if profile.preventAiLearning + meta(name='robots' content='noimageai') + meta(name='robots' content='noai') meta(name='misskey:user-username' content=user.username) meta(name='misskey:user-id' content=user.id) diff --git a/packages/backend/test/e2e/note.ts b/packages/backend/test/e2e/note.ts index 9c851a5dd6..d2eb8f01d7 100644 --- a/packages/backend/test/e2e/note.ts +++ b/packages/backend/test/e2e/note.ts @@ -541,6 +541,61 @@ describe('Note', () => { assert.strictEqual(res.status, 400); }); + + test('センシティブな投稿はhomeになる (単語指定)', async () => { + const sensitive = await api('admin/update-meta', { + sensitiveWords: [ + "test", + ] + }, alice); + + assert.strictEqual(sensitive.status, 204); + + await new Promise(x => setTimeout(x, 2)); + + const note1 = await api('/notes/create', { + text: 'hogetesthuge', + }, alice); + + assert.strictEqual(note1.status, 200); + assert.strictEqual(note1.body.createdNote.visibility, 'home'); + + }); + + test('センシティブな投稿はhomeになる (正規表現)', async () => { + const sensitive = await api('admin/update-meta', { + sensitiveWords: [ + "/Test/i", + ] + }, alice); + + assert.strictEqual(sensitive.status, 204); + + const note2 = await api('/notes/create', { + text: 'hogetesthuge', + }, alice); + + assert.strictEqual(note2.status, 200); + assert.strictEqual(note2.body.createdNote.visibility, 'home'); + }); + + test('センシティブな投稿はhomeになる (スペースアンド)', async () => { + const sensitive = await api('admin/update-meta', { + sensitiveWords: [ + "Test hoge" + ] + }, alice); + + assert.strictEqual(sensitive.status, 204); + + const note2 = await api('/notes/create', { + text: 'hogeTesthuge', + }, alice); + + assert.strictEqual(note2.status, 200); + assert.strictEqual(note2.body.createdNote.visibility, 'home'); + + }); }); describe('notes/delete', () => { diff --git a/packages/backend/test/e2e/users.ts b/packages/backend/test/e2e/users.ts index 51537dda16..a7f8210c8e 100644 --- a/packages/backend/test/e2e/users.ts +++ b/packages/backend/test/e2e/users.ts @@ -145,6 +145,7 @@ describe('ユーザー', () => { carefulBot: user.carefulBot, autoAcceptFollowed: user.autoAcceptFollowed, noCrawle: user.noCrawle, + preventAiLearning: user.preventAiLearning, isExplorable: user.isExplorable, isDeleted: user.isDeleted, hideOnlineStatus: user.hideOnlineStatus, @@ -370,7 +371,7 @@ describe('ユーザー', () => { assert.deepStrictEqual(response.pinnedNotes, []); assert.strictEqual(response.pinnedPageId, null); assert.strictEqual(response.pinnedPage, null); - assert.strictEqual(response.publicReactions, false); + assert.strictEqual(response.publicReactions, true); assert.strictEqual(response.ffVisibility, 'public'); assert.strictEqual(response.twoFactorEnabled, false); assert.strictEqual(response.usePasswordLessLogin, false); @@ -390,6 +391,7 @@ describe('ユーザー', () => { assert.strictEqual(response.carefulBot, false); assert.strictEqual(response.autoAcceptFollowed, true); assert.strictEqual(response.noCrawle, false); + assert.strictEqual(response.preventAiLearning, true); assert.strictEqual(response.isExplorable, true); assert.strictEqual(response.isDeleted, false); assert.strictEqual(response.hideOnlineStatus, false); @@ -462,6 +464,8 @@ describe('ユーザー', () => { { parameters: (): object => ({ autoAcceptFollowed: false }) }, { parameters: (): object => ({ noCrawle: true }) }, { parameters: (): object => ({ noCrawle: false }) }, + { parameters: (): object => ({ preventAiLearning: false }) }, + { parameters: (): object => ({ preventAiLearning: true }) }, { parameters: (): object => ({ isBot: true }) }, { parameters: (): object => ({ isBot: false }) }, { parameters: (): object => ({ isCat: true }) }, diff --git a/packages/frontend/.storybook/changes.ts b/packages/frontend/.storybook/changes.ts index 755bec6869..fc0f0c286b 100644 --- a/packages/frontend/.storybook/changes.ts +++ b/packages/frontend/.storybook/changes.ts @@ -45,7 +45,7 @@ fs.readFile( micromatch(Array.from(modules), [ '../../assets/**', '../../fluent-emojis/**', - '../../locales/**', + '../../locales/ja-JP.yml', '../../misskey-assets/**', 'assets/**', 'public/**', diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 7646e152f9..5b4004d8e3 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -17,13 +17,13 @@ "@discordapp/twemoji": "14.1.2", "@rollup/plugin-alias": "5.0.0", "@rollup/plugin-json": "6.0.0", - "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-replace": "5.0.2", "@rollup/pluginutils": "5.0.2", "@syuilo/aiscript": "0.13.2", "@tabler/icons-webfont": "2.17.0", - "@vitejs/plugin-vue": "4.2.1", - "@vue-macros/reactivity-transform": "^0.3.5", - "@vue/compiler-sfc": "3.2.47", + "@vitejs/plugin-vue": "4.2.2", + "@vue-macros/reactivity-transform": "0.3.6", + "@vue/compiler-sfc": "3.3.1", "autosize": "5.0.2", "blurhash": "2.0.5", "broadcast-channel": "4.20.2", @@ -34,14 +34,14 @@ "chartjs-chart-matrix": "2.0.1", "chartjs-plugin-gradient": "0.6.1", "chartjs-plugin-zoom": "2.0.1", - "chromatic": "6.17.3", - "compare-versions": "5.0.1", + "chromatic": "6.17.4", + "compare-versions": "5.0.3", "cropperjs": "2.0.0-beta.2", "date-fns": "2.30.0", "escape-regexp": "0.0.1", "eventemitter3": "5.0.1", "gsap": "3.11.5", - "idb-keyval": "6.2.0", + "idb-keyval": "6.2.1", "insert-text-at-cursor": "0.3.0", "is-file-animated": "1.0.2", "json5": "2.2.3", @@ -53,7 +53,7 @@ "punycode": "2.3.0", "querystring": "0.2.1", "rndstr": "1.0.0", - "rollup": "3.21.3", + "rollup": "3.21.6", "s-age": "1.1.2", "sanitize-html": "2.10.0", "sass": "1.62.1", @@ -70,40 +70,40 @@ "typescript": "5.0.4", "uuid": "9.0.0", "vanilla-tilt": "1.8.0", - "vite": "4.3.4", - "vue": "3.2.47", + "vite": "4.3.5", + "vue": "3.3.1", "vue-plyr": "7.0.0", "vue-prism-editor": "2.0.0-alpha.2", "vuedraggable": "next" }, "devDependencies": { - "@storybook/addon-actions": "7.0.7", - "@storybook/addon-essentials": "7.0.7", - "@storybook/addon-interactions": "7.0.7", - "@storybook/addon-links": "7.0.7", - "@storybook/addon-storysource": "7.0.7", - "@storybook/addons": "7.0.7", - "@storybook/blocks": "7.0.7", - "@storybook/core-events": "7.0.7", + "@storybook/addon-actions": "7.0.10", + "@storybook/addon-essentials": "7.0.10", + "@storybook/addon-interactions": "7.0.10", + "@storybook/addon-links": "7.0.10", + "@storybook/addon-storysource": "7.0.10", + "@storybook/addons": "7.0.10", + "@storybook/blocks": "7.0.10", + "@storybook/core-events": "7.0.10", "@storybook/jest": "0.1.0", - "@storybook/manager-api": "7.0.7", - "@storybook/preview-api": "7.0.7", - "@storybook/react": "7.0.7", - "@storybook/react-vite": "7.0.7", + "@storybook/manager-api": "7.0.10", + "@storybook/preview-api": "7.0.10", + "@storybook/react": "7.0.10", + "@storybook/react-vite": "7.0.10", "@storybook/testing-library": "0.1.0", - "@storybook/theming": "7.0.7", - "@storybook/types": "7.0.7", - "@storybook/vue3": "7.0.7", - "@storybook/vue3-vite": "7.0.7", + "@storybook/theming": "7.0.10", + "@storybook/types": "7.0.10", + "@storybook/vue3": "7.0.10", + "@storybook/vue3-vite": "7.0.10", "@testing-library/jest-dom": "5.16.5", "@testing-library/vue": "7.0.0", "@types/escape-regexp": "0.0.1", "@types/estree": "1.0.1", "@types/gulp": "4.0.10", - "@types/gulp-rename": "2.0.1", - "@types/matter-js": "0.18.2", + "@types/gulp-rename": "2.0.2", + "@types/matter-js": "0.18.3", "@types/micromatch": "4.0.2", - "@types/node": "18.16.3", + "@types/node": "20.1.3", "@types/punycode": "2.1.0", "@types/sanitize-html": "2.9.0", "@types/seedrandom": "3.0.5", @@ -113,19 +113,19 @@ "@types/uuid": "9.0.1", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.59.2", - "@typescript-eslint/parser": "5.59.2", - "@vitest/coverage-c8": "0.30.1", - "@vue/runtime-core": "3.2.47", + "@typescript-eslint/eslint-plugin": "5.59.5", + "@typescript-eslint/parser": "5.59.5", + "@vitest/coverage-c8": "0.31.0", + "@vue/runtime-core": "3.3.1", "astring": "1.8.4", "chokidar-cli": "3.0.0", "cross-env": "7.0.3", - "cypress": "12.11.0", - "eslint": "8.39.0", + "cypress": "12.12.0", + "eslint": "8.40.0", "eslint-plugin-import": "2.27.5", - "eslint-plugin-vue": "9.11.0", + "eslint-plugin-vue": "9.12.0", "fast-glob": "3.2.12", - "happy-dom": "9.10.2", + "happy-dom": "9.16.0", "micromatch": "3.1.10", "msw": "1.2.1", "msw-storybook-addon": "1.8.0", @@ -133,13 +133,13 @@ "react": "18.2.0", "react-dom": "18.2.0", "start-server-and-test": "2.0.0", - "storybook": "7.0.7", + "storybook": "7.0.10", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "summaly": "github:misskey-dev/summaly", "vite-plugin-turbosnap": "1.0.2", - "vitest": "0.30.1", + "vitest": "0.31.0", "vitest-fetch-mock": "0.2.2", - "vue-eslint-parser": "9.1.1", - "vue-tsc": "1.6.3" + "vue-eslint-parser": "9.2.1", + "vue-tsc": "1.6.4" } } diff --git a/packages/frontend/src/components/MkCheckbox.vue b/packages/frontend/src/components/MkCheckbox.vue deleted file mode 100644 index a8e24dd839..0000000000 --- a/packages/frontend/src/components/MkCheckbox.vue +++ /dev/null @@ -1,144 +0,0 @@ -<template> -<div - class="ziffeoms" - :class="{ disabled, checked }" -> - <input - ref="input" - type="checkbox" - :disabled="disabled" - @keydown.enter="toggle" - > - <span ref="button" v-adaptive-border v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" @click.prevent="toggle"> - <i class="check ti ti-check"></i> - </span> - <span class="label"> - <!-- TODO: 無名slotの方は廃止 --> - <span @click="toggle"><slot name="label"></slot><slot></slot></span> - <p class="caption"><slot name="caption"></slot></p> - </span> -</div> -</template> - -<script lang="ts" setup> -import { toRefs, Ref } from 'vue'; -import * as os from '@/os'; -import MkRippleEffect from '@/components/MkRippleEffect.vue'; -import { i18n } from '@/i18n'; - -const props = defineProps<{ - modelValue: boolean | Ref<boolean>; - disabled?: boolean; -}>(); - -const emit = defineEmits<{ - (ev: 'update:modelValue', v: boolean): void; -}>(); - -let button = $shallowRef<HTMLElement>(); -const checked = toRefs(props).modelValue; -const toggle = () => { - if (props.disabled) return; - emit('update:modelValue', !checked.value); - - if (!checked.value) { - const rect = button.getBoundingClientRect(); - const x = rect.left + (button.offsetWidth / 2); - const y = rect.top + (button.offsetHeight / 2); - os.popup(MkRippleEffect, { x, y, particle: false }, {}, 'end'); - } -}; -</script> - -<style lang="scss" scoped> -.ziffeoms { - position: relative; - display: flex; - transition: all 0.2s ease; - - > * { - user-select: none; - } - - > input { - position: absolute; - width: 0; - height: 0; - opacity: 0; - margin: 0; - } - - > .button { - position: relative; - display: inline-flex; - flex-shrink: 0; - margin: 0; - box-sizing: border-box; - width: 23px; - height: 23px; - outline: none; - background: var(--panel); - border: solid 1px var(--panel); - border-radius: 4px; - cursor: pointer; - transition: inherit; - - > .check { - margin: auto; - opacity: 0; - color: var(--fgOnAccent); - font-size: 13px; - transform: scale(0.5); - transition: all 0.2s ease; - } - } - - &:hover { - > .button { - border-color: var(--inputBorderHover) !important; - } - } - - > .label { - margin-left: 12px; - margin-top: 2px; - display: block; - transition: inherit; - color: var(--fg); - - > span { - display: block; - line-height: 20px; - cursor: pointer; - transition: inherit; - } - - > .caption { - margin: 8px 0 0 0; - color: var(--fgTransparentWeak); - font-size: 0.85em; - - &:empty { - display: none; - } - } - } - - &.disabled { - opacity: 0.6; - cursor: not-allowed; - } - - &.checked { - > .button { - background-color: var(--accent) !important; - border-color: var(--accent) !important; - - > .check { - opacity: 1; - transform: scale(1); - } - } - } -} -</style> diff --git a/packages/frontend/src/components/MkInstanceStats.vue b/packages/frontend/src/components/MkInstanceStats.vue index 0f87fef6b1..6fcd8f7811 100644 --- a/packages/frontend/src/components/MkInstanceStats.vue +++ b/packages/frontend/src/components/MkInstanceStats.vue @@ -52,9 +52,12 @@ <MkFoldableSection class="item"> <template #header>Retention rate</template> - <div class="_panel" :class="$style.retention"> + <div class="_panel" :class="$style.retentionHeatmap"> <MkRetentionHeatmap/> </div> + <div class="_panel" :class="$style.retentionLine"> + <MkRetentionLineChart/> + </div> </MkFoldableSection> <MkFoldableSection class="item"> @@ -86,6 +89,7 @@ import { i18n } from '@/i18n'; import MkHeatmap from '@/components/MkHeatmap.vue'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; import MkRetentionHeatmap from '@/components/MkRetentionHeatmap.vue'; +import MkRetentionLineChart from '@/components/MkRetentionLineChart.vue'; import { initChart } from '@/scripts/init-chart'; initChart(); @@ -202,7 +206,12 @@ onMounted(() => { margin-bottom: 16px; } -.retention { +.retentionHeatmap { + padding: 16px; + margin-bottom: 16px; +} + +.retentionLine { padding: 16px; margin-bottom: 16px; } diff --git a/packages/frontend/src/components/MkModalWindow.vue b/packages/frontend/src/components/MkModalWindow.vue index ad7dc4da11..63c55b904a 100644 --- a/packages/frontend/src/components/MkModalWindow.vue +++ b/packages/frontend/src/components/MkModalWindow.vue @@ -1,15 +1,15 @@ <template> <MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')"> - <div ref="rootEl" class="ebkgoccj" :style="{ width: `${width}px`, height: `min(${height}px, 100%)` }" @keydown="onKeydown"> - <div ref="headerEl" class="header"> - <button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button> - <span class="title"> + <div ref="rootEl" :class="$style.root" :style="{ width: `${width}px`, height: `min(${height}px, 100%)` }" @keydown="onKeydown"> + <div ref="headerEl" :class="$style.header"> + <button v-if="withOkButton" :class="$style.headerButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button> + <span :class="$style.title"> <slot name="header"></slot> </span> - <button v-if="!withOkButton" class="_button" data-cy-modal-window-close @click="$emit('close')"><i class="ti ti-x"></i></button> - <button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button> + <button v-if="!withOkButton" :class="$style.headerButton" class="_button" data-cy-modal-window-close @click="$emit('close')"><i class="ti ti-x"></i></button> + <button v-if="withOkButton" :class="$style.headerButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button> </div> - <div class="body"> + <div :class="$style.body"> <slot :width="bodyWidth" :height="bodyHeight"></slot> </div> </div> @@ -81,8 +81,8 @@ defineExpose({ }); </script> -<style lang="scss" scoped> -.ebkgoccj { +<style lang="scss" module> +.root { margin: auto; overflow: hidden; display: flex; @@ -96,51 +96,52 @@ defineExpose({ --root-margin: 16px; } - > .header { - $height: 46px; - $height-narrow: 42px; - display: flex; - flex-shrink: 0; - background: var(--windowHeader); - -webkit-backdrop-filter: var(--blur, blur(15px)); - backdrop-filter: var(--blur, blur(15px)); + --headerHeight: 46px; + --headerHeightNarrow: 42px; +} - > button { - height: $height; - width: $height; +.header { + display: flex; + flex-shrink: 0; + background: var(--windowHeader); + -webkit-backdrop-filter: var(--blur, blur(15px)); + backdrop-filter: var(--blur, blur(15px)); +} - @media (max-width: 500px) { - height: $height-narrow; - width: $height-narrow; - } - } +.headerButton { + height: var(--headerHeight); + width: var(--headerHeight); - > .title { - flex: 1; - line-height: $height; - padding-left: 32px; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - pointer-events: none; - - @media (max-width: 500px) { - line-height: $height-narrow; - padding-left: 16px; - } - } - - > button + .title { - padding-left: 0; - } - } - - > .body { - flex: 1; - overflow: auto; - background: var(--panel); - container-type: size; + @media (max-width: 500px) { + height: var(--headerHeightNarrow); + width: var(--headerHeightNarrow); } } + +.title { + flex: 1; + line-height: var(--headerHeight); + padding-left: 32px; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + pointer-events: none; + + @media (max-width: 500px) { + line-height: var(--headerHeightNarrow); + padding-left: 16px; + } +} + +.headerButton + .title { + padding-left: 0; +} + +.body { + flex: 1; + overflow: auto; + background: var(--panel); + container-type: size; +} </style> diff --git a/packages/frontend/src/components/MkNoteSub.vue b/packages/frontend/src/components/MkNoteSub.vue index c293641355..9ac0b7858f 100644 --- a/packages/frontend/src/components/MkNoteSub.vue +++ b/packages/frontend/src/components/MkNoteSub.vue @@ -1,6 +1,7 @@ <template> <div :class="[$style.root, { [$style.children]: depth > 1 }]"> <div :class="$style.main"> + <div v-if="note.channel" :class="$style.colorBar" :style="{ background: note.channel.color }"></div> <MkAvatar :class="$style.avatar" :user="note.user" link preview/> <div :class="$style.body"> <MkNoteHeader :class="$style.header" :note="note" :mini="true"/> @@ -62,6 +63,7 @@ if (props.detail) { .root { padding: 16px 32px; font-size: 0.9em; + position: relative; &.children { padding: 10px 0 0 16px; @@ -73,6 +75,16 @@ if (props.detail) { display: flex; } +.colorBar { + position: absolute; + top: 8px; + left: 8px; + width: 5px; + height: calc(100% - 8px); + border-radius: 999px; + pointer-events: none; +} + .avatar { flex-shrink: 0; display: block; diff --git a/packages/frontend/src/components/MkRadio.vue b/packages/frontend/src/components/MkRadio.vue index 5db2f5ee6d..eea94d4692 100644 --- a/packages/frontend/src/components/MkRadio.vue +++ b/packages/frontend/src/components/MkRadio.vue @@ -1,8 +1,7 @@ <template> <div v-adaptive-border - class="novjtctn" - :class="{ disabled, checked }" + :class="[$style.root, { [$style.disabled]: disabled, [$style.checked]: checked }]" :aria-checked="checked" :aria-disabled="disabled" @click="toggle" @@ -10,11 +9,12 @@ <input type="radio" :disabled="disabled" + :class="$style.input" > - <span class="button"> + <span :class="$style.button"> <span></span> </span> - <span class="label"><slot></slot></span> + <span :class="$style.label"><slot></slot></span> </div> </template> @@ -39,8 +39,8 @@ function toggle(): void { } </script> -<style lang="scss" scoped> -.novjtctn { +<style lang="scss" module> +.root { position: relative; display: inline-block; text-align: left; @@ -53,17 +53,11 @@ function toggle(): void { border-radius: 6px; font-size: 90%; transition: all 0.2s; - - > * { - user-select: none; - } + user-select: none; &.disabled { opacity: 0.6; - - &, * { - cursor: not-allowed !important; - } + cursor: not-allowed !important; } &:hover { @@ -74,10 +68,7 @@ function toggle(): void { background-color: var(--accentedBg) !important; border-color: var(--accentedBg) !important; color: var(--accent); - - &, * { - cursor: default !important; - } + cursor: default !important; > .button { border-color: var(--accent); @@ -89,44 +80,44 @@ function toggle(): void { } } } +} - > input { - position: absolute; - width: 0; - height: 0; - opacity: 0; - margin: 0; - } +.input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; +} - > .button { - position: absolute; - width: 14px; - height: 14px; - background: none; - border: solid 2px var(--inputBorder); - border-radius: 100%; - transition: inherit; +.button { + position: absolute; + width: 14px; + height: 14px; + background: none; + border: solid 2px var(--inputBorder); + border-radius: 100%; + transition: inherit; - &:after { - content: ''; - display: block; - position: absolute; - top: 3px; - right: 3px; - bottom: 3px; - left: 3px; - border-radius: 100%; - opacity: 0; - transform: scale(0); - transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); - } - } - - > .label { - margin-left: 28px; + &:after { + content: ''; display: block; - line-height: 20px; - cursor: pointer; + position: absolute; + top: 3px; + right: 3px; + bottom: 3px; + left: 3px; + border-radius: 100%; + opacity: 0; + transform: scale(0); + transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } } + +.label { + margin-left: 28px; + display: block; + line-height: 20px; + cursor: pointer; +} </style> diff --git a/packages/frontend/src/components/MkRetentionHeatmap.vue b/packages/frontend/src/components/MkRetentionHeatmap.vue index f33f68cab7..311d5c425c 100644 --- a/packages/frontend/src/components/MkRetentionHeatmap.vue +++ b/packages/frontend/src/components/MkRetentionHeatmap.vue @@ -40,7 +40,7 @@ async function renderChart() { let raw = await os.api('retention', { }); - raw = raw.slice(0, maxDays); + raw = raw.slice(0, maxDays + 1); const data = []; for (const record of raw) { @@ -90,8 +90,13 @@ async function renderChart() { borderRadius: 3, backgroundColor(c) { const value = c.dataset.data[c.dataIndex].v; - const a = value / max(c.dataset.data[c.dataIndex].y); - return alpha(color, a); + const m = max(c.dataset.data[c.dataIndex].y); + if (m === 0) { + return alpha(color, 0); + } else { + const a = value / m; + return alpha(color, a); + } }, fill: true, width(c) { @@ -129,6 +134,10 @@ async function renderChart() { autoSkip: false, callback: (value, index, values) => value, }, + title: { + display: true, + text: 'Days later', + }, }, y: { type: 'time', @@ -166,7 +175,12 @@ async function renderChart() { }, label(context) { const v = context.dataset.data[context.dataIndex]; - return [`Active: ${v.v} (${Math.round((v.v / max(v.y)) * 100)}%)`]; + const m = max(v.y); + if (m === 0) { + return [`Active: ${v.v} (-%)`]; + } else { + return [`Active: ${v.v} (${Math.round((v.v / m) * 100)}%)`]; + } }, }, //mode: 'index', diff --git a/packages/frontend/src/components/MkRetentionLineChart.vue b/packages/frontend/src/components/MkRetentionLineChart.vue new file mode 100644 index 0000000000..8bd0279806 --- /dev/null +++ b/packages/frontend/src/components/MkRetentionLineChart.vue @@ -0,0 +1,130 @@ +<template> +<canvas ref="chartEl"></canvas> +</template> + +<script lang="ts" setup> +import { onMounted, shallowRef } from 'vue'; +import { Chart } from 'chart.js'; +import tinycolor from 'tinycolor2'; +import { defaultStore } from '@/store'; +import { useChartTooltip } from '@/scripts/use-chart-tooltip'; +import { chartVLine } from '@/scripts/chart-vline'; +import { alpha } from '@/scripts/color'; +import { initChart } from '@/scripts/init-chart'; +import * as os from '@/os'; + +initChart(); + +const chartEl = shallowRef<HTMLCanvasElement>(null); + +const { handler: externalTooltipHandler } = useChartTooltip(); + +let chartInstance: Chart; + +const getYYYYMMDD = (date: Date) => { + const y = date.getFullYear().toString().padStart(2, '0'); + const m = (date.getMonth() + 1).toString().padStart(2, '0'); + const d = date.getDate().toString().padStart(2, '0'); + return `${y}/${m}/${d}`; +}; + +const getDate = (ymd: string) => { + const [y, m, d] = ymd.split('-').map(x => parseInt(x, 10)); + const date = new Date(y, m + 1, d, 0, 0, 0, 0); + return date; +}; + +onMounted(async () => { + let raw = await os.api('retention', { }); + + const vLineColor = defaultStore.state.darkMode ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)'; + + const accent = tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--accent')); + const color = accent.toHex(); + + chartInstance = new Chart(chartEl.value, { + type: 'line', + data: { + labels: [], + datasets: raw.map((record, i) => ({ + label: getYYYYMMDD(new Date(record.createdAt)), + pointRadius: 0, + borderWidth: 2, + borderJoinStyle: 'round', + borderColor: alpha(color, Math.min(1, (raw.length - (i - 1)) / raw.length)), + fill: false, + tension: 0.4, + data: [{ + x: '0', + y: 100, + d: getYYYYMMDD(new Date(record.createdAt)), + }, ...Object.entries(record.data).sort((a, b) => getDate(a[0]) > getDate(b[0]) ? 1 : -1).map(([k, v], i) => ({ + x: (i + 1).toString(), + y: (v / record.users) * 100, + d: getYYYYMMDD(new Date(record.createdAt)), + }))], + })), + }, + options: { + aspectRatio: 2.5, + layout: { + padding: { + left: 0, + right: 0, + top: 0, + bottom: 0, + }, + }, + scales: { + x: { + title: { + display: true, + text: 'Days later', + }, + }, + y: { + title: { + display: true, + text: 'Rate (%)', + }, + ticks: { + callback: (value, index, values) => value + '%', + }, + }, + }, + interaction: { + intersect: false, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + enabled: false, + callbacks: { + title(context) { + const v = context[0].dataset.data[context[0].dataIndex]; + return `${v.x} days later`; + }, + label(context) { + const v = context.dataset.data[context.dataIndex]; + const p = Math.round(v.y) + '%'; + return `${v.d} ${p}`; + }, + }, + mode: 'index', + animation: { + duration: 0, + }, + external: externalTooltipHandler, + }, + }, + }, + plugins: [chartVLine(vLineColor)], + }); +}); +</script> + +<style lang="scss" scoped> + +</style> diff --git a/packages/frontend/src/components/MkSelect.vue b/packages/frontend/src/components/MkSelect.vue index 2de890186a..4efb65c287 100644 --- a/packages/frontend/src/components/MkSelect.vue +++ b/packages/frontend/src/components/MkSelect.vue @@ -1,13 +1,13 @@ <template> -<div class="vblkjoeq"> - <div class="label" @click="focus"><slot name="label"></slot></div> - <div ref="container" class="input" :class="{ inline, disabled, focused }" @mousedown.prevent="show"> - <div ref="prefixEl" class="prefix"><slot name="prefix"></slot></div> +<div> + <div :class="$style.label" @click="focus"><slot name="label"></slot></div> + <div ref="container" :class="[$style.input, { [$style.inline]: inline, [$style.disabled]: disabled, [$style.focused]: focused }]" @mousedown.prevent="show"> + <div ref="prefixEl" :class="$style.prefix"><slot name="prefix"></slot></div> <select ref="inputEl" v-model="v" v-adaptive-border - class="select" + :class="$style.inputCore" :disabled="disabled" :required="required" :readonly="readonly" @@ -18,9 +18,9 @@ > <slot></slot> </select> - <div ref="suffixEl" class="suffix"><i class="ti ti-chevron-down" :class="[$style.chevron, { [$style.chevronOpening]: opening }]"></i></div> + <div ref="suffixEl" :class="$style.suffix"><i class="ti ti-chevron-down" :class="[$style.chevron, { [$style.chevronOpening]: opening }]"></i></div> </div> - <div class="caption"><slot name="caption"></slot></div> + <div :class="$style.caption"><slot name="caption"></slot></div> <MkButton v-if="manualSave && changed" primary @click="updated"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> </div> @@ -169,121 +169,116 @@ function show(ev: MouseEvent) { } </script> -<style lang="scss" scoped> -.vblkjoeq { - > .label { - font-size: 0.85em; - padding: 0 0 8px 0; - user-select: none; +<style lang="scss" module> +.label { + font-size: 0.85em; + padding: 0 0 8px 0; + user-select: none; - &:empty { - display: none; + &:empty { + display: none; + } +} + +.caption { + font-size: 0.85em; + padding: 8px 0 0 0; + color: var(--fgTransparentWeak); + + &:empty { + display: none; + } +} + +.input { + position: relative; + cursor: pointer; + + &.inline { + display: inline-block; + margin: 0; + } + + &.focused { + > .inputCore { + border-color: var(--accent) !important; + //box-shadow: 0 0 0 4px var(--focus); } } - > .caption { - font-size: 0.85em; - padding: 8px 0 0 0; - color: var(--fgTransparentWeak); + &.disabled { + opacity: 0.7; - &:empty { - display: none; + &, + > .inputCore { + cursor: not-allowed !important; } } - > .input { - position: relative; - cursor: pointer; - - &:hover { - > .select { - border-color: var(--inputBorderHover) !important; - } - } - - > .select { - appearance: none; - -webkit-appearance: none; - display: block; - height: v-bind("height + 'px'"); - width: 100%; - margin: 0; - padding: 0 12px; - font: inherit; - font-weight: normal; - font-size: 1em; - color: var(--fg); - background: var(--panel); - border: solid 1px var(--panel); - border-radius: 6px; - outline: none; - box-shadow: none; - box-sizing: border-box; - cursor: pointer; - transition: border-color 0.1s ease-out; - pointer-events: none; - user-select: none; - } - - > .prefix, - > .suffix { - display: flex; - align-items: center; - position: absolute; - z-index: 1; - top: 0; - padding: 0 12px; - font-size: 1em; - height: v-bind("height + 'px'"); - pointer-events: none; - - &:empty { - display: none; - } - - > * { - display: inline-block; - min-width: 16px; - max-width: 150px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - } - - > .prefix { - left: 0; - padding-right: 6px; - } - - > .suffix { - right: 0; - padding-left: 6px; - } - - &.inline { - display: inline-block; - margin: 0; - } - - &.focused { - > select { - border-color: var(--accent) !important; - } - } - - &.disabled { - opacity: 0.7; - - &, * { - cursor: not-allowed !important; - } + &:hover { + > .inputCore { + border-color: var(--inputBorderHover) !important; } } } -</style> -<style lang="scss" module> +.inputCore { + appearance: none; + -webkit-appearance: none; + display: block; + height: v-bind("height + 'px'"); + width: 100%; + margin: 0; + padding: 0 12px; + font: inherit; + font-weight: normal; + font-size: 1em; + color: var(--fg); + background: var(--panel); + border: solid 1px var(--panel); + border-radius: 6px; + outline: none; + box-shadow: none; + box-sizing: border-box; + transition: border-color 0.1s ease-out; + cursor: pointer; + pointer-events: none; + user-select: none; +} + +.prefix, +.suffix { + display: flex; + align-items: center; + position: absolute; + z-index: 1; + top: 0; + padding: 0 12px; + font-size: 1em; + height: v-bind("height + 'px'"); + min-width: 16px; + max-width: 150px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + box-sizing: border-box; + pointer-events: none; + + &:empty { + display: none; + } +} + +.prefix { + left: 0; + padding-right: 6px; +} + +.suffix { + right: 0; + padding-left: 6px; +} + .chevron { transition: transform 0.1s ease-out; } diff --git a/packages/frontend/src/components/MkSwitch.vue b/packages/frontend/src/components/MkSwitch.vue index d9f6716f92..63738b6a44 100644 --- a/packages/frontend/src/components/MkSwitch.vue +++ b/packages/frontend/src/components/MkSwitch.vue @@ -1,21 +1,19 @@ <template> -<div - class="ziffeomt" - :class="{ disabled, checked }" -> +<div :class="[$style.root, { [$style.disabled]: disabled, [$style.checked]: checked }]"> <input ref="input" type="checkbox" :disabled="disabled" + :class="$style.input" @keydown.enter="toggle" > - <span ref="button" v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" data-cy-switch-toggle @click.prevent="toggle"> - <div class="knob"></div> + <span ref="button" v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" :class="$style.button" data-cy-switch-toggle @click.prevent="toggle"> + <div :class="$style.knob"></div> </span> - <span class="label"> + <span :class="$style.body"> <!-- TODO: 無名slotの方は廃止 --> - <span @click="toggle"><slot name="label"></slot><slot></slot></span> - <p class="caption"><slot name="caption"></slot></p> + <span :class="$style.label" @click="toggle"><slot name="label"></slot><slot></slot></span> + <p :class="$style.caption"><slot name="caption"></slot></p> </span> </div> </template> @@ -45,52 +43,12 @@ const toggle = () => { }; </script> -<style lang="scss" scoped> -.ziffeomt { +<style lang="scss" module> +.root { position: relative; display: flex; transition: all 0.2s ease; - - > * { - user-select: none; - } - - > input { - position: absolute; - width: 0; - height: 0; - opacity: 0; - margin: 0; - } - - > .button { - position: relative; - display: inline-flex; - flex-shrink: 0; - margin: 0; - box-sizing: border-box; - width: 32px; - height: 23px; - outline: none; - background: var(--switchOffBg); - background-clip: content-box; - border: solid 1px var(--switchOffBg); - border-radius: 999px; - cursor: pointer; - transition: inherit; - user-select: none; - - > .knob { - position: absolute; - top: 3px; - left: 3px; - width: 15px; - height: 15px; - background: var(--switchOffFg); - border-radius: 999px; - transition: all 0.2s ease; - } - } + user-select: none; &:hover { > .button { @@ -98,31 +56,6 @@ const toggle = () => { } } - > .label { - margin-left: 12px; - margin-top: 2px; - display: block; - transition: inherit; - color: var(--fg); - - > span { - display: block; - line-height: 20px; - cursor: pointer; - transition: inherit; - } - - > .caption { - margin: 8px 0 0 0; - color: var(--fgTransparentWeak); - font-size: 0.85em; - - &:empty { - display: none; - } - } - } - &.disabled { opacity: 0.6; cursor: not-allowed; @@ -140,4 +73,66 @@ const toggle = () => { } } } + +.input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; +} + +.button { + position: relative; + display: inline-flex; + flex-shrink: 0; + margin: 0; + box-sizing: border-box; + width: 32px; + height: 23px; + outline: none; + background: var(--switchOffBg); + background-clip: content-box; + border: solid 1px var(--switchOffBg); + border-radius: 999px; + cursor: pointer; + transition: inherit; + user-select: none; +} + +.knob { + position: absolute; + top: 3px; + left: 3px; + width: 15px; + height: 15px; + background: var(--switchOffFg); + border-radius: 999px; + transition: all 0.2s ease; +} + +.body { + margin-left: 12px; + margin-top: 2px; + display: block; + transition: inherit; + color: var(--fg); +} + +.label { + display: block; + line-height: 20px; + cursor: pointer; + transition: inherit; +} + +.caption { + margin: 8px 0 0 0; + color: var(--fgTransparentWeak); + font-size: 0.85em; + + &:empty { + display: none; + } +} </style> diff --git a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue index b89e3e4c9d..a2a195cb09 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue @@ -40,10 +40,6 @@ import * as os from '@/os'; import { $i } from '@/account'; import MkPagination from '@/components/MkPagination.vue'; -const emit = defineEmits<{ - (ev: 'done'): void; -}>(); - const pinnedUsers = { endpoint: 'pinned-users', noPaging: true }; const popularUsers = { endpoint: 'users', limit: 10, noPaging: true, params: { diff --git a/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts b/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts new file mode 100644 index 0000000000..70817d83c3 --- /dev/null +++ b/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts @@ -0,0 +1,31 @@ +/* eslint-disable @typescript-eslint/explicit-function-return-type */ +import { StoryObj } from '@storybook/vue3'; +import MkUserSetupDialog_Privacy from './MkUserSetupDialog.Privacy.vue'; +export const Default = { + render(args) { + return { + components: { + MkUserSetupDialog_Privacy, + }, + setup() { + return { + args, + }; + }, + computed: { + props() { + return { + ...this.args, + }; + }, + }, + template: '<MkUserSetupDialog_Privacy v-bind="props" />', + }; + }, + args: { + + }, + parameters: { + layout: 'centered', + }, +} satisfies StoryObj<typeof MkUserSetupDialog_Privacy>; diff --git a/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue b/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue new file mode 100644 index 0000000000..e9f4f68df8 --- /dev/null +++ b/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue @@ -0,0 +1,64 @@ +<template> +<div class="_gaps"> + <MkInfo>{{ i18n.ts._initialAccountSetting.theseSettingsCanEditLater }}</MkInfo> + + <MkFolder> + <template #label>{{ i18n.ts.makeFollowManuallyApprove }}</template> + <template #suffix>{{ isLocked ? i18n.ts.on : i18n.ts.off }}</template> + + <MkSwitch v-model="isLocked">{{ i18n.ts.makeFollowManuallyApprove }}<template #caption>{{ i18n.ts.lockedAccountInfo }}</template></MkSwitch> + </MkFolder> + + <MkFolder> + <template #label>{{ i18n.ts.hideOnlineStatus }}</template> + <template #suffix>{{ hideOnlineStatus ? i18n.ts.on : i18n.ts.off }}</template> + + <MkSwitch v-model="hideOnlineStatus">{{ i18n.ts.hideOnlineStatus }}<template #caption>{{ i18n.ts.hideOnlineStatusDescription }}</template></MkSwitch> + </MkFolder> + + <MkFolder> + <template #label>{{ i18n.ts.noCrawle }}</template> + <template #suffix>{{ noCrawle ? i18n.ts.on : i18n.ts.off }}</template> + + <MkSwitch v-model="noCrawle">{{ i18n.ts.noCrawle }}<template #caption>{{ i18n.ts.noCrawleDescription }}</template></MkSwitch> + </MkFolder> + + <MkFolder> + <template #label>{{ i18n.ts.preventAiLearning }}</template> + <template #suffix>{{ preventAiLearning ? i18n.ts.on : i18n.ts.off }}</template> + + <MkSwitch v-model="preventAiLearning">{{ i18n.ts.preventAiLearning }}<template #caption>{{ i18n.ts.preventAiLearningDescription }}</template></MkSwitch> + </MkFolder> + + <MkInfo>{{ i18n.ts._initialAccountSetting.youCanEditMoreSettingsInSettingsPageLater }}</MkInfo> +</div> +</template> + +<script lang="ts" setup> +import { computed, ref, watch } from 'vue'; +import { instance } from '@/instance'; +import { i18n } from '@/i18n'; +import MkSwitch from '@/components/MkSwitch.vue'; +import MkInfo from '@/components/MkInfo.vue'; +import MkFolder from '@/components/MkFolder.vue'; +import * as os from '@/os'; +import { $i } from '@/account'; + +let isLocked = ref(false); +let hideOnlineStatus = ref(false); +let noCrawle = ref(false); +let preventAiLearning = ref(true); + +watch([isLocked, hideOnlineStatus, noCrawle, preventAiLearning], () => { + os.api('i/update', { + isLocked: !!isLocked.value, + hideOnlineStatus: !!hideOnlineStatus.value, + noCrawle: !!noCrawle.value, + preventAiLearning: !!preventAiLearning.value, + }); +}); +</script> + +<style lang="scss" module> + +</style> diff --git a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue index adb8d43349..f26ea11214 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue @@ -37,10 +37,6 @@ import { chooseFileFromPc } from '@/scripts/select-file'; import * as os from '@/os'; import { $i } from '@/account'; -const emit = defineEmits<{ - (ev: 'done'): void; -}>(); - const name = ref(''); const description = ref(''); diff --git a/packages/frontend/src/components/MkUserSetupDialog.vue b/packages/frontend/src/components/MkUserSetupDialog.vue index 096b88c309..4e80a5c0fb 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.vue @@ -7,9 +7,17 @@ @close="close(true)" @closed="emit('closed')" > - <template #header>{{ i18n.ts.initialAccountSetting }}</template> + <template v-if="page === 1" #header>{{ i18n.ts._initialAccountSetting.profileSetting }}</template> + <template v-else-if="page === 2" #header>{{ i18n.ts._initialAccountSetting.privacySetting }}</template> + <template v-else-if="page === 3" #header>{{ i18n.ts.follow }}</template> + <template v-else-if="page === 4" #header>{{ i18n.ts.pushNotification }}</template> + <template v-else-if="page === 5" #header>{{ i18n.ts.done }}</template> + <template v-else #header>{{ i18n.ts.initialAccountSetting }}</template> <div style="overflow-x: clip;"> + <div :class="$style.progressBar"> + <div :class="$style.progressBarValue" :style="{ width: `${(page / 5) * 100}%` }"></div> + </div> <Transition mode="out-in" :enter-active-class="$style.transition_x_enterActive" @@ -40,12 +48,22 @@ <template v-else-if="page === 2"> <div style="height: 100cqh; overflow: auto;"> <MkSpacer :margin-min="20" :margin-max="28"> - <XFollow/> + <XPrivacy/> <MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton> </MkSpacer> </div> </template> <template v-else-if="page === 3"> + <div style="height: 100cqh; overflow: auto;"> + <MkSpacer :margin-min="20" :margin-max="28"> + <XFollow/> + </MkSpacer> + <div :class="$style.pageFooter"> + <MkButton primary rounded gradate style="margin: 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton> + </div> + </div> + </template> + <template v-else-if="page === 4"> <div :class="$style.centerPage"> <MkSpacer :margin-min="20" :margin-max="28"> <div class="_gaps" style="text-align: center;"> @@ -58,7 +76,7 @@ </MkSpacer> </div> </template> - <template v-else-if="page === 4"> + <template v-else-if="page === 5"> <div :class="$style.centerPage"> <MkSpacer :margin-min="20" :margin-max="28"> <div class="_gaps" style="text-align: center;"> @@ -87,6 +105,7 @@ import MkModalWindow from '@/components/MkModalWindow.vue'; import MkButton from '@/components/MkButton.vue'; import XProfile from '@/components/MkUserSetupDialog.Profile.vue'; import XFollow from '@/components/MkUserSetupDialog.Follow.vue'; +import XPrivacy from '@/components/MkUserSetupDialog.Privacy.vue'; import { i18n } from '@/i18n'; import { instance } from '@/instance'; import { host } from '@/config'; @@ -134,6 +153,21 @@ async function close(skip: boolean) { transform: translateX(-50px); } +.progressBar { + position: absolute; + top: 0; + left: 0; + z-index: 10; + width: 100%; + height: 4px; +} + +.progressBarValue { + height: 100%; + background: linear-gradient(90deg, var(--buttonGradateA), var(--buttonGradateB)); + transition: all 0.5s cubic-bezier(0,.5,.5,1); +} + .centerPage { display: flex; justify-content: center; @@ -142,4 +176,14 @@ async function close(skip: boolean) { padding-bottom: 30px; box-sizing: border-box; } + +.pageFooter { + position: sticky; + bottom: 0; + left: 0; + padding: 12px; + border-top: solid 0.5px var(--divider); + -webkit-backdrop-filter: var(--blur, blur(15px)); + backdrop-filter: var(--blur, blur(15px)); +} </style> diff --git a/packages/frontend/src/components/MkWidgets.vue b/packages/frontend/src/components/MkWidgets.vue index 33e594acd8..ad1c02a488 100644 --- a/packages/frontend/src/components/MkWidgets.vue +++ b/packages/frontend/src/components/MkWidgets.vue @@ -32,6 +32,7 @@ <component :is="`widget-${widget.name}`" v-for="widget in widgets" v-else :key="widget.id" :ref="el => widgetRefs[widget.id] = el" :class="$style.widget" :widget="widget" @update-props="updateWidget(widget.id, $event)" @contextmenu.stop="onContextmenu(widget, $event)"/> </div> </template> + <script lang="ts"> export type Widget = { name: string; @@ -42,6 +43,7 @@ export type DefaultStoredWidget = { place: string | null; } & Widget; </script> + <script lang="ts" setup> import { defineAsyncComponent, ref } from 'vue'; import { v4 as uuid } from 'uuid'; diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue index ad36dcabe4..42abdcbdcc 100644 --- a/packages/frontend/src/components/global/MkAvatar.vue +++ b/packages/frontend/src/components/global/MkAvatar.vue @@ -2,7 +2,7 @@ <component :is="link ? MkA : 'span'" v-user-preview="preview ? user.id : undefined" v-bind="bound" class="_noSelect" :class="[$style.root, { [$style.animation]: animation, [$style.cat]: user.isCat, [$style.square]: squareAvatars }]" :style="{ color }" :title="acct(user)" @click="onClick"> <img :class="$style.inner" :src="url" decoding="async"/> <MkUserOnlineIndicator v-if="indicator" :class="$style.indicator" :user="user"/> - <div v-if="user.isCat" :class="[$style.ears, { [$style.mask]: useBlurEffect }]"> + <div v-if="user.isCat" :class="[$style.ears]"> <div :class="$style.earLeft"> <div v-if="false" :class="$style.layer"> <div :class="$style.plot" :style="{ backgroundImage: `url(${JSON.stringify(url)})` }"/> @@ -154,24 +154,6 @@ watch(() => props.user.avatarBlurhash, () => { padding: 50%; pointer-events: none; - &.mask { - -webkit-mask: - url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><filter id="a"><feGaussianBlur in="SourceGraphic" stdDeviation="1"/></filter><circle cx="16" cy="16" r="15" filter="url(%23a)"/></svg>') center / 50% 50%, - linear-gradient(#fff, #fff); - -webkit-mask-composite: destination-out, source-over; - mask: - url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><filter id="a"><feGaussianBlur in="SourceGraphic" stdDeviation="1"/></filter><circle cx="16" cy="16" r="15" filter="url(%23a)"/></svg>') exclude center / 50% 50%, - linear-gradient(#fff, #fff); // polyfill of `image(#fff)` - - > .earLeft { - animation: eartightleft 6s infinite; - } - - > .earRight { - animation: eartightright 6s infinite; - } - } - > .earLeft, > .earRight { contain: strict; diff --git a/packages/frontend/src/components/page/page.image.vue b/packages/frontend/src/components/page/page.image.vue index 0237644d29..6ea81d257f 100644 --- a/packages/frontend/src/components/page/page.image.vue +++ b/packages/frontend/src/components/page/page.image.vue @@ -1,6 +1,6 @@ <template> -<div class="lzyxtsnt"> - <ImgWithBlurhash v-if="image" :hash="image.blurhash" :src="image.url" :alt="image.comment" :title="image.comment" :cover="false"/> +<div> + <ImgWithBlurhash v-if="image" style="max-width: 100%;" :hash="image.blurhash" :src="image.url" :alt="image.comment" :title="image.comment" :width="image.properties.width" :height="image.properties.height" :cover="false"/> </div> </template> @@ -17,11 +17,3 @@ const props = defineProps<{ const image = props.hpml.page.attachedFiles.find(x => x.id === props.block.fileId); </script> - -<style lang="scss" scoped> -.lzyxtsnt { - > img { - max-width: 100%; - } -} -</style> diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue index e592c629ce..9e0594db3c 100644 --- a/packages/frontend/src/pages/about-misskey.vue +++ b/packages/frontend/src/pages/about-misskey.vue @@ -238,6 +238,7 @@ const patrons = [ 'ずも', 'binvinyl', '渡志郎', + 'ぷーざ', ]; let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure')); diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue index ffd3b6e233..bf788e3609 100644 --- a/packages/frontend/src/pages/admin/moderation.vue +++ b/packages/frontend/src/pages/admin/moderation.vue @@ -27,7 +27,7 @@ <MkTextarea v-model="sensitiveWords"> <template #label>{{ i18n.ts.sensitiveWords }}</template> - <template #caption>{{ i18n.ts.sensitiveWordsDescription }}</template> + <template #caption>{{ i18n.ts.sensitiveWordsDescription }}<br>{{ i18n.ts.sensitiveWordsDescription2 }}</template> </MkTextarea> </div> </FormSuspense> diff --git a/packages/frontend/src/pages/channel.vue b/packages/frontend/src/pages/channel.vue index af1b4d2056..9aa564a7da 100644 --- a/packages/frontend/src/pages/channel.vue +++ b/packages/frontend/src/pages/channel.vue @@ -46,7 +46,7 @@ </MkInput> <MkButton primary rounded style="margin-top: 8px;" @click="search()">{{ i18n.ts.search }}</MkButton> </div> - <MkNotes v-if="searchPagination" :key="searchQuery" :pagination="searchPagination"/> + <MkNotes v-if="searchPagination" :key="searchKey" :pagination="searchPagination"/> </div> </div> </MkSpacer> @@ -93,6 +93,7 @@ let channel = $ref(null); let favorited = $ref(false); let searchQuery = $ref(''); let searchPagination = $ref(); +let searchKey = $ref(''); const featuredPagination = $computed(() => ({ endpoint: 'notes/featured' as const, limit: 10, @@ -149,10 +150,12 @@ async function search() { endpoint: 'notes/search', limit: 10, params: { - query: searchQuery, + query: query, channelId: channel.id, }, }; + + searchKey = query; } const headerActions = $computed(() => { diff --git a/packages/frontend/src/pages/explore.users.vue b/packages/frontend/src/pages/explore.users.vue index 3f4ff5182b..f9c833dd29 100644 --- a/packages/frontend/src/pages/explore.users.vue +++ b/packages/frontend/src/pages/explore.users.vue @@ -28,9 +28,9 @@ <MkFoldableSection ref="tagsEl" :foldable="true" :expanded="false" class="_margin"> <template #header><i class="ti ti-hash ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.popularTags }}</template> - <div class="vxjfqztj"> - <MkA v-for="tag in tagsLocal" :key="'local:' + tag.tag" :to="`/user-tags/${tag.tag}`" class="local">{{ tag.tag }}</MkA> - <MkA v-for="tag in tagsRemote" :key="'remote:' + tag.tag" :to="`/user-tags/${tag.tag}`">{{ tag.tag }}</MkA> + <div> + <MkA v-for="tag in tagsLocal" :key="'local:' + tag.tag" :to="`/user-tags/${tag.tag}`" style="margin-right: 16px; font-weight: bold;">{{ tag.tag }}</MkA> + <MkA v-for="tag in tagsRemote" :key="'remote:' + tag.tag" :to="`/user-tags/${tag.tag}`" style="margin-right: 16px;">{{ tag.tag }}</MkA> </div> </MkFoldableSection> @@ -132,15 +132,3 @@ os.api('hashtags/list', { tagsRemote = tags; }); </script> - -<style lang="scss" scoped> -.vxjfqztj { - > * { - margin-right: 16px; - - &.local { - font-weight: bold; - } - } -} -</style> diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue index e97a4b07f1..1b292e8f3c 100644 --- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue +++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue @@ -37,7 +37,7 @@ async function choose() { file = fileResponse[0]; emit('update:modelValue', { ...props.modelValue, - fileId: fileResponse.id, + fileId: file.id, }); }); } diff --git a/packages/frontend/src/pages/search.note.vue b/packages/frontend/src/pages/search.note.vue new file mode 100644 index 0000000000..d9b44d15f5 --- /dev/null +++ b/packages/frontend/src/pages/search.note.vue @@ -0,0 +1,98 @@ +<template> +<div class="_gaps"> + <div class="_gaps"> + <MkInput v-model="searchQuery" :large="true" :autofocus="true" type="search"> + <template #prefix><i class="ti ti-search"></i></template> + </MkInput> + <MkFolder> + <template #label>{{ i18n.ts.options }}</template> + + <MkFolder> + <template #label>{{ i18n.ts.specifyUser }}</template> + <template v-if="user" #suffix>@{{ user.username }}</template> + + <div style="text-align: center;" class="_gaps"> + <div v-if="user">@{{ user.username }}</div> + <div> + <MkButton v-if="user == null" primary rounded inline @click="selectUser">{{ i18n.ts.selectUser }}</MkButton> + <MkButton v-else danger rounded inline @click="user = null">{{ i18n.ts.remove }}</MkButton> + </div> + </div> + </MkFolder> + </MkFolder> + <div> + <MkButton large primary gradate rounded style="margin: 0 auto;" @click="search">{{ i18n.ts.search }}</MkButton> + </div> + </div> + + <MkFoldableSection v-if="notePagination"> + <template #header>{{ i18n.ts.searchResult }}</template> + <MkNotes :key="key" :pagination="notePagination"/> + </MkFoldableSection> +</div> +</template> + +<script lang="ts" setup> +import { computed, onMounted } from 'vue'; +import MkNotes from '@/components/MkNotes.vue'; +import MkInput from '@/components/MkInput.vue'; +import MkRadios from '@/components/MkRadios.vue'; +import MkButton from '@/components/MkButton.vue'; +import { i18n } from '@/i18n'; +import * as os from '@/os'; +import MkFoldableSection from '@/components/MkFoldableSection.vue'; +import { $i } from '@/account'; +import { instance } from '@/instance'; +import MkInfo from '@/components/MkInfo.vue'; +import { useRouter } from '@/router'; +import MkFolder from '@/components/MkFolder.vue'; + +const router = useRouter(); + +let key = $ref(0); +let searchQuery = $ref(''); +let searchOrigin = $ref('combined'); +let notePagination = $ref(); +let user = $ref(null); + +function selectUser() { + os.selectUser().then(_user => { + user = _user; + }); +} + +async function search() { + const query = searchQuery.toString().trim(); + + if (query == null || query === '') return; + + if (query.startsWith('https://')) { + const promise = os.api('ap/show', { + uri: query, + }); + + os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject); + + const res = await promise; + + if (res.type === 'User') { + router.push(`/@${res.object.username}@${res.object.host}`); + } else if (res.type === 'Note') { + router.push(`/notes/${res.object.id}`); + } + + return; + } + + notePagination = { + endpoint: 'notes/search', + limit: 10, + params: { + query: searchQuery, + userId: user ? user.id : null, + }, + }; + + key++; +} +</script> diff --git a/packages/frontend/src/pages/search.user.vue b/packages/frontend/src/pages/search.user.vue new file mode 100644 index 0000000000..23a8978fd1 --- /dev/null +++ b/packages/frontend/src/pages/search.user.vue @@ -0,0 +1,77 @@ +<template> +<div class="_gaps"> + <div class="_gaps"> + <MkInput v-model="searchQuery" :large="true" :autofocus="true" type="search"> + <template #prefix><i class="ti ti-search"></i></template> + </MkInput> + <MkRadios v-model="searchOrigin" @update:model-value="search()"> + <option value="combined">{{ i18n.ts.all }}</option> + <option value="local">{{ i18n.ts.local }}</option> + <option value="remote">{{ i18n.ts.remote }}</option> + </MkRadios> + <MkButton large primary gradate rounded @click="search">{{ i18n.ts.search }}</MkButton> + </div> + + <MkFoldableSection v-if="userPagination"> + <template #header>{{ i18n.ts.searchResult }}</template> + <MkUserList :key="key" :pagination="userPagination"/> + </MkFoldableSection> +</div> +</template> + +<script lang="ts" setup> +import { computed, defineAsyncComponent, onMounted } from 'vue'; +import MkUserList from '@/components/MkUserList.vue'; +import MkInput from '@/components/MkInput.vue'; +import MkRadios from '@/components/MkRadios.vue'; +import MkButton from '@/components/MkButton.vue'; +import { i18n } from '@/i18n'; +import * as os from '@/os'; +import MkFoldableSection from '@/components/MkFoldableSection.vue'; +import { $i } from '@/account'; +import { instance } from '@/instance'; +import MkInfo from '@/components/MkInfo.vue'; +import { useRouter } from '@/router'; + +const router = useRouter(); + +let key = $ref(''); +let searchQuery = $ref(''); +let searchOrigin = $ref('combined'); +let userPagination = $ref(); + +async function search() { + const query = searchQuery.toString().trim(); + + if (query == null || query === '') return; + + if (query.startsWith('https://')) { + const promise = os.api('ap/show', { + uri: query, + }); + + os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject); + + const res = await promise; + + if (res.type === 'User') { + router.push(`/@${res.object.username}@${res.object.host}`); + } else if (res.type === 'Note') { + router.push(`/notes/${res.object.id}`); + } + + return; + } + + userPagination = { + endpoint: 'users/search', + limit: 10, + params: { + query: searchQuery, + origin: searchOrigin, + }, + }; + + key = query; +} +</script> diff --git a/packages/frontend/src/pages/search.vue b/packages/frontend/src/pages/search.vue index 5523d5cf4d..9f3d8da560 100644 --- a/packages/frontend/src/pages/search.vue +++ b/packages/frontend/src/pages/search.vue @@ -1,133 +1,38 @@ <template> <MkStickyContainer> <template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template> - <MkSpacer v-if="tab === 'note'" :content-max="800"> - <div v-if="notesSearchAvailable" class="_gaps"> - <div class="_gaps"> - <MkInput v-model="searchQuery" :large="true" :autofocus="true" type="search"> - <template #prefix><i class="ti ti-search"></i></template> - </MkInput> - <MkButton large primary gradate rounded @click="search">{{ i18n.ts.search }}</MkButton> - </div> - <MkFoldableSection v-if="notePagination"> - <template #header>{{ i18n.ts.searchResult }}</template> - <MkNotes :key="key" :pagination="notePagination"/> - </MkFoldableSection> + <MkSpacer v-if="tab === 'note'" :content-max="800"> + <div v-if="notesSearchAvailable"> + <XNote/> </div> <div v-else> <MkInfo warn>{{ i18n.ts.notesSearchNotAvailable }}</MkInfo> </div> </MkSpacer> - <MkSpacer v-else-if="tab === 'user'" :content-max="800"> - <div class="_gaps"> - <div class="_gaps"> - <MkInput v-model="searchQuery" :large="true" :autofocus="true" type="search"> - <template #prefix><i class="ti ti-search"></i></template> - </MkInput> - <MkRadios v-model="searchOrigin" @update:model-value="search()"> - <option value="combined">{{ i18n.ts.all }}</option> - <option value="local">{{ i18n.ts.local }}</option> - <option value="remote">{{ i18n.ts.remote }}</option> - </MkRadios> - <MkButton large primary gradate rounded @click="search">{{ i18n.ts.search }}</MkButton> - </div> - <MkFoldableSection v-if="userPagination"> - <template #header>{{ i18n.ts.searchResult }}</template> - <MkUserList :key="key" :pagination="userPagination"/> - </MkFoldableSection> - </div> + <MkSpacer v-else-if="tab === 'user'" :content-max="800"> + <XUser/> </MkSpacer> </MkStickyContainer> </template> <script lang="ts" setup> -import { computed, onMounted } from 'vue'; -import MkNotes from '@/components/MkNotes.vue'; -import MkUserList from '@/components/MkUserList.vue'; -import MkInput from '@/components/MkInput.vue'; -import MkRadios from '@/components/MkRadios.vue'; -import MkButton from '@/components/MkButton.vue'; +import { computed, defineAsyncComponent, onMounted } from 'vue'; import { i18n } from '@/i18n'; import { definePageMetadata } from '@/scripts/page-metadata'; import * as os from '@/os'; -import MkFoldableSection from '@/components/MkFoldableSection.vue'; import { $i } from '@/account'; import { instance } from '@/instance'; import MkInfo from '@/components/MkInfo.vue'; -import { useRouter } from '@/router'; -const router = useRouter(); +const XNote = defineAsyncComponent(() => import('./search.note.vue')); +const XUser = defineAsyncComponent(() => import('./search.user.vue')); -const props = defineProps<{ - query: string; - channel?: string; - type?: string; - origin?: string; -}>(); - -let key = $ref(''); let tab = $ref('note'); -let searchQuery = $ref(''); -let searchOrigin = $ref('combined'); -let notePagination = $ref(); -let userPagination = $ref(); const notesSearchAvailable = (($i == null && instance.policies.canSearchNotes) || ($i != null && $i.policies.canSearchNotes)); -onMounted(() => { - tab = props.type ?? 'note'; - searchQuery = props.query ?? ''; - searchOrigin = props.origin ?? 'combined'; -}); - -async function search() { - const query = searchQuery.toString().trim(); - - if (query == null || query === '') return; - - if (query.startsWith('https://')) { - const promise = os.api('ap/show', { - uri: query, - }); - - os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject); - - const res = await promise; - - if (res.type === 'User') { - router.push(`/@${res.object.username}@${res.object.host}`); - } else if (res.type === 'Note') { - router.push(`/notes/${res.object.id}`); - } - - return; - } - - if (tab === 'note') { - notePagination = { - endpoint: 'notes/search', - limit: 10, - params: { - query: searchQuery, - channelId: props.channel, - }, - }; - } else if (tab === 'user') { - userPagination = { - endpoint: 'users/search', - limit: 10, - params: { - query: searchQuery, - origin: searchOrigin, - }, - }; - } - - key = query; -} - const headerActions = $computed(() => []); const headerTabs = $computed(() => [{ @@ -141,7 +46,7 @@ const headerTabs = $computed(() => [{ }]); definePageMetadata(computed(() => ({ - title: searchQuery ? i18n.t('searchWith', { q: searchQuery }) : i18n.ts.search, + title: i18n.ts.search, icon: 'ti ti-search', }))); </script> diff --git a/packages/frontend/src/pages/settings/privacy.vue b/packages/frontend/src/pages/settings/privacy.vue index c83c48d5ad..a1af0ba80b 100644 --- a/packages/frontend/src/pages/settings/privacy.vue +++ b/packages/frontend/src/pages/settings/privacy.vue @@ -24,6 +24,10 @@ {{ i18n.ts.noCrawle }} <template #caption>{{ i18n.ts.noCrawleDescription }}</template> </MkSwitch> + <MkSwitch v-model="preventAiLearning" @update:model-value="save()"> + {{ i18n.ts.preventAiLearning }}<span class="_beta">{{ i18n.ts.beta }}</span> + <template #caption>{{ i18n.ts.preventAiLearningDescription }}</template> + </MkSwitch> <MkSwitch v-model="isExplorable" @update:model-value="save()"> {{ i18n.ts.makeExplorable }} <template #caption>{{ i18n.ts.makeExplorableDescription }}</template> @@ -71,6 +75,7 @@ import { definePageMetadata } from '@/scripts/page-metadata'; let isLocked = $ref($i.isLocked); let autoAcceptFollowed = $ref($i.autoAcceptFollowed); let noCrawle = $ref($i.noCrawle); +let preventAiLearning = $ref($i.preventAiLearning); let isExplorable = $ref($i.isExplorable); let hideOnlineStatus = $ref($i.hideOnlineStatus); let publicReactions = $ref($i.publicReactions); @@ -86,6 +91,7 @@ function save() { isLocked: !!isLocked, autoAcceptFollowed: !!autoAcceptFollowed, noCrawle: !!noCrawle, + preventAiLearning: !!preventAiLearning, isExplorable: !!isExplorable, hideOnlineStatus: !!hideOnlineStatus, publicReactions: !!publicReactions, diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 2e9bc76059..23836b05f5 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -24,9 +24,9 @@ "@swc/jest": "0.2.26", "@types/jest": "29.5.1", "@types/node": "18.16.3", - "@typescript-eslint/eslint-plugin": "5.59.2", - "@typescript-eslint/parser": "5.59.2", - "eslint": "8.39.0", + "@typescript-eslint/eslint-plugin": "5.59.5", + "@typescript-eslint/parser": "5.59.5", + "eslint": "8.40.0", "jest": "29.5.0", "jest-fetch-mock": "3.0.3", "jest-websocket-mock": "2.4.0", diff --git a/packages/sw/package.json b/packages/sw/package.json index 75bb40ccb1..96c4bfe889 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -14,9 +14,9 @@ "misskey-js": "workspace:*" }, "devDependencies": { - "@typescript-eslint/parser": "5.59.2", + "@typescript-eslint/parser": "5.59.5", "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67", - "eslint": "8.39.0", + "eslint": "8.40.0", "eslint-plugin-import": "2.27.5", "typescript": "5.0.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04d2fcf36b..74a7e89857 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,20 +44,20 @@ importers: specifier: 2.0.1 version: 2.0.1 '@typescript-eslint/eslint-plugin': - specifier: 5.59.2 - version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4) '@typescript-eslint/parser': - specifier: 5.59.2 - version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) cross-env: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 12.11.0 - version: 12.11.0 + specifier: 12.12.0 + version: 12.12.0 eslint: - specifier: 8.39.0 - version: 8.39.0 + specifier: 8.40.0 + version: 8.40.0 start-server-and-test: specifier: 2.0.0 version: 2.0.0 @@ -95,8 +95,8 @@ importers: specifier: 8.2.1 version: 8.2.1 '@fastify/http-proxy': - specifier: 9.0.0 - version: 9.0.0 + specifier: 9.1.0 + version: 9.1.0 '@fastify/multipart': specifier: 7.6.0 version: 7.6.0 @@ -188,8 +188,8 @@ importers: specifier: 4.2.2 version: 4.2.2 file-type: - specifier: 18.3.0 - version: 18.3.0 + specifier: 18.4.0 + version: 18.4.0 fluent-ffmpeg: specifier: 2.1.2 version: 2.1.2 @@ -200,8 +200,8 @@ importers: specifier: 12.6.0 version: 12.6.0 happy-dom: - specifier: 9.10.2 - version: 9.10.2 + specifier: 9.16.0 + version: 9.16.0 hpagent: specifier: 1.2.0 version: 1.2.0 @@ -251,8 +251,8 @@ importers: specifier: 3.3.1 version: 3.3.1 nodemailer: - specifier: 6.9.1 - version: 6.9.1 + specifier: 6.9.2 + version: 6.9.2 nsfwjs: specifier: 2.4.2 version: 2.4.2(@tensorflow/tfjs@4.4.0) @@ -263,8 +263,8 @@ importers: specifier: 0.0.14 version: 0.0.14 otpauth: - specifier: 9.1.1 - version: 9.1.1 + specifier: 9.1.2 + version: 9.1.2 parse5: specifier: 7.1.2 version: 7.1.2 @@ -348,7 +348,7 @@ importers: version: 2.1.0 summaly: specifier: github:misskey-dev/summaly - version: github.com/misskey-dev/summaly/2d63e2a0066f89871e777cc81d43c1ade8c97517 + version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 systeminformation: specifier: 5.17.12 version: 5.17.12 @@ -368,8 +368,8 @@ importers: specifier: 14.0.0 version: 14.0.0 typeorm: - specifier: 0.3.15 - version: 0.3.15(ioredis@5.3.2)(pg@8.10.0) + specifier: 0.3.16 + version: 0.3.16(ioredis@5.3.2)(pg@8.10.0) typescript: specifier: 5.0.4 version: 5.0.4 @@ -523,8 +523,8 @@ importers: specifier: 2.1.1 version: 2.1.1 '@types/node': - specifier: 18.16.3 - version: 18.16.3 + specifier: 20.1.3 + version: 20.1.3 '@types/node-fetch': specifier: 3.0.3 version: 3.0.3 @@ -562,8 +562,8 @@ importers: specifier: 2.9.0 version: 2.9.0 '@types/semver': - specifier: 7.3.13 - version: 7.3.13 + specifier: 7.5.0 + version: 7.5.0 '@types/sharp': specifier: 0.32.0 version: 0.32.0 @@ -595,29 +595,29 @@ importers: specifier: 8.5.4 version: 8.5.4 '@typescript-eslint/eslint-plugin': - specifier: 5.59.2 - version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4) '@typescript-eslint/parser': - specifier: 5.59.2 - version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) aws-sdk-client-mock: - specifier: ^2.1.1 + specifier: 2.1.1 version: 2.1.1 cross-env: specifier: 7.0.3 version: 7.0.3 eslint: - specifier: 8.39.0 - version: 8.39.0 + specifier: 8.40.0 + version: 8.40.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + version: 2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0) execa: specifier: 6.1.0 version: 6.1.0 jest: specifier: 29.5.0 - version: 29.5.0(@types/node@18.16.3) + version: 29.5.0(@types/node@20.1.3) jest-mock: specifier: 29.5.0 version: 29.5.0 @@ -629,16 +629,16 @@ importers: version: 14.1.2 '@rollup/plugin-alias': specifier: 5.0.0 - version: 5.0.0(rollup@3.21.3) + version: 5.0.0(rollup@3.21.6) '@rollup/plugin-json': specifier: 6.0.0 - version: 6.0.0(rollup@3.21.3) + version: 6.0.0(rollup@3.21.6) '@rollup/plugin-replace': - specifier: ^5.0.2 - version: 5.0.2(rollup@3.21.3) + specifier: 5.0.2 + version: 5.0.2(rollup@3.21.6) '@rollup/pluginutils': specifier: 5.0.2 - version: 5.0.2(rollup@3.21.3) + version: 5.0.2(rollup@3.21.6) '@syuilo/aiscript': specifier: 0.13.2 version: 0.13.2 @@ -646,14 +646,14 @@ importers: specifier: 2.17.0 version: 2.17.0 '@vitejs/plugin-vue': - specifier: 4.2.1 - version: 4.2.1(vite@4.3.4)(vue@3.2.47) + specifier: 4.2.2 + version: 4.2.2(vite@4.3.5)(vue@3.3.1) '@vue-macros/reactivity-transform': - specifier: ^0.3.5 - version: 0.3.5(rollup@3.21.3)(vue@3.2.47) + specifier: 0.3.6 + version: 0.3.6(rollup@3.21.6)(vue@3.3.1) '@vue/compiler-sfc': - specifier: 3.2.47 - version: 3.2.47 + specifier: 3.3.1 + version: 3.3.1 autosize: specifier: 5.0.2 version: 5.0.2 @@ -685,11 +685,11 @@ importers: specifier: 2.0.1 version: 2.0.1(chart.js@4.3.0) chromatic: - specifier: 6.17.3 - version: 6.17.3 + specifier: 6.17.4 + version: 6.17.4 compare-versions: - specifier: 5.0.1 - version: 5.0.1 + specifier: 5.0.3 + version: 5.0.3 cropperjs: specifier: 2.0.0-beta.2 version: 2.0.0-beta.2 @@ -706,8 +706,8 @@ importers: specifier: 3.11.5 version: 3.11.5 idb-keyval: - specifier: 6.2.0 - version: 6.2.0 + specifier: 6.2.1 + version: 6.2.1 insert-text-at-cursor: specifier: 0.3.0 version: 0.3.0 @@ -742,8 +742,8 @@ importers: specifier: 1.0.0 version: 1.0.0 rollup: - specifier: 3.21.3 - version: 3.21.3 + specifier: 3.21.6 + version: 3.21.6 s-age: specifier: 1.1.2 version: 1.1.2 @@ -793,81 +793,81 @@ importers: specifier: 1.8.0 version: 1.8.0 vite: - specifier: 4.3.4 - version: 4.3.4(@types/node@18.16.3)(sass@1.62.1) + specifier: 4.3.5 + version: 4.3.5(@types/node@20.1.3)(sass@1.62.1) vue: - specifier: 3.2.47 - version: 3.2.47 + specifier: 3.3.1 + version: 3.3.1 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) + version: 2.0.0-alpha.2(vue@3.3.1) vuedraggable: specifier: next - version: 4.1.0(vue@3.2.47) + version: 4.1.0(vue@3.3.1) devDependencies: '@storybook/addon-actions': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-essentials': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-interactions': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-links': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-storysource': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/addons': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/blocks': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': - specifier: 7.0.7 - version: 7.0.7 + specifier: 7.0.10 + version: 7.0.10 '@storybook/jest': specifier: 0.1.0 version: 0.1.0 '@storybook/manager-api': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': - specifier: 7.0.7 - version: 7.0.7 + specifier: 7.0.10 + version: 7.0.10 '@storybook/react': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4) '@storybook/react-vite': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.4) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.5) '@storybook/testing-library': specifier: 0.1.0 version: 0.1.0 '@storybook/theming': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': - specifier: 7.0.7 - version: 7.0.7 + specifier: 7.0.10 + version: 7.0.10 '@storybook/vue3': - specifier: 7.0.7 - version: 7.0.7(vue@3.2.47) + specifier: 7.0.10 + version: 7.0.10(vue@3.3.1) '@storybook/vue3-vite': - specifier: 7.0.7 - version: 7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.4)(vue@3.2.47) + specifier: 7.0.10 + version: 7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.5)(vue@3.3.1) '@testing-library/jest-dom': specifier: 5.16.5 version: 5.16.5 '@testing-library/vue': specifier: 7.0.0 - version: 7.0.0(@vue/compiler-sfc@3.2.47)(vue@3.2.47) + version: 7.0.0(@vue/compiler-sfc@3.3.1)(vue@3.3.1) '@types/escape-regexp': specifier: 0.0.1 version: 0.0.1 @@ -878,17 +878,17 @@ importers: specifier: 4.0.10 version: 4.0.10 '@types/gulp-rename': - specifier: 2.0.1 - version: 2.0.1 + specifier: 2.0.2 + version: 2.0.2 '@types/matter-js': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@types/micromatch': specifier: 4.0.2 version: 4.0.2 '@types/node': - specifier: 18.16.3 - version: 18.16.3 + specifier: 20.1.3 + version: 20.1.3 '@types/punycode': specifier: 2.1.0 version: 2.1.0 @@ -917,17 +917,17 @@ importers: specifier: 8.5.4 version: 8.5.4 '@typescript-eslint/eslint-plugin': - specifier: 5.59.2 - version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4) '@typescript-eslint/parser': - specifier: 5.59.2 - version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) '@vitest/coverage-c8': - specifier: 0.30.1 - version: 0.30.1(vitest@0.30.1) + specifier: 0.31.0 + version: 0.31.0(vitest@0.31.0) '@vue/runtime-core': - specifier: 3.2.47 - version: 3.2.47 + specifier: 3.3.1 + version: 3.3.1 astring: specifier: 1.8.4 version: 1.8.4 @@ -938,23 +938,23 @@ importers: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 12.11.0 - version: 12.11.0 + specifier: 12.12.0 + version: 12.12.0 eslint: - specifier: 8.39.0 - version: 8.39.0 + specifier: 8.40.0 + version: 8.40.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + version: 2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0) eslint-plugin-vue: - specifier: 9.11.0 - version: 9.11.0(eslint@8.39.0) + specifier: 9.12.0 + version: 9.12.0(eslint@8.40.0) fast-glob: specifier: 3.2.12 version: 3.2.12 happy-dom: - specifier: 9.10.2 - version: 9.10.2 + specifier: 9.16.0 + version: 9.16.0 micromatch: specifier: 3.1.10 version: 3.1.10 @@ -977,29 +977,29 @@ importers: specifier: 2.0.0 version: 2.0.0 storybook: - specifier: 7.0.7 - version: 7.0.7 + specifier: 7.0.10 + version: 7.0.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.7)(@storybook/components@7.0.7)(@storybook/core-events@7.0.7)(@storybook/manager-api@7.0.7)(@storybook/preview-api@7.0.7)(@storybook/theming@7.0.7)(@storybook/types@7.0.7)(react-dom@18.2.0)(react@18.2.0) + version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.10)(@storybook/components@7.0.10)(@storybook/core-events@7.0.10)(@storybook/manager-api@7.0.10)(@storybook/preview-api@7.0.10)(@storybook/theming@7.0.10)(@storybook/types@7.0.10)(react-dom@18.2.0)(react@18.2.0) summaly: specifier: github:misskey-dev/summaly - version: github.com/misskey-dev/summaly/2d63e2a0066f89871e777cc81d43c1ade8c97517 + version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 vite-plugin-turbosnap: specifier: 1.0.2 version: 1.0.2 vitest: - specifier: 0.30.1 - version: 0.30.1(happy-dom@9.10.2)(sass@1.62.1) + specifier: 0.31.0 + version: 0.31.0(happy-dom@9.16.0)(sass@1.62.1) vitest-fetch-mock: specifier: 0.2.2 - version: 0.2.2(vitest@0.30.1) + version: 0.2.2(vitest@0.31.0) vue-eslint-parser: - specifier: 9.1.1 - version: 9.1.1(eslint@8.39.0) + specifier: 9.2.1 + version: 9.2.1(eslint@8.40.0) vue-tsc: - specifier: 1.6.3 - version: 1.6.3(typescript@5.0.4) + specifier: 1.6.4 + version: 1.6.4(typescript@5.0.4) packages/misskey-js: dependencies: @@ -1029,14 +1029,14 @@ importers: specifier: 18.16.3 version: 18.16.3 '@typescript-eslint/eslint-plugin': - specifier: 5.59.2 - version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4) '@typescript-eslint/parser': - specifier: 5.59.2 - version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) eslint: - specifier: 8.39.0 - version: 8.39.0 + specifier: 8.40.0 + version: 8.40.0 jest: specifier: 29.5.0 version: 29.5.0(@types/node@18.16.3) @@ -1069,17 +1069,17 @@ importers: version: link:../misskey-js devDependencies: '@typescript-eslint/parser': - specifier: 5.59.2 - version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) + specifier: 5.59.5 + version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) '@typescript/lib-webworker': specifier: npm:@types/serviceworker@0.0.67 version: /@types/serviceworker@0.0.67 eslint: - specifier: 8.39.0 - version: 8.39.0 + specifier: 8.40.0 + version: 8.40.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + version: 2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0) typescript: specifier: 5.0.4 version: 5.0.4 @@ -2099,10 +2099,10 @@ packages: '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 '@babel/template': 7.20.7 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -2116,7 +2116,7 @@ packages: resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 @@ -2126,7 +2126,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: @@ -2134,7 +2134,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.3): @@ -2206,7 +2206,7 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-function-name@7.21.0: @@ -2214,28 +2214,28 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 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.4 + '@babel/types': 7.21.5 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.4 + '@babel/types': 7.21.5 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.21.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-module-transforms@7.21.2: @@ -2249,7 +2249,7 @@ packages: '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 transitivePeerDependencies: - supports-color dev: true @@ -2258,7 +2258,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-plugin-utils@7.20.2: @@ -2276,7 +2276,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.4 + '@babel/types': 7.21.5 transitivePeerDependencies: - supports-color dev: true @@ -2290,7 +2290,7 @@ packages: '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 transitivePeerDependencies: - supports-color dev: true @@ -2299,27 +2299,31 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 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.4 + '@babel/types': 7.21.5 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.4 + '@babel/types': 7.21.5 dev: true /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.21.5: + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} @@ -2336,7 +2340,7 @@ packages: '@babel/helper-function-name': 7.21.0 '@babel/template': 7.20.7 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 transitivePeerDependencies: - supports-color dev: true @@ -2347,7 +2351,7 @@ packages: dependencies: '@babel/template': 7.20.7 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 transitivePeerDependencies: - supports-color dev: true @@ -2361,15 +2365,15 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.20.7: - resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} + /@babel/parser@7.21.4: + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.21.4 - /@babel/parser@7.21.4: - resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} + /@babel/parser@7.21.8: + resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -3078,7 +3082,7 @@ packages: '@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.4 + '@babel/types': 7.21.5 dev: true /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3): @@ -3265,7 +3269,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.21.4 + '@babel/types': 7.21.5 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) @@ -3296,7 +3300,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.4 + '@babel/types': 7.21.5 esutils: 2.0.3 dev: true @@ -3349,8 +3353,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.21.8 + '@babel/types': 7.21.5 dev: true /@babel/traverse@7.21.3: @@ -3363,8 +3367,8 @@ packages: '@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.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.21.8 + '@babel/types': 7.21.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: @@ -3379,6 +3383,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types@7.21.5: + resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.21.5 + '@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 @@ -3756,14 +3768,14 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.39.0 - eslint-visitor-keys: 3.4.0 + eslint: 8.40.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/regexpp@4.5.0: @@ -3771,13 +3783,13 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.5.2 globals: 13.19.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -3788,8 +3800,8 @@ packages: - supports-color dev: true - /@eslint/js@8.39.0: - resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==} + /@eslint/js@8.40.0: + resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -3852,8 +3864,8 @@ packages: fast-json-stringify: 5.7.0 dev: false - /@fastify/http-proxy@9.0.0: - resolution: {integrity: sha512-VbP7rccoX9rn56bvK5Sm/GsQ+UwjlQOJa0QiTX69dcjFWSV0I423vgH0KYPczAJ8ZpoM2HU7DP51ir1KKHBtTg==} + /@fastify/http-proxy@9.1.0: + resolution: {integrity: sha512-vgHCTDKOqLB437zQJiLWFFnsrYfFZ6Lfwu/xXQoKqRUKIPDt+xG6LBRtf8s5MNqfFVoTE7kw1U/0qdRGDsMp4Q==} dependencies: '@fastify/reply-from': 9.0.1 fastify-plugin: 4.5.0 @@ -3975,7 +3987,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -3996,14 +4008,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.16.3) + jest-config: 29.5.0(@types/node@20.1.3) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -4037,7 +4049,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 jest-mock: 29.5.0 dev: true @@ -4064,7 +4076,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.16.3 + '@types/node': 20.1.3 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -4097,7 +4109,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4191,7 +4203,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -4203,12 +4215,12 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/yargs': 17.0.19 chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.0.4)(vite@4.3.4): + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.0.4)(vite@4.3.5): resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} peerDependencies: typescript: '>= 4.3.x' @@ -4222,7 +4234,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.0.4) typescript: 5.0.4 - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) dev: true /@jridgewell/gen-mapping@0.1.1: @@ -4641,7 +4653,7 @@ packages: '@redis/client': 1.4.2 dev: true - /@rollup/plugin-alias@5.0.0(rollup@3.21.3): + /@rollup/plugin-alias@5.0.0(rollup@3.21.6): resolution: {integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4650,11 +4662,11 @@ packages: rollup: optional: true dependencies: - rollup: 3.21.3 + rollup: 3.21.6 slash: 4.0.0 dev: false - /@rollup/plugin-json@6.0.0(rollup@3.21.3): + /@rollup/plugin-json@6.0.0(rollup@3.21.6): resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4663,11 +4675,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.21.3) - rollup: 3.21.3 + '@rollup/pluginutils': 5.0.2(rollup@3.21.6) + rollup: 3.21.6 dev: false - /@rollup/plugin-replace@5.0.2(rollup@3.21.3): + /@rollup/plugin-replace@5.0.2(rollup@3.21.6): resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4676,9 +4688,9 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.21.3) + '@rollup/pluginutils': 5.0.2(rollup@3.21.6) magic-string: 0.27.0 - rollup: 3.21.3 + rollup: 3.21.6 dev: false /@rollup/pluginutils@4.2.1: @@ -4689,7 +4701,7 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.2(rollup@3.21.3): + /@rollup/pluginutils@5.0.2(rollup@3.21.6): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4701,7 +4713,7 @@ packages: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.21.3 + rollup: 3.21.6 dev: false /@rushstack/node-core-library@3.58.0(@types/node@18.16.3): @@ -4852,8 +4864,8 @@ packages: resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} dev: false - /@storybook/addon-actions@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-WxsnSjAvdf6NhUfTqcwV+FJmsJV56gh2cY4QnGfqfwO5zoBWTUYnhz57TgxSMhJY0kspyX9Q1Kc//r1d5lt1qA==} + /@storybook/addon-actions@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-U8c7n918/mOjXnc1Iu/sglbK+ryC4xoyjWE5SG/68h0+sHb1rioNq7leAi24mCP6jNwNI5Q7TWtuvflOGxQDKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4863,14 +4875,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 dequal: 2.0.3 lodash: 4.17.21 polished: 4.2.2 @@ -4883,8 +4895,8 @@ packages: uuid: 9.0.0 dev: true - /@storybook/addon-backgrounds@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-DhT32K1+ti7MXY9oqt36b9jlg7iY68IP0ZQbR3gjShcsIXZpFqh18TQo0vwDY1ldqnBvkTk6Jd5vcxA8tfyshw==} + /@storybook/addon-backgrounds@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QtOxXO9hKtwBjjdLXWYKp4HpcpNOrLfc71dn78XbMKyCkQRlYtVe8GNk/++70UQtFfKCEJIB0hTHrPmSjDJE5A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4894,22 +4906,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.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.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/QEzleKoWRQ3i7KB32QvqDGcGMw4kG2BxEf0d+ymxd2SjoeL6kX2eHE0b4OxFPXiWUyTfXBFwmcI2Re3fRUJnQ==} + /@storybook/addon-controls@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-j5UiPH8ZJx0ieUoIeV3iENlsIRDuQCeg3gTlLD668sebx8KHOCSJygh0Zvg1sTUUGSIbenhWaPlqfaW6ShKFWQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4919,15 +4931,15 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.0.7 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.0.7 - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/blocks': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.10 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.10 + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4936,8 +4948,8 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5PT7aiTD6QPH+4CZLcv4PiUgWucD9JNGHVMRbQMEyFW6qbs87dHmu1m1uXIvx3BF5h3mTo4FHNAf8IQIq5HH9w==} + /@storybook/addon-docs@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1tUsJ+fuBqk4oTOBLabyPQeQYiRKs9I6+soY7dG8jN15Bxe/Ey2giNpqUkA3xAIuqS75ydRVKmsfQvILu2nLjg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4946,19 +4958,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.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 7.0.7 - '@storybook/csf-tools': 7.0.7 + '@storybook/blocks': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 7.0.10 + '@storybook/csf-tools': 7.0.10 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.0.7 - '@storybook/postinstall': 7.0.7 - '@storybook/preview-api': 7.0.7 - '@storybook/react-dom-shim': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/node-logger': 7.0.10 + '@storybook/postinstall': 7.0.10 + '@storybook/preview-api': 7.0.10 + '@storybook/react-dom-shim': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 fs-extra: 11.1.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4969,25 +4981,25 @@ packages: - supports-color dev: true - /@storybook/addon-essentials@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-uNx0BvN1XP7cNnk/L4oiFQlEB/KABqOeIyI8/mhfIyTvvwo9uAYIQAyiwWuz9MFmofCNm7CgLNOUaEwNDkM4CA==} + /@storybook/addon-essentials@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nOeUtNbfLXOlgGqqqlsYC9gcYSrAxABBo8jHYiZg3xaEB9+cnKjCKK8VxrqJiR002AG5JZvi+uHeAauM94fkkQ==} 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.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-backgrounds': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-controls': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-highlight': 7.0.7 - '@storybook/addon-measure': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-outline': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-toolbars': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-viewport': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.0.7 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.0.7 - '@storybook/preview-api': 7.0.7 + '@storybook/addon-actions': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-backgrounds': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-highlight': 7.0.10 + '@storybook/addon-measure': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-outline': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-toolbars': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-viewport': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.10 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.10 + '@storybook/preview-api': 7.0.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -4995,16 +5007,16 @@ packages: - supports-color dev: true - /@storybook/addon-highlight@7.0.7: - resolution: {integrity: sha512-expme2GzzCXX7/lL7UjCDi1Tfj+4LeNsAdWiurVLH7glK7yKPPeXXkIldbLP/XjJv4NKlqCwnNRHQx0vDLlE6g==} + /@storybook/addon-highlight@7.0.10: + resolution: {integrity: sha512-TohDxElSu7JrSvhLRZAwtNk/7Ot626wvlODwklocE4kbtn1fulFoUlRta7NImBGX554LITDFRy0m4R1rRQ9OfQ==} dependencies: - '@storybook/core-events': 7.0.7 + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.7 + '@storybook/preview-api': 7.0.10 dev: true - /@storybook/addon-interactions@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-jBl6O5sSbix0X1G9dFuWvvu4qefgLP9dAB/utVdDadZxlbPfa5B2C2q2YIqjcKZoX8DS8Fh8SUhlX1mdW5tu5w==} + /@storybook/addon-interactions@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7hdFgoetQblwysYwRlmC5fbMVDb6lIM6le1pVEmRci6X44Gr2Xe5w2s6h5bTp4tMpNS1CFKjru9kF/TqfK46wA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5014,16 +5026,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.0.7 - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.10 + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 7.0.7 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/instrumenter': 7.0.10 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 jest-mock: 27.5.1 polished: 4.2.2 react: 18.2.0 @@ -5033,8 +5045,8 @@ packages: - supports-color dev: true - /@storybook/addon-links@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-DEjDxjHb3mT8Sdnx4In5Ev9gJ/XdjlHOq4iuy0wnMyrCV4wnzTQnIeSCx8nkrXFb314zc33JPnCcrb5pQoD5GQ==} + /@storybook/addon-links@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Odhe0eICqW9X2yyIjtOVb23cKXJ2WRxPHBm5oYf6hBBoXXK7EJicwyQSJLxJyHK7r1PeAnFxSGlNrO3w7JULjg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5044,22 +5056,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/core-events': 7.0.10 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/router': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/router': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.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.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lb4wEIvIVF+ePx1sC+n9rDI0+49sRa6MWbcvZ+BhbAoCeGcX7uACQFdW6HyXolmBuZASsTnzVQ4KqzzvY1dSWw==} + /@storybook/addon-measure@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-70BQT8PM6r3qjXDgXuN5mx9CBq9dYTdEgR1tlZ8FbMi8B8tB1oZJD0o6tfGM3r8WjdI0sTwX70ic5pv9Ma/MiA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5069,19 +5081,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/addon-outline@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AxbNZ4N1fXBTeMYM9tFudfW+Gzq7UikCjPxn5ax3Pde+zZjaEMppUxv5EMz4g5GIJupLYRmKH5pN0YcYoRLY6w==} + /@storybook/addon-outline@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Aakoc+II7orfgUDmjgMbnSp5HZS/47z0NeRAfh+FP4fxL0lFd9vmaeIXWYo1DjJqdEFfvlSLd8aS9Ltb+souMw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5091,20 +5103,20 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.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.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-gRdnWN8H5BhQF3rkcfjEIzEsZ/kdlgjiA6YA3GRKlcRCkzWHHXtHDdT3BSUFPb/8mT8DftFZNP2PKWeKd1rZvQ==} + /@storybook/addon-storysource@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5anwqnBOcHDI/EB3F2q3Vs/JN+vCBRr8UVqnKS8NqN3BrpJ4q7jUeQ2cA0Q2/aAmdHJn9FLh/Cgx7aTO+6iC2w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5114,13 +5126,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/router': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/source-loader': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/router': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/source-loader': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) estraverse: 5.3.0 prop-types: 15.8.1 react: 18.2.0 @@ -5128,8 +5140,8 @@ packages: react-syntax-highlighter: 15.5.0(react@18.2.0) dev: true - /@storybook/addon-toolbars@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/NkYHhU1VAz5lXjWuV8+ADWB84HzktvZv4jfiKX7Zzu6JVzrBu7FotQSWh3pDqqVwCB50RClUGtcHmSSac9CAQ==} + /@storybook/addon-toolbars@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-U4a45CDw4SZzrgboYVMgxyiD7Ejud1kSz2lyS+J3fGTZGXq2+tmJS/2oNrLJlSH7v8629lVUbKnFxsP0HbfShg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5139,17 +5151,17 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.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.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-znqhd8JFEFoXcAdwYhz1CwrCpVAzhuSyUVBUNDsDs+mgBEfGth4D4abIdWWGcfP6+CmI5ebFHtk443cExZebag==} + /@storybook/addon-viewport@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Ck9sdCg3T8ChXoxYL5IEi+ZUOwdH6Je5XeK4kRVq+Ar+Ytm5CFTGJCCZjI6biroTnuJCUefaV2K5NUZoHkZI+A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5159,49 +5171,49 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.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@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-it8NWXsdm3dhjc237d9jj7dGJf6eHDfuDv12nirV64J1dzWrnW+lONeZMPMgxxdLlgYfxH52fLgjcw/dAC/E+Q==} + /@storybook/addons@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-RRtozbB0JovZdLgTgC03kOjNh/5sAN77VHZFC5aK/Y9Hz2A0C6V4w/SqTt0382skSllcGMcrHjB1k06BlxlZ8A==} 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.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/blocks@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ehR0hAFWNHHqmrmbwYPKhLpgbIBKtyMbeoGClTRSnrVBGONciYJdmxegkCTReUklCY+HBJjtlwNowT+7+5sSaw==} + /@storybook/blocks@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OqXuN1x2TjXgrOqGSaD0Vz8iCqmLjiPkrQpWMD7bToFpHH0dpmcrzzRhLhxgJLN2CAzyr98IYIkUgXX9Da1neA==} 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.7 - '@storybook/client-logger': 7.0.7 - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.0.7 + '@storybook/docs-tools': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 @@ -5219,13 +5231,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager@7.0.7: - resolution: {integrity: sha512-VI/0iEjAlzQDt1yKu8GXugNIz7t46IHIKgMNmltQ05KPypMgInUoMmbfP5AYOVddjLdSqjMLO7EK58pBLOInpw==} + /@storybook/builder-manager@7.0.10: + resolution: {integrity: sha512-izCVE4JEbDVN5DPkX/Ym1PifAJKlheBvXKmGXGklnJQ2l+TEuvesPbOmVFNuu7ptJAFw4JO5n2KAo9+a5FRwiw==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.0.7 - '@storybook/manager': 7.0.7 - '@storybook/node-logger': 7.0.7 + '@storybook/core-common': 7.0.10 + '@storybook/manager': 7.0.10 + '@storybook/node-logger': 7.0.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.18) @@ -5242,8 +5254,8 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.0.7(typescript@5.0.4)(vite@4.3.4): - resolution: {integrity: sha512-2wL6fsFWzij+R155urOLc7EjZtlVWf4FLfaSlLGAuZwRQU40N04YdMaHMp9tjd9Vdr5fxEDwTB51PnVWJMlsEw==} + /@storybook/builder-vite@7.0.10(typescript@5.0.4)(vite@4.3.5): + resolution: {integrity: sha512-tKY2QnHni10TE3+Sy2wfR7h4FuribR849VBpDI/LcwtRkCgoOBfMCdEnAKMWyU6qAlY+9KDSOQq9SDTu3WZGOg==} peerDependencies: '@preact/preset-vite': '*' typescript: '>= 4.3.x' @@ -5257,16 +5269,16 @@ packages: vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channel-postmessage': 7.0.7 - '@storybook/channel-websocket': 7.0.7 - '@storybook/client-logger': 7.0.7 - '@storybook/core-common': 7.0.7 - '@storybook/csf-plugin': 7.0.7 + '@storybook/channel-postmessage': 7.0.10 + '@storybook/channel-websocket': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/core-common': 7.0.10 + '@storybook/csf-plugin': 7.0.10 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.0.7 - '@storybook/preview': 7.0.7 - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/node-logger': 7.0.10 + '@storybook/preview': 7.0.10 + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.10 browser-assert: 1.2.1 es-module-lexer: 0.9.3 express: 4.18.2 @@ -5276,13 +5288,24 @@ packages: magic-string: 0.27.0 remark-external-links: 8.0.0 remark-slug: 6.1.0 - rollup: 3.21.3 + rollup: 3.21.6 typescript: 5.0.4 - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) transitivePeerDependencies: - supports-color dev: true + /@storybook/channel-postmessage@7.0.10: + resolution: {integrity: sha512-Y5ZSp9WYH3HznQ2rrGN78Y5fYM16Bfvyn3iKy5QD38gsQk1gTrra1osIZ0X+lk3sep14D4oW4QMW3DCSrn0Big==} + dependencies: + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/core-events': 7.0.10 + '@storybook/global': 5.0.0 + qs: 6.11.1 + telejson: 7.0.4 + dev: true + /@storybook/channel-postmessage@7.0.2: resolution: {integrity: sha512-SZ/KqnZcx10W9hJbrzBKcP9dmgaeTaXugUhcgw1IkmjKWdsKazqFZCPwQWZZKAmhO4wYbyYOhkz3wfSIeB4mFw==} dependencies: @@ -5305,24 +5328,17 @@ packages: telejson: 7.0.4 dev: true - /@storybook/channel-postmessage@7.0.7: - resolution: {integrity: sha512-XMtYfcaE0UoY/V7K1cTu9PcWETD4iyWb/Yswc4F9VrPw0Ui4UwGS1j4iaAu8DC06yyoJs4XvxYFBMlCQmKja6A==} + /@storybook/channel-websocket@7.0.10: + resolution: {integrity: sha512-WXueykS71YxEqKlsIbbmmA6QSChEePffzqs7QASUpHhi21IDqmtq2HhAqYWlQptyqSWYdv6wxrOqwe6z4zakLA==} dependencies: - '@storybook/channels': 7.0.7 - '@storybook/client-logger': 7.0.7 - '@storybook/core-events': 7.0.7 + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 '@storybook/global': 5.0.0 - qs: 6.11.1 telejson: 7.0.4 dev: true - /@storybook/channel-websocket@7.0.7: - resolution: {integrity: sha512-KDbLiQts4/dCow3qk5WJSPA6SlaX3iP9RhF0Fjj03hoG2TRskrvo+AkUiJr8gF6dpkPndfuCYUCRsO2Ml8B+AA==} - dependencies: - '@storybook/channels': 7.0.7 - '@storybook/client-logger': 7.0.7 - '@storybook/global': 5.0.0 - telejson: 7.0.4 + /@storybook/channels@7.0.10: + resolution: {integrity: sha512-hdPaGV3W7s6MkVcg33S5hmkVgqXC16AA7H0ID9MROiU1lQzolKhSqCs2iVfGPQfmWzEJeqWQoEXU7dmCclRM0w==} dev: true /@storybook/channels@7.0.2: @@ -5333,25 +5349,21 @@ packages: resolution: {integrity: sha512-+34cVmrXZ3lb1s5tDK+OWd5HLtEPSUMas0VKFJ0k9LBpFlVl9aiCZBJRvSYmWL7beauUfa+HSmJgjlD6228ChQ==} dev: true - /@storybook/channels@7.0.7: - resolution: {integrity: sha512-Om4ovBLNw8pVrBu83MpOKgAuGO9Dpr1Coh2qp8t64WRPkejX1mxOY9IgH723//zH3igx8LCkf9rvBvcrsyaScQ==} - dev: true - - /@storybook/cli@7.0.7: - resolution: {integrity: sha512-koTkWr7wlaHF14T5moRP/tYM44+Jf4GEzQ/rqx/Jfn7EbNlVUOibdLJj4JnseMGRc7ZP6tKYku2n+B8g7hJX4w==} + /@storybook/cli@7.0.10: + resolution: {integrity: sha512-FhtE6Yrk7MMa9AgLb3MTmqiQ3IlWHjjrj7Vcj2QM6BcP342xSe7C1d+V6+tYX/oPOEB3Upz+PKNrju1iHxurQQ==} hasBin: true dependencies: '@babel/core': 7.21.3 '@babel/preset-env': 7.21.4(@babel/core@7.21.3) '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.0.7 - '@storybook/core-common': 7.0.7 - '@storybook/core-server': 7.0.7 - '@storybook/csf-tools': 7.0.7 - '@storybook/node-logger': 7.0.7 - '@storybook/telemetry': 7.0.7 - '@storybook/types': 7.0.7 - '@types/semver': 7.3.13 + '@storybook/codemod': 7.0.10 + '@storybook/core-common': 7.0.10 + '@storybook/core-server': 7.0.10 + '@storybook/csf-tools': 7.0.10 + '@storybook/node-logger': 7.0.10 + '@storybook/telemetry': 7.0.10 + '@storybook/types': 7.0.10 + '@types/semver': 7.5.0 boxen: 5.1.2 chalk: 4.1.2 commander: 6.2.1 @@ -5386,6 +5398,12 @@ packages: - utf-8-validate dev: true + /@storybook/client-logger@7.0.10: + resolution: {integrity: sha512-hb8tO+w28ErzjEw69ERMtZT81Xyg835FQjH6Y42ejoGcBA9Z0W6RZmx4RgkcIUOlYXkU6lSnNVne9gXodV4/Hw==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + /@storybook/client-logger@7.0.2: resolution: {integrity: sha512-rv7W2BhzIQHbFpUM5/CP/acS6T5lTmaxT0MbZ9n+9h++9QQU/cFOdkZgSUbLVAb1AeUGoLsk0HYzcqPpV35Xsw==} dependencies: @@ -5398,22 +5416,16 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.0.7: - resolution: {integrity: sha512-EclHjDs5HwHMKB4X2orn/KKA0DTIDmp4AXAUJGRfxb5ArpKEb7tXLHsgrRBlaoz1j5LAwKTmEyZOONh9G3etjg==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/codemod@7.0.7: - resolution: {integrity: sha512-VlkDlkvfbzLe+NOmzs5zGrGb4jnaeAFZqpvIkXxevr6aGcOwgeelNv8gTmgBAcy+xbGW4Pp0XA2BlMweIvKEKA==} + /@storybook/codemod@7.0.10: + resolution: {integrity: sha512-BnPknLV3wnaSk0azjFBAWLVfwgUHtFvVk9I6y1idIaQhc0nnegKoa0jTxWigthftZK/Pv9yG3gxG7o7O4KcChQ==} dependencies: '@babel/core': 7.21.3 '@babel/preset-env': 7.21.4(@babel/core@7.21.3) - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.0.7 - '@storybook/node-logger': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/csf-tools': 7.0.10 + '@storybook/node-logger': 7.0.10 + '@storybook/types': 7.0.10 cross-spawn: 7.0.3 globby: 11.1.0 jscodeshift: 0.14.0(@babel/preset-env@7.21.4) @@ -5424,17 +5436,17 @@ packages: - supports-color dev: true - /@storybook/components@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-6PLs9LMkBuhH/w4bSJ72tYgICMbOOIHuoB/fQdVlzhsdnXL2fM/v4RVW2N7v+Oz3lYXp/JtV8V9Ub8h6eDQKXg==} + /@storybook/components@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jdGiVP+a3XqoGpKkDFGt4g2cgb23aLfMS/RhnuhT7FK6hGh7WFfuuqx4QqQHx4VZCdXIWVIzszaCdGCs7AsW2w==} 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.7 + '@storybook/client-logger': 7.0.10 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5442,18 +5454,18 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/core-client@7.0.7: - resolution: {integrity: sha512-eydcpR28qV3A3BwR5V6wsixoI1BRLA0SzFiwH/1ajrgX13inv+gV97gHv47Ojf/+YAZ3HqdVaUKFsUfMKwKieA==} + /@storybook/core-client@7.0.10: + resolution: {integrity: sha512-sN/TKB7QHWP6josdjyNtoqDXihROPtgvzo5+akfW6+S7hhfsQ4BJd09nkBqEX9E7z81blmFFDUOU3a8bQbPdKQ==} dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/preview-api': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/preview-api': 7.0.10 dev: true - /@storybook/core-common@7.0.7: - resolution: {integrity: sha512-c8T24wex9bnCYdZVZFNX4VV+wfhrp47OLzVONZDqxMhq6G//Bgv5zH4Awcx5UfWf/05VcP7KGF1VKj8ebRyEEA==} + /@storybook/core-common@7.0.10: + resolution: {integrity: sha512-AAYXixukGlpMy8XoSM8cTfcyQ6ijBq5q50xNTj/ssTbGnGSk6POgtoJZf6g8XtS0OxsFXBSxuBuMBBBbKtoztw==} dependencies: - '@storybook/node-logger': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/node-logger': 7.0.10 + '@storybook/types': 7.0.10 '@types/node': 16.18.16 '@types/pretty-hrtime': 1.0.1 chalk: 4.1.2 @@ -5475,6 +5487,10 @@ packages: - supports-color dev: true + /@storybook/core-events@7.0.10: + resolution: {integrity: sha512-OyBqhxVQOdI78Vgv6nKwXOdIVNChyfktpdxQZP1rz9MpO6MrqMaGAUL7k8xQMQAVx0VY+dAMYZB3bnyN2IC8FA==} + dev: true + /@storybook/core-events@7.0.2: resolution: {integrity: sha512-1DCHCwHRL3+rlvnVVc/BCfReP31XaT2WYgcLeGTmkX1E43Po1MkgcM7PnJPSaa9POvSqZ+6YLZv5Bs1SXbufow==} dev: true @@ -5483,32 +5499,28 @@ packages: resolution: {integrity: sha512-kGrtjlYtjd4iTVk+Phb4CymZaVkB+MGscKAgcO8gfgJ/Q/gq8HQLVZSIzeoCDcDSHOGlBzbg2WVtdHIHhCKlOQ==} dev: true - /@storybook/core-events@7.0.7: - resolution: {integrity: sha512-XNsR2RgaL2vBwuqsu+KA1DzGmB1UFfrAhpxhmyWTKDCniwtTLlaXgfKbqwcrOrPu/o1YswgIup/9UHepRHaf4A==} - dev: true - - /@storybook/core-server@7.0.7: - resolution: {integrity: sha512-PB4zoClH7aKG4XeJhxx43iK9n/C9gctXubNN5DSN6thPm4UITOas+/q4N7AHbCPyRbcMyoW7M31KtpzZu4Fjew==} + /@storybook/core-server@7.0.10: + resolution: {integrity: sha512-KFCc3turPed8tiC5IUKTV7oObVmFckMP1XqO7zec2g2NlGQsN83DRso+BA1wpV/bb8AD1NJDU6LJnyN3KKdi1Q==} dependencies: '@aw-web-design/x-default-browser': 1.4.88 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.0.7 - '@storybook/core-common': 7.0.7 - '@storybook/core-events': 7.0.7 + '@storybook/builder-manager': 7.0.10 + '@storybook/core-common': 7.0.10 + '@storybook/core-events': 7.0.10 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.0.7 + '@storybook/csf-tools': 7.0.10 '@storybook/docs-mdx': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.0.7 - '@storybook/node-logger': 7.0.7 - '@storybook/preview-api': 7.0.7 - '@storybook/telemetry': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/manager': 7.0.10 + '@storybook/node-logger': 7.0.10 + '@storybook/preview-api': 7.0.10 + '@storybook/telemetry': 7.0.10 + '@storybook/types': 7.0.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 + '@types/semver': 7.5.0 better-opn: 2.1.1 boxen: 5.1.2 chalk: 4.1.2 @@ -5539,24 +5551,24 @@ packages: - utf-8-validate dev: true - /@storybook/csf-plugin@7.0.7: - resolution: {integrity: sha512-uhf2g077gXA6ZEMXIPQ0RnX+IoOTBJbj+6+VQfT7K5tvJeop1z0Fvk0FoknNXcUe7aUA0nzA/cUQ1v4vXqbY3Q==} + /@storybook/csf-plugin@7.0.10: + resolution: {integrity: sha512-uUty5rLs6O32tJaXIne2/42UxFL3eaRCDgtAoAkGxbUPa/FLYpO0rYtqF2OG9MagwXU7+As5RlLkDLeYAvUzlQ==} dependencies: - '@storybook/csf-tools': 7.0.7 + '@storybook/csf-tools': 7.0.10 unplugin: 0.10.2 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@7.0.7: - resolution: {integrity: sha512-KbO5K2RS0oFm94eR49bAPvoyXY3Q6+ozvBek/F05RP7iAV790icQc59Xci9YDM1ONgb3afS+gSJGFBsE0h4pmg==} + /@storybook/csf-tools@7.0.10: + resolution: {integrity: sha512-sl/995jq03HD7/Q9cb54h0glgt7JLGTkfikSlB35NGMEkgEXEswDmpQHA/TbzUYylIxuAwTKghwMqL3IwSSHwA==} dependencies: '@babel/generator': 7.21.3 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 '@storybook/csf': 0.1.0 - '@storybook/types': 7.0.7 + '@storybook/types': 7.0.10 fs-extra: 11.1.0 recast: 0.23.1 ts-dedent: 2.2.0 @@ -5574,13 +5586,13 @@ packages: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true - /@storybook/docs-tools@7.0.7: - resolution: {integrity: sha512-VB4Qa33DYNxXALWcXyDid246r9Q6SGM+Q+pGWOuEJsxRxDmrUspXHaHG0CO1NIjMWfbqpOoz61vquZO0GZoAAg==} + /@storybook/docs-tools@7.0.10: + resolution: {integrity: sha512-w3m7+LlQGI50i07XjiOzIfoap8rnmsrs8hXGUTodbs9vvLt8HBdUaapOGnYr/1BzA0YQJ7Nz2z1nTirQEphmsQ==} dependencies: '@babel/core': 7.21.3 - '@storybook/core-common': 7.0.7 - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/core-common': 7.0.10 + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.10 '@types/doctrine': 0.0.3 doctrine: 3.0.0 lodash: 4.17.21 @@ -5598,6 +5610,16 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true + /@storybook/instrumenter@7.0.10: + resolution: {integrity: sha512-Z+kIidnxaq3tneUnIKB2d0DCqb4lwUdOS/AC43LNvd9C6BWYgj89cIPdLDTNhOWa0ZiEju7wTS+K/3uMvcHZ4w==} + dependencies: + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/core-events': 7.0.10 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.0.10 + dev: true + /@storybook/instrumenter@7.0.2: resolution: {integrity: sha512-zr9/fuaYtGVUtcL8XgjA4Iq5jtzdcqQyOSH4XLXtz6JtSad3lkRagbJo2Vzbw7dO/4vzjfTMxEzvWjUuPxLOhA==} dependencies: @@ -5618,16 +5640,6 @@ packages: '@storybook/preview-api': 7.0.6 dev: true - /@storybook/instrumenter@7.0.7: - resolution: {integrity: sha512-0zE5lM3laKvCT4GW/XKKw8kakvI4catqK8PObZolRhfxbtGufW4VJZ2E8vXLtgA/+K3zikypjuWE6d45NLbh9w==} - dependencies: - '@storybook/channels': 7.0.7 - '@storybook/client-logger': 7.0.7 - '@storybook/core-events': 7.0.7 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.7 - dev: true - /@storybook/jest@0.1.0: resolution: {integrity: sha512-TmybnEXlv5Fu2/Hq4nRj7alS9mw4CasLR0RDwaAzS+Vpvu1TC4+j9rh+b1BHtmWebbJh0JMT6mgzPqOyJdgtQA==} dependencies: @@ -5637,20 +5649,20 @@ packages: jest-mock: 27.5.1 dev: true - /@storybook/manager-api@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QTd/P72peAhofKqK+8yzIO9iWAEfPn8WUGGveV2KGaTlSlgbr87RLHEKilcXMZcYhBWC9izFRmjKum9ROdskrQ==} + /@storybook/manager-api@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Dik73GKUX9QCFOvukTXjZoZX0G6n/LrRMkwLggb28E9m8iFt2ivWvF9MVvyRoDffR9VP5t53+nV5fqxqpXWoQw==} 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.7 - '@storybook/client-logger': 7.0.7 - '@storybook/core-events': 7.0.7 + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/core-events': 7.0.10 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/router': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/router': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -5662,16 +5674,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/manager@7.0.7: - resolution: {integrity: sha512-FhquwUpUOHsjZROf6E6kzUnJ6EmMeJ9b+HYg6yYPyIMYVMjAhnkRKbIj0phGx2lhgKFlmxik+3pgchK5SLdcZA==} + /@storybook/manager@7.0.10: + resolution: {integrity: sha512-cFMOOXmcRx1tN50TqC2huOsF91fAvNM82wTDnAbT2FtA+ZHFHNyE1PgWgiKDDepzOpKaG+FfT4bJcQAaAfYOBg==} dev: true /@storybook/mdx2-csf@1.0.0: resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==} dev: true - /@storybook/node-logger@7.0.7: - resolution: {integrity: sha512-5Y4LLgKeCStq1ktCKZ5eNPzQQSQ+CYZAlkEdzQ3Pp//0KXaZvVxEvGtaYhAymP2HatLpI8Oneo4lHrJioRfgww==} + /@storybook/node-logger@7.0.10: + resolution: {integrity: sha512-btCCreucTApi7EP84jbfqlFQZDD4Kz9lFLftalZA7nskDZW6i8reNNykTU2Y22TQvlbpqs5kL1N1cEsbG3vepw==} dependencies: '@types/npmlog': 4.1.4 chalk: 4.1.2 @@ -5679,8 +5691,28 @@ packages: pretty-hrtime: 1.0.3 dev: true - /@storybook/postinstall@7.0.7: - resolution: {integrity: sha512-APcZ2KaR7z1aJje3pID4Ywmt1/aVcP3Sc4ltzNdH9mCkEsuq0fZHHQrYSa9Ya1IPRmSeLZ5/23q1iyqmGU3zoQ==} + /@storybook/postinstall@7.0.10: + resolution: {integrity: sha512-SVPKGuuvfn1MceLWzYHGbpP77+waLKXglAH4Gkdoa2mKdk3XO45Zn8OhwwNzHuP698boMNaGaB/utBLBpkXMMg==} + dev: true + + /@storybook/preview-api@7.0.10: + resolution: {integrity: sha512-URj2YJKbs8hc6JZQ3aA+MmjB4hTSzGZAVFVs3kLUEuaQPDbU1RT5GKxedwF5zlMnkZQPNoaUtopN3z7aF+SKFQ==} + dependencies: + '@storybook/channel-postmessage': 7.0.10 + '@storybook/channels': 7.0.10 + '@storybook/client-logger': 7.0.10 + '@storybook/core-events': 7.0.10 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/types': 7.0.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.2: @@ -5723,32 +5755,12 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.0.7: - resolution: {integrity: sha512-R5pmGTodpu6hbwEg2RM2ulWtW3d426YzsisHrZJ+FT9lecWauN1y9xHCz7HdNzEFhT8r4YOa24L9ZS3mosZ7hA==} - dependencies: - '@storybook/channel-postmessage': 7.0.7 - '@storybook/channels': 7.0.7 - '@storybook/client-logger': 7.0.7 - '@storybook/core-events': 7.0.7 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/types': 7.0.7 - '@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 + /@storybook/preview@7.0.10: + resolution: {integrity: sha512-IQX8v7OpKeo2Oqeyxo6/uSRys+dJ7zms12jViJWGzx9fg6IchV/iNtf4TBrF3Z2JBNKovk03kICAMHTpZuz9Qg==} dev: true - /@storybook/preview@7.0.7: - resolution: {integrity: sha512-uL3ZcFao6UvxiSxCIcXKFakxEr9Nn0lvu0zzC2yQCVepzA7a+GDr1cK5VbZ6Mez38CnOvBmb5pkCbgRqSf/oug==} - dev: true - - /@storybook/react-dom-shim@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-INGwFeu9M+RzpvktSKuwy8Rk/70mXGqxxsb9lPtq7phmETvfpNX7GnLJqiVazTaQiB1DkB0iAPUsK2MNbBu+Kw==} + /@storybook/react-dom-shim@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NLuE2Be/BGmXHufwLp1Gje+IsTb0HWvwzHlci2U430WgwGU8fsTPNgALMrwCpqN9o1KnrRGpysQEoyIYStQBdg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5757,25 +5769,25 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.4): - resolution: {integrity: sha512-RuWfP/kiLpuHdcF9dWUUp9SOGMmO0FJ0HGV5yAOhGmi8KmTzvc8zjC+hJjj+sSgn2n71BO8pG/zqGl16FwfwVQ==} + /@storybook/react-vite@7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.5): + resolution: {integrity: sha512-ZEwRpMEJAQtMruG/XGha52XHkb3extXudWT5SoXOcfiRy9eK7Y3oJwHR8KHNH3LE+LrRh7c+D53k7eMudRtsNA==} 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.4)(vite@4.3.4) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.0.4)(vite@4.3.5) '@rollup/pluginutils': 4.2.1 - '@storybook/builder-vite': 7.0.7(typescript@5.0.4)(vite@4.3.4) - '@storybook/react': 7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4) - '@vitejs/plugin-react': 3.1.0(vite@4.3.4) + '@storybook/builder-vite': 7.0.10(typescript@5.0.4)(vite@4.3.5) + '@storybook/react': 7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4) + '@vitejs/plugin-react': 3.1.0(vite@4.3.5) 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.3.4(@types/node@18.16.3)(sass@1.62.1) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) transitivePeerDependencies: - '@preact/preset-vite' - supports-color @@ -5783,8 +5795,8 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4): - resolution: {integrity: sha512-eEsIfAGumzo7KRi/WKFpn/PGFhwLv72oiEM/8l5MMX/6poIkiekunqJLfx2BoL4cCtiS4g7OYzOdWjN01DwVCg==} + /@storybook/react@7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4): + resolution: {integrity: sha512-/DDUGFz0bk5c/HCfSr7fL74rQc+3s317TDDKY6ZrgUzdIkze4D/TlAbWV78XV/ceeFNi1fLAUzGjFzuDwmVkJw==} engines: {node: '>=16.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5794,13 +5806,13 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/core-client': 7.0.7 - '@storybook/docs-tools': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/core-client': 7.0.10 + '@storybook/docs-tools': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.7 - '@storybook/react-dom-shim': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/preview-api': 7.0.10 + '@storybook/react-dom-shim': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 16.18.16 @@ -5822,27 +5834,27 @@ packages: - supports-color dev: true - /@storybook/router@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/lM8/NHQKeshfnC3ayFuO8Y9TCSHnCAPRhIsVxvanBzcj+ILbCIyZ+TspvB3hT4MbX/Ez+JR8VrMbjXIGwmH8w==} + /@storybook/router@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Vq3nuyrGsvbPYhsaVu0TwtzX8Yb5TZYg7v5gY/uk1brSIk7Mvw64E8WF4TKNhPcWnlxNrfP9S96IZgT9iuuCpw==} 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.7 + '@storybook/client-logger': 7.0.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/source-loader@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vAURuD0WmafHe8XGbkwcOn1dCLcU4ociL5xakCw0upgW0cUczp4BMRfwmP0Az5YDhfoQRjBVmUaFfjONhTDawg==} + /@storybook/source-loader@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DtdYllq0piU6vgoVjsuPsWaGlhSOJgJr/kRovu5zltaZzdEOyQZ7e0zQmA4Py0h9jnGbg2fQG9zccofY3jUdJw==} 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.1.0 - '@storybook/types': 7.0.7 + '@storybook/types': 7.0.10 estraverse: 5.3.0 lodash: 4.17.21 prettier: 2.8.8 @@ -5850,11 +5862,11 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/telemetry@7.0.7: - resolution: {integrity: sha512-Ka6pwWr3sWs3A/6WQ0wsoSYzXx3Mhr7eByNZZKuuCu9jnw3I8AbIOqQX2iOVzaQBLZsvXEeqvYY8iZ+GuRbbGQ==} + /@storybook/telemetry@7.0.10: + resolution: {integrity: sha512-0xlMECcSU2UnmpDTxKE/+pKpcW88fhxEZxh54yoA6NPpq6SGUN1r5ybUMffJCZ0JgaQ8HOc3Vxd13T3VXAMLXA==} dependencies: - '@storybook/client-logger': 7.0.7 - '@storybook/core-common': 7.0.7 + '@storybook/client-logger': 7.0.10 + '@storybook/core-common': 7.0.10 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.4 @@ -5877,20 +5889,29 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/theming@7.0.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==} + /@storybook/theming@7.0.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kKxIMElOUAyIAJOlhU6NS6/F6KpZLWvfGnUYC5V4f5Rsu+lKnbWI/TJ1rCIooz2wZBQ6dv+fjA3sOh5K+LRh2w==} 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.7 + '@storybook/client-logger': 7.0.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.10: + resolution: {integrity: sha512-mFktvN8PjjDFJSjck4spikmjtr0AwfOhcEtIf4UCmUD5JHgGppkQmvO6483nGcprSFcWOvD2uYGs8Wp32wG/MQ==} + dependencies: + '@storybook/channels': 7.0.10 + '@types/babel__core': 7.20.0 + '@types/express': 4.17.17 + file-system-cache: 2.0.2 + dev: true + /@storybook/types@7.0.2: resolution: {integrity: sha512-0OCt/kAexa8MCcljxA+yZxGMn0n2U2Ync0KxotItqNbKBKVkaLQUls0+IXTWSCpC/QJvNZ049jxUHHanNi/96w==} dependencies: @@ -5909,32 +5930,23 @@ packages: file-system-cache: 2.0.2 dev: true - /@storybook/types@7.0.7: - resolution: {integrity: sha512-v9piuwp8FvTiHXIOOi5lEyTEJKhnbcbhVxgJ3VFhhXYFd0DTz6Bst0XIIgkgs21ITb3xhkfPbCRUueMcbXO1MA==} - dependencies: - '@storybook/channels': 7.0.7 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.17 - file-system-cache: 2.0.2 - dev: true - - /@storybook/vue3-vite@7.0.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.4)(vue@3.2.47): - resolution: {integrity: sha512-ePAOd5TBYq6WJTHgSP6B/k3PXzv8JU5sm956FMmpnDXvttZGKlp+a1qjabA8IbKD8SKfmjQmV7719Uh/ZPyQ6Q==} + /@storybook/vue3-vite@7.0.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(vite@4.3.5)(vue@3.3.1): + resolution: {integrity: sha512-BbA6uLlNFIpSBW9UAJ9e96yCGGoMho0pogEbkzoRLdw/0OoqDqnRMue78CwW5eiIWXYjNZb3UwAyh9VgYqKk5g==} 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.7(typescript@5.0.4)(vite@4.3.4) - '@storybook/core-server': 7.0.7 - '@storybook/vue3': 7.0.7(vue@3.2.47) - '@vitejs/plugin-vue': 4.2.1(vite@4.3.4)(vue@3.2.47) + '@storybook/builder-vite': 7.0.10(typescript@5.0.4)(vite@4.3.5) + '@storybook/core-server': 7.0.10 + '@storybook/vue3': 7.0.10(vue@3.3.1) + '@vitejs/plugin-vue': 4.2.2(vite@4.3.5)(vue@3.3.1) magic-string: 0.27.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) - vue-docgen-api: 4.64.1(vue@3.2.47) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) + vue-docgen-api: 4.64.1(vue@3.3.1) transitivePeerDependencies: - '@preact/preset-vite' - bufferutil @@ -5946,20 +5958,20 @@ packages: - vue dev: true - /@storybook/vue3@7.0.7(vue@3.2.47): - resolution: {integrity: sha512-SPZYm46zVkL9julVrQsUpPY02M/XzaDVsODlC75dXgL1jBskmbgW6WkjFEOoNr1RtEblb+t+pqxLoK4/LA09qw==} + /@storybook/vue3@7.0.10(vue@3.3.1): + resolution: {integrity: sha512-B4DW/lR9Am06RJM3TGrIgIYzurG6tsgUX9EQ6rQRDFd4EWw1bskcG8MrNwFBBiDBnXe1frL4AdDidF47CFStNg==} engines: {node: '>=16.0.0'} peerDependencies: vue: ^3.0.0 dependencies: - '@storybook/core-client': 7.0.7 - '@storybook/docs-tools': 7.0.7 + '@storybook/core-client': 7.0.10 + '@storybook/docs-tools': 7.0.10 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.7 - '@storybook/types': 7.0.7 + '@storybook/preview-api': 7.0.10 + '@storybook/types': 7.0.10 ts-dedent: 2.2.0 type-fest: 2.19.0 - vue: 3.2.47 + vue: 3.3.1 transitivePeerDependencies: - supports-color dev: true @@ -6311,7 +6323,7 @@ packages: '@testing-library/dom': 8.20.0 dev: true - /@testing-library/vue@7.0.0(@vue/compiler-sfc@3.2.47)(vue@3.2.47): + /@testing-library/vue@7.0.0(@vue/compiler-sfc@3.3.1)(vue@3.3.1): resolution: {integrity: sha512-JU/q93HGo2qdm1dCgWymkeQlfpC0/0/DBZ2nAHgEAsVZxX11xVIxT7gbXdI7HACQpUbsUWt1zABGU075Fzt9XQ==} engines: {node: '>=14'} peerDependencies: @@ -6320,9 +6332,9 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@testing-library/dom': 9.2.0 - '@vue/compiler-sfc': 3.2.47 - '@vue/test-utils': 2.3.2(vue@3.2.47) - vue: 3.2.47 + '@vue/compiler-sfc': 3.3.1 + '@vue/test-utils': 2.3.2(vue@3.3.1) + vue: 3.3.1 dev: true /@tokenizer/token@0.3.0: @@ -6341,7 +6353,7 @@ packages: /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/archiver@5.3.2: @@ -6371,20 +6383,20 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.21.8 + '@babel/types': 7.21.5 dev: true /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 dev: true /@types/bcryptjs@2.4.2: @@ -6395,7 +6407,7 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/braces@3.0.1: @@ -6415,7 +6427,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/responselike': 1.0.0 dev: false @@ -6448,7 +6460,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/content-disposition@0.5.5: @@ -6513,7 +6525,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -6534,34 +6546,34 @@ packages: /@types/fluent-ffmpeg@2.1.21: resolution: {integrity: sha512-+n3dy/Tegt6n+YwGZUiGq6i8Jrnt8+MoyPiW1L6J5EWUl7GSt18a/VyReecfCsvTTNBXNMIKOMHDstiQM8nJLA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/glob-stream@6.1.1: resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==} dependencies: '@types/glob': 8.1.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.16.3 + '@types/node': 20.1.3 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.16.3 + '@types/node': 20.1.3 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/gulp-rename@2.0.1: @@ -6571,6 +6583,13 @@ packages: '@types/vinyl': 2.0.7 dev: true + /@types/gulp-rename@2.0.2: + resolution: {integrity: sha512-CQsXqTVtAXqrPd4IbrrlJEEzRkUR3RXsyZbrVoOVqjlchDDmnyRDatAUisjpQjjCg/wjJrSiNg8T1uAbJ/7Qqg==} + dependencies: + '@types/node': 20.1.3 + '@types/vinyl': 2.0.7 + dev: true + /@types/gulp@4.0.10: resolution: {integrity: sha512-spgZHJFqiEJGwqGlf7T/k4nkBpBcLgP7T0EfN6G2vvnhUfvd4uO1h8RwpXOE8x/54DVYUs1XCAtBHkX/R3axAQ==} dependencies: @@ -6622,7 +6641,7 @@ packages: /@types/jsdom@21.1.1: resolution: {integrity: sha512-cZFuoVLtzKP3gmq9eNosUL1R50U+USkbLtUQ1bYVgl/lKp0FZM7Cq4aIHAL8oIvQ17uSHi7jXPtfDOdjPwBE7A==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -6646,7 +6665,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: false /@types/lodash@4.14.191: @@ -6657,8 +6676,8 @@ packages: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: false - /@types/matter-js@0.18.2: - resolution: {integrity: sha512-W9UC9DOPNBRTUocqqPZmzX3cbHmlZBI9jLn6SuxZz0n5QrPk382Ig3hbBWHqYU8TRUmTCJJhuanXeyMTavF7Mg==} + /@types/matter-js@0.18.3: + resolution: {integrity: sha512-7DYI52ebEl6AD9+RV2jO/XHdlFlpozYbkURtYKKJ2tO34q49Y15cfl+JSJpoMglQCAL/PxBSHKVv3wkvfZZD7g==} dev: true /@types/mdx@2.0.3: @@ -6694,7 +6713,7 @@ packages: /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 form-data: 3.0.1 /@types/node-fetch@3.0.3: @@ -6720,11 +6739,15 @@ packages: /@types/node@18.16.3: resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} + dev: true + + /@types/node@20.1.3: + resolution: {integrity: sha512-NP2yfZpgmf2eDRPmgGq+fjGjSwFgYbihA8/gK+ey23qT9RkxsgNTZvGOEpXgzIGqesTYkElELLgtKoMQTys5vA==} /@types/nodemailer@6.4.7: resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/normalize-package-data@2.4.1: @@ -6738,7 +6761,7 @@ packages: /@types/oauth@0.9.1: resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/offscreencanvas@2019.3.0: @@ -6752,7 +6775,7 @@ packages: /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 pg-protocol: 1.5.0 pg-types: 2.2.0 dev: true @@ -6780,7 +6803,7 @@ packages: /@types/qrcode@1.5.0: resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/qs@6.9.7: @@ -6810,7 +6833,7 @@ packages: /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/redis@4.0.11: @@ -6826,7 +6849,7 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: false /@types/sanitize-html@2.9.0: @@ -6847,14 +6870,14 @@ packages: resolution: {integrity: sha512-kopEpYpFQvQdYsZkZVwht/0THHmTFFYXDaqV/lM45eweJ8kcGVDgZHs0RVTolSq55UPZNmjhKc9r7UvLu/mQQg==} dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} /@types/serve-static@1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/serviceworker@0.0.67: @@ -6864,7 +6887,7 @@ packages: /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/sharp@0.32.0: @@ -6929,7 +6952,7 @@ packages: /@types/undertaker@1.2.8: resolution: {integrity: sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/undertaker-registry': 1.0.1 async-done: 1.3.2 dev: true @@ -6941,7 +6964,7 @@ packages: /@types/unzipper@0.10.5: resolution: {integrity: sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/uuid@9.0.1: @@ -6951,14 +6974,14 @@ packages: /@types/vary@1.1.0: resolution: {integrity: sha512-LQWqrIa0dvEOOH37lGksMEXbypRLUFqu6Gx0pmX7zIUisD2I/qaVgEX/vJ/PSVSW0Hk6yz1BNkFpqg6dZm3Wug==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/vinyl-fs@2.4.12: resolution: {integrity: sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==} dependencies: '@types/glob-stream': 6.1.1 - '@types/node': 18.16.3 + '@types/node': 20.1.3 '@types/vinyl': 2.0.7 dev: true @@ -6966,12 +6989,12 @@ packages: resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} dependencies: '@types/expect': 1.20.4 - '@types/node': 18.16.3 + '@types/node': 20.1.3 /@types/web-push@3.3.2: resolution: {integrity: sha512-JxWGVL/m7mWTIg4mRYO+A6s0jPmBkr4iJr39DqJpRJAc+jrPiEe1/asmkwerzRon8ZZDxaZJpsxpv0Z18Wo9gw==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/webgl-ext@0.0.30: @@ -6985,13 +7008,13 @@ packages: /@types/websocket@1.0.5: resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /@types/yargs-parser@21.0.0: @@ -7014,12 +7037,12 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true optional: true - /@typescript-eslint/eslint-plugin@5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==} + /@typescript-eslint/eslint-plugin@5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4): + resolution: {integrity: sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -7030,12 +7053,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/type-utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 5.59.5 + '@typescript-eslint/type-utils': 5.59.5(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.5(eslint@8.40.0)(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 + eslint: 8.40.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -7046,8 +7069,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.2(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==} + /@typescript-eslint/parser@5.59.5(eslint@8.40.0)(typescript@5.0.4): + resolution: {integrity: sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -7056,26 +7079,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) + '@typescript-eslint/scope-manager': 5.59.5 + '@typescript-eslint/types': 5.59.5 + '@typescript-eslint/typescript-estree': 5.59.5(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 + eslint: 8.40.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.2: - resolution: {integrity: sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==} + /@typescript-eslint/scope-manager@5.59.5: + resolution: {integrity: sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/visitor-keys': 5.59.2 + '@typescript-eslint/types': 5.59.5 + '@typescript-eslint/visitor-keys': 5.59.5 dev: true - /@typescript-eslint/type-utils@5.59.2(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==} + /@typescript-eslint/type-utils@5.59.5(eslint@8.40.0)(typescript@5.0.4): + resolution: {integrity: sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -7084,23 +7107,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 5.59.5(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.5(eslint@8.40.0)(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 + eslint: 8.40.0 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.2: - resolution: {integrity: sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==} + /@typescript-eslint/types@5.59.5: + resolution: {integrity: sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.2(typescript@5.0.4): - resolution: {integrity: sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==} + /@typescript-eslint/typescript-estree@5.59.5(typescript@5.0.4): + resolution: {integrity: sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -7108,8 +7131,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/visitor-keys': 5.59.2 + '@typescript-eslint/types': 5.59.5 + '@typescript-eslint/visitor-keys': 5.59.5 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -7120,19 +7143,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.59.2(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==} + /@typescript-eslint/utils@5.59.5(eslint@8.40.0)(typescript@5.0.4): + resolution: {integrity: sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) - eslint: 8.39.0 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.5 + '@typescript-eslint/types': 5.59.5 + '@typescript-eslint/typescript-estree': 5.59.5(typescript@5.0.4) + eslint: 8.40.0 eslint-scope: 5.1.1 semver: 7.5.0 transitivePeerDependencies: @@ -7140,15 +7163,15 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.2: - resolution: {integrity: sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==} + /@typescript-eslint/visitor-keys@5.59.5: + resolution: {integrity: sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.2 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.59.5 + eslint-visitor-keys: 3.4.1 dev: true - /@vitejs/plugin-react@3.1.0(vite@4.3.4): + /@vitejs/plugin-react@3.1.0(vite@4.3.5): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -7159,65 +7182,67 @@ packages: '@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.3.4(@types/node@18.16.3)(sass@1.62.1) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) transitivePeerDependencies: - supports-color dev: true - /@vitejs/plugin-vue@4.2.1(vite@4.3.4)(vue@3.2.47): - resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==} + /@vitejs/plugin-vue@4.2.2(vite@4.3.5)(vue@3.3.1): + resolution: {integrity: sha512-kNH4wMAqs13UiZe/2If1ioO0Mjz71rr2oALTl2c5ajBIox9Vz/UGW/wGkr7GA3SC6Eb29c1HtzAtxdGfbXAkfQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) - vue: 3.2.47 + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) + vue: 3.3.1 - /@vitest/coverage-c8@0.30.1(vitest@0.30.1): - resolution: {integrity: sha512-/Wa3dtSuckpdngAmiCwowaEXXgJkqPrtfvrs9HTB9QoEfNbZWPu4E4cjEn4lJZb4qcGf4fxFtUA2f9DnDNAzBA==} + /@vitest/coverage-c8@0.31.0(vitest@0.31.0): + resolution: {integrity: sha512-h72qN1D962AO7UefQVulm9JFP5ACS7OfhCdBHioXU8f7ohH/+NTZCgAqmgcfRNHHO/8wLFxx+93YVxhodkEJVA==} peerDependencies: vitest: '>=0.30.0 <1' dependencies: + '@ampproject/remapping': 2.2.0 c8: 7.13.0 + magic-string: 0.30.0 picocolors: 1.0.0 std-env: 3.3.2 - vitest: 0.30.1(happy-dom@9.10.2)(sass@1.62.1) + vitest: 0.31.0(happy-dom@9.16.0)(sass@1.62.1) dev: true - /@vitest/expect@0.30.1: - resolution: {integrity: sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw==} + /@vitest/expect@0.31.0: + resolution: {integrity: sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==} dependencies: - '@vitest/spy': 0.30.1 - '@vitest/utils': 0.30.1 + '@vitest/spy': 0.31.0 + '@vitest/utils': 0.31.0 chai: 4.3.7 dev: true - /@vitest/runner@0.30.1: - resolution: {integrity: sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA==} + /@vitest/runner@0.31.0: + resolution: {integrity: sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==} dependencies: - '@vitest/utils': 0.30.1 + '@vitest/utils': 0.31.0 concordance: 5.0.4 p-limit: 4.0.0 pathe: 1.1.0 dev: true - /@vitest/snapshot@0.30.1: - resolution: {integrity: sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw==} + /@vitest/snapshot@0.31.0: + resolution: {integrity: sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==} dependencies: magic-string: 0.30.0 pathe: 1.1.0 pretty-format: 27.5.1 dev: true - /@vitest/spy@0.30.1: - resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==} + /@vitest/spy@0.31.0: + resolution: {integrity: sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==} dependencies: tinyspy: 2.1.0 dev: true - /@vitest/utils@0.30.1: - resolution: {integrity: sha512-/c8Xv2zUVc+rnNt84QF0Y0zkfxnaGhp87K2dYJMLtLOIckPzuxLVzAtFCicGFdB4NeBHNzTRr1tNn7rCtQcWFA==} + /@vitest/utils@0.31.0: + resolution: {integrity: sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==} dependencies: concordance: 5.0.4 loupe: 2.3.6 @@ -7245,32 +7270,32 @@ packages: typescript: 5.0.4 dev: true - /@volar/vue-language-core@1.6.3: - resolution: {integrity: sha512-e9OTDCPa8Wuh0ORhD4z++qTIcrsrqcI9waspr93YcQCq6j+Q+JTFuy7HBSQgyezSAsP6x1WWokKVk4fWWDJQOw==} + /@volar/vue-language-core@1.6.4: + resolution: {integrity: sha512-1o+cAtN2DIDNAX/HS8rkjZc8wTMTK+zCab/qtYbvEVlmokhZiDrQeoD9/l0Ug7YCNg+mVuMNHKNBY7pX8U2/Jw==} dependencies: '@volar/language-core': 1.4.1 '@volar/source-map': 1.4.1 - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/compiler-sfc': 3.3.0-beta.3 - '@vue/reactivity': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-dom': 3.3.1 + '@vue/compiler-sfc': 3.3.1 + '@vue/reactivity': 3.3.1 + '@vue/shared': 3.3.1 minimatch: 9.0.0 muggle-string: 0.2.2 vue-template-compiler: 2.7.14 dev: true - /@volar/vue-typescript@1.6.3(typescript@5.0.4): - resolution: {integrity: sha512-Dz29Qym33P1MSZDTZJ6PPLN1TLQfkX+g2pRnHqLCsFdSUu4yWYnElBURCn5WJkekxV/v+k2T43aur2RCSY3Ovg==} + /@volar/vue-typescript@1.6.4(typescript@5.0.4): + resolution: {integrity: sha512-qKwgP0KVQR/aaH/SN3AP7RB8NnXPWDn3tjyXP6IT6etxkDeZLBLsXWUD9KMak/RvV1DgbXDuz4F9yuZlbt29rA==} peerDependencies: typescript: '*' dependencies: '@volar/typescript': 1.4.1(typescript@5.0.4) - '@volar/vue-language-core': 1.6.3 + '@volar/vue-language-core': 1.6.4 typescript: 5.0.4 dev: true - /@vue-macros/common@1.3.0(rollup@3.21.3)(vue@3.2.47): - resolution: {integrity: sha512-oRK9vdKryXtJbfucRla8XdnQiWVVNHEBid0waacdfMJn+LOunWeU/3k8VoZZc328HmmZj69MGkUoMWixsHCHGg==} + /@vue-macros/common@1.3.1(rollup@3.21.6)(vue@3.3.1): + resolution: {integrity: sha512-Lc5aP/8HNJD1XrnvpeNuWcCf82bZdR3auN/chA1b/1rKZgSnmQkH9f33tKO9qLwXSy+u4hpCi8Rw+oUuF1KCeg==} engines: {node: '>=14.19.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -7278,234 +7303,124 @@ packages: vue: optional: true dependencies: - '@babel/types': 7.21.4 - '@rollup/pluginutils': 5.0.2(rollup@3.21.3) - '@vue/compiler-sfc': 3.3.0-beta.2 + '@babel/types': 7.21.5 + '@rollup/pluginutils': 5.0.2(rollup@3.21.6) + '@vue/compiler-sfc': 3.3.1 local-pkg: 0.4.3 magic-string-ast: 0.1.2 - vue: 3.2.47 + vue: 3.3.1 transitivePeerDependencies: - rollup dev: false - /@vue-macros/reactivity-transform@0.3.5(rollup@3.21.3)(vue@3.2.47): - resolution: {integrity: sha512-HDWPMytAp32uC4aXuLITsBkxGI8yppmthGSSYJENXPvovnIctGV7q6mMNkr9cJMjyr6pjE1rv0y0Vc7SUhx/Xw==} + /@vue-macros/reactivity-transform@0.3.6(rollup@3.21.6)(vue@3.3.1): + resolution: {integrity: sha512-PFJRXHEdIP03LeNnfcwjUk8pKWjvyeOZjCNwbLgfqunI9tknG4IQMfl86qswK83f+DoOTMCoeMFoUnmlbr+yUw==} engines: {node: '>=14.19.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 dependencies: - '@babel/parser': 7.21.4 - '@vue-macros/common': 1.3.0(rollup@3.21.3)(vue@3.2.47) - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@babel/parser': 7.21.8 + '@vue-macros/common': 1.3.1(rollup@3.21.6)(vue@3.3.1) + '@vue/compiler-core': 3.3.1 + '@vue/shared': 3.3.1 magic-string: 0.30.0 unplugin: 1.3.1 - vue: 3.2.47 + vue: 3.3.1 transitivePeerDependencies: - rollup dev: false - /@vue/compiler-core@3.2.47: - resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} + /@vue/compiler-core@3.3.1: + resolution: {integrity: sha512-5le1qYSBgLWg2jdLrbydlhnPJkkzMw46UrRUvTnOKlfg6pThtm9ohhqBhNPHbr0RcM1MCbK5WZe/3Ghz0SZjpQ==} dependencies: - '@babel/parser': 7.21.4 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - source-map: 0.6.1 - - /@vue/compiler-core@3.3.0-beta.2: - resolution: {integrity: sha512-Z2VZCL9Rr1gVgyALHIRP+lNFjgfs/K4aTxvJYQ2vhgEAaI0/L6wtG5sr/gOP+MgxwGQV0PvA+iDG3Y3PC7rTEg==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/shared': 3.3.0-beta.2 + '@babel/parser': 7.21.8 + '@vue/shared': 3.3.1 estree-walker: 2.0.2 source-map-js: 1.0.2 - dev: false - /@vue/compiler-core@3.3.0-beta.3: - resolution: {integrity: sha512-mv2rPo4JHou6ebm7+U/wO1HpA6W1zDfTqbt4fqjoXrMwU4DWNgRcLKTXG6G3cXV4mOe+2YgWspfxEzo7fPTMKg==} + /@vue/compiler-dom@3.3.1: + resolution: {integrity: sha512-VmgIsoLivCft3+oNc5KM7b9wd0nZxP/g2qilMwi1hJyGA624KWnNKHn4hzBQs4FpzydUVpNy+TWVT8KiRCh3MQ==} dependencies: - '@babel/parser': 7.21.4 - '@vue/shared': 3.3.0-beta.3 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - dev: true - - /@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-dom@3.3.0-beta.2: - resolution: {integrity: sha512-9LPRdCj66OwmUiPa9nuKiaoyKxlFT56j+io8nK/aW5OLl1UkY//Lj661fmDkTY20oLmArt73fAuHD913w4hRqA==} - dependencies: - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 - dev: false - - /@vue/compiler-dom@3.3.0-beta.3: - resolution: {integrity: sha512-e7VpjN9wYiuJdJos6Uoe501CzdMkfaEr/27Ks4Ss7Irtcj5YA/S1OROZ35Xl2Pc3ctx6beq5RpcOvnMqh0hcaA==} - dependencies: - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 - dev: true + '@vue/compiler-core': 3.3.1 + '@vue/shared': 3.3.1 /@vue/compiler-sfc@2.7.14: resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==} dependencies: - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 postcss: 8.4.23 source-map: 0.6.1 dev: false - /@vue/compiler-sfc@3.2.47: - resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} - dependencies: - '@babel/parser': 7.20.7 - '@vue/compiler-core': 3.2.47 - '@vue/compiler-dom': 3.2.47 - '@vue/compiler-ssr': 3.2.47 - '@vue/reactivity-transform': 3.2.47 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.21 - source-map: 0.6.1 - - /@vue/compiler-sfc@3.3.0-beta.2: - resolution: {integrity: sha512-5FmcQ5LIpM/Y22dTxnxWPD04jC2gr6XSVVqQNY0y776F1P9x4f06fIpMibL58aKU07Th2z4Ab3oPg/Cg1QNVmA==} + /@vue/compiler-sfc@3.3.1: + resolution: {integrity: sha512-G+FPwBbXSLaA4+Ry5/bdD9Oda+sRslQcE9o6JSZaougRiT4OjVL0vtkbQHPrGRTULZV28OcrAjRfSZOSB0OTXQ==} dependencies: '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/compiler-dom': 3.3.0-beta.2 - '@vue/compiler-ssr': 3.3.0-beta.2 - '@vue/reactivity-transform': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 - estree-walker: 2.0.2 - magic-string: 0.30.0 - postcss: 8.4.21 - source-map-js: 1.0.2 - dev: false - - /@vue/compiler-sfc@3.3.0-beta.3: - resolution: {integrity: sha512-6shZNooetShjSMHJvgVoE0EM8pOMV5vnrzsHoCU06stzV+kqRJQpbN7xf2s9wK2fgHMIBSMINrM9AuZiQnNCJg==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/compiler-ssr': 3.3.0-beta.3 - '@vue/reactivity-transform': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-core': 3.3.1 + '@vue/compiler-dom': 3.3.1 + '@vue/compiler-ssr': 3.3.1 + '@vue/reactivity-transform': 3.3.1 + '@vue/shared': 3.3.1 estree-walker: 2.0.2 magic-string: 0.30.0 postcss: 8.4.23 source-map-js: 1.0.2 - dev: true - /@vue/compiler-ssr@3.2.47: - resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} + /@vue/compiler-ssr@3.3.1: + resolution: {integrity: sha512-QOQWGNCWuSeyKx4KvWSJlnIMGg+/2oCHgkFUYo7aJ+9Uaaz45yRgKQ+FNigy50NYBQIhpXn2e4OSR8GXh4knrQ==} dependencies: - '@vue/compiler-dom': 3.2.47 - '@vue/shared': 3.2.47 + '@vue/compiler-dom': 3.3.1 + '@vue/shared': 3.3.1 - /@vue/compiler-ssr@3.3.0-beta.2: - resolution: {integrity: sha512-Xg9od6GvHwfEpnTxMQR+KlKG1nbOHWRLHCiSA0FENiSDTjCDHh0ClzZLhIZUZJD75miyE9ia5ZQF6vpw680rCw==} + /@vue/reactivity-transform@3.3.1: + resolution: {integrity: sha512-MkOrJauAGH4MNdxGW/PmrDegMyOGX0wGIdKUZJRBXOTpotDONg7/TPJe2QeGeBCow/5v9iOqZOWCfvmOWIaDMg==} dependencies: - '@vue/compiler-dom': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 - dev: false - - /@vue/compiler-ssr@3.3.0-beta.3: - resolution: {integrity: sha512-egJ0lEVAod3Hpnw96cJ/0a9qv5f5h5/VCBpKYT8scqkzoMsikh8AJant2omokBCL/Ut5UAMLVQlA5b66+2Ys/g==} - dependencies: - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 - dev: true - - /@vue/reactivity-transform@3.2.47: - resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.2.47 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - magic-string: 0.25.9 - - /@vue/reactivity-transform@3.3.0-beta.2: - resolution: {integrity: sha512-EUL53/rsd+hrqhCa/SrhXQ6PzMZJfLQt39xQlzr0Sxsdv/bg5lqbcK9YtGkjYohRuSp1QneFU78LEsQ9j4B2Dw==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@babel/parser': 7.21.8 + '@vue/compiler-core': 3.3.1 + '@vue/shared': 3.3.1 estree-walker: 2.0.2 magic-string: 0.30.0 - dev: false - /@vue/reactivity-transform@3.3.0-beta.3: - resolution: {integrity: sha512-aM3TgBca9QMMu/9B9ASRVvckeZpAdJO9nmQh5UCznhoDYjVxQPS+sCQvH6TLOjPB1MDQMVQYg4ZiPqfVVo7NbA==} + /@vue/reactivity@3.3.1: + resolution: {integrity: sha512-zCfmazOtyUdC1NS/EPiSYJ4RqojqmTAviJyBbyVvY8zAv5NhK44Yfw0E1tt+m5vz0ZO1ptI9jDKBr3MWIEkpgw==} dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 - estree-walker: 2.0.2 - magic-string: 0.30.0 - dev: true + '@vue/shared': 3.3.1 - /@vue/reactivity@3.2.47: - resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==} + /@vue/runtime-core@3.3.1: + resolution: {integrity: sha512-Ljb37LYafhQqKIasc0r32Cva8gIh6VeSMjlwO6V03tCjHd18gmjP0F4UD+8/a59sGTysAgA8Rb9lIC2DVxRz2Q==} dependencies: - '@vue/shared': 3.2.47 + '@vue/reactivity': 3.3.1 + '@vue/shared': 3.3.1 - /@vue/reactivity@3.3.0-beta.3: - resolution: {integrity: sha512-9VjWfWgZJ18YXEkfnDfZr33RyLBa6zc0RARLkMqMApWvM26eusZAZ4hhyxlgODBU/mEFk4XOGIAtwwSQedA0MQ==} + /@vue/runtime-dom@3.3.1: + resolution: {integrity: sha512-NBjYbQPtMklb7lsJsM2Juv5Ygry6mvZP7PdH1GZqrzfLkvlplQT3qCtQMd/sib6yiy8t9m/Y4hVU7X9nzb9Oeg==} dependencies: - '@vue/shared': 3.3.0-beta.3 - dev: true + '@vue/runtime-core': 3.3.1 + '@vue/shared': 3.3.1 + csstype: 3.1.1 - /@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: - 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): - resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==} + /@vue/server-renderer@3.3.1(vue@3.3.1): + resolution: {integrity: sha512-sod8ggOwbkQXw3lBjfzrbdxRS9lw/lNHoMaXghHawNYowf+4WoaLWD5ouz6fPZadUqNKAsqK95p8DYb1vcVfPA==} peerDependencies: - vue: 3.2.47 + vue: 3.3.1 dependencies: - '@vue/compiler-ssr': 3.2.47 - '@vue/shared': 3.2.47 - vue: 3.2.47 + '@vue/compiler-ssr': 3.3.1 + '@vue/shared': 3.3.1 + vue: 3.3.1 - /@vue/shared@3.2.47: - resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} + /@vue/shared@3.3.1: + resolution: {integrity: sha512-ybDBtQ+479HL/bkeIOIAwgpeAEACzztkvulJLbK3JMFuTOv4qDivmV3AIsR8RHYJ+RD9tQxcHWBsX4GqEcYrfw==} - /@vue/shared@3.3.0-beta.2: - resolution: {integrity: sha512-AsHYKYiYUnL/LHog6iV/G9tctFZYOsaxHDbSnfeyip94rjndO46XSDbHek7wDlcj3NHGaf8jAQQKfva/7mypjA==} - dev: false - - /@vue/shared@3.3.0-beta.3: - resolution: {integrity: sha512-st1SnB/Bkbb9TsieeI4TRX9TqHYIR5wvIma3ZtEben55EYSWa1q5u2BhTNgABSdH+rv3Xwfrvpwh5PmCw6Y53g==} - dev: true - - /@vue/test-utils@2.3.2(vue@3.2.47): + /@vue/test-utils@2.3.2(vue@3.3.1): resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==} peerDependencies: vue: ^3.0.1 dependencies: js-beautify: 1.14.6 - vue: 3.2.47 + vue: 3.3.1 optionalDependencies: - '@vue/compiler-dom': 3.2.47 - '@vue/server-renderer': 3.2.47(vue@3.2.47) + '@vue/compiler-dom': 3.3.1 + '@vue/server-renderer': 3.3.1(vue@3.3.1) dev: true /@webgpu/types@0.1.30: @@ -7522,7 +7437,7 @@ packages: engines: {node: '>=10.19.0'} dependencies: '@arcanis/slice-ansi': 1.1.1 - '@types/semver': 7.3.13 + '@types/semver': 7.5.0 '@types/treeify': 1.0.0 '@yarnpkg/fslib': 2.10.2 '@yarnpkg/json-proxy': 2.1.1 @@ -8298,7 +8213,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -9107,13 +9022,13 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - /chromatic@6.17.3: - resolution: {integrity: sha512-x6WAHLBqub/BYiGXEOsgw9T3m459SmwOvIz0Ra7rCriE2A9AqDKRmVdAEhzVud24ut6ehd54FJpDtArnR5/TbA==} + /chromatic@6.17.4: + resolution: {integrity: sha512-vnlvsv2lkp8BVtTn1OumJzqkDk2qB3pcGxEDIfZtVboKtzIPjnIlGa+c1fVKQe8NvHDU8R39k8klqgKHIXUVJw==} hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 '@types/webpack-env': 1.18.0 - snyk-nodejs-lockfile-parser: 1.48.2 + snyk-nodejs-lockfile-parser: 1.49.0 transitivePeerDependencies: - supports-color dev: false @@ -9438,8 +9353,8 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-versions@5.0.1: - resolution: {integrity: sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==} + /compare-versions@5.0.3: + resolution: {integrity: sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==} dev: false /component-emitter@1.3.0: @@ -9721,9 +9636,6 @@ packages: rrweb-cssom: 0.6.0 dev: false - /csstype@2.6.21: - resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} - /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} @@ -9737,8 +9649,8 @@ packages: uniq: 1.0.1 dev: false - /cypress@12.11.0: - resolution: {integrity: sha512-TJE+CCWI26Hwr5Msb9GpQhFLubdYooW0fmlPwTsfiyxmngqc7+SZGLPeIkj2dTSSZSEtpQVzOzvcnzH0o8G7Vw==} + /cypress@12.12.0: + resolution: {integrity: sha512-UU5wFQ7SMVCR/hyKok/KmzG6fpZgBHHfrXcHzDmPHWrT+UUetxFzQgt7cxCszlwfozckzwkd22dxMwl/vNkWRw==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true requiresBuild: true @@ -10182,7 +10094,7 @@ packages: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - entities: 4.4.0 + entities: 4.5.0 /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -10332,6 +10244,10 @@ packages: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -10573,7 +10489,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.5)(eslint-import-resolver-node@0.3.7)(eslint@8.40.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -10594,15 +10510,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@5.0.4) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.39.0 + eslint: 8.40.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -10612,15 +10528,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@5.0.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.39.0 + eslint: 8.40.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.5)(eslint-import-resolver-node@0.3.7)(eslint@8.40.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -10635,19 +10551,19 @@ packages: - supports-color dev: true - /eslint-plugin-vue@9.11.0(eslint@8.39.0): - resolution: {integrity: sha512-bBCJAZnkBV7ATH4Z1E7CvN3nmtS4H7QUU3UBxPdo8WohRU+yHjnQRALpTbxMVcz0e4Mx3IyxIdP5HYODMxK9cQ==} + /eslint-plugin-vue@9.12.0(eslint@8.40.0): + resolution: {integrity: sha512-xH8PgpDW2WwmFSmRfs/3iWogef1CJzQqX264I65zz77jDuxF2yLy7+GA2diUM8ZNATuSl1+UehMQkb5YEyau5w==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - eslint: 8.39.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) + eslint: 8.40.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.11 semver: 7.5.0 - vue-eslint-parser: 9.1.1(eslint@8.39.0) + vue-eslint-parser: 9.2.1(eslint@8.40.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -10665,14 +10581,6 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - /eslint-scope@7.2.0: resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10681,20 +10589,20 @@ packages: estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.39.0: - resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==} + /eslint@8.40.0: + resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 - '@eslint/js': 8.39.0 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.40.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -10705,8 +10613,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.4.2 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -10735,13 +10643,13 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 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) - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true /esprima@2.7.3: @@ -10783,7 +10691,7 @@ packages: engines: {node: '>=8.3.0'} dependencies: '@babel/traverse': 7.21.3 - '@babel/types': 7.21.4 + '@babel/types': 7.21.5 c8: 7.13.0 transitivePeerDependencies: - supports-color @@ -11260,8 +11168,8 @@ packages: token-types: 5.0.1 dev: false - /file-type@18.3.0: - resolution: {integrity: sha512-pkPZ5OGIq0TYb37b8bHDLNeQSe1H2KlaQ2ySGpJkkr2KZdaWsO4QhPzHA0mQcsUW2cSqJk+4gM/UyLz/UFbXdQ==} + /file-type@18.4.0: + resolution: {integrity: sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w==} engines: {node: '>=14.16'} dependencies: readable-web-to-node-stream: 3.0.2 @@ -12133,11 +12041,11 @@ packages: uglify-js: 3.17.4 dev: true - /happy-dom@9.10.2: - resolution: {integrity: sha512-PZ+UzoU7S8/has8Zw7tr8WGPAAr1QVrAc9o2Llhtuf6aewnR4DDmhPU1Z8KzWwSjXOE+d+b38qNfwHU35PSMIw==} + /happy-dom@9.16.0: + resolution: {integrity: sha512-goq7grRjIiV2Svb251LWQOo/xm04za2mJ9+assbZJx1KnaVOX1gZBBp4MHbiFNkR6JW7UL81iCtZxCVu+qU5ng==} dependencies: css.escape: 1.5.1 - he: 1.2.0 + entities: 4.5.0 iconv-lite: 0.6.3 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 @@ -12262,6 +12170,7 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + dev: true /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} @@ -12326,7 +12235,7 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.0.1 - entities: 4.4.0 + entities: 4.5.0 /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -12460,6 +12369,10 @@ packages: safari-14-idb-fix: 3.0.0 dev: false + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + dev: false + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -13142,7 +13055,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.21.3 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -13217,7 +13130,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -13265,6 +13178,34 @@ packages: - ts-node dev: true + /jest-cli@29.5.0(@types/node@20.1.3): + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 29.5.0(@types/node@20.1.3) + jest-util: 29.5.0 + jest-validate: 29.5.0 + prompts: 2.4.2 + yargs: 17.6.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jest-config@29.5.0(@types/node@18.16.3): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13304,6 +13245,45 @@ packages: - supports-color dev: true + /jest-config@29.5.0(@types/node@20.1.3): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.21.3 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 20.1.3 + 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.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /jest-diff@28.1.3: resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -13349,7 +13329,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -13379,7 +13359,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.16.3 + '@types/node': 20.1.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -13430,7 +13410,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.16.3 + '@types/node': 20.1.3 dev: true /jest-mock@29.5.0: @@ -13438,7 +13418,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 jest-util: 29.5.0 dev: true @@ -13493,7 +13473,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -13524,7 +13504,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -13579,7 +13559,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.11 @@ -13604,7 +13584,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.16.3 + '@types/node': 20.1.3 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -13623,7 +13603,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13649,6 +13629,26 @@ packages: - ts-node dev: true + /jest@29.5.0(@types/node@20.1.3): + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0 + '@jest/types': 29.5.0 + import-local: 3.1.0 + jest-cli: 29.5.0(@types/node@20.1.3) + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -13745,7 +13745,7 @@ packages: '@babel/preset-env': ^7.1.6 dependencies: '@babel/core': 7.21.3 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 '@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) @@ -14382,11 +14382,6 @@ packages: magic-string: 0.30.0 dev: false - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -14951,6 +14946,7 @@ packages: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: false /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} @@ -15149,8 +15145,8 @@ packages: is: 3.3.0 dev: false - /nodemailer@6.9.1: - resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==} + /nodemailer@6.9.2: + resolution: {integrity: sha512-4+TYaa/e1nIxQfyw/WzNPYTEZ5OvHIDEnmjs4LPmIfccPQN+2CYKmGHjWixn/chzD3bmUTu5FMfpltizMxqzdg==} engines: {node: '>=6.0.0'} dev: false @@ -15544,8 +15540,8 @@ packages: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true - /otpauth@9.1.1: - resolution: {integrity: sha512-XhimxmkREwf6GJvV4svS9OVMFJ/qRGz+QBEGwtW5OMf9jZlx9yw25RZMXdrO6r7DHgfIaETJb1lucZXZtn3jgw==} + /otpauth@9.1.2: + resolution: {integrity: sha512-iI5nlVvMFP3aTPdjG/fnC4mhVJ/KZOSnBrvo/VnYHUwlTp9jVLjAe2B3i3pyCH+3/E5jYQRSvuHk/8oas3870g==} dependencies: jssha: 3.3.0 dev: false @@ -16293,6 +16289,7 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: false /postcss@8.4.23: resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} @@ -17447,8 +17444,8 @@ packages: seedrandom: 2.4.2 dev: false - /rollup@3.21.3: - resolution: {integrity: sha512-VnPfEG51nIv2xPLnZaekkuN06q9ZbnyDcLkaBdJa/W7UddyhOfMP2yOPziYQfeY7k++fZM8FdQIummFN5y14kA==} + /rollup@3.21.6: + resolution: {integrity: sha512-SXIICxvxQxR3D4dp/3LDHZIJPC8a4anKMHd4E3Jiz2/JnY+2bEjqrOokAauc5ShGVNFHlEFjBXAXlaxkJqIqSg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -18006,8 +18003,8 @@ packages: - supports-color dev: false - /snyk-nodejs-lockfile-parser@1.48.2: - resolution: {integrity: sha512-CiuKigz4Ed/prR61T2hDDNnvqCr9JA4zTWE9xD4x+emt2zUVRHKF2RBKq2s82RA8jcts1OOXnREr1v1OvNxIpg==} + /snyk-nodejs-lockfile-parser@1.49.0: + resolution: {integrity: sha512-73iqwHB8YSWex/PTx+TRUwtNPyKn5wP4n/kxEPbX9EfN3uSIcw6mSKiLm8gSKl5gtf8hcP0R0f1tBFjjdzQvRQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -18022,6 +18019,7 @@ packages: lodash.isempty: 4.4.0 lodash.topairs: 4.3.0 micromatch: 4.0.5 + p-map: 4.0.0 semver: 7.5.0 snyk-config: 5.1.0 tslib: 1.14.1 @@ -18117,9 +18115,6 @@ packages: engines: {node: '>= 8'} dev: false - /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 @@ -18253,11 +18248,11 @@ packages: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook@7.0.7: - resolution: {integrity: sha512-MaFAhpPm/KsaoIQfGzapnRyXNh1VbS8l38BNZR5ZD97ejGkLukJ7TO4fFS87Hyy6whAXo6tTdtqeCByMQ9gRFA==} + /storybook@7.0.10: + resolution: {integrity: sha512-L36+Um+Ra8AKTvv84ODFJfuthmWnR1Lc6pjslcb8LYO+PVlqEOeqSknmTcKntDYwgvKx5lg62urtJxzGdwO0yw==} hasBin: true dependencies: - '@storybook/cli': 7.0.7 + '@storybook/cli': 7.0.10 transitivePeerDependencies: - bufferutil - encoding @@ -18780,8 +18775,8 @@ packages: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} dev: false - /tinypool@0.4.0: - resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==} + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} engines: {node: '>=14.0.0'} dev: true @@ -19087,8 +19082,8 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typeorm@0.3.15(ioredis@5.3.2)(pg@8.10.0): - resolution: {integrity: sha512-R4JSw8QjDP1W+ypeRz/XrCXIqubrLSnNAzJAp9EQSQIPHTv+YmUHZis8g08lOwFpuhqL9m8jkPSz8GWEKlU/ow==} + /typeorm@0.3.16(ioredis@5.3.2)(pg@8.10.0): + resolution: {integrity: sha512-wJ4Qy1oqRKNDdZiBTTaVMqwo/XxC52Q7uNPTjltPgLhvIW173bL6Iad0lhptMOsFlpixFPaUu3PNziaRBwX2Zw==} engines: {node: '>= 12.9.0'} hasBin: true peerDependencies: @@ -19150,6 +19145,7 @@ packages: buffer: 6.0.3 chalk: 4.1.2 cli-highlight: 2.1.11 + date-fns: 2.30.0 debug: 4.3.4(supports-color@8.1.1) dotenv: 16.0.3 glob: 8.1.0 @@ -19602,8 +19598,8 @@ packages: replace-ext: 1.0.1 dev: false - /vite-node@0.30.1(@types/node@18.16.3)(sass@1.62.1): - resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==} + /vite-node@0.31.0(@types/node@20.1.3)(sass@1.62.1): + resolution: {integrity: sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -19612,7 +19608,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) transitivePeerDependencies: - '@types/node' - less @@ -19627,8 +19623,8 @@ packages: resolution: {integrity: sha512-irjKcKXRn7v5bPAg4mAbsS6DgibpP1VUFL9tlgxU6lloK6V9yw9qCZkS+s2PtbkZpWNzr3TN3zVJAc6J7gJZmA==} dev: true - /vite@4.3.4(@types/node@18.16.3)(sass@1.62.1): - resolution: {integrity: sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==} + /vite@4.3.5(@types/node@20.1.3)(sass@1.62.1): + resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -19652,28 +19648,28 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.3 + '@types/node': 20.1.3 esbuild: 0.17.18 postcss: 8.4.23 - rollup: 3.21.3 + rollup: 3.21.6 sass: 1.62.1 optionalDependencies: fsevents: 2.3.2 - /vitest-fetch-mock@0.2.2(vitest@0.30.1): + /vitest-fetch-mock@0.2.2(vitest@0.31.0): resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} engines: {node: '>=14.14.0'} peerDependencies: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 0.30.1(happy-dom@9.10.2)(sass@1.62.1) + vitest: 0.31.0(happy-dom@9.16.0)(sass@1.62.1) transitivePeerDependencies: - encoding dev: true - /vitest@0.30.1(happy-dom@9.10.2)(sass@1.62.1): - resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} + /vitest@0.31.0(happy-dom@9.16.0)(sass@1.62.1): + resolution: {integrity: sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -19705,30 +19701,29 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.16.3 - '@vitest/expect': 0.30.1 - '@vitest/runner': 0.30.1 - '@vitest/snapshot': 0.30.1 - '@vitest/spy': 0.30.1 - '@vitest/utils': 0.30.1 + '@types/node': 20.1.3 + '@vitest/expect': 0.31.0 + '@vitest/runner': 0.31.0 + '@vitest/snapshot': 0.31.0 + '@vitest/spy': 0.31.0 + '@vitest/utils': 0.31.0 acorn: 8.8.2 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 concordance: 5.0.4 debug: 4.3.4(supports-color@8.1.1) - happy-dom: 9.10.2 + happy-dom: 9.16.0 local-pkg: 0.4.3 magic-string: 0.30.0 pathe: 1.1.0 picocolors: 1.0.0 - source-map: 0.6.1 std-env: 3.3.2 strip-literal: 1.0.1 tinybench: 2.4.0 - tinypool: 0.4.0 - vite: 4.3.4(@types/node@18.16.3)(sass@1.62.1) - vite-node: 0.30.1(@types/node@18.16.3)(sass@1.62.1) + tinypool: 0.5.0 + vite: 4.3.5(@types/node@20.1.3)(sass@1.62.1) + vite-node: 0.31.0(@types/node@20.1.3)(sass@1.62.1) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19743,35 +19738,35 @@ packages: 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.3.1): resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==} dependencies: - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.8 '@babel/types': 7.21.4 - '@vue/compiler-dom': 3.2.47 - '@vue/compiler-sfc': 3.2.47 + '@vue/compiler-dom': 3.3.1 + '@vue/compiler-sfc': 3.3.1 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) + vue-inbrowser-compiler-independent-utils: 4.64.1(vue@3.3.1) transitivePeerDependencies: - vue dev: true - /vue-eslint-parser@9.1.1(eslint@8.39.0): - resolution: {integrity: sha512-C2aI/r85Q6tYcz4dpgvrs4wH/MqVrRAVIdpYedrxnATDHHkb+TroeRcDpKWGZCx/OcECMWfz7tVwQ8e+Opy6rA==} + /vue-eslint-parser@9.2.1(eslint@8.40.0): + resolution: {integrity: sha512-tPOex4n6jit4E7h68auOEbDMwE58XiP4dylfaVTCOVCouR45g+QFDBjgIdEU52EXJxKyjgh91dLfN2rxUcV0bQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint: 8.40.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.4.2 lodash: 4.17.21 semver: 7.5.0 @@ -19779,12 +19774,12 @@ 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.3.1): resolution: {integrity: sha512-Hn32n07XZ8j9W8+fmOXPQL+i+W2e/8i6mkH4Ju3H6nR0+cfvmWM95GhczYi5B27+Y8JlCKgAo04IUiYce4mKAw==} peerDependencies: vue: '>=2' dependencies: - vue: 3.2.47 + vue: 3.3.1 dev: true /vue-plyr@7.0.0: @@ -19794,13 +19789,13 @@ packages: 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.3.1): resolution: {integrity: sha512-Gu42ba9nosrE+gJpnAEuEkDMqG9zSUysIR8SdXUw8MQKDjBnnNR9lHC18uOr/ICz7yrA/5c7jHJr9lpElODC7w==} engines: {node: '>=10'} peerDependencies: vue: ^3.0.0 dependencies: - vue: 3.2.47 + vue: 3.3.1 dev: false /vue-template-compiler@2.7.14: @@ -19810,14 +19805,14 @@ packages: he: 1.2.0 dev: true - /vue-tsc@1.6.3(typescript@5.0.4): - resolution: {integrity: sha512-q7l27j0eSJgyGat0khetrvoeaAHieRZFnf8WAJyKvB3eF0AxmLqfs4ahwZhaojBJjZ/lAXZa+Xt8EX54KzQ34w==} + /vue-tsc@1.6.4(typescript@5.0.4): + resolution: {integrity: sha512-8rg8S1AhRJ6/WriENQEhyqH5wsxSxuD5iaD+QnkZn2ArZ6evlhqfBAIcVN8mfSyCV9DeLkQXkOSv/MaeJiJPAQ==} hasBin: true peerDependencies: typescript: '*' dependencies: - '@volar/vue-language-core': 1.6.3 - '@volar/vue-typescript': 1.6.3(typescript@5.0.4) + '@volar/vue-language-core': 1.6.4 + '@volar/vue-typescript': 1.6.4(typescript@5.0.4) semver: 7.5.0 typescript: 5.0.4 dev: true @@ -19829,22 +19824,22 @@ packages: csstype: 3.1.1 dev: false - /vue@3.2.47: - resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==} + /vue@3.3.1: + resolution: {integrity: sha512-3Rwy4I5idbPVSDZu6I+fFh6tdDSZbauImCTqLxE7y0LpHtiDvPeY01OI7RkFPbva1nk4hoO0sv/NzosH2h60sg==} 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/shared': 3.2.47 + '@vue/compiler-dom': 3.3.1 + '@vue/compiler-sfc': 3.3.1 + '@vue/runtime-dom': 3.3.1 + '@vue/server-renderer': 3.3.1(vue@3.3.1) + '@vue/shared': 3.3.1 - /vuedraggable@4.1.0(vue@3.2.47): + /vuedraggable@4.1.0(vue@3.3.1): resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} peerDependencies: vue: ^3.0.1 dependencies: sortablejs: 1.14.0 - vue: 3.2.47 + vue: 3.3.1 dev: false /w3c-xmlserializer@4.0.0: @@ -20367,7 +20362,7 @@ packages: sharp: 0.31.3 dev: false - github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.7)(@storybook/components@7.0.7)(@storybook/core-events@7.0.7)(@storybook/manager-api@7.0.7)(@storybook/preview-api@7.0.7)(@storybook/theming@7.0.7)(@storybook/types@7.0.7)(react-dom@18.2.0)(react@18.2.0): + github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.10)(@storybook/components@7.0.10)(@storybook/core-events@7.0.10)(@storybook/manager-api@7.0.10)(@storybook/preview-api@7.0.10)(@storybook/theming@7.0.10)(@storybook/types@7.0.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 @@ -20388,19 +20383,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/components': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.0.7 - '@storybook/manager-api': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.0.7 - '@storybook/theming': 7.0.7(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.7 + '@storybook/blocks': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.10 + '@storybook/manager-api': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.10 + '@storybook/theming': 7.0.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - github.com/misskey-dev/summaly/2d63e2a0066f89871e777cc81d43c1ade8c97517: - resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/2d63e2a0066f89871e777cc81d43c1ade8c97517} + github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503: + resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/77dd5654bb82280b38c1f50e51a771c33f3df503} name: summaly version: 4.0.2 dependencies: