summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-29 18:11:30 +0900
committerGitHub <noreply@github.com>2023-09-29 18:11:30 +0900
commit7adc8fcaf5e7a57edfd2c197fcccb510425bd82c (patch)
treee60179e48010b0a389f87687e934f71ead92b27f
parentMerge pull request #11898 from misskey-dev/develop (diff)
parentfix (diff)
downloadmisskey-7adc8fcaf5e7a57edfd2c197fcccb510425bd82c.tar.gz
misskey-7adc8fcaf5e7a57edfd2c197fcccb510425bd82c.tar.bz2
misskey-7adc8fcaf5e7a57edfd2c197fcccb510425bd82c.zip
Merge pull request #11920 from misskey-dev/develop
Release: 2023.9.2
-rw-r--r--.config/example.yml25
-rw-r--r--CHANGELOG.md22
-rw-r--r--locales/cs-CZ.yml1
-rw-r--r--locales/de-DE.yml8
-rw-r--r--locales/en-US.yml8
-rw-r--r--locales/es-ES.yml47
-rw-r--r--locales/id-ID.yml2
-rw-r--r--locales/index.d.ts10
-rw-r--r--locales/it-IT.yml12
-rw-r--r--locales/ja-JP.yml10
-rw-r--r--locales/ja-KS.yml19
-rw-r--r--locales/ko-KR.yml1
-rw-r--r--locales/th-TH.yml36
-rw-r--r--locales/zh-CN.yml8
-rw-r--r--locales/zh-TW.yml32
-rw-r--r--package.json12
-rw-r--r--packages/backend/migration/1695901659683-note-updated-at.js11
-rw-r--r--packages/backend/migration/1695944637565-notificationRecieveConfig.js18
-rw-r--r--packages/backend/package.json44
-rw-r--r--packages/backend/src/boot/master.ts1
-rw-r--r--packages/backend/src/config.ts3
-rw-r--r--packages/backend/src/core/AntennaService.ts4
-rw-r--r--packages/backend/src/core/CacheService.ts4
-rw-r--r--packages/backend/src/core/CustomEmojiService.ts2
-rw-r--r--packages/backend/src/core/GlobalEventService.ts271
-rw-r--r--packages/backend/src/core/MetaService.ts4
-rw-r--r--packages/backend/src/core/NoteCreateService.ts6
-rw-r--r--packages/backend/src/core/NotificationService.ts47
-rw-r--r--packages/backend/src/core/ReactionService.ts3
-rw-r--r--packages/backend/src/core/RoleService.ts7
-rw-r--r--packages/backend/src/core/UserFollowingService.ts9
-rw-r--r--packages/backend/src/core/UserListService.ts78
-rw-r--r--packages/backend/src/core/WebhookService.ts4
-rw-r--r--packages/backend/src/core/entities/NoteEntityService.ts1
-rw-r--r--packages/backend/src/core/entities/UserEntityService.ts2
-rw-r--r--packages/backend/src/models/Note.ts5
-rw-r--r--packages/backend/src/models/UserProfile.ts28
-rw-r--r--packages/backend/src/models/json-schema/note.ts7
-rw-r--r--packages/backend/src/models/json-schema/user.ts10
-rw-r--r--packages/backend/src/queue/processors/ImportUserListsProcessorService.ts2
-rw-r--r--packages/backend/src/server/api/EndpointsModule.ts4
-rw-r--r--packages/backend/src/server/api/endpoints.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/create.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/delete.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/list.ts4
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/update.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/admin/invite/create.ts7
-rw-r--r--packages/backend/src/server/api/endpoints/admin/show-user.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/i/update.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/notes/create.test.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/notes/create.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/notes/global-timeline.ts12
-rw-r--r--packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/notes/local-timeline.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/notes/timeline.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/notes/update.ts89
-rw-r--r--packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/users/lists/pull.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/users/lists/push.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/users/notes.ts15
-rw-r--r--packages/backend/src/server/api/stream/Connection.ts6
-rw-r--r--packages/backend/src/server/api/stream/channels/antenna.ts4
-rw-r--r--packages/backend/src/server/api/stream/channels/global-timeline.ts6
-rw-r--r--packages/backend/src/server/api/stream/channels/home-timeline.ts6
-rw-r--r--packages/backend/src/server/api/stream/channels/hybrid-timeline.ts6
-rw-r--r--packages/backend/src/server/api/stream/channels/local-timeline.ts6
-rw-r--r--packages/backend/src/server/api/stream/channels/role-timeline.ts4
-rw-r--r--packages/backend/src/server/api/stream/types.ts255
-rw-r--r--packages/backend/src/server/web/ClientServerService.ts6
-rw-r--r--packages/backend/src/server/web/views/base.pug2
-rw-r--r--packages/backend/src/types.ts31
-rw-r--r--packages/backend/test/e2e/users.ts8
-rw-r--r--packages/frontend/.storybook/preview-head.html2
-rw-r--r--packages/frontend/package.json66
-rw-r--r--packages/frontend/src/components/MkNoteDetailed.vue3
-rw-r--r--packages/frontend/src/components/MkNoteHeader.vue1
-rw-r--r--packages/frontend/src/components/MkNotificationSelectWindow.vue78
-rw-r--r--packages/frontend/src/components/MkNotificationSettingWindow.vue95
-rw-r--r--packages/frontend/src/components/MkNotifications.vue9
-rw-r--r--packages/frontend/src/components/MkPostForm.vue10
-rw-r--r--packages/frontend/src/components/MkPostFormDialog.vue1
-rw-r--r--packages/frontend/src/components/MkTimeline.vue49
-rw-r--r--packages/frontend/src/components/MkVisitorDashboard.vue3
-rw-r--r--packages/frontend/src/components/global/MkPageHeader.vue2
-rw-r--r--packages/frontend/src/const.ts1
-rw-r--r--packages/frontend/src/os.ts4
-rw-r--r--packages/frontend/src/pages/admin/ads.vue32
-rw-r--r--packages/frontend/src/pages/admin/modlog.ModLog.vue27
-rw-r--r--packages/frontend/src/pages/admin/roles.editor.vue20
-rw-r--r--packages/frontend/src/pages/admin/roles.vue8
-rw-r--r--packages/frontend/src/pages/notifications.vue5
-rw-r--r--packages/frontend/src/pages/settings/general.vue2
-rw-r--r--packages/frontend/src/pages/settings/notifications.notification-config.vue50
-rw-r--r--packages/frontend/src/pages/settings/notifications.vue48
-rw-r--r--packages/frontend/src/pages/timeline.vue35
-rw-r--r--packages/frontend/src/pages/user/index.timeline.vue9
-rw-r--r--packages/frontend/src/scripts/aiscript/api.ts10
-rw-r--r--packages/frontend/src/scripts/api.ts46
-rw-r--r--packages/frontend/src/scripts/get-note-menu.ts9
-rw-r--r--packages/frontend/src/scripts/use-note-capture.ts7
-rw-r--r--packages/frontend/src/store.ts4
-rw-r--r--packages/frontend/src/ui/_common_/common.vue4
-rw-r--r--packages/frontend/src/ui/deck/deck-store.ts5
-rw-r--r--packages/frontend/src/ui/deck/notifications-column.vue10
-rw-r--r--packages/frontend/src/ui/deck/tl-column.vue47
-rw-r--r--packages/frontend/src/widgets/WidgetActivity.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetAichan.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetAiscript.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetAiscriptApp.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetButton.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetCalendar.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetClicker.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetClock.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetDigitalClock.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetFederation.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetInstanceCloud.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetInstanceInfo.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetJobQueue.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetMemo.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetNotifications.vue16
-rw-r--r--packages/frontend/src/widgets/WidgetOnlineUsers.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetPhotos.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetPostForm.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetProfile.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetRss.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetRssTicker.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetSlideshow.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetTimeline.vue6
-rw-r--r--packages/frontend/src/widgets/WidgetTrends.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetUnixClock.vue2
-rw-r--r--packages/frontend/src/widgets/WidgetUserList.vue2
-rw-r--r--packages/misskey-js/etc/misskey-js.api.md37
-rw-r--r--packages/misskey-js/package.json10
-rw-r--r--packages/misskey-js/src/api.types.ts2
-rw-r--r--packages/misskey-js/src/consts.ts20
-rw-r--r--packages/misskey-js/src/entities.ts32
-rw-r--r--packages/misskey-js/src/streaming.types.ts7
-rw-r--r--packages/sw/package.json4
-rw-r--r--packages/sw/src/scripts/create-notification.ts2
-rw-r--r--packages/sw/src/scripts/operations.ts2
-rw-r--r--packages/sw/src/sw.ts2
-rw-r--r--pnpm-lock.yaml1770
143 files changed, 2532 insertions, 1543 deletions
diff --git a/.config/example.yml b/.config/example.yml
index 086a6ca8fc..03864a3299 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -30,7 +30,7 @@ url: https://example.tld/
# The port that your Misskey server should listen on.
port: 3000
-# You can also use UNIX domain socket.
+# You can also use UNIX domain socket.
# socket: /path/to/misskey.sock
# chmodSocket: '777'
@@ -60,17 +60,17 @@ dbReplications: false
# You can configure any number of replicas here
#dbSlaves:
# -
-# host:
-# port:
-# db:
-# user:
-# pass:
+# host:
+# port:
+# db:
+# user:
+# pass:
# -
-# host:
-# port:
-# db:
-# user:
-# pass:
+# host:
+# port:
+# db:
+# user:
+# pass:
# ┌─────────────────────â”
#───┘ Redis configuration └─────────────────────────────────────
@@ -206,3 +206,6 @@ signToActivityPubGet: true
# Upload or download file size limits (bytes)
#maxFileSize: 262144000
+
+# PID File of master process
+#pidFile: /tmp/misskey.pid
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 26013c14df..698b4acead 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,28 @@
-->
+## 2023.9.2
+
+### General
+- Feat: ノートã®ç·¨é›†ã‚’ã§ãるよã†ã«
+ - ロールã§ç·¨é›†å¯å¦ã‚’設定å¯èƒ½
+- Feat: 通知を種類ã”ã¨ã« 全員ã‹ã‚‰å—ã‘å–ã‚‹/フォロー中ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿å—ã‘å–ã‚‹/フォロワーã®ã¿å—ã‘å–ã‚‹/相互ã®ã¿å—ã‘å–ã‚‹/指定ã—ãŸãƒªã‚¹ãƒˆã®ãƒ¡ãƒ³ãƒãƒ¼ã®ã¿å—ã‘å–ã‚‹/å—ã‘å–らãªã„ ã‹ã‚‰é¸ã¹ã‚‹ã‚ˆã†ã«
+- Enhance: タイムラインã‹ã‚‰Renoteを除外ã™ã‚‹ã‚ªãƒ—ションを追加
+- Enhance: ユーザーページã®ãƒŽãƒ¼ãƒˆä¸€è¦§ã§Renoteを除外ã§ãるよã†ã«
+- Enhance: タイムラインã§ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ·»ä»˜ã•れãŸãƒŽãƒ¼ãƒˆã®ã¿è¡¨ç¤ºã™ã‚‹ã‚ªãƒ—ションを追加
+- Enhance: モデレーションログ機能ã®å¼·åŒ–
+- Enhance: ä¾å­˜é–¢ä¿‚ã®æ›´æ–°
+- Enhance: ãƒ­ãƒ¼ã‚«ãƒªã‚¼ãƒ¼ã‚·ãƒ§ãƒ³ã®æ›´æ–°
+
+### Client
+- Enhance: Plugin:register_post_form_actionを用ã„ã¦CWã‚’å–得・変更ã§ãるよã†ã«
+- Enhance: admin/ad/listã«ã¦æŽ²è¼‰ä¸­ã®åºƒå‘ŠãŒçµžã‚Šè¾¼ã‚るよã†ã«
+- Enhance: AiScriptã«ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒãƒ¼ã®APIã‚’å©ã用ã®é–¢æ•°ã‚’追加(`Mk:apiExternal`)
+
+### Server
+- Enhance: Masterプロセスã®PIDを書ã出ã›ã‚‹ã‚ˆã†ã«
+- Enhance: admin/ad/createã«ã¦ãƒ¬ã‚¹ãƒãƒ³ã‚¹200ã€è¨­å®šã—ãŸåºƒå‘Šæƒ…報を返ã™ã‚ˆã†ã«
+
## 2023.9.1
### General
diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml
index 751cc064ad..762f033b13 100644
--- a/locales/cs-CZ.yml
+++ b/locales/cs-CZ.yml
@@ -2039,3 +2039,4 @@ _webhookSettings:
_moderationLogTypes:
suspend: "Zmrazit"
resetPassword: "Resetovat heslo"
+ createInvitation: "Vygenerovat pozvánku"
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index aae5f45046..e71126fbcb 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -1120,6 +1120,9 @@ notifyNotes: "Über neue Notizen benachrichtigen"
unnotifyNotes: "Nicht über neue Notizen benachrichtigen"
authentication: "Authentifikation"
authenticationRequiredToContinue: "Bitte authentifiziere dich, um fortzufahren"
+dateAndTime: "Zeit"
+showRenotes: "Renotes anzeigen"
+edited: "Bearbeitet"
_announcement:
forExistingUsers: "Nur für existierende Nutzer"
forExistingUsersDescription: "Ist diese Option aktiviert, wird diese Ankündigung nur Nutzern angezeigt, die zum Zeitpunkt der Ankündigung bereits registriert sind. Ist sie deaktiviert, wird sie auch Nutzern, die sich nach dessen Veröffentlichung registrieren, angezeigt."
@@ -1450,6 +1453,7 @@ _role:
gtlAvailable: "Kann auf die globale Chronik zugreifen"
ltlAvailable: "Kann auf die lokale Chronik zugreifen"
canPublicNote: "Kann öffentliche Notizen erstellen"
+ canEditNote: "Notizbearbeitung"
canInvite: "Erstellung von Einladungscodes für diese Instanz"
inviteLimit: "Maximalanzahl an Einladungen"
inviteLimitCycle: "Zyklus des Einladungslimits"
@@ -2101,6 +2105,8 @@ _webhookSettings:
reaction: "Wenn du eine Reaktion erhältst"
mention: "Wenn du erwähnt wirst"
_moderationLogTypes:
+ createRole: "Rolle erstellt"
+ deleteRole: "Rolle gelöscht"
updateRole: "Rolle aktualisiert"
assignRole: "Zu Rolle zugewiesen"
unassignRole: "Aus Rolle entfernt"
@@ -2124,3 +2130,5 @@ _moderationLogTypes:
unsuspendRemoteInstance: "Fremde Instanz entsperrt"
markSensitiveDriveFile: "Datei als sensitiv markiert"
unmarkSensitiveDriveFile: "Datei als nicht sensitiv markiert"
+ resolveAbuseReport: "Meldung bearbeitet"
+ createInvitation: "Einladung erstellt"
diff --git a/locales/en-US.yml b/locales/en-US.yml
index 920995a954..1dcd475538 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -1120,6 +1120,9 @@ notifyNotes: "Notify about new notes"
unnotifyNotes: "Stop notifying about new notes"
authentication: "Authentication"
authenticationRequiredToContinue: "Please authenticate to continue"
+dateAndTime: "Timestamp"
+showRenotes: "Show renotes"
+edited: "Edited"
_announcement:
forExistingUsers: "Existing users only"
forExistingUsersDescription: "This announcement will only be shown to users existing at the point of publishment if enabled. If disabled, those newly signing up after it has been posted will also see it."
@@ -1450,6 +1453,7 @@ _role:
gtlAvailable: "Can view the global timeline"
ltlAvailable: "Can view the local timeline"
canPublicNote: "Can send public notes"
+ canEditNote: "Note editing"
canInvite: "Can create instance invite codes"
inviteLimit: "Invite limit"
inviteLimitCycle: "Invite limit cooldown"
@@ -2101,6 +2105,8 @@ _webhookSettings:
reaction: "When receiving a reaction"
mention: "When being mentioned"
_moderationLogTypes:
+ createRole: "Role created"
+ deleteRole: "Role deleted"
updateRole: "Role updated"
assignRole: "Assigned to role"
unassignRole: "Removed from role"
@@ -2124,3 +2130,5 @@ _moderationLogTypes:
unsuspendRemoteInstance: "Remote instance unsuspended"
markSensitiveDriveFile: "File marked as sensitive"
unmarkSensitiveDriveFile: "File unmarked as sensitive"
+ resolveAbuseReport: "Report resolved"
+ createInvitation: "Invite generated"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index 1f84a0afb4..d663bd829c 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -418,6 +418,7 @@ moderator: "Moderador"
moderation: "Moderación"
moderationNote: "Nota de moderación"
addModerationNote: "Añadir nota de moderación"
+moderationLogs: "Log de moderación"
nUsersMentioned: "{n} usuarios mencionados"
securityKeyAndPasskey: "Clave de seguridad / clave de paso"
securityKey: "Clave de seguridad"
@@ -710,6 +711,7 @@ lockedAccountInfo: "A menos que configures la visibilidad de tus notas como \"SÃ
alwaysMarkSensitive: "Marcar los medios de comunicación como contenido sensible por defecto"
loadRawImages: "Cargar las imágenes originales en lugar de mostrar las miniaturas"
disableShowingAnimatedImages: "No reproducir imágenes animadas"
+highlightSensitiveMedia: "Resaltar medios marcados como sensibles"
verificationEmailSent: "Se le ha enviado un correo electrónico de confirmación. Por favor, acceda al enlace proporcionado en el correo electrónico para completar la configuración."
notSet: "Sin especificar"
emailVerified: "Su dirección de correo electrónico ha sido verificada."
@@ -1109,6 +1111,16 @@ youHaveUnreadAnnouncements: "Hay anuncios sin leer"
useSecurityKey: "Por favor, sigue las instrucciones de tu dispositivo o navegador para usar tu clave de seguridad o tu clave de paso."
replies: "Responder"
renotes: "Renotar"
+loadReplies: "Ver respuestas"
+loadConversation: "Ver conversación"
+pinnedList: "Lista fijada"
+keepScreenOn: "Mantener pantalla encendida"
+verifiedLink: "Propiedad del enlace verificada"
+notifyNotes: "Notificar nuevas notas"
+unnotifyNotes: "Dejar de notificar nuevas notas"
+authentication: "Autenticación"
+authenticationRequiredToContinue: "Por favor, autentifícate para continuar"
+dateAndTime: "Fecha y hora"
_announcement:
forExistingUsers: "Solo para usuarios registrados"
forExistingUsersDescription: "Este anuncio solo se mostrará a aquellos usuarios registrados en el momento de su publicación. Si se deshabilita esta opción, aquellos usuarios que se registren tras su publicación también lo verán."
@@ -1137,7 +1149,13 @@ _serverRules:
description: "Un conjunto de reglas que serán mostradas antes del registro. Configurar un sumario de términos de servicio es recomendado."
_serverSettings:
iconUrl: "URL del ícono"
+ appIconDescription: "Indica el icono que se va a usar cuando {host} se muestre como una app."
+ appIconUsageExample: "Por ejemplo, como PWA o cuando se muestre como un marcador en la pantalla inicial del dispositivo"
+ appIconStyleRecommendation: "Como el icono puede ser recortado como un cuadrado o un círculo, se recomienda un icono con un margen coloreado alrededor del contenido."
+ appIconResolutionMustBe: "La resolución mínima es {resolution}."
manifestJsonOverride: "Sobreescribir manifest.json"
+ shortName: "Nombre corto"
+ shortNameDescription: "Forma corta del nombre de la instancia que puede mostrarse si el nombre completo es demasiado largo."
_accountMigration:
moveFrom: "Trasladar de otra cuenta a ésta"
moveFromSub: "Crear un alias para otra cuenta."
@@ -1784,6 +1802,7 @@ _antennaSources:
homeTimeline: "Notas de los usuarios que sigues"
users: "Notas de un usuario o varios"
userList: "Notas de los usuarios de una lista"
+ userBlacklist: "Todas las notas excepto aquellas de uno o más usuarios especificados"
_weekday:
sunday: "Domingo"
monday: "Lunes"
@@ -1883,6 +1902,7 @@ _profile:
metadataContent: "Contenido"
changeAvatar: "Cambiar avatar"
changeBanner: "Cambiar banner"
+ verifiedLinkDescription: "Introduciendo una URL que contiene un enlace a tu perfil, se puede mostrar un icono de verificación de propiedad al lado del campo."
_exportOrImport:
allNotes: "Todas las notas"
favoritedNotes: "Notas favoritas"
@@ -2001,6 +2021,7 @@ _notification:
youReceivedFollowRequest: "Has mandado una solicitud de seguimiento"
yourFollowRequestAccepted: "Tu solicitud de seguimiento fue aceptada"
pollEnded: "Estan disponibles los resultados de la encuesta"
+ newNote: "Nueva nota"
unreadAntennaNote: "Antena {name}"
emptyPushNotificationMessage: "Se han actualizado las notificaciones push"
achievementEarned: "Logro desbloqueado"
@@ -2010,6 +2031,7 @@ _notification:
notificationWillBeDisplayedLikeThis: "Las notificaciones tendrán este aspecto"
_types:
all: "Todo"
+ note: "Nuevas notas"
follow: "Siguiendo"
mention: "Menciones"
reply: "Respuestas"
@@ -2080,5 +2102,30 @@ _webhookSettings:
reaction: "Cuando se recibe una reacción"
mention: "Cuando hay una mención"
_moderationLogTypes:
+ createRole: "Rol creado"
+ deleteRole: "Rol eliminado"
+ updateRole: "Rol actualizado"
+ assignRole: "Rol asignado"
+ unassignRole: "Rol retirado"
suspend: "Suspender"
+ unsuspend: "Suspensión retirada"
+ addCustomEmoji: "Añadido emoji personalizado"
+ updateCustomEmoji: "Emoji personalizado actualizado"
+ deleteCustomEmoji: "Emoji personalizado eliminado"
+ updateServerSettings: "Ajustes de servidor actualizados"
+ updateUserNote: "Nota de moderación actualizada"
+ deleteDriveFile: "Archivo eliminado"
+ deleteNote: "Nota eliminada"
+ createGlobalAnnouncement: "Anuncio global creado"
+ createUserAnnouncement: "Anuncio de usuario creado"
+ updateGlobalAnnouncement: "Anuncio global actualizado"
+ updateUserAnnouncement: "Anuncio de usuario actualizado"
+ deleteGlobalAnnouncement: "Anuncio global eliminado"
+ deleteUserAnnouncement: "Anuncio de usuario eliminado"
resetPassword: "Resetear contraseña"
+ suspendRemoteInstance: "Instancia remota suspendida"
+ unsuspendRemoteInstance: "Suspensión de instancia remota retirada"
+ markSensitiveDriveFile: "Archivo marcado como sensible"
+ unmarkSensitiveDriveFile: "Archivo marcado como no sensible"
+ resolveAbuseReport: "Reporte resuelto"
+ createInvitation: "Generar invitación"
diff --git a/locales/id-ID.yml b/locales/id-ID.yml
index 56e7f9e4db..0e067c5383 100644
--- a/locales/id-ID.yml
+++ b/locales/id-ID.yml
@@ -1100,6 +1100,7 @@ currentAnnouncements: "Pengumuman Saat Ini"
pastAnnouncements: "Pengumuman Terdahulu"
replies: "Balas"
renotes: "Renote"
+dateAndTime: "Tanggal dan Waktu"
_initialAccountSetting:
accountCreated: "Akun kamu telah sukses dibuat!"
letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu."
@@ -2044,3 +2045,4 @@ _webhookSettings:
_moderationLogTypes:
suspend: "Tangguhkan"
resetPassword: "Atur ulang kata sandi"
+ createInvitation: "Buat kode undangan"
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 4d8123eb5d..15736f6994 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -1124,6 +1124,11 @@ export interface Locale {
"authentication": string;
"authenticationRequiredToContinue": string;
"dateAndTime": string;
+ "showRenotes": string;
+ "edited": string;
+ "notificationRecieveConfig": string;
+ "mutualFollow": string;
+ "fileAttachedOnly": string;
"_announcement": {
"forExistingUsers": string;
"forExistingUsersDescription": string;
@@ -1537,6 +1542,7 @@ export interface Locale {
"gtlAvailable": string;
"ltlAvailable": string;
"canPublicNote": string;
+ "canEditNote": string;
"canInvite": string;
"inviteLimit": string;
"inviteLimitCycle": string;
@@ -2277,6 +2283,10 @@ export interface Locale {
"markSensitiveDriveFile": string;
"unmarkSensitiveDriveFile": string;
"resolveAbuseReport": string;
+ "createInvitation": string;
+ "createAd": string;
+ "deleteAd": string;
+ "updateAd": string;
};
}
declare const locales: {
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index e99a41b75c..83b63e15d2 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -130,8 +130,8 @@ unmarkAsSensitive: "Non segnare come esplicito "
enterFileName: "Nome del file"
mute: "Silenzia"
unmute: "Riattiva l'audio"
-renoteMute: "Silenzia i Rinota"
-renoteUnmute: "Non silenziare i Rinota"
+renoteMute: "Silenzia le Rinota"
+renoteUnmute: "Non silenziare le Rinota"
block: "Blocca"
unblock: "Sblocca"
suspend: "Sospensione"
@@ -991,7 +991,7 @@ thisPostMayBeAnnoying: "Questa nota potrebbe essere offensiva"
thisPostMayBeAnnoyingHome: "Pubblica sulla timeline principale"
thisPostMayBeAnnoyingCancel: "Annulla"
thisPostMayBeAnnoyingIgnore: "Pubblica lo stesso"
-collapseRenotes: "Comprimi i Rinota già letti"
+collapseRenotes: "Comprimi le Rinota già viste"
internalServerError: "Errore interno del server"
internalServerErrorDescription: "Si è verificato un errore imprevisto all'interno del server"
copyErrorInfo: "Copia le informazioni sull'errore"
@@ -1120,6 +1120,8 @@ notifyNotes: "Notifica nuove Note"
unnotifyNotes: "Interrompi le notifiche di nuove Note"
authentication: "Autenticazione"
authenticationRequiredToContinue: "Per procedere, è richiesta l'autenticazione"
+dateAndTime: "Data e Ora"
+showRenotes: "Leggi le Rinota"
_announcement:
forExistingUsers: "Solo ai profili attuali"
forExistingUsersDescription: "L'annuncio sarà visibile solo ai profili esistenti in questo momento. Se disabilitato, sarà visibile anche ai profili che verranno creati dopo la pubblicazione di questo annuncio."
@@ -2101,6 +2103,8 @@ _webhookSettings:
reaction: "Quando ricevo una reazione"
mention: "Quando mi menzionano"
_moderationLogTypes:
+ createRole: "Ruolo creato"
+ deleteRole: "Ruolo eliminato"
updateRole: "Ruolo aggiornato"
assignRole: "Ruolo assegnato"
unassignRole: "Ruolo disassegnato"
@@ -2124,3 +2128,5 @@ _moderationLogTypes:
unsuspendRemoteInstance: "Istanza remota riattivata"
markSensitiveDriveFile: "File nel Drive segnato come esplicito"
unmarkSensitiveDriveFile: "File nel Drive segnato come non esplicito"
+ resolveAbuseReport: "Segnalazione risolta"
+ createInvitation: "Genera codice di invito"
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 647f5fb5f0..dcdff1b317 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1121,6 +1121,11 @@ unnotifyNotes: "投稿ã®é€šçŸ¥ã‚’解除"
authentication: "èªè¨¼"
authenticationRequiredToContinue: "ç¶šã‘ã‚‹ã«ã¯èªè¨¼ã‚’行ã£ã¦ãã ã•ã„"
dateAndTime: "日時"
+showRenotes: "リノートを表示"
+edited: "編集済ã¿"
+notificationRecieveConfig: "通知ã®å—信設定"
+mutualFollow: "相互フォロー"
+fileAttachedOnly: "ファイル付ãã®ã¿"
_announcement:
forExistingUsers: "既存ユーザーã®ã¿"
@@ -1458,6 +1463,7 @@ _role:
gtlAvailable: "グローãƒãƒ«ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã®é–²è¦§"
ltlAvailable: "ローカルタイムラインã®é–²è¦§"
canPublicNote: "パブリック投稿ã®è¨±å¯"
+ canEditNote: "ノートã®ç·¨é›†"
canInvite: "サーãƒãƒ¼æ‹›å¾…コードã®ç™ºè¡Œ"
inviteLimit: "招待コードã®ä½œæˆå¯èƒ½æ•°"
inviteLimitCycle: "招待コードã®ç™ºè¡Œé–“éš”"
@@ -2190,3 +2196,7 @@ _moderationLogTypes:
markSensitiveDriveFile: "ファイルをセンシティブ付与"
unmarkSensitiveDriveFile: "ファイルをセンシティブ解除"
resolveAbuseReport: "通報を解決"
+ createInvitation: "招待コードを作æˆ"
+ createAd: "広告を作æˆ"
+ deleteAd: "広告を削除"
+ updateAd: "広告を更新"
diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml
index efbb0ff5f1..bf945088f0 100644
--- a/locales/ja-KS.yml
+++ b/locales/ja-KS.yml
@@ -1105,6 +1105,10 @@ youHaveUnreadAnnouncements: "ã‚ã‚“ãŸã¾ã ã“ã®ãŠçŸ¥ã‚‰ã›èª­ã‚“ã©ã‚‰ã‚“ã‚„
useSecurityKey: "ブラウザã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ã®è¨€ã†é€šã‚Šã«ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚­ãƒ¼ã¾ãŸã¯ãƒ‘スキーを使ã£ã¦ã‚„。"
replies: "返事"
renotes: "Renote"
+loadReplies: "返信を見るã§"
+loadConversation: "会話を見るã§"
+verifiedLink: "ã“ã®ãƒªãƒ³ã‚¯å…ˆã®æ‰€æœ‰è€…ã§ã‚ã‚‹ã“ã¨ãŒç¢ºèªã•れãŸã§ã€‚"
+authenticationRequiredToContinue: "ç¶šã‘ã‚‹ã«ã¯èªè¨¼ã‚’ã‚„ã£ã¦ã‚„。"
_announcement:
forExistingUsers: "ã‚‚ã†ãŠã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿"
forExistingUsersDescription: "有効ã«ã™ã‚‹ã¨ã€ã“ã®ãŠçŸ¥ã‚‰ã›ä½œæˆæ™‚点ã§ãŠã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã®ã¿ãŠçŸ¥ã‚‰ã›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ã“ã®ãŠçŸ¥ã‚‰ã›ä½œæˆå¾Œã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚‚ãŠçŸ¥ã‚‰ã›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚"
@@ -1133,6 +1137,11 @@ _serverRules:
description: "æ–°è¦ç™»éŒ²å‰ã«è¦‹ã›ã‚‹ã€ã‚µãƒ¼ãƒãƒ¼ã®ç°¡æ½”ãªãƒ«ãƒ¼ãƒ«ã‚’設定ã™ã‚“ã§ã€‚内容ã¯ä½¿ã†ãŸã‚ã®æ±ºã‚事ã®è¦ç´„ã¨ã™ã‚‹ã“ã¨ã‚’推奨ã™ã‚‹ã‚。"
_serverSettings:
iconUrl: "アイコン画åƒã®URL"
+ appIconDescription: "{host}ãŒã‚¢ãƒ—リã¨ã—ã¦è¡¨ç¤ºã—ã¦ã‚‹ã‚“ã‚„ã¤ã‚’アイコンを指定ã™ã‚“ã§ã€‚"
+ appIconUsageExample: "PWAã‚„ã€ã‚¹ãƒžãƒ¼ãƒˆãƒ•ォンã®ãƒ›ãƒ¼ãƒ ç”»é¢ã«ãƒ–ックマークã¨ã—ã¦è¿½åŠ ã•ã‚ŒãŸæ™‚ãªã©"
+ appIconStyleRecommendation: "円形もã—ãã¯è§’丸ã«ã‚¯ãƒ­ãƒƒãƒ—ã•れる場åˆãŒã‚ã‚‹ã•ã‹ã„ã«ã€å¡—り潰ã•れãŸä½™ç™½ã®ã‚る背景ãŒã‚ã‚‹ã‚‚ã®ãŒæŽ¨å¥¨ã•れるã§ã€‚"
+ appIconResolutionMustBe: "è§£åƒåº¦ã¯å¿…ãš{resolution}ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã§ã€‚"
+ shortNameDescription: "サーãƒãƒ¼ã®åå‰ãŒé•·ã„時ã«ã€ä»£ã‚りã«è¡¨ç¤ºã™ã‚‹ã“ã¨ã®ã§ãã‚‹ã‚ã å。"
_accountMigration:
moveFrom: "別ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«å¼•ã£è¶Šã™"
moveFromSub: "別ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¸ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’作る"
@@ -1703,6 +1712,7 @@ _2fa:
step2Click: "QRコードをクリックã™ã‚‹ã¨ã€ä»Šä½¿ã¨ã‚‹ç«¯æœ«ã«å…¥ã£ã¨ã‚‹èªè¨¼ã‚¢ãƒ—リã¨ã‹ã‚­ãƒ¼ãƒªãƒ³ã‚°ã«ç™»éŒ²ã§ãã‚‹ã§ã€‚"
step3Title: "確èªã‚³ãƒ¼ãƒ‰ã‚’入れã¦ãƒ¼ã‚„"
step3: "アプリã«è¡¨ç¤ºã•れã¦ã„るトークンを入力ã—ã¦çµ‚ã‚りや。"
+ setupCompleted: "設定ãŒå®Œäº†ã—ãŸã§ã€‚"
step4: "ã“れã‹ã‚‰ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãã‚‚ã€åŒã˜ã‚ˆã†ã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’入力ã™ã‚‹ã‚“ã‚„ã§"
securityKeyNotSupported: "今使ã¨ã‚‹ãƒ–ラウザã¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚­ãƒ¼ã«å¯¾å¿œã—ã¦ã¸ã‚“ã®ã‚„ã£ã¦ã•。"
registerTOTPBeforeKey: "セキュリティキー・パスキーを登録ã™ã‚‹ã‚“ã‚„ã£ãŸã‚‰ã€ã¾ãšèªè¨¼ã‚¢ãƒ—リを設定ã—ã¦ãƒ¼ãªã€‚"
@@ -1717,6 +1727,10 @@ _2fa:
renewTOTPConfirm: "今ã¾ã§ã®èªè¨¼ã‚¢ãƒ—リã®ç¢ºèªã‚³ãƒ¼ãƒ‰ã¯ä½¿ãˆã‚“ããªã‚‹ã‘ã©ãˆãˆã‹ï¼Ÿ"
renewTOTPOk: "ã‚‚ã£ã‹ã„設定ã™ã‚‹"
renewTOTPCancel: "ã‚„ã‚ã¨ã"
+ checkBackupCodesBeforeCloseThisWizard: "ã“ã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’é–‰ã˜ã‚‹å‰ã«ã€ã—ãŸã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—コードを確èªã—ã„や。"
+ backupCodesDescription: "èªè¨¼ã‚¢ãƒ—リãŒä½¿ç”¨ã§ãã‚“ãªã£ãŸå ´åˆã€ä»¥ä¸‹ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—コードを使ã£ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã§ã€‚ã“れらã®ã‚³ãƒ¼ãƒ‰ã¯å¿…ãšå®‰å…¨ãªå ´æ‰€ã«ç½®ã„ã¨ãや。å„コードã¯ä¸€å›žã ã‘使用ã§ãã‚‹ã§ã€‚"
+ backupCodeUsedWarning: "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—コードãŒä½¿ç”¨ã•れãŸã§ã€‚èªè¨¼ã‚¢ãƒ—リãŒä½¿ãˆãªããªã£ã¦ã‚‹ã‚“å ´åˆã€ãªã‚‹ã¹ãæ—©ãèªè¨¼ã‚¢ãƒ—リをå†è¨­å®šã—や。"
+ backupCodesExhaustedWarning: "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—コードãŒå…¨ã¦ä½¿ç”¨ã•れãŸã§ã€‚èªè¨¼ã‚¢ãƒ—リを利用ã§ãã‚“å ´åˆã€ã“れ以上アカウントã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚‹ã§ã€‚èªè¨¼ã‚¢ãƒ—リをå†ç™»éŒ²ã—や。"
_permissions:
"read:account": "ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æƒ…報を見るã§"
"write:account": "ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æƒ…報を変更ã™ã‚‹ã§"
@@ -1989,6 +2003,9 @@ _notification:
unreadAntennaNote: "アンテナ {name}"
emptyPushNotificationMessage: "ãƒ—ãƒƒã‚·ãƒ¥é€šçŸ¥ã®æ›´æ–°ã‚’ã—ã¨ã„ãŸã§"
achievementEarned: "実績をç²å¾—ã—ã¨ã‚‹ã§"
+ checkNotificationBehavior: "通知ã®è¡¨ç¤ºã‚’確ã‹ã‚ã‚‹ã§"
+ sendTestNotification: "テスト通知をé€ä¿¡ã™ã‚‹ã§"
+ notificationWillBeDisplayedLikeThis: "通知ã¯ã“ã®ã‚ˆã†ã«è¡¨ç¤ºã•れるã§"
_types:
all: "ã™ã¹ã¦"
follow: "フォロー"
@@ -2024,6 +2041,7 @@ _deck:
introduction2: "ç”»é¢ã®å³ã«ã‚ã‚‹ + を押ã—ã¦ã€ã„ã¤ã§ã‚‚カラムを追加ã§ãã‚‹ã§ã€‚"
widgetsIntroduction: "カラムã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€ã€Œã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ç·¨é›†ã€ã‚’é¸ã‚“ã§ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’追加ã—ã¦ãªãƒ¼"
useSimpleUiForNonRootPages: "éžãƒ«ãƒ¼ãƒˆãƒšãƒ¼ã‚¸ã¯ç°¡æ˜“UIã§è¡¨ç¤º"
+ usedAsMinWidthWhenFlexible: "「幅を自動調整ã€ãŒæœ‰åйã®å ´åˆã€ã“れãŒå¹…ã®æœ€å°å€¤ã¨ãªã‚‹ã§"
_columns:
main: "メイン"
widgets: "ウィジェット"
@@ -2061,3 +2079,4 @@ _webhookSettings:
_moderationLogTypes:
suspend: "å‡çµ"
resetPassword: "パスワードをリセット"
+ createInvitation: "招待コードを作æˆ"
diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml
index 0fcb39ebc7..be9887e424 100644
--- a/locales/ko-KR.yml
+++ b/locales/ko-KR.yml
@@ -2076,3 +2076,4 @@ _webhookSettings:
_moderationLogTypes:
suspend: "ì •ì§€"
resetPassword: "비밀번호 재설정"
+ createInvitation: "초대 코드 ìƒì„±"
diff --git a/locales/th-TH.yml b/locales/th-TH.yml
index c252ce93f8..464de908c1 100644
--- a/locales/th-TH.yml
+++ b/locales/th-TH.yml
@@ -416,6 +416,9 @@ totp: "à¹à¸­à¸› Authenticator"
totpDescription: "ใช้à¹à¸­à¸›à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตนเพื่อป้อนรหัสผ่านà¹à¸šà¸šà¹ƒà¸Šà¹‰à¸„รั้งเดียว"
moderator: "ผู้ควบคุม"
moderation: "à¸à¸²à¸£à¸à¸¥à¸±à¹ˆà¸™à¸à¸£à¸­à¸‡"
+moderationNote: "โน้ตà¸à¸²à¸£à¸à¸¥à¸±à¹ˆà¸™à¸à¸£à¸­à¸‡"
+addModerationNote: "เพิ่มโน้ตà¸à¸²à¸£à¸à¸¥à¸±à¹ˆà¸™à¸à¸£à¸­à¸‡"
+moderationLogs: "บันทึà¸à¸à¸²à¸£à¸à¸¥à¸±à¹ˆà¸™à¸à¸£à¸­à¸‡"
nUsersMentioned: "à¸à¸¥à¹ˆà¸²à¸§à¸–ึงโดยผู้ใช้ {n} รายนี้"
securityKeyAndPasskey: "ความปลอดภัยà¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™"
securityKey: "à¸à¸¸à¸à¹à¸ˆà¸„วามปลอดภัย"
@@ -708,6 +711,7 @@ lockedAccountInfo: "เว้นà¹à¸•่ว่าคุณจะต้องต
alwaysMarkSensitive: "ทำเครื่องหมายเป็น NSFW เป็นค่าเริ่มต้น"
loadRawImages: "โหลดภาพต้นฉบับà¹à¸—นà¸à¸²à¸£à¹à¸ªà¸”งภาพขนาดย่อ"
disableShowingAnimatedImages: "ไม่ต้องเล่นภาพเคลื่อนไหว"
+highlightSensitiveMedia: "ไฮไลท์สื่อที่ละเอียดอ่อน"
verificationEmailSent: "ส่งอีเมลยืนยันà¹à¸¥à¹‰à¸§à¸™à¸° ได้โปรดà¸à¸£à¸¸à¸“าไปที่ลิงà¸à¹Œà¸—ี่รวมไว้เพื่อทำà¸à¸²à¸£à¸•รวจสอบให้เสร็จสิ้น"
notSet: "ไม่ได้ตั้งค่า"
emailVerified: "อีเมลได้รับà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¹à¸¥à¹‰à¸§"
@@ -1022,6 +1026,7 @@ retryAllQueuesConfirmText: "สิ่งนี้จะเพิ่มà¸à¸²à¸£à
enableChartsForRemoteUser: "สร้างà¹à¸œà¸™à¸ à¸¹à¸¡à¸´à¸‚้อมูลผู้ใช้ระยะไà¸à¸¥"
enableChartsForFederatedInstances: "สร้างà¹à¸œà¸™à¸ à¸¹à¸¡à¸´à¸‚้อมูลอินสà¹à¸•นซ์ระยะไà¸à¸¥"
showClipButtonInNoteFooter: "เพิ่ม \"คลิป\" เพื่อบันทึà¸à¹€à¸¡à¸™à¸¹à¸à¸²à¸£à¸—ำงาน"
+reactionsDisplaySize: "รีà¹à¸­à¸„ชั่นà¹à¸ªà¸”งผลขนาด"
noteIdOrUrl: "โน้ต ID หรือ URL"
video: "วีดีโอ"
videos: "วีดีโอ"
@@ -1100,11 +1105,23 @@ iHaveReadXCarefullyAndAgree: "ฉันได้อ่านข้อควาà¸
dialog: "ไดอะล็อà¸"
icon: "ไอคอน"
forYou: "สำหรับคุณ"
+currentAnnouncements: "ประà¸à¸²à¸¨à¹ƒà¸™à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™"
+pastAnnouncements: "ประà¸à¸²à¸¨à¸—ี่ผ่านมา"
+youHaveUnreadAnnouncements: "มีà¸à¸²à¸£à¸›à¸£à¸°à¸à¸²à¸¨à¸—ี่ยังไม่ได้อ่าน"
replies: "ตอบà¸à¸¥à¸±à¸š"
renotes: "รีโน้ต"
loadReplies: "à¹à¸ªà¸”งà¸à¸²à¸£à¸•อบà¸à¸¥à¸±à¸š"
loadConversation: "à¹à¸ªà¸”งบทสนทนา"
+pinnedList: "รายà¸à¸²à¸£à¸—ี่ปัà¸à¸«à¸¡à¸¸à¸”ไว้à¹à¸¥à¹‰à¸§"
+keepScreenOn: "เปิดหน้าจอไว้"
+notifyNotes: "à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹‚พสต์ใหม่"
+unnotifyNotes: "หยุดà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹‚น้ตใหม่"
+authentication: "à¸à¸²à¸£à¸•รวจสอบสิทธิ์"
+dateAndTime: "เวลาประทับ"
+showRenotes: "à¹à¸ªà¸”งรีโน้ต"
+edited: "à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§"
_announcement:
+ forExistingUsers: "ผู้ใช้งานที่มีอยู่เท่านั้น"
forExistingUsersDescription: "à¸à¸²à¸£à¸›à¸£à¸°à¸à¸²à¸¨à¸™à¸µà¹‰à¸ˆà¸°à¹à¸ªà¸”งต่อผู้ใช้ที่มีอยู่ ณ จุดที่เผยà¹à¸žà¸£à¹ˆà¸™à¸±à¹‰à¸™à¹†à¸–้าหาà¸à¹€à¸›à¸´à¸”ใช้งาน ถ้าหาà¸à¸›à¸´à¸”ใช้งานผู้ที่à¸à¸³à¸¥à¸±à¸‡à¸ªà¸¡à¸±à¸„รใหม่หลังจาà¸à¹‚พสต์à¹à¸¥à¹‰à¸§à¸™à¸±à¹‰à¸™à¸à¹‡à¸ˆà¸°à¹€à¸«à¹‡à¸™à¹€à¸Šà¹ˆà¸™à¸à¸±à¸™"
needConfirmationToReadDescription: "ข้อความà¹à¸ˆà¹‰à¸‡à¹à¸¢à¸ ถ้าหาà¸à¸•้องà¸à¸²à¸£à¹€à¸žà¸·à¹ˆà¸­à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¸à¸³à¸¥à¸±à¸‡à¸—ำเครื่องหมายประà¸à¸²à¸¨à¸™à¸µà¹‰à¸§à¹ˆà¸²à¸­à¹ˆà¸²à¸™à¹à¸¥à¹‰à¸§à¸ˆà¸°à¹à¸ªà¸”งขึ้นถ้าหาà¸à¹€à¸›à¸´à¸”ใช้งาน à¸à¸²à¸£à¸›à¸£à¸°à¸à¸²à¸¨à¸™à¸±à¹‰à¸™à¸ˆà¸°à¹„ม่รวมอยู่ในฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸§à¹ˆà¸² \"ทำเครื่องหมายทั้งหมดว่าอ่านà¹à¸¥à¹‰à¸§\""
end: "ประà¸à¸²à¸¨à¹€à¸à¹‡à¸šà¸–าวร"
@@ -1130,6 +1147,7 @@ _serverRules:
description: "ชุดของà¸à¸Žà¸—ี่จะà¹à¸ªà¸”งà¸à¹ˆà¸­à¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนเราขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸•ั้งค่าสรุปข้อà¸à¸³à¸«à¸™à¸”ในà¸à¸²à¸£à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£"
_serverSettings:
iconUrl: "ไอคอน URL"
+ shortName: "ชื่อย่อ"
_accountMigration:
moveFrom: "ย้ายข้อมูลบัà¸à¸Šà¸µà¸­à¸·à¹ˆà¸™à¹„ปยังอีà¸à¸šà¸±à¸à¸Šà¸µà¸™à¸µà¹‰à¸«à¸™à¸¶à¹ˆà¸‡"
moveFromSub: "สร้างนามà¹à¸à¸‡à¹„ปยังบัà¸à¸Šà¸µà¸­à¸·à¹ˆà¸™"
@@ -1424,6 +1442,7 @@ _role:
gtlAvailable: "à¸à¸²à¸£à¸”ูไทม์ไลน์ทั่วโลà¸"
ltlAvailable: "à¸à¸²à¸£à¸”ูไทม์ไลน์ในท้องถิ่น"
canPublicNote: "สามารถส่งโน้ตสาธารณะ"
+ canEditNote: "à¸à¸³à¸¥à¸±à¸‡à¹à¸à¹‰à¹„ขโน้ต"
canInvite: "สร้างรหัสเชิà¸à¸­à¸´à¸™à¸ªà¹à¸•นซ์"
inviteLimit: "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸Šà¸´à¸"
inviteLimitCycle: "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸Šà¸´à¸à¹„ว้คูลดาวน์"
@@ -1987,6 +2006,7 @@ _notification:
youReceivedFollowRequest: "คุณมีคำขอติดตามใหม่น่ะ"
yourFollowRequestAccepted: "คำขอติดตามของคุณได้รับà¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¹à¸¥à¹‰à¸§à¸™à¹ˆà¸°"
pollEnded: "โพลสำรวจความคิดเห็นผลลัพธ์มีพร้อมใช้งาน"
+ newNote: "โพสต์ใหม่"
unreadAntennaNote: "เสาอาà¸à¸²à¸¨ {name}"
emptyPushNotificationMessage: "à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนà¹à¸šà¸šà¸žà¸¸à¸Šà¹„ด้รับà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทà¹à¸¥à¹‰à¸§"
achievementEarned: "รับความสำเร็จ"
@@ -1996,6 +2016,7 @@ _notification:
notificationWillBeDisplayedLikeThis: "à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนมีลัà¸à¸©à¸“ะà¹à¸šà¸šà¸™à¸µà¹‰"
_types:
all: "ทั้งหมด"
+ note: "โน้ตใหม่"
follow: "à¸à¸³à¸¥à¸±à¸‡à¸•ิดตาม"
mention: "à¸à¸¥à¹ˆà¸²à¸§à¸–ึง"
reply: "ตอบà¸à¸¥à¸±à¸š"
@@ -2066,5 +2087,20 @@ _webhookSettings:
reaction: "เมื่อได้รับรีà¹à¸­à¸„ชั่น"
mention: "เมื่อà¸à¸³à¸¥à¸±à¸‡à¸–ูà¸à¸à¸¥à¹ˆà¸²à¸§à¸–ึง"
_moderationLogTypes:
+ createRole: "สร้างบทบาทà¹à¸¥à¹‰à¸§"
+ deleteRole: "ลบบทบาทà¹à¸¥à¹‰à¸§"
+ updateRole: "อัปเดตบทบาทà¹à¸¥à¹‰à¸§"
+ assignRole: "ได้รับมอบหมายบทบาท"
+ unassignRole: "ถอดออà¸à¸ˆà¸²à¸à¸šà¸—บาทà¹à¸¥à¹‰à¸§"
suspend: "ถูà¸à¸£à¸°à¸‡à¸±à¸š"
+ unsuspend: "เลิà¸à¸–ูà¸à¸£à¸°à¸‡à¸±à¸š"
+ addCustomEmoji: "เพิ่มอีโมจิที่à¸à¸³à¸«à¸™à¸”เองà¹à¸¥à¹‰à¸§"
+ updateCustomEmoji: "อัปเดตอีโมจิที่à¸à¸³à¸«à¸™à¸”เองà¹à¸¥à¹‰à¸§"
+ deleteCustomEmoji: "ลบอีโมจิที่à¸à¸³à¸«à¸™à¸”เองออà¸à¹à¸¥à¹‰à¸§"
+ updateServerSettings: "อัปเดตà¸à¸²à¸£à¸•ั้งค่าเซิร์ฟเวอร์à¹à¸¥à¹‰à¸§"
+ updateUserNote: "อัปเดตโน้ตà¸à¸²à¸£à¸à¸¥à¸±à¹ˆà¸™à¸à¸£à¸­à¸‡à¹à¸¥à¹‰à¸§"
+ deleteDriveFile: "ลบไฟล์ออà¸à¹à¸¥à¹‰à¸§"
+ deleteNote: "ลบโน้ตออà¸à¹à¸¥à¹‰à¸§"
resetPassword: "รีเซ็ตรหัสผ่าน"
+ resolveAbuseReport: "รายงานได้รับà¸à¸²à¸£à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§"
+ createInvitation: "สร้างคำเชิà¸"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index 27f95eb377..a65136c3ee 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -1120,6 +1120,9 @@ notifyNotes: "打开å‘帖通知"
unnotifyNotes: "关闭å‘帖通知"
authentication: "验è¯"
authenticationRequiredToContinue: "è¦ç»§ç»­ï¼Œè¯·å…ˆè¿›è¡ŒéªŒè¯"
+dateAndTime: "日期和时间"
+showRenotes: "显示转帖"
+edited: "已编辑"
_announcement:
forExistingUsers: "ä»…é™çŽ°æœ‰ç”¨æˆ·"
forExistingUsersDescription: "è‹¥å¯ç”¨ï¼Œè¯¥å…¬å‘Šå°†ä»…对创建此公告时存在的用户å¯è§ã€‚ 如果ç¦ç”¨ï¼Œåˆ™åœ¨åˆ›å»ºæ­¤å…¬å‘ŠåŽæ³¨å†Œçš„用户也å¯ä»¥çœ‹åˆ°è¯¥å…¬å‘Šã€‚"
@@ -1450,6 +1453,7 @@ _role:
gtlAvailable: "查看全局时间线"
ltlAvailable: "查看本地时间线"
canPublicNote: "å…许公开å‘帖"
+ canEditNote: "编辑帖å­"
canInvite: "呿”¾æœåŠ¡å™¨é‚€è¯·ç "
inviteLimit: "å¯å‘行邀请ç çš„æ•°é‡"
inviteLimitCycle: "邀请ç çš„å‘行间隔"
@@ -2101,6 +2105,8 @@ _webhookSettings:
reaction: "被回应时"
mention: "被æåŠæ—¶"
_moderationLogTypes:
+ createRole: "创建角色"
+ deleteRole: "删除角色"
updateRole: "更新角色"
assignRole: "分é…角色"
unassignRole: "å–æ¶ˆåˆ†é…角色"
@@ -2122,3 +2128,5 @@ _moderationLogTypes:
resetPassword: "é‡ç½®å¯†ç "
markSensitiveDriveFile: "æ ‡è®°ç½‘ç›˜æ–‡ä»¶ä¸ºæ•æ„Ÿåª’体"
unmarkSensitiveDriveFile: "å–æ¶ˆæ ‡è®°ç½‘ç›˜æ–‡ä»¶ä¸ºæ•æ„Ÿåª’体"
+ resolveAbuseReport: "处ç†ä¸¾æŠ¥"
+ createInvitation: "å‘行邀请ç "
diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml
index 7cea244098..70e96d2ba8 100644
--- a/locales/zh-TW.yml
+++ b/locales/zh-TW.yml
@@ -15,7 +15,7 @@ gotIt: "知é“了"
cancel: "å–æ¶ˆ"
noThankYou: "ç¾åœ¨ä¸è¦"
enterUsername: "輸入使用者å稱"
-renotedBy: "{user} 轉發"
+renotedBy: "{user} 轉發了"
noNotes: "無貼文"
noNotifications: "沒有通知"
instance: "伺æœå™¨"
@@ -56,7 +56,7 @@ copyRSS: "複製RSS"
copyUsername: "複製使用者å稱"
copyUserId: "複製使用者 ID"
copyNoteId: "複製貼文 ID"
-copyFileId: "複製檔案ID"
+copyFileId: "複製檔案 ID"
copyFolderId: "複製資料夾ID"
copyProfileUrl: "複製個人資料網å€"
searchUser: "æœå°‹ä½¿ç”¨è€…"
@@ -75,9 +75,9 @@ import: "匯入"
export: "匯出"
files: "檔案"
download: "下載"
-driveFileDeleteConfirm: "確定è¦åˆªé™¤æª”案「{name}ã€å—Žï¼Ÿä½¿ç”¨æ­¤é™„件的貼文也會跟著消失。\n"
+driveFileDeleteConfirm: "確定è¦åˆªé™¤æª”案「{name}ã€å—Žï¼Ÿä½¿ç”¨æ­¤æª”案的貼文也會跟著被刪除。"
unfollowConfirm: "確定è¦å–消追隨{name}嗎?"
-exportRequested: "已請求匯出。這å¯èƒ½æœƒèŠ±ä¸€é»žæ™‚é–“ã€‚åŒ¯å‡ºçš„æª”æ¡ˆå°‡æœƒè¢«æ”¾åˆ°é›²ç«¯è£¡ã€‚"
+exportRequested: "已請求匯出。這å¯èƒ½æœƒèŠ±ä¸€é»žæ™‚é–“ã€‚åŒ¯å‡ºçš„æª”æ¡ˆå°‡æœƒè¢«æ”¾åˆ°é›²ç«¯ç¡¬ç¢Ÿè£¡ã€‚"
importRequested: "已請求匯入。這å¯èƒ½æœƒèŠ±ä¸€é»žæ™‚é–“ã€‚"
lists: "清單"
noLists: "你沒有任何清單"
@@ -156,16 +156,16 @@ emojiUrl: "表情符號 URL"
addEmoji: "新增表情符號"
settingGuide: "推薦設定"
cacheRemoteFiles: "å¿«å–é ç«¯æª”案"
-cacheRemoteFilesDescription: "啟用此設定後,é ç«¯æª”案會被快å–在本伺æœå™¨çš„儲存空間中。雖然顯示圖片會變快,但會消耗較多伺æœå™¨çš„儲存空間。至於è¦å¿«å–é ç«¯ä½¿ç”¨è€…到什麼程度,是ä¾ç…§è§’色的雲端硬碟容é‡è€Œå®šã€‚ç•¶è¶…éŽé€™å€‹é™åˆ¶æ™‚,從較舊的檔案開始自快å–中刪除並改為連çµã€‚關閉這個設定時,é ç«¯æª”案從一開始就維æŒé€£çµçš„æ–¹å¼ï¼Œä½†ç‚ºäº†ç”¢ç”Ÿåœ–片的縮圖並ä¿è­·ä½¿ç”¨è€…的隱ç§ï¼Œå»ºè­°å°‡ default.yml çš„ proxyRemoteFiles 設為 true。"
+cacheRemoteFilesDescription: "啟用此設定後,é ç«¯æª”案會被快å–在本伺æœå™¨çš„儲存空間中。雖然顯示圖片會變快,但會消耗較多伺æœå™¨çš„儲存空間。至於è¦å¿«å–é ç«¯ä½¿ç”¨è€…到什麼程度,是ä¾ç…§è§’色的雲端硬碟容é‡è€Œå®šã€‚ç•¶è¶…éŽé€™å€‹é™åˆ¶æ™‚,從較舊的檔案開始自快å–中刪除並改為連çµã€‚關閉這個設定時,é ç«¯æª”案從一開始就維æŒé€£çµçš„æ–¹å¼ï¼Œä½†å»ºè­°å°‡ default.yml çš„ proxyRemoteFiles 設為 true,以便產生圖片的縮圖並ä¿è­·ä½¿ç”¨è€…的隱ç§ï¼Œã€‚"
youCanCleanRemoteFilesCache: "按檔案管ç†çš„ðŸ—‘ï¸æŒ‰éˆ•,å¯å°‡å¿«å–全部刪除。"
cacheRemoteSensitiveFiles: "å¿«å–é ç«¯çš„æ•æ„Ÿæª”æ¡ˆ"
cacheRemoteSensitiveFilesDescription: "è‹¥åœç”¨é€™å€‹è¨­å®šï¼Œå‰‡ä¸æœƒå¿«å–é ç«¯çš„æ•æ„Ÿæª”æ¡ˆï¼Œè€Œæ˜¯ç›´æŽ¥é€£çµã€‚"
flagAsBot: "此使用者是機器人"
-flagAsBotDescription: "æ¨™è¨˜æœ¬å¸³æˆ¶ç”±ç¨‹å¼æŽ§åˆ¶ï¼Œé˜²æ­¢å…¶ä»–ç¨‹å¼èˆ‡æœ¬å¸³æˆ¶ç”¢ç”Ÿç„¡é™äº’動的行為。"
+flagAsBotDescription: "å¦‚æžœæœ¬å¸³æˆ¶æ˜¯ç”±ç¨‹å¼æŽ§åˆ¶ï¼Œè«‹å•Ÿç”¨æ­¤é¸é …。啟用後,會作為標示幫助其他開發者防止機器人之間產生無é™äº’動的行為,並會調整Misskey內部系統將本帳戶識別為機器人"
flagAsCat: "此帳戶是一隻貓,喵~~~ï¼ï¼ï¼"
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
-flagShowTimelineRepliesDescription: "啟用時,時間軸除了顯示使用者的貼文以外,還會顯示使用者å°å…¶ä»–貼文的回覆。"
+flagShowTimelineRepliesDescription: "啟用後,時間軸除了顯示使用者的貼文以外,還會顯示使用者å°å…¶ä»–貼文的回覆。"
autoAcceptFollowed: "自動å…許來自追隨中使用者的追隨請求"
addAccount: "新增帳戶"
reloadAccountsList: "更新帳戶清單的資訊"
@@ -184,7 +184,7 @@ host: "主機"
selectUser: "é¸å–使用者"
recipient: "收件人"
annotation: "註解"
-federation: "è¯é‚¦å®‡å®™"
+federation: "ç«™å°è¯é‚¦"
instances: "伺æœå™¨"
registeredAt: "åˆæ¬¡è§€æ¸¬"
latestRequestReceivedAt: "上次收到的請求"
@@ -573,7 +573,7 @@ tokenRevokedDescription: "登入權æ–å¤±æ•ˆï¼Œè«‹é‡æ–°ç™»å…¥ã€‚"
accountDeleted: "帳戶已被刪除"
accountDeletedDescription: "這個帳戶已被刪除。"
menu: "é¸å–®"
-divider: "分割線"
+divider: "分隔線"
addItem: "新增項目"
rearrange: "æŽ’åºæ–¹å¼"
relays: "中繼"
@@ -582,7 +582,7 @@ inboxUrl: "收件夾URL"
addedRelays: "已加入的中繼"
serviceworkerInfo: "您需è¦å•Ÿç”¨æŽ¨é€é€šçŸ¥ã€‚"
deletedNote: "已刪除的貼文"
-invisibleNote: "éš±è—的貼文"
+invisibleNote: "ç§å¯†çš„貼文"
enableInfiniteScroll: "啟用自動滾動é é¢æ¨¡å¼"
visibility: "å¯è¦‹æ€§"
poll: "投票"
@@ -1121,6 +1121,7 @@ unnotifyNotes: "關閉貼文通知"
authentication: "é©—è­‰"
authenticationRequiredToContinue: "請於繼續å‰å®Œæˆé©—è­‰"
dateAndTime: "日期與時間"
+showRenotes: "顯示轉發貼文"
_announcement:
forExistingUsers: "åƒ…é™æ—¢æœ‰çš„使用者"
forExistingUsersDescription: "啟用代表僅å‘ç¾å­˜ä½¿ç”¨è€…顯示;åœç”¨ä»£è¡¨å¼µè²¼å¾Œè¨»å†Šçš„æ–°ä½¿ç”¨è€…也會看到。"
@@ -1451,6 +1452,7 @@ _role:
gtlAvailable: "ç€è¦½å…¨åŸŸæ™‚間軸"
ltlAvailable: "ç€è¦½æœ¬åœ°æ™‚間軸"
canPublicNote: "å…許公開貼文"
+ canEditNote: "å…許編輯貼文"
canInvite: "發行實例邀請碼"
inviteLimit: "å¯å»ºç«‹é‚€è«‹ç¢¼çš„æ•¸é‡"
inviteLimitCycle: "邀請碼的發放間隔"
@@ -1576,8 +1578,8 @@ _displayOfSensitiveMedia:
force: "éš±è—æ‰€æœ‰æª”案"
_instanceTicker:
none: "éš±è—"
- remote: "å‘é ç«¯ä½¿ç”¨è€…顯示"
- always: "總是顯示"
+ remote: "åªé¡¯ç¤ºé ç«¯ä½¿ç”¨è€…"
+ always: "一律顯示"
_serverDisconnectedBehavior:
reload: "自動é‡è¼‰"
dialog: "彈出å¼è­¦å‘Š"
@@ -1610,7 +1612,7 @@ _wordMute:
mutedNotes: "å·²éœéŸ³çš„貼文"
_instanceMute:
instanceMuteDescription: "包括å°è¢«éœéŸ³å¯¦ä¾‹ä¸Šçš„使用者的回覆,被設定的實例上所有貼文åŠè½‰ç™¼éƒ½æœƒè¢«éœéŸ³ã€‚"
- instanceMuteDescription2: "æ›è¡Œä»¥åˆ†éš”"
+ instanceMuteDescription2: "設定時以æ›è¡Œé€²è¡Œåˆ†éš”"
title: "將隱è—被設定的實例貼文。"
heading: "將實例éœéŸ³"
_theme:
@@ -1663,7 +1665,7 @@ _theme:
mentionMe: "æåˆ°äº†æˆ‘"
renote: "轉發貼文"
modalBg: "å°è©±æ¡†èƒŒæ™¯"
- divider: "分割線"
+ divider: "分隔線"
scrollbarHandle: "æ²å‹•æ¢"
scrollbarHandleHover: "æ²å‹•æ¢ï¼ˆæ‡¸æµ®ï¼‰"
dateLabelFg: "日期標籤文字"
@@ -2127,3 +2129,5 @@ _moderationLogTypes:
unsuspendRemoteInstance: "解除å°éŽ–é ç«¯ä¼ºæœå™¨"
markSensitiveDriveFile: "æ¨™è¨˜ç‚ºæ•æ„Ÿæª”案"
unmarkSensitiveDriveFile: "æ’¤éŠ·æ¨™è¨˜ç‚ºæ•æ„Ÿæª”案"
+ resolveAbuseReport: "解決檢舉"
+ createInvitation: "建立邀請碼"
diff --git a/package.json b/package.json
index eb82b503a2..02afa58332 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,12 @@
{
"name": "misskey",
- "version": "2023.9.1",
+ "version": "2023.9.2",
"codename": "nasubi",
"repository": {
"type": "git",
"url": "https://github.com/misskey-dev/misskey.git"
},
- "packageManager": "pnpm@8.7.6",
+ "packageManager": "pnpm@8.8.0",
"workspaces": [
"packages/frontend",
"packages/backend",
@@ -46,15 +46,15 @@
"execa": "8.0.1",
"cssnano": "6.0.1",
"js-yaml": "4.1.0",
- "postcss": "8.4.30",
+ "postcss": "8.4.31",
"terser": "5.20.0",
"typescript": "5.2.2"
},
"devDependencies": {
- "@typescript-eslint/eslint-plugin": "6.7.2",
- "@typescript-eslint/parser": "6.7.2",
+ "@typescript-eslint/eslint-plugin": "6.7.3",
+ "@typescript-eslint/parser": "6.7.3",
"cross-env": "7.0.3",
- "cypress": "13.2.0",
+ "cypress": "13.3.0",
"eslint": "8.50.0",
"start-server-and-test": "2.0.1"
},
diff --git a/packages/backend/migration/1695901659683-note-updated-at.js b/packages/backend/migration/1695901659683-note-updated-at.js
new file mode 100644
index 0000000000..d8a151a1f7
--- /dev/null
+++ b/packages/backend/migration/1695901659683-note-updated-at.js
@@ -0,0 +1,11 @@
+export class NoteUpdatedAt1695901659683 {
+ name = 'NoteUpdatedAt1695901659683'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "note" ADD "updatedAt" TIMESTAMP WITH TIME ZONE`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "updatedAt"`);
+ }
+}
diff --git a/packages/backend/migration/1695944637565-notificationRecieveConfig.js b/packages/backend/migration/1695944637565-notificationRecieveConfig.js
new file mode 100644
index 0000000000..42d3dce5d6
--- /dev/null
+++ b/packages/backend/migration/1695944637565-notificationRecieveConfig.js
@@ -0,0 +1,18 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export class NotificationRecieveConfig1695944637565 {
+ name = 'NotificationRecieveConfig1695944637565'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "mutingNotificationTypes"`);
+ await queryRunner.query(`ALTER TABLE "user_profile" ADD "notificationRecieveConfig" jsonb NOT NULL DEFAULT '{}'`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "notificationRecieveConfig"`);
+ await queryRunner.query(`ALTER TABLE "user_profile" ADD "mutingNotificationTypes" "public"."user_profile_notificationrecieveconfig_enum" array NOT NULL DEFAULT '{}'`);
+ }
+}
diff --git a/packages/backend/package.json b/packages/backend/package.json
index c26b1238db..2fbf9de8a6 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -39,7 +39,7 @@
"@swc/core-win32-x64-msvc": "1.3.56",
"@tensorflow/tfjs": "4.4.0",
"@tensorflow/tfjs-node": "4.4.0",
- "bufferutil": "^4.0.7",
+ "bufferutil": "4.0.7",
"slacc-android-arm-eabi": "0.0.10",
"slacc-android-arm64": "0.0.10",
"slacc-darwin-arm64": "0.0.10",
@@ -53,7 +53,7 @@
"slacc-linux-x64-musl": "0.0.10",
"slacc-win32-arm64-msvc": "0.0.10",
"slacc-win32-x64-msvc": "0.0.10",
- "utf-8-validate": "^6.0.3"
+ "utf-8-validate": "6.0.3"
},
"dependencies": {
"@aws-sdk/client-s3": "3.412.0",
@@ -68,17 +68,17 @@
"@fastify/cors": "8.4.0",
"@fastify/express": "2.3.0",
"@fastify/http-proxy": "9.2.1",
- "@fastify/multipart": "7.7.3",
+ "@fastify/multipart": "8.0.0",
"@fastify/static": "6.11.2",
"@fastify/view": "8.2.0",
"@nestjs/common": "10.2.6",
"@nestjs/core": "10.2.6",
"@nestjs/testing": "10.2.6",
"@peertube/http-signature": "1.7.0",
- "@simplewebauthn/server": "8.1.1",
+ "@simplewebauthn/server": "8.2.0",
"@sinonjs/fake-timers": "11.1.0",
"@swc/cli": "0.1.62",
- "@swc/core": "1.3.87",
+ "@swc/core": "1.3.90",
"accepts": "1.3.8",
"ajv": "8.12.0",
"archiver": "6.0.1",
@@ -115,7 +115,7 @@
"json5": "2.2.3",
"jsonld": "8.3.1",
"jsrsasign": "10.8.6",
- "meilisearch": "0.34.2",
+ "meilisearch": "0.35.0",
"mfm-js": "0.23.3",
"microformats-parser": "1.5.2",
"mime-types": "2.1.35",
@@ -155,7 +155,7 @@
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"summaly": "github:misskey-dev/summaly",
- "systeminformation": "5.21.8",
+ "systeminformation": "5.21.9",
"tinycolor2": "1.6.0",
"tmp": "0.2.1",
"tsc-alias": "1.8.8",
@@ -187,33 +187,33 @@
"@types/jsdom": "21.1.3",
"@types/jsonld": "1.5.10",
"@types/jsrsasign": "10.5.9",
- "@types/mime-types": "2.1.1",
- "@types/ms": "0.7.31",
- "@types/node": "20.6.4",
+ "@types/mime-types": "2.1.2",
+ "@types/ms": "0.7.32",
+ "@types/node": "20.7.1",
"@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.11",
"@types/oauth": "0.9.2",
"@types/oauth2orize": "1.11.1",
"@types/oauth2orize-pkce": "0.1.0",
- "@types/pg": "8.10.2",
- "@types/pug": "2.0.6",
+ "@types/pg": "8.10.3",
+ "@types/pug": "2.0.7",
"@types/punycode": "2.1.0",
"@types/qrcode": "1.5.2",
"@types/random-seed": "0.3.3",
"@types/ratelimiter": "3.4.4",
- "@types/rename": "1.0.4",
- "@types/sanitize-html": "2.9.0",
- "@types/semver": "7.5.2",
+ "@types/rename": "1.0.5",
+ "@types/sanitize-html": "2.9.1",
+ "@types/semver": "7.5.3",
"@types/sharp": "0.32.0",
- "@types/simple-oauth2": "5.0.4",
- "@types/sinonjs__fake-timers": "8.1.2",
+ "@types/simple-oauth2": "5.0.5",
+ "@types/sinonjs__fake-timers": "8.1.3",
"@types/tinycolor2": "1.4.4",
"@types/tmp": "0.2.4",
- "@types/vary": "1.1.0",
- "@types/web-push": "3.6.0",
- "@types/ws": "8.5.5",
- "@typescript-eslint/eslint-plugin": "6.7.2",
- "@typescript-eslint/parser": "6.7.2",
+ "@types/vary": "1.1.1",
+ "@types/web-push": "3.6.1",
+ "@types/ws": "8.5.6",
+ "@typescript-eslint/eslint-plugin": "6.7.3",
+ "@typescript-eslint/parser": "6.7.3",
"aws-sdk-client-mock": "3.0.0",
"cross-env": "7.0.3",
"eslint": "8.50.0",
diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts
index a45ea2bb8f..623cc964ac 100644
--- a/packages/backend/src/boot/master.ts
+++ b/packages/backend/src/boot/master.ts
@@ -63,6 +63,7 @@ export async function masterMain() {
showNodejsVersion();
config = loadConfigBoot();
//await connectDb();
+ if (config.pidFile) fs.writeFileSync(config.pidFile, process.pid.toString());
} catch (e) {
bootLogger.error('Fatal error occurred during initialization', null, true);
process.exit(1);
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index abbfdfed8f..f89879d535 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -89,6 +89,7 @@ type Source = {
perChannelMaxNoteCacheCount?: number;
perUserNotificationsMaxCount?: number;
deactivateAntennaThreshold?: number;
+ pidFile: string;
};
export type Config = {
@@ -163,6 +164,7 @@ export type Config = {
perChannelMaxNoteCacheCount: number;
perUserNotificationsMaxCount: number;
deactivateAntennaThreshold: number;
+ pidFile: string;
};
const _filename = fileURLToPath(import.meta.url);
@@ -255,6 +257,7 @@ export function loadConfig(): Config {
perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000,
perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 300,
deactivateAntennaThreshold: config.deactivateAntennaThreshold ?? (1000 * 60 * 60 * 24 * 7),
+ pidFile: config.pidFile,
};
}
diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts
index 841ce4b84a..d9f27b8c63 100644
--- a/packages/backend/src/core/AntennaService.ts
+++ b/packages/backend/src/core/AntennaService.ts
@@ -15,7 +15,7 @@ import { DI } from '@/di-symbols.js';
import type { AntennasRepository, UserListJoiningsRepository } from '@/models/_.js';
import { UtilityService } from '@/core/UtilityService.js';
import { bindThis } from '@/decorators.js';
-import { StreamMessages } from '@/server/api/stream/types.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
@@ -50,7 +50,7 @@ export class AntennaService implements OnApplicationShutdown {
const obj = JSON.parse(data);
if (obj.channel === 'internal') {
- const { type, body } = obj.message as StreamMessages['internal']['payload'];
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
switch (type) {
case 'antennaCreated':
this.antennas.push({
diff --git a/packages/backend/src/core/CacheService.ts b/packages/backend/src/core/CacheService.ts
index 6ca684d53c..561979c4bf 100644
--- a/packages/backend/src/core/CacheService.ts
+++ b/packages/backend/src/core/CacheService.ts
@@ -11,7 +11,7 @@ import type { MiLocalUser, MiUser } from '@/models/User.js';
import { DI } from '@/di-symbols.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { bindThis } from '@/decorators.js';
-import { StreamMessages } from '@/server/api/stream/types.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
@@ -160,7 +160,7 @@ export class CacheService implements OnApplicationShutdown {
const obj = JSON.parse(data);
if (obj.channel === 'internal') {
- const { type, body } = obj.message as StreamMessages['internal']['payload'];
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
switch (type) {
case 'userChangeSuspendedState':
case 'remoteUserUpdated': {
diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index 1b545a124e..9661a0aea3 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -17,7 +17,7 @@ import { bindThis } from '@/decorators.js';
import { MemoryKVCache, RedisSingleCache } from '@/misc/cache.js';
import { UtilityService } from '@/core/UtilityService.js';
import { query } from '@/misc/prelude/url.js';
-import type { Serialized } from '@/server/api/stream/types.js';
+import type { Serialized } from '@/types.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
const parseEmojiStrRegexp = /^(\w+)(?:@([\w.-]+))?$/;
diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts
index 4bc4f54c21..b74fbbe584 100644
--- a/packages/backend/src/core/GlobalEventService.ts
+++ b/packages/backend/src/core/GlobalEventService.ts
@@ -5,27 +5,254 @@
import { Inject, Injectable } from '@nestjs/common';
import * as Redis from 'ioredis';
+import type { MiChannel } from '@/models/Channel.js';
import type { MiUser } from '@/models/User.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
import type { MiNote } from '@/models/Note.js';
-import type { MiUserList } from '@/models/UserList.js';
import type { MiAntenna } from '@/models/Antenna.js';
-import type {
- StreamChannels,
- AdminStreamTypes,
- AntennaStreamTypes,
- BroadcastTypes,
- DriveStreamTypes,
- InternalStreamTypes,
- MainStreamTypes,
- NoteStreamTypes,
- UserListStreamTypes,
- RoleTimelineStreamTypes,
-} from '@/server/api/stream/types.js';
+import type { MiDriveFile } from '@/models/DriveFile.js';
+import type { MiDriveFolder } from '@/models/DriveFolder.js';
+import type { MiUserList } from '@/models/UserList.js';
+import type { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
+import type { MiSignin } from '@/models/Signin.js';
+import type { MiPage } from '@/models/Page.js';
+import type { MiWebhook } from '@/models/Webhook.js';
+import type { MiMeta } from '@/models/Meta.js';
+import { MiRole, MiRoleAssignment } from '@/models/_.js';
import type { Packed } from '@/misc/json-schema.js';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { bindThis } from '@/decorators.js';
-import { MiRole } from '@/models/_.js';
+import { Serialized } from '@/types.js';
+import type Emitter from 'strict-event-emitter-types';
+import type { EventEmitter } from 'events';
+
+//#region Stream type-body definitions
+export interface BroadcastTypes {
+ emojiAdded: {
+ emoji: Packed<'EmojiDetailed'>;
+ };
+ emojiUpdated: {
+ emojis: Packed<'EmojiDetailed'>[];
+ };
+ emojiDeleted: {
+ emojis: {
+ id?: string;
+ name: string;
+ [other: string]: any;
+ }[];
+ };
+ announcementCreated: {
+ announcement: Packed<'Announcement'>;
+ };
+}
+
+export interface MainEventTypes {
+ notification: Packed<'Notification'>;
+ mention: Packed<'Note'>;
+ reply: Packed<'Note'>;
+ renote: Packed<'Note'>;
+ follow: Packed<'UserDetailedNotMe'>;
+ followed: Packed<'User'>;
+ unfollow: Packed<'User'>;
+ meUpdated: Packed<'User'>;
+ pageEvent: {
+ pageId: MiPage['id'];
+ event: string;
+ var: any;
+ userId: MiUser['id'];
+ user: Packed<'User'>;
+ };
+ urlUploadFinished: {
+ marker?: string | null;
+ file: Packed<'DriveFile'>;
+ };
+ readAllNotifications: undefined;
+ unreadNotification: Packed<'Notification'>;
+ unreadMention: MiNote['id'];
+ readAllUnreadMentions: undefined;
+ unreadSpecifiedNote: MiNote['id'];
+ readAllUnreadSpecifiedNotes: undefined;
+ readAllAntennas: undefined;
+ unreadAntenna: MiAntenna;
+ readAllAnnouncements: undefined;
+ myTokenRegenerated: undefined;
+ signin: MiSignin;
+ registryUpdated: {
+ scope?: string[];
+ key: string;
+ value: any | null;
+ };
+ driveFileCreated: Packed<'DriveFile'>;
+ readAntenna: MiAntenna;
+ receiveFollowRequest: Packed<'User'>;
+ announcementCreated: {
+ announcement: Packed<'Announcement'>;
+ };
+}
+
+export interface DriveEventTypes {
+ fileCreated: Packed<'DriveFile'>;
+ fileDeleted: MiDriveFile['id'];
+ fileUpdated: Packed<'DriveFile'>;
+ folderCreated: Packed<'DriveFolder'>;
+ folderDeleted: MiDriveFolder['id'];
+ folderUpdated: Packed<'DriveFolder'>;
+}
+
+export interface NoteEventTypes {
+ pollVoted: {
+ choice: number;
+ userId: MiUser['id'];
+ };
+ deleted: {
+ deletedAt: Date;
+ };
+ updated: {
+ cw: string | null;
+ text: string;
+ };
+ reacted: {
+ reaction: string;
+ emoji?: {
+ name: string;
+ url: string;
+ } | null;
+ userId: MiUser['id'];
+ };
+ unreacted: {
+ reaction: string;
+ userId: MiUser['id'];
+ };
+}
+type NoteStreamEventTypes = {
+ [key in keyof NoteEventTypes]: {
+ id: MiNote['id'];
+ body: NoteEventTypes[key];
+ };
+};
+
+export interface UserListEventTypes {
+ userAdded: Packed<'User'>;
+ userRemoved: Packed<'User'>;
+}
+
+export interface AntennaEventTypes {
+ note: MiNote;
+}
+
+export interface RoleTimelineEventTypes {
+ note: Packed<'Note'>;
+}
+
+export interface AdminEventTypes {
+ newAbuseUserReport: {
+ id: MiAbuseUserReport['id'];
+ targetUserId: MiUser['id'],
+ reporterId: MiUser['id'],
+ comment: string;
+ };
+}
+//#endregion
+
+// 辞書(interface or type)ã‹ã‚‰{ type, body }ユニオンを定義
+// https://stackoverflow.com/questions/49311989/can-i-infer-the-type-of-a-value-using-extends-keyof-type
+// VS Codeã®å±•開を防止ã™ã‚‹ãŸã‚ã«Events型を定義
+type Events<T extends object> = { [K in keyof T]: { type: K; body: T[K]; } };
+type EventUnionFromDictionary<
+ T extends object,
+ U = Events<T>
+> = U[keyof U];
+
+type SerializedAll<T> = {
+ [K in keyof T]: Serialized<T[K]>;
+};
+
+export interface InternalEventTypes {
+ userChangeSuspendedState: { id: MiUser['id']; isSuspended: MiUser['isSuspended']; };
+ userTokenRegenerated: { id: MiUser['id']; oldToken: string; newToken: string; };
+ remoteUserUpdated: { id: MiUser['id']; };
+ follow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
+ unfollow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
+ blockingCreated: { blockerId: MiUser['id']; blockeeId: MiUser['id']; };
+ blockingDeleted: { blockerId: MiUser['id']; blockeeId: MiUser['id']; };
+ policiesUpdated: MiRole['policies'];
+ roleCreated: MiRole;
+ roleDeleted: MiRole;
+ roleUpdated: MiRole;
+ userRoleAssigned: MiRoleAssignment;
+ userRoleUnassigned: MiRoleAssignment;
+ webhookCreated: MiWebhook;
+ webhookDeleted: MiWebhook;
+ webhookUpdated: MiWebhook;
+ antennaCreated: MiAntenna;
+ antennaDeleted: MiAntenna;
+ antennaUpdated: MiAntenna;
+ metaUpdated: MiMeta;
+ followChannel: { userId: MiUser['id']; channelId: MiChannel['id']; };
+ unfollowChannel: { userId: MiUser['id']; channelId: MiChannel['id']; };
+ updateUserProfile: MiUserProfile;
+ mute: { muterId: MiUser['id']; muteeId: MiUser['id']; };
+ unmute: { muterId: MiUser['id']; muteeId: MiUser['id']; };
+ userListMemberAdded: { userListId: MiUserList['id']; memberId: MiUser['id']; };
+ userListMemberRemoved: { userListId: MiUserList['id']; memberId: MiUser['id']; };
+}
+
+// name/messages(spec) pairs dictionary
+export type GlobalEvents = {
+ internal: {
+ name: 'internal';
+ payload: EventUnionFromDictionary<SerializedAll<InternalEventTypes>>;
+ };
+ broadcast: {
+ name: 'broadcast';
+ payload: EventUnionFromDictionary<SerializedAll<BroadcastTypes>>;
+ };
+ main: {
+ name: `mainStream:${MiUser['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<MainEventTypes>>;
+ };
+ drive: {
+ name: `driveStream:${MiUser['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<DriveEventTypes>>;
+ };
+ note: {
+ name: `noteStream:${MiNote['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<NoteStreamEventTypes>>;
+ };
+ userList: {
+ name: `userListStream:${MiUserList['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<UserListEventTypes>>;
+ };
+ roleTimeline: {
+ name: `roleTimelineStream:${MiRole['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<RoleTimelineEventTypes>>;
+ };
+ antenna: {
+ name: `antennaStream:${MiAntenna['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<AntennaEventTypes>>;
+ };
+ admin: {
+ name: `adminStream:${MiUser['id']}`;
+ payload: EventUnionFromDictionary<SerializedAll<AdminEventTypes>>;
+ };
+ notes: {
+ name: 'notesStream';
+ payload: Serialized<Packed<'Note'>>;
+ };
+};
+
+// API event definitions
+// ストリームã”ã¨ã®Emitterã®è¾žæ›¸ã‚’用æ„
+type EventEmitterDictionary = { [x in keyof GlobalEvents]: Emitter.default<EventEmitter, { [y in GlobalEvents[x]['name']]: (e: GlobalEvents[x]['payload']) => void }> };
+// 共用体型を交差型ã«ã™ã‚‹åž‹ https://stackoverflow.com/questions/54938141/typescript-convert-union-to-intersection
+type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
+// Emitter辞書ã‹ã‚‰å…±ç”¨ä½“型を作りã€UnionToIntersectionã§äº¤å·®åž‹ã«ã™ã‚‹
+export type StreamEventEmitter = UnionToIntersection<EventEmitterDictionary[keyof GlobalEvents]>;
+// { [y in name]: (e: spec) => void }ã‚’ã¾ã¨ã‚ã¦ãã®äº¤å·®åž‹ã‚’Emitterã«ã‹ã‘ã‚‹ã¨ts(2590)ã«ã²ã£ã‹ã‹ã‚‹
+
+// provide stream channels union
+export type StreamChannels = GlobalEvents[keyof GlobalEvents]['name'];
@Injectable()
export class GlobalEventService {
@@ -51,7 +278,7 @@ export class GlobalEventService {
}
@bindThis
- public publishInternalEvent<K extends keyof InternalStreamTypes>(type: K, value?: InternalStreamTypes[K]): void {
+ public publishInternalEvent<K extends keyof InternalEventTypes>(type: K, value?: InternalEventTypes[K]): void {
this.publish('internal', type, typeof value === 'undefined' ? null : value);
}
@@ -61,17 +288,17 @@ export class GlobalEventService {
}
@bindThis
- public publishMainStream<K extends keyof MainStreamTypes>(userId: MiUser['id'], type: K, value?: MainStreamTypes[K]): void {
+ public publishMainStream<K extends keyof MainEventTypes>(userId: MiUser['id'], type: K, value?: MainEventTypes[K]): void {
this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
@bindThis
- public publishDriveStream<K extends keyof DriveStreamTypes>(userId: MiUser['id'], type: K, value?: DriveStreamTypes[K]): void {
+ public publishDriveStream<K extends keyof DriveEventTypes>(userId: MiUser['id'], type: K, value?: DriveEventTypes[K]): void {
this.publish(`driveStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
@bindThis
- public publishNoteStream<K extends keyof NoteStreamTypes>(noteId: MiNote['id'], type: K, value?: NoteStreamTypes[K]): void {
+ public publishNoteStream<K extends keyof NoteEventTypes>(noteId: MiNote['id'], type: K, value?: NoteEventTypes[K]): void {
this.publish(`noteStream:${noteId}`, type, {
id: noteId,
body: value,
@@ -79,17 +306,17 @@ export class GlobalEventService {
}
@bindThis
- public publishUserListStream<K extends keyof UserListStreamTypes>(listId: MiUserList['id'], type: K, value?: UserListStreamTypes[K]): void {
+ public publishUserListStream<K extends keyof UserListEventTypes>(listId: MiUserList['id'], type: K, value?: UserListEventTypes[K]): void {
this.publish(`userListStream:${listId}`, type, typeof value === 'undefined' ? null : value);
}
@bindThis
- public publishAntennaStream<K extends keyof AntennaStreamTypes>(antennaId: MiAntenna['id'], type: K, value?: AntennaStreamTypes[K]): void {
+ public publishAntennaStream<K extends keyof AntennaEventTypes>(antennaId: MiAntenna['id'], type: K, value?: AntennaEventTypes[K]): void {
this.publish(`antennaStream:${antennaId}`, type, typeof value === 'undefined' ? null : value);
}
@bindThis
- public publishRoleTimelineStream<K extends keyof RoleTimelineStreamTypes>(roleId: MiRole['id'], type: K, value?: RoleTimelineStreamTypes[K]): void {
+ public publishRoleTimelineStream<K extends keyof RoleTimelineEventTypes>(roleId: MiRole['id'], type: K, value?: RoleTimelineEventTypes[K]): void {
this.publish(`roleTimelineStream:${roleId}`, type, typeof value === 'undefined' ? null : value);
}
@@ -99,7 +326,7 @@ export class GlobalEventService {
}
@bindThis
- public publishAdminStream<K extends keyof AdminStreamTypes>(userId: MiUser['id'], type: K, value?: AdminStreamTypes[K]): void {
+ public publishAdminStream<K extends keyof AdminEventTypes>(userId: MiUser['id'], type: K, value?: AdminEventTypes[K]): void {
this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value);
}
}
diff --git a/packages/backend/src/core/MetaService.ts b/packages/backend/src/core/MetaService.ts
index 00e1e3c1fc..508544dc07 100644
--- a/packages/backend/src/core/MetaService.ts
+++ b/packages/backend/src/core/MetaService.ts
@@ -10,7 +10,7 @@ import { DI } from '@/di-symbols.js';
import { MiMeta } from '@/models/Meta.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { bindThis } from '@/decorators.js';
-import { StreamMessages } from '@/server/api/stream/types.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
@@ -46,7 +46,7 @@ export class MetaService implements OnApplicationShutdown {
const obj = JSON.parse(data);
if (obj.channel === 'internal') {
- const { type, body } = obj.message as StreamMessages['internal']['payload'];
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
switch (type) {
case 'metaUpdated': {
this.cache = body;
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 972319ddcf..f20727ce41 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -110,9 +110,8 @@ class NotificationManager {
// 通知ã•れるå´ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒé€šçŸ¥ã™ã‚‹å´ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュートã—ã¦ã„ãªã„é™ã‚Šã¯é€šçŸ¥ã™ã‚‹
if (!mentioneesMutedUserIds.includes(this.notifier.id)) {
this.notificationService.createNotification(x.target, x.reason, {
- notifierId: this.notifier.id,
noteId: this.note.id,
- });
+ }, this.notifier.id);
}
}
}
@@ -515,9 +514,8 @@ export class NoteCreateService implements OnApplicationShutdown {
}).then(followings => {
for (const following of followings) {
this.notificationService.createNotification(following.followerId, 'note', {
- notifierId: user.id,
noteId: note.id,
- });
+ }, user.id);
}
});
}
diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index 258ae44f7d..ba8798f181 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -18,6 +18,7 @@ import { NotificationEntityService } from '@/core/entities/NotificationEntitySer
import { IdService } from '@/core/IdService.js';
import { CacheService } from '@/core/CacheService.js';
import type { Config } from '@/config.js';
+import { UserListService } from '@/core/UserListService.js';
@Injectable()
export class NotificationService implements OnApplicationShutdown {
@@ -38,6 +39,7 @@ export class NotificationService implements OnApplicationShutdown {
private globalEventService: GlobalEventService,
private pushNotificationService: PushNotificationService,
private cacheService: CacheService,
+ private userListService: UserListService,
) {
}
@@ -74,27 +76,56 @@ export class NotificationService implements OnApplicationShutdown {
public async createNotification(
notifieeId: MiUser['id'],
type: MiNotification['type'],
- data: Partial<MiNotification>,
+ data: Omit<Partial<MiNotification>, 'notifierId'>,
+ notifierId?: MiUser['id'] | null,
): Promise<MiNotification | null> {
const profile = await this.cacheService.userProfileCache.fetch(notifieeId);
- const isMuted = profile.mutingNotificationTypes.includes(type);
- if (isMuted) return null;
+ const recieveConfig = profile.notificationRecieveConfig[type];
+ if (recieveConfig?.type === 'never') {
+ return null;
+ }
- if (data.notifierId) {
- if (notifieeId === data.notifierId) {
+ if (notifierId) {
+ if (notifieeId === notifierId) {
return null;
}
const mutings = await this.cacheService.userMutingsCache.fetch(notifieeId);
- if (mutings.has(data.notifierId)) {
+ if (mutings.has(notifierId)) {
return null;
}
+
+ if (recieveConfig?.type === 'following') {
+ const isFollowing = await this.cacheService.userFollowingsCache.fetch(notifieeId).then(followings => followings.has(notifierId));
+ if (!isFollowing) {
+ return null;
+ }
+ } else if (recieveConfig?.type === 'follower') {
+ const isFollower = await this.cacheService.userFollowingsCache.fetch(notifierId).then(followings => followings.has(notifieeId));
+ if (!isFollower) {
+ return null;
+ }
+ } else if (recieveConfig?.type === 'mutualFollow') {
+ const [isFollowing, isFollower] = await Promise.all([
+ this.cacheService.userFollowingsCache.fetch(notifieeId).then(followings => followings.has(notifierId)),
+ this.cacheService.userFollowingsCache.fetch(notifierId).then(followings => followings.has(notifieeId)),
+ ]);
+ if (!isFollowing && !isFollower) {
+ return null;
+ }
+ } else if (recieveConfig?.type === 'list') {
+ const isMember = await this.userListService.membersCache.fetch(recieveConfig.userListId).then(members => members.has(notifierId));
+ if (!isMember) {
+ return null;
+ }
+ }
}
const notification = {
id: this.idService.genId(),
createdAt: new Date(),
type: type,
+ notifierId: notifierId,
...data,
} as MiNotification;
@@ -117,8 +148,8 @@ export class NotificationService implements OnApplicationShutdown {
this.globalEventService.publishMainStream(notifieeId, 'unreadNotification', packed);
this.pushNotificationService.pushNotification(notifieeId, 'notification', packed);
- if (type === 'follow') this.emailNotificationFollow(notifieeId, await this.usersRepository.findOneByOrFail({ id: data.notifierId! }));
- if (type === 'receiveFollowRequest') this.emailNotificationReceiveFollowRequest(notifieeId, await this.usersRepository.findOneByOrFail({ id: data.notifierId! }));
+ if (type === 'follow') this.emailNotificationFollow(notifieeId, await this.usersRepository.findOneByOrFail({ id: notifierId! }));
+ if (type === 'receiveFollowRequest') this.emailNotificationReceiveFollowRequest(notifieeId, await this.usersRepository.findOneByOrFail({ id: notifierId! }));
}, () => { /* aborted, ignore it */ });
return notification;
diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts
index d9bde502c8..25464b19a8 100644
--- a/packages/backend/src/core/ReactionService.ts
+++ b/packages/backend/src/core/ReactionService.ts
@@ -219,10 +219,9 @@ export class ReactionService {
// リアクションã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãªã‚‰é€šçŸ¥ã‚’作æˆ
if (note.userHost === null) {
this.notificationService.createNotification(note.userId, 'reaction', {
- notifierId: user.id,
noteId: note.id,
reaction: reaction,
- });
+ }, user.id);
}
//#region é…ä¿¡
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 934b7d676b..c3445abc53 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -15,7 +15,7 @@ import { MetaService } from '@/core/MetaService.js';
import { CacheService } from '@/core/CacheService.js';
import type { RoleCondFormulaValue } from '@/models/Role.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
-import { StreamMessages } from '@/server/api/stream/types.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import { IdService } from '@/core/IdService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
@@ -26,6 +26,7 @@ export type RolePolicies = {
gtlAvailable: boolean;
ltlAvailable: boolean;
canPublicNote: boolean;
+ canEditNote: boolean;
canInvite: boolean;
inviteLimit: number;
inviteLimitCycle: number;
@@ -50,6 +51,7 @@ export const DEFAULT_POLICIES: RolePolicies = {
gtlAvailable: true,
ltlAvailable: true,
canPublicNote: true,
+ canEditNote: true,
canInvite: false,
inviteLimit: 0,
inviteLimitCycle: 60 * 24 * 7,
@@ -114,7 +116,7 @@ export class RoleService implements OnApplicationShutdown {
const obj = JSON.parse(data);
if (obj.channel === 'internal') {
- const { type, body } = obj.message as StreamMessages['internal']['payload'];
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
switch (type) {
case 'roleCreated': {
const cached = this.rolesCache.get();
@@ -294,6 +296,7 @@ export class RoleService implements OnApplicationShutdown {
gtlAvailable: calc('gtlAvailable', vs => vs.some(v => v === true)),
ltlAvailable: calc('ltlAvailable', vs => vs.some(v => v === true)),
canPublicNote: calc('canPublicNote', vs => vs.some(v => v === true)),
+ canEditNote: calc('canEditNote', vs => vs.some(v => v === true)),
canInvite: calc('canInvite', vs => vs.some(v => v === true)),
inviteLimit: calc('inviteLimit', vs => Math.max(...vs)),
inviteLimitCycle: calc('inviteLimitCycle', vs => Math.max(...vs)),
diff --git a/packages/backend/src/core/UserFollowingService.ts b/packages/backend/src/core/UserFollowingService.ts
index 5b2b0205d9..230f6ef261 100644
--- a/packages/backend/src/core/UserFollowingService.ts
+++ b/packages/backend/src/core/UserFollowingService.ts
@@ -230,8 +230,7 @@ export class UserFollowingService implements OnModuleInit {
// 通知を作æˆ
this.notificationService.createNotification(follower.id, 'followRequestAccepted', {
- notifierId: followee.id,
- });
+ }, followee.id);
}
if (alreadyFollowed) return;
@@ -304,8 +303,7 @@ export class UserFollowingService implements OnModuleInit {
// 通知を作æˆ
this.notificationService.createNotification(followee.id, 'follow', {
- notifierId: follower.id,
- });
+ }, follower.id);
}
}
@@ -488,9 +486,8 @@ export class UserFollowingService implements OnModuleInit {
// 通知を作æˆ
this.notificationService.createNotification(followee.id, 'receiveFollowRequest', {
- notifierId: follower.id,
followRequestId: followRequest.id,
- });
+ }, follower.id);
}
if (this.userEntityService.isLocalUser(follower) && this.userEntityService.isRemoteUser(followee)) {
diff --git a/packages/backend/src/core/UserListService.ts b/packages/backend/src/core/UserListService.ts
index a71d50bba5..93dc5edbba 100644
--- a/packages/backend/src/core/UserListService.ts
+++ b/packages/backend/src/core/UserListService.ts
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Inject, Injectable } from '@nestjs/common';
+import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
+import * as Redis from 'ioredis';
import type { UserListJoiningsRepository } from '@/models/_.js';
import type { MiUser } from '@/models/User.js';
import type { MiUserList } from '@/models/UserList.js';
@@ -16,12 +17,22 @@ import { ProxyAccountService } from '@/core/ProxyAccountService.js';
import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
import { QueueService } from '@/core/QueueService.js';
+import { RedisKVCache } from '@/misc/cache.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
@Injectable()
-export class UserListService {
+export class UserListService implements OnApplicationShutdown {
public static TooManyUsersError = class extends Error {};
+ public membersCache: RedisKVCache<Set<string>>;
+
constructor(
+ @Inject(DI.redis)
+ private redisClient: Redis.Redis,
+
+ @Inject(DI.redisForSub)
+ private redisForSub: Redis.Redis,
+
@Inject(DI.userListJoiningsRepository)
private userListJoiningsRepository: UserListJoiningsRepository,
@@ -32,10 +43,48 @@ export class UserListService {
private proxyAccountService: ProxyAccountService,
private queueService: QueueService,
) {
+ this.membersCache = new RedisKVCache<Set<string>>(this.redisClient, 'userListMembers', {
+ lifetime: 1000 * 60 * 30, // 30m
+ memoryCacheLifetime: 1000 * 60, // 1m
+ fetcher: (key) => this.userListJoiningsRepository.find({ where: { userListId: key }, select: ['userId'] }).then(xs => new Set(xs.map(x => x.userId))),
+ toRedisConverter: (value) => JSON.stringify(Array.from(value)),
+ fromRedisConverter: (value) => new Set(JSON.parse(value)),
+ });
+
+ this.redisForSub.on('message', this.onMessage);
+ }
+
+ @bindThis
+ private async onMessage(_: string, data: string): Promise<void> {
+ const obj = JSON.parse(data);
+
+ if (obj.channel === 'internal') {
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
+ switch (type) {
+ case 'userListMemberAdded': {
+ const { userListId, memberId } = body;
+ const members = await this.membersCache.get(userListId);
+ if (members) {
+ members.add(memberId);
+ }
+ break;
+ }
+ case 'userListMemberRemoved': {
+ const { userListId, memberId } = body;
+ const members = await this.membersCache.get(userListId);
+ if (members) {
+ members.delete(memberId);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
}
@bindThis
- public async push(target: MiUser, list: MiUserList, me: MiUser) {
+ public async addMember(target: MiUser, list: MiUserList, me: MiUser) {
const currentCount = await this.userListJoiningsRepository.countBy({
userListId: list.id,
});
@@ -50,6 +99,7 @@ export class UserListService {
userListId: list.id,
} as MiUserListJoining);
+ this.globalEventService.publishInternalEvent('userListMemberAdded', { userListId: list.id, memberId: target.id });
this.globalEventService.publishUserListStream(list.id, 'userAdded', await this.userEntityService.pack(target));
// ã“ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å†…ã«ã“ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フォローã—ã¦ã„るユーザーãŒã„ãªãã¦ã‚‚投稿をå—ã‘å–ã‚‹ãŸã‚ã«ãƒ€ãƒŸãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ォローã—ãŸã¨ã„ã†ã“ã¨ã«ã™ã‚‹
@@ -60,4 +110,26 @@ export class UserListService {
}
}
}
+
+ @bindThis
+ public async removeMember(target: MiUser, list: MiUserList) {
+ await this.userListJoiningsRepository.delete({
+ userId: target.id,
+ userListId: list.id,
+ });
+
+ this.globalEventService.publishInternalEvent('userListMemberRemoved', { userListId: list.id, memberId: target.id });
+ this.globalEventService.publishUserListStream(list.id, 'userRemoved', await this.userEntityService.pack(target));
+ }
+
+ @bindThis
+ public dispose(): void {
+ this.redisForSub.off('message', this.onMessage);
+ this.membersCache.dispose();
+ }
+
+ @bindThis
+ public onApplicationShutdown(signal?: string | undefined): void {
+ this.dispose();
+ }
}
diff --git a/packages/backend/src/core/WebhookService.ts b/packages/backend/src/core/WebhookService.ts
index 1344f0ac97..ff70f7bc0c 100644
--- a/packages/backend/src/core/WebhookService.ts
+++ b/packages/backend/src/core/WebhookService.ts
@@ -9,7 +9,7 @@ import type { WebhooksRepository } from '@/models/_.js';
import type { MiWebhook } from '@/models/Webhook.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
-import { StreamMessages } from '@/server/api/stream/types.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
@@ -45,7 +45,7 @@ export class WebhookService implements OnApplicationShutdown {
const obj = JSON.parse(data);
if (obj.channel === 'internal') {
- const { type, body } = obj.message as StreamMessages['internal']['payload'];
+ const { type, body } = obj.message as GlobalEvents['internal']['payload'];
switch (type) {
case 'webhookCreated':
if (body.active) {
diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts
index bf42e98ce0..a024286b48 100644
--- a/packages/backend/src/core/entities/NoteEntityService.ts
+++ b/packages/backend/src/core/entities/NoteEntityService.ts
@@ -308,6 +308,7 @@ export class NoteEntityService implements OnModuleInit {
const packed: Packed<'Note'> = await awaitAll({
id: note.id,
createdAt: note.createdAt.toISOString(),
+ updatedAt: note.updatedAt ? note.updatedAt.toISOString() : undefined,
userId: note.userId,
user: this.userEntityService.pack(note.user ?? note.userId, me, {
detail: false,
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index 3dd64ce625..47fc98f479 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -452,7 +452,7 @@ export class UserEntityService implements OnModuleInit {
hasPendingReceivedFollowRequest: this.getHasPendingReceivedFollowRequest(user.id),
mutedWords: profile!.mutedWords,
mutedInstances: profile!.mutedInstances,
- mutingNotificationTypes: profile!.mutingNotificationTypes,
+ notificationRecieveConfig: profile!.notificationRecieveConfig,
emailNotificationTypes: profile!.emailNotificationTypes,
achievements: profile!.achievements,
loggedInDays: profile!.loggedInDates.length,
diff --git a/packages/backend/src/models/Note.ts b/packages/backend/src/models/Note.ts
index ed86d4549e..f396a0cd7a 100644
--- a/packages/backend/src/models/Note.ts
+++ b/packages/backend/src/models/Note.ts
@@ -24,6 +24,11 @@ export class MiNote {
})
public createdAt: Date;
+ @Column('timestamp with time zone', {
+ default: null,
+ })
+ public updatedAt: Date | null;
+
@Index()
@Column({
...id(),
diff --git a/packages/backend/src/models/UserProfile.ts b/packages/backend/src/models/UserProfile.ts
index e4405c9da7..d6d85c5609 100644
--- a/packages/backend/src/models/UserProfile.ts
+++ b/packages/backend/src/models/UserProfile.ts
@@ -8,6 +8,7 @@ import { obsoleteNotificationTypes, ffVisibility, notificationTypes } from '@/ty
import { id } from './util/id.js';
import { MiUser } from './User.js';
import { MiPage } from './Page.js';
+import { MiUserList } from './UserList.js';
// TODO: ã“ã®ãƒ†ãƒ¼ãƒ–ルã§ç®¡ç†ã—ã¦ã„る情報ã™ã¹ã¦ãƒ¬ã‚¸ã‚¹ãƒˆãƒªã§ç®¡ç†ã™ã‚‹ã‚ˆã†ã«ã—ã¦ã‚‚良ã„ã‹ã‚‚
// ãŸã ã€ã€ŒemailVerified ㌠true ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ find ã™ã‚‹ã€ã®ã‚ˆã†ãªã‚¯ã‚¨ãƒªã¯æ›¸ã‘ãªããªã‚‹ã‹ã‚‰ã‚¦ãƒ¼ãƒ³
@@ -222,16 +223,25 @@ export class MiUserProfile {
})
public mutedInstances: string[];
- @Column('enum', {
- enum: [
- ...notificationTypes,
- // マイグレーションã§å‰Šé™¤ãŒå›°é›£ãªã®ã§å¤ã„enumã¯æ®‹ã—ã¦ãŠã
- ...obsoleteNotificationTypes,
- ],
- array: true,
- default: [],
+ @Column('jsonb', {
+ default: {},
})
- public mutingNotificationTypes: typeof notificationTypes[number][];
+ public notificationRecieveConfig: {
+ [notificationType in typeof notificationTypes[number]]?: {
+ type: 'all';
+ } | {
+ type: 'never';
+ } | {
+ type: 'following';
+ } | {
+ type: 'follower';
+ } | {
+ type: 'mutualFollow';
+ } | {
+ type: 'list';
+ userListId: MiUserList['id'];
+ };
+ };
@Column('varchar', {
length: 32, array: true, default: '{}',
diff --git a/packages/backend/src/models/json-schema/note.ts b/packages/backend/src/models/json-schema/note.ts
index eb744aa109..ad0cb3c45d 100644
--- a/packages/backend/src/models/json-schema/note.ts
+++ b/packages/backend/src/models/json-schema/note.ts
@@ -17,6 +17,11 @@ export const packedNoteSchema = {
optional: false, nullable: false,
format: 'date-time',
},
+ updatedAt: {
+ type: 'string',
+ optional: true, nullable: true,
+ format: 'date-time',
+ },
deletedAt: {
type: 'string',
optional: true, nullable: true,
@@ -142,7 +147,7 @@ export const packedNoteSchema = {
isSensitive: {
type: 'boolean',
optional: true, nullable: false,
- }
+ },
},
},
},
diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts
index f15b225a30..0181ea50e8 100644
--- a/packages/backend/src/models/json-schema/user.ts
+++ b/packages/backend/src/models/json-schema/user.ts
@@ -387,13 +387,9 @@ export const packedMeDetailedOnlySchema = {
nullable: false, optional: false,
},
},
- mutingNotificationTypes: {
- type: 'array',
- nullable: true, optional: false,
- items: {
- type: 'string',
- nullable: false, optional: false,
- },
+ notificationRecieveConfig: {
+ type: 'object',
+ nullable: false, optional: false,
},
emailNotificationTypes: {
type: 'array',
diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
index 54ca1a86df..60a0d1605f 100644
--- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
@@ -101,7 +101,7 @@ export class ImportUserListsProcessorService {
if (await this.userListJoiningsRepository.findOneBy({ userListId: list!.id, userId: target.id }) != null) continue;
- this.userListService.push(target, list!, user);
+ this.userListService.addMember(target, list!, user);
} catch (e) {
this.logger.warn(`Error in line:${linenum} ${e}`);
}
diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts
index 41a11bfb19..c883c96ba2 100644
--- a/packages/backend/src/server/api/EndpointsModule.ts
+++ b/packages/backend/src/server/api/EndpointsModule.ts
@@ -258,6 +258,7 @@ import * as ep___notes_clips from './endpoints/notes/clips.js';
import * as ep___notes_conversation from './endpoints/notes/conversation.js';
import * as ep___notes_create from './endpoints/notes/create.js';
import * as ep___notes_delete from './endpoints/notes/delete.js';
+import * as ep___notes_update from './endpoints/notes/update.js';
import * as ep___notes_favorites_create from './endpoints/notes/favorites/create.js';
import * as ep___notes_favorites_delete from './endpoints/notes/favorites/delete.js';
import * as ep___notes_featured from './endpoints/notes/featured.js';
@@ -606,6 +607,7 @@ const $notes_clips: Provider = { provide: 'ep:notes/clips', useClass: ep___notes
const $notes_conversation: Provider = { provide: 'ep:notes/conversation', useClass: ep___notes_conversation.default };
const $notes_create: Provider = { provide: 'ep:notes/create', useClass: ep___notes_create.default };
const $notes_delete: Provider = { provide: 'ep:notes/delete', useClass: ep___notes_delete.default };
+const $notes_update: Provider = { provide: 'ep:notes/update', useClass: ep___notes_update.default };
const $notes_favorites_create: Provider = { provide: 'ep:notes/favorites/create', useClass: ep___notes_favorites_create.default };
const $notes_favorites_delete: Provider = { provide: 'ep:notes/favorites/delete', useClass: ep___notes_favorites_delete.default };
const $notes_featured: Provider = { provide: 'ep:notes/featured', useClass: ep___notes_featured.default };
@@ -958,6 +960,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
$notes_conversation,
$notes_create,
$notes_delete,
+ $notes_update,
$notes_favorites_create,
$notes_favorites_delete,
$notes_featured,
@@ -1304,6 +1307,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
$notes_conversation,
$notes_create,
$notes_delete,
+ $notes_update,
$notes_favorites_create,
$notes_favorites_delete,
$notes_featured,
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index ab20a708ef..b40d654f9c 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -258,6 +258,7 @@ import * as ep___notes_clips from './endpoints/notes/clips.js';
import * as ep___notes_conversation from './endpoints/notes/conversation.js';
import * as ep___notes_create from './endpoints/notes/create.js';
import * as ep___notes_delete from './endpoints/notes/delete.js';
+import * as ep___notes_update from './endpoints/notes/update.js';
import * as ep___notes_favorites_create from './endpoints/notes/favorites/create.js';
import * as ep___notes_favorites_delete from './endpoints/notes/favorites/delete.js';
import * as ep___notes_featured from './endpoints/notes/featured.js';
@@ -604,6 +605,7 @@ const eps = [
['notes/conversation', ep___notes_conversation],
['notes/create', ep___notes_create],
['notes/delete', ep___notes_delete],
+ ['notes/update', ep___notes_update],
['notes/favorites/create', ep___notes_favorites_create],
['notes/favorites/delete', ep___notes_favorites_delete],
['notes/featured', ep___notes_featured],
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/create.ts b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
index a13d08fd3a..e48dffecf4 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
@@ -8,6 +8,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import type { AdsRepository } from '@/models/_.js';
import { IdService } from '@/core/IdService.js';
import { DI } from '@/di-symbols.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
@@ -39,9 +40,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private adsRepository: AdsRepository,
private idService: IdService,
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
- await this.adsRepository.insert({
+ const ad = await this.adsRepository.insert({
id: this.idService.genId(),
createdAt: new Date(),
expiresAt: new Date(ps.expiresAt),
@@ -53,7 +55,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
ratio: ps.ratio,
place: ps.place,
memo: ps.memo,
+ }).then(r => this.adsRepository.findOneByOrFail({ id: r.identifiers[0].id }));
+
+ this.moderationLogService.log(me, 'createAd', {
+ adId: ad.id,
+ ad: ad,
});
+
+ return ad;
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
index d3c53d4f67..8097133a4c 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { AdsRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@@ -37,6 +38,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.adsRepository)
private adsRepository: AdsRepository,
+
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const ad = await this.adsRepository.findOneBy({ id: ps.id });
@@ -44,6 +47,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (ad == null) throw new ApiError(meta.errors.noSuchAd);
await this.adsRepository.delete(ad.id);
+
+ this.moderationLogService.log(me, 'deleteAd', {
+ adId: ad.id,
+ ad: ad,
+ });
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/list.ts b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
index adff3ed0ae..29eff89523 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
@@ -22,6 +22,7 @@ export const paramDef = {
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
+ publishing: { type: 'boolean', default: false },
},
required: [],
} as const;
@@ -36,6 +37,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
) {
super(meta, paramDef, async (ps, me) => {
const query = this.queryService.makePaginationQuery(this.adsRepository.createQueryBuilder('ad'), ps.sinceId, ps.untilId);
+ if (ps.publishing) {
+ query.andWhere('ad.expiresAt > :now', { now: new Date() }).andWhere('ad.startsAt <= :now', { now: new Date() });
+ }
const ads = await query.limit(ps.limit).getMany();
return ads;
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/update.ts b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
index 5b77f67e10..d065f9ec50 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { AdsRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@@ -46,6 +47,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.adsRepository)
private adsRepository: AdsRepository,
+
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const ad = await this.adsRepository.findOneBy({ id: ps.id });
@@ -63,6 +66,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
startsAt: new Date(ps.startsAt),
dayOfWeek: ps.dayOfWeek,
});
+
+ const updatedAd = await this.adsRepository.findOneByOrFail({ id: ad.id });
+
+ this.moderationLogService.log(me, 'updateAd', {
+ adId: ad.id,
+ before: ad,
+ after: updatedAd,
+ });
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/admin/invite/create.ts b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
index 7112e06bdc..2cc5ab6e35 100644
--- a/packages/backend/src/server/api/endpoints/admin/invite/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
@@ -10,6 +10,7 @@ import { InviteCodeEntityService } from '@/core/entities/InviteCodeEntityService
import { IdService } from '@/core/IdService.js';
import { DI } from '@/di-symbols.js';
import { generateInviteCode } from '@/misc/generate-invite-code.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@@ -60,6 +61,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private inviteCodeEntityService: InviteCodeEntityService,
private idService: IdService,
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
if (ps.expiresAt && isNaN(Date.parse(ps.expiresAt))) {
@@ -78,6 +80,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
const tickets = await Promise.all(ticketsPromises);
+
+ this.moderationLogService.log(me, 'createInvitation', {
+ invitations: tickets,
+ });
+
return await this.inviteCodeEntityService.packMany(tickets, me);
});
}
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 e065b99e93..3454597532 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts
@@ -81,7 +81,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
receiveAnnouncementEmail: profile.receiveAnnouncementEmail,
mutedWords: profile.mutedWords,
mutedInstances: profile.mutedInstances,
- mutingNotificationTypes: profile.mutingNotificationTypes,
+ notificationRecieveConfig: profile.notificationRecieveConfig,
isModerator: isModerator,
isSilenced: isSilenced,
isSuspended: user.isSuspended,
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index b11e091957..431bb4c60a 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -165,9 +165,7 @@ export const paramDef = {
mutedInstances: { type: 'array', items: {
type: 'string',
} },
- mutingNotificationTypes: { type: 'array', items: {
- type: 'string', enum: notificationTypes,
- } },
+ notificationRecieveConfig: { type: 'object' },
emailNotificationTypes: { type: 'array', items: {
type: 'string',
} },
@@ -248,7 +246,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
profileUpdates.enableWordMute = ps.mutedWords.length > 0;
}
if (ps.mutedInstances !== undefined) profileUpdates.mutedInstances = ps.mutedInstances;
- if (ps.mutingNotificationTypes !== undefined) profileUpdates.mutingNotificationTypes = ps.mutingNotificationTypes as typeof notificationTypes[number][];
+ if (ps.notificationRecieveConfig !== undefined) profileUpdates.notificationRecieveConfig = ps.notificationRecieveConfig;
if (typeof ps.isLocked === 'boolean') updates.isLocked = ps.isLocked;
if (typeof ps.isExplorable === 'boolean') updates.isExplorable = ps.isExplorable;
if (typeof ps.hideOnlineStatus === 'boolean') updates.hideOnlineStatus = ps.hideOnlineStatus;
diff --git a/packages/backend/src/server/api/endpoints/notes/create.test.ts b/packages/backend/src/server/api/endpoints/notes/create.test.ts
index 6d34aaccf3..bfb024bcf2 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.test.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.test.ts
@@ -34,10 +34,11 @@ describe('api:notes/create', () => {
.toBe(VALID);
});
- test('null post', () => {
- expect(v({ text: null }))
- .toBe(INVALID);
- });
+ // TODO
+ //test('null post', () => {
+ // expect(v({ text: null }))
+ // .toBe(INVALID);
+ //});
test('0 characters post', () => {
expect(v({ text: '' }))
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index 2e4d316c47..37a0525e25 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -118,7 +118,7 @@ export const paramDef = {
type: 'string',
minLength: 1,
maxLength: MAX_NOTE_TEXT_LENGTH,
- nullable: false,
+ nullable: true,
},
fileIds: {
type: 'array',
diff --git a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
index 0b3b5c902e..8784e86153 100644
--- a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
@@ -4,6 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
+import { Brackets } from 'typeorm';
import type { NotesRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { QueryService } from '@/core/QueryService.js';
@@ -40,6 +41,7 @@ export const paramDef = {
properties: {
withFiles: { type: 'boolean', default: false },
withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
@@ -88,6 +90,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (ps.withFiles) {
query.andWhere('note.fileIds != \'{}\'');
}
+
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
//#endregion
const timeline = await query.limit(ps.limit).getMany();
diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
index e9ae5dc755..9bde5dee21 100644
--- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -52,6 +52,7 @@ export const paramDef = {
includeLocalRenotes: { type: 'boolean', default: true },
withFiles: { type: 'boolean', default: false },
withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
},
required: [],
} as const;
@@ -137,6 +138,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (ps.withFiles) {
query.andWhere('note.fileIds != \'{}\'');
}
+
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
//#endregion
const timeline = await query.limit(ps.limit).getMany();
diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
index af1e0398dc..0fefddc51b 100644
--- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
@@ -42,6 +42,7 @@ export const paramDef = {
properties: {
withFiles: { type: 'boolean', default: false },
withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
fileType: { type: 'array', items: {
type: 'string',
} },
@@ -110,6 +111,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
query.andWhere('0 = (SELECT COUNT(*) FROM drive_file df WHERE df.id = ANY(note."fileIds") AND df."isSensitive" = TRUE)');
}
}
+
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
//#endregion
const timeline = await query.limit(ps.limit).getMany();
diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index 042115ab84..0d47cc1702 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -42,6 +42,7 @@ export const paramDef = {
includeLocalRenotes: { type: 'boolean', default: true },
withFiles: { type: 'boolean', default: false },
withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
},
required: [],
} as const;
@@ -126,6 +127,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (ps.withFiles) {
query.andWhere('note.fileIds != \'{}\'');
}
+
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
//#endregion
const timeline = await query.limit(ps.limit).getMany();
diff --git a/packages/backend/src/server/api/endpoints/notes/update.ts b/packages/backend/src/server/api/endpoints/notes/update.ts
new file mode 100644
index 0000000000..cdf7f085e0
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/notes/update.ts
@@ -0,0 +1,89 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import ms from 'ms';
+import { Inject, Injectable } from '@nestjs/common';
+import type { UsersRepository, NotesRepository } from '@/models/_.js';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { NoteDeleteService } from '@/core/NoteDeleteService.js';
+import { DI } from '@/di-symbols.js';
+import { GetterService } from '@/server/api/GetterService.js';
+import { GlobalEventService } from '@/core/GlobalEventService.js';
+import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
+import { ApiError } from '../../error.js';
+
+export const meta = {
+ tags: ['notes'],
+
+ requireCredential: true,
+ requireRolePolicy: 'canEditNote',
+
+ kind: 'write:notes',
+
+ limit: {
+ duration: ms('1hour'),
+ max: 10,
+ minInterval: ms('1sec'),
+ },
+
+ errors: {
+ noSuchNote: {
+ message: 'No such note.',
+ code: 'NO_SUCH_NOTE',
+ id: 'a6584e14-6e01-4ad3-b566-851e7bf0d474',
+ },
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ noteId: { type: 'string', format: 'misskey:id' },
+ text: {
+ type: 'string',
+ minLength: 1,
+ maxLength: MAX_NOTE_TEXT_LENGTH,
+ nullable: false,
+ },
+ cw: { type: 'string', nullable: true, maxLength: 100 },
+ },
+ required: ['noteId', 'text', 'cw'],
+} as const;
+
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
+ constructor(
+ @Inject(DI.usersRepository)
+ private usersRepository: UsersRepository,
+
+ @Inject(DI.notesRepository)
+ private notesRepository: NotesRepository,
+
+ private getterService: GetterService,
+ private globalEventService: GlobalEventService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const note = await this.getterService.getNote(ps.noteId).catch(err => {
+ if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote);
+ throw err;
+ });
+
+ if (note.userId !== me.id) {
+ throw new ApiError(meta.errors.noSuchNote);
+ }
+
+ await this.notesRepository.update({ id: note.id }, {
+ updatedAt: new Date(),
+ cw: ps.cw,
+ text: ps.text,
+ });
+
+ this.globalEventService.publishNoteStream(note.id, 'updated', {
+ cw: ps.cw,
+ text: ps.text,
+ });
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
index 6932073791..c20274b2ba 100644
--- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -49,6 +49,8 @@ export const paramDef = {
includeMyRenotes: { type: 'boolean', default: true },
includeRenotedMyNotes: { type: 'boolean', default: true },
includeLocalRenotes: { type: 'boolean', default: true },
+ withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
withFiles: {
type: 'boolean',
default: false,
@@ -130,6 +132,20 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}));
}
+ if (!ps.withReplies) {
+ query.andWhere('note.replyId IS NULL');
+ }
+
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
+
if (ps.withFiles) {
query.andWhere('note.fileIds != \'{}\'');
}
diff --git a/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts b/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
index fd1bb48a4e..eae55905d3 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
@@ -144,7 +144,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
try {
- await this.userListService.push(currentUser, userList, me);
+ await this.userListService.addMember(currentUser, userList, me);
} catch (err) {
if (err instanceof UserListService.TooManyUsersError) {
throw new ApiError(meta.errors.tooManyUsers);
diff --git a/packages/backend/src/server/api/endpoints/users/lists/pull.ts b/packages/backend/src/server/api/endpoints/users/lists/pull.ts
index 0b01061740..e90122224c 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/pull.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/pull.ts
@@ -4,12 +4,11 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import type { UserListsRepository, UserListJoiningsRepository } from '@/models/_.js';
+import type { UserListsRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { GetterService } from '@/server/api/GetterService.js';
-import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
+import { UserListService } from '@/core/UserListService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@@ -53,12 +52,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userListsRepository)
private userListsRepository: UserListsRepository,
- @Inject(DI.userListJoiningsRepository)
- private userListJoiningsRepository: UserListJoiningsRepository,
-
- private userEntityService: UserEntityService,
+ private userListService: UserListService,
private getterService: GetterService,
- private globalEventService: GlobalEventService,
) {
super(meta, paramDef, async (ps, me) => {
// Fetch the list
@@ -77,10 +72,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw err;
});
- // Pull the user
- await this.userListJoiningsRepository.delete({ userListId: userList.id, userId: user.id });
-
- this.globalEventService.publishUserListStream(userList.id, 'userRemoved', await this.userEntityService.pack(user));
+ await this.userListService.removeMember(user, userList);
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/users/lists/push.ts b/packages/backend/src/server/api/endpoints/users/lists/push.ts
index 9bb1a71f58..72a6a7380d 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/push.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/push.ts
@@ -127,7 +127,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
try {
- await this.userListService.push(user, userList, me);
+ await this.userListService.addMember(user, userList, me);
} catch (err) {
if (err instanceof UserListService.TooManyUsersError) {
throw new ApiError(meta.errors.tooManyUsers);
diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index 5934baef47..e660a0bb25 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -41,7 +41,8 @@ export const paramDef = {
type: 'object',
properties: {
userId: { type: 'string', format: 'misskey:id' },
- includeReplies: { type: 'boolean', default: true },
+ withReplies: { type: 'boolean', default: false },
+ withRenotes: { type: 'boolean', default: true },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
@@ -114,10 +115,20 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
}
- if (!ps.includeReplies) {
+ if (!ps.withReplies) {
query.andWhere('note.replyId IS NULL');
}
+ if (ps.withRenotes === false) {
+ query.andWhere(new Brackets(qb => {
+ qb.orWhere('note.renoteId IS NULL');
+ qb.orWhere(new Brackets(qb => {
+ qb.orWhere('note.text IS NOT NULL');
+ qb.orWhere('note.fileIds != \'{}\'');
+ }));
+ }));
+ }
+
if (ps.includeMyRenotes === false) {
query.andWhere(new Brackets(qb => {
qb.orWhere('note.userId != :userId', { userId: user.id });
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts
index fd91681fc1..a73071ea99 100644
--- a/packages/backend/src/server/api/stream/Connection.ts
+++ b/packages/backend/src/server/api/stream/Connection.ts
@@ -12,10 +12,10 @@ import type { NotificationService } from '@/core/NotificationService.js';
import { bindThis } from '@/decorators.js';
import { CacheService } from '@/core/CacheService.js';
import { MiUserProfile } from '@/models/_.js';
+import type { StreamEventEmitter, GlobalEvents } from '@/core/GlobalEventService.js';
import type { ChannelsService } from './ChannelsService.js';
import type { EventEmitter } from 'events';
import type Channel from './channel.js';
-import type { StreamEventEmitter, StreamMessages } from './types.js';
/**
* Main stream connection
@@ -122,7 +122,7 @@ export default class Connection {
}
@bindThis
- private onBroadcastMessage(data: StreamMessages['broadcast']['payload']) {
+ private onBroadcastMessage(data: GlobalEvents['broadcast']['payload']) {
this.sendMessageToWs(data.type, data.body);
}
@@ -196,7 +196,7 @@ export default class Connection {
}
@bindThis
- private async onNoteStreamMessage(data: StreamMessages['note']['payload']) {
+ private async onNoteStreamMessage(data: GlobalEvents['note']['payload']) {
this.sendMessageToWs('noteUpdated', {
id: data.body.id,
type: data.type,
diff --git a/packages/backend/src/server/api/stream/channels/antenna.ts b/packages/backend/src/server/api/stream/channels/antenna.ts
index 87648a3a77..a48e6ba5c6 100644
--- a/packages/backend/src/server/api/stream/channels/antenna.ts
+++ b/packages/backend/src/server/api/stream/channels/antenna.ts
@@ -7,8 +7,8 @@ import { Injectable } from '@nestjs/common';
import { isUserRelated } from '@/misc/is-user-related.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import Channel from '../channel.js';
-import type { StreamMessages } from '../types.js';
class AntennaChannel extends Channel {
public readonly chName = 'antenna';
@@ -35,7 +35,7 @@ class AntennaChannel extends Channel {
}
@bindThis
- private async onEvent(data: StreamMessages['antenna']['payload']) {
+ private async onEvent(data: GlobalEvents['antenna']['payload']) {
if (data.type === 'note') {
const note = await this.noteEntityService.pack(data.body.id, this.user, { detail: true });
diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts
index a33f1a956a..fef52b6856 100644
--- a/packages/backend/src/server/api/stream/channels/global-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts
@@ -19,6 +19,7 @@ class GlobalTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = false;
private withReplies: boolean;
+ private withRenotes: boolean;
constructor(
private metaService: MetaService,
@@ -37,7 +38,8 @@ class GlobalTimelineChannel extends Channel {
const policies = await this.roleService.getUserPolicies(this.user ? this.user.id : null);
if (!policies.gtlAvailable) return;
- this.withReplies = params.withReplies as boolean;
+ this.withReplies = params.withReplies ?? false;
+ this.withRenotes = params.withRenotes ?? true;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -68,6 +70,8 @@ class GlobalTimelineChannel extends Channel {
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
}
+ if (note.renote && note.text == null && (note.fileIds == null || note.fileIds.length === 0) && !this.withRenotes) return;
+
// Ignore notes from instances the user has muted
if (isInstanceMuted(note, new Set<string>(this.userProfile?.mutedInstances ?? []))) return;
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index bd8888f679..198c68e1c2 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -17,6 +17,7 @@ class HomeTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = true;
private withReplies: boolean;
+ private withRenotes: boolean;
constructor(
private noteEntityService: NoteEntityService,
@@ -30,7 +31,8 @@ class HomeTimelineChannel extends Channel {
@bindThis
public async init(params: any) {
- this.withReplies = params.withReplies as boolean;
+ this.withReplies = params.withReplies ?? false;
+ this.withRenotes = params.withRenotes ?? true;
this.subscriber.on('notesStream', this.onNote);
}
@@ -77,6 +79,8 @@ class HomeTimelineChannel extends Channel {
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
}
+ if (note.renote && note.text == null && (note.fileIds == null || note.fileIds.length === 0) && !this.withRenotes) return;
+
// æµã‚Œã¦ããŸNoteãŒãƒŸãƒ¥ãƒ¼ãƒˆã—ã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
if (isUserRelated(note, this.userIdsWhoMeMuting)) return;
// æµã‚Œã¦ããŸNoteãŒãƒ–ロックã•れã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
index 760fb8d19f..cde4297478 100644
--- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
@@ -19,6 +19,7 @@ class HybridTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = true;
private withReplies: boolean;
+ private withRenotes: boolean;
constructor(
private metaService: MetaService,
@@ -37,7 +38,8 @@ class HybridTimelineChannel extends Channel {
const policies = await this.roleService.getUserPolicies(this.user ? this.user.id : null);
if (!policies.ltlAvailable) return;
- this.withReplies = params.withReplies as boolean;
+ this.withReplies = params.withReplies ?? false;
+ this.withRenotes = params.withRenotes ?? true;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -89,6 +91,8 @@ class HybridTimelineChannel extends Channel {
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
}
+ if (note.renote && note.text == null && (note.fileIds == null || note.fileIds.length === 0) && !this.withRenotes) return;
+
// æµã‚Œã¦ããŸNoteãŒãƒŸãƒ¥ãƒ¼ãƒˆã—ã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
if (isUserRelated(note, this.userIdsWhoMeMuting)) return;
// æµã‚Œã¦ããŸNoteãŒãƒ–ロックã•れã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts
index f32f8c5cec..ef708c4fee 100644
--- a/packages/backend/src/server/api/stream/channels/local-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts
@@ -18,6 +18,7 @@ class LocalTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = false;
private withReplies: boolean;
+ private withRenotes: boolean;
constructor(
private metaService: MetaService,
@@ -36,7 +37,8 @@ class LocalTimelineChannel extends Channel {
const policies = await this.roleService.getUserPolicies(this.user ? this.user.id : null);
if (!policies.ltlAvailable) return;
- this.withReplies = params.withReplies as boolean;
+ this.withReplies = params.withReplies ?? false;
+ this.withRenotes = params.withRenotes ?? true;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -68,6 +70,8 @@ class LocalTimelineChannel extends Channel {
if (reply.userId !== this.user.id && note.userId !== this.user.id && reply.userId !== note.userId) return;
}
+ if (note.renote && note.text == null && (note.fileIds == null || note.fileIds.length === 0) && !this.withRenotes) return;
+
// æµã‚Œã¦ããŸNoteãŒãƒŸãƒ¥ãƒ¼ãƒˆã—ã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
if (isUserRelated(note, this.userIdsWhoMeMuting)) return;
// æµã‚Œã¦ããŸNoteãŒãƒ–ロックã•れã¦ã„るユーザーãŒé–¢ã‚ã‚‹ã‚‚ã®ã ã£ãŸã‚‰ç„¡è¦–ã™ã‚‹
diff --git a/packages/backend/src/server/api/stream/channels/role-timeline.ts b/packages/backend/src/server/api/stream/channels/role-timeline.ts
index 76b5875343..38d3604cc5 100644
--- a/packages/backend/src/server/api/stream/channels/role-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/role-timeline.ts
@@ -9,8 +9,8 @@ import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
+import type { GlobalEvents } from '@/core/GlobalEventService.js';
import Channel from '../channel.js';
-import { StreamMessages } from '../types.js';
class RoleTimelineChannel extends Channel {
public readonly chName = 'roleTimeline';
@@ -37,7 +37,7 @@ class RoleTimelineChannel extends Channel {
}
@bindThis
- private async onEvent(data: StreamMessages['roleTimeline']['payload']) {
+ private async onEvent(data: GlobalEvents['roleTimeline']['payload']) {
if (data.type === 'note') {
const note = data.body;
diff --git a/packages/backend/src/server/api/stream/types.ts b/packages/backend/src/server/api/stream/types.ts
deleted file mode 100644
index 90e0a61f26..0000000000
--- a/packages/backend/src/server/api/stream/types.ts
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and other misskey contributors
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-import type { MiChannel } from '@/models/Channel.js';
-import type { MiUser } from '@/models/User.js';
-import type { MiUserProfile } from '@/models/UserProfile.js';
-import type { MiNote } from '@/models/Note.js';
-import type { MiAntenna } from '@/models/Antenna.js';
-import type { MiDriveFile } from '@/models/DriveFile.js';
-import type { MiDriveFolder } from '@/models/DriveFolder.js';
-import type { MiUserList } from '@/models/UserList.js';
-import type { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
-import type { MiSignin } from '@/models/Signin.js';
-import type { MiPage } from '@/models/Page.js';
-import type { Packed } from '@/misc/json-schema.js';
-import type { MiWebhook } from '@/models/Webhook.js';
-import type { MiMeta } from '@/models/Meta.js';
-import { MiRole, MiRoleAssignment } from '@/models/_.js';
-import type Emitter from 'strict-event-emitter-types';
-import type { EventEmitter } from 'events';
-
-//#region Stream type-body definitions
-export interface InternalStreamTypes {
- userChangeSuspendedState: { id: MiUser['id']; isSuspended: MiUser['isSuspended']; };
- userTokenRegenerated: { id: MiUser['id']; oldToken: string; newToken: string; };
- remoteUserUpdated: { id: MiUser['id']; };
- follow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
- unfollow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
- blockingCreated: { blockerId: MiUser['id']; blockeeId: MiUser['id']; };
- blockingDeleted: { blockerId: MiUser['id']; blockeeId: MiUser['id']; };
- policiesUpdated: MiRole['policies'];
- roleCreated: MiRole;
- roleDeleted: MiRole;
- roleUpdated: MiRole;
- userRoleAssigned: MiRoleAssignment;
- userRoleUnassigned: MiRoleAssignment;
- webhookCreated: MiWebhook;
- webhookDeleted: MiWebhook;
- webhookUpdated: MiWebhook;
- antennaCreated: MiAntenna;
- antennaDeleted: MiAntenna;
- antennaUpdated: MiAntenna;
- metaUpdated: MiMeta;
- followChannel: { userId: MiUser['id']; channelId: MiChannel['id']; };
- unfollowChannel: { userId: MiUser['id']; channelId: MiChannel['id']; };
- updateUserProfile: MiUserProfile;
- mute: { muterId: MiUser['id']; muteeId: MiUser['id']; };
- unmute: { muterId: MiUser['id']; muteeId: MiUser['id']; };
-}
-
-export interface BroadcastTypes {
- emojiAdded: {
- emoji: Packed<'EmojiDetailed'>;
- };
- emojiUpdated: {
- emojis: Packed<'EmojiDetailed'>[];
- };
- emojiDeleted: {
- emojis: {
- id?: string;
- name: string;
- [other: string]: any;
- }[];
- };
- announcementCreated: {
- announcement: Packed<'Announcement'>;
- };
-}
-
-export interface MainStreamTypes {
- notification: Packed<'Notification'>;
- mention: Packed<'Note'>;
- reply: Packed<'Note'>;
- renote: Packed<'Note'>;
- follow: Packed<'UserDetailedNotMe'>;
- followed: Packed<'User'>;
- unfollow: Packed<'User'>;
- meUpdated: Packed<'User'>;
- pageEvent: {
- pageId: MiPage['id'];
- event: string;
- var: any;
- userId: MiUser['id'];
- user: Packed<'User'>;
- };
- urlUploadFinished: {
- marker?: string | null;
- file: Packed<'DriveFile'>;
- };
- readAllNotifications: undefined;
- unreadNotification: Packed<'Notification'>;
- unreadMention: MiNote['id'];
- readAllUnreadMentions: undefined;
- unreadSpecifiedNote: MiNote['id'];
- readAllUnreadSpecifiedNotes: undefined;
- readAllAntennas: undefined;
- unreadAntenna: MiAntenna;
- readAllAnnouncements: undefined;
- myTokenRegenerated: undefined;
- signin: MiSignin;
- registryUpdated: {
- scope?: string[];
- key: string;
- value: any | null;
- };
- driveFileCreated: Packed<'DriveFile'>;
- readAntenna: MiAntenna;
- receiveFollowRequest: Packed<'User'>;
- announcementCreated: {
- announcement: Packed<'Announcement'>;
- };
-}
-
-export interface DriveStreamTypes {
- fileCreated: Packed<'DriveFile'>;
- fileDeleted: MiDriveFile['id'];
- fileUpdated: Packed<'DriveFile'>;
- folderCreated: Packed<'DriveFolder'>;
- folderDeleted: MiDriveFolder['id'];
- folderUpdated: Packed<'DriveFolder'>;
-}
-
-export interface NoteStreamTypes {
- pollVoted: {
- choice: number;
- userId: MiUser['id'];
- };
- deleted: {
- deletedAt: Date;
- };
- reacted: {
- reaction: string;
- emoji?: {
- name: string;
- url: string;
- } | null;
- userId: MiUser['id'];
- };
- unreacted: {
- reaction: string;
- userId: MiUser['id'];
- };
-}
-type NoteStreamEventTypes = {
- [key in keyof NoteStreamTypes]: {
- id: MiNote['id'];
- body: NoteStreamTypes[key];
- };
-};
-
-export interface UserListStreamTypes {
- userAdded: Packed<'User'>;
- userRemoved: Packed<'User'>;
-}
-
-export interface AntennaStreamTypes {
- note: MiNote;
-}
-
-export interface RoleTimelineStreamTypes {
- note: Packed<'Note'>;
-}
-
-export interface AdminStreamTypes {
- newAbuseUserReport: {
- id: MiAbuseUserReport['id'];
- targetUserId: MiUser['id'],
- reporterId: MiUser['id'],
- comment: string;
- };
-}
-//#endregion
-
-// 辞書(interface or type)ã‹ã‚‰{ type, body }ユニオンを定義
-// https://stackoverflow.com/questions/49311989/can-i-infer-the-type-of-a-value-using-extends-keyof-type
-// VS Codeã®å±•開を防止ã™ã‚‹ãŸã‚ã«Events型を定義
-type Events<T extends object> = { [K in keyof T]: { type: K; body: T[K]; } };
-type EventUnionFromDictionary<
- T extends object,
- U = Events<T>
-> = U[keyof U];
-
-// redis通ã™ã¨Dateã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯stringã«å¤‰æ›ã•れるã®ã§
-export type Serialized<T> = {
- [K in keyof T]:
- T[K] extends Date
- ? string
- : T[K] extends (Date | null)
- ? (string | null)
- : T[K] extends Record<string, any>
- ? Serialized<T[K]>
- : T[K];
-};
-
-type SerializedAll<T> = {
- [K in keyof T]: Serialized<T[K]>;
-};
-
-// name/messages(spec) pairs dictionary
-export type StreamMessages = {
- internal: {
- name: 'internal';
- payload: EventUnionFromDictionary<SerializedAll<InternalStreamTypes>>;
- };
- broadcast: {
- name: 'broadcast';
- payload: EventUnionFromDictionary<SerializedAll<BroadcastTypes>>;
- };
- main: {
- name: `mainStream:${MiUser['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<MainStreamTypes>>;
- };
- drive: {
- name: `driveStream:${MiUser['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<DriveStreamTypes>>;
- };
- note: {
- name: `noteStream:${MiNote['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<NoteStreamEventTypes>>;
- };
- userList: {
- name: `userListStream:${MiUserList['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<UserListStreamTypes>>;
- };
- roleTimeline: {
- name: `roleTimelineStream:${MiRole['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<RoleTimelineStreamTypes>>;
- };
- antenna: {
- name: `antennaStream:${MiAntenna['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<AntennaStreamTypes>>;
- };
- admin: {
- name: `adminStream:${MiUser['id']}`;
- payload: EventUnionFromDictionary<SerializedAll<AdminStreamTypes>>;
- };
- notes: {
- name: 'notesStream';
- payload: Serialized<Packed<'Note'>>;
- };
-};
-
-// API event definitions
-// ストリームã”ã¨ã®Emitterã®è¾žæ›¸ã‚’用æ„
-type EventEmitterDictionary = { [x in keyof StreamMessages]: Emitter.default<EventEmitter, { [y in StreamMessages[x]['name']]: (e: StreamMessages[x]['payload']) => void }> };
-// 共用体型を交差型ã«ã™ã‚‹åž‹ https://stackoverflow.com/questions/54938141/typescript-convert-union-to-intersection
-type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
-// Emitter辞書ã‹ã‚‰å…±ç”¨ä½“型を作りã€UnionToIntersectionã§äº¤å·®åž‹ã«ã™ã‚‹
-export type StreamEventEmitter = UnionToIntersection<EventEmitterDictionary[keyof StreamMessages]>;
-// { [y in name]: (e: spec) => void }ã‚’ã¾ã¨ã‚ã¦ãã®äº¤å·®åž‹ã‚’Emitterã«ã‹ã‘ã‚‹ã¨ts(2590)ã«ã²ã£ã‹ã‹ã‚‹
-
-// provide stream channels union
-export type StreamChannels = StreamMessages[keyof StreamMessages]['name'];
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index 1faff24201..5c13c2c870 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -188,7 +188,7 @@ export class ClientServerService {
// Authenticate
fastify.addHook('onRequest', async (request, reply) => {
// %71ueueã¨ã‹ã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã•れãŸã‚‰å›°ã‚‹ãŸã‚
- const url = decodeURI(request.url);
+ const url = decodeURI(request.routerPath);
if (url === bullBoardPath || url.startsWith(bullBoardPath + '/')) {
const token = request.cookies.token;
if (token == null) {
@@ -728,8 +728,8 @@ export class ClientServerService {
fastify.setErrorHandler(async (error, request, reply) => {
const errId = randomUUID();
- this.clientLoggerService.logger.error(`Internal error occurred in ${request.routerPath}: ${error.message}`, {
- path: request.routerPath,
+ this.clientLoggerService.logger.error(`Internal error occurred in ${request.routeOptions.url}: ${error.message}`, {
+ path: request.routeOptions.url,
params: request.params,
query: request.query,
code: error.name,
diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug
index 71bcf9462f..9b6c671cad 100644
--- a/packages/backend/src/server/web/views/base.pug
+++ b/packages/backend/src/server/web/views/base.pug
@@ -35,7 +35,7 @@ html
link(rel='prefetch' href=infoImageUrl)
link(rel='prefetch' href=notFoundImageUrl)
//- https://github.com/misskey-dev/misskey/issues/9842
- link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.35.0')
+ link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.37.0')
link(rel='modulepreload' href=`/vite/${clientEntry.file}`)
if !config.clientManifestExists
diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts
index 35ea710f9e..a9b9a55bc0 100644
--- a/packages/backend/src/types.ts
+++ b/packages/backend/src/types.ts
@@ -56,6 +56,10 @@ export const moderationLogTypes = [
'markSensitiveDriveFile',
'unmarkSensitiveDriveFile',
'resolveAbuseReport',
+ 'createInvitation',
+ 'createAd',
+ 'updateAd',
+ 'deleteAd',
] as const;
export type ModerationLogPayloads = {
@@ -198,4 +202,31 @@ export type ModerationLogPayloads = {
report: any;
forwarded: boolean;
};
+ createInvitation: {
+ invitations: any[];
+ };
+ createAd: {
+ adId: string;
+ ad: any;
+ };
+ updateAd: {
+ adId: string;
+ before: any;
+ after: any;
+ };
+ deleteAd: {
+ adId: string;
+ ad: any;
+ };
+};
+
+export type Serialized<T> = {
+ [K in keyof T]:
+ T[K] extends Date
+ ? string
+ : T[K] extends (Date | null)
+ ? (string | null)
+ : T[K] extends Record<string, any>
+ ? Serialized<T[K]>
+ : T[K];
};
diff --git a/packages/backend/test/e2e/users.ts b/packages/backend/test/e2e/users.ts
index 0b3f200260..2a3a694cf5 100644
--- a/packages/backend/test/e2e/users.ts
+++ b/packages/backend/test/e2e/users.ts
@@ -166,7 +166,7 @@ describe('ユーザー', () => {
unreadAnnouncements: user.unreadAnnouncements,
mutedWords: user.mutedWords,
mutedInstances: user.mutedInstances,
- mutingNotificationTypes: user.mutingNotificationTypes,
+ notificationRecieveConfig: user.notificationRecieveConfig,
emailNotificationTypes: user.emailNotificationTypes,
achievements: user.achievements,
loggedInDays: user.loggedInDays,
@@ -414,7 +414,7 @@ describe('ユーザー', () => {
assert.deepStrictEqual(response.unreadAnnouncements, []);
assert.deepStrictEqual(response.mutedWords, []);
assert.deepStrictEqual(response.mutedInstances, []);
- assert.deepStrictEqual(response.mutingNotificationTypes, []);
+ assert.deepStrictEqual(response.notificationRecieveConfig, {});
assert.deepStrictEqual(response.emailNotificationTypes, ['follow', 'receiveFollowRequest']);
assert.deepStrictEqual(response.achievements, []);
assert.deepStrictEqual(response.loggedInDays, 0);
@@ -495,8 +495,8 @@ describe('ユーザー', () => {
{ parameters: (): object => ({ mutedWords: [] }) },
{ parameters: (): object => ({ mutedInstances: ['xxxx.xxxxx'] }) },
{ parameters: (): object => ({ mutedInstances: [] }) },
- { parameters: (): object => ({ mutingNotificationTypes: ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] }) },
- { parameters: (): object => ({ mutingNotificationTypes: [] }) },
+ { parameters: (): object => ({ notificationRecieveConfig: { mention: { type: 'following' } } }) },
+ { parameters: (): object => ({ notificationRecieveConfig: {} }) },
{ parameters: (): object => ({ emailNotificationTypes: ['mention', 'reply', 'quote', 'follow', 'receiveFollowRequest'] }) },
{ parameters: (): object => ({ emailNotificationTypes: [] }) },
] as const)('ã‚’æ›¸ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã‚‹($#)', async ({ parameters }) => {
diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html
index ed38e49647..36ff34b48a 100644
--- a/packages/frontend/.storybook/preview-head.html
+++ b/packages/frontend/.storybook/preview-head.html
@@ -1,6 +1,6 @@
<link rel="preload" href="https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true" as="image" type="image/png" crossorigin="anonymous">
<link rel="preload" href="https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/fedi.jpg?raw=true" as="image" type="image/jpeg" crossorigin="anonymous">
-<link rel="stylesheet" href="https://unpkg.com/@tabler/icons-webfont@2.32.0/tabler-icons.min.css">
+<link rel="stylesheet" href="https://unpkg.com/@tabler/icons-webfont@2.37.0/tabler-icons.min.css">
<link rel="stylesheet" href="https://unpkg.com/@fontsource/m-plus-rounded-1c/index.css">
<style>
html {
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index f579da3cbb..1f704cd258 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -23,7 +23,7 @@
"@rollup/plugin-replace": "5.0.2",
"@rollup/pluginutils": "5.0.4",
"@syuilo/aiscript": "0.16.0",
- "@tabler/icons-webfont": "2.35.0",
+ "@tabler/icons-webfont": "2.37.0",
"@vitejs/plugin-vue": "4.3.4",
"@vue-macros/reactivity-transform": "0.3.23",
"@vue/compiler-sfc": "3.3.4",
@@ -32,7 +32,7 @@
"broadcast-channel": "5.3.0",
"browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3",
"buraha": "0.0.1",
- "canvas-confetti": "1.6.0",
+ "canvas-confetti": "1.6.1",
"chart.js": "4.4.0",
"chartjs-adapter-date-fns": "3.0.0",
"chartjs-chart-matrix": "2.0.1",
@@ -43,7 +43,7 @@
"cropperjs": "2.0.0-beta.4",
"date-fns": "2.30.0",
"escape-regexp": "0.0.1",
- "estree-walker": "^3.0.3",
+ "estree-walker": "3.0.3",
"eventemitter3": "5.0.1",
"gsap": "3.12.2",
"idb-keyval": "6.2.1",
@@ -57,12 +57,12 @@
"prismjs": "1.29.0",
"punycode": "2.3.0",
"querystring": "0.2.1",
- "rollup": "3.29.2",
+ "rollup": "3.29.4",
"sanitize-html": "2.11.0",
"sass": "1.68.0",
"strict-event-emitter-types": "2.0.0",
"textarea-caret": "3.1.0",
- "three": "0.156.1",
+ "three": "0.157.0",
"throttle-debounce": "5.0.0",
"tinycolor2": "1.6.0",
"tsc-alias": "1.8.8",
@@ -70,7 +70,7 @@
"twemoji-parser": "14.0.0",
"typescript": "5.2.2",
"uuid": "9.0.1",
- "v-code-diff": "^1.7.1",
+ "v-code-diff": "1.7.1",
"vanilla-tilt": "1.8.1",
"vite": "4.4.9",
"vue": "3.3.4",
@@ -78,44 +78,44 @@
"vuedraggable": "next"
},
"devDependencies": {
- "@storybook/addon-actions": "7.4.4",
- "@storybook/addon-essentials": "7.4.4",
- "@storybook/addon-interactions": "7.4.4",
- "@storybook/addon-links": "7.4.4",
- "@storybook/addon-storysource": "7.4.4",
- "@storybook/addons": "7.4.4",
- "@storybook/blocks": "7.4.4",
- "@storybook/core-events": "7.4.4",
+ "@storybook/addon-actions": "7.4.5",
+ "@storybook/addon-essentials": "7.4.5",
+ "@storybook/addon-interactions": "7.4.5",
+ "@storybook/addon-links": "7.4.5",
+ "@storybook/addon-storysource": "7.4.5",
+ "@storybook/addons": "7.4.5",
+ "@storybook/blocks": "7.4.5",
+ "@storybook/core-events": "7.4.5",
"@storybook/jest": "0.2.2",
- "@storybook/manager-api": "7.4.4",
- "@storybook/preview-api": "7.4.4",
- "@storybook/react": "7.4.4",
- "@storybook/react-vite": "7.4.4",
+ "@storybook/manager-api": "7.4.5",
+ "@storybook/preview-api": "7.4.5",
+ "@storybook/react": "7.4.5",
+ "@storybook/react-vite": "7.4.5",
"@storybook/testing-library": "0.2.1",
- "@storybook/theming": "7.4.4",
- "@storybook/types": "7.4.4",
- "@storybook/vue3": "7.4.4",
- "@storybook/vue3-vite": "7.4.4",
+ "@storybook/theming": "7.4.5",
+ "@storybook/types": "7.4.5",
+ "@storybook/vue3": "7.4.5",
+ "@storybook/vue3-vite": "7.4.5",
"@testing-library/vue": "7.0.0",
"@types/escape-regexp": "0.0.1",
"@types/estree": "1.0.2",
- "@types/matter-js": "0.19.0",
- "@types/micromatch": "4.0.2",
- "@types/node": "20.6.4",
+ "@types/matter-js": "0.19.1",
+ "@types/micromatch": "4.0.3",
+ "@types/node": "20.7.1",
"@types/punycode": "2.1.0",
- "@types/sanitize-html": "2.9.0",
+ "@types/sanitize-html": "2.9.1",
"@types/throttle-debounce": "5.0.0",
"@types/tinycolor2": "1.4.4",
"@types/uuid": "9.0.4",
- "@types/websocket": "1.0.6",
- "@types/ws": "8.5.5",
- "@typescript-eslint/eslint-plugin": "6.7.2",
- "@typescript-eslint/parser": "6.7.2",
+ "@types/websocket": "1.0.7",
+ "@types/ws": "8.5.6",
+ "@typescript-eslint/eslint-plugin": "6.7.3",
+ "@typescript-eslint/parser": "6.7.3",
"@vitest/coverage-v8": "0.34.5",
"@vue/runtime-core": "3.3.4",
"acorn": "8.10.0",
"cross-env": "7.0.3",
- "cypress": "13.2.0",
+ "cypress": "13.3.0",
"eslint": "8.50.0",
"eslint-plugin-import": "2.28.1",
"eslint-plugin-vue": "9.17.0",
@@ -129,13 +129,13 @@
"react": "18.2.0",
"react-dom": "18.2.0",
"start-server-and-test": "2.0.1",
- "storybook": "7.4.4",
+ "storybook": "7.4.5",
"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
"summaly": "github:misskey-dev/summaly",
"vite-plugin-turbosnap": "1.0.3",
"vitest": "0.34.5",
"vitest-fetch-mock": "0.2.2",
"vue-eslint-parser": "9.3.1",
- "vue-tsc": "1.8.13"
+ "vue-tsc": "1.8.15"
}
}
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index 06663d0477..ab8886e8ba 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -93,6 +93,9 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
<footer>
<div :class="$style.noteFooterInfo">
+ <div v-if="appearNote.updatedAt">
+ {{ i18n.ts.edited }}: <MkTime :time="appearNote.updatedAt" mode="detail"/>
+ </div>
<MkA :to="notePage(appearNote)">
<MkTime :time="appearNote.createdAt" mode="detail"/>
</MkA>
diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue
index dda7238d27..05f98c638e 100644
--- a/packages/frontend/src/components/MkNoteHeader.vue
+++ b/packages/frontend/src/components/MkNoteHeader.vue
@@ -14,6 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<img v-for="role in note.user.badgeRoles" :key="role.id" v-tooltip="role.name" :class="$style.badgeRole" :src="role.iconUrl"/>
</div>
<div :class="$style.info">
+ <span v-if="note.updatedAt" style="margin-right: 0.5em;" :title="i18n.ts.edited"><i class="ti ti-pencil"></i></span>
<MkA :to="notePage(note)">
<MkTime :time="note.createdAt"/>
</MkA>
diff --git a/packages/frontend/src/components/MkNotificationSelectWindow.vue b/packages/frontend/src/components/MkNotificationSelectWindow.vue
new file mode 100644
index 0000000000..3d5a56975b
--- /dev/null
+++ b/packages/frontend/src/components/MkNotificationSelectWindow.vue
@@ -0,0 +1,78 @@
+<!--
+SPDX-FileCopyrightText: syuilo and other misskey contributors
+SPDX-License-Identifier: AGPL-3.0-only
+-->
+
+<template>
+<MkModalWindow
+ ref="dialog"
+ :width="400"
+ :height="450"
+ :withOkButton="true"
+ :okButtonDisabled="false"
+ @ok="ok()"
+ @close="dialog?.close()"
+ @closed="emit('closed')"
+>
+ <template #header>{{ i18n.ts.notificationSetting }}</template>
+
+ <MkSpacer :marginMin="20" :marginMax="28">
+ <div class="_gaps_m">
+ <MkInfo>{{ i18n.ts.notificationSettingDesc }}</MkInfo>
+ <div class="_buttons">
+ <MkButton inline @click="disableAll">{{ i18n.ts.disableAll }}</MkButton>
+ <MkButton inline @click="enableAll">{{ i18n.ts.enableAll }}</MkButton>
+ </div>
+ <MkSwitch v-for="ntype in notificationTypes" :key="ntype" v-model="typesMap[ntype].value">{{ i18n.t(`_notification._types.${ntype}`) }}</MkSwitch>
+ </div>
+ </MkSpacer>
+</MkModalWindow>
+</template>
+
+<script lang="ts" setup>
+import { ref, Ref } from 'vue';
+import MkSwitch from './MkSwitch.vue';
+import MkInfo from './MkInfo.vue';
+import MkButton from './MkButton.vue';
+import MkModalWindow from '@/components/MkModalWindow.vue';
+import { notificationTypes } from '@/const.js';
+import { i18n } from '@/i18n.js';
+
+type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>
+
+const emit = defineEmits<{
+ (ev: 'done', v: { excludeTypes: string[] }): void,
+ (ev: 'closed'): void,
+}>();
+
+const props = withDefaults(defineProps<{
+ excludeTypes?: typeof notificationTypes[number][];
+}>(), {
+ excludeTypes: () => [],
+});
+
+const dialog = $shallowRef<InstanceType<typeof MkModalWindow>>();
+
+const typesMap: TypesMap = notificationTypes.reduce((p, t) => ({ ...p, [t]: ref<boolean>(!props.excludeTypes.includes(t)) }), {} as any);
+
+function ok() {
+ emit('done', {
+ excludeTypes: (Object.keys(typesMap) as typeof notificationTypes[number][])
+ .filter(type => !typesMap[type].value),
+ });
+
+ if (dialog) dialog.close();
+}
+
+function disableAll() {
+ for (const type of notificationTypes) {
+ typesMap[type].value = false;
+ }
+}
+
+function enableAll() {
+ for (const type of notificationTypes) {
+ typesMap[type].value = true;
+ }
+}
+</script>
diff --git a/packages/frontend/src/components/MkNotificationSettingWindow.vue b/packages/frontend/src/components/MkNotificationSettingWindow.vue
deleted file mode 100644
index a25914b214..0000000000
--- a/packages/frontend/src/components/MkNotificationSettingWindow.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
-SPDX-FileCopyrightText: syuilo and other misskey contributors
-SPDX-License-Identifier: AGPL-3.0-only
--->
-
-<template>
-<MkModalWindow
- ref="dialog"
- :width="400"
- :height="450"
- :withOkButton="true"
- :okButtonDisabled="false"
- @ok="ok()"
- @close="dialog?.close()"
- @closed="emit('closed')"
->
- <template #header>{{ i18n.ts.notificationSetting }}</template>
-
- <MkSpacer :marginMin="20" :marginMax="28">
- <div class="_gaps_m">
- <template v-if="showGlobalToggle">
- <MkSwitch v-model="useGlobalSetting">
- {{ i18n.ts.useGlobalSetting }}
- <template #caption>{{ i18n.ts.useGlobalSettingDesc }}</template>
- </MkSwitch>
- </template>
- <template v-if="!useGlobalSetting">
- <MkInfo>{{ i18n.ts.notificationSettingDesc }}</MkInfo>
- <div class="_buttons">
- <MkButton inline @click="disableAll">{{ i18n.ts.disableAll }}</MkButton>
- <MkButton inline @click="enableAll">{{ i18n.ts.enableAll }}</MkButton>
- </div>
- <MkSwitch v-for="ntype in notificationTypes" :key="ntype" v-model="typesMap[ntype].value">{{ i18n.t(`_notification._types.${ntype}`) }}</MkSwitch>
- </template>
- </div>
- </MkSpacer>
-</MkModalWindow>
-</template>
-
-<script lang="ts" setup>
-import { ref, Ref } from 'vue';
-import MkSwitch from './MkSwitch.vue';
-import MkInfo from './MkInfo.vue';
-import MkButton from './MkButton.vue';
-import MkModalWindow from '@/components/MkModalWindow.vue';
-import { notificationTypes } from '@/const';
-import { i18n } from '@/i18n.js';
-
-type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>
-
-const emit = defineEmits<{
- (ev: 'done', v: { includingTypes: string[] | null }): void,
- (ev: 'closed'): void,
-}>();
-
-const props = withDefaults(defineProps<{
- includingTypes?: typeof notificationTypes[number][] | null;
- showGlobalToggle?: boolean;
-}>(), {
- includingTypes: () => [],
- showGlobalToggle: true,
-});
-
-let includingTypes = $computed(() => props.includingTypes?.filter(x => notificationTypes.includes(x)) ?? []);
-
-const dialog = $shallowRef<InstanceType<typeof MkModalWindow>>();
-
-const typesMap: TypesMap = notificationTypes.reduce((p, t) => ({ ...p, [t]: ref<boolean>(includingTypes.includes(t)) }), {} as any);
-let useGlobalSetting = $ref((includingTypes === null || includingTypes.length === 0) && props.showGlobalToggle);
-
-function ok() {
- if (useGlobalSetting) {
- emit('done', { includingTypes: null });
- } else {
- emit('done', {
- includingTypes: (Object.keys(typesMap) as typeof notificationTypes[number][])
- .filter(type => typesMap[type].value),
- });
- }
-
- if (dialog) dialog.close();
-}
-
-function disableAll() {
- for (const type of notificationTypes) {
- typesMap[type].value = false;
- }
-}
-
-function enableAll() {
- for (const type of notificationTypes) {
- typesMap[type].value = true;
- }
-}
-</script>
diff --git a/packages/frontend/src/components/MkNotifications.vue b/packages/frontend/src/components/MkNotifications.vue
index ad1cb92ce1..6ba2e513c5 100644
--- a/packages/frontend/src/components/MkNotifications.vue
+++ b/packages/frontend/src/components/MkNotifications.vue
@@ -30,11 +30,11 @@ import MkNote from '@/components/MkNote.vue';
import { useStream } from '@/stream.js';
import { $i } from '@/account.js';
import { i18n } from '@/i18n.js';
-import { notificationTypes } from '@/const';
+import { notificationTypes } from '@/const.js';
import { infoImageUrl } from '@/instance.js';
const props = defineProps<{
- includeTypes?: typeof notificationTypes[number][];
+ excludeTypes?: typeof notificationTypes[number][];
}>();
const pagingComponent = shallowRef<InstanceType<typeof MkPagination>>();
@@ -43,13 +43,12 @@ const pagination: Paging = {
endpoint: 'i/notifications' as const,
limit: 10,
params: computed(() => ({
- includeTypes: props.includeTypes ?? undefined,
- excludeTypes: props.includeTypes ? undefined : $i.mutingNotificationTypes,
+ excludeTypes: props.excludeTypes ?? undefined,
})),
};
const onNotification = (notification) => {
- const isMuted = props.includeTypes ? !props.includeTypes.includes(notification.type) : $i.mutingNotificationTypes.includes(notification.type);
+ const isMuted = props.excludeTypes ? props.excludeTypes.includes(notification.type) : false;
if (isMuted || document.visibilityState === 'visible') {
useStream().send('readNotification');
}
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index 2b4dcc8ed4..b82ca3ef19 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -143,6 +143,7 @@ const props = withDefaults(defineProps<{
fixed?: boolean;
autofocus?: boolean;
freezeAfterPosted?: boolean;
+ updateMode?: boolean;
}>(), {
initialVisibleUsers: () => [],
autofocus: true,
@@ -698,17 +699,18 @@ async function post(ev?: MouseEvent) {
}
let postData = {
- text: text === '' ? undefined : text,
+ text: text === '' ? null : text,
fileIds: files.length > 0 ? files.map(f => f.id) : undefined,
replyId: props.reply ? props.reply.id : undefined,
renoteId: props.renote ? props.renote.id : quoteId ? quoteId : undefined,
channelId: props.channel ? props.channel.id : undefined,
poll: poll,
- cw: useCw ? cw ?? '' : undefined,
+ cw: useCw ? cw ?? '' : null,
localOnly: localOnly,
visibility: visibility,
visibleUserIds: visibility === 'specified' ? visibleUsers.map(u => u.id) : undefined,
reactionAcceptance,
+ noteId: props.updateMode ? props.initialNote?.id : undefined,
};
if (withHashtags && hashtags && hashtags.trim() !== '') {
@@ -731,7 +733,7 @@ async function post(ev?: MouseEvent) {
}
posting = true;
- os.api('notes/create', postData, token).then(() => {
+ os.api(props.updateMode ? 'notes/update' : 'notes/create', postData, token).then(() => {
if (props.freezeAfterPosted) {
posted = true;
} else {
@@ -819,8 +821,10 @@ function showActions(ev) {
action: () => {
action.handler({
text: text,
+ cw: cw,
}, (key, value) => {
if (key === 'text') { text = value; }
+ if (key === 'cw') { useCw = value !== null; cw = value; }
});
},
})), ev.currentTarget ?? ev.target);
diff --git a/packages/frontend/src/components/MkPostFormDialog.vue b/packages/frontend/src/components/MkPostFormDialog.vue
index c07a166a83..f33d498f93 100644
--- a/packages/frontend/src/components/MkPostFormDialog.vue
+++ b/packages/frontend/src/components/MkPostFormDialog.vue
@@ -30,6 +30,7 @@ const props = defineProps<{
instant?: boolean;
fixed?: boolean;
autofocus?: boolean;
+ updateMode?: boolean;
}>();
const emit = defineEmits<{
diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue
index d6712e7606..1dcafd6be1 100644
--- a/packages/frontend/src/components/MkTimeline.vue
+++ b/packages/frontend/src/components/MkTimeline.vue
@@ -15,14 +15,21 @@ import * as sound from '@/scripts/sound.js';
import { $i } from '@/account.js';
import { defaultStore } from '@/store.js';
-const props = defineProps<{
+const props = withDefaults(defineProps<{
src: string;
list?: string;
antenna?: string;
channel?: string;
role?: string;
sound?: boolean;
-}>();
+ withRenotes?: boolean;
+ withReplies?: boolean;
+ onlyFiles?: boolean;
+}>(), {
+ withRenotes: true,
+ withReplies: false,
+ onlyFiles: false,
+});
const emit = defineEmits<{
(ev: 'note'): void;
@@ -62,10 +69,14 @@ if (props.src === 'antenna') {
} else if (props.src === 'home') {
endpoint = 'notes/timeline';
query = {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
};
connection = stream.useChannel('homeTimeline', {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
});
connection.on('note', prepend);
@@ -73,28 +84,40 @@ if (props.src === 'antenna') {
} else if (props.src === 'local') {
endpoint = 'notes/local-timeline';
query = {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
};
connection = stream.useChannel('localTimeline', {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
});
connection.on('note', prepend);
} else if (props.src === 'social') {
endpoint = 'notes/hybrid-timeline';
query = {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
};
connection = stream.useChannel('hybridTimeline', {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
});
connection.on('note', prepend);
} else if (props.src === 'global') {
endpoint = 'notes/global-timeline';
query = {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
};
connection = stream.useChannel('globalTimeline', {
- withReplies: defaultStore.state.showTimelineReplies,
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
});
connection.on('note', prepend);
} else if (props.src === 'mentions') {
@@ -116,9 +139,15 @@ if (props.src === 'antenna') {
} else if (props.src === 'list') {
endpoint = 'notes/user-list-timeline';
query = {
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
listId: props.list,
};
connection = stream.useChannel('userList', {
+ withRenotes: props.withRenotes,
+ withReplies: props.withReplies,
+ withFiles: props.onlyFiles ? true : undefined,
listId: props.list,
});
connection.on('note', prepend);
diff --git a/packages/frontend/src/components/MkVisitorDashboard.vue b/packages/frontend/src/components/MkVisitorDashboard.vue
index 7a8d7e6109..e4520bbb2d 100644
--- a/packages/frontend/src/components/MkVisitorDashboard.vue
+++ b/packages/frontend/src/components/MkVisitorDashboard.vue
@@ -114,8 +114,7 @@ function showMenu(ev) {
}
function exploreOtherServers() {
- // TODO: 言語をよã—ãªã«
- window.open('https://join.misskey.page/ja-JP/instances', '_blank');
+ window.open('https://join.misskey.page/instances', '_blank');
}
</script>
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index ef8bfbbbfc..580816abaa 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -45,7 +45,7 @@ import { onMounted, onUnmounted, ref, inject } from 'vue';
import tinycolor from 'tinycolor2';
import XTabs, { Tab } from './MkPageHeader.tabs.vue';
import { scrollToTop } from '@/scripts/scroll.js';
-import { globalEvents } from '@/events';
+import { globalEvents } from '@/events.js';
import { injectPageMetadata } from '@/scripts/page-metadata.js';
import { $i, openAccountMenu as openAccountMenu_ } from '@/account.js';
diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts
index 15038b1063..9fd6d40d72 100644
--- a/packages/frontend/src/const.ts
+++ b/packages/frontend/src/const.ts
@@ -61,6 +61,7 @@ export const ROLE_POLICIES = [
'gtlAvailable',
'ltlAvailable',
'canPublicNote',
+ 'canEditNote',
'canInvite',
'inviteLimit',
'inviteLimitCycle',
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index 8aed5797e1..8093335a28 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -5,8 +5,8 @@
// TODO: ãªã‚“ã§ã‚‚ã‹ã‚“ã§ã‚‚os.tsã«çªã£è¾¼ã‚€ã®ã‚„ã‚ãŸã„ã®ã§ã‚ˆã—ãªã«åˆ†å‰²ã™ã‚‹
-import { pendingApiRequestsCount, api, apiGet } from '@/scripts/api.js';
-export { pendingApiRequestsCount, api, apiGet };
+import { pendingApiRequestsCount, api, apiExternal, apiGet } from '@/scripts/api.js';
+export { pendingApiRequestsCount, api, apiExternal, apiGet };
import { Component, markRaw, Ref, ref, defineAsyncComponent } from 'vue';
import { EventEmitter } from 'eventemitter3';
import insertTextAtCursor from 'insert-text-at-cursor';
diff --git a/packages/frontend/src/pages/admin/ads.vue b/packages/frontend/src/pages/admin/ads.vue
index cd9d86ca45..6aa0cf0427 100644
--- a/packages/frontend/src/pages/admin/ads.vue
+++ b/packages/frontend/src/pages/admin/ads.vue
@@ -5,11 +5,16 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<MkStickyContainer>
- <template #header><XHeader :actions="headerActions" :tabs="headerTabs"/></template>
+ <template #header>
+ <XHeader :actions="headerActions" :tabs="headerTabs" />
+ </template>
<MkSpacer :contentMax="900">
+ <MkSwitch :modelValue="publishing" @update:modelValue="onChangePublishing">
+ {{ i18n.ts.publishing }}
+ </MkSwitch>
<div>
<div v-for="ad in ads" class="_panel _gaps_m" :class="$style.ad">
- <MkAd v-if="ad.url" :specify="ad"/>
+ <MkAd v-if="ad.url" :specify="ad" />
<MkInput v-model="ad.url" type="url">
<template #label>URL</template>
</MkInput>
@@ -46,7 +51,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<span>
{{ i18n.ts._ad.timezoneinfo }}
<div v-for="(day, index) in daysOfWeek" :key="index">
- <input :id="`ad${ad.id}-${index}`" type="checkbox" :checked="(ad.dayOfWeek & (1 << index)) !== 0" @change="toggleDayOfWeek(ad, index)">
+ <input :id="`ad${ad.id}-${index}`" type="checkbox" :checked="(ad.dayOfWeek & (1 << index)) !== 0"
+ @change="toggleDayOfWeek(ad, index)">
<label :for="`ad${ad.id}-${index}`">{{ day }}</label>
</div>
</span>
@@ -55,8 +61,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #label>{{ i18n.ts.memo }}</template>
</MkTextarea>
<div class="buttons">
- <MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton>
- <MkButton class="button" inline danger @click="remove(ad)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton>
+ <MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i
+ class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton>
+ <MkButton class="button" inline danger @click="remove(ad)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}
+ </MkButton>
</div>
</div>
<MkButton class="button" @click="more()">
@@ -75,6 +83,7 @@ import MkInput from '@/components/MkInput.vue';
import MkTextarea from '@/components/MkTextarea.vue';
import MkRadios from '@/components/MkRadios.vue';
import MkFolder from '@/components/MkFolder.vue';
+import MkSwitch from '@/components/MkSwitch.vue';
import FormSplit from '@/components/form/split.vue';
import * as os from '@/os.js';
import { i18n } from '@/i18n.js';
@@ -86,8 +95,9 @@ let ads: any[] = $ref([]);
const localTime = new Date();
const localTimeDiff = localTime.getTimezoneOffset() * 60 * 1000;
const daysOfWeek: string[] = [i18n.ts._weekday.sunday, i18n.ts._weekday.monday, i18n.ts._weekday.tuesday, i18n.ts._weekday.wednesday, i18n.ts._weekday.thursday, i18n.ts._weekday.friday, i18n.ts._weekday.saturday];
+let publishing = false;
-os.api('admin/ad/list').then(adsResponse => {
+os.api('admin/ad/list', { publishing: publishing }).then(adsResponse => {
ads = adsResponse.map(r => {
const exdate = new Date(r.expiresAt);
const stdate = new Date(r.startsAt);
@@ -101,6 +111,10 @@ os.api('admin/ad/list').then(adsResponse => {
});
});
+const onChangePublishing = (v) => {
+ publishing = v;
+ refresh();
+};
// é¸æŠžã•ã‚ŒãŸæ›œæ—¥(index)ã®ãƒ“ットフラグをæ“作ã™ã‚‹
function toggleDayOfWeek(ad, index) {
ad.dayOfWeek ^= 1 << index;
@@ -131,6 +145,8 @@ function remove(ad) {
if (ad.id == null) return;
os.apiWithDialog('admin/ad/delete', {
id: ad.id,
+ }).then(() => {
+ refresh();
});
});
}
@@ -172,7 +188,7 @@ function save(ad) {
}
}
function more() {
- os.api('admin/ad/list', { untilId: ads.reduce((acc, ad) => ad.id != null ? ad : acc).id }).then(adsResponse => {
+ os.api('admin/ad/list', { untilId: ads.reduce((acc, ad) => ad.id != null ? ad : acc).id, publishing: publishing }).then(adsResponse => {
ads = ads.concat(adsResponse.map(r => {
const exdate = new Date(r.expiresAt);
const stdate = new Date(r.startsAt);
@@ -188,7 +204,7 @@ function more() {
}
function refresh() {
- os.api('admin/ad/list').then(adsResponse => {
+ os.api('admin/ad/list', { publishing: publishing }).then(adsResponse => {
ads = adsResponse.map(r => {
const exdate = new Date(r.expiresAt);
const stdate = new Date(r.startsAt);
diff --git a/packages/frontend/src/pages/admin/modlog.ModLog.vue b/packages/frontend/src/pages/admin/modlog.ModLog.vue
index 14f94479f1..99b8544f33 100644
--- a/packages/frontend/src/pages/admin/modlog.ModLog.vue
+++ b/packages/frontend/src/pages/admin/modlog.ModLog.vue
@@ -6,7 +6,13 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<MkFolder>
<template #label>
- <b>{{ i18n.ts._moderationLogTypes[log.type] }}</b>
+ <b
+ :class="{
+ [$style.logGreen]: ['createRole', 'addCustomEmoji', 'createGlobalAnnouncement', 'createUserAnnouncement', 'createAd', 'createInvitation'].includes(log.type),
+ [$style.logYellow]: ['markSensitiveDriveFile', 'resetPassword'].includes(log.type),
+ [$style.logRed]: ['suspend', 'deleteRole', 'suspendRemoteInstance', 'deleteGlobalAnnouncement', 'deleteUserAnnouncement', 'deleteCustomEmoji', 'deleteNote', 'deleteDriveFile', 'deleteAd'].includes(log.type)
+ }"
+ >{{ i18n.ts._moderationLogTypes[log.type] }}</b>
<span v-if="log.type === 'updateUserNote'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
<span v-else-if="log.type === 'suspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
<span v-else-if="log.type === 'unsuspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
@@ -16,7 +22,9 @@ SPDX-License-Identifier: AGPL-3.0-only
<span v-else-if="log.type === 'createRole'">: {{ log.info.role.name }}</span>
<span v-else-if="log.type === 'updateRole'">: {{ log.info.before.name }}</span>
<span v-else-if="log.type === 'deleteRole'">: {{ log.info.role.name }}</span>
+ <span v-else-if="log.type === 'addCustomEmoji'">: {{ log.info.emoji.name }}</span>
<span v-else-if="log.type === 'updateCustomEmoji'">: {{ log.info.before.name }}</span>
+ <span v-else-if="log.type === 'deleteCustomEmoji'">: {{ log.info.emoji.name }}</span>
<span v-else-if="log.type === 'markSensitiveDriveFile'">: @{{ log.info.fileUserUsername }}{{ log.info.fileUserHost ? '@' + log.info.fileUserHost : '' }}</span>
<span v-else-if="log.type === 'unmarkSensitiveDriveFile'">: @{{ log.info.fileUserUsername }}{{ log.info.fileUserHost ? '@' + log.info.fileUserHost : '' }}</span>
<span v-else-if="log.type === 'suspendRemoteInstance'">: {{ log.info.host }}</span>
@@ -75,6 +83,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
</template>
+ <template v-else-if="log.type === 'updateAd'">
+ <div :class="$style.diff">
+ <CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
+ </div>
+ </template>
<details>
<summary>raw</summary>
@@ -113,4 +126,16 @@ const props = defineProps<{
border-radius: 6px;
overflow: clip;
}
+
+.logYellow {
+ color: var(--warning);
+}
+
+.logRed {
+ color: var(--error);
+}
+
+.logGreen {
+ color: var(--success);
+}
</style>
diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue
index 2ef3e254cd..1b72e1d332 100644
--- a/packages/frontend/src/pages/admin/roles.editor.vue
+++ b/packages/frontend/src/pages/admin/roles.editor.vue
@@ -160,6 +160,26 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</MkFolder>
+ <MkFolder v-if="matchQuery([i18n.ts._role._options.canEditNote, 'canEditNote'])">
+ <template #label>{{ i18n.ts._role._options.canEditNote }}</template>
+ <template #suffix>
+ <span v-if="role.policies.canEditNote.useDefault" :class="$style.useDefaultLabel">{{ i18n.ts._role.useBaseValue }}</span>
+ <span v-else>{{ role.policies.canEditNote.value ? i18n.ts.yes : i18n.ts.no }}</span>
+ <span :class="$style.priorityIndicator"><i :class="getPriorityIcon(role.policies.canEditNote)"></i></span>
+ </template>
+ <div class="_gaps">
+ <MkSwitch v-model="role.policies.canEditNote.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts._role.useBaseValue }}</template>
+ </MkSwitch>
+ <MkSwitch v-model="role.policies.canEditNote.value" :disabled="role.policies.canEditNote.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ <MkRange v-model="role.policies.canEditNote.priority" :min="0" :max="2" :step="1" easing :textConverter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''">
+ <template #label>{{ i18n.ts._role.priority }}</template>
+ </MkRange>
+ </div>
+ </MkFolder>
+
<MkFolder v-if="matchQuery([i18n.ts._role._options.canInvite, 'canInvite'])">
<template #label>{{ i18n.ts._role._options.canInvite }}</template>
<template #suffix>
diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue
index 8d23335430..e1306d04b9 100644
--- a/packages/frontend/src/pages/admin/roles.vue
+++ b/packages/frontend/src/pages/admin/roles.vue
@@ -48,6 +48,14 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkSwitch>
</MkFolder>
+ <MkFolder v-if="matchQuery([i18n.ts._role._options.canEditNote, 'canEditNote'])">
+ <template #label>{{ i18n.ts._role._options.canEditNote }}</template>
+ <template #suffix>{{ policies.canEditNote ? i18n.ts.yes : i18n.ts.no }}</template>
+ <MkSwitch v-model="policies.canEditNote">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ </MkFolder>
+
<MkFolder v-if="matchQuery([i18n.ts._role._options.canInvite, 'canInvite'])">
<template #label>{{ i18n.ts._role._options.canInvite }}</template>
<template #suffix>{{ policies.canInvite ? i18n.ts.yes : i18n.ts.no }}</template>
diff --git a/packages/frontend/src/pages/notifications.vue b/packages/frontend/src/pages/notifications.vue
index 3ae6319c7e..8d2475b085 100644
--- a/packages/frontend/src/pages/notifications.vue
+++ b/packages/frontend/src/pages/notifications.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template>
<MkSpacer :contentMax="800">
<div v-if="tab === 'all'">
- <XNotifications class="notifications" :includeTypes="includeTypes"/>
+ <XNotifications class="notifications" :excludeTypes="excludeTypes"/>
</div>
<div v-else-if="tab === 'mentions'">
<MkNotes :pagination="mentionsPagination"/>
@@ -27,10 +27,11 @@ import MkNotes from '@/components/MkNotes.vue';
import * as os from '@/os.js';
import { i18n } from '@/i18n.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
-import { notificationTypes } from '@/const';
+import { notificationTypes } from '@/const.js';
let tab = $ref('all');
let includeTypes = $ref<string[] | null>(null);
+const excludeTypes = $computed(() => includeTypes ? notificationTypes.filter(t => !includeTypes.includes(t)) : null);
const mentionsPagination = {
endpoint: 'notes/mentions' as const,
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index a536bd1baa..55de53fb07 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -29,7 +29,6 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_s">
<MkSwitch v-model="showFixedPostForm">{{ i18n.ts.showFixedPostForm }}</MkSwitch>
<MkSwitch v-model="showFixedPostFormInChannel">{{ i18n.ts.showFixedPostFormInChannel }}</MkSwitch>
- <MkSwitch v-model="showTimelineReplies">{{ i18n.ts.flagShowTimelineReplies }}<template #caption>{{ i18n.ts.flagShowTimelineRepliesDescription }} {{ i18n.ts.reflectMayTakeTime }}</template></MkSwitch>
<MkFolder>
<template #label>{{ i18n.ts.pinnedList }}</template>
<!-- 複数ピン止ã‚管ç†ã§ãるよã†ã«ã—ãŸã„ã‘ã©ã‚ã‚“ã©ã„ã®ã§ä¸€æ—¦ã²ã¨ã¤ã®ã¿ -->
@@ -249,7 +248,6 @@ const squareAvatars = computed(defaultStore.makeGetterSetter('squareAvatars'));
const mediaListWithOneImageAppearance = computed(defaultStore.makeGetterSetter('mediaListWithOneImageAppearance'));
const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition'));
const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis'));
-const showTimelineReplies = computed(defaultStore.makeGetterSetter('showTimelineReplies'));
const keepScreenOn = computed(defaultStore.makeGetterSetter('keepScreenOn'));
watch(lang, () => {
diff --git a/packages/frontend/src/pages/settings/notifications.notification-config.vue b/packages/frontend/src/pages/settings/notifications.notification-config.vue
new file mode 100644
index 0000000000..c1f107c2b8
--- /dev/null
+++ b/packages/frontend/src/pages/settings/notifications.notification-config.vue
@@ -0,0 +1,50 @@
+<!--
+SPDX-FileCopyrightText: syuilo and other misskey contributors
+SPDX-License-Identifier: AGPL-3.0-only
+-->
+
+<template>
+<div class="_gaps_m">
+ <MkSelect v-model="type">
+ <option value="all">{{ i18n.ts.all }}</option>
+ <option value="following">{{ i18n.ts.following }}</option>
+ <option value="follower">{{ i18n.ts.followers }}</option>
+ <option value="mutualFollow">{{ i18n.ts.mutualFollow }}</option>
+ <option value="list">{{ i18n.ts.userList }}</option>
+ <option value="never">{{ i18n.ts.none }}</option>
+ </MkSelect>
+
+ <MkSelect v-if="type === 'list'" v-model="userListId">
+ <template #label>{{ i18n.ts.userList }}</template>
+ <option v-for="list in props.userLists" :key="list.id" :value="list.id">{{ list.name }}</option>
+ </MkSelect>
+
+ <div class="_buttons">
+ <MkButton inline primary @click="save"><i class="ti ti-check"></i> {{ i18n.ts.save }}</MkButton>
+ </div>
+</div>
+</template>
+
+<script lang="ts" setup>
+import { } from 'vue';
+import * as Misskey from 'misskey-js';
+import MkSelect from '@/components/MkSelect.vue';
+import MkButton from '@/components/MkButton.vue';
+import { i18n } from '@/i18n.js';
+
+const props = defineProps<{
+ value: any;
+ userLists: Misskey.entities.UserList[];
+}>();
+
+const emit = defineEmits<{
+ (ev: 'update', result: any): void;
+}>();
+
+let type = $ref(props.value.type);
+let userListId = $ref(props.value.userListId);
+
+function save() {
+ emit('update', { type, userListId });
+}
+</script>
diff --git a/packages/frontend/src/pages/settings/notifications.vue b/packages/frontend/src/pages/settings/notifications.vue
index 5b3c29e7c8..88e02af1f4 100644
--- a/packages/frontend/src/pages/settings/notifications.vue
+++ b/packages/frontend/src/pages/settings/notifications.vue
@@ -5,7 +5,26 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<div class="_gaps_m">
- <FormLink @click="configure"><template #icon><i class="ti ti-settings"></i></template>{{ i18n.ts.notificationSetting }}</FormLink>
+ <FormSection first>
+ <template #label>{{ i18n.ts.notificationRecieveConfig }}</template>
+ <div class="_gaps_s">
+ <MkFolder v-for="type in notificationTypes" :key="type">
+ <template #label>{{ i18n.t('_notification._types.' + type) }}</template>
+ <template #suffix>
+ {{
+ $i.notificationRecieveConfig[type]?.type === 'never' ? i18n.ts.none :
+ $i.notificationRecieveConfig[type]?.type === 'following' ? i18n.ts.following :
+ $i.notificationRecieveConfig[type]?.type === 'follower' ? i18n.ts.followers :
+ $i.notificationRecieveConfig[type]?.type === 'mutualFollow' ? i18n.ts.mutualFollow :
+ $i.notificationRecieveConfig[type]?.type === 'list' ? i18n.ts.userList :
+ i18n.ts.all
+ }}
+ </template>
+
+ <XNotificationConfig :userLists="userLists" :value="$i.notificationRecieveConfig[type] ?? { type: 'all' }" @update="(res) => updateReceiveConfig(type, res)"/>
+ </MkFolder>
+ </div>
+ </FormSection>
<FormSection>
<div class="_gaps_m">
<FormLink @click="readAllNotifications">{{ i18n.ts.markAsReadAllNotifications }}</FormLink>
@@ -37,19 +56,22 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { defineAsyncComponent } from 'vue';
+import XNotificationConfig from './notifications.notification-config.vue';
import FormLink from '@/components/form/link.vue';
import FormSection from '@/components/form/section.vue';
+import MkFolder from '@/components/MkFolder.vue';
import MkSwitch from '@/components/MkSwitch.vue';
import * as os from '@/os.js';
import { $i } from '@/account.js';
import { i18n } from '@/i18n.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import MkPushNotificationAllowButton from '@/components/MkPushNotificationAllowButton.vue';
-import { notificationTypes } from '@/const';
+import { notificationTypes } from '@/const.js';
let allowButton = $shallowRef<InstanceType<typeof MkPushNotificationAllowButton>>();
let pushRegistrationInServer = $computed(() => allowButton?.pushRegistrationInServer);
let sendReadMessage = $computed(() => pushRegistrationInServer?.sendReadMessage || false);
+const userLists = await os.api('users/lists/list');
async function readAllUnreadNotes() {
await os.api('i/read-all-unread-notes');
@@ -59,21 +81,15 @@ async function readAllNotifications() {
await os.api('notifications/mark-all-as-read');
}
-function configure() {
- const includingTypes = notificationTypes.filter(x => !$i!.mutingNotificationTypes.includes(x));
- os.popup(defineAsyncComponent(() => import('@/components/MkNotificationSettingWindow.vue')), {
- includingTypes,
- showGlobalToggle: false,
- }, {
- done: async (res) => {
- const { includingTypes: value } = res;
- await os.apiWithDialog('i/update', {
- mutingNotificationTypes: notificationTypes.filter(x => !value.includes(x)),
- }).then(i => {
- $i!.mutingNotificationTypes = i.mutingNotificationTypes;
- });
+async function updateReceiveConfig(type, value) {
+ await os.apiWithDialog('i/update', {
+ notificationRecieveConfig: {
+ ...$i!.notificationRecieveConfig,
+ [type]: value,
},
- }, 'closed');
+ }).then(i => {
+ $i!.notificationRecieveConfig = i.notificationRecieveConfig;
+ });
}
function onChangeSendReadMessage(v: boolean) {
diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue
index cce7360b9b..5bad689aee 100644
--- a/packages/frontend/src/pages/timeline.vue
+++ b/packages/frontend/src/pages/timeline.vue
@@ -15,9 +15,12 @@ SPDX-License-Identifier: AGPL-3.0-only
<div :class="$style.tl">
<MkTimeline
ref="tlComponent"
- :key="src"
+ :key="src + withRenotes + withReplies + onlyFiles"
:src="src.split(':')[0]"
:list="src.split(':')[1]"
+ :withRenotes="withRenotes"
+ :withReplies="withReplies"
+ :onlyFiles="onlyFiles"
:sound="true"
@queue="queueUpdated"
/>
@@ -58,6 +61,9 @@ const rootEl = $shallowRef<HTMLElement>();
let queue = $ref(0);
let srcWhenNotSignin = $ref(isLocalTimelineAvailable ? 'local' : 'global');
const src = $computed({ get: () => ($i ? defaultStore.reactiveState.tl.value.src : srcWhenNotSignin), set: (x) => saveSrc(x) });
+const withRenotes = $ref(true);
+const withReplies = $ref(false);
+const onlyFiles = $ref(false);
watch($$(src), () => queue = 0);
@@ -129,7 +135,28 @@ function focus(): void {
tlComponent.focus();
}
-const headerActions = $computed(() => []);
+const headerActions = $computed(() => [{
+ icon: 'ti ti-dots',
+ text: i18n.ts.options,
+ handler: (ev) => {
+ os.popupMenu([{
+ type: 'switch',
+ text: i18n.ts.showRenotes,
+ icon: 'ti ti-repeat',
+ ref: $$(withRenotes),
+ }, {
+ type: 'switch',
+ text: i18n.ts.withReplies,
+ icon: 'ti ti-arrow-back-up',
+ ref: $$(withReplies),
+ }, {
+ type: 'switch',
+ text: i18n.ts.fileAttachedOnly,
+ icon: 'ti ti-photo',
+ ref: $$(onlyFiles),
+ }], ev.currentTarget ?? ev.target);
+ },
+}]);
const headerTabs = $computed(() => [...(defaultStore.reactiveState.pinnedUserLists.value.map(l => ({
key: 'list:' + l.id,
@@ -149,7 +176,7 @@ const headerTabs = $computed(() => [...(defaultStore.reactiveState.pinnedUserLis
}, {
key: 'social',
title: i18n.ts._timelines.social,
- icon: 'ti ti-rocket',
+ icon: 'ti ti-universe',
iconOnly: true,
}] : []), ...(isGlobalTimelineAvailable ? [{
key: 'global',
@@ -190,7 +217,7 @@ const headerTabsWhenNotLogin = $computed(() => [
definePageMetadata(computed(() => ({
title: i18n.ts.timeline,
- icon: src === 'local' ? 'ti ti-planet' : src === 'social' ? 'ti ti-rocket' : src === 'global' ? 'ti ti-whirl' : 'ti ti-home',
+ icon: src === 'local' ? 'ti ti-planet' : src === 'social' ? 'ti ti-universe' : src === 'global' ? 'ti ti-whirl' : 'ti ti-home',
})));
</script>
diff --git a/packages/frontend/src/pages/user/index.timeline.vue b/packages/frontend/src/pages/user/index.timeline.vue
index 3a2a2ade81..42040f5304 100644
--- a/packages/frontend/src/pages/user/index.timeline.vue
+++ b/packages/frontend/src/pages/user/index.timeline.vue
@@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #header>
<MkTab v-model="include" :class="$style.tab">
<option :value="null">{{ i18n.ts.notes }}</option>
- <option value="replies">{{ i18n.ts.notesAndReplies }}</option>
+ <option value="all">{{ i18n.ts.all }}</option>
<option value="files">{{ i18n.ts.withFiles }}</option>
</MkTab>
</template>
@@ -36,7 +36,8 @@ const pagination = {
limit: 10,
params: computed(() => ({
userId: props.user.id,
- includeReplies: include.value === 'replies' || include.value === 'files',
+ withRenotes: include.value === 'all',
+ withReplies: include.value === 'all' || include.value === 'files',
withFiles: include.value === 'files',
})),
};
@@ -51,7 +52,7 @@ const pagination = {
.tl {
background: var(--bg);
- border-radius: var(--radius);
- overflow: clip;
+ border-radius: var(--radius);
+ overflow: clip;
}
</style>
diff --git a/packages/frontend/src/scripts/aiscript/api.ts b/packages/frontend/src/scripts/aiscript/api.ts
index 9f60e52cea..f049a51b93 100644
--- a/packages/frontend/src/scripts/aiscript/api.ts
+++ b/packages/frontend/src/scripts/aiscript/api.ts
@@ -48,6 +48,16 @@ export function createAiScriptEnv(opts) {
return values.ERROR('request_failed', utils.jsToVal(err));
});
}),
+ 'Mk:apiExternal': values.FN_NATIVE(async ([host, ep, param, token]) => {
+ utils.assertString(host);
+ utils.assertString(ep);
+ if (token) utils.assertString(token);
+ return os.apiExternal(host.value, ep.value, utils.valToJs(param), token?.value).then(res => {
+ return utils.jsToVal(res);
+ }, err => {
+ return values.ERROR('request_failed', utils.jsToVal(err));
+ });
+ }),
'Mk:save': values.FN_NATIVE(([key, value]) => {
utils.assertString(key);
miLocalStorage.setItem(`aiscript:${opts.storageKey}:${key.value}`, JSON.stringify(utils.valToJs(value)));
diff --git a/packages/frontend/src/scripts/api.ts b/packages/frontend/src/scripts/api.ts
index 9259c88013..080977e5e4 100644
--- a/packages/frontend/src/scripts/api.ts
+++ b/packages/frontend/src/scripts/api.ts
@@ -11,6 +11,7 @@ export const pendingApiRequestsCount = ref(0);
// Implements Misskey.api.ApiClient.request
export function api<E extends keyof Misskey.Endpoints, P extends Misskey.Endpoints[E]['req']>(endpoint: E, data: P = {} as any, token?: string | null | undefined, signal?: AbortSignal): Promise<Misskey.Endpoints[E]['res']> {
+ if (endpoint.includes('://')) throw new Error('invalid endpoint');
pendingApiRequestsCount.value++;
const onFinally = () => {
@@ -23,7 +24,50 @@ export function api<E extends keyof Misskey.Endpoints, P extends Misskey.Endpoin
if (token !== undefined) (data as any).i = token;
// Send request
- window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, {
+ window.fetch(`${apiUrl}/${endpoint}`, {
+ method: 'POST',
+ body: JSON.stringify(data),
+ credentials: 'omit',
+ cache: 'no-cache',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ signal,
+ }).then(async (res) => {
+ const body = res.status === 204 ? null : await res.json();
+
+ if (res.status === 200) {
+ resolve(body);
+ } else if (res.status === 204) {
+ resolve();
+ } else {
+ reject(body.error);
+ }
+ }).catch(reject);
+ });
+
+ promise.then(onFinally, onFinally);
+
+ return promise;
+}
+
+export function apiExternal<E extends keyof Misskey.Endpoints, P extends Misskey.Endpoints[E]['req']>(hostUrl: string, endpoint: E, data: P = {} as any, token?: string | null | undefined, signal?: AbortSignal): Promise<Misskey.Endpoints[E]['res']> {
+ if (!/^https?:\/\//.test(hostUrl)) throw new Error('invalid host name');
+ if (endpoint.includes('://')) throw new Error('invalid endpoint');
+ pendingApiRequestsCount.value++;
+
+ const onFinally = () => {
+ pendingApiRequestsCount.value--;
+ };
+
+ const promise = new Promise<Misskey.Endpoints[E]['res'] | void>((resolve, reject) => {
+ // Append a credential
+ (data as any).i = token;
+
+ const fullUrl = (hostUrl.slice(-1) === '/' ? hostUrl.slice(0, -1) : hostUrl)
+ + '/api/' + (endpoint.slice(0, 1) === '/' ? endpoint.slice(1) : endpoint);
+ // Send request
+ window.fetch(fullUrl, {
method: 'POST',
body: JSON.stringify(data),
credentials: 'omit',
diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts
index 0948741fc5..45fb622069 100644
--- a/packages/frontend/src/scripts/get-note-menu.ts
+++ b/packages/frontend/src/scripts/get-note-menu.ts
@@ -172,6 +172,10 @@ export function getNoteMenu(props: {
});
}
+ function edit(): void {
+ os.post({ initialNote: appearNote, renote: appearNote.renote, reply: appearNote.reply, channel: appearNote.channel, updateMode: true });
+ }
+
function toggleFavorite(favorite: boolean): void {
claimAchievement('noteFavorited1');
os.apiWithDialog(favorite ? 'notes/favorites/create' : 'notes/favorites/delete', {
@@ -352,6 +356,11 @@ export function getNoteMenu(props: {
),
...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [
null,
+ appearNote.userId === $i.id && $i.policies.canEditNote ? {
+ icon: 'ti ti-edit',
+ text: i18n.ts.edit,
+ action: edit,
+ } : undefined,
appearNote.userId === $i.id ? {
icon: 'ti ti-edit',
text: i18n.ts.deleteAndEdit,
diff --git a/packages/frontend/src/scripts/use-note-capture.ts b/packages/frontend/src/scripts/use-note-capture.ts
index c618532570..a4c913749e 100644
--- a/packages/frontend/src/scripts/use-note-capture.ts
+++ b/packages/frontend/src/scripts/use-note-capture.ts
@@ -71,6 +71,13 @@ export function useNoteCapture(props: {
break;
}
+ case 'updated': {
+ note.value.updatedAt = new Date().toISOString();
+ note.value.cw = body.cw;
+ note.value.text = body.text;
+ break;
+ }
+
case 'deleted': {
props.isDeletedRef.value = true;
break;
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index 8a7ee62eff..e715088d03 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -109,10 +109,6 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'account',
default: [] as string[],
},
- showTimelineReplies: {
- where: 'account',
- default: false,
- },
menu: {
where: 'deviceAccount',
diff --git a/packages/frontend/src/ui/_common_/common.vue b/packages/frontend/src/ui/_common_/common.vue
index 10972f3bc1..732a4cfeaa 100644
--- a/packages/frontend/src/ui/_common_/common.vue
+++ b/packages/frontend/src/ui/_common_/common.vue
@@ -65,9 +65,7 @@ const dev = _DEV_;
let notifications = $ref<Misskey.entities.Notification[]>([]);
-function onNotification(notification: Misskey.entities.Notification, isClient: boolean = false) {
- if ($i.mutingNotificationTypes.includes(notification.type)) return;
-
+function onNotification(notification: Misskey.entities.Notification, isClient = false) {
if (document.visibilityState === 'visible') {
if (!isClient) {
useStream().send('readNotification');
diff --git a/packages/frontend/src/ui/deck/deck-store.ts b/packages/frontend/src/ui/deck/deck-store.ts
index f910c5181d..49fdf4d314 100644
--- a/packages/frontend/src/ui/deck/deck-store.ts
+++ b/packages/frontend/src/ui/deck/deck-store.ts
@@ -28,8 +28,11 @@ export type Column = {
listId?: string;
channelId?: string;
roleId?: string;
- includingTypes?: typeof notificationTypes[number][];
+ excludeTypes?: typeof notificationTypes[number][];
tl?: 'home' | 'local' | 'social' | 'global';
+ withRenotes?: boolean;
+ withReplies?: boolean;
+ onlyFiles?: boolean;
};
export const deckStore = markRaw(new Storage('deck', {
diff --git a/packages/frontend/src/ui/deck/notifications-column.vue b/packages/frontend/src/ui/deck/notifications-column.vue
index 0455d43deb..b6bbf1fb55 100644
--- a/packages/frontend/src/ui/deck/notifications-column.vue
+++ b/packages/frontend/src/ui/deck/notifications-column.vue
@@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<XColumn :column="column" :isStacked="isStacked" :menu="menu">
<template #header><i class="ti ti-bell" style="margin-right: 8px;"></i>{{ column.name }}</template>
- <XNotifications :includeTypes="column.includingTypes"/>
+ <XNotifications :excludeTypes="props.column.excludeTypes"/>
</XColumn>
</template>
@@ -25,13 +25,13 @@ const props = defineProps<{
}>();
function func() {
- os.popup(defineAsyncComponent(() => import('@/components/MkNotificationSettingWindow.vue')), {
- includingTypes: props.column.includingTypes,
+ os.popup(defineAsyncComponent(() => import('@/components/MkNotificationSelectWindow.vue')), {
+ excludeTypes: props.column.excludeTypes,
}, {
done: async (res) => {
- const { includingTypes } = res;
+ const { excludeTypes } = res;
updateColumn(props.column.id, {
- includingTypes: includingTypes,
+ excludeTypes: excludeTypes,
});
},
}, 'closed');
diff --git a/packages/frontend/src/ui/deck/tl-column.vue b/packages/frontend/src/ui/deck/tl-column.vue
index 813b801d21..aad73d73a1 100644
--- a/packages/frontend/src/ui/deck/tl-column.vue
+++ b/packages/frontend/src/ui/deck/tl-column.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #header>
<i v-if="column.tl === 'home'" class="ti ti-home"></i>
<i v-else-if="column.tl === 'local'" class="ti ti-planet"></i>
- <i v-else-if="column.tl === 'social'" class="ti ti-rocket"></i>
+ <i v-else-if="column.tl === 'social'" class="ti ti-universe"></i>
<i v-else-if="column.tl === 'global'" class="ti ti-whirl"></i>
<span style="margin-left: 8px;">{{ column.name }}</span>
</template>
@@ -20,12 +20,20 @@ SPDX-License-Identifier: AGPL-3.0-only
</p>
<p :class="$style.disabledDescription">{{ i18n.ts._disabledTimeline.description }}</p>
</div>
- <MkTimeline v-else-if="column.tl" ref="timeline" :key="column.tl" :src="column.tl"/>
+ <MkTimeline
+ v-else-if="column.tl"
+ ref="timeline"
+ :key="column.tl + withRenotes + withReplies + onlyFiles"
+ :src="column.tl"
+ :withRenotes="withRenotes"
+ :withReplies="withReplies"
+ :onlyFiles="onlyFiles"
+ />
</XColumn>
</template>
<script lang="ts" setup>
-import { onMounted } from 'vue';
+import { onMounted, watch } from 'vue';
import XColumn from './column.vue';
import { removeColumn, updateColumn, Column } from './deck-store.js';
import MkTimeline from '@/components/MkTimeline.vue';
@@ -43,6 +51,27 @@ let disabled = $ref(false);
const isLocalTimelineAvailable = (($i == null && instance.policies.ltlAvailable) || ($i != null && $i.policies.ltlAvailable));
const isGlobalTimelineAvailable = (($i == null && instance.policies.gtlAvailable) || ($i != null && $i.policies.gtlAvailable));
+const withRenotes = $ref(props.column.withRenotes ?? true);
+const withReplies = $ref(props.column.withReplies ?? false);
+const onlyFiles = $ref(props.column.onlyFiles ?? false);
+
+watch($$(withRenotes), v => {
+ updateColumn(props.column.id, {
+ withRenotes: v,
+ });
+});
+
+watch($$(withReplies), v => {
+ updateColumn(props.column.id, {
+ withReplies: v,
+ });
+});
+
+watch($$(onlyFiles), v => {
+ updateColumn(props.column.id, {
+ onlyFiles: v,
+ });
+});
onMounted(() => {
if (props.column.tl == null) {
@@ -82,6 +111,18 @@ const menu = [{
icon: 'ti ti-pencil',
text: i18n.ts.timeline,
action: setType,
+}, {
+ type: 'switch',
+ text: i18n.ts.showRenotes,
+ ref: $$(withRenotes),
+}, {
+ type: 'switch',
+ text: i18n.ts.withReplies,
+ ref: $$(withReplies),
+}, {
+ type: 'switch',
+ text: i18n.ts.fileAttachedOnly,
+ ref: $$(onlyFiles),
}];
</script>
diff --git a/packages/frontend/src/widgets/WidgetActivity.vue b/packages/frontend/src/widgets/WidgetActivity.vue
index ed969abcfc..6b890d41a8 100644
--- a/packages/frontend/src/widgets/WidgetActivity.vue
+++ b/packages/frontend/src/widgets/WidgetActivity.vue
@@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import XCalendar from './WidgetActivity.calendar.vue';
import XChart from './WidgetActivity.chart.vue';
import { GetFormResultType } from '@/scripts/form.js';
diff --git a/packages/frontend/src/widgets/WidgetAichan.vue b/packages/frontend/src/widgets/WidgetAichan.vue
index ce71413328..76b35f6fed 100644
--- a/packages/frontend/src/widgets/WidgetAichan.vue
+++ b/packages/frontend/src/widgets/WidgetAichan.vue
@@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onMounted, onUnmounted, shallowRef } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
const name = 'ai';
diff --git a/packages/frontend/src/widgets/WidgetAiscript.vue b/packages/frontend/src/widgets/WidgetAiscript.vue
index 4b927563f8..1b8c8ad9bc 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.vue
+++ b/packages/frontend/src/widgets/WidgetAiscript.vue
@@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import MkContainer from '@/components/MkContainer.vue';
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.vue b/packages/frontend/src/widgets/WidgetAiscriptApp.vue
index a41a8bdbd4..53b6020ffc 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.vue
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.vue
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onMounted, Ref, ref, watch } from 'vue';
import { Interpreter, Parser } from '@syuilo/aiscript';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import { createAiScriptEnv } from '@/scripts/aiscript/api.js';
diff --git a/packages/frontend/src/widgets/WidgetButton.vue b/packages/frontend/src/widgets/WidgetButton.vue
index b80117a9c5..a7bdd4c49c 100644
--- a/packages/frontend/src/widgets/WidgetButton.vue
+++ b/packages/frontend/src/widgets/WidgetButton.vue
@@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { Interpreter, Parser } from '@syuilo/aiscript';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import { createAiScriptEnv } from '@/scripts/aiscript/api.js';
diff --git a/packages/frontend/src/widgets/WidgetCalendar.vue b/packages/frontend/src/widgets/WidgetCalendar.vue
index 4b592203ec..7fabd09a24 100644
--- a/packages/frontend/src/widgets/WidgetCalendar.vue
+++ b/packages/frontend/src/widgets/WidgetCalendar.vue
@@ -39,7 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { i18n } from '@/i18n.js';
import { useInterval } from '@/scripts/use-interval.js';
diff --git a/packages/frontend/src/widgets/WidgetClicker.vue b/packages/frontend/src/widgets/WidgetClicker.vue
index 9b19c007de..5e7464f3a4 100644
--- a/packages/frontend/src/widgets/WidgetClicker.vue
+++ b/packages/frontend/src/widgets/WidgetClicker.vue
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import MkClickerGame from '@/components/MkClickerGame.vue';
diff --git a/packages/frontend/src/widgets/WidgetClock.vue b/packages/frontend/src/widgets/WidgetClock.vue
index 6e6e1fba96..e4ea2c97dd 100644
--- a/packages/frontend/src/widgets/WidgetClock.vue
+++ b/packages/frontend/src/widgets/WidgetClock.vue
@@ -30,7 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import MkAnalogClock from '@/components/MkAnalogClock.vue';
diff --git a/packages/frontend/src/widgets/WidgetDigitalClock.vue b/packages/frontend/src/widgets/WidgetDigitalClock.vue
index a250d28230..9ff5f8dcef 100644
--- a/packages/frontend/src/widgets/WidgetDigitalClock.vue
+++ b/packages/frontend/src/widgets/WidgetDigitalClock.vue
@@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { timezones } from '@/scripts/timezones.js';
import MkDigitalClock from '@/components/MkDigitalClock.vue';
diff --git a/packages/frontend/src/widgets/WidgetFederation.vue b/packages/frontend/src/widgets/WidgetFederation.vue
index 1d067aac69..47f94402fb 100644
--- a/packages/frontend/src/widgets/WidgetFederation.vue
+++ b/packages/frontend/src/widgets/WidgetFederation.vue
@@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import MkMiniChart from '@/components/MkMiniChart.vue';
diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.vue b/packages/frontend/src/widgets/WidgetInstanceCloud.vue
index ffcf059a42..4ae77e86fc 100644
--- a/packages/frontend/src/widgets/WidgetInstanceCloud.vue
+++ b/packages/frontend/src/widgets/WidgetInstanceCloud.vue
@@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import MkTagCloud from '@/components/MkTagCloud.vue';
diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.vue b/packages/frontend/src/widgets/WidgetInstanceInfo.vue
index 48a1849090..ff4a1b46c0 100644
--- a/packages/frontend/src/widgets/WidgetInstanceInfo.vue
+++ b/packages/frontend/src/widgets/WidgetInstanceInfo.vue
@@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { host } from '@/config.js';
import { instance } from '@/instance.js';
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.vue b/packages/frontend/src/widgets/WidgetJobQueue.vue
index e0025a8074..89770b2216 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.vue
+++ b/packages/frontend/src/widgets/WidgetJobQueue.vue
@@ -52,7 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onUnmounted, reactive } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { useStream } from '@/stream.js';
import number from '@/filters/number.js';
diff --git a/packages/frontend/src/widgets/WidgetMemo.vue b/packages/frontend/src/widgets/WidgetMemo.vue
index c12afd50b0..1f5666b3ef 100644
--- a/packages/frontend/src/widgets/WidgetMemo.vue
+++ b/packages/frontend/src/widgets/WidgetMemo.vue
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref, watch } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import { defaultStore } from '@/store.js';
diff --git a/packages/frontend/src/widgets/WidgetNotifications.vue b/packages/frontend/src/widgets/WidgetNotifications.vue
index b9999d8011..796578395f 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.vue
+++ b/packages/frontend/src/widgets/WidgetNotifications.vue
@@ -10,14 +10,14 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #func="{ buttonStyleClass }"><button class="_button" :class="buttonStyleClass" @click="configureNotification()"><i class="ti ti-settings"></i></button></template>
<div>
- <XNotifications :includeTypes="widgetProps.includingTypes"/>
+ <XNotifications :excludeTypes="widgetProps.excludeTypes"/>
</div>
</MkContainer>
</template>
<script lang="ts" setup>
import { defineAsyncComponent } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import XNotifications from '@/components/MkNotifications.vue';
@@ -35,10 +35,10 @@ const widgetPropsDef = {
type: 'number' as const,
default: 300,
},
- includingTypes: {
+ excludeTypes: {
type: 'array' as const,
hidden: true,
- default: null,
+ default: [],
},
};
@@ -54,12 +54,12 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name,
);
const configureNotification = () => {
- os.popup(defineAsyncComponent(() => import('@/components/MkNotificationSettingWindow.vue')), {
- includingTypes: widgetProps.includingTypes,
+ os.popup(defineAsyncComponent(() => import('@/components/MkNotificationSelectWindow.vue')), {
+ excludeTypes: widgetProps.excludeTypes,
}, {
done: async (res) => {
- const { includingTypes } = res;
- widgetProps.includingTypes = includingTypes;
+ const { excludeTypes } = res;
+ widgetProps.excludeTypes = excludeTypes;
save();
},
}, 'closed');
diff --git a/packages/frontend/src/widgets/WidgetOnlineUsers.vue b/packages/frontend/src/widgets/WidgetOnlineUsers.vue
index a77468009e..46fe991f37 100644
--- a/packages/frontend/src/widgets/WidgetOnlineUsers.vue
+++ b/packages/frontend/src/widgets/WidgetOnlineUsers.vue
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import { useInterval } from '@/scripts/use-interval.js';
diff --git a/packages/frontend/src/widgets/WidgetPhotos.vue b/packages/frontend/src/widgets/WidgetPhotos.vue
index 8c01d3cce9..9af4f80873 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.vue
+++ b/packages/frontend/src/widgets/WidgetPhotos.vue
@@ -23,7 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onUnmounted, ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { useStream } from '@/stream.js';
import { getStaticImageUrl } from '@/scripts/media-proxy.js';
diff --git a/packages/frontend/src/widgets/WidgetPostForm.vue b/packages/frontend/src/widgets/WidgetPostForm.vue
index d20ea3f8f4..320b47a4ff 100644
--- a/packages/frontend/src/widgets/WidgetPostForm.vue
+++ b/packages/frontend/src/widgets/WidgetPostForm.vue
@@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkPostForm from '@/components/MkPostForm.vue';
diff --git a/packages/frontend/src/widgets/WidgetProfile.vue b/packages/frontend/src/widgets/WidgetProfile.vue
index 8cd5ffa9e1..fc54af2d71 100644
--- a/packages/frontend/src/widgets/WidgetProfile.vue
+++ b/packages/frontend/src/widgets/WidgetProfile.vue
@@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import { $i } from '@/account.js';
import { userPage } from '@/filters/user.js';
diff --git a/packages/frontend/src/widgets/WidgetRss.vue b/packages/frontend/src/widgets/WidgetRss.vue
index 22833415dd..5540a09c71 100644
--- a/packages/frontend/src/widgets/WidgetRss.vue
+++ b/packages/frontend/src/widgets/WidgetRss.vue
@@ -24,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref, watch, computed } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import { url as base } from '@/config.js';
diff --git a/packages/frontend/src/widgets/WidgetRssTicker.vue b/packages/frontend/src/widgets/WidgetRssTicker.vue
index ce8142f1ad..2b2a5233be 100644
--- a/packages/frontend/src/widgets/WidgetRssTicker.vue
+++ b/packages/frontend/src/widgets/WidgetRssTicker.vue
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref, watch, computed } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import MarqueeText from '@/components/MkMarquee.vue';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
diff --git a/packages/frontend/src/widgets/WidgetSlideshow.vue b/packages/frontend/src/widgets/WidgetSlideshow.vue
index fe7ac8303d..82b6246add 100644
--- a/packages/frontend/src/widgets/WidgetSlideshow.vue
+++ b/packages/frontend/src/widgets/WidgetSlideshow.vue
@@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onMounted, ref, shallowRef } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import { useInterval } from '@/scripts/use-interval.js';
diff --git a/packages/frontend/src/widgets/WidgetTimeline.vue b/packages/frontend/src/widgets/WidgetTimeline.vue
index 51623023c7..b8842d7b52 100644
--- a/packages/frontend/src/widgets/WidgetTimeline.vue
+++ b/packages/frontend/src/widgets/WidgetTimeline.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #icon>
<i v-if="widgetProps.src === 'home'" class="ti ti-home"></i>
<i v-else-if="widgetProps.src === 'local'" class="ti ti-planet"></i>
- <i v-else-if="widgetProps.src === 'social'" class="ti ti-rocket"></i>
+ <i v-else-if="widgetProps.src === 'social'" class="ti ti-universe"></i>
<i v-else-if="widgetProps.src === 'global'" class="ti ti-whirl"></i>
<i v-else-if="widgetProps.src === 'list'" class="ti ti-list"></i>
<i v-else-if="widgetProps.src === 'antenna'" class="ti ti-antenna"></i>
@@ -35,7 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import * as os from '@/os.js';
import MkContainer from '@/components/MkContainer.vue';
@@ -124,7 +124,7 @@ const choose = async (ev) => {
action: () => { setSrc('local'); },
}, {
text: i18n.ts._timelines.social,
- icon: 'ti ti-rocket',
+ icon: 'ti ti-universe',
action: () => { setSrc('social'); },
}, {
text: i18n.ts._timelines.global,
diff --git a/packages/frontend/src/widgets/WidgetTrends.vue b/packages/frontend/src/widgets/WidgetTrends.vue
index 0a57305526..0d4df28a95 100644
--- a/packages/frontend/src/widgets/WidgetTrends.vue
+++ b/packages/frontend/src/widgets/WidgetTrends.vue
@@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import MkMiniChart from '@/components/MkMiniChart.vue';
diff --git a/packages/frontend/src/widgets/WidgetUnixClock.vue b/packages/frontend/src/widgets/WidgetUnixClock.vue
index 69bceb7572..33585cd721 100644
--- a/packages/frontend/src/widgets/WidgetUnixClock.vue
+++ b/packages/frontend/src/widgets/WidgetUnixClock.vue
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onUnmounted, ref, watch } from 'vue';
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
const name = 'unixClock';
diff --git a/packages/frontend/src/widgets/WidgetUserList.vue b/packages/frontend/src/widgets/WidgetUserList.vue
index 343e9a4292..a0d460c704 100644
--- a/packages/frontend/src/widgets/WidgetUserList.vue
+++ b/packages/frontend/src/widgets/WidgetUserList.vue
@@ -24,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
import { GetFormResultType } from '@/scripts/form.js';
import MkContainer from '@/components/MkContainer.vue';
import * as os from '@/os.js';
diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md
index 0686354ff4..f0fc47c207 100644
--- a/packages/misskey-js/etc/misskey-js.api.md
+++ b/packages/misskey-js/etc/misskey-js.api.md
@@ -1545,7 +1545,7 @@ export type Endpoints = {
receiveAnnouncementEmail?: boolean;
alwaysMarkNsfw?: boolean;
mutedWords?: string[][];
- mutingNotificationTypes?: Notification_2['type'][];
+ notificationRecieveConfig?: any;
emailNotificationTypes?: string[];
alsoKnownAs?: string[];
};
@@ -2475,7 +2475,22 @@ type MeDetailed = UserDetailed & {
isDeleted: boolean;
isExplorable: boolean;
mutedWords: string[][];
- mutingNotificationTypes: string[];
+ notificationRecieveConfig: {
+ [notificationType in typeof notificationTypes_2[number]]?: {
+ type: 'all';
+ } | {
+ type: 'never';
+ } | {
+ type: 'following';
+ } | {
+ type: 'follower';
+ } | {
+ type: 'mutualFollow';
+ } | {
+ type: 'list';
+ userListId: string;
+ };
+ };
noCrawle: boolean;
receiveAnnouncementEmail: boolean;
usePasswordLessLogin: boolean;
@@ -2604,10 +2619,22 @@ type ModerationLog = {
} | {
type: 'unmarkSensitiveDriveFile';
info: ModerationLogPayloads['unmarkSensitiveDriveFile'];
+} | {
+ type: 'createInvitation';
+ info: ModerationLogPayloads['createInvitation'];
+} | {
+ type: 'createAd';
+ info: ModerationLogPayloads['createAd'];
+} | {
+ type: 'updateAd';
+ info: ModerationLogPayloads['updateAd'];
+} | {
+ type: 'deleteAd';
+ info: ModerationLogPayloads['deleteAd'];
});
// @public (undocumented)
-export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "updateCustomEmoji", "deleteCustomEmoji", "assignRole", "unassignRole", "createRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "updateGlobalAnnouncement", "updateUserAnnouncement", "deleteGlobalAnnouncement", "deleteUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance", "markSensitiveDriveFile", "unmarkSensitiveDriveFile", "resolveAbuseReport"];
+export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "updateCustomEmoji", "deleteCustomEmoji", "assignRole", "unassignRole", "createRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "updateGlobalAnnouncement", "updateUserAnnouncement", "deleteGlobalAnnouncement", "deleteUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance", "markSensitiveDriveFile", "unmarkSensitiveDriveFile", "resolveAbuseReport", "createInvitation", "createAd", "updateAd", "deleteAd"];
// @public (undocumented)
export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"];
@@ -2616,6 +2643,7 @@ export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"];
type Note = {
id: ID;
createdAt: DateString;
+ updatedAt?: DateString | null;
text: string | null;
cw: string | null;
user: User;
@@ -2954,7 +2982,8 @@ type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+u
// src/api.types.ts:16:32 - (ae-forgotten-export) The symbol "TODO" needs to be exported by the entry point index.d.ts
// src/api.types.ts:18:25 - (ae-forgotten-export) The symbol "NoParams" needs to be exported by the entry point index.d.ts
// src/api.types.ts:631:18 - (ae-forgotten-export) The symbol "ShowUserReq" needs to be exported by the entry point index.d.ts
-// src/entities.ts:579:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts
+// src/entities.ts:107:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts
+// src/entities.ts:595:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts
// src/streaming.types.ts:33:4 - (ae-forgotten-export) The symbol "FIXME" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index d70472b137..cdbb5f38ce 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -20,12 +20,12 @@
"url": "git+https://github.com/misskey-dev/misskey.js.git"
},
"devDependencies": {
- "@microsoft/api-extractor": "7.37.0",
+ "@microsoft/api-extractor": "7.37.2",
"@swc/jest": "0.2.29",
"@types/jest": "29.5.5",
- "@types/node": "20.6.4",
- "@typescript-eslint/eslint-plugin": "6.7.2",
- "@typescript-eslint/parser": "6.7.2",
+ "@types/node": "20.7.1",
+ "@typescript-eslint/eslint-plugin": "6.7.3",
+ "@typescript-eslint/parser": "6.7.3",
"eslint": "8.50.0",
"jest": "29.7.0",
"jest-fetch-mock": "3.0.3",
@@ -39,7 +39,7 @@
],
"dependencies": {
"@swc/cli": "0.1.62",
- "@swc/core": "1.3.87",
+ "@swc/core": "1.3.90",
"eventemitter3": "5.0.1",
"reconnecting-websocket": "4.4.0"
}
diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts
index 46d790fe31..e69d8324a1 100644
--- a/packages/misskey-js/src/api.types.ts
+++ b/packages/misskey-js/src/api.types.ts
@@ -430,7 +430,7 @@ export type Endpoints = {
receiveAnnouncementEmail?: boolean;
alwaysMarkNsfw?: boolean;
mutedWords?: string[][];
- mutingNotificationTypes?: Notification['type'][];
+ notificationRecieveConfig?: any;
emailNotificationTypes?: string[];
alsoKnownAs?: string[];
}; res: MeDetailed; };
diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts
index aedfb5570e..271a64274f 100644
--- a/packages/misskey-js/src/consts.ts
+++ b/packages/misskey-js/src/consts.ts
@@ -74,6 +74,10 @@ export const moderationLogTypes = [
'markSensitiveDriveFile',
'unmarkSensitiveDriveFile',
'resolveAbuseReport',
+ 'createInvitation',
+ 'createAd',
+ 'updateAd',
+ 'deleteAd',
] as const;
export type ModerationLogPayloads = {
@@ -216,4 +220,20 @@ export type ModerationLogPayloads = {
report: any;
forwarded: boolean;
};
+ createInvitation: {
+ invitations: any[];
+ };
+ createAd: {
+ adId: string;
+ ad: any;
+ };
+ updateAd: {
+ adId: string;
+ before: any;
+ after: any;
+ };
+ deleteAd: {
+ adId: string;
+ ad: any;
+ };
};
diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts
index 41c9bdef6e..e6bac2a5f4 100644
--- a/packages/misskey-js/src/entities.ts
+++ b/packages/misskey-js/src/entities.ts
@@ -1,4 +1,4 @@
-import { ModerationLogPayloads } from './consts.js';
+import { ModerationLogPayloads, notificationTypes } from './consts.js';
export type ID = string;
export type DateString = string;
@@ -104,7 +104,22 @@ export type MeDetailed = UserDetailed & {
isDeleted: boolean;
isExplorable: boolean;
mutedWords: string[][];
- mutingNotificationTypes: string[];
+ notificationRecieveConfig: {
+ [notificationType in typeof notificationTypes[number]]?: {
+ type: 'all';
+ } | {
+ type: 'never';
+ } | {
+ type: 'following';
+ } | {
+ type: 'follower';
+ } | {
+ type: 'mutualFollow';
+ } | {
+ type: 'list';
+ userListId: string;
+ };
+ };
noCrawle: boolean;
receiveAnnouncementEmail: boolean;
usePasswordLessLogin: boolean;
@@ -162,6 +177,7 @@ export type GalleryPost = {
export type Note = {
id: ID;
createdAt: DateString;
+ updatedAt?: DateString | null;
text: string | null;
cw: string | null;
user: User;
@@ -655,4 +671,16 @@ export type ModerationLog = {
} | {
type: 'unmarkSensitiveDriveFile';
info: ModerationLogPayloads['unmarkSensitiveDriveFile'];
+} | {
+ type: 'createInvitation';
+ info: ModerationLogPayloads['createInvitation'];
+} | {
+ type: 'createAd';
+ info: ModerationLogPayloads['createAd'];
+} | {
+ type: 'updateAd';
+ info: ModerationLogPayloads['updateAd'];
+} | {
+ type: 'deleteAd';
+ info: ModerationLogPayloads['deleteAd'];
});
diff --git a/packages/misskey-js/src/streaming.types.ts b/packages/misskey-js/src/streaming.types.ts
index 96ac7787e1..ce29a00032 100644
--- a/packages/misskey-js/src/streaming.types.ts
+++ b/packages/misskey-js/src/streaming.types.ts
@@ -135,6 +135,13 @@ export type NoteUpdatedEvent = {
};
} | {
id: Note['id'];
+ type: 'updated';
+ body: {
+ cw: string | null;
+ text: string;
+ };
+} | {
+ id: Note['id'];
type: 'pollVoted';
body: {
choice: number;
diff --git a/packages/sw/package.json b/packages/sw/package.json
index 6f9f2f62e9..4499e9f38e 100644
--- a/packages/sw/package.json
+++ b/packages/sw/package.json
@@ -9,12 +9,12 @@
"lint": "pnpm typecheck && pnpm eslint"
},
"dependencies": {
- "esbuild": "0.19.3",
+ "esbuild": "0.19.4",
"idb-keyval": "6.2.1",
"misskey-js": "workspace:*"
},
"devDependencies": {
- "@typescript-eslint/parser": "6.7.2",
+ "@typescript-eslint/parser": "6.7.3",
"@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67",
"eslint": "8.50.0",
"eslint-plugin-import": "2.28.1",
diff --git a/packages/sw/src/scripts/create-notification.ts b/packages/sw/src/scripts/create-notification.ts
index f33ab1c33c..e96f8585c7 100644
--- a/packages/sw/src/scripts/create-notification.ts
+++ b/packages/sw/src/scripts/create-notification.ts
@@ -6,7 +6,7 @@
/*
* Notification manager for SW
*/
-import type { BadgeNames, PushNotificationDataMap } from '@/types';
+import type { BadgeNames, PushNotificationDataMap } from '@/types.js';
import { char2fileName } from '@/scripts/twemoji-base.js';
import { cli } from '@/scripts/operations.js';
import { getAccountFromId } from '@/scripts/get-account-from-id.js';
diff --git a/packages/sw/src/scripts/operations.ts b/packages/sw/src/scripts/operations.ts
index ca75e395c0..be4f066b5f 100644
--- a/packages/sw/src/scripts/operations.ts
+++ b/packages/sw/src/scripts/operations.ts
@@ -8,7 +8,7 @@
* å„種æ“作
*/
import * as Misskey from 'misskey-js';
-import type { SwMessage, SwMessageOrderType } from '@/types';
+import type { SwMessage, SwMessageOrderType } from '@/types.js';
import { getAccountFromId } from '@/scripts/get-account-from-id.js';
import { getUrlWithLoginId } from '@/scripts/login-id.js';
diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts
index 080161cf14..b79fd8ce7a 100644
--- a/packages/sw/src/sw.ts
+++ b/packages/sw/src/sw.ts
@@ -5,7 +5,7 @@
import { get } from 'idb-keyval';
import * as Misskey from 'misskey-js';
-import type { PushNotificationDataMap } from '@/types';
+import type { PushNotificationDataMap } from '@/types.js';
import { createEmptyNotification, createNotification } from '@/scripts/create-notification.js';
import { swLang } from '@/scripts/lang.js';
import * as swos from '@/scripts/operations.js';
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index deb08b1027..2ce08699c0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,7 +14,7 @@ importers:
dependencies:
cssnano:
specifier: 6.0.1
- version: 6.0.1(postcss@8.4.30)
+ version: 6.0.1(postcss@8.4.31)
execa:
specifier: 8.0.1
version: 8.0.1
@@ -22,8 +22,8 @@ importers:
specifier: 4.1.0
version: 4.1.0
postcss:
- specifier: 8.4.30
- version: 8.4.30
+ specifier: 8.4.31
+ version: 8.4.31
terser:
specifier: 5.20.0
version: 5.20.0
@@ -36,17 +36,17 @@ importers:
version: 4.4.0
devDependencies:
'@typescript-eslint/eslint-plugin':
- specifier: 6.7.2
- version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2)
'@typescript-eslint/parser':
- specifier: 6.7.2
- version: 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(eslint@8.50.0)(typescript@5.2.2)
cross-env:
specifier: 7.0.3
version: 7.0.3
cypress:
- specifier: 13.2.0
- version: 13.2.0
+ specifier: 13.3.0
+ version: 13.3.0
eslint:
specifier: 8.50.0
version: 8.50.0
@@ -90,8 +90,8 @@ importers:
specifier: 9.2.1
version: 9.2.1(bufferutil@4.0.7)(utf-8-validate@6.0.3)
'@fastify/multipart':
- specifier: 7.7.3
- version: 7.7.3
+ specifier: 8.0.0
+ version: 8.0.0
'@fastify/static':
specifier: 6.11.2
version: 6.11.2
@@ -111,8 +111,8 @@ importers:
specifier: 1.7.0
version: 1.7.0
'@simplewebauthn/server':
- specifier: 8.1.1
- version: 8.1.1
+ specifier: 8.2.0
+ version: 8.2.0
'@sinonjs/fake-timers':
specifier: 11.1.0
version: 11.1.0
@@ -121,10 +121,10 @@ importers:
version: 2.1.5
'@swc/cli':
specifier: 0.1.62
- version: 0.1.62(@swc/core@1.3.87)(chokidar@3.5.3)
+ version: 0.1.62(@swc/core@1.3.90)(chokidar@3.5.3)
'@swc/core':
- specifier: 1.3.87
- version: 1.3.87
+ specifier: 1.3.90
+ version: 1.3.90
accepts:
specifier: 1.3.8
version: 1.3.8
@@ -234,8 +234,8 @@ importers:
specifier: 10.8.6
version: 10.8.6
meilisearch:
- specifier: 0.34.2
- version: 0.34.2
+ specifier: 0.35.0
+ version: 0.35.0
mfm-js:
specifier: 0.23.3
version: 0.23.3
@@ -354,8 +354,8 @@ importers:
specifier: github:misskey-dev/summaly
version: github.com/misskey-dev/summaly/d2d8db49943ccb201c1b1b283e9d0a630519fac7
systeminformation:
- specifier: 5.21.8
- version: 5.21.8
+ specifier: 5.21.9
+ version: 5.21.9
tinycolor2:
specifier: 1.6.0
version: 1.6.0
@@ -436,7 +436,7 @@ importers:
specifier: 4.4.0
version: 4.4.0(seedrandom@3.0.5)
bufferutil:
- specifier: ^4.0.7
+ specifier: 4.0.7
version: 4.0.7
slacc-android-arm-eabi:
specifier: 0.0.10
@@ -478,7 +478,7 @@ importers:
specifier: 0.0.10
version: 0.0.10
utf-8-validate:
- specifier: ^6.0.3
+ specifier: 6.0.3
version: 6.0.3
devDependencies:
'@jest/globals':
@@ -489,7 +489,7 @@ importers:
version: 8.0.0
'@swc/jest':
specifier: 0.2.29
- version: 0.2.29(@swc/core@1.3.87)
+ version: 0.2.29(@swc/core@1.3.90)
'@types/accepts':
specifier: 1.3.5
version: 1.3.5
@@ -533,14 +533,14 @@ importers:
specifier: 10.5.9
version: 10.5.9
'@types/mime-types':
- specifier: 2.1.1
- version: 2.1.1
+ specifier: 2.1.2
+ version: 2.1.2
'@types/ms':
- specifier: 0.7.31
- version: 0.7.31
+ specifier: 0.7.32
+ version: 0.7.32
'@types/node':
- specifier: 20.6.4
- version: 20.6.4
+ specifier: 20.7.1
+ version: 20.7.1
'@types/node-fetch':
specifier: 3.0.3
version: 3.0.3
@@ -557,11 +557,11 @@ importers:
specifier: 0.1.0
version: 0.1.0
'@types/pg':
- specifier: 8.10.2
- version: 8.10.2
+ specifier: 8.10.3
+ version: 8.10.3
'@types/pug':
- specifier: 2.0.6
- version: 2.0.6
+ specifier: 2.0.7
+ version: 2.0.7
'@types/punycode':
specifier: 2.1.0
version: 2.1.0
@@ -575,23 +575,23 @@ importers:
specifier: 3.4.4
version: 3.4.4
'@types/rename':
- specifier: 1.0.4
- version: 1.0.4
+ specifier: 1.0.5
+ version: 1.0.5
'@types/sanitize-html':
- specifier: 2.9.0
- version: 2.9.0
+ specifier: 2.9.1
+ version: 2.9.1
'@types/semver':
- specifier: 7.5.2
- version: 7.5.2
+ specifier: 7.5.3
+ version: 7.5.3
'@types/sharp':
specifier: 0.32.0
version: 0.32.0
'@types/simple-oauth2':
- specifier: 5.0.4
- version: 5.0.4
+ specifier: 5.0.5
+ version: 5.0.5
'@types/sinonjs__fake-timers':
- specifier: 8.1.2
- version: 8.1.2
+ specifier: 8.1.3
+ version: 8.1.3
'@types/tinycolor2':
specifier: 1.4.4
version: 1.4.4
@@ -599,20 +599,20 @@ importers:
specifier: 0.2.4
version: 0.2.4
'@types/vary':
- specifier: 1.1.0
- version: 1.1.0
+ specifier: 1.1.1
+ version: 1.1.1
'@types/web-push':
- specifier: 3.6.0
- version: 3.6.0
+ specifier: 3.6.1
+ version: 3.6.1
'@types/ws':
- specifier: 8.5.5
- version: 8.5.5
+ specifier: 8.5.6
+ version: 8.5.6
'@typescript-eslint/eslint-plugin':
- specifier: 6.7.2
- version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2)
'@typescript-eslint/parser':
- specifier: 6.7.2
- version: 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(eslint@8.50.0)(typescript@5.2.2)
aws-sdk-client-mock:
specifier: 3.0.0
version: 3.0.0
@@ -624,13 +624,13 @@ importers:
version: 8.50.0
eslint-plugin-import:
specifier: 2.28.1
- version: 2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)
+ version: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)
execa:
specifier: 8.0.1
version: 8.0.1
jest:
specifier: 29.7.0
- version: 29.7.0(@types/node@20.6.4)
+ version: 29.7.0(@types/node@20.7.1)
jest-mock:
specifier: 29.7.0
version: 29.7.0
@@ -648,28 +648,28 @@ importers:
version: 2.1.1
'@rollup/plugin-alias':
specifier: 5.0.0
- version: 5.0.0(rollup@3.29.2)
+ version: 5.0.0(rollup@3.29.4)
'@rollup/plugin-json':
specifier: 6.0.0
- version: 6.0.0(rollup@3.29.2)
+ version: 6.0.0(rollup@3.29.4)
'@rollup/plugin-replace':
specifier: 5.0.2
- version: 5.0.2(rollup@3.29.2)
+ version: 5.0.2(rollup@3.29.4)
'@rollup/pluginutils':
specifier: 5.0.4
- version: 5.0.4(rollup@3.29.2)
+ version: 5.0.4(rollup@3.29.4)
'@syuilo/aiscript':
specifier: 0.16.0
version: 0.16.0
'@tabler/icons-webfont':
- specifier: 2.35.0
- version: 2.35.0
+ specifier: 2.37.0
+ version: 2.37.0
'@vitejs/plugin-vue':
specifier: 4.3.4
version: 4.3.4(vite@4.4.9)(vue@3.3.4)
'@vue-macros/reactivity-transform':
specifier: 0.3.23
- version: 0.3.23(rollup@3.29.2)(vue@3.3.4)
+ version: 0.3.23(rollup@3.29.4)(vue@3.3.4)
'@vue/compiler-sfc':
specifier: 3.3.4
version: 3.3.4
@@ -689,8 +689,8 @@ importers:
specifier: 0.0.1
version: 0.0.1
canvas-confetti:
- specifier: 1.6.0
- version: 1.6.0
+ specifier: 1.6.1
+ version: 1.6.1
chart.js:
specifier: 4.4.0
version: 4.4.0
@@ -722,7 +722,7 @@ importers:
specifier: 0.0.1
version: 0.0.1
estree-walker:
- specifier: ^3.0.3
+ specifier: 3.0.3
version: 3.0.3
eventemitter3:
specifier: 5.0.1
@@ -764,8 +764,8 @@ importers:
specifier: 0.2.1
version: 0.2.1
rollup:
- specifier: 3.29.2
- version: 3.29.2
+ specifier: 3.29.4
+ version: 3.29.4
sanitize-html:
specifier: 2.11.0
version: 2.11.0
@@ -779,8 +779,8 @@ importers:
specifier: 3.1.0
version: 3.1.0
three:
- specifier: 0.156.1
- version: 0.156.1
+ specifier: 0.157.0
+ version: 0.157.0
throttle-debounce:
specifier: 5.0.0
version: 5.0.0
@@ -803,14 +803,14 @@ importers:
specifier: 9.0.1
version: 9.0.1
v-code-diff:
- specifier: ^1.7.1
+ specifier: 1.7.1
version: 1.7.1(vue@3.3.4)
vanilla-tilt:
specifier: 1.8.1
version: 1.8.1
vite:
specifier: 4.4.9
- version: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ version: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
vue:
specifier: 3.3.4
version: 3.3.4
@@ -822,59 +822,59 @@ importers:
version: 4.1.0(vue@3.3.4)
devDependencies:
'@storybook/addon-actions':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-essentials':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-interactions':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-links':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-storysource':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/addons':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/blocks':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/core-events':
- specifier: 7.4.4
- version: 7.4.4
+ specifier: 7.4.5
+ version: 7.4.5
'@storybook/jest':
specifier: 0.2.2
version: 0.2.2(vitest@0.34.5)
'@storybook/manager-api':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/preview-api':
- specifier: 7.4.4
- version: 7.4.4
+ specifier: 7.4.5
+ version: 7.4.5
'@storybook/react':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)
'@storybook/react-vite':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.4)(typescript@5.2.2)(vite@4.4.9)
'@storybook/testing-library':
specifier: 0.2.1
version: 0.2.1
'@storybook/theming':
- specifier: 7.4.4
- version: 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.4.5
+ version: 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/types':
- specifier: 7.4.4
- version: 7.4.4
+ specifier: 7.4.5
+ version: 7.4.5
'@storybook/vue3':
- specifier: 7.4.4
- version: 7.4.4(@vue/compiler-core@3.3.4)(vue@3.3.4)
+ specifier: 7.4.5
+ version: 7.4.5(@vue/compiler-core@3.3.4)(vue@3.3.4)
'@storybook/vue3-vite':
- specifier: 7.4.4
- version: 7.4.4(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4)
+ specifier: 7.4.5
+ version: 7.4.5(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4)
'@testing-library/vue':
specifier: 7.0.0
version: 7.0.0(@vue/compiler-sfc@3.3.4)(vue@3.3.4)
@@ -885,20 +885,20 @@ importers:
specifier: 1.0.2
version: 1.0.2
'@types/matter-js':
- specifier: 0.19.0
- version: 0.19.0
+ specifier: 0.19.1
+ version: 0.19.1
'@types/micromatch':
- specifier: 4.0.2
- version: 4.0.2
+ specifier: 4.0.3
+ version: 4.0.3
'@types/node':
- specifier: 20.6.4
- version: 20.6.4
+ specifier: 20.7.1
+ version: 20.7.1
'@types/punycode':
specifier: 2.1.0
version: 2.1.0
'@types/sanitize-html':
- specifier: 2.9.0
- version: 2.9.0
+ specifier: 2.9.1
+ version: 2.9.1
'@types/throttle-debounce':
specifier: 5.0.0
version: 5.0.0
@@ -909,17 +909,17 @@ importers:
specifier: 9.0.4
version: 9.0.4
'@types/websocket':
- specifier: 1.0.6
- version: 1.0.6
+ specifier: 1.0.7
+ version: 1.0.7
'@types/ws':
- specifier: 8.5.5
- version: 8.5.5
+ specifier: 8.5.6
+ version: 8.5.6
'@typescript-eslint/eslint-plugin':
- specifier: 6.7.2
- version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2)
'@typescript-eslint/parser':
- specifier: 6.7.2
- version: 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(eslint@8.50.0)(typescript@5.2.2)
'@vitest/coverage-v8':
specifier: 0.34.5
version: 0.34.5(vitest@0.34.5)
@@ -933,14 +933,14 @@ importers:
specifier: 7.0.3
version: 7.0.3
cypress:
- specifier: 13.2.0
- version: 13.2.0
+ specifier: 13.3.0
+ version: 13.3.0
eslint:
specifier: 8.50.0
version: 8.50.0
eslint-plugin-import:
specifier: 2.28.1
- version: 2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)
+ version: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)
eslint-plugin-vue:
specifier: 9.17.0
version: 9.17.0(eslint@8.50.0)
@@ -975,11 +975,11 @@ importers:
specifier: 2.0.1
version: 2.0.1
storybook:
- specifier: 7.4.4
- version: 7.4.4
+ specifier: 7.4.5
+ version: 7.4.5
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.4.4)(@storybook/components@7.4.4)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0)
+ version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.5)(@storybook/components@7.4.4)(@storybook/core-events@7.4.5)(@storybook/manager-api@7.4.5)(@storybook/preview-api@7.4.5)(@storybook/theming@7.4.5)(@storybook/types@7.4.5)(react-dom@18.2.0)(react@18.2.0)
summaly:
specifier: github:misskey-dev/summaly
version: github.com/misskey-dev/summaly/d2d8db49943ccb201c1b1b283e9d0a630519fac7
@@ -996,17 +996,17 @@ importers:
specifier: 9.3.1
version: 9.3.1(eslint@8.50.0)
vue-tsc:
- specifier: 1.8.13
- version: 1.8.13(typescript@5.2.2)
+ specifier: 1.8.15
+ version: 1.8.15(typescript@5.2.2)
packages/misskey-js:
dependencies:
'@swc/cli':
specifier: 0.1.62
- version: 0.1.62(@swc/core@1.3.87)(chokidar@3.5.3)
+ version: 0.1.62(@swc/core@1.3.90)(chokidar@3.5.3)
'@swc/core':
- specifier: 1.3.87
- version: 1.3.87
+ specifier: 1.3.90
+ version: 1.3.90
eventemitter3:
specifier: 5.0.1
version: 5.0.1
@@ -1015,29 +1015,29 @@ importers:
version: 4.4.0
devDependencies:
'@microsoft/api-extractor':
- specifier: 7.37.0
- version: 7.37.0(@types/node@20.6.4)
+ specifier: 7.37.2
+ version: 7.37.2(@types/node@20.7.1)
'@swc/jest':
specifier: 0.2.29
- version: 0.2.29(@swc/core@1.3.87)
+ version: 0.2.29(@swc/core@1.3.90)
'@types/jest':
specifier: 29.5.5
version: 29.5.5
'@types/node':
- specifier: 20.6.4
- version: 20.6.4
+ specifier: 20.7.1
+ version: 20.7.1
'@typescript-eslint/eslint-plugin':
- specifier: 6.7.2
- version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2)
'@typescript-eslint/parser':
- specifier: 6.7.2
- version: 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(eslint@8.50.0)(typescript@5.2.2)
eslint:
specifier: 8.50.0
version: 8.50.0
jest:
specifier: 29.7.0
- version: 29.7.0(@types/node@20.6.4)
+ version: 29.7.0(@types/node@20.7.1)
jest-fetch-mock:
specifier: 3.0.3
version: 3.0.3
@@ -1057,8 +1057,8 @@ importers:
packages/sw:
dependencies:
esbuild:
- specifier: 0.19.3
- version: 0.19.3
+ specifier: 0.19.4
+ version: 0.19.4
idb-keyval:
specifier: 6.2.1
version: 6.2.1
@@ -1067,8 +1067,8 @@ importers:
version: link:../misskey-js
devDependencies:
'@typescript-eslint/parser':
- specifier: 6.7.2
- version: 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ specifier: 6.7.3
+ version: 6.7.3(eslint@8.50.0)(typescript@5.2.2)
'@typescript/lib-webworker':
specifier: npm:@types/serviceworker@0.0.67
version: /@types/serviceworker@0.0.67
@@ -1077,7 +1077,7 @@ importers:
version: 8.50.0
eslint-plugin-import:
specifier: 2.28.1
- version: 2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)
+ version: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)
typescript:
specifier: 5.2.2
version: 5.2.2
@@ -1979,14 +1979,6 @@ packages:
dependencies:
'@babel/types': 7.22.5
- /@babel/parser@7.22.11:
- resolution: {integrity: sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dependencies:
- '@babel/types': 7.22.17
- dev: true
-
/@babel/parser@7.22.16:
resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==}
engines: {node: '>=6.0.0'}
@@ -3328,8 +3320,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/android-arm64@0.19.3:
- resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==}
+ /@esbuild/android-arm64@0.19.4:
+ resolution: {integrity: sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -3345,8 +3337,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/android-arm@0.19.3:
- resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==}
+ /@esbuild/android-arm@0.19.4:
+ resolution: {integrity: sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -3362,8 +3354,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/android-x64@0.19.3:
- resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==}
+ /@esbuild/android-x64@0.19.4:
+ resolution: {integrity: sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -3379,8 +3371,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/darwin-arm64@0.19.3:
- resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==}
+ /@esbuild/darwin-arm64@0.19.4:
+ resolution: {integrity: sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -3396,8 +3388,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/darwin-x64@0.19.3:
- resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==}
+ /@esbuild/darwin-x64@0.19.4:
+ resolution: {integrity: sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -3413,8 +3405,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/freebsd-arm64@0.19.3:
- resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==}
+ /@esbuild/freebsd-arm64@0.19.4:
+ resolution: {integrity: sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -3430,8 +3422,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/freebsd-x64@0.19.3:
- resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==}
+ /@esbuild/freebsd-x64@0.19.4:
+ resolution: {integrity: sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -3447,8 +3439,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-arm64@0.19.3:
- resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==}
+ /@esbuild/linux-arm64@0.19.4:
+ resolution: {integrity: sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -3464,8 +3456,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-arm@0.19.3:
- resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==}
+ /@esbuild/linux-arm@0.19.4:
+ resolution: {integrity: sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -3481,8 +3473,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-ia32@0.19.3:
- resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==}
+ /@esbuild/linux-ia32@0.19.4:
+ resolution: {integrity: sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -3498,8 +3490,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-loong64@0.19.3:
- resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==}
+ /@esbuild/linux-loong64@0.19.4:
+ resolution: {integrity: sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -3515,8 +3507,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-mips64el@0.19.3:
- resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==}
+ /@esbuild/linux-mips64el@0.19.4:
+ resolution: {integrity: sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -3532,8 +3524,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-ppc64@0.19.3:
- resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==}
+ /@esbuild/linux-ppc64@0.19.4:
+ resolution: {integrity: sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -3549,8 +3541,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-riscv64@0.19.3:
- resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==}
+ /@esbuild/linux-riscv64@0.19.4:
+ resolution: {integrity: sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -3566,8 +3558,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-s390x@0.19.3:
- resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==}
+ /@esbuild/linux-s390x@0.19.4:
+ resolution: {integrity: sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -3583,8 +3575,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-x64@0.19.3:
- resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==}
+ /@esbuild/linux-x64@0.19.4:
+ resolution: {integrity: sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -3600,8 +3592,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/netbsd-x64@0.19.3:
- resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==}
+ /@esbuild/netbsd-x64@0.19.4:
+ resolution: {integrity: sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -3617,8 +3609,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/openbsd-x64@0.19.3:
- resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==}
+ /@esbuild/openbsd-x64@0.19.4:
+ resolution: {integrity: sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -3634,8 +3626,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/sunos-x64@0.19.3:
- resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==}
+ /@esbuild/sunos-x64@0.19.4:
+ resolution: {integrity: sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -3651,8 +3643,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-arm64@0.19.3:
- resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==}
+ /@esbuild/win32-arm64@0.19.4:
+ resolution: {integrity: sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -3668,8 +3660,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-ia32@0.19.3:
- resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==}
+ /@esbuild/win32-ia32@0.19.4:
+ resolution: {integrity: sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -3685,8 +3677,8 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-x64@0.19.3:
- resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==}
+ /@esbuild/win32-x64@0.19.4:
+ resolution: {integrity: sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -3810,15 +3802,14 @@ packages:
- utf-8-validate
dev: false
- /@fastify/multipart@7.7.3:
- resolution: {integrity: sha512-MG4Gd9FNEXc8qx0OgqoXM10EGO/dN/0iVQ8SrpFMU3d6F6KUfcqD2ZyoQhkm9LWrbiMgdHv5a43x78lASdn5GA==}
+ /@fastify/multipart@8.0.0:
+ resolution: {integrity: sha512-xaH1pGIqYnIJjYs5qG6ryhPSFnWuJIfSXYqEUtzmcyREkMk0SwONd2y+SZ9JXfDmETAC/Ogtc/SRbz+AjZhCkw==}
dependencies:
'@fastify/busboy': 1.1.0
'@fastify/deepmerge': 1.3.0
'@fastify/error': 3.2.0
'@fastify/swagger': 8.6.0
'@fastify/swagger-ui': 1.9.0
- end-of-stream: 1.4.4
fastify-plugin: 4.5.0
secure-json-parse: 2.7.0
stream-wormhole: 1.1.0
@@ -4017,7 +4008,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
jest-message-util: 29.7.0
jest-util: 29.7.0
@@ -4038,14 +4029,14 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
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.7.0
- jest-config: 29.7.0(@types/node@20.6.4)
+ jest-config: 29.7.0(@types/node@20.7.1)
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -4080,7 +4071,7 @@ packages:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
jest-mock: 29.7.0
dev: true
@@ -4107,7 +4098,7 @@ packages:
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -4140,7 +4131,7 @@ packages:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.18
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
@@ -4234,7 +4225,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@types/yargs': 16.0.5
chalk: 4.1.2
dev: true
@@ -4246,7 +4237,7 @@ packages:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@types/yargs': 17.0.19
chalk: 4.1.2
dev: true
@@ -4265,7 +4256,7 @@ packages:
magic-string: 0.27.0
react-docgen-typescript: 2.2.2(typescript@5.2.2)
typescript: 5.2.2
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
dev: true
/@jridgewell/gen-mapping@0.3.2:
@@ -4350,26 +4341,26 @@ packages:
react: 18.2.0
dev: true
- /@microsoft/api-extractor-model@7.28.0(@types/node@20.6.4):
- resolution: {integrity: sha512-QIMtUVm1tqiKG+M6ciFgRShcDoovyltaeg+CbyOnyr7SMrp6gg0ojK5/nToMqR9kAvsTS4QVgW4Twl50EoAjcw==}
+ /@microsoft/api-extractor-model@7.28.2(@types/node@20.7.1):
+ resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==}
dependencies:
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.60.0(@types/node@20.6.4)
+ '@rushstack/node-core-library': 3.61.0(@types/node@20.7.1)
transitivePeerDependencies:
- '@types/node'
dev: true
- /@microsoft/api-extractor@7.37.0(@types/node@20.6.4):
- resolution: {integrity: sha512-df/wffWpDhYRw7kzdxeHGsCpim+dC8aFiZlsJb4uFvVPWhBZpDzOhQxSUTFx3Df1ORY+/JjuPR3fDE9Hq+PHzQ==}
+ /@microsoft/api-extractor@7.37.2(@types/node@20.7.1):
+ resolution: {integrity: sha512-b4tr1rTto9/utTjbuqRwfQP2mzP0ACCmJMUY0JIOfOQ3tewGOkMCIRpIS5kcv5/nURekoAY06hNwHmkVsv/s1g==}
hasBin: true
dependencies:
- '@microsoft/api-extractor-model': 7.28.0(@types/node@20.6.4)
+ '@microsoft/api-extractor-model': 7.28.2(@types/node@20.7.1)
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.60.0(@types/node@20.6.4)
- '@rushstack/rig-package': 0.5.0
- '@rushstack/ts-command-line': 4.16.0
+ '@rushstack/node-core-library': 3.61.0(@types/node@20.7.1)
+ '@rushstack/rig-package': 0.5.1
+ '@rushstack/ts-command-line': 4.16.1
colors: 1.2.5
lodash: 4.17.21
resolve: 1.22.3
@@ -5198,7 +5189,7 @@ packages:
'@babel/runtime': 7.22.10
dev: true
- /@rollup/plugin-alias@5.0.0(rollup@3.29.2):
+ /@rollup/plugin-alias@5.0.0(rollup@3.29.4):
resolution: {integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5207,11 +5198,11 @@ packages:
rollup:
optional: true
dependencies:
- rollup: 3.29.2
+ rollup: 3.29.4
slash: 4.0.0
dev: false
- /@rollup/plugin-json@6.0.0(rollup@3.29.2):
+ /@rollup/plugin-json@6.0.0(rollup@3.29.4):
resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5220,11 +5211,11 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
- rollup: 3.29.2
+ '@rollup/pluginutils': 5.0.4(rollup@3.29.4)
+ rollup: 3.29.4
dev: false
- /@rollup/plugin-replace@5.0.2(rollup@3.29.2):
+ /@rollup/plugin-replace@5.0.2(rollup@3.29.4):
resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5233,12 +5224,12 @@ packages:
rollup:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+ '@rollup/pluginutils': 5.0.4(rollup@3.29.4)
magic-string: 0.27.0
- rollup: 3.29.2
+ rollup: 3.29.4
dev: false
- /@rollup/pluginutils@5.0.4(rollup@3.29.2):
+ /@rollup/pluginutils@5.0.4(rollup@3.29.4):
resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5250,17 +5241,17 @@ packages:
'@types/estree': 1.0.2
estree-walker: 2.0.2
picomatch: 2.3.1
- rollup: 3.29.2
+ rollup: 3.29.4
- /@rushstack/node-core-library@3.60.0(@types/node@20.6.4):
- resolution: {integrity: sha512-PcyrqhILvzU+65wMFybQ2VeGNnU5JzhDq2OvUi3j6jPUxyllM7b2hrRUwCuVaYboewYzIbpzXFzgxe2K7ii1nw==}
+ /@rushstack/node-core-library@3.61.0(@types/node@20.7.1):
+ resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
'@types/node':
optional: true
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
colors: 1.2.5
fs-extra: 7.0.1
import-lazy: 4.0.0
@@ -5270,15 +5261,15 @@ packages:
z-schema: 5.0.5
dev: true
- /@rushstack/rig-package@0.5.0:
- resolution: {integrity: sha512-bGnOW4DWHOePDiABKy6qyqYJl9i7fKn4bRucExRVt5QzyPxuVHMl8CMmCabtoNSpXzgG3qymWOrMoa/W2PpJrw==}
+ /@rushstack/rig-package@0.5.1:
+ resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==}
dependencies:
resolve: 1.22.3
strip-json-comments: 3.1.1
dev: true
- /@rushstack/ts-command-line@4.16.0:
- resolution: {integrity: sha512-WJKhdR9ThK9Iy7t78O3at7I3X4Ssp5RRZay/IQa8NywqkFy/DQbT3iLouodMMdUwLZD9n8n++xLubVd3dkmpkg==}
+ /@rushstack/ts-command-line@4.16.1:
+ resolution: {integrity: sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==}
dependencies:
'@types/argparse': 1.0.38
argparse: 1.0.10
@@ -5300,8 +5291,8 @@ packages:
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
dev: true
- /@simplewebauthn/server@8.1.1:
- resolution: {integrity: sha512-fJ0Ux9eV5oLa6gowHiUXx+oDqh6DhDK/w1oenn8p9+MhZDCXtLOIWl3Crgq5FLnwOuX9NpJzHgmgaOk2b8Tojg==}
+ /@simplewebauthn/server@8.2.0:
+ resolution: {integrity: sha512-nknf7kCa5V61Kk2zn1vTuKeAlyut9aWduIcbHNQWpMCEJqH/m8cXpb+9UV42MEQRIk8JVC1GSNeEx56QVTfJHw==}
engines: {node: '>=16.0.0'}
dependencies:
'@hexagon/base64': 1.1.27
@@ -5815,8 +5806,8 @@ packages:
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
dev: false
- /@storybook/addon-actions@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-DT9KfP5UTXwptsfP46KOzMjEf73743VprIu1o/5nx+165qmAQhjfs3A+KlSOfEvNbKCYtxHuYTbEO81G0SHr5g==}
+ /@storybook/addon-actions@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-FkjJWmPN/+duLSkRwfa2bwlwjKfY6yCXYn7CRzn3rb64B8f50NB79zAgVLHjkJh9l6T3DIlWtol6vqPHj1aRpw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5826,14 +5817,14 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
dequal: 2.0.3
lodash: 4.17.21
polished: 4.2.2
@@ -5849,8 +5840,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-backgrounds@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-cgfo0hoYcUuqm+wiDWetR8qJrMykms9lAZYV1Iv0GEeYJGCW+PH/2WemMBMLJA5/D+Zne1ZoJ9La69UhU4m7Cw==}
+ /@storybook/addon-backgrounds@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-fTq9E1WrYH/9hwDemFVLVcaI2iSSuwWnvY/8tqGrY9xhQF5dIpeHf+z8+HWXpau7e6Z0/WiYR+1vwAcIKt95LQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5860,14 +5851,14 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -5877,8 +5868,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-controls@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-RGJDfaCu+I0fQyw8rOfUZZm8PTSAa9NmHfKLH/WXnxCrF1kUffVP7G40kRLYS1Ymm5Z3fp3/PVkz9tTUG6PNOQ==}
+ /@storybook/addon-controls@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-Mxs56jt44HIbZ4gJa0AII1U8GqEGFsvcM5Iob0ETNpxCW5Kj5iHly/4Ws0RFWPH/krrQKaLpWXaUxKmbtEzhJA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5888,16 +5879,16 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/blocks': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-common': 7.4.4
- '@storybook/core-events': 7.4.4
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/node-logger': 7.4.4
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/blocks': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-common': 7.4.5
+ '@storybook/core-events': 7.4.5
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/node-logger': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
lodash: 4.17.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -5909,27 +5900,27 @@ packages:
- supports-color
dev: true
- /@storybook/addon-docs@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-ZXFtBXyfn6uCiRzMsoDZEwAe6/KIYlyfZmm+zjpiXzGJqidEBVJBdPUXNRJZgpg/p0KyehPNtTGqZooJm3gamA==}
+ /@storybook/addon-docs@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-KjFVeq8oL7ZC1gsk8iY3Nn0RrHHUpczmOTCd8FeVNmKD4vq+dkPb/8bJLy+jArmIZ8vRhknpTh6kp1BqB7qHGQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
'@jest/transform': 29.7.0
'@mdx-js/react': 2.3.0(react@18.2.0)
- '@storybook/blocks': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/csf-plugin': 7.4.4
- '@storybook/csf-tools': 7.4.4
+ '@storybook/blocks': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/csf-plugin': 7.4.5
+ '@storybook/csf-tools': 7.4.5
'@storybook/global': 5.0.0
'@storybook/mdx2-csf': 1.0.0
- '@storybook/node-logger': 7.4.4
- '@storybook/postinstall': 7.4.4
- '@storybook/preview-api': 7.4.4
- '@storybook/react-dom-shim': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/node-logger': 7.4.5
+ '@storybook/postinstall': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ '@storybook/react-dom-shim': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
fs-extra: 11.1.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -5943,25 +5934,25 @@ packages:
- supports-color
dev: true
- /@storybook/addon-essentials@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-LE/3jwJfAWYIUHs5uOqJRfP9b4APRXGhaBarUjZxmeIstJaN6Nd4n0AFgl8z+wKjlss/b5obC9uqeLHzbdJ3iw==}
+ /@storybook/addon-essentials@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-H7zZWJXZP0UU2kXfo9zlQfjIKHuuqYBK7PZ2/SL5y08mTrbtt1BfqYScz3xRvHocaFcsBWCXdy8jJULT4KFUpw==}
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.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-backgrounds': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-controls': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-docs': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-highlight': 7.4.4
- '@storybook/addon-measure': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-outline': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-toolbars': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-viewport': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-common': 7.4.4
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/node-logger': 7.4.4
- '@storybook/preview-api': 7.4.4
+ '@storybook/addon-actions': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-backgrounds': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-controls': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-docs': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-highlight': 7.4.5
+ '@storybook/addon-measure': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-outline': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-toolbars': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-viewport': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-common': 7.4.5
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/node-logger': 7.4.5
+ '@storybook/preview-api': 7.4.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ts-dedent: 2.2.0
@@ -5972,16 +5963,16 @@ packages:
- supports-color
dev: true
- /@storybook/addon-highlight@7.4.4:
- resolution: {integrity: sha512-09vlOGp1vx+CWVhb+QVTmhodEMqosNLhu69D+FOB7Q+qGK0XdpPLa33DMcAYt/eFEAb55OYQY8NYuoO8kkFT+A==}
+ /@storybook/addon-highlight@7.4.5:
+ resolution: {integrity: sha512-6Ru411+Iis4m2weKb8kB1eEssLvCHwFqAf4fjcOC//O5Vaf5+beHYZJUm/rzD0k/oUHfLCBwDBSBY5TLRegkdA==}
dependencies:
- '@storybook/core-events': 7.4.4
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.4.4
+ '@storybook/preview-api': 7.4.5
dev: true
- /@storybook/addon-interactions@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-WwZ4v2oQBm+IqDUlwzGTaS6LaejHEblM4xjmrCIl9F2ChzYOVV0FFdBHoWiVTGQxXhfUVbYKAMYVAg212SOYIg==}
+ /@storybook/addon-interactions@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-KDdV/THxj38VsuOevrUefev0rZPhzqUXCgrw1Jc2PsJGidHf9d9nnB7wbA9ZFYsxTz90M/Vk5sm7i1QkMmsquA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5991,16 +5982,16 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-common': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-common': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/instrumenter': 7.4.4
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/instrumenter': 7.4.5
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
jest-mock: 27.5.1
polished: 4.2.2
react: 18.2.0
@@ -6013,8 +6004,8 @@ packages:
- supports-color
dev: true
- /@storybook/addon-links@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-ZDs7+FaWuLVl4Y5+qSr9Pu668wTdSQmMS1pY/QzwA7Lj3ADDEXMFTBt0MqGtyH7U5mmVQlmYm9d4WmHjvKU0qQ==}
+ /@storybook/addon-links@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-eKczq3U5KfPLaxMUzzVQQrGVtzDshUmrSEEuWKf9ZbK3mh5yVuagIBb88edgUX58vZ3TJMvqQzq1+BtUoPHQ6Q==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6024,22 +6015,22 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/csf': 0.1.0
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/router': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/router': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
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.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-gm8x9+PA7v48wJZltWNB41vvhqzWASDtuir8ozHYsYxdUsCpCnB79MPOQ0BsqbFYmscTaYghDAugLLS5+Tg8LQ==}
+ /@storybook/addon-measure@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-FQGZniTH67nC1YPR4ep0p+isgxwLaNAmIAyCZWXPRTkZssIrnXVwNgi0A2QkHdxZvxj8yXGFTOVXLWEPT9YvFQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6049,13 +6040,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
tiny-invariant: 1.3.1
@@ -6064,8 +6055,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-outline@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-HJgxPOwq1TDWXqiBlqnFWxE9nlXlxH3XfKqhWTXORE1CKZ/BXdrPkdq2Hog8ON15K3PVdAcawgkO4YJ/n0JPaA==}
+ /@storybook/addon-outline@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-eOH9BZzpehUz5FXD98OLnWgzmBFMvEB2kFfw5JiO7IRx7Fan80fx/WDQuMSNDOgLBCTTvsZ4TBMMXZHpw91WAw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6075,13 +6066,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ts-dedent: 2.2.0
@@ -6090,8 +6081,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-storysource@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-e/frZMYbriIwPl9xNapUaSEQrngbBPz4Nz5gNcPHF/uDM04a3hyVAMycZmFLHmuu1TH9FzZ9mhzTQjpJuACq0w==}
+ /@storybook/addon-storysource@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-aWQkW4IzDHRXdUyHPfksSdk4zK4gIJvXpxVCqX+oz3FuadmwZmhK1vWxNdm4Jo/0EZdwe2YZOBJwXHIwpZtigg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6101,13 +6092,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/router': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/source-loader': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/router': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/source-loader': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
estraverse: 5.3.0
prop-types: 15.8.1
react: 18.2.0
@@ -6119,8 +6110,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-toolbars@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-lbXO2weuYcly4nRTpK6tS4mhx/YbPAy2qpoePEL847I+hQJiKWsgSYbA6bnC5tXe0l6mq1VVcTFtEW2wyu9WQQ==}
+ /@storybook/addon-toolbars@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-PZlwUTIdQ18de3zNb+627VSF4UrCGIXDdikyO9O5j2Cd0xfr5uhS6tgQ+3AT0DfUj0UIkKxilwcAt+agpNyicA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6130,11 +6121,11 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -6142,8 +6133,8 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addon-viewport@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-8uRpOpNYHlCL3uAYhj6uoLHKmW2UtQXDff9KhO6mO+vgat25YKBeu1wwGUHnCL3vDSis6hfbjRSVbsfrekUYWg==}
+ /@storybook/addon-viewport@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-SBLnUMIztVrqJ0fRCsVg9KZ29APLIxqAvTsYHF3twy5KB2naeCFuX3K9LxSH7vbROI6zHEfnPduz/Ykyvu9yUg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6153,13 +6144,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
memoizerific: 1.11.3
prop-types: 15.8.1
react: 18.2.0
@@ -6169,36 +6160,36 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/addons@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-uEOxUcJqDwr0FMSu/SHc76V9bWBxk3/9FuiTkkOA4rClLMXOrm/AhUurVsOEbsYgXNg7lqddguTPAEj3RFO/3A==}
+ /@storybook/addons@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-jmdQf39XhwVi8d0J99qpk51fOAwNhYlCtVctvFWPX4qC1cq1d1pxLmTb5OBV2VHQ11BKwlKLzA7coiOgAQmNRg==}
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.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/blocks@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-Xm/yeZkaBhqvg5dciBj2UFXQTGFpoy0HhO4ShvaWfhdEgBluufNAQ19hMvvoXPHgjiBzzxETq1mlY7LIdUzJEg==}
+ /@storybook/blocks@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-FhAIkCT2HrzJcKsC3mL5+uG3GrbS23mYAT1h3iyPjCliZzxfCCI9UCMUXqYx4Z/FmAGJgpsQQXiBFZuoTHO9aQ==}
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.4.4
- '@storybook/client-logger': 7.4.4
- '@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
+ '@storybook/channels': 7.4.5
+ '@storybook/client-logger': 7.4.5
+ '@storybook/components': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.4.5
'@storybook/csf': 0.1.0
- '@storybook/docs-tools': 7.4.4
+ '@storybook/docs-tools': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
'@types/lodash': 4.14.191
color-convert: 2.0.1
dequal: 2.0.3
@@ -6220,13 +6211,13 @@ packages:
- supports-color
dev: true
- /@storybook/builder-manager@7.4.4:
- resolution: {integrity: sha512-8PY9YfcUf1gPGOprjWze6bfXpX0+r6YZTgktViI/m+SmgFy5nmEJ7FWqo7u1y6dqxDJdwDXGBqvUGVU0XNXQMQ==}
+ /@storybook/builder-manager@7.4.5:
+ resolution: {integrity: sha512-Jhql8iZgK9cxDmG9NSTejsj5FptHni2TBa5Sea2Uz1NIBQ0OpzNdUfYVX6TN/PEq3QrWXTrAEKPqsL2qGjOrxw==}
dependencies:
'@fal-works/esbuild-plugin-global-externals': 2.1.2
- '@storybook/core-common': 7.4.4
- '@storybook/manager': 7.4.4
- '@storybook/node-logger': 7.4.4
+ '@storybook/core-common': 7.4.5
+ '@storybook/manager': 7.4.5
+ '@storybook/node-logger': 7.4.5
'@types/ejs': 3.1.2
'@types/find-cache-dir': 3.2.1
'@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.17)
@@ -6244,8 +6235,8 @@ packages:
- supports-color
dev: true
- /@storybook/builder-vite@7.4.4(typescript@5.2.2)(vite@4.4.9):
- resolution: {integrity: sha512-FpHlwTmrT9gYxfke77HcHSVoTvJCgunLGnrmNUgLwC0vVAWibWWTGtunfcV2fjBjzqVuH398qpaM+kIS9rjR8A==}
+ /@storybook/builder-vite@7.4.5(typescript@5.2.2)(vite@4.4.9):
+ resolution: {integrity: sha512-0aIMvBIx2U/DhDjdjWCW/KIG3HAJpus8NIUIvkVAUCaA7Vn8XvnSsdaRSTTxaaJReFZcIxDf7MebHSCJ0UEKqQ==}
peerDependencies:
'@preact/preset-vite': '*'
typescript: '>= 4.3.x'
@@ -6259,15 +6250,15 @@ packages:
vite-plugin-glimmerx:
optional: true
dependencies:
- '@storybook/channels': 7.4.4
- '@storybook/client-logger': 7.4.4
- '@storybook/core-common': 7.4.4
- '@storybook/csf-plugin': 7.4.4
+ '@storybook/channels': 7.4.5
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-common': 7.4.5
+ '@storybook/csf-plugin': 7.4.5
'@storybook/mdx2-csf': 1.0.0
- '@storybook/node-logger': 7.4.4
- '@storybook/preview': 7.4.4
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/node-logger': 7.4.5
+ '@storybook/preview': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
'@types/find-cache-dir': 3.2.1
browser-assert: 1.2.1
es-module-lexer: 0.9.3
@@ -6277,9 +6268,9 @@ packages:
magic-string: 0.30.3
remark-external-links: 8.0.0
remark-slug: 6.1.0
- rollup: 3.29.2
+ rollup: 3.29.4
typescript: 5.2.2
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- encoding
- supports-color
@@ -6296,23 +6287,34 @@ packages:
tiny-invariant: 1.3.1
dev: true
- /@storybook/cli@7.4.4:
- resolution: {integrity: sha512-2t7T7VpN52eGTYUlwx+VtQf/PMsULXoWkD5eO7kD6NmJbqvdgbLn/pbYePg5eOmgar0VvNhm94UOyW+roMxALA==}
+ /@storybook/channels@7.4.5:
+ resolution: {integrity: sha512-zWPZn4CxPFXsrrSRQ9JD8GmTeWeFYgr3sTBpe23hnhYookCXVNJ6AcaXogrT9b2ALfbB6MiFDbZIHHTgIgbWpg==}
+ dependencies:
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-events': 7.4.5
+ '@storybook/global': 5.0.0
+ qs: 6.11.1
+ telejson: 7.2.0
+ tiny-invariant: 1.3.1
+ dev: true
+
+ /@storybook/cli@7.4.5:
+ resolution: {integrity: sha512-PlTkcHdKCugg3pD1zkBP/oFazcZsr7F3wdEmTvygfH0Cx/sQWg5wXBZCYKmf0ONRK4RKL3LVM8DRpeYiQVEFWg==}
hasBin: true
dependencies:
'@babel/core': 7.22.11
'@babel/preset-env': 7.22.9(@babel/core@7.22.11)
'@babel/types': 7.22.17
'@ndelangen/get-tarball': 3.0.7
- '@storybook/codemod': 7.4.4
- '@storybook/core-common': 7.4.4
- '@storybook/core-events': 7.4.4
- '@storybook/core-server': 7.4.4
- '@storybook/csf-tools': 7.4.4
- '@storybook/node-logger': 7.4.4
- '@storybook/telemetry': 7.4.4
- '@storybook/types': 7.4.4
- '@types/semver': 7.5.2
+ '@storybook/codemod': 7.4.5
+ '@storybook/core-common': 7.4.5
+ '@storybook/core-events': 7.4.5
+ '@storybook/core-server': 7.4.5
+ '@storybook/csf-tools': 7.4.5
+ '@storybook/node-logger': 7.4.5
+ '@storybook/telemetry': 7.4.5
+ '@storybook/types': 7.4.5
+ '@types/semver': 7.5.3
'@yarnpkg/fslib': 2.10.3
'@yarnpkg/libzip': 2.3.0
chalk: 4.1.2
@@ -6354,16 +6356,22 @@ packages:
'@storybook/global': 5.0.0
dev: true
- /@storybook/codemod@7.4.4:
- resolution: {integrity: sha512-q9BeDXuDjUFb+In0DX+37vqofT0/j25CGGW629RfIoxd6VRr6oVoX6bBnyLO1zoSN+CmOQ9oKeLJjSiNFJntOw==}
+ /@storybook/client-logger@7.4.5:
+ resolution: {integrity: sha512-Bn6eTAjhPDUfLpvuxhKkpDpOtkadfkSmkBNBZRu3r0Dzk2J1nNyKV5K6D8dOU4PFVof4z/gXYj5bktT29jKsmw==}
+ dependencies:
+ '@storybook/global': 5.0.0
+ dev: true
+
+ /@storybook/codemod@7.4.5:
+ resolution: {integrity: sha512-gyI2xliSv4vvnfNQN+0e3tRmT7beiq8q8iGjcBtpOhA2xrStyCR7PjbOfLXtRx2I/b50MDZMRTcckzeM3BLoWQ==}
dependencies:
'@babel/core': 7.22.11
'@babel/preset-env': 7.22.9(@babel/core@7.22.11)
'@babel/types': 7.22.17
'@storybook/csf': 0.1.0
- '@storybook/csf-tools': 7.4.4
- '@storybook/node-logger': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/csf-tools': 7.4.5
+ '@storybook/node-logger': 7.4.5
+ '@storybook/types': 7.4.5
'@types/cross-spawn': 6.0.2
cross-spawn: 7.0.3
globby: 11.1.0
@@ -6398,19 +6406,42 @@ packages:
- '@types/react-dom'
dev: true
- /@storybook/core-client@7.4.4:
- resolution: {integrity: sha512-CENQOPML7ifh0fJFz1YvLzRv7QyU2SVAzw70bN5fDravCHwI1uQmnLF7QxnWrE8DtXlXosQZcAhCqAOQ7sfMxw==}
+ /@storybook/components@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-boskkfvMBB8CFYY9+1ofFNyKrdWXTY/ghzt7oK80dz6f2Eseo/WXK3OsCdCq5vWbLRCdbgJ8zXG8pAFi4yBsxA==}
+ 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.4.4
- '@storybook/preview-api': 7.4.4
+ '@radix-ui/react-select': 1.2.2(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-toolbar': 1.0.4(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.4.5
+ '@storybook/csf': 0.1.0
+ '@storybook/global': 5.0.0
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
+ memoizerific: 1.11.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
+ util-deprecate: 1.0.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
dev: true
- /@storybook/core-common@7.4.4:
- resolution: {integrity: sha512-0VKVNucIzaKVr5dU6BYwSzpLRtBoDa3dRBP7VTauz8gjhNak+mOQY7ZqqQWxCr21C0vsYz2noER2/jnijfMn5g==}
+ /@storybook/core-client@7.4.5:
+ resolution: {integrity: sha512-d/qiCUZeOKY0HX/YmomxlccxJ2NKC3ttRrAsAXzJGypClKabv20X+qbeO/E7Kp5UQxIEJx1wuwJPcnlCvjgPDA==}
dependencies:
- '@storybook/core-events': 7.4.4
- '@storybook/node-logger': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ dev: true
+
+ /@storybook/core-common@7.4.5:
+ resolution: {integrity: sha512-c4pBuILMD4YhSpJ+QpKtsUZpK+/rfolwOvzXfJwlN5EpYzMz6FjVR/LyX0cCT2YLI3X5YWRoCdvMxy5Aeryb8g==}
+ dependencies:
+ '@storybook/core-events': 7.4.5
+ '@storybook/node-logger': 7.4.5
+ '@storybook/types': 7.4.5
'@types/find-cache-dir': 3.2.1
'@types/node': 16.18.46
'@types/node-fetch': 2.6.4
@@ -6442,28 +6473,34 @@ packages:
ts-dedent: 2.2.0
dev: true
- /@storybook/core-server@7.4.4:
- resolution: {integrity: sha512-ObWoTBgTf3D+4GsbHA0jfVz+rDEMS82U+dlla1LHqpazNKJVg6aTLBnr7V7n3TAOXrXZyKbrVu0Vk5ZePLFuOw==}
+ /@storybook/core-events@7.4.5:
+ resolution: {integrity: sha512-Jzy/adSC95saYCZlgXE5j7jmiMLAXYpnBFBxEtBdXwSWEBb0zt21n1nyWBEAv9s/k2gqDXlPHKHeL5Mn6y40zA==}
+ dependencies:
+ ts-dedent: 2.2.0
+ dev: true
+
+ /@storybook/core-server@7.4.5:
+ resolution: {integrity: sha512-cW+Qx9Ls823577bd/s9Kv4M1MdKS8mkk6/+nYbwtAwH3hkdlb077rlk/ue0X4O9NZmCrtaJ84KNrBkeDUdFyLQ==}
dependencies:
'@aw-web-design/x-default-browser': 1.4.126
'@discoveryjs/json-ext': 0.5.7
- '@storybook/builder-manager': 7.4.4
- '@storybook/channels': 7.4.4
- '@storybook/core-common': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/builder-manager': 7.4.5
+ '@storybook/channels': 7.4.5
+ '@storybook/core-common': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/csf': 0.1.0
- '@storybook/csf-tools': 7.4.4
+ '@storybook/csf-tools': 7.4.5
'@storybook/docs-mdx': 0.1.0
'@storybook/global': 5.0.0
- '@storybook/manager': 7.4.4
- '@storybook/node-logger': 7.4.4
- '@storybook/preview-api': 7.4.4
- '@storybook/telemetry': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/manager': 7.4.5
+ '@storybook/node-logger': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ '@storybook/telemetry': 7.4.5
+ '@storybook/types': 7.4.5
'@types/detect-port': 1.3.2
'@types/node': 16.18.46
'@types/pretty-hrtime': 1.0.1
- '@types/semver': 7.5.2
+ '@types/semver': 7.5.3
better-opn: 3.0.2
chalk: 4.1.2
cli-table3: 0.6.3
@@ -6494,24 +6531,24 @@ packages:
- utf-8-validate
dev: true
- /@storybook/csf-plugin@7.4.4:
- resolution: {integrity: sha512-j5Ow2SBZjWX7c/StwMGZnB5ydiSFIZvR2ENTsbQ4UL1SEdF/GvzxtDjMPjhH3wCfyU3pmK6YV54ceD94IS22BQ==}
+ /@storybook/csf-plugin@7.4.5:
+ resolution: {integrity: sha512-8p3AnwIm3xXtQhiF7OQ0rBiP/Pn5OCMHRiT4FytRnNimGaw7gxRZ2xzM608QZHQ4A8rHfmgoM2FTwgxdC15ulA==}
dependencies:
- '@storybook/csf-tools': 7.4.4
+ '@storybook/csf-tools': 7.4.5
unplugin: 1.4.0
transitivePeerDependencies:
- supports-color
dev: true
- /@storybook/csf-tools@7.4.4:
- resolution: {integrity: sha512-/hhGg05WzMmk9jmkdGyCpy6mPn/PaNGSOggE95X0bZ81arzkqCCXej4vClxFdaCJyzWzqr/yQSBftpK1OWoHjA==}
+ /@storybook/csf-tools@7.4.5:
+ resolution: {integrity: sha512-xbm5HGYvlwF0Efivx37v9rO7Exel1/Tdb/Yv/vXn4D/hQeljNVLNz4Bomfy4EQ207rRsrGDSOHEhLUbHDimnxg==}
dependencies:
'@babel/generator': 7.22.10
'@babel/parser': 7.22.16
'@babel/traverse': 7.22.11
'@babel/types': 7.22.17
'@storybook/csf': 0.1.0
- '@storybook/types': 7.4.4
+ '@storybook/types': 7.4.5
fs-extra: 11.1.1
recast: 0.23.1
ts-dedent: 2.2.0
@@ -6529,12 +6566,12 @@ packages:
resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==}
dev: true
- /@storybook/docs-tools@7.4.4:
- resolution: {integrity: sha512-kCQgRsyAHxnHicu3G9px7mp0Lp2fckH23wfTz/qk6MdwKoO3V9lJs7tOjckq2DPu/m7BGs4lieBcMbOOUTHBmw==}
+ /@storybook/docs-tools@7.4.5:
+ resolution: {integrity: sha512-ctK+yGb2nvWISSvCCzj3ZhDaAb7I2BLjbxuBGTyNPvl4V9UQ9LBYzdJwR50q+DfscxdwSHMSOE/0OnzmJdaSJA==}
dependencies:
- '@storybook/core-common': 7.4.4
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/core-common': 7.4.5
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
'@types/doctrine': 0.0.3
doctrine: 3.0.0
lodash: 4.17.21
@@ -6553,14 +6590,14 @@ packages:
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
dev: true
- /@storybook/instrumenter@7.4.4:
- resolution: {integrity: sha512-WUaun2pb2AuFmsM+kBq7Q++Fjg9ibltUsfu75SELehKrE1lQ47H0f5AQaexy8Vqo8QXQuNtGo6RruztQfNIDQQ==}
+ /@storybook/instrumenter@7.4.5:
+ resolution: {integrity: sha512-VLFOcmG75QhWa7MtmfEybIJEz5oT2Ry8xAy/pIVhQwyBaeW0kRT0MHWkixRTtWQmJs/78FmHE3FlgMnqpa5JoA==}
dependencies:
- '@storybook/channels': 7.4.4
- '@storybook/client-logger': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/channels': 7.4.5
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.4.4
+ '@storybook/preview-api': 7.4.5
dev: true
/@storybook/jest@0.2.2(vitest@0.34.5):
@@ -6576,20 +6613,20 @@ packages:
- vitest
dev: true
- /@storybook/manager-api@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-NRYJQ/w1czvdkK7BblroTQ0kJoR1H+h3uthVCcWzFcLEGBbVXsurg0wasugi5UKHLqV7g8/8ZQToZvlPVAglAA==}
+ /@storybook/manager-api@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-8Hdh5Tutet8xRy2fAknczfvpshz09eVnLd8m34vcFceUOYvEnvDbWerufhlEzovsF4v7U32uqbDHKdKTamWEQQ==}
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.4.4
- '@storybook/client-logger': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/channels': 7.4.5
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/csf': 0.1.0
'@storybook/global': 5.0.0
- '@storybook/router': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/router': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
dequal: 2.0.3
lodash: 4.17.21
memoizerific: 1.11.3
@@ -6601,31 +6638,31 @@ packages:
ts-dedent: 2.2.0
dev: true
- /@storybook/manager@7.4.4:
- resolution: {integrity: sha512-JiYClrQ7emvgiPzM20lAx/xtsG8do6Rb2MDoomSH7IPhx1oIm5dft1IzMhC0NTsz41q3Or/VUsOQiFSo2sv/+Q==}
+ /@storybook/manager@7.4.5:
+ resolution: {integrity: sha512-yoqVktWzzC0f8cXsxErOEUfT+VFfWV/W7soytIPQuJFqNaq+BqR5A7WCeoY7BIv3mdpRjo4GKwerCsgoHYeHhg==}
dev: true
/@storybook/mdx2-csf@1.0.0:
resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==}
dev: true
- /@storybook/node-logger@7.4.4:
- resolution: {integrity: sha512-KrxGAg1DbIZrVh2gOwoGGC+mSSmrEZTHKnJjAHrcNUODxT8MQxsVner6Z0fKisDlucLV9rjLcUH7/3AhCwWEiQ==}
+ /@storybook/node-logger@7.4.5:
+ resolution: {integrity: sha512-fJSykphbryuEYj1qihbaTH5oOzD4NkptRxyf2uyBrpgkr5tCTq9d7GHheqaBuIdi513dsjlcIR7z5iHxW7ZD+Q==}
dev: true
- /@storybook/postinstall@7.4.4:
- resolution: {integrity: sha512-e4vjNjEzDhXia2fZAJOCI1sQbfKLsWZtJFkY4Z6D1KnALTaJMv16p3fhghEoPZfv6TTTK6F0lSUvPxv4V5ie1A==}
+ /@storybook/postinstall@7.4.5:
+ resolution: {integrity: sha512-MWRjnKkUpEe2VkHNNpv3zkuMvxM2Zu9DMxFENQaEmhqUHkIFh5klfFwzhSBRexVLzIh7DA1p7mntIpY5A6lh+Q==}
dev: true
- /@storybook/preview-api@7.4.4:
- resolution: {integrity: sha512-ra0dAZ7yBrHP8xCxvA8sBcKvm2kHH2S4Yj8cECnU87uYCbuyFyfrSiWeFcu2+kJj35wLck+lfnPS/FYUqNr2BQ==}
+ /@storybook/preview-api@7.4.5:
+ resolution: {integrity: sha512-6xXQZPyilkGVddfZBI7tMbMMgOyIoZTYgTnwSPTMsXxO0f0TvtNDmGdwhn0I1nREHKfiQGpcQe6gwddEMnGtSg==}
dependencies:
- '@storybook/channels': 7.4.4
- '@storybook/client-logger': 7.4.4
- '@storybook/core-events': 7.4.4
+ '@storybook/channels': 7.4.5
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-events': 7.4.5
'@storybook/csf': 0.1.0
'@storybook/global': 5.0.0
- '@storybook/types': 7.4.4
+ '@storybook/types': 7.4.5
'@types/qs': 6.9.7
dequal: 2.0.3
lodash: 4.17.21
@@ -6636,12 +6673,12 @@ packages:
util-deprecate: 1.0.2
dev: true
- /@storybook/preview@7.4.4:
- resolution: {integrity: sha512-PFvmVc8+uIKniU3xJaxKfXYHNsXE3kqZt9wJMnSv8eL6UmXPpHQTST6UA7kd/THWyuRsLjrwefdRN5lnwTJYqQ==}
+ /@storybook/preview@7.4.5:
+ resolution: {integrity: sha512-hCVFoPJP0d7vFCJKaWEsDMa6LcRFcEikQ8Cy6Vo+trS8xXwvwE+vIBqyuPozl4O/MYD9iOlzjgZFNwaUUgX0Jg==}
dev: true
- /@storybook/react-dom-shim@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-0FL/A+dMLJ6zp4nm6mAqfNJT01wxRHnZCENeye8+oxaEMgsZ/Q8Z9LRPaf3B01upwP9x48F9uZkC0htQ6a4kIA==}
+ /@storybook/react-dom-shim@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-/hGe8yuiWbT7L3ZsllmJPgxT9MEQE3k23FhliyKx6IGHsWoYaEsPYPZ9tygqtKY8RpqqMUKWz8+kbO79zUxaoQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6650,8 +6687,8 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/react-vite@7.4.4(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9):
- resolution: {integrity: sha512-cL0BIWJZFsmKmyp4VdKDYCiwe7L9ihTeyzRfr6oSs3hMKJKDo9Y5zw7NlbpZRXbKhEBYmh+irYrBLNdCRDN6Xw==}
+ /@storybook/react-vite@7.4.5(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.4)(typescript@5.2.2)(vite@4.4.9):
+ resolution: {integrity: sha512-VfEktqZlSiAcM0oqUnXvQDIFM/G3pOZSW9VCcdQp2NWbsG/UVH42++ZkT0qJmQtW+Kkr8mTofLK5H1v5si5Z1A==}
engines: {node: '>=16'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6659,16 +6696,16 @@ packages:
vite: ^3.0.0 || ^4.0.0
dependencies:
'@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.2.2)(vite@4.4.9)
- '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
- '@storybook/builder-vite': 7.4.4(typescript@5.2.2)(vite@4.4.9)
- '@storybook/react': 7.4.4(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)
+ '@rollup/pluginutils': 5.0.4(rollup@3.29.4)
+ '@storybook/builder-vite': 7.4.5(typescript@5.2.2)(vite@4.4.9)
+ '@storybook/react': 7.4.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)
'@vitejs/plugin-react': 3.1.0(vite@4.4.9)
ast-types: 0.14.2
magic-string: 0.30.3
react: 18.2.0
react-docgen: 6.0.0-alpha.3
react-dom: 18.2.0(react@18.2.0)
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- '@preact/preset-vite'
- encoding
@@ -6678,8 +6715,8 @@ packages:
- vite-plugin-glimmerx
dev: true
- /@storybook/react@7.4.4(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2):
- resolution: {integrity: sha512-yfTFywMAAjsA1lUBW2j5UkIkH95sDhmplzkFfeSTJkxQpW2blKTARb0VQp6k5MYBpq0LsWrz8uBZZRLXXCuobw==}
+ /@storybook/react@7.4.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-Tiylrs3uFO8QSvH1w3ueSxlAgh2fteH0edRVKaX01M/h47+QqEiZqq/dYkVDvLHngF+CCCwE3OY8nNe6L14Xkw==}
engines: {node: '>=16.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -6689,13 +6726,13 @@ packages:
typescript:
optional: true
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/core-client': 7.4.4
- '@storybook/docs-tools': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-client': 7.4.5
+ '@storybook/docs-tools': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.4.4
- '@storybook/react-dom-shim': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/preview-api': 7.4.5
+ '@storybook/react-dom-shim': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
'@types/escodegen': 0.0.6
'@types/estree': 0.0.51
'@types/node': 16.18.46
@@ -6718,27 +6755,27 @@ packages:
- supports-color
dev: true
- /@storybook/router@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-whaDTdbqluWWU+sMOK73QMh2xZS74/EcHwzmGN2zQFR+5m658cWjM9kZJez7Q4WWhBA0+VNqVhSQBJvXGjz48g==}
+ /@storybook/router@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-IM4IhiPiXsx3FAUeUOAB47uiuUS8Yd37VQcNlXLBO28GgHoTSYOrjS+VTGLIV5cAGKr8+H5pFB+q35BnlFUpkQ==}
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.4.4
+ '@storybook/client-logger': 7.4.5
memoizerific: 1.11.3
qs: 6.11.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/source-loader@7.4.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-sT+QncqpIehyyQhurnvN3/Aal6Em+gXqrpUHXumD1P8LVE/kpMs55c/fb/FtrYrMKnTZ8KddXP8o4QiPvvqSCg==}
+ /@storybook/source-loader@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-ieo/aPgIXAJfg2raDtsboX43IXiXYHDm0MSXvNXoFE7F1jtRe7gXRi8z7O9xTX4hlIuYea0+kHe+198adgLlWA==}
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.4.4
+ '@storybook/types': 7.4.5
estraverse: 5.3.0
lodash: 4.17.21
prettier: 2.8.8
@@ -6746,12 +6783,12 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/telemetry@7.4.4:
- resolution: {integrity: sha512-emW4oaZca8Bt+gbCuImEdNwWtnhhoQcjZ0BLuwT55nWgVarzNRg/Qw0NOrlfEuwfeXCI6QUJZyXohaEA5NjNuA==}
+ /@storybook/telemetry@7.4.5:
+ resolution: {integrity: sha512-JbhQXZF5sqS2c7Cf+vAtuKTdTSBDco+liUP2UGQFjqdacTRLVzxyj+YY2UH4aAQn7wpmnQ67iHnqFp0+fdYmAA==}
dependencies:
- '@storybook/client-logger': 7.4.4
- '@storybook/core-common': 7.4.4
- '@storybook/csf-tools': 7.4.4
+ '@storybook/client-logger': 7.4.5
+ '@storybook/core-common': 7.4.5
+ '@storybook/csf-tools': 7.4.5
chalk: 4.1.2
detect-package-manager: 2.0.1
fetch-retry: 5.0.4
@@ -6784,6 +6821,20 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
+ /@storybook/theming@7.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-QSIJDIMzOegzlhubIBaYIovf4mlf+AVL0SmQOskPS8GZ6s9t77yUUI6gZTEjO+S4eB3djXRsfTTijQ8+z4XmRA==}
+ 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.4.5
+ '@storybook/global': 5.0.0
+ memoizerific: 1.11.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
/@storybook/types@7.4.4:
resolution: {integrity: sha512-B0VdgGb1XGEb9g3UuEd9xANCIhR3anvA3w0uYSG+7uMOflnEawwZksTSxvvoGM2hx9vC4pNT4Fci9sEC903UkA==}
dependencies:
@@ -6793,22 +6844,31 @@ packages:
file-system-cache: 2.3.0
dev: true
- /@storybook/vue3-vite@7.4.4(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4):
- resolution: {integrity: sha512-RWMLyi+t2FFO+51SiebXPSQWWkA2PlPmmbRDYJSawrW1vMVx0QK1d4Jk9vA1foDte52EPc96J31k3pdsbBsVkA==}
+ /@storybook/types@7.4.5:
+ resolution: {integrity: sha512-DTWFNjfRTpncjufDoUs0QnNkgHG2qThGKWL1D6sO18cYI02zWPyHWD8/cbqlvtT7XIGe3s1iUEfCTdU5GcwWBA==}
+ dependencies:
+ '@storybook/channels': 7.4.5
+ '@types/babel__core': 7.20.0
+ '@types/express': 4.17.17
+ file-system-cache: 2.3.0
+ dev: true
+
+ /@storybook/vue3-vite@7.4.5(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4):
+ resolution: {integrity: sha512-hNuzSd7EAGpLNGekKjOfuMpir1CpMbSvro4q+04G34CGw2O6awoQKqE+gaOeAHIsSPffio5eeaBR1nKjoKYEog==}
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.4.4(typescript@5.2.2)(vite@4.4.9)
- '@storybook/core-server': 7.4.4
- '@storybook/vue3': 7.4.4(@vue/compiler-core@3.3.4)(vue@3.3.4)
+ '@storybook/builder-vite': 7.4.5(typescript@5.2.2)(vite@4.4.9)
+ '@storybook/core-server': 7.4.5
+ '@storybook/vue3': 7.4.5(@vue/compiler-core@3.3.4)(vue@3.3.4)
'@vitejs/plugin-vue': 4.3.4(vite@4.4.9)(vue@3.3.4)
magic-string: 0.30.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
vue-docgen-api: 4.64.1(vue@3.3.4)
transitivePeerDependencies:
- '@preact/preset-vite'
@@ -6822,30 +6882,30 @@ packages:
- vue
dev: true
- /@storybook/vue3@7.4.4(@vue/compiler-core@3.3.4)(vue@3.3.4):
- resolution: {integrity: sha512-M7ZOd3SxT+SkLz/XRTr1JpdtdU8aW49EypsTtNyF/oW6TzMaJmTTPF5mlzZipJ3GqagQg/nImDpa01w5pajz9Q==}
+ /@storybook/vue3@7.4.5(@vue/compiler-core@3.3.4)(vue@3.3.4):
+ resolution: {integrity: sha512-9vmGSg+jwpTYeBneC3XAL5zJW7/kfA/3tXNfIOkqA4oJ087TBoo5XztzbtT6pSNq8fB9AY8VyPTG8ZE5IaJ4xQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
'@vue/compiler-core': ^3.0.0
vue: ^3.0.0
dependencies:
- '@storybook/core-client': 7.4.4
- '@storybook/docs-tools': 7.4.4
+ '@storybook/core-client': 7.4.5
+ '@storybook/docs-tools': 7.4.5
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.4.4
- '@storybook/types': 7.4.4
+ '@storybook/preview-api': 7.4.5
+ '@storybook/types': 7.4.5
'@vue/compiler-core': 3.3.4
lodash: 4.17.21
ts-dedent: 2.2.0
type-fest: 2.19.0
vue: 3.3.4
- vue-component-type-helpers: 1.8.13
+ vue-component-type-helpers: 1.8.15
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@swc/cli@0.1.62(@swc/core@1.3.87)(chokidar@3.5.3):
+ /@swc/cli@0.1.62(@swc/core@1.3.90)(chokidar@3.5.3):
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
engines: {node: '>= 12.13'}
hasBin: true
@@ -6857,7 +6917,7 @@ packages:
optional: true
dependencies:
'@mole-inc/bin-wrapper': 8.0.1
- '@swc/core': 1.3.87
+ '@swc/core': 1.3.90
chokidar: 3.5.3
commander: 7.2.0
fast-glob: 3.3.1
@@ -6886,8 +6946,8 @@ packages:
dev: false
optional: true
- /@swc/core-darwin-arm64@1.3.87:
- resolution: {integrity: sha512-/LxLjPat1LA9CXS7Cn2M4MIqwNOoDF4KjcikPkO08H54rd6WubhaJnr0sLDjms3adRr+pmcCL0yfsUBTX//85A==}
+ /@swc/core-darwin-arm64@1.3.90:
+ resolution: {integrity: sha512-he0w74HvcoufE6CZrB/U/VGVbc7021IQvYrn1geMACnq/OqMBqjdczNtdNfJAy87LZ4AOUjHDKEIjsZZu7o8nQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
@@ -6903,8 +6963,8 @@ packages:
dev: false
optional: true
- /@swc/core-darwin-x64@1.3.87:
- resolution: {integrity: sha512-hjSQNcW9BN8gEz3UQZ7Ye80ymbkFHLkUDeEek4lorRyq6S+uxvbL1f1mJAZnFPBpove7AXusykIalWMPvyOR2A==}
+ /@swc/core-darwin-x64@1.3.90:
+ resolution: {integrity: sha512-hKNM0Ix0qMlAamPe0HUfaAhQVbZEL5uK6Iw8v9ew0FtVB4v7EifQ9n41wh+yCj0CjcHBPEBbQU0P6mNTxJu/RQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
@@ -6931,8 +6991,8 @@ packages:
dev: false
optional: true
- /@swc/core-linux-arm-gnueabihf@1.3.87:
- resolution: {integrity: sha512-JVyNIO3tGLPSQ59rJXeKaykTpPhRNozB+7PtYMvMcxpUbYGpEzWxTPkFAX2KKPvl0ejBdA0GW5OXeuPMvTwE0w==}
+ /@swc/core-linux-arm-gnueabihf@1.3.90:
+ resolution: {integrity: sha512-HumvtrqTWE8rlFuKt7If0ZL7145H/jVc4AeziVjcd+/ajpqub7IyfrLCYd5PmKMtfeSVDMsxjG0BJ0HLRxrTJA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
@@ -6948,8 +7008,8 @@ packages:
dev: false
optional: true
- /@swc/core-linux-arm64-gnu@1.3.87:
- resolution: {integrity: sha512-gLdZKIoql5vjrNjrwwsiS7d3vOAIzYUWqN97iGCSscQOg0MgYbfUnSTO4UEvH4BYlwRNlHepfTZ7ALoG8areUQ==}
+ /@swc/core-linux-arm64-gnu@1.3.90:
+ resolution: {integrity: sha512-tA7DqCS7YCwngwXZQeqQhhMm8BbydpaABw8Z/EDQ7KPK1iZ1rNjZw+aWvSpmNmEGmH1RmQ9QDS9mGRDp0faAeg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -6965,8 +7025,8 @@ packages:
dev: false
optional: true
- /@swc/core-linux-arm64-musl@1.3.87:
- resolution: {integrity: sha512-WQ5tirVBiU8lUODQ25dt8JRCZHyRDInBe4fkGuxzImMa017zYPWa2WxrKK8LdDF7DzrAITlGl9VeoeE/l0WJbw==}
+ /@swc/core-linux-arm64-musl@1.3.90:
+ resolution: {integrity: sha512-p2Vtid5BZA36fJkNUwk5HP+HJlKgTru+Ghna7pRe45ghKkkRIUk3fhkgudEvfKfhT+3AvP+GTVQ+T9k0gc9S8w==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -6982,8 +7042,8 @@ packages:
dev: false
optional: true
- /@swc/core-linux-x64-gnu@1.3.87:
- resolution: {integrity: sha512-/vQSH7ZKOuT1It9GzpJ9UFnsOP/dQr1VLUrKQFBlHp9owIWNb2oUrZdNla+KhljCIIahh0JfQ08sycKeycCNzQ==}
+ /@swc/core-linux-x64-gnu@1.3.90:
+ resolution: {integrity: sha512-J6pDtWaulYGXuANERuvv4CqmUbZOQrRZBCRQGZQJ6a86RWpesZqckBelnYx48wYmkgvMkF95Y3xbI3WTfoSHzw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -6999,8 +7059,8 @@ packages:
dev: false
optional: true
- /@swc/core-linux-x64-musl@1.3.87:
- resolution: {integrity: sha512-C1NUeISJDyMlIk4919bjcpHvjyjzbkjW7v53gUdN41Y4BPlEk7UKcLez7UHMjdMGA/o9721SLqYVp4/NrQErUw==}
+ /@swc/core-linux-x64-musl@1.3.90:
+ resolution: {integrity: sha512-3Gh6EA3+0K+l3MqnRON7h5bZ32xLmfcVM6QiHHJ9dBttq7YOEeEoMOCdIPMaQxJmK1VfLgZCsPYRd66MhvUSkw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -7016,8 +7076,8 @@ packages:
dev: false
optional: true
- /@swc/core-win32-arm64-msvc@1.3.87:
- resolution: {integrity: sha512-AE7JKDJ0OsV9LsYGFfYKMTkGNfsy1au4RT5jT1rxr5MTOsmMD7P2mgiRF8drgc1WX3uOJbTHQfgdVTYroAGfdA==}
+ /@swc/core-win32-arm64-msvc@1.3.90:
+ resolution: {integrity: sha512-BNaw/iJloDyaNOFV23Sr53ULlnbmzSoerTJ10v0TjSZOEIpsS0Rw6xOK1iI0voDJnRXeZeWRSxEC9DhefNtN/g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
@@ -7033,8 +7093,8 @@ packages:
dev: false
optional: true
- /@swc/core-win32-ia32-msvc@1.3.87:
- resolution: {integrity: sha512-2V+5uvisaTPXd5lvTujNLNlEC2LPo07gEUQVGdKGsbhtLAYAggVXBnHjxU1TkuyA6NlciMS59tPKW+L2u2KpTw==}
+ /@swc/core-win32-ia32-msvc@1.3.90:
+ resolution: {integrity: sha512-SiyTethWAheE/JbxXCukAAciU//PLcmVZ2ME92MRuLMLmOhrwksjbaa7ukj9WEF3LWrherhSqTXnpj3VC1l/qw==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
@@ -7050,16 +7110,16 @@ packages:
dev: false
optional: true
- /@swc/core-win32-x64-msvc@1.3.87:
- resolution: {integrity: sha512-2Xak7TidlRuNQamLZC3fEOdUCmMiBzD2BW8+Dnn29f4odzamgAFfeYJ/PnqN7jdTWOINLn95tex4JBm3Pm11HQ==}
+ /@swc/core-win32-x64-msvc@1.3.90:
+ resolution: {integrity: sha512-OpWAW5ljKcPJ3SQ0pUuKqYfwXv7ssIhVgrH9XP9ONtdgXKWZRL9hqJQkcL55FARw/gDjKanoCM47wsTNQL+ZZA==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core@1.3.87:
- resolution: {integrity: sha512-u33Mi/EBvb+g/xpYKyxODB5XvKYqISmy81J+lhFS/Oahja0PbJWZdKEGwSQEFvBecp6E+PfaTOLPOoF1EWcRrw==}
+ /@swc/core@1.3.90:
+ resolution: {integrity: sha512-wptBxP4PldOnhmyDVj8qUcn++GRqyw1qc9wOTGtPNHz8cpuTfdfIgYGlhI4La0UYqecuaaIfLfokyuNePOMHPg==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
@@ -7068,32 +7128,36 @@ packages:
'@swc/helpers':
optional: true
dependencies:
- '@swc/types': 0.1.4
+ '@swc/counter': 0.1.1
+ '@swc/types': 0.1.5
optionalDependencies:
- '@swc/core-darwin-arm64': 1.3.87
- '@swc/core-darwin-x64': 1.3.87
- '@swc/core-linux-arm-gnueabihf': 1.3.87
- '@swc/core-linux-arm64-gnu': 1.3.87
- '@swc/core-linux-arm64-musl': 1.3.87
- '@swc/core-linux-x64-gnu': 1.3.87
- '@swc/core-linux-x64-musl': 1.3.87
- '@swc/core-win32-arm64-msvc': 1.3.87
- '@swc/core-win32-ia32-msvc': 1.3.87
- '@swc/core-win32-x64-msvc': 1.3.87
+ '@swc/core-darwin-arm64': 1.3.90
+ '@swc/core-darwin-x64': 1.3.90
+ '@swc/core-linux-arm-gnueabihf': 1.3.90
+ '@swc/core-linux-arm64-gnu': 1.3.90
+ '@swc/core-linux-arm64-musl': 1.3.90
+ '@swc/core-linux-x64-gnu': 1.3.90
+ '@swc/core-linux-x64-musl': 1.3.90
+ '@swc/core-win32-arm64-msvc': 1.3.90
+ '@swc/core-win32-ia32-msvc': 1.3.90
+ '@swc/core-win32-x64-msvc': 1.3.90
- /@swc/jest@0.2.29(@swc/core@1.3.87):
+ /@swc/counter@0.1.1:
+ resolution: {integrity: sha512-xVRaR4u9hcYjFvcSg71Lz5Bo4//CyjAAfMxa7UsaDSYxAshflUkVJWiyVWrfxC59z2kP1IzI4/1BEpnhI9o3Mw==}
+
+ /@swc/jest@0.2.29(@swc/core@1.3.90):
resolution: {integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==}
engines: {npm: '>= 7.0.0'}
peerDependencies:
'@swc/core': '*'
dependencies:
'@jest/create-cache-key-function': 27.5.1
- '@swc/core': 1.3.87
+ '@swc/core': 1.3.90
jsonc-parser: 3.2.0
dev: true
- /@swc/types@0.1.4:
- resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==}
+ /@swc/types@0.1.5:
+ resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==}
/@swc/wasm@1.2.130:
resolution: {integrity: sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==}
@@ -7122,14 +7186,14 @@ packages:
dependencies:
defer-to-connect: 2.0.1
- /@tabler/icons-webfont@2.35.0:
- resolution: {integrity: sha512-U9Xg6ntMLplwKvUGCvqfj/lw2+dKlhunqzw/0XDFVX/TOJwPcnKs9JO+/sGeAZdWYyJpvhAKxOZtXvvy9SoYBQ==}
+ /@tabler/icons-webfont@2.37.0:
+ resolution: {integrity: sha512-0pdo3V9l1gT0tUg+0L2CM6Xa+yTQf14XHNpXgANWBsk6iyDDrGmbW1Qq6FkQ3mVAU0D+Gd4dp34uB0s4pIZpOw==}
dependencies:
- '@tabler/icons': 2.35.0
+ '@tabler/icons': 2.37.0
dev: false
- /@tabler/icons@2.35.0:
- resolution: {integrity: sha512-qW/itKdmFvfGw6mAQ+cZy+2MYTXb0XdGAVhO3obYLJEfsSPMwQRO0S9ckFk1xMQX/Tj7REC3TEmWUBWNi3/o3g==}
+ /@tabler/icons@2.37.0:
+ resolution: {integrity: sha512-Qo/aRhs2xXcD8IDSuePonR/39GSvQUdwv6RXdbcAhMfpJZP+pHRn2TQFPNGJND9B5uUBez694j4Nx71539XHGA==}
dev: false
/@tensorflow/tfjs-backend-cpu@4.4.0(@tensorflow/tfjs-core@4.4.0):
@@ -7340,7 +7404,7 @@ packages:
/@types/accepts@1.3.5:
resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/archiver@5.3.3:
@@ -7394,7 +7458,7 @@ packages:
resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/braces@3.0.1:
@@ -7406,7 +7470,7 @@ packages:
dependencies:
'@types/http-cache-semantics': 4.0.1
'@types/keyv': 3.1.4
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@types/responselike': 1.0.0
dev: false
@@ -7439,7 +7503,7 @@ packages:
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/content-disposition@0.5.6:
@@ -7453,13 +7517,13 @@ packages:
/@types/cross-spawn@6.0.2:
resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/debug@4.1.7:
resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
dependencies:
- '@types/ms': 0.7.31
+ '@types/ms': 0.7.32
dev: true
/@types/detect-port@1.3.2:
@@ -7507,7 +7571,7 @@ packages:
/@types/express-serve-static-core@4.17.33:
resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: true
@@ -7528,20 +7592,20 @@ packages:
/@types/fluent-ffmpeg@2.1.22:
resolution: {integrity: sha512-ZZPDDrDOb2Ahp5fxZzuw64f0rCcviv+SDuCyJ1PIF/UFn9wNHtb/bY8Dj/2nrbQ7SNsGI7gaO2wJVkkU2HBcMg==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/glob@7.2.0:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/graceful-fs@4.1.6:
resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/hast@2.3.4:
@@ -7556,7 +7620,7 @@ packages:
/@types/http-link-header@1.0.3:
resolution: {integrity: sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/istanbul-lib-coverage@2.0.4:
@@ -7600,7 +7664,7 @@ packages:
/@types/jsdom@21.1.3:
resolution: {integrity: sha512-1zzqSP+iHJYV4lB3lZhNBa012pubABkj9yG/GuXuf6LZH1cSPIJBqFDrm5JX65HHt6VOnNYdTui/0ySerRbMgA==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@types/tough-cookie': 4.0.2
parse5: 7.1.2
dev: true
@@ -7624,7 +7688,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: false
/@types/lodash@4.14.191:
@@ -7636,22 +7700,22 @@ packages:
requiresBuild: true
dev: false
- /@types/matter-js@0.19.0:
- resolution: {integrity: sha512-SqgYUc8j68n/R2p8rVgpxTVC6gwCby+93dd5eWqjQdpL3l3JUqxzhbEJH/X0NXv+pmoAeWheH1kPvFIgC904Bw==}
+ /@types/matter-js@0.19.1:
+ resolution: {integrity: sha512-GtX6SBzhQ+BpFimYx4oAQlwH8vFLcXv0rl7x0T59B/BJ/jp8UwpJq621trCvI8kBsEeAcfR+witutMrLANYzIA==}
dev: true
/@types/mdx@2.0.3:
resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
dev: true
- /@types/micromatch@4.0.2:
- resolution: {integrity: sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==}
+ /@types/micromatch@4.0.3:
+ resolution: {integrity: sha512-QX1czv7QoLU76Asb1NSVSlu5zTMx/TFNswUDtQSbH9hgvCg+JHvIEoVvVSzBf1WNCT8XsK515W+p3wFOCuvhCg==}
dependencies:
'@types/braces': 3.0.1
dev: true
- /@types/mime-types@2.1.1:
- resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==}
+ /@types/mime-types@2.1.2:
+ resolution: {integrity: sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==}
dev: true
/@types/mime@3.0.1:
@@ -7666,14 +7730,14 @@ packages:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
dev: true
- /@types/ms@0.7.31:
- resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
+ /@types/ms@0.7.32:
+ resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==}
dev: true
/@types/node-fetch@2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
form-data: 3.0.1
/@types/node-fetch@3.0.3:
@@ -7690,13 +7754,13 @@ packages:
resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==}
dev: true
- /@types/node@20.6.4:
- resolution: {integrity: sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==}
+ /@types/node@20.7.1:
+ resolution: {integrity: sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==}
/@types/nodemailer@6.4.11:
resolution: {integrity: sha512-Ld2c0frwpGT4VseuoeboCXQ7UJIkK3X7Lx/4YsZEiUHtHsthWAOCYtf6PAiLhMtfwV0cWJRabLBS3+LD8x6Nrw==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/normalize-package-data@2.4.1:
@@ -7713,13 +7777,13 @@ packages:
resolution: {integrity: sha512-U3L0c4eQA6lTSZRgW4LYfhKlR084Aw19akmYHrMdYzaqg9mQDfc2b/1iyqm9+1FJDEnVS5ONi5fxdDrB4/7CpQ==}
dependencies:
'@types/express': 4.17.17
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/oauth@0.9.2:
resolution: {integrity: sha512-Nu3/abQ6yR9VlsCdX3aiGsWFkj6OJvJqDvg/36t8Gwf2mFXdBZXPDN3K+2yfeA6Lo2m1Q12F8Qil9TZ48nWhOQ==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/offscreencanvas@2019.3.0:
@@ -7732,10 +7796,10 @@ packages:
requiresBuild: true
dev: false
- /@types/pg@8.10.2:
- resolution: {integrity: sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==}
+ /@types/pg@8.10.3:
+ resolution: {integrity: sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
pg-protocol: 1.6.0
pg-types: 4.0.1
dev: true
@@ -7748,8 +7812,8 @@ packages:
resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
dev: true
- /@types/pug@2.0.6:
- resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
+ /@types/pug@2.0.7:
+ resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==}
dev: true
/@types/punycode@2.1.0:
@@ -7759,7 +7823,7 @@ packages:
/@types/qrcode@1.5.2:
resolution: {integrity: sha512-W4KDz75m7rJjFbyCctzCtRzZUj+PrUHV+YjqDp50sSRezTbrtEAIq2iTzC6lISARl3qw+8IlcCyljdcVJE0Wug==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/qs@6.9.7:
@@ -7789,21 +7853,21 @@ packages:
/@types/readdir-glob@1.1.1:
resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
- /@types/rename@1.0.4:
- resolution: {integrity: sha512-eV81+6bVv2mdCBahkMefjEUwAjKDAP3AuyhqWCWRxcRaeVdUeHUBaoq2zSz+5HNHF2jzTajMcfLvJsy4K3cbwA==}
+ /@types/rename@1.0.5:
+ resolution: {integrity: sha512-8/ynozXfy9NZ8JhQRSTb0HMuu5Isl547Mih1fMEpNLi9coPcI16UdvIdSqssMgQEdbWsgQIPkLpkpAcK4DEZ3Q==}
dev: true
/@types/responselike@1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: false
- /@types/sanitize-html@2.9.0:
- resolution: {integrity: sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==}
+ /@types/sanitize-html@2.9.1:
+ resolution: {integrity: sha512-XSLD0a9P8c+rKUM09KIi5Nd8mOHLHNgXb1G04rpXWa/GqQVpM+knrS9KR9ptj1CeC3gXWGZn75ApH3H6qNbhYA==}
dependencies:
htmlparser2: 8.0.1
dev: true
@@ -7817,15 +7881,15 @@ packages:
requiresBuild: true
dev: false
- /@types/semver@7.5.2:
- resolution: {integrity: sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==}
+ /@types/semver@7.5.3:
+ resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==}
dev: true
/@types/serve-static@1.15.1:
resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
dependencies:
'@types/mime': 3.0.1
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/serviceworker@0.0.67:
@@ -7835,7 +7899,7 @@ packages:
/@types/set-cookie-parser@2.4.3:
resolution: {integrity: sha512-7QhnH7bi+6KAhBB+Auejz1uV9DHiopZqu7LfR/5gZZTkejJV5nYeZZpgfFoE0N8aDsXuiYpfKyfyMatCwQhyTQ==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/sharp@0.32.0:
@@ -7845,22 +7909,22 @@ packages:
sharp: 0.32.6
dev: true
- /@types/simple-oauth2@5.0.4:
- resolution: {integrity: sha512-4SvTfmAa1fGUa1d07j9vIiC4o92bGh0ihPXmtS05udMMmNwVIaU2nZ706cC4wI8cJxOlHD4P/d5tzqvWYd+KxA==}
+ /@types/simple-oauth2@5.0.5:
+ resolution: {integrity: sha512-hsUpJyOQnexMxa2Ilvs1CwmcSN62Y4irIvBbviUJNiyxUGIOQS7CUs0QPq+nuxkaNeNqdjxJ1BE/AoCGiG7L+g==}
dev: true
/@types/sinon@10.0.13:
resolution: {integrity: sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==}
dependencies:
- '@types/sinonjs__fake-timers': 8.1.2
+ '@types/sinonjs__fake-timers': 8.1.3
dev: true
/@types/sinonjs__fake-timers@8.1.1:
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
dev: true
- /@types/sinonjs__fake-timers@8.1.2:
- resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==}
+ /@types/sinonjs__fake-timers@8.1.3:
+ resolution: {integrity: sha512-4g+2YyWe0Ve+LBh+WUm1697PD0Kdi6coG1eU0YjQbwx61AZ8XbEpL1zIT6WjuUKrCMCROpEaYQPDjBnDouBVAQ==}
dev: true
/@types/sizzle@2.3.3:
@@ -7895,16 +7959,16 @@ packages:
resolution: {integrity: sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==}
dev: true
- /@types/vary@1.1.0:
- resolution: {integrity: sha512-LQWqrIa0dvEOOH37lGksMEXbypRLUFqu6Gx0pmX7zIUisD2I/qaVgEX/vJ/PSVSW0Hk6yz1BNkFpqg6dZm3Wug==}
+ /@types/vary@1.1.1:
+ resolution: {integrity: sha512-XL8U62BpXBMMuFzFBYsWekQwo+dqcyN117IwFVMCkBCvc6HY1ODdRKNA0JHxnuTM5lX3kpqsnBH5OuEeXSN3aA==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
- /@types/web-push@3.6.0:
- resolution: {integrity: sha512-Kk23yDmYheAcQ0ALS9YE7MY7lqwaIfVQ67zVEFeqbLw+/g8jlYTg9o/zYJOk5YhebWrq2Cr/Lbh4RoYfzrn0ww==}
+ /@types/web-push@3.6.1:
+ resolution: {integrity: sha512-Zu6Iju7c4IlE8I8eEeFLYRb7XFqvHFmWWAYr1cmug9EX3c6CDarxIXWN/GO0sxjbJLkHPwozUzp6cLdXsrq7Ew==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/webgl-ext@0.0.30:
@@ -7912,16 +7976,16 @@ packages:
requiresBuild: true
dev: false
- /@types/websocket@1.0.6:
- resolution: {integrity: sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==}
+ /@types/websocket@1.0.7:
+ resolution: {integrity: sha512-62Omr8U0PO+hgjLCpPnMsmjh2/FRwIGOktZHyYAUzooEJotwkXHMp7vCacdYi8haxBNOiw9bc2HIHI+b/MPNjA==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
- /@types/ws@8.5.5:
- resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==}
+ /@types/ws@8.5.6:
+ resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/@types/yargs-parser@21.0.0:
@@ -7944,12 +8008,12 @@ packages:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
requiresBuild: true
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
optional: true
- /@typescript-eslint/eslint-plugin@6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2):
- resolution: {integrity: sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==}
+ /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@@ -7960,11 +8024,11 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.6.2
- '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
- '@typescript-eslint/scope-manager': 6.7.2
- '@typescript-eslint/type-utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
- '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
- '@typescript-eslint/visitor-keys': 6.7.2
+ '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/scope-manager': 6.7.3
+ '@typescript-eslint/type-utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.7.3
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.50.0
graphemer: 1.4.0
@@ -7977,8 +8041,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser@6.7.2(eslint@8.50.0)(typescript@5.2.2):
- resolution: {integrity: sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==}
+ /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -7987,10 +8051,10 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 6.7.2
- '@typescript-eslint/types': 6.7.2
- '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
- '@typescript-eslint/visitor-keys': 6.7.2
+ '@typescript-eslint/scope-manager': 6.7.3
+ '@typescript-eslint/types': 6.7.3
+ '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.7.3
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.50.0
typescript: 5.2.2
@@ -7998,16 +8062,16 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/scope-manager@6.7.2:
- resolution: {integrity: sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==}
+ /@typescript-eslint/scope-manager@6.7.3:
+ resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.7.2
- '@typescript-eslint/visitor-keys': 6.7.2
+ '@typescript-eslint/types': 6.7.3
+ '@typescript-eslint/visitor-keys': 6.7.3
dev: true
- /@typescript-eslint/type-utils@6.7.2(eslint@8.50.0)(typescript@5.2.2):
- resolution: {integrity: sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==}
+ /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -8016,8 +8080,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
- '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.50.0
ts-api-utils: 1.0.1(typescript@5.2.2)
@@ -8026,13 +8090,13 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/types@6.7.2:
- resolution: {integrity: sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==}
+ /@typescript-eslint/types@6.7.3:
+ resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/typescript-estree@6.7.2(typescript@5.2.2):
- resolution: {integrity: sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==}
+ /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2):
+ resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@@ -8040,8 +8104,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 6.7.2
- '@typescript-eslint/visitor-keys': 6.7.2
+ '@typescript-eslint/types': 6.7.3
+ '@typescript-eslint/visitor-keys': 6.7.3
debug: 4.3.4(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
@@ -8052,18 +8116,18 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils@6.7.2(eslint@8.50.0)(typescript@5.2.2):
- resolution: {integrity: sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==}
+ /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
'@types/json-schema': 7.0.12
- '@types/semver': 7.5.2
- '@typescript-eslint/scope-manager': 6.7.2
- '@typescript-eslint/types': 6.7.2
- '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
+ '@types/semver': 7.5.3
+ '@typescript-eslint/scope-manager': 6.7.3
+ '@typescript-eslint/types': 6.7.3
+ '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2)
eslint: 8.50.0
semver: 7.5.4
transitivePeerDependencies:
@@ -8071,11 +8135,11 @@ packages:
- typescript
dev: true
- /@typescript-eslint/visitor-keys@6.7.2:
- resolution: {integrity: sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==}
+ /@typescript-eslint/visitor-keys@6.7.3:
+ resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.7.2
+ '@typescript-eslint/types': 6.7.3
eslint-visitor-keys: 3.4.3
dev: true
@@ -8090,7 +8154,7 @@ packages:
'@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.11)
magic-string: 0.27.0
react-refresh: 0.14.0
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -8102,7 +8166,7 @@ packages:
vite: ^4.0.0
vue: ^3.2.25
dependencies:
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
vue: 3.3.4
/@vitest/coverage-v8@0.34.5(vitest@0.34.5):
@@ -8182,7 +8246,7 @@ packages:
'@volar/language-core': 1.10.0
dev: true
- /@vue-macros/common@1.8.0(rollup@3.29.2)(vue@3.3.4):
+ /@vue-macros/common@1.8.0(rollup@3.29.4)(vue@3.3.4):
resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==}
engines: {node: '>=16.14.0'}
peerDependencies:
@@ -8192,9 +8256,9 @@ packages:
optional: true
dependencies:
'@babel/types': 7.22.17
- '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+ '@rollup/pluginutils': 5.0.4(rollup@3.29.4)
'@vue/compiler-sfc': 3.3.4
- ast-kit: 0.11.2(rollup@3.29.2)
+ ast-kit: 0.11.2(rollup@3.29.4)
local-pkg: 0.4.3
magic-string-ast: 0.3.0
vue: 3.3.4
@@ -8202,14 +8266,14 @@ packages:
- rollup
dev: false
- /@vue-macros/reactivity-transform@0.3.23(rollup@3.29.2)(vue@3.3.4):
+ /@vue-macros/reactivity-transform@0.3.23(rollup@3.29.4)(vue@3.3.4):
resolution: {integrity: sha512-SubIg1GsNpQdIDJusrcA2FWBgwSY+4jmL0j6SJ6PU85r3rlS+uDhn6AUkqxeZRAdmJnrbGHXDyWUdygOZmWrSg==}
engines: {node: '>=16.14.0'}
peerDependencies:
vue: ^2.7.0 || ^3.2.25
dependencies:
'@babel/parser': 7.22.16
- '@vue-macros/common': 1.8.0(rollup@3.29.2)(vue@3.3.4)
+ '@vue-macros/common': 1.8.0(rollup@3.29.4)(vue@3.3.4)
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
magic-string: 0.30.3
@@ -8244,7 +8308,7 @@ packages:
'@vue/shared': 3.3.4
estree-walker: 2.0.2
magic-string: 0.30.0
- postcss: 8.4.30
+ postcss: 8.4.31
source-map-js: 1.0.2
/@vue/compiler-ssr@3.3.4:
@@ -8253,8 +8317,8 @@ packages:
'@vue/compiler-dom': 3.3.4
'@vue/shared': 3.3.4
- /@vue/language-core@1.8.13(typescript@5.2.2):
- resolution: {integrity: sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==}
+ /@vue/language-core@1.8.15(typescript@5.2.2):
+ resolution: {integrity: sha512-zche5Aw8kkvp3YaghuLiOZyVIpoWHjSQ0EfjxGSsqHOPMamdCoa9x3HtbenpR38UMUoKJ88wiWuiOrV3B/Yq+A==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -8323,11 +8387,11 @@ packages:
'@vue/server-renderer': 3.3.4(vue@3.3.4)
dev: true
- /@vue/typescript@1.8.13(typescript@5.2.2):
- resolution: {integrity: sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==}
+ /@vue/typescript@1.8.15(typescript@5.2.2):
+ resolution: {integrity: sha512-qWyanQKXOsK84S8rP7QBrqsvUdQ0nZABZmTjXMpb3ox4Bp5IbkscREA3OPUrkgl64mAxwwCzIWcOc3BPTCPjQw==}
dependencies:
'@volar/typescript': 1.10.0
- '@vue/language-core': 1.8.13(typescript@5.2.2)
+ '@vue/language-core': 1.8.15(typescript@5.2.2)
transitivePeerDependencies:
- typescript
dev: true
@@ -8784,12 +8848,12 @@ packages:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
dev: true
- /ast-kit@0.11.2(rollup@3.29.2):
+ /ast-kit@0.11.2(rollup@3.29.4):
resolution: {integrity: sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==}
engines: {node: '>=16.14.0'}
dependencies:
'@babel/parser': 7.22.16
- '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+ '@rollup/pluginutils': 5.0.4(rollup@3.29.4)
pathe: 1.1.1
transitivePeerDependencies:
- rollup
@@ -9415,8 +9479,8 @@ packages:
resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==}
dev: false
- /canvas-confetti@1.6.0:
- resolution: {integrity: sha512-ej+w/m8Jzpv9Z7W7uJZer14Ke8P2ogsjg4ZMGIuq4iqUOqY2Jq8BNW42iGmNfRwREaaEfFIczLuZZiEVSYNHAA==}
+ /canvas-confetti@1.6.1:
+ resolution: {integrity: sha512-CgGR5DL9+dkne4AwcpvWQc0LIQq43yDIxlwdZcyrq3yklricNfuPHoOSoM6Ya7yCQ+sXmZ2iNV2feiKjVG8C1g==}
dev: false
/caseless@0.12.0:
@@ -9957,7 +10021,7 @@ packages:
readable-stream: 3.6.0
dev: false
- /create-jest@29.7.0(@types/node@20.6.4):
+ /create-jest@29.7.0(@types/node@20.7.1):
resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@@ -9966,7 +10030,7 @@ packages:
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@20.6.4)
+ jest-config: 29.7.0(@types/node@20.7.1)
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -10042,13 +10106,13 @@ packages:
engines: {node: '>=8'}
dev: true
- /css-declaration-sorter@6.4.1(postcss@8.4.30):
+ /css-declaration-sorter@6.4.1(postcss@8.4.31):
resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
engines: {node: ^10 || ^12 || >=14}
peerDependencies:
postcss: ^8.0.9
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
/css-select@5.1.0:
@@ -10088,62 +10152,62 @@ packages:
engines: {node: '>=4'}
hasBin: true
- /cssnano-preset-default@6.0.1(postcss@8.4.30):
+ /cssnano-preset-default@6.0.1(postcss@8.4.31):
resolution: {integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- css-declaration-sorter: 6.4.1(postcss@8.4.30)
- cssnano-utils: 4.0.0(postcss@8.4.30)
- postcss: 8.4.30
- postcss-calc: 9.0.1(postcss@8.4.30)
- postcss-colormin: 6.0.0(postcss@8.4.30)
- postcss-convert-values: 6.0.0(postcss@8.4.30)
- postcss-discard-comments: 6.0.0(postcss@8.4.30)
- postcss-discard-duplicates: 6.0.0(postcss@8.4.30)
- postcss-discard-empty: 6.0.0(postcss@8.4.30)
- postcss-discard-overridden: 6.0.0(postcss@8.4.30)
- postcss-merge-longhand: 6.0.0(postcss@8.4.30)
- postcss-merge-rules: 6.0.1(postcss@8.4.30)
- postcss-minify-font-values: 6.0.0(postcss@8.4.30)
- postcss-minify-gradients: 6.0.0(postcss@8.4.30)
- postcss-minify-params: 6.0.0(postcss@8.4.30)
- postcss-minify-selectors: 6.0.0(postcss@8.4.30)
- postcss-normalize-charset: 6.0.0(postcss@8.4.30)
- postcss-normalize-display-values: 6.0.0(postcss@8.4.30)
- postcss-normalize-positions: 6.0.0(postcss@8.4.30)
- postcss-normalize-repeat-style: 6.0.0(postcss@8.4.30)
- postcss-normalize-string: 6.0.0(postcss@8.4.30)
- postcss-normalize-timing-functions: 6.0.0(postcss@8.4.30)
- postcss-normalize-unicode: 6.0.0(postcss@8.4.30)
- postcss-normalize-url: 6.0.0(postcss@8.4.30)
- postcss-normalize-whitespace: 6.0.0(postcss@8.4.30)
- postcss-ordered-values: 6.0.0(postcss@8.4.30)
- postcss-reduce-initial: 6.0.0(postcss@8.4.30)
- postcss-reduce-transforms: 6.0.0(postcss@8.4.30)
- postcss-svgo: 6.0.0(postcss@8.4.30)
- postcss-unique-selectors: 6.0.0(postcss@8.4.30)
+ css-declaration-sorter: 6.4.1(postcss@8.4.31)
+ cssnano-utils: 4.0.0(postcss@8.4.31)
+ postcss: 8.4.31
+ postcss-calc: 9.0.1(postcss@8.4.31)
+ postcss-colormin: 6.0.0(postcss@8.4.31)
+ postcss-convert-values: 6.0.0(postcss@8.4.31)
+ postcss-discard-comments: 6.0.0(postcss@8.4.31)
+ postcss-discard-duplicates: 6.0.0(postcss@8.4.31)
+ postcss-discard-empty: 6.0.0(postcss@8.4.31)
+ postcss-discard-overridden: 6.0.0(postcss@8.4.31)
+ postcss-merge-longhand: 6.0.0(postcss@8.4.31)
+ postcss-merge-rules: 6.0.1(postcss@8.4.31)
+ postcss-minify-font-values: 6.0.0(postcss@8.4.31)
+ postcss-minify-gradients: 6.0.0(postcss@8.4.31)
+ postcss-minify-params: 6.0.0(postcss@8.4.31)
+ postcss-minify-selectors: 6.0.0(postcss@8.4.31)
+ postcss-normalize-charset: 6.0.0(postcss@8.4.31)
+ postcss-normalize-display-values: 6.0.0(postcss@8.4.31)
+ postcss-normalize-positions: 6.0.0(postcss@8.4.31)
+ postcss-normalize-repeat-style: 6.0.0(postcss@8.4.31)
+ postcss-normalize-string: 6.0.0(postcss@8.4.31)
+ postcss-normalize-timing-functions: 6.0.0(postcss@8.4.31)
+ postcss-normalize-unicode: 6.0.0(postcss@8.4.31)
+ postcss-normalize-url: 6.0.0(postcss@8.4.31)
+ postcss-normalize-whitespace: 6.0.0(postcss@8.4.31)
+ postcss-ordered-values: 6.0.0(postcss@8.4.31)
+ postcss-reduce-initial: 6.0.0(postcss@8.4.31)
+ postcss-reduce-transforms: 6.0.0(postcss@8.4.31)
+ postcss-svgo: 6.0.0(postcss@8.4.31)
+ postcss-unique-selectors: 6.0.0(postcss@8.4.31)
dev: false
- /cssnano-utils@4.0.0(postcss@8.4.30):
+ /cssnano-utils@4.0.0(postcss@8.4.31):
resolution: {integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /cssnano@6.0.1(postcss@8.4.30):
+ /cssnano@6.0.1(postcss@8.4.31):
resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-preset-default: 6.0.1(postcss@8.4.30)
+ cssnano-preset-default: 6.0.1(postcss@8.4.31)
lilconfig: 2.1.0
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
/csso@5.0.5:
@@ -10169,8 +10233,8 @@ packages:
uniq: 1.0.1
dev: false
- /cypress@13.2.0:
- resolution: {integrity: sha512-AvDQxBydE771GTq0TR4ZUBvv9m9ffXuB/ueEtpDF/6gOcvFR96amgwSJP16Yhqw6VhmwqspT5nAGzoxxB+D89g==}
+ /cypress@13.3.0:
+ resolution: {integrity: sha512-mpI8qcTwLGiA4zEQvTC/U1xGUezVV4V8HQCOYjlEOrVmU1etVvxOjkCXHGwrlYdZU/EPmUiWfsO3yt1o+Q2bgw==}
engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
hasBin: true
requiresBuild: true
@@ -10886,34 +10950,34 @@ packages:
'@esbuild/win32-ia32': 0.18.17
'@esbuild/win32-x64': 0.18.17
- /esbuild@0.19.3:
- resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==}
+ /esbuild@0.19.4:
+ resolution: {integrity: sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.19.3
- '@esbuild/android-arm64': 0.19.3
- '@esbuild/android-x64': 0.19.3
- '@esbuild/darwin-arm64': 0.19.3
- '@esbuild/darwin-x64': 0.19.3
- '@esbuild/freebsd-arm64': 0.19.3
- '@esbuild/freebsd-x64': 0.19.3
- '@esbuild/linux-arm': 0.19.3
- '@esbuild/linux-arm64': 0.19.3
- '@esbuild/linux-ia32': 0.19.3
- '@esbuild/linux-loong64': 0.19.3
- '@esbuild/linux-mips64el': 0.19.3
- '@esbuild/linux-ppc64': 0.19.3
- '@esbuild/linux-riscv64': 0.19.3
- '@esbuild/linux-s390x': 0.19.3
- '@esbuild/linux-x64': 0.19.3
- '@esbuild/netbsd-x64': 0.19.3
- '@esbuild/openbsd-x64': 0.19.3
- '@esbuild/sunos-x64': 0.19.3
- '@esbuild/win32-arm64': 0.19.3
- '@esbuild/win32-ia32': 0.19.3
- '@esbuild/win32-x64': 0.19.3
+ '@esbuild/android-arm': 0.19.4
+ '@esbuild/android-arm64': 0.19.4
+ '@esbuild/android-x64': 0.19.4
+ '@esbuild/darwin-arm64': 0.19.4
+ '@esbuild/darwin-x64': 0.19.4
+ '@esbuild/freebsd-arm64': 0.19.4
+ '@esbuild/freebsd-x64': 0.19.4
+ '@esbuild/linux-arm': 0.19.4
+ '@esbuild/linux-arm64': 0.19.4
+ '@esbuild/linux-ia32': 0.19.4
+ '@esbuild/linux-loong64': 0.19.4
+ '@esbuild/linux-mips64el': 0.19.4
+ '@esbuild/linux-ppc64': 0.19.4
+ '@esbuild/linux-riscv64': 0.19.4
+ '@esbuild/linux-s390x': 0.19.4
+ '@esbuild/linux-x64': 0.19.4
+ '@esbuild/netbsd-x64': 0.19.4
+ '@esbuild/openbsd-x64': 0.19.4
+ '@esbuild/sunos-x64': 0.19.4
+ '@esbuild/win32-arm64': 0.19.4
+ '@esbuild/win32-ia32': 0.19.4
+ '@esbuild/win32-x64': 0.19.4
dev: false
/escalade@3.1.1:
@@ -10981,7 +11045,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.7)(eslint@8.50.0):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.7)(eslint@8.50.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -11002,7 +11066,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
debug: 3.2.7(supports-color@5.5.0)
eslint: 8.50.0
eslint-import-resolver-node: 0.3.7
@@ -11010,7 +11074,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0):
+ /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.3)(eslint@8.50.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
@@ -11020,7 +11084,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+ '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2)
array-includes: 3.1.6
array.prototype.findlastindex: 1.2.2
array.prototype.flat: 1.3.1
@@ -11029,7 +11093,7 @@ packages:
doctrine: 2.1.0
eslint: 8.50.0
eslint-import-resolver-node: 0.3.7
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.7)(eslint@8.50.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.7)(eslint@8.50.0)
has: 1.0.3
is-core-module: 2.13.0
is-glob: 4.0.3
@@ -13097,7 +13161,7 @@ packages:
engines: {node: '>=8'}
dependencies:
'@babel/core': 7.22.11
- '@babel/parser': 7.22.11
+ '@babel/parser': 7.22.16
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.1
@@ -13186,7 +13250,7 @@ packages:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
co: 4.6.0
dedent: 1.3.0
@@ -13207,7 +13271,7 @@ packages:
- supports-color
dev: true
- /jest-cli@29.7.0(@types/node@20.6.4):
+ /jest-cli@29.7.0(@types/node@20.7.1):
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@@ -13221,10 +13285,10 @@ packages:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.6.4)
+ create-jest: 29.7.0(@types/node@20.7.1)
exit: 0.1.2
import-local: 3.1.0
- jest-config: 29.7.0(@types/node@20.6.4)
+ jest-config: 29.7.0(@types/node@20.7.1)
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.6.2
@@ -13235,7 +13299,7 @@ packages:
- ts-node
dev: true
- /jest-config@29.7.0(@types/node@20.6.4):
+ /jest-config@29.7.0(@types/node@20.7.1):
resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@@ -13250,7 +13314,7 @@ packages:
'@babel/core': 7.22.11
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
babel-jest: 29.7.0(@babel/core@7.22.11)
chalk: 4.1.2
ci-info: 3.7.1
@@ -13330,7 +13394,7 @@ packages:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
jest-mock: 29.7.0
jest-util: 29.7.0
dev: true
@@ -13360,7 +13424,7 @@ packages:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.6
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -13421,7 +13485,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
dev: true
/jest-mock@29.7.0:
@@ -13429,7 +13493,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
jest-util: 29.7.0
dev: true
@@ -13484,7 +13548,7 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11
@@ -13515,7 +13579,7 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
@@ -13567,7 +13631,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
chalk: 4.1.2
ci-info: 3.7.1
graceful-fs: 4.2.11
@@ -13592,7 +13656,7 @@ packages:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@@ -13611,13 +13675,13 @@ packages:
resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
- /jest@29.7.0(@types/node@20.6.4):
+ /jest@29.7.0(@types/node@20.7.1):
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@@ -13630,7 +13694,7 @@ packages:
'@jest/core': 29.7.0
'@jest/types': 29.6.3
import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@20.6.4)
+ jest-cli: 29.7.0(@types/node@20.7.1)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -14317,8 +14381,8 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- /meilisearch@0.34.2:
- resolution: {integrity: sha512-bbiq8pr+3yyOLU+9qdnNX7CEUQCFNs13Vgrne1iNXVnnRxj9aPRpWP8Kh8o0mdQ2tVKJKGZ7MN5rCGm6qvu52A==}
+ /meilisearch@0.35.0:
+ resolution: {integrity: sha512-gF1I6K5/Wpe7BWfjBnG+o19y/FIpJ9HbN+byON6CB9U3uE7qc6GvwUbjKOllh7LKXQVVxH/kCu7Jn0ODCUwqbQ==}
dependencies:
cross-fetch: 3.1.6
transitivePeerDependencies:
@@ -15712,18 +15776,18 @@ packages:
'@babel/runtime': 7.22.10
dev: true
- /postcss-calc@9.0.1(postcss@8.4.30):
+ /postcss-calc@9.0.1(postcss@8.4.31):
resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.2
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-selector-parser: 6.0.13
postcss-value-parser: 4.2.0
dev: false
- /postcss-colormin@6.0.0(postcss@8.4.30):
+ /postcss-colormin@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
@@ -15732,69 +15796,69 @@ packages:
browserslist: 4.21.9
caniuse-api: 3.0.0
colord: 2.9.3
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-convert-values@6.0.0(postcss@8.4.30):
+ /postcss-convert-values@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.9
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-discard-comments@6.0.0(postcss@8.4.30):
+ /postcss-discard-comments@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-discard-duplicates@6.0.0(postcss@8.4.30):
+ /postcss-discard-duplicates@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-discard-empty@6.0.0(postcss@8.4.30):
+ /postcss-discard-empty@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-discard-overridden@6.0.0(postcss@8.4.30):
+ /postcss-discard-overridden@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-merge-longhand@6.0.0(postcss@8.4.30):
+ /postcss-merge-longhand@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
- stylehacks: 6.0.0(postcss@8.4.30)
+ stylehacks: 6.0.0(postcss@8.4.31)
dev: false
- /postcss-merge-rules@6.0.1(postcss@8.4.30):
+ /postcss-merge-rules@6.0.1(postcss@8.4.31):
resolution: {integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
@@ -15802,157 +15866,157 @@ packages:
dependencies:
browserslist: 4.21.9
caniuse-api: 3.0.0
- cssnano-utils: 4.0.0(postcss@8.4.30)
- postcss: 8.4.30
+ cssnano-utils: 4.0.0(postcss@8.4.31)
+ postcss: 8.4.31
postcss-selector-parser: 6.0.13
dev: false
- /postcss-minify-font-values@6.0.0(postcss@8.4.30):
+ /postcss-minify-font-values@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-minify-gradients@6.0.0(postcss@8.4.30):
+ /postcss-minify-gradients@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
colord: 2.9.3
- cssnano-utils: 4.0.0(postcss@8.4.30)
- postcss: 8.4.30
+ cssnano-utils: 4.0.0(postcss@8.4.31)
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-minify-params@6.0.0(postcss@8.4.30):
+ /postcss-minify-params@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.9
- cssnano-utils: 4.0.0(postcss@8.4.30)
- postcss: 8.4.30
+ cssnano-utils: 4.0.0(postcss@8.4.31)
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-minify-selectors@6.0.0(postcss@8.4.30):
+ /postcss-minify-selectors@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-selector-parser: 6.0.13
dev: false
- /postcss-normalize-charset@6.0.0(postcss@8.4.30):
+ /postcss-normalize-charset@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-normalize-display-values@6.0.0(postcss@8.4.30):
+ /postcss-normalize-display-values@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-positions@6.0.0(postcss@8.4.30):
+ /postcss-normalize-positions@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-repeat-style@6.0.0(postcss@8.4.30):
+ /postcss-normalize-repeat-style@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-string@6.0.0(postcss@8.4.30):
+ /postcss-normalize-string@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-timing-functions@6.0.0(postcss@8.4.30):
+ /postcss-normalize-timing-functions@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-unicode@6.0.0(postcss@8.4.30):
+ /postcss-normalize-unicode@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.9
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-url@6.0.0(postcss@8.4.30):
+ /postcss-normalize-url@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-normalize-whitespace@6.0.0(postcss@8.4.30):
+ /postcss-normalize-whitespace@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-ordered-values@6.0.0(postcss@8.4.30):
+ /postcss-ordered-values@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-utils: 4.0.0(postcss@8.4.30)
- postcss: 8.4.30
+ cssnano-utils: 4.0.0(postcss@8.4.31)
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
- /postcss-reduce-initial@6.0.0(postcss@8.4.30):
+ /postcss-reduce-initial@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
@@ -15960,16 +16024,16 @@ packages:
dependencies:
browserslist: 4.21.9
caniuse-api: 3.0.0
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
- /postcss-reduce-transforms@6.0.0(postcss@8.4.30):
+ /postcss-reduce-transforms@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: false
@@ -15980,24 +16044,24 @@ packages:
cssesc: 3.0.0
util-deprecate: 1.0.2
- /postcss-svgo@6.0.0(postcss@8.4.30):
+ /postcss-svgo@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==}
engines: {node: ^14 || ^16 || >= 18}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-value-parser: 4.2.0
svgo: 3.0.2
dev: false
- /postcss-unique-selectors@6.0.0(postcss@8.4.30):
+ /postcss-unique-selectors@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-selector-parser: 6.0.13
dev: false
@@ -16005,8 +16069,8 @@ packages:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: false
- /postcss@8.4.30:
- resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==}
+ /postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.6
@@ -16360,7 +16424,7 @@ packages:
resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==}
engines: {node: '>=8.16.0'}
dependencies:
- '@types/mime-types': 2.1.1
+ '@types/mime-types': 2.1.2
debug: 4.3.4(supports-color@8.1.1)
extract-zip: 1.7.0
https-proxy-agent: 4.0.0
@@ -17089,8 +17153,8 @@ packages:
dependencies:
glob: 7.2.3
- /rollup@3.29.2:
- resolution: {integrity: sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==}
+ /rollup@3.29.4:
+ resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
@@ -17172,7 +17236,7 @@ packages:
htmlparser2: 8.0.1
is-plain-object: 5.0.0
parse-srcset: 1.0.2
- postcss: 8.4.30
+ postcss: 8.4.31
dev: false
/sass@1.68.0:
@@ -17782,11 +17846,11 @@ packages:
resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
dev: true
- /storybook@7.4.4:
- resolution: {integrity: sha512-ixyov5hGz/nNad5N93xVYEqmiKXRPmPgKPjgkO8vmeaDBKy0yMGKAhCwZToqRwKflq6Xpas9BJ9Jwl1R2fsZRA==}
+ /storybook@7.4.5:
+ resolution: {integrity: sha512-J7fidphTJ6SJHlR8f/USQE30K6ipbynLVLsTOz0bNYW/0Ua2t9u6dAYGbbq6bLikl3zxzQbdm9lXMUzmaYAdIA==}
hasBin: true
dependencies:
- '@storybook/cli': 7.4.4
+ '@storybook/cli': 7.4.5
transitivePeerDependencies:
- bufferutil
- encoding
@@ -17996,14 +18060,14 @@ packages:
peek-readable: 5.0.0
dev: false
- /stylehacks@6.0.0(postcss@8.4.30):
+ /stylehacks@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==}
engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.21.9
- postcss: 8.4.30
+ postcss: 8.4.31
postcss-selector-parser: 6.0.13
dev: false
@@ -18058,8 +18122,8 @@ packages:
resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==}
dev: true
- /systeminformation@5.21.8:
- resolution: {integrity: sha512-Xf1KDMUTQHLOT9Z7MjpSpsbaICOHcm4OZ9c9qqpkCoXuxq5MoyDrgu5GIQYpoiralXNPrqxDz3ND8MdllpXeQA==}
+ /systeminformation@5.21.9:
+ resolution: {integrity: sha512-7pI4mu9P/2MGDV0T49B52E7IULBGj+kRVk6JSYUj5qfAk7N7C7aNX15fXziqrbgZntc6/jjYzWeb/x41jhg/eA==}
engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
@@ -18202,8 +18266,8 @@ packages:
real-require: 0.2.0
dev: false
- /three@0.156.1:
- resolution: {integrity: sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==}
+ /three@0.157.0:
+ resolution: {integrity: sha512-CeAwQrf4x3z0/e+MC4F+nXLW5t0gh3pw+L6CCBqpHvOq3bGYIgRYub7Pv0j/9wR+d++OiEglyZzWyuSYbwWGOA==}
dev: false
/throttle-debounce@5.0.0:
@@ -18956,7 +19020,7 @@ packages:
core-util-is: 1.0.2
extsprintf: 1.3.0
- /vite-node@0.34.5(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0):
+ /vite-node@0.34.5(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0):
resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==}
engines: {node: '>=v14.18.0'}
hasBin: true
@@ -18966,7 +19030,7 @@ packages:
mlly: 1.4.0
pathe: 1.1.1
picocolors: 1.0.0
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -18982,7 +19046,7 @@ packages:
resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==}
dev: true
- /vite@4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0):
+ /vite@4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0):
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -19010,10 +19074,10 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
esbuild: 0.18.17
- postcss: 8.4.30
- rollup: 3.29.2
+ postcss: 8.4.31
+ rollup: 3.29.4
sass: 1.68.0
terser: 5.20.0
optionalDependencies:
@@ -19064,7 +19128,7 @@ packages:
dependencies:
'@types/chai': 4.3.5
'@types/chai-subset': 1.3.3
- '@types/node': 20.6.4
+ '@types/node': 20.7.1
'@vitest/expect': 0.34.5
'@vitest/runner': 0.34.5
'@vitest/snapshot': 0.34.5
@@ -19084,8 +19148,8 @@ packages:
strip-literal: 1.0.1
tinybench: 2.5.0
tinypool: 0.7.0
- vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
- vite-node: 0.34.5(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
+ vite: 4.4.9(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
+ vite-node: 0.34.5(@types/node@20.7.1)(sass@1.68.0)(terser@5.20.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@@ -19101,8 +19165,8 @@ packages:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'}
- /vue-component-type-helpers@1.8.13:
- resolution: {integrity: sha512-zbCQviVRexZ7NF2kizQq5LicG5QGXPHPALKE3t59f5q2FwaG9GKtdhhIV4rw4LDUm9RkvGAP8TSXlXcBWY8rFQ==}
+ /vue-component-type-helpers@1.8.15:
+ resolution: {integrity: sha512-RKiPRKW4BdwgmQ9vaNkHYKAThdTbgU4TOphVyyzqxRwsOJOoRIrb+vB49XLvs5CKPNrvxMXZMwPe5FyJCqFWyg==}
dev: true
/vue-demi@0.13.11(vue@3.3.4):
@@ -19180,14 +19244,14 @@ packages:
he: 1.2.0
dev: true
- /vue-tsc@1.8.13(typescript@5.2.2):
- resolution: {integrity: sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==}
+ /vue-tsc@1.8.15(typescript@5.2.2):
+ resolution: {integrity: sha512-4DoB3LUj7IToLmggoCxRiFG+QU5lem0nv03m1ocqugXA9rSVoTOEoYYaP8vu8b99Eh+/cCVdYOeIAQ+RsgUYUw==}
hasBin: true
peerDependencies:
typescript: '*'
dependencies:
- '@vue/language-core': 1.8.13(typescript@5.2.2)
- '@vue/typescript': 1.8.13(typescript@5.2.2)
+ '@vue/language-core': 1.8.15(typescript@5.2.2)
+ '@vue/typescript': 1.8.15(typescript@5.2.2)
semver: 7.5.4
typescript: 5.2.2
dev: true
@@ -19643,7 +19707,7 @@ packages:
sharp: 0.31.3
dev: false
- github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.4)(@storybook/components@7.4.4)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0):
+ github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.5)(@storybook/components@7.4.4)(@storybook/core-events@7.4.5)(@storybook/manager-api@7.4.5)(@storybook/preview-api@7.4.5)(@storybook/theming@7.4.5)(@storybook/types@7.4.5)(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
@@ -19664,13 +19728,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/blocks': 7.4.4(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/blocks': 7.4.5(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.4.4
- '@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.4.4
- '@storybook/theming': 7.4.4(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.4.4
+ '@storybook/core-events': 7.4.5
+ '@storybook/manager-api': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.4.5
+ '@storybook/theming': 7.4.5(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.4.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true