Compare commits
39 Commits
13.14.0-be
...
revert-mod
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b6b300a12a | ||
![]() |
e5fce15ba5 | ||
![]() |
c59a9c6f84 | ||
![]() |
545b5cab96 | ||
![]() |
fe13755be8 | ||
![]() |
9208cfd5f3 | ||
![]() |
81ba841fb8 | ||
![]() |
0404d9c103 | ||
![]() |
c1a19ff900 | ||
![]() |
ac6a8edf0b | ||
![]() |
8851e90316 | ||
![]() |
fca6ae9403 | ||
![]() |
4f4f15a6a4 | ||
![]() |
7097d553e4 | ||
![]() |
b8973a6f19 | ||
![]() |
50de2e76b4 | ||
![]() |
40c5699d93 | ||
![]() |
a87dd5ddec | ||
![]() |
561683f097 | ||
![]() |
c9b9db13c7 | ||
![]() |
a8cd8ed99e | ||
![]() |
b3358f0a8b | ||
![]() |
af2368bd2b | ||
![]() |
2cb8e8a748 | ||
![]() |
c40f52b262 | ||
![]() |
2801946226 | ||
![]() |
0d2e3df061 | ||
![]() |
64c142b1ca | ||
![]() |
df2b61fcc6 | ||
![]() |
509e3f979e | ||
![]() |
b546d4108f | ||
![]() |
46f86a9146 | ||
![]() |
2191479c76 | ||
![]() |
0a06eb27da | ||
![]() |
47b684100d | ||
![]() |
7d6ea74288 | ||
![]() |
8e11a30c36 | ||
![]() |
5dc8f63a07 | ||
![]() |
e6fca72171 |
@@ -82,6 +82,8 @@ redis:
|
|||||||
#pass: example-pass
|
#pass: example-pass
|
||||||
#prefix: example-prefix
|
#prefix: example-prefix
|
||||||
#db: 1
|
#db: 1
|
||||||
|
# You can specify more ioredis options...
|
||||||
|
#username: example-username
|
||||||
|
|
||||||
#redisForPubsub:
|
#redisForPubsub:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
@@ -90,6 +92,8 @@ redis:
|
|||||||
# #pass: example-pass
|
# #pass: example-pass
|
||||||
# #prefix: example-prefix
|
# #prefix: example-prefix
|
||||||
# #db: 1
|
# #db: 1
|
||||||
|
# # You can specify more ioredis options...
|
||||||
|
# #username: example-username
|
||||||
|
|
||||||
#redisForJobQueue:
|
#redisForJobQueue:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
@@ -98,6 +102,8 @@ redis:
|
|||||||
# #pass: example-pass
|
# #pass: example-pass
|
||||||
# #prefix: example-prefix
|
# #prefix: example-prefix
|
||||||
# #db: 1
|
# #db: 1
|
||||||
|
# # You can specify more ioredis options...
|
||||||
|
# #username: example-username
|
||||||
|
|
||||||
# ┌───────────────────────────┐
|
# ┌───────────────────────────┐
|
||||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||||
|
25
CHANGELOG.md
25
CHANGELOG.md
@@ -8,12 +8,24 @@
|
|||||||
-
|
-
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
-
|
- Fix: 外部サーバーの投稿がタイムラインに表示されないことがある問題を修正
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 13.x.x (unreleased)
|
## 13.x.x (unreleased)
|
||||||
|
|
||||||
|
### General
|
||||||
|
-
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- リストTLで、ユーザーが追加・削除されてもTLを初期化しないように
|
||||||
|
- Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正
|
||||||
|
- Fix: Selecting all emojis in Custom emoji is impossible
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Fix: APIのオフセットが壊れていたせいで「もっと見る」でもっと見れない問題を修正
|
||||||
|
|
||||||
|
## 13.14.1
|
||||||
|
|
||||||
### General
|
### General
|
||||||
- 招待機能を改善しました
|
- 招待機能を改善しました
|
||||||
* 過去に発行した招待コードを確認できるようになりました
|
* 過去に発行した招待コードを確認できるようになりました
|
||||||
@@ -27,6 +39,7 @@
|
|||||||
- deck UIのカラムのメニューからアンテナとリストの編集画面を開けるように
|
- deck UIのカラムのメニューからアンテナとリストの編集画面を開けるように
|
||||||
- ドライブファイルのメニューで画像をクロップできるように
|
- ドライブファイルのメニューで画像をクロップできるように
|
||||||
- 画像を動画と同様に簡単に隠せるように
|
- 画像を動画と同様に簡単に隠せるように
|
||||||
|
- Enhance: ノートの埋め込みが複数画像と動画を表示されるように
|
||||||
- オリジナル画像を保持せずにアップロードする場合webpでアップロードされるように(Safari以外)
|
- オリジナル画像を保持せずにアップロードする場合webpでアップロードされるように(Safari以外)
|
||||||
- 見たことのあるRenoteを省略して表示をオンのときに自分のnoteのrenoteを省略するように
|
- 見たことのあるRenoteを省略して表示をオンのときに自分のnoteのrenoteを省略するように
|
||||||
- フォルダーやファイルに対しても開発者モード使用時、IDをコピーできるように
|
- フォルダーやファイルに対しても開発者モード使用時、IDをコピーできるように
|
||||||
@@ -42,6 +55,8 @@
|
|||||||
- ロール設定画面でロールIDを確認できるように
|
- ロール設定画面でロールIDを確認できるように
|
||||||
- コンテキストメニュー表示時のパフォーマンスを改善
|
- コンテキストメニュー表示時のパフォーマンスを改善
|
||||||
- フォロー/フォロワー非公開時の表示を改善
|
- フォロー/フォロワー非公開時の表示を改善
|
||||||
|
- 本文にMFMが含まれている場合に自動でたたまれる機能が、返信先や引用RNにも適用されるように
|
||||||
|
- position は対象外になりました
|
||||||
- AiScriptを0.15.0に更新
|
- AiScriptを0.15.0に更新
|
||||||
- Fix: サーバーメトリクスが90度傾いている
|
- Fix: サーバーメトリクスが90度傾いている
|
||||||
- Fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正
|
- Fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正
|
||||||
@@ -59,15 +74,19 @@
|
|||||||
- nsfwjs のモデルロードを排他することで、重複ロードによってメモリ使用量が増加しないように
|
- nsfwjs のモデルロードを排他することで、重複ロードによってメモリ使用量が増加しないように
|
||||||
- 連合の配送ジョブのパフォーマンスを向上(ロック機構の見直し、Redisキャッシュの活用)
|
- 連合の配送ジョブのパフォーマンスを向上(ロック機構の見直し、Redisキャッシュの活用)
|
||||||
- featuredノートのsignedGet回数を減らしました
|
- featuredノートのsignedGet回数を減らしました
|
||||||
- リモートサーバーからのNSFW映像のキャッシュだけを無効化できるオプションを追加
|
- ActivityPubの署名用鍵長を2048bitに変更しパフォーマンスを向上(新規アカウントのみ)
|
||||||
|
- リモートサーバーのセンシティブなファイルのキャッシュだけを無効化できるオプションを追加
|
||||||
- MeilisearchにIndexするノートの範囲を設定できるように
|
- MeilisearchにIndexするノートの範囲を設定できるように
|
||||||
- Export notes with file detail
|
- Export notes with file detail
|
||||||
- Add unix socket support
|
- Add unix socket support
|
||||||
|
- 設定ファイルでioredisの全てのオプションを指定可能に
|
||||||
|
- Fix: エクスポートしたカスタム絵文字のzipが大きいと読み込めない問題を修正
|
||||||
- Fix: リモートサーバーに無意味なActivityPubの配信を行うことがあるのを修正
|
- Fix: リモートサーバーに無意味なActivityPubの配信を行うことがあるのを修正
|
||||||
- Fix: Remove Meilisearch index when notes are deleted
|
- Fix: Remove Meilisearch index when notes are deleted
|
||||||
- Fix: 非英語環境でのPostgreSQLのエラーハンドリングを修正
|
- Fix: 非英語環境でのPostgreSQLのエラーハンドリングを修正
|
||||||
- Fix: インスタンスのアイコンがbase64の場合の挙動を修正
|
- Fix: インスタンスのアイコンがbase64の場合の挙動を修正
|
||||||
- Fix: ローカルの `Person` を指す `acct` URI を解析するときのバグを修正しました
|
- Fix: ローカルの `Person` を指す `acct` URI を解析するときのバグを修正しました
|
||||||
|
- Fix: 無効化されたアンテナが再度有効化されないことがある問題を修正
|
||||||
|
|
||||||
## 13.13.2
|
## 13.13.2
|
||||||
|
|
||||||
|
@@ -214,30 +214,13 @@ Misskey uses [Storybook](https://storybook.js.org/) for UI development.
|
|||||||
|
|
||||||
### Setup & Run
|
### Setup & Run
|
||||||
|
|
||||||
#### Universal
|
#### Setup
|
||||||
|
|
||||||
##### Setup
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm --filter misskey-js build
|
|
||||||
pnpm --filter frontend tsc -p .storybook && (node packages/frontend/.storybook/preload-locale.js & node packages/frontend/.storybook/preload-theme.js)
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node packages/frontend/.storybook/generate.js && pnpm --filter frontend storybook dev
|
|
||||||
```
|
|
||||||
|
|
||||||
#### macOS & Linux
|
|
||||||
|
|
||||||
##### Setup
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm --filter misskey-js build
|
pnpm --filter misskey-js build
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Run
|
#### Run
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm --filter frontend storybook-dev
|
pnpm --filter frontend storybook-dev
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
_lang_: "Čeština"
|
_lang_: "Čeština"
|
||||||
headlineMisskey: "Síť propojená poznámkami"
|
headlineMisskey: "Síť propojená poznámkami"
|
||||||
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
||||||
|
poweredByMisskeyDescription: "{name} je jeden ze serverů využívající open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")."
|
||||||
monthAndDay: "{day}. {month}."
|
monthAndDay: "{day}. {month}."
|
||||||
search: "Vyhledávání"
|
search: "Vyhledávání"
|
||||||
notifications: "Oznámení"
|
notifications: "Oznámení"
|
||||||
@@ -48,8 +49,15 @@ delete: "Smazat"
|
|||||||
deleteAndEdit: "Smazat a upravit"
|
deleteAndEdit: "Smazat a upravit"
|
||||||
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
||||||
addToList: "Přidat do seznamu"
|
addToList: "Přidat do seznamu"
|
||||||
|
addToAntenna: "Přidat do antény"
|
||||||
sendMessage: "Odeslat zprávu"
|
sendMessage: "Odeslat zprávu"
|
||||||
|
copyRSS: "Kopírovat RSS"
|
||||||
copyUsername: "Kopírovat uživatelské jméno"
|
copyUsername: "Kopírovat uživatelské jméno"
|
||||||
|
copyUserId: "Kopírovat ID uživatele"
|
||||||
|
copyNoteId: "Kopírovat ID poznámky"
|
||||||
|
copyFileId: "Kopírovat ID souboru"
|
||||||
|
copyFolderId: "Kopírovat ID složky"
|
||||||
|
copyProfileUrl: "Kopírovat URL profilu"
|
||||||
searchUser: "Vyhledat uživatele"
|
searchUser: "Vyhledat uživatele"
|
||||||
reply: "Odpovědět"
|
reply: "Odpovědět"
|
||||||
loadMore: "Zobrazit více"
|
loadMore: "Zobrazit více"
|
||||||
@@ -60,6 +68,7 @@ receiveFollowRequest: "Žádost o sledování přijata"
|
|||||||
followRequestAccepted: "Žádost o sledování přijata"
|
followRequestAccepted: "Žádost o sledování přijata"
|
||||||
mention: "Zmínění"
|
mention: "Zmínění"
|
||||||
mentions: "Zmínění"
|
mentions: "Zmínění"
|
||||||
|
directNotes: "Přímé poznámky"
|
||||||
importAndExport: "Import a export"
|
importAndExport: "Import a export"
|
||||||
import: "Importovat"
|
import: "Importovat"
|
||||||
export: "Exportovat"
|
export: "Exportovat"
|
||||||
@@ -82,6 +91,7 @@ error: "Chyba"
|
|||||||
somethingHappened: "Jejda. Něco se nepovedlo."
|
somethingHappened: "Jejda. Něco se nepovedlo."
|
||||||
retry: "Opakovat"
|
retry: "Opakovat"
|
||||||
pageLoadError: "Nepodařilo se načíst stránku"
|
pageLoadError: "Nepodařilo se načíst stránku"
|
||||||
|
pageLoadErrorDescription: "Tohle je obvykle způsobeno chybou sítě nebo mezipaměti prohlížeče. Zkuste vymazat mezipaměť a po chvíli čekání to zkuste znovu."
|
||||||
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
|
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
|
||||||
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta."
|
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta."
|
||||||
enterListName: "Jméno seznamu"
|
enterListName: "Jméno seznamu"
|
||||||
@@ -100,6 +110,8 @@ renoted: "Přeposláno"
|
|||||||
cantRenote: "Tento příspěvek nelze přeposlat."
|
cantRenote: "Tento příspěvek nelze přeposlat."
|
||||||
cantReRenote: "Odpověď nemůže být odstraněna."
|
cantReRenote: "Odpověď nemůže být odstraněna."
|
||||||
quote: "Citovat"
|
quote: "Citovat"
|
||||||
|
inChannelRenote: "Přeposlání v kanálu"
|
||||||
|
inChannelQuote: "Citace v kanálu"
|
||||||
pinnedNote: "Připnutá poznámka"
|
pinnedNote: "Připnutá poznámka"
|
||||||
pinned: "Připnout"
|
pinned: "Připnout"
|
||||||
you: "Vy"
|
you: "Vy"
|
||||||
@@ -108,6 +120,7 @@ sensitive: "NSFW"
|
|||||||
add: "Přidat"
|
add: "Přidat"
|
||||||
reaction: "Reakce"
|
reaction: "Reakce"
|
||||||
reactions: "Reakce"
|
reactions: "Reakce"
|
||||||
|
reactionSetting: "Reakce zobrazené ve výběru reakcí"
|
||||||
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
||||||
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
||||||
attachCancel: "Odstranit přílohu"
|
attachCancel: "Odstranit přílohu"
|
||||||
@@ -116,6 +129,8 @@ unmarkAsSensitive: "Odznačit jako NSFW"
|
|||||||
enterFileName: "Zadejte název souboru"
|
enterFileName: "Zadejte název souboru"
|
||||||
mute: "Ztlumit"
|
mute: "Ztlumit"
|
||||||
unmute: "Odmlčet"
|
unmute: "Odmlčet"
|
||||||
|
renoteMute: "Ztlumit poznámky"
|
||||||
|
renoteUnmute: "Zrušit ztlumení poznámek"
|
||||||
block: "Zablokovat"
|
block: "Zablokovat"
|
||||||
unblock: "Odblokovat"
|
unblock: "Odblokovat"
|
||||||
suspend: "Zmrazit"
|
suspend: "Zmrazit"
|
||||||
@@ -125,7 +140,10 @@ unblockConfirm: "Jste si jistí že chcete odblokovat tento účet?"
|
|||||||
suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?"
|
suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?"
|
||||||
unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?"
|
unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?"
|
||||||
selectList: "Vybrat seznam"
|
selectList: "Vybrat seznam"
|
||||||
|
editList: "Upravit seznam"
|
||||||
|
selectChannel: "Vybrat kanál"
|
||||||
selectAntenna: "Vyberte Anténu"
|
selectAntenna: "Vyberte Anténu"
|
||||||
|
editAntenna: "Upravit anténu"
|
||||||
selectWidget: "Zvolte widget"
|
selectWidget: "Zvolte widget"
|
||||||
editWidgets: "Upravit widget"
|
editWidgets: "Upravit widget"
|
||||||
editWidgetsExit: "Hotovo"
|
editWidgetsExit: "Hotovo"
|
||||||
@@ -138,6 +156,8 @@ addEmoji: "Přidat emoji"
|
|||||||
settingGuide: "Doporučené nastavení"
|
settingGuide: "Doporučené nastavení"
|
||||||
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
|
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
|
||||||
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury."
|
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury."
|
||||||
|
cacheRemoteSensitiveFiles: "Uložit do mezipaměti vzdálené citlivé soubory"
|
||||||
|
cacheRemoteSensitiveFilesDescription: "Když je tohle nastavení zrušeno, tak jsou vzdálené citlivé soubory načítány přímo ze vzdálených instancí bez uložení do mezipaměti."
|
||||||
flagAsBot: "Tento účet je bot"
|
flagAsBot: "Tento účet je bot"
|
||||||
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot."
|
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot."
|
||||||
flagAsCat: "Tenhle účet je kočka"
|
flagAsCat: "Tenhle účet je kočka"
|
||||||
@@ -146,6 +166,7 @@ flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
|
|||||||
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose."
|
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose."
|
||||||
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
|
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
|
||||||
addAccount: "Přidat účet"
|
addAccount: "Přidat účet"
|
||||||
|
reloadAccountsList: "Obnovit list účtů"
|
||||||
loginFailed: "Přihlášení se nezdařilo."
|
loginFailed: "Přihlášení se nezdařilo."
|
||||||
showOnRemote: "Více na původním profilu"
|
showOnRemote: "Více na původním profilu"
|
||||||
general: "Obecně"
|
general: "Obecně"
|
||||||
@@ -186,17 +207,26 @@ instanceInfo: "Informace o instanci"
|
|||||||
statistics: "Statistiky"
|
statistics: "Statistiky"
|
||||||
clearQueue: "Vyčistit frontu"
|
clearQueue: "Vyčistit frontu"
|
||||||
clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?"
|
clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?"
|
||||||
|
clearQueueConfirmText: "Jakékoliv nedoručené poznámky ve frontě nebudou sdružovány. Většinou tahle operace není zapotřebí."
|
||||||
clearCachedFiles: "Vyprázdnit mezipaměť"
|
clearCachedFiles: "Vyprázdnit mezipaměť"
|
||||||
|
clearCachedFilesConfirm: "Jste jistí že chcete smazat všechny vzdálené soubory v mezipaměti?"
|
||||||
blockedInstances: "Blokované instance"
|
blockedInstances: "Blokované instance"
|
||||||
|
blockedInstancesDescription: "Vypište názvy hostitelů instancí, které chcete blokovat odděleně řádkovými zlomky. Uvedené instance již nebudou moci s touto instancí komunikovat."
|
||||||
|
muteAndBlock: "Ztlumení a blokování"
|
||||||
|
mutedUsers: "Zltumení uživatelé"
|
||||||
|
blockedUsers: "Blokovaní uživatelé"
|
||||||
noUsers: "Žádní uživatelé"
|
noUsers: "Žádní uživatelé"
|
||||||
editProfile: "Upravit můj profil"
|
editProfile: "Upravit můj profil"
|
||||||
|
noteDeleteConfirm: "Jste si jistí že chcete smazat tuhle poznámku?"
|
||||||
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
||||||
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
|
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
|
||||||
done: "Hotovo"
|
done: "Hotovo"
|
||||||
processing: "Zpracovávám"
|
processing: "Zpracovávám"
|
||||||
preview: "Náhled"
|
preview: "Náhled"
|
||||||
default: "Výchozí"
|
default: "Výchozí"
|
||||||
|
defaultValueIs: "Základní hodnota: {value}"
|
||||||
noCustomEmojis: "Bez Emoji"
|
noCustomEmojis: "Bez Emoji"
|
||||||
|
federating: "Sdružování"
|
||||||
blocked: "Blokováno"
|
blocked: "Blokováno"
|
||||||
suspended: "Suspendováno"
|
suspended: "Suspendováno"
|
||||||
all: "Vše"
|
all: "Vše"
|
||||||
@@ -217,6 +247,7 @@ more: "Více!"
|
|||||||
featured: "Oblíbené poznámky"
|
featured: "Oblíbené poznámky"
|
||||||
usernameOrUserId: "Uživatelské jméno nebo uživatelské id"
|
usernameOrUserId: "Uživatelské jméno nebo uživatelské id"
|
||||||
noSuchUser: "Uživatel nebyl nalezen"
|
noSuchUser: "Uživatel nebyl nalezen"
|
||||||
|
lookup: "Vyhledat"
|
||||||
announcements: "Oznámení"
|
announcements: "Oznámení"
|
||||||
imageUrl: "URL obrázku"
|
imageUrl: "URL obrázku"
|
||||||
remove: "Smazat"
|
remove: "Smazat"
|
||||||
@@ -227,10 +258,13 @@ resetAreYouSure: "Opravdu resetovat?"
|
|||||||
saved: "Uloženo"
|
saved: "Uloženo"
|
||||||
messaging: "Zprávy"
|
messaging: "Zprávy"
|
||||||
upload: "Nahrát soubory"
|
upload: "Nahrát soubory"
|
||||||
|
keepOriginalUploading: "Ponechat originální obrázek"
|
||||||
|
keepOriginalUploadingDescription: "Uloží původní nahraný obrázek jak je. Pokud je to vypnuté, vygeneruje se zobrazení verze na webu při nahrátí."
|
||||||
fromDrive: "Z disku"
|
fromDrive: "Z disku"
|
||||||
fromUrl: "Z URL"
|
fromUrl: "Z URL"
|
||||||
uploadFromUrl: "Nahrát z URL adresy"
|
uploadFromUrl: "Nahrát z URL adresy"
|
||||||
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
|
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
|
||||||
|
uploadFromUrlRequested: "Upload zažádán"
|
||||||
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
|
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
|
||||||
explore: "Objevovat"
|
explore: "Objevovat"
|
||||||
messageRead: "Přečtené"
|
messageRead: "Přečtené"
|
||||||
@@ -238,6 +272,10 @@ noMoreHistory: "To je vše"
|
|||||||
startMessaging: "Zahájit chat"
|
startMessaging: "Zahájit chat"
|
||||||
nUsersRead: "přečteno {n} uživateli"
|
nUsersRead: "přečteno {n} uživateli"
|
||||||
agreeTo: "Souhlasím s {0}"
|
agreeTo: "Souhlasím s {0}"
|
||||||
|
agree: "Souhlasím"
|
||||||
|
agreeBelow: "Souhlasím s následným"
|
||||||
|
basicNotesBeforeCreateAccount: "Důležité poznámky"
|
||||||
|
termsOfService: "Podmínky užívání"
|
||||||
start: "Začít"
|
start: "Začít"
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
|
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
|
||||||
@@ -268,17 +306,24 @@ createFolder: "Vytvořit složku"
|
|||||||
renameFolder: "Přejmenovat složku"
|
renameFolder: "Přejmenovat složku"
|
||||||
deleteFolder: "Odstranit složku"
|
deleteFolder: "Odstranit složku"
|
||||||
addFile: "Přidat soubor"
|
addFile: "Přidat soubor"
|
||||||
|
emptyDrive: "Váš disk je prázdný"
|
||||||
emptyFolder: "Tato složka je prázdná"
|
emptyFolder: "Tato složka je prázdná"
|
||||||
unableToDelete: "Nelze smazat"
|
unableToDelete: "Nelze smazat"
|
||||||
inputNewFileName: "Zadejte nový název"
|
inputNewFileName: "Zadejte nový název"
|
||||||
|
inputNewDescription: "Zadejte nový popisek"
|
||||||
inputNewFolderName: "Zadejte název nové složky"
|
inputNewFolderName: "Zadejte název nové složky"
|
||||||
|
circularReferenceFolder: "Koncová složka je podsložka složky, kterou chcete přesunout."
|
||||||
|
hasChildFilesOrFolders: "Nemůžete odstranit složku, která není prázdná."
|
||||||
copyUrl: "Kopírovat URL"
|
copyUrl: "Kopírovat URL"
|
||||||
rename: "Přejmenovat"
|
rename: "Přejmenovat"
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Baner"
|
banner: "Baner"
|
||||||
|
displayOfSensitiveMedia: "Zobrazit citlivé média"
|
||||||
|
whenServerDisconnected: "Když ztratíte spojení se serverem"
|
||||||
disconnectedFromServer: "Spojení bylo přerušeno"
|
disconnectedFromServer: "Spojení bylo přerušeno"
|
||||||
reload: "Aktualizovat"
|
reload: "Aktualizovat"
|
||||||
doNothing: "Ignorovat"
|
doNothing: "Ignorovat"
|
||||||
|
reloadConfirm: "Chcete obnovit časovou osu?"
|
||||||
watch: "Sledovat"
|
watch: "Sledovat"
|
||||||
unwatch: "Přestat sledovat"
|
unwatch: "Přestat sledovat"
|
||||||
accept: "Souhlasím"
|
accept: "Souhlasím"
|
||||||
@@ -301,15 +346,22 @@ connectService: "Připojit"
|
|||||||
disconnectService: "Odpojit"
|
disconnectService: "Odpojit"
|
||||||
enableLocalTimeline: "Povolit lokální čas"
|
enableLocalTimeline: "Povolit lokální čas"
|
||||||
enableGlobalTimeline: "Povolit globální čas"
|
enableGlobalTimeline: "Povolit globální čas"
|
||||||
|
disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté."
|
||||||
registration: "Registrace"
|
registration: "Registrace"
|
||||||
enableRegistration: "Povolit registraci novým uživatelům"
|
enableRegistration: "Povolit registraci novým uživatelům"
|
||||||
invite: "Pozvat"
|
invite: "Pozvat"
|
||||||
|
driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele"
|
||||||
|
driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele"
|
||||||
inMb: "V megabajtech"
|
inMb: "V megabajtech"
|
||||||
iconUrl: "Favicon URL"
|
iconUrl: "Favicon URL"
|
||||||
bannerUrl: "Baner URL"
|
bannerUrl: "Baner URL"
|
||||||
backgroundImageUrl: "Adresa URL obrázku pozadí"
|
backgroundImageUrl: "Adresa URL obrázku pozadí"
|
||||||
basicInfo: "Základní informace"
|
basicInfo: "Základní informace"
|
||||||
pinnedUsers: "Připnutí uživatelé"
|
pinnedUsers: "Připnutí uživatelé"
|
||||||
|
pinnedUsersDescription: "Seznam uživatelských přezdívek oddělených řádkami bude připnutý v záložce \"Objevit\"."
|
||||||
|
pinnedPages: "Připnutý stránky"
|
||||||
|
pinnedPagesDescription: "Zadejte cesty stránek oddělené řádkami, které si přejete mít přípnutý na vrcholu téhle instance."
|
||||||
|
pinnedClipId: "ID připnutého klipu"
|
||||||
pinnedNotes: "Připnutá poznámka"
|
pinnedNotes: "Připnutá poznámka"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
enableHcaptcha: "Aktivovat hCaptchu"
|
enableHcaptcha: "Aktivovat hCaptchu"
|
||||||
@@ -319,30 +371,56 @@ recaptcha: "reCAPTCHA"
|
|||||||
enableRecaptcha: "Zapnout ReCAPTCHu"
|
enableRecaptcha: "Zapnout ReCAPTCHu"
|
||||||
recaptchaSiteKey: "Klíč stránky"
|
recaptchaSiteKey: "Klíč stránky"
|
||||||
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
|
turnstile: "Turnstile"
|
||||||
|
enableTurnstile: "Povolit Turnstile"
|
||||||
turnstileSiteKey: "Klíč stránky"
|
turnstileSiteKey: "Klíč stránky"
|
||||||
turnstileSecretKey: "Tajný Klíč (Secret Key)"
|
turnstileSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
|
avoidMultiCaptchaConfirm: "Používání několik Captcha systému může způsobit konflikt mezi nimi. Chtěli byste vypnout ostatní aktivní Captcha systémy? Pokud je chcete nechat zapnuté, stiskněte zrušit."
|
||||||
antennas: "Antény"
|
antennas: "Antény"
|
||||||
manageAntennas: "Spravovat Antény"
|
manageAntennas: "Spravovat Antény"
|
||||||
name: "Jméno"
|
name: "Jméno"
|
||||||
antennaSource: "Zdroj Antény"
|
antennaSource: "Zdroj Antény"
|
||||||
|
antennaKeywords: "Klíčová slova na poslech"
|
||||||
|
antennaExcludeKeywords: "Vyloučená klíčová slova"
|
||||||
|
antennaKeywordsDescription: "Oddělte mezerami pro AND kondice nebo řádkami pro OR kondice."
|
||||||
|
notifyAntenna: "Upozornit na nové poznámky"
|
||||||
|
withFileAntenna: "Poznámky jenom se souborama"
|
||||||
enableServiceworker: "Povolit ServiceWorker"
|
enableServiceworker: "Povolit ServiceWorker"
|
||||||
|
antennaUsersDescription: "Vypsat jednoho uživatele na řádek"
|
||||||
caseSensitive: "Rozlišuje malá a velká písmena"
|
caseSensitive: "Rozlišuje malá a velká písmena"
|
||||||
|
withReplies: "Zahrnout odpovědi"
|
||||||
connectedTo: "Následující účty jsou připojeny"
|
connectedTo: "Následující účty jsou připojeny"
|
||||||
notesAndReplies: "Poznámky a odpovědi"
|
notesAndReplies: "Poznámky a odpovědi"
|
||||||
withFiles: "Včetně souborů"
|
withFiles: "Včetně souborů"
|
||||||
|
silence: "Ztlumení"
|
||||||
|
silenceConfirm: "Jste si jistí že chcete ztlumit tohoto uživatele?"
|
||||||
|
unsilence: "Zrušit ztlumení"
|
||||||
|
unsilenceConfirm: "Jste jistí že chcete vrátit zltumení tohoto uživatele?"
|
||||||
popularUsers: "Populární uživatelé"
|
popularUsers: "Populární uživatelé"
|
||||||
recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
|
recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
|
||||||
|
recentlyRegisteredUsers: "Nově připojený uživatelé"
|
||||||
|
recentlyDiscoveredUsers: "Nově objevený uživatelé"
|
||||||
|
exploreUsersCount: "Existuje {count} uživatelů"
|
||||||
|
exploreFediverse: "Objevovat Fediverse"
|
||||||
popularTags: "Populární tagy"
|
popularTags: "Populární tagy"
|
||||||
userList: "Seznamy"
|
userList: "Seznamy"
|
||||||
about: "Informace"
|
about: "Informace"
|
||||||
aboutMisskey: "O Misskey"
|
aboutMisskey: "O Misskey"
|
||||||
administrator: "Administrátor"
|
administrator: "Administrátor"
|
||||||
token: "Token"
|
token: "Token"
|
||||||
|
2fa: "Dvoufázové ověření"
|
||||||
|
totp: "Ověřovací aplikace"
|
||||||
|
totpDescription: "Použít ověřovací aplikaci pro použití jednorázových hesel"
|
||||||
moderator: "Moderátor"
|
moderator: "Moderátor"
|
||||||
|
moderation: "Moderování"
|
||||||
nUsersMentioned: "{n} uživatelů zmínilo"
|
nUsersMentioned: "{n} uživatelů zmínilo"
|
||||||
|
securityKeyAndPasskey: "Bezpečnostní klíče a tokeny"
|
||||||
securityKey: "Bezpečnostní klíč"
|
securityKey: "Bezpečnostní klíč"
|
||||||
lastUsed: "Naposledy použito"
|
lastUsed: "Naposledy použito"
|
||||||
|
lastUsedAt: "Naposledy použito: {t}"
|
||||||
unregister: "Odstranit"
|
unregister: "Odstranit"
|
||||||
|
passwordLessLogin: "Přihlášení bez hesla"
|
||||||
|
passwordLessLoginDescription: "Umožní bez-heslové přihlášení pomocí bezpečnostního klíče či tokenu"
|
||||||
resetPassword: "Resetovat heslo"
|
resetPassword: "Resetovat heslo"
|
||||||
newPasswordIs: "Nové heslo je \"{password}\""
|
newPasswordIs: "Nové heslo je \"{password}\""
|
||||||
reduceUiAnimation: "Snížit UI animace"
|
reduceUiAnimation: "Snížit UI animace"
|
||||||
@@ -391,14 +469,25 @@ or: "Nebo"
|
|||||||
language: "Jazyk"
|
language: "Jazyk"
|
||||||
uiLanguage: "Jazyk uživatelského rozhraní"
|
uiLanguage: "Jazyk uživatelského rozhraní"
|
||||||
aboutX: "O {x}"
|
aboutX: "O {x}"
|
||||||
|
emojiStyle: "Styl emoji"
|
||||||
|
native: "Výchozí"
|
||||||
|
disableDrawer: "Nepoužívat šuplíkové menu"
|
||||||
|
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
||||||
noHistory: "Žádná historie"
|
noHistory: "Žádná historie"
|
||||||
signinHistory: "Historie přihlášení"
|
signinHistory: "Historie přihlášení"
|
||||||
|
enableAdvancedMfm: "Zapnout pokročilé MFM"
|
||||||
|
enableAnimatedMfm: "Zapnout animované MFM"
|
||||||
|
doing: "Procesuju..."
|
||||||
category: "Kategorie"
|
category: "Kategorie"
|
||||||
tags: "Štítky"
|
tags: "Štítky"
|
||||||
|
docSource: "Zdroj tohoto dokumentu"
|
||||||
createAccount: "Vytvořit účet"
|
createAccount: "Vytvořit účet"
|
||||||
existingAccount: "Existující účet"
|
existingAccount: "Existující účet"
|
||||||
regenerate: "Obnovit"
|
regenerate: "Obnovit"
|
||||||
fontSize: "Velikost písma"
|
fontSize: "Velikost písma"
|
||||||
|
mediaListWithOneImageAppearance: "Výška seznamu médií s jedním obrázkem"
|
||||||
|
limitTo: "Omezeno na {x}"
|
||||||
|
noFollowRequests: "Nemáte žádné žádosti o sledování"
|
||||||
openImageInNewTab: "Otevřít obrázek v novém panelu"
|
openImageInNewTab: "Otevřít obrázek v novém panelu"
|
||||||
dashboard: "Přehled"
|
dashboard: "Přehled"
|
||||||
local: "Lokální"
|
local: "Lokální"
|
||||||
@@ -412,15 +501,35 @@ accountSettings: "Nastavení účtu"
|
|||||||
promotion: "Propagace"
|
promotion: "Propagace"
|
||||||
promote: "Propagovat"
|
promote: "Propagovat"
|
||||||
numberOfDays: "Počet dní"
|
numberOfDays: "Počet dní"
|
||||||
|
hideThisNote: "Skrýt tuto poznámku"
|
||||||
|
showFeaturedNotesInTimeline: "Zobrazit významné poznámky v časové ose"
|
||||||
|
objectStorage: "Úložiště objektů"
|
||||||
|
useObjectStorage: "Použít úložiště objektů"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
|
objectStorageBaseUrlDesc: "URL použitá jako reference. Upřesněte URL vlastní CDN nebo Proxy pokud používáte jeden z nich. Pro S3 použijte 'https://<bucket>.s3.amazonaws.com' a pro GCS nebo ekvivalentní služby použijte 'https://storage.googleapis.com/<bucket>', apd."
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
|
objectStorageBucketDesc: "Prosím upřesněte název bucketu používaný poskytovatelem."
|
||||||
objectStoragePrefix: "Předpona"
|
objectStoragePrefix: "Předpona"
|
||||||
|
objectStoragePrefixDesc: "Soubory budou ukládány pod složkama s tímhle prefixem."
|
||||||
objectStorageEndpoint: "Endpoint"
|
objectStorageEndpoint: "Endpoint"
|
||||||
|
objectStorageEndpointDesc: "Ponechte tohle prázdné pokud používáte AWS S3, jinak upřesněte endpoint jako \"<host>\" nebo \"<host>:<port>\", podle toho jakou službu používáte."
|
||||||
objectStorageRegion: "Región"
|
objectStorageRegion: "Región"
|
||||||
|
objectStorageRegionDesc: "Upřesněte region jako například \"xx-east-1\". Pokud vlastní služba nerozlišuje mezi regiony, zadejte \"us-east-1\". Zanechte prázdné pokud používáte AWS konfiguraci či proměnné veličiny."
|
||||||
objectStorageUseSSL: "Použít SSL"
|
objectStorageUseSSL: "Použít SSL"
|
||||||
|
objectStorageUseSSLDesc: "Vypněte to pokud nebudete používat HTTPS pro API připojení"
|
||||||
|
objectStorageUseProxy: "Připojení skrze Proxy"
|
||||||
|
objectStorageUseProxyDesc: "Vypněte to pokud nebudete používat Proxy pro API připojení."
|
||||||
|
objectStorageSetPublicRead: "Při nahrátí nastavit na \"public-read\""
|
||||||
|
s3ForcePathStyleDesc: "Pokud je povolena funkce s3ForcePathStyle, musí být název Bucketu zahrnut do cesty k adrese URL, nikoli do názvu hostitele adresy URL. Toto nastavení může být nutné povolit při používání služeb, jako je například samostatně hostovaná instance Minio."
|
||||||
|
serverLogs: "Logy serveru"
|
||||||
deleteAll: "Smazat vše"
|
deleteAll: "Smazat vše"
|
||||||
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
||||||
|
showFixedPostFormInChannel: "Zobrazit vkládací formulář na vrcholu časové osy (Kanály)"
|
||||||
|
newNoteRecived: "Jsou k dispozici nové poznámky"
|
||||||
|
sounds: "Zvuky"
|
||||||
|
sound: "Zvuky"
|
||||||
listen: "Poslouchat"
|
listen: "Poslouchat"
|
||||||
|
none: "Žádný"
|
||||||
showInPage: "Zobrazit na stránce"
|
showInPage: "Zobrazit na stránce"
|
||||||
popout: "Pop-out"
|
popout: "Pop-out"
|
||||||
volume: "Hlasitost"
|
volume: "Hlasitost"
|
||||||
@@ -433,29 +542,61 @@ install: "Nainstalovat"
|
|||||||
uninstall: "Odinstalovat"
|
uninstall: "Odinstalovat"
|
||||||
installedApps: "Autorizované aplikace"
|
installedApps: "Autorizované aplikace"
|
||||||
nothing: "Nic nebylo nalezeno"
|
nothing: "Nic nebylo nalezeno"
|
||||||
|
installedDate: "Datum autorizace"
|
||||||
lastUsedDate: "Poslední použití"
|
lastUsedDate: "Poslední použití"
|
||||||
state: "Stav"
|
state: "Stav"
|
||||||
sort: "Seřadit"
|
sort: "Seřadit"
|
||||||
ascendingOrder: "Vzestupně"
|
ascendingOrder: "Vzestupně"
|
||||||
descendingOrder: "Sestupně"
|
descendingOrder: "Sestupně"
|
||||||
scratchpad: "Zápisník"
|
scratchpad: "Zápisník"
|
||||||
|
scratchpadDescription: "Scratchpad poskytuje rozhraní pro AiScript experimenty. Můžete psát, spustit či zkontrolovat výsledky jeho interakce s Misskey."
|
||||||
output: "Výstup"
|
output: "Výstup"
|
||||||
script: "Skript"
|
script: "Skript"
|
||||||
|
disablePagesScript: "Vypnout AiScript na stránkách"
|
||||||
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
|
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
|
||||||
deleteAllFiles: "Smazat všechny soubory"
|
deleteAllFiles: "Smazat všechny soubory"
|
||||||
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
||||||
|
removeAllFollowing: "Přestat sledovat všechny sledované uživatele"
|
||||||
|
removeAllFollowingDescription: "Spuštěním přestanete sledovat všechny účty z {host}. Prosíme spustěte tohle v případě že instance už neexistuje. "
|
||||||
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
||||||
|
userSilenced: "Tenhle uživatel je umlčen."
|
||||||
|
yourAccountSuspendedTitle: "Tenhle účet je zmrazený"
|
||||||
|
yourAccountSuspendedDescription: "Tenhle účet byl zmrazen z důvodu porušení smluvní podmínky serveru. Pro přesnější informace kontaktujte administrátora. Prosíme nezakládejte si nový účet."
|
||||||
|
tokenRevoked: "Nesprávný token"
|
||||||
|
tokenRevokedDescription: "Tenhle token vyprchal. Prosíme přihlašte se znova."
|
||||||
|
accountDeleted: "Účet smazán"
|
||||||
|
accountDeletedDescription: "Tenhle účet byl smazán."
|
||||||
menu: "Menu"
|
menu: "Menu"
|
||||||
divider: "Dělící čára"
|
divider: "Dělící čára"
|
||||||
addItem: "Přidat položku"
|
addItem: "Přidat položku"
|
||||||
|
rearrange: "Přeřadit"
|
||||||
relays: "Relay"
|
relays: "Relay"
|
||||||
addRelay: "Přidat Relay"
|
addRelay: "Přidat Relay"
|
||||||
inboxUrl: "Inbox URL"
|
inboxUrl: "Inbox URL"
|
||||||
|
addedRelays: "Přidané přenosy"
|
||||||
|
serviceworkerInfo: "Musí být zapnut pro push notifikace."
|
||||||
deletedNote: "Odstraněné příspěvky"
|
deletedNote: "Odstraněné příspěvky"
|
||||||
invisibleNote: "Skryté příspěvky"
|
invisibleNote: "Skryté příspěvky"
|
||||||
|
enableInfiniteScroll: "Automaticky načítat více"
|
||||||
|
visibility: "Viditelnost"
|
||||||
|
poll: "Anketa"
|
||||||
|
useCw: "Schovat obsah"
|
||||||
|
enablePlayer: "Otevřít video přehrávač"
|
||||||
|
disablePlayer: "Zavřít video přehrávač"
|
||||||
|
expandTweet: "Rozbalit tweet"
|
||||||
|
themeEditor: "Editor témat"
|
||||||
description: "Popis"
|
description: "Popis"
|
||||||
|
describeFile: "Přidat popisek"
|
||||||
|
enterFileDescription: "Vložit popisek"
|
||||||
author: "Autor"
|
author: "Autor"
|
||||||
|
leaveConfirm: "Máte neuložené změny. Opravdu je chcete zahodit?"
|
||||||
manage: "Administrace"
|
manage: "Administrace"
|
||||||
|
plugins: "Pluginy"
|
||||||
|
preferencesBackups: "Zálohy nastavení"
|
||||||
|
deck: "Deck"
|
||||||
|
undeck: "Opustit Deck"
|
||||||
|
useBlurEffectForModal: "Použít efekt rozostření na okna"
|
||||||
|
useFullReactionPicker: "Používat plnou velikost výběru emoji"
|
||||||
width: "Šířka"
|
width: "Šířka"
|
||||||
height: "Výška"
|
height: "Výška"
|
||||||
large: "Velké"
|
large: "Velké"
|
||||||
@@ -465,10 +606,13 @@ generateAccessToken: "Vygenerovat přístupový token"
|
|||||||
permission: "Oprávnění"
|
permission: "Oprávnění"
|
||||||
enableAll: "Povolit vše"
|
enableAll: "Povolit vše"
|
||||||
disableAll: "Vypnout vše"
|
disableAll: "Vypnout vše"
|
||||||
|
tokenRequested: "Povolit přístup k účtu"
|
||||||
|
pluginTokenRequestedDescription: "Tenhle plugin bude moct používat oprávnění nastavená zde."
|
||||||
notificationType: "Typy oznámení"
|
notificationType: "Typy oznámení"
|
||||||
edit: "Upravit"
|
edit: "Upravit"
|
||||||
emailServer: "Mailový server"
|
emailServer: "Mailový server"
|
||||||
enableEmail: "Zapnout email dystribuci"
|
enableEmail: "Zapnout email dystribuci"
|
||||||
|
emailConfigInfo: "Používá se na ověření emailové adresy během registrace nebo při zapomenutí hesla."
|
||||||
email: "Email"
|
email: "Email"
|
||||||
emailAddress: "Emailová adresa"
|
emailAddress: "Emailová adresa"
|
||||||
smtpConfig: "Konfigurace SMTP serveru"
|
smtpConfig: "Konfigurace SMTP serveru"
|
||||||
@@ -476,8 +620,15 @@ smtpHost: "Hostitel"
|
|||||||
smtpPort: "Port"
|
smtpPort: "Port"
|
||||||
smtpUser: "Uživatelské jméno"
|
smtpUser: "Uživatelské jméno"
|
||||||
smtpPass: "Heslo"
|
smtpPass: "Heslo"
|
||||||
|
emptyToDisableSmtpAuth: "Zanechte uživatelské jméno a heslo prázdné pro vypnutí SMTP verifikace."
|
||||||
|
smtpSecure: "Použít implicitní SSL/TLS pro SMTP připojení"
|
||||||
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
||||||
testEmail: "Otestovat doručení emailů"
|
testEmail: "Otestovat doručení emailů"
|
||||||
|
wordMute: "Ztlumené slova"
|
||||||
|
regexpError: "Chyba v regulérním výrazu"
|
||||||
|
regexpErrorDescription: "Došlo k chybě v regulérním výrazu v řádku {line} tabulky {tab} ztlumených slov:"
|
||||||
|
instanceMute: "Ztlumené instance"
|
||||||
|
userSaysSomething: "{name} řekl/a něco"
|
||||||
makeActive: "Aktivovat"
|
makeActive: "Aktivovat"
|
||||||
display: "Zobrazit"
|
display: "Zobrazit"
|
||||||
copy: "Kopírovat"
|
copy: "Kopírovat"
|
||||||
@@ -489,21 +640,66 @@ database: "Databáze"
|
|||||||
channel: "Kanály"
|
channel: "Kanály"
|
||||||
create: "Vytvořit"
|
create: "Vytvořit"
|
||||||
notificationSetting: "Nastavení oznámení"
|
notificationSetting: "Nastavení oznámení"
|
||||||
|
notificationSettingDesc: "Vyberte typy oznámení k zobrazení."
|
||||||
useGlobalSetting: "Použít globální nastavení"
|
useGlobalSetting: "Použít globální nastavení"
|
||||||
|
useGlobalSettingDesc: "Pokud je to zapnuté, tak nastavení oznámení účtu bude použito. Pokud je to vypnuté, tak se bude moct použít jednotlivá nastavení."
|
||||||
other: "Ostatní"
|
other: "Ostatní"
|
||||||
|
regenerateLoginToken: "Přegenerovat přihlašovací token"
|
||||||
|
regenerateLoginTokenDescription: "Přegeneruje token interně používaný během přihlášení. Běžně tahle akce není nutná. Pokud bude token přegenerovaný, tak se všechna přihlášená zařízení odhlásí."
|
||||||
|
setMultipleBySeparatingWithSpace: "Oddělení více položek mezerami."
|
||||||
fileIdOrUrl: "ID nebo URL souboru"
|
fileIdOrUrl: "ID nebo URL souboru"
|
||||||
behavior: "Chování"
|
behavior: "Chování"
|
||||||
sample: "Ukázka"
|
sample: "Ukázka"
|
||||||
|
abuseReports: "Nahlášení"
|
||||||
|
reportAbuse: "Nahlášení"
|
||||||
|
reportAbuseOf: "Nahlásit {name}"
|
||||||
|
fillAbuseReportDescription: "Prosíme vyplňte všechny detaily ohledně tohodle nahlášení. Pokud jde o specifickou poznámku, prosíme o přiložení její URL."
|
||||||
|
abuseReported: "Nahlášení bylo odesláno. Děkujeme převelice."
|
||||||
|
reporter: "Nahlásil"
|
||||||
|
reporteeOrigin: "Původ nahlášení"
|
||||||
|
reporterOrigin: "Původ nahlasovače"
|
||||||
|
forwardReport: "Přeposlat nahlášení do vzdálené instance"
|
||||||
send: "Odeslat"
|
send: "Odeslat"
|
||||||
openInNewTab: "Otevřít v nové kartě"
|
openInNewTab: "Otevřít v nové kartě"
|
||||||
|
openInSideView: "Otevřít v bočním panelu"
|
||||||
|
defaultNavigationBehaviour: "Výchozí chování navigace"
|
||||||
|
instanceTicker: "Informace instance o poznámkách"
|
||||||
|
waitingFor: "Čeká se na {x}"
|
||||||
random: "Náhodně"
|
random: "Náhodně"
|
||||||
system: "Systém"
|
system: "Systém"
|
||||||
|
switchUi: "Přepnout UI"
|
||||||
desktop: "Plocha"
|
desktop: "Plocha"
|
||||||
clip: "Oříznout"
|
clip: "Oříznout"
|
||||||
createNew: "Vytvořit nový"
|
createNew: "Vytvořit nový"
|
||||||
optional: "Volitelné"
|
optional: "Volitelné"
|
||||||
|
createNewClip: "Vytvořit nový klip"
|
||||||
|
unclip: "Odepnout"
|
||||||
|
confirmToUnclipAlreadyClippedNote: "Tahle poznámku je už součásti \"{name}\" klipu. Chcete ji místo toho odepnout z tohodle klipu?"
|
||||||
|
public: "Veřejný"
|
||||||
|
i18nInfo: "Misskey je překládán do jiných jazyků dobrovolníkama. Můžete pomoci na {link}."
|
||||||
|
manageAccessTokens: "Spravovat přístupové tokeny"
|
||||||
|
accountInfo: "Informace o účtu"
|
||||||
|
notesCount: "Počet poznámek"
|
||||||
|
repliesCount: "Počet odeslaných odpovědí"
|
||||||
|
renotesCount: "Počet přeposlaných poznámek"
|
||||||
|
repliedCount: "Počet přijatých odpovědí"
|
||||||
|
renotedCount: "Počet přijatých přeposlaných poznámek"
|
||||||
|
followingCount: "Počet sledovaných účtů"
|
||||||
|
followersCount: "Počet sledujících"
|
||||||
|
sentReactionsCount: "Počet odeslaných reakcí"
|
||||||
|
receivedReactionsCount: "Počet přijatých reakcí"
|
||||||
|
pollVotesCount: "Počet odeslaných anketových hlasů"
|
||||||
|
pollVotedCount: "Počet přijatých anketových hlasů"
|
||||||
yes: "Ano"
|
yes: "Ano"
|
||||||
no: "Ne"
|
no: "Ne"
|
||||||
|
driveFilesCount: "Počet souborů na disku"
|
||||||
|
driveUsage: "Využití disku"
|
||||||
|
noCrawle: "Odmítat indexování crawleru"
|
||||||
|
lockedAccountInfo: "Pokud nenastavíte viditelnost poznámek na \"Pouze pro sledující\", budou poznámky viditelné všem i přesto že vyžadujete manuální potvrzení pro sledování."
|
||||||
|
alwaysMarkSensitive: "Výchozně označovat jako citlivý"
|
||||||
|
loadRawImages: "Načítat originální obrázky místo náhledů"
|
||||||
|
disableShowingAnimatedImages: "Nepřehrávat animované obrázky"
|
||||||
|
verificationEmailSent: "Ověřovací email byl zaslán. Ověření dokončíte kliknutím na odkaz v emailu."
|
||||||
notSet: "Není nastaveno"
|
notSet: "Není nastaveno"
|
||||||
emailVerified: "Váš e-mail byl ověřen"
|
emailVerified: "Váš e-mail byl ověřen"
|
||||||
contact: "Kontakt"
|
contact: "Kontakt"
|
||||||
|
@@ -1091,6 +1091,9 @@ usedAt: "Usada el"
|
|||||||
unused: "Sin usar"
|
unused: "Sin usar"
|
||||||
used: "Usada"
|
used: "Usada"
|
||||||
expired: "Caducada"
|
expired: "Caducada"
|
||||||
|
doYouAgree: "¿Está de acuerdo?"
|
||||||
|
beSureToReadThisAsItIsImportant: "Por favor lea esto que es importante"
|
||||||
|
iHaveReadXCarefullyAndAgree: "He leído el texto {x} y estoy de acuerdo"
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "¡La cuenta ha sido creada!"
|
accountCreated: "¡La cuenta ha sido creada!"
|
||||||
letsStartAccountSetup: "Para empezar, creemos tu perfil."
|
letsStartAccountSetup: "Para empezar, creemos tu perfil."
|
||||||
|
@@ -49,6 +49,7 @@ delete: "Supprimer"
|
|||||||
deleteAndEdit: "Supprimer et réécrire"
|
deleteAndEdit: "Supprimer et réécrire"
|
||||||
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
|
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
|
||||||
addToList: "Ajouter à une liste"
|
addToList: "Ajouter à une liste"
|
||||||
|
addToAntenna: "Ajouter à l’antenne"
|
||||||
sendMessage: "Envoyer un message"
|
sendMessage: "Envoyer un message"
|
||||||
copyRSS: "Copier le RSS"
|
copyRSS: "Copier le RSS"
|
||||||
copyUsername: "Copier le nom d’utilisateur·rice"
|
copyUsername: "Copier le nom d’utilisateur·rice"
|
||||||
|
1
locales/hu-HU.yml
Normal file
1
locales/hu-HU.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
---
|
@@ -49,11 +49,15 @@ delete: "ほかす"
|
|||||||
deleteAndEdit: "ほかして直す"
|
deleteAndEdit: "ほかして直す"
|
||||||
deleteAndEditConfirm: "このノートをほかしてもっかい直す?このノートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん?"
|
deleteAndEditConfirm: "このノートをほかしてもっかい直す?このノートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん?"
|
||||||
addToList: "リストに入れたる"
|
addToList: "リストに入れたる"
|
||||||
|
addToAntenna: "アンテナに追加"
|
||||||
sendMessage: "メッセージを送る"
|
sendMessage: "メッセージを送る"
|
||||||
copyRSS: "RSSをコピー"
|
copyRSS: "RSSをコピー"
|
||||||
copyUsername: "ユーザー名をコピー"
|
copyUsername: "ユーザー名をコピー"
|
||||||
copyUserId: "ユーザーIDをコピー"
|
copyUserId: "ユーザーIDをコピー"
|
||||||
copyNoteId: "ノートIDをコピー"
|
copyNoteId: "ノートIDをコピー"
|
||||||
|
copyFileId: "ファイルIDをコピー"
|
||||||
|
copyFolderId: "フォルダーIDをコピー"
|
||||||
|
copyProfileUrl: "プロフィールURLをコピー"
|
||||||
searchUser: "ユーザーを検索"
|
searchUser: "ユーザーを検索"
|
||||||
reply: "返事"
|
reply: "返事"
|
||||||
loadMore: "まだまだあるで!"
|
loadMore: "まだまだあるで!"
|
||||||
@@ -152,6 +156,8 @@ addEmoji: "絵文字を追加"
|
|||||||
settingGuide: "ええ感じの設定"
|
settingGuide: "ええ感じの設定"
|
||||||
cacheRemoteFiles: "リモートのファイルをキャッシュする"
|
cacheRemoteFiles: "リモートのファイルをキャッシュする"
|
||||||
cacheRemoteFilesDescription: "この設定を切っとったら、リモートファイルをキャッシュせんと直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルを作らんなるから通信量が増えるで。"
|
cacheRemoteFilesDescription: "この設定を切っとったら、リモートファイルをキャッシュせんと直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルを作らんなるから通信量が増えるで。"
|
||||||
|
cacheRemoteSensitiveFiles: "リモートのセンシティブなファイルをキャッシュする"
|
||||||
|
cacheRemoteSensitiveFilesDescription: "この設定を無効にすると、リモートのセンシティブなファイルはキャッシュせず直リンクするようになるで。"
|
||||||
flagAsBot: "Botにするで"
|
flagAsBot: "Botにするで"
|
||||||
flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。"
|
flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。"
|
||||||
flagAsCat: "Catやで"
|
flagAsCat: "Catやで"
|
||||||
@@ -313,6 +319,7 @@ copyUrl: "URLをコピー"
|
|||||||
rename: "名前を変えるで"
|
rename: "名前を変えるで"
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
displayOfSensitiveMedia: "センシティブなメディアの表示"
|
||||||
whenServerDisconnected: "サーバーとの接続が失くなってしもうたとき"
|
whenServerDisconnected: "サーバーとの接続が失くなってしもうたとき"
|
||||||
disconnectedFromServer: "サーバーが機嫌悪いねん"
|
disconnectedFromServer: "サーバーが機嫌悪いねん"
|
||||||
reload: "リロード"
|
reload: "リロード"
|
||||||
@@ -1067,11 +1074,26 @@ branding: "あ"
|
|||||||
enableServerMachineStats: "サーバーのマシン情報見せびらかすで"
|
enableServerMachineStats: "サーバーのマシン情報見せびらかすで"
|
||||||
enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
|
enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
|
||||||
turnOffToImprovePerformance: "オフにしたらえらい軽うなるで。"
|
turnOffToImprovePerformance: "オフにしたらえらい軽うなるで。"
|
||||||
|
createInviteCode: "招待コードを作成"
|
||||||
|
createWithOptions: "オプションを指定して作成"
|
||||||
|
createCount: "作成数"
|
||||||
inviteCodeCreated: "招待コード作ったで"
|
inviteCodeCreated: "招待コード作ったで"
|
||||||
inviteLimitExceeded: "招待コード作りすぎやで。"
|
inviteLimitExceeded: "招待コード作りすぎやで。"
|
||||||
createLimitRemaining: "作成できる招待コード: 残り {limit} 個やで"
|
createLimitRemaining: "作成できる招待コード: 残り {limit} 個やで"
|
||||||
|
inviteLimitResetCycle: "{time}で最大 {limit} 個の招待コードを作成できるで。"
|
||||||
|
expirationDate: "有効期限"
|
||||||
|
noExpirationDate: "有効期限を設けへん"
|
||||||
|
inviteCodeUsedAt: "招待コードが使用された日時"
|
||||||
|
registeredUserUsingInviteCode: "招待コードを使用したユーザー"
|
||||||
|
waitingForMailAuth: "メール認証待ち"
|
||||||
|
inviteCodeCreator: "招待コードを作成したユーザー"
|
||||||
|
usedAt: "使用日時"
|
||||||
unused: "つこてへん"
|
unused: "つこてへん"
|
||||||
used: "もうつこてる"
|
used: "もうつこてる"
|
||||||
|
expired: "期限切れ"
|
||||||
|
doYouAgree: "同意するんか?"
|
||||||
|
beSureToReadThisAsItIsImportant: "重要やから絶対読んでや。"
|
||||||
|
iHaveReadXCarefullyAndAgree: "「{x}」の内容をよう読んで、同意するで。"
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "アカウント作り終わったで。"
|
accountCreated: "アカウント作り終わったで。"
|
||||||
letsStartAccountSetup: "アカウントの初期設定をしよか。"
|
letsStartAccountSetup: "アカウントの初期設定をしよか。"
|
||||||
@@ -1382,6 +1404,9 @@ _role:
|
|||||||
ltlAvailable: "ローカルタイムラインの閲覧"
|
ltlAvailable: "ローカルタイムラインの閲覧"
|
||||||
canPublicNote: "パブリック投稿の許可"
|
canPublicNote: "パブリック投稿の許可"
|
||||||
canInvite: "サーバー招待コードの発行"
|
canInvite: "サーバー招待コードの発行"
|
||||||
|
inviteLimit: "招待コードの作成可能数"
|
||||||
|
inviteLimitCycle: "招待コードの発行間隔"
|
||||||
|
inviteExpirationTime: "招待コードの有効期限"
|
||||||
canManageCustomEmojis: "カスタム絵文字の管理"
|
canManageCustomEmojis: "カスタム絵文字の管理"
|
||||||
driveCapacity: "ドライブ容量"
|
driveCapacity: "ドライブ容量"
|
||||||
alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける"
|
alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける"
|
||||||
@@ -1444,6 +1469,7 @@ _ad:
|
|||||||
back: "戻る"
|
back: "戻る"
|
||||||
reduceFrequencyOfThisAd: "この広告の表示頻度を下げるで"
|
reduceFrequencyOfThisAd: "この広告の表示頻度を下げるで"
|
||||||
hide: "表示せん"
|
hide: "表示せん"
|
||||||
|
timezoneinfo: "曜日はサーバーのタイムゾーンを元に指定されるで。"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "アカウントに登録したメールアドレスをここに入力してや。そのアドレス宛に、パスワードリセット用のリンクが送られるから待っててな~。"
|
enterEmail: "アカウントに登録したメールアドレスをここに入力してや。そのアドレス宛に、パスワードリセット用のリンクが送られるから待っててな~。"
|
||||||
ifNoEmail: "メールアドレスを登録してへんのやったら、管理者まで教えてな~。"
|
ifNoEmail: "メールアドレスを登録してへんのやったら、管理者まで教えてな~。"
|
||||||
@@ -1973,6 +1999,7 @@ _deck:
|
|||||||
introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょ!"
|
introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょ!"
|
||||||
introduction2: "画面の右にある + を押して、いつでもカラムを追加できるで。"
|
introduction2: "画面の右にある + を押して、いつでもカラムを追加できるで。"
|
||||||
widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選んでウィジェットを追加してなー"
|
widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選んでウィジェットを追加してなー"
|
||||||
|
useSimpleUiForNonRootPages: "非ルートページは簡易UIで表示"
|
||||||
_columns:
|
_columns:
|
||||||
main: "メイン"
|
main: "メイン"
|
||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -49,6 +49,7 @@ delete: "Удалить"
|
|||||||
deleteAndEdit: "Удалить и отредактировать"
|
deleteAndEdit: "Удалить и отредактировать"
|
||||||
deleteAndEditConfirm: "Удалить эту заметку и создать отредактированную? Все реакции, ссылки и ответы на существующую будут будут потеряны."
|
deleteAndEditConfirm: "Удалить эту заметку и создать отредактированную? Все реакции, ссылки и ответы на существующую будут будут потеряны."
|
||||||
addToList: "Добавить в список"
|
addToList: "Добавить в список"
|
||||||
|
addToAntenna: "Добавить к антенне"
|
||||||
sendMessage: "Отправить сообщение"
|
sendMessage: "Отправить сообщение"
|
||||||
copyRSS: "Скопировать RSS"
|
copyRSS: "Скопировать RSS"
|
||||||
copyUsername: "Скопировать имя пользователя"
|
copyUsername: "Скопировать имя пользователя"
|
||||||
@@ -155,6 +156,8 @@ addEmoji: "Добавить эмодзи"
|
|||||||
settingGuide: "Рекомендуемые настройки"
|
settingGuide: "Рекомендуемые настройки"
|
||||||
cacheRemoteFiles: "Кешировать внешние файлы"
|
cacheRemoteFiles: "Кешировать внешние файлы"
|
||||||
cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, так как не будут создаваться эскизы."
|
cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, так как не будут создаваться эскизы."
|
||||||
|
cacheRemoteSensitiveFiles: "Кешировать внешние файлы"
|
||||||
|
cacheRemoteSensitiveFilesDescription: "Описание удаленных внешних файлов в кэше"
|
||||||
flagAsBot: "Аккаунт бота"
|
flagAsBot: "Аккаунт бота"
|
||||||
flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе Misskey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия."
|
flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе Misskey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия."
|
||||||
flagAsCat: "Аккаунт кота"
|
flagAsCat: "Аккаунт кота"
|
||||||
@@ -316,6 +319,7 @@ copyUrl: "Копировать ссылку"
|
|||||||
rename: "Переименовать"
|
rename: "Переименовать"
|
||||||
avatar: "Аватар"
|
avatar: "Аватар"
|
||||||
banner: "Шапка"
|
banner: "Шапка"
|
||||||
|
displayOfSensitiveMedia: "Определение деликатного контента"
|
||||||
whenServerDisconnected: "Когда соединение с сервером потеряно"
|
whenServerDisconnected: "Когда соединение с сервером потеряно"
|
||||||
disconnectedFromServer: "Разорвано соединение с сервером"
|
disconnectedFromServer: "Разорвано соединение с сервером"
|
||||||
reload: "Перезагрузить"
|
reload: "Перезагрузить"
|
||||||
@@ -840,6 +844,8 @@ breakFollow: "Отписка"
|
|||||||
breakFollowConfirm: "Удалить из подписок пользователя ?"
|
breakFollowConfirm: "Удалить из подписок пользователя ?"
|
||||||
itsOn: "Включено"
|
itsOn: "Включено"
|
||||||
itsOff: "Выключено"
|
itsOff: "Выключено"
|
||||||
|
on: "Вкл"
|
||||||
|
off: "Выкл"
|
||||||
emailRequiredForSignup: "Для регистрации учётной записи нужен адрес электронной почты"
|
emailRequiredForSignup: "Для регистрации учётной записи нужен адрес электронной почты"
|
||||||
unread: "Непрочитанное"
|
unread: "Непрочитанное"
|
||||||
filter: "Фильтры"
|
filter: "Фильтры"
|
||||||
@@ -994,6 +1000,7 @@ cannotBeChangedLater: "Это нельзя изменить позже"
|
|||||||
reactionAcceptance: "Принятие реакций"
|
reactionAcceptance: "Принятие реакций"
|
||||||
likeOnly: "Только лайки"
|
likeOnly: "Только лайки"
|
||||||
likeOnlyForRemote: "Только лайки с удалённых серверов"
|
likeOnlyForRemote: "Только лайки с удалённых серверов"
|
||||||
|
nonSensitiveOnly: "Безопасный серфинг"
|
||||||
rolesAssignedToMe: "Мои роли"
|
rolesAssignedToMe: "Мои роли"
|
||||||
resetPasswordConfirm: "Сбросить пароль?"
|
resetPasswordConfirm: "Сбросить пароль?"
|
||||||
sensitiveWords: "Чувствительные слова"
|
sensitiveWords: "Чувствительные слова"
|
||||||
@@ -1014,7 +1021,15 @@ noteIdOrUrl: "ID или ссылка на заметку"
|
|||||||
video: "Видео"
|
video: "Видео"
|
||||||
videos: "Видео"
|
videos: "Видео"
|
||||||
dataSaver: "Экономия трафика"
|
dataSaver: "Экономия трафика"
|
||||||
|
accountMigration: "Перенести учётную запись"
|
||||||
|
accountMoved: "Учетная запись перенесена"
|
||||||
|
operationForbidden: "Эта операция невозможна."
|
||||||
|
addMemo: "Добавить заметку"
|
||||||
|
editMemo: "Редактировать заметку"
|
||||||
|
reactionsList: "Реакции"
|
||||||
renotesList: "Репосты"
|
renotesList: "Репосты"
|
||||||
|
notificationDisplay: "Отображение уведомления"
|
||||||
|
leftTop: "Верхний левый угол"
|
||||||
horizontal: "Сбоку"
|
horizontal: "Сбоку"
|
||||||
youFollowing: "Подписки"
|
youFollowing: "Подписки"
|
||||||
options: "Настройки ролей"
|
options: "Настройки ролей"
|
||||||
|
@@ -389,10 +389,13 @@ help: "Hjälp"
|
|||||||
close: "Stäng"
|
close: "Stäng"
|
||||||
invites: "Inbjudan"
|
invites: "Inbjudan"
|
||||||
members: "Medlemmar"
|
members: "Medlemmar"
|
||||||
|
transfer: "Överför"
|
||||||
text: "Text"
|
text: "Text"
|
||||||
enable: "Aktivera"
|
enable: "Aktivera"
|
||||||
next: "Nästa"
|
next: "Nästa"
|
||||||
invitations: "Inbjudan"
|
invitations: "Inbjudan"
|
||||||
|
invitationCode: "Inbjudningskod"
|
||||||
|
available: "Tillgängligt"
|
||||||
weakPassword: "Svagt Lösenord"
|
weakPassword: "Svagt Lösenord"
|
||||||
normalPassword: "Medel Lösenord"
|
normalPassword: "Medel Lösenord"
|
||||||
strongPassword: "Starkt Lösenord"
|
strongPassword: "Starkt Lösenord"
|
||||||
|
@@ -98,7 +98,7 @@ enterListName: "ใส่ชื่อสำหรับรายการลิ
|
|||||||
privacy: "ความเป็นส่วนตัว"
|
privacy: "ความเป็นส่วนตัว"
|
||||||
makeFollowManuallyApprove: "ติดตามคำขอที่ต้องได้รับการอนุมัติ"
|
makeFollowManuallyApprove: "ติดตามคำขอที่ต้องได้รับการอนุมัติ"
|
||||||
defaultNoteVisibility: "การมองเห็นที่เป็นค่าเริ่มต้น"
|
defaultNoteVisibility: "การมองเห็นที่เป็นค่าเริ่มต้น"
|
||||||
follow: "กำลังติดตาม"
|
follow: "ติดตาม"
|
||||||
followRequest: "ส่งคำขอติดตาม"
|
followRequest: "ส่งคำขอติดตาม"
|
||||||
followRequests: "ส่งคำขอติดตาม"
|
followRequests: "ส่งคำขอติดตาม"
|
||||||
unfollow: "เลิกติดตาม"
|
unfollow: "เลิกติดตาม"
|
||||||
@@ -183,7 +183,7 @@ selectUser: "เลือกผู้ใช้งาน"
|
|||||||
recipient: "ผู้รับ"
|
recipient: "ผู้รับ"
|
||||||
annotation: "ความคิดเห็น"
|
annotation: "ความคิดเห็น"
|
||||||
federation: "เฟดิเวิร์ส"
|
federation: "เฟดิเวิร์ส"
|
||||||
instances: "ตัวอย่าง"
|
instances: "Server"
|
||||||
registeredAt: "จดทะเบียนที่"
|
registeredAt: "จดทะเบียนที่"
|
||||||
latestRequestReceivedAt: "ได้รับคำขอล่าสุดไปแล้ว"
|
latestRequestReceivedAt: "ได้รับคำขอล่าสุดไปแล้ว"
|
||||||
latestStatus: "สถานะล่าสุด"
|
latestStatus: "สถานะล่าสุด"
|
||||||
@@ -1091,6 +1091,9 @@ usedAt: "ใช้แล้วที่"
|
|||||||
unused: "ไม่ใช้แล้ว"
|
unused: "ไม่ใช้แล้ว"
|
||||||
used: "ใช้แล้ว"
|
used: "ใช้แล้ว"
|
||||||
expired: "หมดอายุแล้ว"
|
expired: "หมดอายุแล้ว"
|
||||||
|
doYouAgree: "ยอมรับมั้ย?"
|
||||||
|
beSureToReadThisAsItIsImportant: "กรุณาอ่านข้อมูลที่สำคัญอันนี้"
|
||||||
|
iHaveReadXCarefullyAndAgree: "ฉันได้อ่านข้อความ \"{x}\" และยินยอม"
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "คุณได้สร้างบัญชีของคุณสำเร็จเรียบร้อยแล้ว!"
|
accountCreated: "คุณได้สร้างบัญชีของคุณสำเร็จเรียบร้อยแล้ว!"
|
||||||
letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ของคุณกันเถอะ"
|
letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ของคุณกันเถอะ"
|
||||||
|
634
locales/uz-UZ.yml
Normal file
634
locales/uz-UZ.yml
Normal file
@@ -0,0 +1,634 @@
|
|||||||
|
---
|
||||||
|
_lang_: "O'zbek tili "
|
||||||
|
headlineMisskey: "Qaydlar bilan bog'langan tarmoq"
|
||||||
|
introMisskey: "Xush kelibsiz! Misskey ochiq kodli, markazlashmagan mikroblogging xizmati.\nO'zingizni fikrlaringizni atrofingizdagilar bilan ulashish uchun \"Qaydlar\" yarating. 📡\nUstiga-ustak, \"Reaktsiyalar\" yordamida siz boshqalarning xatlari haqidagi o'zingizni xissiyotlaringizni tez ravishda bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀"
|
||||||
|
poweredByMisskeyDescription: "{name} ochiq manbali <b>Misskey</b>(\"Misskey instance\" deb ataladi) platformasi tomonidan qurilgan servislardan biri. "
|
||||||
|
monthAndDay: "{day}/{month}"
|
||||||
|
search: "Izlash"
|
||||||
|
notifications: "Xabarnomalar"
|
||||||
|
username: "Foydalanuvchi nomi"
|
||||||
|
password: "Parol"
|
||||||
|
forgotPassword: "Parolni unutib qo'ydim"
|
||||||
|
fetchingAsApObject: "Fediversedan olib kelinmoqda..."
|
||||||
|
ok: "Ho'p"
|
||||||
|
gotIt: "Tushunarli!"
|
||||||
|
cancel: "Bekor qilish"
|
||||||
|
noThankYou: "Hozir emas"
|
||||||
|
enterUsername: "Foydalanuvchini nomini kiriting"
|
||||||
|
renotedBy: "{user} tomonidan qayta qayd etildi"
|
||||||
|
noNotes: "Qaydlar mavjud emas"
|
||||||
|
noNotifications: "Xabarnomalar mavjud emas"
|
||||||
|
instance: "Server"
|
||||||
|
settings: "Sozalamalar"
|
||||||
|
notificationSettings: "Xabarnomalar sozlamalari"
|
||||||
|
basicSettings: "Asosiy sozlamalar"
|
||||||
|
otherSettings: "Qo‘shimcha sozlamalar"
|
||||||
|
openInWindow: "Yangi oynada ochish"
|
||||||
|
profile: "Profil"
|
||||||
|
timeline: "Xronologiya"
|
||||||
|
noAccountDescription: "Ushbu foydalanuvchi hali o'zi haqida ma'lumot yozmagan."
|
||||||
|
login: "Kirish"
|
||||||
|
loggingIn: "Kirilmoqda"
|
||||||
|
logout: "Chiqish"
|
||||||
|
signup: "Ro'yxatdan o'tish"
|
||||||
|
uploading: "Yuklanmoqda..."
|
||||||
|
save: "Saqlash"
|
||||||
|
users: "Foydalanuvchilar"
|
||||||
|
addUser: "Foydalanuvchi qo'shish"
|
||||||
|
favorite: "Sevimli"
|
||||||
|
favorites: "Sevimli"
|
||||||
|
unfavorite: "Sevimlidan chiqarish"
|
||||||
|
favorited: "sevimli"
|
||||||
|
alreadyFavorited: "allaqachon sevimlilar orasida"
|
||||||
|
cantFavorite: "sevimlilarga qo'shib bo'lmadi"
|
||||||
|
pin: "Profilga qadab qo'yish"
|
||||||
|
unpin: "Profildan olib tashlash"
|
||||||
|
copyContent: "Tarkibini nusxalash"
|
||||||
|
copyLink: "Havolani nuxalash"
|
||||||
|
delete: "O'chirib tashlash"
|
||||||
|
deleteAndEdit: "O'chirish va tahrirlash"
|
||||||
|
deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar, qayta qaydlar va javoblarni yo'qotasiz."
|
||||||
|
addToList: "Ro‘yxatga qo‘shish"
|
||||||
|
addToAntenna: "Antennaga qo'shish"
|
||||||
|
sendMessage: "Xabar yuborish"
|
||||||
|
copyRSS: "RSS'ni nusxalash"
|
||||||
|
copyUsername: "Foydalanuvchi nomini nusxalash"
|
||||||
|
copyUserId: "Foydalanuvchi IDsini nusxalash"
|
||||||
|
copyNoteId: "Qayd IDsini ko'chirish"
|
||||||
|
copyFileId: "Fayl ID raqamini nusxalash"
|
||||||
|
copyFolderId: "Jild ID raqamini nusxalash"
|
||||||
|
copyProfileUrl: "Profil manzilini nusxalash"
|
||||||
|
searchUser: "Foydalanuvchini izlash"
|
||||||
|
reply: "Javob berish"
|
||||||
|
loadMore: "Ko‘proq ko‘rish"
|
||||||
|
showMore: "Ko‘proq ko‘rish"
|
||||||
|
showLess: "Yopish"
|
||||||
|
youGotNewFollower: "sizga obuna bo'ldi"
|
||||||
|
receiveFollowRequest: "Obuna bo'lishga ruxsat qabul qilindi"
|
||||||
|
followRequestAccepted: "Obuna bo'lishga ruxsat berildi"
|
||||||
|
mention: "Murojat"
|
||||||
|
mentions: "Eslatib o'tish"
|
||||||
|
directNotes: "Bevosita qaydlar"
|
||||||
|
importAndExport: "Import/eksport"
|
||||||
|
import: "Import"
|
||||||
|
export: "Eksport"
|
||||||
|
files: "Fayllar"
|
||||||
|
download: "Yuklab olish"
|
||||||
|
driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Buni ishlatadihan kontentni hammasidan o'chadi"
|
||||||
|
unfollowConfirm: "{name}ga obunani bekor qilmoqchimisiz?"
|
||||||
|
exportRequested: "Eksport so'raldi. Bu ozgina vaqt olishi mumkin. Tugatilgandan so'ng sizning Diskingizga qo'shiladi"
|
||||||
|
importRequested: "Import so'raldi. Bu ozgina vaqt olishi mumkin."
|
||||||
|
lists: "Ro'yxatlar"
|
||||||
|
noLists: "Hech qanday ro'yxatlar mavjud emas"
|
||||||
|
note: "Qayd"
|
||||||
|
notes: "Qaydlar"
|
||||||
|
following: "Obuna bo‘lish"
|
||||||
|
followers: "Obunachilar"
|
||||||
|
followsYou: "Sizning obunachingiz."
|
||||||
|
createList: "Ro'yxat yaratish"
|
||||||
|
manageLists: "Ro'yxatlarni boshqarish."
|
||||||
|
error: "Xato"
|
||||||
|
somethingHappened: "Xatolik yuz berdi"
|
||||||
|
retry: "Qayta urinib ko'rish"
|
||||||
|
pageLoadError: "Sahifani yuklayotganda xatolik yuz berdi"
|
||||||
|
pageLoadErrorDescription: "Buni odatda tarmoq muammolari yoki browser keshi keltirib chiqaradi. Keshni tozalab, keyinroq urinib ko'ring"
|
||||||
|
serverIsDead: "Server javob bermayabdi. Iltimos kuting va keyinroq urinib ko'ring"
|
||||||
|
youShouldUpgradeClient: "Iltimos, ushbu sahifani ko'rish uchun sahifani yangilang."
|
||||||
|
enterListName: "Ro'yxatga nom kiriting"
|
||||||
|
privacy: "Maxfiylik"
|
||||||
|
makeFollowManuallyApprove: "Yopiq akkaunt"
|
||||||
|
follow: "Obuna bo‘lish"
|
||||||
|
followRequest: "Obuna bo'lish uchun ruxsat olish"
|
||||||
|
followRequests: "Obuna bo'lmoqchilar"
|
||||||
|
unfollow: "obunani bker qilish"
|
||||||
|
followRequestPending: "obuna bo'lishga ruxsat kutilmoqda"
|
||||||
|
enterEmoji: "Emojini kiriting"
|
||||||
|
renote: "Qayta qaydetish"
|
||||||
|
unrenote: "Qayta qayd etishni bekor qilish"
|
||||||
|
renoted: "Qayta qaydetildi"
|
||||||
|
cantRenote: "Qyta qayd etish mumkin emas"
|
||||||
|
quote: "Iqtibos keltirish"
|
||||||
|
inChannelRenote: "Faqat kanalga qayta qayd etish"
|
||||||
|
inChannelQuote: "Kanaldagi eslatmalar"
|
||||||
|
pinnedNote: "Qadanlgan qayd"
|
||||||
|
pinned: "Profilga qadab qo'yish"
|
||||||
|
you: "Siz"
|
||||||
|
clickToShow: "Ko'rsatish uchun bosing"
|
||||||
|
sensitive: "Sezuvchan"
|
||||||
|
add: "Qo'shish"
|
||||||
|
reaction: "Reaktsiyalar"
|
||||||
|
reactions: "Reaktsiyalar"
|
||||||
|
reactionSetting: "Reaksiyalar ro'yxatingiz "
|
||||||
|
rememberNoteVisibility: "Qaydning ko'rinish sozlamarini eslab qolish"
|
||||||
|
attachCancel: "Qo'shimchani olib tashlash"
|
||||||
|
enterFileName: "Fayl nomini kiriting"
|
||||||
|
mute: "Ovozni o‘chirish"
|
||||||
|
unmute: "Ovozni yoqish"
|
||||||
|
renoteMute: "Qayta qaydlarni ovozini o'chirish"
|
||||||
|
renoteUnmute: "Qayta qaydlarni ovozini yoqish"
|
||||||
|
block: "Bloklash"
|
||||||
|
unblock: "Blokdan chiqarish"
|
||||||
|
suspend: "To'xtatish"
|
||||||
|
unsuspend: "Blokdan chiqarish"
|
||||||
|
blockConfirm: "Haqiqatdan ham quyidagi hisobni bloklashni xohlaysizmi? "
|
||||||
|
unblockConfirm: "Haqiqatdan ham quyidagi hisobni blokdan chiqarishni xohlaysizmi? "
|
||||||
|
suspendConfirm: "Bu hisobni to‘xtatib qo‘ymoqchi ekanligingizga ishonchingiz komilmi?"
|
||||||
|
unsuspendConfirm: "Tasdiqlashni to'xtatib turish"
|
||||||
|
selectList: "Ro'yxat tanlash"
|
||||||
|
editList: "Roʻyxatni tahrirlash"
|
||||||
|
selectChannel: "Kanalni tanlang"
|
||||||
|
selectAntenna: "Antennani tanlang"
|
||||||
|
editAntenna: "Antennani tahrirlang"
|
||||||
|
selectWidget: "Vidjet tanlash"
|
||||||
|
editWidgets: "Vidjetni tahrirlash"
|
||||||
|
editWidgetsExit: "Tugadi"
|
||||||
|
customEmojis: "Maxsus emoji"
|
||||||
|
emoji: "Emoji"
|
||||||
|
emojis: "Emoji"
|
||||||
|
emojiName: "Emoji nomi"
|
||||||
|
emojiUrl: "Emoji URL'i"
|
||||||
|
addEmoji: "Emoji qo'shish"
|
||||||
|
settingGuide: "Tavsiya qilingan sozlamalar"
|
||||||
|
cacheRemoteFiles: "Tashqi fayllarni keshlash"
|
||||||
|
cacheRemoteFilesDescription: "Ushbu sozlama o'chirilgan bo'lsa tashqi fayllar bevosita tashqi serverdan yuklanadi. Buni o'chirish ombor ishlatilishini kamaytiradi, lekin traffikni ko'paytiradi, chunki eskizlar generatsiya qilinmaydi."
|
||||||
|
cacheRemoteSensitiveFiles: "Tashqi fayllarni keshlash"
|
||||||
|
flagAsBot: "Ushbu akkauntni bot sifatida belgilash"
|
||||||
|
flagAsBotDescription: "Agar bu akkaunt bot tomonidan boshqaralayotgan bo'ls, bu sozlamani yoqing. Sozlama yoqilganda, boshqa foydalanuvchilar uchun belgi sifatida ishlaydi, va Misskey ichki tizimlari bu akkauntni bot ekanini biladi."
|
||||||
|
flagAsCat: "Bu akkauntni mushuk sifatida belgilash"
|
||||||
|
flagAsCatDescription: "Ushbu akkauntni mushuk sifatida belgilash uchun ushbu sozlamani yoqing."
|
||||||
|
flagShowTimelineReplies: "Javbolarni xronogoliya bo'yicha ko'rsatish"
|
||||||
|
addAccount: "Akkaunt qo'shish"
|
||||||
|
reloadAccountsList: "Hisoblar ro'yxatini yangilash"
|
||||||
|
loginFailed: "Tizimga kirishda xatolik yuz berdi"
|
||||||
|
showOnRemote: "Masofaviy boshqaruvni ko'rish"
|
||||||
|
general: "Asosiy"
|
||||||
|
wallpaper: "Fon rasmi"
|
||||||
|
setWallpaper: "Fon rasmini o'rnatish"
|
||||||
|
removeWallpaper: "Fon rasmini olib tashlash"
|
||||||
|
searchWith: "Izlash: {q}"
|
||||||
|
youHaveNoLists: "Sizda hech qanday ro'yxatlar mavjud emas"
|
||||||
|
followConfirm: "{name} ga obuna bo'lmoqchimisiz?"
|
||||||
|
proxyAccount: "Proksi hisob"
|
||||||
|
host: "Host"
|
||||||
|
selectUser: "Foydalanuvchini tanlang"
|
||||||
|
recipient: "Qabul qiluvchi"
|
||||||
|
annotation: "Izohlar"
|
||||||
|
federation: "Federatsiya"
|
||||||
|
instances: "Serverlar"
|
||||||
|
registeredAt: "Ro'yhatdan o'tgan"
|
||||||
|
latestStatus: "So'nggi holat"
|
||||||
|
storageUsage: "Ishlatilgan xotira"
|
||||||
|
charts: "Diagrammalar"
|
||||||
|
perHour: "Soatbay"
|
||||||
|
perDay: "Kunbay"
|
||||||
|
stopActivityDelivery: "Faollikni jo'natishi to'xtatish"
|
||||||
|
blockThisInstance: "Ko;rsatilgan serverni bloklash"
|
||||||
|
operations: "Amallar"
|
||||||
|
software: "Dastur"
|
||||||
|
version: "Versiya"
|
||||||
|
metadata: "Meta ma'lumot"
|
||||||
|
withNFiles: "{n} ta fayl(lar)"
|
||||||
|
monitor: "Kuzatish"
|
||||||
|
jobQueue: "Vazifalar navbati"
|
||||||
|
cpuAndMemory: "CPU va Xotira"
|
||||||
|
network: "Tarmoq"
|
||||||
|
disk: "Disk"
|
||||||
|
instanceInfo: "Instans haqida ma'lumot"
|
||||||
|
statistics: "Statistika"
|
||||||
|
clearQueue: "Navbatni tozalash"
|
||||||
|
clearQueueConfirmTitle: "Navbatni tozalamoqchimisiz?"
|
||||||
|
clearCachedFiles: "Keshni tozalash"
|
||||||
|
blockedInstances: "Bloklangan serverlar"
|
||||||
|
muteAndBlock: "Ovozsiz va Bloklangan"
|
||||||
|
mutedUsers: "Ovozsiz foydalanuvchilar"
|
||||||
|
blockedUsers: "Bloklangan foydalanuvchilar"
|
||||||
|
noUsers: "Foydalanuvchilar yo‘q"
|
||||||
|
editProfile: "Profilni o'zgartirish"
|
||||||
|
noteDeleteConfirm: "Haqiqatan ham bu qaydni oʻchirib tashlamoqchimisiz?"
|
||||||
|
pinLimitExceeded: "Siz boshqa qaydlarni mahkamlay olmaysiz"
|
||||||
|
intro: "Misskeyni o'rnatish tugallandi! Iltimos, administrator foydalanuvchi yarating."
|
||||||
|
done: "Bajarildi"
|
||||||
|
processing: "Amaliyotda"
|
||||||
|
preview: "Ko'rish"
|
||||||
|
default: "Odatiy"
|
||||||
|
defaultValueIs: "Sukut bo'yicha: {value}"
|
||||||
|
noCustomEmojis: "Emojilar mavjud emas"
|
||||||
|
noJobs: "Vazifalar yo'q"
|
||||||
|
blocked: "Bloklangan"
|
||||||
|
suspended: "To'xtatilgan"
|
||||||
|
all: "Barcha"
|
||||||
|
subscribing: "Obuna bo'lish"
|
||||||
|
publishing: "Yuborilmoqda"
|
||||||
|
notResponding: "Javob bermayapti"
|
||||||
|
changePassword: "Parolni o‘zgartirish"
|
||||||
|
security: "Xavfsizlik"
|
||||||
|
retypedNotMatch: "Maydonlar mos kelmayapti"
|
||||||
|
currentPassword: "Joriy parol"
|
||||||
|
newPassword: "Yangi parol"
|
||||||
|
newPasswordRetype: "Yangi parolni boshqatdan tering"
|
||||||
|
attachFile: "Fayl biriktirish"
|
||||||
|
more: "Ko'proq!"
|
||||||
|
noSuchUser: "Foydalanuvchi topilmadi"
|
||||||
|
lookup: "So'rov"
|
||||||
|
announcements: "Bildirishnomalar"
|
||||||
|
imageUrl: "Rasm URL"
|
||||||
|
remove: "O'chirib tashlash"
|
||||||
|
removed: "Muvaffaqiyatli o'chirildi"
|
||||||
|
removeAreYouSure: "“{x}”ni olib tashlamoqchi ekanligingizga ishonchingiz komilmi?"
|
||||||
|
deleteAreYouSure: "“{x}”ni chindan ham yo'q qilmoqchimisiz?"
|
||||||
|
resetAreYouSure: "Haqiqatan ham qayta tiklansinmi?"
|
||||||
|
saved: "Saqlandi"
|
||||||
|
messaging: "Suhbat"
|
||||||
|
upload: "Yuklash"
|
||||||
|
keepOriginalUploading: "Asl rasmni saqlang"
|
||||||
|
uploadFromUrlDescription: "Yuklamoqchi bo'lgan faylingizga havola"
|
||||||
|
explore: "Ko'rib chiqish"
|
||||||
|
messageRead: "O‘qildi"
|
||||||
|
startMessaging: "Yangi suhbatni boshlash"
|
||||||
|
nUsersRead: "{n} tomonidan o'qildi"
|
||||||
|
agreeTo: "Men {0} ga roziman"
|
||||||
|
agree: "Rozi bo'lish"
|
||||||
|
agreeBelow: "Men quyidagilarga roziman"
|
||||||
|
basicNotesBeforeCreateAccount: "Muhim qaydlar"
|
||||||
|
termsOfService: "Foydalanish shartlari"
|
||||||
|
start: "Boshlash"
|
||||||
|
home: "Bosh sahifa"
|
||||||
|
activity: "Faollik"
|
||||||
|
images: "Rasmlar"
|
||||||
|
image: "Rasm"
|
||||||
|
birthday: "Tug'ilgan kun"
|
||||||
|
yearsOld: "{age} yashar"
|
||||||
|
registeredDate: "Ro'yxatdan o'tgan sanasi"
|
||||||
|
location: "Manzil"
|
||||||
|
theme: "Rang sxemasi"
|
||||||
|
themeForLightMode: "Yorug' rejim uchun rang sxemasi"
|
||||||
|
themeForDarkMode: "Qorong'i rejim uchun rang sxemasi"
|
||||||
|
light: "Yorug'"
|
||||||
|
dark: "Qorongʻi"
|
||||||
|
lightThemes: "Yorug‘ rang sxemasi"
|
||||||
|
darkThemes: "Qorong'i rang sxemasi"
|
||||||
|
drive: "Disk"
|
||||||
|
fileName: "Fayl nomi"
|
||||||
|
selectFile: "Faylni tanlang"
|
||||||
|
selectFiles: "Fayllarni tanlang"
|
||||||
|
selectFolder: "Jildni tanlang"
|
||||||
|
selectFolders: "Jildlarni tanlang"
|
||||||
|
renameFile: "Faylni nomini tahrirlash"
|
||||||
|
folderName: "Jild nomi"
|
||||||
|
createFolder: "Papka qo'shish"
|
||||||
|
renameFolder: "Papka nomini o‘zgartirish"
|
||||||
|
deleteFolder: "Papkani o‘chirish"
|
||||||
|
addFile: "Fayl qo‘shish"
|
||||||
|
emptyDrive: "Diskingiz bo'sh"
|
||||||
|
emptyFolder: "Ushbu papka bo'sh"
|
||||||
|
unableToDelete: "O'chirilmadi"
|
||||||
|
inputNewFileName: "Yangi fayl nomini kiriting"
|
||||||
|
inputNewFolderName: "Yangi papka nomini kiriting"
|
||||||
|
copyUrl: "Bog'lamadan nusxa olish"
|
||||||
|
rename: "Qayta nomlash"
|
||||||
|
avatar: "Avatar"
|
||||||
|
banner: "Banner"
|
||||||
|
disconnectedFromServer: "Server bilan ulanish uzulib qoldi"
|
||||||
|
reload: "Yangilash"
|
||||||
|
doNothing: "E'tiborsiz qoldirish"
|
||||||
|
reloadConfirm: "Timeline'ni yangilashni xohlaysizmi?"
|
||||||
|
watch: "Kuzatmoq"
|
||||||
|
unwatch: "Kuzatishni to'xtatish"
|
||||||
|
accept: "Ruxsat"
|
||||||
|
reject: "Rad etish"
|
||||||
|
normal: "Yaxshi"
|
||||||
|
instanceName: "Server nomi"
|
||||||
|
instanceDescription: "Server tavsifi"
|
||||||
|
maintainerName: "Qo'llab-quvvatlovchi"
|
||||||
|
maintainerEmail: "Administratorning elektron pochtasi"
|
||||||
|
tosUrl: "Foydalanish shartlariga havola"
|
||||||
|
thisYear: "Joriy yil"
|
||||||
|
thisMonth: "Shu oy"
|
||||||
|
today: "Bugun"
|
||||||
|
dayX: "{day}"
|
||||||
|
monthX: "{month}"
|
||||||
|
yearX: "{year}"
|
||||||
|
pages: "Sahifalar"
|
||||||
|
integration: "Integratsiya"
|
||||||
|
connectService: "Ulash"
|
||||||
|
disconnectService: "Uzish"
|
||||||
|
enableLocalTimeline: "Mahalliy vaqt mintaqasini yoqing"
|
||||||
|
enableGlobalTimeline: "Global vaqt mintaqasini yoqing"
|
||||||
|
registration: "Ro'yxatdan o'tish"
|
||||||
|
enableRegistration: "Ro'yxatdan o'tishni yoqing"
|
||||||
|
invite: "Taklif qilish"
|
||||||
|
inMb: "Megabaytlarda"
|
||||||
|
basicInfo: "Asosiy ma'lumot"
|
||||||
|
pinnedUsers: "Qadalgan foydalanuvchilar"
|
||||||
|
pinnedPages: "Qadalgan Sahifalar"
|
||||||
|
pinnedNotes: "Qadanlgan qayd"
|
||||||
|
hcaptcha: "hCaptcha"
|
||||||
|
enableHcaptcha: "hCaptchani yoqish"
|
||||||
|
hcaptchaSiteKey: "Sayt kaliti"
|
||||||
|
hcaptchaSecretKey: "Mahfiy kalit"
|
||||||
|
recaptcha: "reCAPTCHA"
|
||||||
|
enableRecaptcha: "reCAPTCHA ni yoqish"
|
||||||
|
recaptchaSiteKey: "Sayt kaliti"
|
||||||
|
recaptchaSecretKey: "Maxfiy kalit"
|
||||||
|
turnstileSiteKey: "Sayt kaliti"
|
||||||
|
turnstileSecretKey: "Maxfiy kalit"
|
||||||
|
antennas: "Antennalar"
|
||||||
|
manageAntennas: "Antennalarni boshqarish"
|
||||||
|
name: "Ism"
|
||||||
|
antennaSource: "Antenna manbai"
|
||||||
|
silence: "Sukunat"
|
||||||
|
exploreUsersCount: "{count} ta foydalanuvchi bor"
|
||||||
|
popularTags: "Ommabop teglar"
|
||||||
|
userList: "Ro'yxatlar"
|
||||||
|
about: "Haqida"
|
||||||
|
aboutMisskey: "Misskey haqida"
|
||||||
|
administrator: "Administrator"
|
||||||
|
token: "Tasdiqlash"
|
||||||
|
2fa: "Ikki faktorli autentifikatsiya"
|
||||||
|
totp: "Autentifikatsiya ilovasi"
|
||||||
|
totpDescription: "Bir martalik parollarni kiritish uchun autentifikatsiya ilovasidan foydalaning"
|
||||||
|
moderator: "Moderator"
|
||||||
|
resetPassword: "Parolni tiklash"
|
||||||
|
share: "Yuborish"
|
||||||
|
notFound: "Topilmadi"
|
||||||
|
uploadFolder: "Jildni yuklash"
|
||||||
|
cacheClear: "Keshni tozalash"
|
||||||
|
help: "Yordam"
|
||||||
|
inputMessageHere: "Xabar kiriting"
|
||||||
|
close: "Yopish"
|
||||||
|
invites: "Taklif qilish"
|
||||||
|
members: "A'zolar"
|
||||||
|
title: "Sarlavha"
|
||||||
|
text: "Matn"
|
||||||
|
enable: "Yoqish"
|
||||||
|
invitations: "Taklif qilish"
|
||||||
|
dashboard: "Boshqaruv paneli"
|
||||||
|
local: "Mahalliy"
|
||||||
|
total: "Jami"
|
||||||
|
weekOverWeekChanges: "Oxirgi haftadagi o'zgarishlar"
|
||||||
|
dayOverDayChanges: "Kecha bo'lgan o'zgarishlar"
|
||||||
|
appearance: "Tasgqi ko'rinish"
|
||||||
|
clientSettings: "Klient sozlamalari"
|
||||||
|
accountSettings: "Profil sozlamalari"
|
||||||
|
sounds: "Tovushlar"
|
||||||
|
sound: "ovoz"
|
||||||
|
none: "Hechnima"
|
||||||
|
volume: "Ovoz balandligi"
|
||||||
|
details: "Batafsil"
|
||||||
|
output: "Chiqish"
|
||||||
|
menu: "Menyu"
|
||||||
|
divider: "Ajratrmoq"
|
||||||
|
addItem: "Element qo'shish"
|
||||||
|
themeEditor: "Rang sxemasi muharriri"
|
||||||
|
enableAll: "Yoqish"
|
||||||
|
edit: "Tahrirlash"
|
||||||
|
email: "Email"
|
||||||
|
smtpHost: "Host"
|
||||||
|
smtpUser: "Foydalanuvchi nomi"
|
||||||
|
smtpPass: "Parol"
|
||||||
|
copy: "Nusxa olish"
|
||||||
|
notificationSetting: "Bildirishnoma sozlamalari"
|
||||||
|
other: "Qo‘shimcha"
|
||||||
|
behavior: "Hatti-harakatlar"
|
||||||
|
sample: "Namuna"
|
||||||
|
public: "Ommaviy"
|
||||||
|
clearCache: "Keshni tozalash"
|
||||||
|
onlineUsersCount: "Faol userlar"
|
||||||
|
myTheme: "Mening rang sxemam"
|
||||||
|
backgroundColor: "Fon"
|
||||||
|
accentColor: "Urg'u"
|
||||||
|
textColor: "Matn"
|
||||||
|
info: "Haqida"
|
||||||
|
user: "Foydalanuvchilar"
|
||||||
|
global: "Global"
|
||||||
|
squareAvatars: "Kvadrat avatarkalar"
|
||||||
|
searchByGoogle: "Izlash"
|
||||||
|
indefinitely: "Hech qachon"
|
||||||
|
file: "Fayllar"
|
||||||
|
label: "Yorliq"
|
||||||
|
color: "Rang"
|
||||||
|
_achievements:
|
||||||
|
_types:
|
||||||
|
_viewInstanceChart:
|
||||||
|
title: "Tahlilchi"
|
||||||
|
_ad:
|
||||||
|
hide: "Boshqa ko'rsatilmasin"
|
||||||
|
_email:
|
||||||
|
_follow:
|
||||||
|
title: "sizga obuna bo'ldi"
|
||||||
|
_registry:
|
||||||
|
key: "Kalit"
|
||||||
|
keys: "Kalit"
|
||||||
|
_instanceTicker:
|
||||||
|
none: "Boshqa ko'rsatilmasin"
|
||||||
|
always: "Doimo ko'rsatilsin"
|
||||||
|
_theme:
|
||||||
|
install: "Rang sxemasini o'rnatish"
|
||||||
|
manage: "Rang sxemalarini boshqarish"
|
||||||
|
code: "Rang sxemasining kodi"
|
||||||
|
description: "Tavsif"
|
||||||
|
installed: "{name} o'rnatildi"
|
||||||
|
installedThemes: "O'rnatilgan rang sxemalari"
|
||||||
|
alreadyInstalled: "Ushbu rang sxemasi allaqachon o'rnatilgan"
|
||||||
|
invalid: "Ushbu rang sxemasining formati yaroqsiz"
|
||||||
|
make: "Rang sxemasini yasash"
|
||||||
|
base: "Asos"
|
||||||
|
addConstant: "O'zgarmas qo'shish"
|
||||||
|
constant: "O'zgarmas"
|
||||||
|
color: "Rang"
|
||||||
|
key: "Kalit"
|
||||||
|
func: "Funksiyalar"
|
||||||
|
funcKind: "Funksiya turi"
|
||||||
|
argument: "Argument"
|
||||||
|
darken: "Qoraytirish"
|
||||||
|
lighten: "Yoritish"
|
||||||
|
inputConstantName: "Ushbu o'zgarmas uchun nom kiriting"
|
||||||
|
deleteConstantConfirm: "Siz rostdan ham {const} o'zgarmasni o'chirmoqchimisiz?"
|
||||||
|
keys:
|
||||||
|
accent: "Urg'u"
|
||||||
|
bg: "Fon"
|
||||||
|
fg: "Matn"
|
||||||
|
focus: "Fokus"
|
||||||
|
panel: "Panel"
|
||||||
|
shadow: "Soya"
|
||||||
|
header: "Sarlavha"
|
||||||
|
navBg: "Yon panel foni"
|
||||||
|
navFg: "Yon panel matni"
|
||||||
|
mention: "Murojat"
|
||||||
|
renote: "Qayta qaydetish"
|
||||||
|
divider: "Ajratrmoq"
|
||||||
|
accentDarken: "Urg'u (Qoraytirilgan)"
|
||||||
|
accentLighten: "Urg'u (Yoritilgan)"
|
||||||
|
fgHighlighted: "Belgilangan matn"
|
||||||
|
_sfx:
|
||||||
|
note: "Qaydlar"
|
||||||
|
notification: "Xabarnomalar"
|
||||||
|
chat: "Suhbat"
|
||||||
|
_2fa:
|
||||||
|
renewTOTPCancel: "Hozir emas"
|
||||||
|
_permissions:
|
||||||
|
"read:blocks": "Bloklangan foydalanuvchilar roʻyxatini koʻring"
|
||||||
|
"write:blocks": "Bloklangan foydalanuvchilar roʻyxatini tahrirlang"
|
||||||
|
_weekday:
|
||||||
|
saturday: "Shanba"
|
||||||
|
_widgets:
|
||||||
|
profile: "Profil"
|
||||||
|
instanceInfo: "Instans haqida ma'lumot"
|
||||||
|
notifications: "Xabarnomalar"
|
||||||
|
timeline: "Xronologiya"
|
||||||
|
clock: "Soat"
|
||||||
|
activity: "Faollik"
|
||||||
|
photos: "Rasmlar"
|
||||||
|
digitalClock: "Raqamli soat"
|
||||||
|
unixClock: "UNIX soat"
|
||||||
|
federation: "Federatsiya"
|
||||||
|
button: "Tugma"
|
||||||
|
jobQueue: "Vazifalar navbati"
|
||||||
|
_userList:
|
||||||
|
chooseList: "Ro'yxat tanlash"
|
||||||
|
_cw:
|
||||||
|
show: "Ko‘proq ko‘rish"
|
||||||
|
chars: "{count} ta belgi(lar)"
|
||||||
|
files: "{count} ta fayl(lar)"
|
||||||
|
_poll:
|
||||||
|
noOnlyOneChoice: "Kamida ikkita tanvol kerak"
|
||||||
|
infinite: "Hech qachon"
|
||||||
|
at: "...da tugatish"
|
||||||
|
after: "...dan keyin tugatish"
|
||||||
|
deadlineTime: "Vaqt"
|
||||||
|
duration: "Davomiylik"
|
||||||
|
votesCount: "{n} ovozlar"
|
||||||
|
totalVotes: "Umuman {n} ovozlar"
|
||||||
|
vote: "Ovoz berish"
|
||||||
|
showResult: "Natijalarni ko'rish"
|
||||||
|
voted: "Ovoz berildi"
|
||||||
|
closed: "Yakunladi"
|
||||||
|
remainingDays: "{d} kun {h} soat qoldi"
|
||||||
|
remainingHours: "{h} soat {m} daqiqa qoldi"
|
||||||
|
remainingMinutes: "{m} daqiqa {s} sekund qoldi"
|
||||||
|
remainingSeconds: "{s} sekund qoldi"
|
||||||
|
_visibility:
|
||||||
|
public: "Ommaviy"
|
||||||
|
publicDescription: "Sizning ovozingiz barcha foydalanuvchilarga ko'rinadi"
|
||||||
|
home: "Bosh sahifa"
|
||||||
|
followers: "Obunachilar"
|
||||||
|
specified: "Bevosita"
|
||||||
|
_profile:
|
||||||
|
name: "Ism"
|
||||||
|
username: "Foydalanuvchi nomi"
|
||||||
|
description: "Biografiya"
|
||||||
|
metadata: "Qo'shimcha ma'lumot"
|
||||||
|
metadataLabel: "Yorliq"
|
||||||
|
metadataContent: "Tarkib"
|
||||||
|
changeBanner: "Bannerni o'zgartirish"
|
||||||
|
_exportOrImport:
|
||||||
|
allNotes: "Barcha qaydlar"
|
||||||
|
followingList: "Obuna bo‘lish"
|
||||||
|
muteList: "Ovozni o‘chirish"
|
||||||
|
blockingList: "Bloklangan foydalanuvchilar"
|
||||||
|
userLists: "Ro'yxatlar"
|
||||||
|
_charts:
|
||||||
|
federation: "Federatsiya"
|
||||||
|
apRequest: "So'rovlar"
|
||||||
|
usersTotal: "Foydalanuvchilarning umumiy soni"
|
||||||
|
activeUsers: "Faol foydalanuvchilar"
|
||||||
|
notesTotal: "Qaydlarning umumiy soni"
|
||||||
|
filesTotal: "Fayllarning umumiy soni"
|
||||||
|
_instanceCharts:
|
||||||
|
requests: "So'rovlar"
|
||||||
|
notes: "Qaydlar sonidagi farq"
|
||||||
|
cacheSize: "Kesh hajmidagi farq"
|
||||||
|
files: "Fayllar sonidagi farq"
|
||||||
|
_timelines:
|
||||||
|
home: "Bosh sahifa"
|
||||||
|
local: "Mahalliy"
|
||||||
|
social: "Ijtimoiy"
|
||||||
|
global: "Global"
|
||||||
|
_play:
|
||||||
|
featured: "Mashhur"
|
||||||
|
title: "Sarlavha"
|
||||||
|
script: "Skript"
|
||||||
|
summary: "Tavsif"
|
||||||
|
_pages:
|
||||||
|
newPage: "Yangi Sahifa yaratish"
|
||||||
|
editPage: "Ushbu Sahifani tahrirlash"
|
||||||
|
created: "Sahifa muvaffaqiyatli yaratildi"
|
||||||
|
updated: "Sahifa muvaffaqiyatli tahrirlandi"
|
||||||
|
deleted: "Sahifa muvaffaqiyatli o'chirildi"
|
||||||
|
pageSetting: "Sahifa sozlamalari"
|
||||||
|
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
|
||||||
|
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
|
||||||
|
editThisPage: "Ushbu Sahifani tahrirlash"
|
||||||
|
viewPage: "Sizning Sahifalaringizni ko'rish"
|
||||||
|
my: "Mening Sahifalarim"
|
||||||
|
featured: "Mashhur"
|
||||||
|
contents: "Tarkib"
|
||||||
|
title: "Sarlavha"
|
||||||
|
url: "Sahifa URL'i"
|
||||||
|
summary: "Sahifa bayoni"
|
||||||
|
font: "Shrift"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
selectType: "Turni tanlang"
|
||||||
|
contentBlocks: "Tarkib"
|
||||||
|
blocks:
|
||||||
|
text: "Matn"
|
||||||
|
textarea: "Matn maydoni"
|
||||||
|
section: "Bo'lim"
|
||||||
|
image: "Rasmlar"
|
||||||
|
button: "Tugma"
|
||||||
|
note: "Biriktirilgan qayd"
|
||||||
|
_note:
|
||||||
|
id: "Qayd ID"
|
||||||
|
detailed: "Batafsil ko'rinishi"
|
||||||
|
_relayStatus:
|
||||||
|
requesting: "Kutilmoqda"
|
||||||
|
accepted: "Tasdiqlandi"
|
||||||
|
rejected: "Rad etildi"
|
||||||
|
_notification:
|
||||||
|
fileUploaded: "Fayl muvaffaqiyatli yuklandi"
|
||||||
|
youGotMention: "{name} sizni eslab o'tdi"
|
||||||
|
youGotReply: "{name} sizga javob berdi"
|
||||||
|
youGotQuote: "{name} sizdan iqtibos keltirdi"
|
||||||
|
youRenoted: "{name} dan qayta qayd qilish"
|
||||||
|
youWereFollowed: "sizga obuna bo'ldi"
|
||||||
|
unreadAntennaNote: "Antenna {name}"
|
||||||
|
_types:
|
||||||
|
all: "Barchasi"
|
||||||
|
follow: "Obuna bo‘lish"
|
||||||
|
mention: "Murojat"
|
||||||
|
renote: "Qayta qaydetish"
|
||||||
|
quote: "Iqtibos keltirish"
|
||||||
|
reaction: "Reaktsiyalar"
|
||||||
|
receiveFollowRequest: "Qabul qilingan kuzatuv so'rovlari"
|
||||||
|
_actions:
|
||||||
|
reply: "Javob berish"
|
||||||
|
renote: "Qayta qayd qilish"
|
||||||
|
_deck:
|
||||||
|
alwaysShowMainColumn: "Har doim asosiy ustunni ko'rsatish"
|
||||||
|
columnAlign: "Ustunlarni tekislash"
|
||||||
|
addColumn: "Ustun qo'shish"
|
||||||
|
configureColumn: "Ustun sozlamalari"
|
||||||
|
swapLeft: "Chapdagi ustun bilan joyni almashtirish"
|
||||||
|
swapRight: "O'ngdagi ustun bilan joyni almashtirish"
|
||||||
|
swapUp: "Yuqoridagi ustun bilan joyni almashtirish"
|
||||||
|
swapDown: "Quyidagi ustun bilan joyni almashtirish"
|
||||||
|
profile: "Profil"
|
||||||
|
newProfile: "Yangi profil"
|
||||||
|
deleteProfile: "Profilni o‘chirib tashlash"
|
||||||
|
_columns:
|
||||||
|
main: "Asosiy"
|
||||||
|
notifications: "Xabarnomalar"
|
||||||
|
tl: "Xronologiya"
|
||||||
|
antenna: "Antennalar"
|
||||||
|
list: "Ro‘yxat"
|
||||||
|
channel: "Kanal"
|
||||||
|
mentions: "Eslatib o'tish"
|
||||||
|
direct: "Bevosita qaydlar"
|
||||||
|
roleTimeline: "Rol xronologiyasi"
|
||||||
|
_webhookSettings:
|
||||||
|
name: "Ism"
|
||||||
|
active: "Yoqilgan"
|
||||||
|
_events:
|
||||||
|
renote: "Qayta qayd qilinganda"
|
||||||
|
mention: "Eslanganda"
|
@@ -1091,6 +1091,9 @@ usedAt: "使用时间"
|
|||||||
unused: "未使用"
|
unused: "未使用"
|
||||||
used: "已使用"
|
used: "已使用"
|
||||||
expired: "已过期"
|
expired: "已过期"
|
||||||
|
doYouAgree: "你同意吗?"
|
||||||
|
beSureToReadThisAsItIsImportant: "请好好阅读,这真的很重要。"
|
||||||
|
iHaveReadXCarefullyAndAgree: "我已经仔细阅读并同意了「{x}」的内容。"
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "账户创建完成了!"
|
accountCreated: "账户创建完成了!"
|
||||||
letsStartAccountSetup: "来进行帐户的初始设置吧。"
|
letsStartAccountSetup: "来进行帐户的初始设置吧。"
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
_lang_: "繁體中文"
|
_lang_: "繁體中文"
|
||||||
headlineMisskey: "貼文連繫網絡"
|
headlineMisskey: "貼文連繫網絡"
|
||||||
introMisskey: "歡迎! Misskey是一個開源且去中心化的社群網絡。\n通過「貼文」分享周邊新鮮事,並告訴其他人您的想法!📡\n透過「情感」功能,對大家的貼文表達情感!👍\n一起來探索這個新的世界吧!🚀"
|
introMisskey: "歡迎!Misskey 是一個開源且去中心化的社群網路服務。\n發佈「貼文」向身邊的人分享您的想法!📡\n利用「反應」表達您對貼文的感覺!👍\n讓我們一起探索新的世界吧!🚀"
|
||||||
poweredByMisskeyDescription: "{name}是使用開放原始碼平台<b>Misskey</b>的服務之一(稱為 Misskey 伺服器)。\n"
|
poweredByMisskeyDescription: "{name}是使用開放原始碼平台<b>Misskey</b>的服務之一(稱為 Misskey 伺服器)。\n"
|
||||||
monthAndDay: "{month}月 {day}日"
|
monthAndDay: "{month}月 {day}日"
|
||||||
search: "搜尋"
|
search: "搜尋"
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "13.14.0-beta.7",
|
"version": "13.14.1",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/misskey-dev/misskey.git"
|
"url": "https://github.com/misskey-dev/misskey.git"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@8.6.0",
|
"packageManager": "pnpm@8.6.9",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/frontend",
|
"packages/frontend",
|
||||||
"packages/backend",
|
"packages/backend",
|
||||||
|
@@ -2,14 +2,7 @@ import Redis from 'ioredis';
|
|||||||
import { loadConfig } from './built/config.js';
|
import { loadConfig } from './built/config.js';
|
||||||
|
|
||||||
const config = loadConfig();
|
const config = loadConfig();
|
||||||
const redis = new Redis({
|
const redis = new Redis(config.redis);
|
||||||
port: config.redis.port,
|
|
||||||
host: config.redis.host,
|
|
||||||
family: config.redis.family == null ? 0 : config.redis.family,
|
|
||||||
password: config.redis.pass,
|
|
||||||
keyPrefix: `${config.redis.prefix}:`,
|
|
||||||
db: config.redis.db ?? 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
redis.on('connect', () => redis.disconnect());
|
redis.on('connect', () => redis.disconnect());
|
||||||
redis.on('error', (e) => {
|
redis.on('error', (e) => {
|
||||||
|
@@ -154,7 +154,6 @@
|
|||||||
"typeorm": "0.3.17",
|
"typeorm": "0.3.17",
|
||||||
"typescript": "5.1.6",
|
"typescript": "5.1.6",
|
||||||
"ulid": "2.3.0",
|
"ulid": "2.3.0",
|
||||||
"unzipper": "0.10.14",
|
|
||||||
"vary": "1.1.2",
|
"vary": "1.1.2",
|
||||||
"web-push": "3.6.3",
|
"web-push": "3.6.3",
|
||||||
"ws": "8.13.0",
|
"ws": "8.13.0",
|
||||||
@@ -194,7 +193,6 @@
|
|||||||
"@types/sinonjs__fake-timers": "8.1.2",
|
"@types/sinonjs__fake-timers": "8.1.2",
|
||||||
"@types/tinycolor2": "1.4.3",
|
"@types/tinycolor2": "1.4.3",
|
||||||
"@types/tmp": "0.2.3",
|
"@types/tmp": "0.2.3",
|
||||||
"@types/unzipper": "0.10.6",
|
|
||||||
"@types/vary": "1.1.0",
|
"@types/vary": "1.1.0",
|
||||||
"@types/web-push": "3.3.2",
|
"@types/web-push": "3.3.2",
|
||||||
"@types/ws": "8.5.5",
|
"@types/ws": "8.5.5",
|
||||||
|
@@ -41,14 +41,7 @@ const $meilisearch: Provider = {
|
|||||||
const $redis: Provider = {
|
const $redis: Provider = {
|
||||||
provide: DI.redis,
|
provide: DI.redis,
|
||||||
useFactory: (config: Config) => {
|
useFactory: (config: Config) => {
|
||||||
return new Redis.Redis({
|
return new Redis.Redis(config.redis);
|
||||||
port: config.redis.port,
|
|
||||||
host: config.redis.host,
|
|
||||||
family: config.redis.family == null ? 0 : config.redis.family,
|
|
||||||
password: config.redis.pass,
|
|
||||||
keyPrefix: `${config.redis.prefix}:`,
|
|
||||||
db: config.redis.db ?? 0,
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
inject: [DI.config],
|
inject: [DI.config],
|
||||||
};
|
};
|
||||||
@@ -56,14 +49,7 @@ const $redis: Provider = {
|
|||||||
const $redisForPub: Provider = {
|
const $redisForPub: Provider = {
|
||||||
provide: DI.redisForPub,
|
provide: DI.redisForPub,
|
||||||
useFactory: (config: Config) => {
|
useFactory: (config: Config) => {
|
||||||
const redis = new Redis.Redis({
|
const redis = new Redis.Redis(config.redisForPubsub);
|
||||||
port: config.redisForPubsub.port,
|
|
||||||
host: config.redisForPubsub.host,
|
|
||||||
family: config.redisForPubsub.family == null ? 0 : config.redisForPubsub.family,
|
|
||||||
password: config.redisForPubsub.pass,
|
|
||||||
keyPrefix: `${config.redisForPubsub.prefix}:`,
|
|
||||||
db: config.redisForPubsub.db ?? 0,
|
|
||||||
});
|
|
||||||
return redis;
|
return redis;
|
||||||
},
|
},
|
||||||
inject: [DI.config],
|
inject: [DI.config],
|
||||||
@@ -72,14 +58,7 @@ const $redisForPub: Provider = {
|
|||||||
const $redisForSub: Provider = {
|
const $redisForSub: Provider = {
|
||||||
provide: DI.redisForSub,
|
provide: DI.redisForSub,
|
||||||
useFactory: (config: Config) => {
|
useFactory: (config: Config) => {
|
||||||
const redis = new Redis.Redis({
|
const redis = new Redis.Redis(config.redisForPubsub);
|
||||||
port: config.redisForPubsub.port,
|
|
||||||
host: config.redisForPubsub.host,
|
|
||||||
family: config.redisForPubsub.family == null ? 0 : config.redisForPubsub.family,
|
|
||||||
password: config.redisForPubsub.pass,
|
|
||||||
keyPrefix: `${config.redisForPubsub.prefix}:`,
|
|
||||||
db: config.redisForPubsub.db ?? 0,
|
|
||||||
});
|
|
||||||
redis.subscribe(config.host);
|
redis.subscribe(config.host);
|
||||||
return redis;
|
return redis;
|
||||||
},
|
},
|
||||||
|
@@ -6,6 +6,16 @@ import * as fs from 'node:fs';
|
|||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { dirname, resolve } from 'node:path';
|
import { dirname, resolve } from 'node:path';
|
||||||
import * as yaml from 'js-yaml';
|
import * as yaml from 'js-yaml';
|
||||||
|
import type { RedisOptions } from 'ioredis';
|
||||||
|
|
||||||
|
type RedisOptionsSource = Partial<RedisOptions> & {
|
||||||
|
host: string;
|
||||||
|
port: number;
|
||||||
|
family?: number;
|
||||||
|
pass: string;
|
||||||
|
db?: number;
|
||||||
|
prefix?: string;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ユーザーが設定する必要のある情報
|
* ユーザーが設定する必要のある情報
|
||||||
@@ -35,30 +45,9 @@ export type Source = {
|
|||||||
user: string;
|
user: string;
|
||||||
pass: string;
|
pass: string;
|
||||||
}[];
|
}[];
|
||||||
redis: {
|
redis: RedisOptionsSource;
|
||||||
host: string;
|
redisForPubsub?: RedisOptionsSource;
|
||||||
port: number;
|
redisForJobQueue?: RedisOptionsSource;
|
||||||
family?: number;
|
|
||||||
pass: string;
|
|
||||||
db?: number;
|
|
||||||
prefix?: string;
|
|
||||||
};
|
|
||||||
redisForPubsub?: {
|
|
||||||
host: string;
|
|
||||||
port: number;
|
|
||||||
family?: number;
|
|
||||||
pass: string;
|
|
||||||
db?: number;
|
|
||||||
prefix?: string;
|
|
||||||
};
|
|
||||||
redisForJobQueue?: {
|
|
||||||
host: string;
|
|
||||||
port: number;
|
|
||||||
family?: number;
|
|
||||||
pass: string;
|
|
||||||
db?: number;
|
|
||||||
prefix?: string;
|
|
||||||
};
|
|
||||||
meilisearch?: {
|
meilisearch?: {
|
||||||
host: string;
|
host: string;
|
||||||
port: string;
|
port: string;
|
||||||
@@ -119,8 +108,9 @@ export type Mixin = {
|
|||||||
mediaProxy: string;
|
mediaProxy: string;
|
||||||
externalMediaProxyEnabled: boolean;
|
externalMediaProxyEnabled: boolean;
|
||||||
videoThumbnailGenerator: string | null;
|
videoThumbnailGenerator: string | null;
|
||||||
redisForPubsub: NonNullable<Source['redisForPubsub']>;
|
redis: RedisOptions & RedisOptionsSource;
|
||||||
redisForJobQueue: NonNullable<Source['redisForJobQueue']>;
|
redisForPubsub: RedisOptions & RedisOptionsSource;
|
||||||
|
redisForJobQueue: RedisOptions & RedisOptionsSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Config = Source & Mixin;
|
export type Config = Source & Mixin;
|
||||||
@@ -182,9 +172,9 @@ export function loadConfig() {
|
|||||||
config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator
|
config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
if (!config.redis.prefix) config.redis.prefix = mixin.host;
|
mixin.redis = convertRedisOptions(config.redis, mixin.host);
|
||||||
if (config.redisForPubsub == null) config.redisForPubsub = config.redis;
|
mixin.redisForPubsub = config.redisForPubsub ? convertRedisOptions(config.redisForPubsub, mixin.host) : mixin.redis;
|
||||||
if (config.redisForJobQueue == null) config.redisForJobQueue = config.redis;
|
mixin.redisForJobQueue = config.redisForJobQueue ? convertRedisOptions(config.redisForJobQueue, mixin.host) : mixin.redis;
|
||||||
|
|
||||||
return Object.assign(config, mixin);
|
return Object.assign(config, mixin);
|
||||||
}
|
}
|
||||||
@@ -196,3 +186,14 @@ function tryCreateUrl(url: string) {
|
|||||||
throw new Error(`url="${url}" is not a valid URL.`);
|
throw new Error(`url="${url}" is not a valid URL.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function convertRedisOptions(options: RedisOptionsSource, host: string): RedisOptions & RedisOptionsSource {
|
||||||
|
return {
|
||||||
|
...options,
|
||||||
|
password: options.pass,
|
||||||
|
prefix: options.prefix ?? host,
|
||||||
|
family: options.family == null ? 0 : options.family,
|
||||||
|
keyPrefix: `${options.prefix ?? host}:`,
|
||||||
|
db: options.db ?? 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@@ -33,7 +33,7 @@ export class CreateSystemUserService {
|
|||||||
// Generate secret
|
// Generate secret
|
||||||
const secret = generateNativeUserToken();
|
const secret = generateNativeUserToken();
|
||||||
|
|
||||||
const keyPair = await genRsaKeyPair(4096);
|
const keyPair = await genRsaKeyPair();
|
||||||
|
|
||||||
let account!: User;
|
let account!: User;
|
||||||
|
|
||||||
|
@@ -108,7 +108,7 @@ export class QueueService {
|
|||||||
removeOnFail: true,
|
removeOnFail: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
await this.deliverQueue.addBulk(Array.from(inboxes.entries()).map(d => ({
|
await this.deliverQueue.addBulk(Array.from(inboxes.entries(), d => ({
|
||||||
name: d[0],
|
name: d[0],
|
||||||
data: {
|
data: {
|
||||||
user,
|
user,
|
||||||
|
@@ -92,7 +92,7 @@ export class SignupService {
|
|||||||
|
|
||||||
const keyPair = await new Promise<string[]>((res, rej) =>
|
const keyPair = await new Promise<string[]>((res, rej) =>
|
||||||
generateKeyPair('rsa', {
|
generateKeyPair('rsa', {
|
||||||
modulusLength: 4096,
|
modulusLength: 2048,
|
||||||
publicKeyEncoding: {
|
publicKeyEncoding: {
|
||||||
type: 'spki',
|
type: 'spki',
|
||||||
format: 'pem',
|
format: 'pem',
|
||||||
|
@@ -95,7 +95,7 @@ export class ApAudienceService {
|
|||||||
private isPublic(id: string): boolean {
|
private isPublic(id: string): boolean {
|
||||||
return [
|
return [
|
||||||
'https://www.w3.org/ns/activitystreams#Public',
|
'https://www.w3.org/ns/activitystreams#Public',
|
||||||
'as#Public',
|
'as:Public',
|
||||||
'Public',
|
'Public',
|
||||||
].includes(id);
|
].includes(id);
|
||||||
}
|
}
|
||||||
|
@@ -15,11 +15,8 @@ export const QUEUE = {
|
|||||||
export function baseQueueOptions(config: Config, queueName: typeof QUEUE[keyof typeof QUEUE]): Bull.QueueOptions {
|
export function baseQueueOptions(config: Config, queueName: typeof QUEUE[keyof typeof QUEUE]): Bull.QueueOptions {
|
||||||
return {
|
return {
|
||||||
connection: {
|
connection: {
|
||||||
port: config.redisForJobQueue.port,
|
...config.redisForJobQueue,
|
||||||
host: config.redisForJobQueue.host,
|
keyPrefix: undefined
|
||||||
family: config.redisForJobQueue.family == null ? 0 : config.redisForJobQueue.family,
|
|
||||||
password: config.redisForJobQueue.pass,
|
|
||||||
db: config.redisForJobQueue.db ?? 0,
|
|
||||||
},
|
},
|
||||||
prefix: config.redisForJobQueue.prefix ? `${config.redisForJobQueue.prefix}:queue:${queueName}` : `queue:${queueName}`,
|
prefix: config.redisForJobQueue.prefix ? `${config.redisForJobQueue.prefix}:queue:${queueName}` : `queue:${queueName}`,
|
||||||
};
|
};
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import * as fs from 'node:fs';
|
import * as fs from 'node:fs';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import { ZipReader } from 'slacc';
|
||||||
import { DataSource } from 'typeorm';
|
import { DataSource } from 'typeorm';
|
||||||
import unzipper from 'unzipper';
|
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import type { EmojisRepository, DriveFilesRepository, UsersRepository } from '@/models/index.js';
|
import type { EmojisRepository, DriveFilesRepository, UsersRepository } from '@/models/index.js';
|
||||||
import type { Config } from '@/config.js';
|
import type { Config } from '@/config.js';
|
||||||
@@ -72,9 +72,9 @@ export class ImportCustomEmojisProcessorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const outputPath = path + '/emojis';
|
const outputPath = path + '/emojis';
|
||||||
const unzipStream = fs.createReadStream(destPath);
|
try {
|
||||||
const extractor = unzipper.Extract({ path: outputPath });
|
this.logger.succ(`Unzipping to ${outputPath}`);
|
||||||
extractor.on('close', async () => {
|
ZipReader.withDestinationPath(outputPath).viaBuffer(await fs.promises.readFile(destPath));
|
||||||
const metaRaw = fs.readFileSync(outputPath + '/meta.json', 'utf-8');
|
const metaRaw = fs.readFileSync(outputPath + '/meta.json', 'utf-8');
|
||||||
const meta = JSON.parse(metaRaw);
|
const meta = JSON.parse(metaRaw);
|
||||||
|
|
||||||
@@ -115,8 +115,12 @@ export class ImportCustomEmojisProcessorService {
|
|||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
this.logger.succ('Imported');
|
this.logger.succ('Imported');
|
||||||
});
|
} catch (e) {
|
||||||
unzipStream.pipe(extractor);
|
if (e instanceof Error || typeof e === 'string') {
|
||||||
this.logger.succ(`Unzipping to ${outputPath}`);
|
this.logger.error(e);
|
||||||
|
}
|
||||||
|
cleanup();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ import type { DriveFilesRepository } from '@/models/index.js';
|
|||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
import { ModerationLogService } from '@/core/ModerationLogService.js';
|
import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
|
import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '../../../error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
@@ -55,6 +56,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
|
|
||||||
private customEmojiService: CustomEmojiService,
|
private customEmojiService: CustomEmojiService,
|
||||||
|
|
||||||
|
private emojiEntityService: EmojiEntityService,
|
||||||
private moderationLogService: ModerationLogService,
|
private moderationLogService: ModerationLogService,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(meta, paramDef, async (ps, me) => {
|
||||||
@@ -77,9 +79,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
emojiId: emoji.id,
|
emojiId: emoji.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return this.emojiEntityService.packDetailed(emoji);
|
||||||
id: emoji.id,
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
query.limit(ps.limit);
|
query.limit(ps.limit);
|
||||||
query.skip(ps.offset);
|
query.offset(ps.offset);
|
||||||
|
|
||||||
const tickets = await query.getMany();
|
const tickets = await query.getMany();
|
||||||
|
|
||||||
|
@@ -105,7 +105,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
query.limit(ps.limit);
|
query.limit(ps.limit);
|
||||||
query.skip(ps.offset);
|
query.offset(ps.offset);
|
||||||
|
|
||||||
const users = await query.getMany();
|
const users = await query.getMany();
|
||||||
|
|
||||||
|
@@ -76,6 +76,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
throw new ApiError(meta.errors.noSuchAntenna);
|
throw new ApiError(meta.errors.noSuchAntenna);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.antennasRepository.update(antenna.id, {
|
||||||
|
isActive: true,
|
||||||
|
lastUsedAt: new Date(),
|
||||||
|
});
|
||||||
|
|
||||||
const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
|
const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
|
||||||
const noteIdsRes = await this.redisClient.xrevrange(
|
const noteIdsRes = await this.redisClient.xrevrange(
|
||||||
`antennaTimeline:${antenna.id}`,
|
`antennaTimeline:${antenna.id}`,
|
||||||
@@ -112,11 +117,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
this.noteReadService.read(me.id, notes);
|
this.noteReadService.read(me.id, notes);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.antennasRepository.update(antenna.id, {
|
|
||||||
isActive: true,
|
|
||||||
lastUsedAt: new Date(),
|
|
||||||
});
|
|
||||||
|
|
||||||
return await this.noteEntityService.packMany(notes, me);
|
return await this.noteEntityService.packMany(notes, me);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -112,6 +112,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
withReplies: ps.withReplies,
|
withReplies: ps.withReplies,
|
||||||
withFile: ps.withFile,
|
withFile: ps.withFile,
|
||||||
notify: ps.notify,
|
notify: ps.notify,
|
||||||
|
isActive: true,
|
||||||
|
lastUsedAt: new Date(),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.globalEventService.publishInternalEvent('antennaUpdated', await this.antennasRepository.findOneByOrFail({ id: antenna.id }));
|
this.globalEventService.publishInternalEvent('antennaUpdated', await this.antennasRepository.findOneByOrFail({ id: antenna.id }));
|
||||||
|
@@ -126,7 +126,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
query.andWhere('instance.host like :host', { host: '%' + sqlLikeEscape(ps.host.toLowerCase()) + '%' });
|
query.andWhere('instance.host like :host', { host: '%' + sqlLikeEscape(ps.host.toLowerCase()) + '%' });
|
||||||
}
|
}
|
||||||
|
|
||||||
const instances = await query.limit(ps.limit).skip(ps.offset).getMany();
|
const instances = await query.limit(ps.limit).offset(ps.offset).getMany();
|
||||||
|
|
||||||
return await this.instanceEntityService.packMany(instances);
|
return await this.instanceEntityService.packMany(instances);
|
||||||
});
|
});
|
||||||
|
@@ -42,7 +42,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
.orderBy('tag.count', 'DESC')
|
.orderBy('tag.count', 'DESC')
|
||||||
.groupBy('tag.id')
|
.groupBy('tag.id')
|
||||||
.limit(ps.limit)
|
.limit(ps.limit)
|
||||||
.skip(ps.offset)
|
.offset(ps.offset)
|
||||||
.getMany();
|
.getMany();
|
||||||
|
|
||||||
return hashtags.map(tag => tag.name);
|
return hashtags.map(tag => tag.name);
|
||||||
|
@@ -103,7 +103,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
const procedures = this.twoFactorAuthenticationService.getProcedures();
|
const procedures = this.twoFactorAuthenticationService.getProcedures();
|
||||||
|
|
||||||
if (!(procedures as any)[attestation.fmt]) {
|
if (!(procedures as any)[attestation.fmt]) {
|
||||||
throw new Error('unsupported fmt');
|
throw new Error(`unsupported fmt: ${attestation.fmt}. Supported ones: ${Object.keys(procedures)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const verificationData = (procedures as any)[attestation.fmt].verify({
|
const verificationData = (procedures as any)[attestation.fmt].verify({
|
||||||
|
@@ -83,7 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
const polls = await query
|
const polls = await query
|
||||||
.orderBy('poll.noteId', 'DESC')
|
.orderBy('poll.noteId', 'DESC')
|
||||||
.limit(ps.limit)
|
.limit(ps.limit)
|
||||||
.skip(ps.offset)
|
.offset(ps.offset)
|
||||||
.getMany();
|
.getMany();
|
||||||
|
|
||||||
if (polls.length === 0) return [];
|
if (polls.length === 0) return [];
|
||||||
|
@@ -81,7 +81,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
if (me) this.queryService.generateBlockQueryForUsers(query, me);
|
if (me) this.queryService.generateBlockQueryForUsers(query, me);
|
||||||
|
|
||||||
query.limit(ps.limit);
|
query.limit(ps.limit);
|
||||||
query.skip(ps.offset);
|
query.offset(ps.offset);
|
||||||
|
|
||||||
const users = await query.getMany();
|
const users = await query.getMany();
|
||||||
|
|
||||||
|
@@ -70,7 +70,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
|
|
||||||
query.setParameters(followingQuery.getParameters());
|
query.setParameters(followingQuery.getParameters());
|
||||||
|
|
||||||
const users = await query.limit(ps.limit).skip(ps.offset).getMany();
|
const users = await query.limit(ps.limit).offset(ps.offset).getMany();
|
||||||
|
|
||||||
return await this.userEntityService.packMany(users, me, { detail: true });
|
return await this.userEntityService.packMany(users, me, { detail: true });
|
||||||
});
|
});
|
||||||
|
@@ -75,7 +75,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
users = await usernameQuery
|
users = await usernameQuery
|
||||||
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
||||||
.limit(ps.limit)
|
.limit(ps.limit)
|
||||||
.skip(ps.offset)
|
.offset(ps.offset)
|
||||||
.getMany();
|
.getMany();
|
||||||
} else {
|
} else {
|
||||||
const nameQuery = this.usersRepository.createQueryBuilder('user')
|
const nameQuery = this.usersRepository.createQueryBuilder('user')
|
||||||
@@ -102,7 +102,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
users = await nameQuery
|
users = await nameQuery
|
||||||
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
||||||
.limit(ps.limit)
|
.limit(ps.limit)
|
||||||
.skip(ps.offset)
|
.offset(ps.offset)
|
||||||
.getMany();
|
.getMany();
|
||||||
|
|
||||||
if (users.length < ps.limit) {
|
if (users.length < ps.limit) {
|
||||||
@@ -128,7 +128,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
|||||||
users = users.concat(await query
|
users = users.concat(await query
|
||||||
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
|
||||||
.limit(ps.limit)
|
.limit(ps.limit)
|
||||||
.skip(ps.offset)
|
.offset(ps.offset)
|
||||||
.getMany(),
|
.getMany(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@ import { dirname } from 'node:path';
|
|||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { createBullBoard } from '@bull-board/api';
|
import { createBullBoard } from '@bull-board/api';
|
||||||
import { BullAdapter } from '@bull-board/api/bullAdapter.js';
|
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter.js';
|
||||||
import { FastifyAdapter } from '@bull-board/fastify';
|
import { FastifyAdapter } from '@bull-board/fastify';
|
||||||
import ms from 'ms';
|
import ms from 'ms';
|
||||||
import sharp from 'sharp';
|
import sharp from 'sharp';
|
||||||
@@ -168,7 +168,7 @@ export class ClientServerService {
|
|||||||
this.dbQueue,
|
this.dbQueue,
|
||||||
this.objectStorageQueue,
|
this.objectStorageQueue,
|
||||||
this.webhookDeliverQueue,
|
this.webhookDeliverQueue,
|
||||||
].map(q => new BullAdapter(q)),
|
].map(q => new BullMQAdapter(q)),
|
||||||
serverAdapter,
|
serverAdapter,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -16,8 +16,12 @@ block og
|
|||||||
meta(property='og:title' content= title)
|
meta(property='og:title' content= title)
|
||||||
meta(property='og:description' content= post.description)
|
meta(property='og:description' content= post.description)
|
||||||
meta(property='og:url' content= url)
|
meta(property='og:url' content= url)
|
||||||
meta(property='og:image' content= post.files[0].thumbnailUrl)
|
if post.isSensitive
|
||||||
meta(property='twitter:card' content='summary_large_image')
|
meta(property='og:image' content= avatarUrl)
|
||||||
|
meta(property='twitter:card' content='summary')
|
||||||
|
else
|
||||||
|
meta(property='og:image' content= post.files[0].thumbnailUrl)
|
||||||
|
meta(property='twitter:card' content='summary_large_image')
|
||||||
|
|
||||||
block meta
|
block meta
|
||||||
if user.host || profile.noCrawle
|
if user.host || profile.noCrawle
|
||||||
|
@@ -5,8 +5,8 @@ block vars
|
|||||||
- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
|
- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
|
||||||
- const url = `${config.url}/notes/${note.id}`;
|
- const url = `${config.url}/notes/${note.id}`;
|
||||||
- const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
- const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
||||||
- const image = (note.files || []).find(file => file.type.startsWith('image/') && !file.isSensitive)
|
- const images = (note.files || []).filter(file => file.type.startsWith('image/') && !file.isSensitive)
|
||||||
- const video = (note.files || []).find(file => file.type.startsWith('video/') && !file.isSensitive)
|
- const videos = (note.files || []).filter(file => file.type.startsWith('video/') && !file.isSensitive)
|
||||||
|
|
||||||
block title
|
block title
|
||||||
= `${title} | ${instanceName}`
|
= `${title} | ${instanceName}`
|
||||||
@@ -19,15 +19,17 @@ block og
|
|||||||
meta(property='og:title' content= title)
|
meta(property='og:title' content= title)
|
||||||
meta(property='og:description' content= summary)
|
meta(property='og:description' content= summary)
|
||||||
meta(property='og:url' content= url)
|
meta(property='og:url' content= url)
|
||||||
if video
|
if videos.length
|
||||||
meta(property='og:video:url' content= video.url)
|
each video in videos
|
||||||
meta(property='og:video:secure_url' content= video.url)
|
meta(property='og:video:url' content= video.url)
|
||||||
meta(property='og:video:type' content= video.type)
|
meta(property='og:video:secure_url' content= video.url)
|
||||||
// FIXME: add width and height
|
meta(property='og:video:type' content= video.type)
|
||||||
// FIXME: add embed player for Twitter
|
// FIXME: add width and height
|
||||||
if image
|
// FIXME: add embed player for Twitter
|
||||||
|
if images.length
|
||||||
meta(property='twitter:card' content='summary_large_image')
|
meta(property='twitter:card' content='summary_large_image')
|
||||||
meta(property='og:image' content= image.url)
|
each image in images
|
||||||
|
meta(property='og:image' content= image.url)
|
||||||
else
|
else
|
||||||
meta(property='twitter:card' content='summary')
|
meta(property='twitter:card' content='summary')
|
||||||
meta(property='og:image' content= avatarUrl)
|
meta(property='og:image' content= avatarUrl)
|
||||||
|
@@ -4,8 +4,9 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "vite",
|
"watch": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"storybook-dev": "chokidar 'src/**/*.{mdx,ts,vue}' -d 1000 -t 1000 --initial -i '**/*.stories.ts' -c 'pkill -f node_modules/storybook/index.js; node_modules/.bin/tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && node_modules/.bin/storybook dev -p 6006 --ci'",
|
"storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"",
|
||||||
"build-storybook": "tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js && storybook build",
|
"build-storybook-pre": "tsc -p .storybook && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
|
||||||
|
"build-storybook": "pnpm build-storybook-pre && storybook build",
|
||||||
"chromatic": "chromatic",
|
"chromatic": "chromatic",
|
||||||
"test": "vitest --run",
|
"test": "vitest --run",
|
||||||
"test-and-coverage": "vitest --run --coverage",
|
"test-and-coverage": "vitest --run --coverage",
|
||||||
@@ -116,7 +117,6 @@
|
|||||||
"@vitest/coverage-v8": "0.33.0",
|
"@vitest/coverage-v8": "0.33.0",
|
||||||
"@vue/runtime-core": "3.3.4",
|
"@vue/runtime-core": "3.3.4",
|
||||||
"acorn": "8.10.0",
|
"acorn": "8.10.0",
|
||||||
"chokidar-cli": "3.0.0",
|
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cypress": "12.17.1",
|
"cypress": "12.17.1",
|
||||||
"eslint": "8.45.0",
|
"eslint": "8.45.0",
|
||||||
@@ -127,6 +127,7 @@
|
|||||||
"micromatch": "4.0.5",
|
"micromatch": "4.0.5",
|
||||||
"msw": "1.2.2",
|
"msw": "1.2.2",
|
||||||
"msw-storybook-addon": "1.8.0",
|
"msw-storybook-addon": "1.8.0",
|
||||||
|
"nodemon": "3.0.1",
|
||||||
"prettier": "3.0.0",
|
"prettier": "3.0.0",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-if="file.isSensitive" :class="[$style.label, $style.red]">
|
<div v-if="file.isSensitive" :class="[$style.label, $style.red]">
|
||||||
<img :class="$style.labelImg" src="/client-assets/label-red.svg"/>
|
<img :class="$style.labelImg" src="/client-assets/label-red.svg"/>
|
||||||
<p :class="$style.labelText">NSFW</p>
|
<p :class="$style.labelText">{{ i18n.ts.sensitive }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<MkDriveFileThumbnail :class="$style.thumbnail" :file="file" fit="contain"/>
|
<MkDriveFileThumbnail :class="$style.thumbnail" :file="file" fit="contain"/>
|
||||||
|
@@ -108,8 +108,7 @@ function waitForDecode() {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
loaded = true;
|
loaded = true;
|
||||||
}, error => {
|
}, error => {
|
||||||
console.error('Error occurred during decoding image', img.value, error);
|
console.log('Error occurred during decoding image', img.value, error);
|
||||||
throw Error(error);
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
loaded = false;
|
loaded = false;
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
<template v-if="hide">
|
<template v-if="hide">
|
||||||
<div :class="$style.hiddenText">
|
<div :class="$style.hiddenText">
|
||||||
<div :class="$style.hiddenTextWrapper">
|
<div :class="$style.hiddenTextWrapper">
|
||||||
<b v-if="image.isSensitive" style="display: block;"><i class="ti ti-alert-triangle"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.enableDataSaverMode ? ` (${i18n.ts.image}${image.size ? ' ' + bytes(image.size) : ''})` : '' }}</b>
|
<b v-if="image.isSensitive" style="display: block;"><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.enableDataSaverMode ? ` (${i18n.ts.image}${image.size ? ' ' + bytes(image.size) : ''})` : '' }}</b>
|
||||||
<b v-else style="display: block;"><i class="ti ti-photo"></i> {{ defaultStore.state.enableDataSaverMode && image.size ? bytes(image.size) : i18n.ts.image }}</b>
|
<b v-else style="display: block;"><i class="ti ti-photo"></i> {{ defaultStore.state.enableDataSaverMode && image.size ? bytes(image.size) : i18n.ts.image }}</b>
|
||||||
<span style="display: block;">{{ i18n.ts.clickToShow }}</span>
|
<span style="display: block;">{{ i18n.ts.clickToShow }}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<div :class="$style.indicators">
|
<div :class="$style.indicators">
|
||||||
<div v-if="['image/gif', 'image/apng'].includes(image.type)" :class="$style.indicator">GIF</div>
|
<div v-if="['image/gif', 'image/apng'].includes(image.type)" :class="$style.indicator">GIF</div>
|
||||||
<div v-if="image.comment" :class="$style.indicator">ALT</div>
|
<div v-if="image.comment" :class="$style.indicator">ALT</div>
|
||||||
<div v-if="image.isSensitive" :class="$style.indicator" style="color: var(--warn);">NSFW</div>
|
<div v-if="image.isSensitive" :class="$style.indicator" style="color: var(--warn);" :title="i18n.ts.sensitive"><i class="ti ti-eye-exclamation"></i></div>
|
||||||
</div>
|
</div>
|
||||||
<button :class="$style.menu" class="_button" @click.stop="showMenu"><i class="ti ti-dots" style="vertical-align: middle;"></i></button>
|
<button :class="$style.menu" class="_button" @click.stop="showMenu"><i class="ti ti-dots" style="vertical-align: middle;"></i></button>
|
||||||
<i class="ti ti-eye-off" :class="$style.hide" @click.stop="hide = true"></i>
|
<i class="ti ti-eye-off" :class="$style.hide" @click.stop="hide = true"></i>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div ref="root">
|
||||||
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
|
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
|
||||||
<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
|
<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
|
||||||
<div
|
<div
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, watch, shallowRef } from 'vue';
|
import { onMounted, shallowRef } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
||||||
import PhotoSwipe from 'photoswipe';
|
import PhotoSwipe from 'photoswipe';
|
||||||
@@ -34,19 +34,26 @@ import XVideo from '@/components/MkMediaVideo.vue';
|
|||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { FILE_TYPE_BROWSERSAFE } from '@/const';
|
import { FILE_TYPE_BROWSERSAFE } from '@/const';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
|
import { getScrollContainer, getBodyScrollHeight } from '@/scripts/scroll';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
mediaList: misskey.entities.DriveFile[];
|
mediaList: misskey.entities.DriveFile[];
|
||||||
raw?: boolean;
|
raw?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
const root = shallowRef<HTMLDivElement>();
|
||||||
|
const container = shallowRef<HTMLElement | null | undefined>(undefined);
|
||||||
const gallery = shallowRef<HTMLDivElement>();
|
const gallery = shallowRef<HTMLDivElement>();
|
||||||
const pswpZIndex = os.claimZIndex('middle');
|
const pswpZIndex = os.claimZIndex('middle');
|
||||||
document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
|
document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
|
||||||
const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
|
const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する
|
||||||
|
* aspect-ratioではなくheightを使う
|
||||||
|
*/
|
||||||
function calcAspectRatio() {
|
function calcAspectRatio() {
|
||||||
if (!gallery.value) return;
|
if (!gallery.value || !root.value) return;
|
||||||
|
|
||||||
let img = props.mediaList[0];
|
let img = props.mediaList[0];
|
||||||
|
|
||||||
@@ -55,28 +62,46 @@ function calcAspectRatio() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// アスペクト比上限設定では、横長の場合は高さを縮小させる
|
const width = gallery.value.clientWidth;
|
||||||
const ratioMax = (ratio: number) => `${Math.max(ratio, img.properties.width / img.properties.height).toString()} / 1`;
|
|
||||||
|
const heightMin = (ratio: number) => {
|
||||||
|
const imgResizeRatio = width / img.properties.width;
|
||||||
|
const imgDrawHeight = img.properties.height * imgResizeRatio;
|
||||||
|
const maxHeight = width * ratio;
|
||||||
|
const height = Math.min(imgDrawHeight, maxHeight);
|
||||||
|
if (_DEV_) console.log('Image height calculated:', { width, properties: img.properties, imgResizeRatio, imgDrawHeight, maxHeight, height });
|
||||||
|
return `${height}px`;
|
||||||
|
};
|
||||||
|
|
||||||
switch (defaultStore.state.mediaListWithOneImageAppearance) {
|
switch (defaultStore.state.mediaListWithOneImageAppearance) {
|
||||||
case '16_9':
|
case '16_9':
|
||||||
gallery.value.style.aspectRatio = ratioMax(16 / 9);
|
gallery.value.style.height = heightMin(9 / 16);
|
||||||
break;
|
break;
|
||||||
case '1_1':
|
case '1_1':
|
||||||
gallery.value.style.aspectRatio = ratioMax(1);
|
gallery.value.style.height = heightMin(1);
|
||||||
break;
|
break;
|
||||||
case '2_3':
|
case '2_3':
|
||||||
gallery.value.style.aspectRatio = ratioMax(2 / 3);
|
gallery.value.style.height = heightMin(3 / 2);
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
gallery.value.style.aspectRatio = '';
|
if (!container.value) container.value = getScrollContainer(root.value);
|
||||||
|
const maxHeight = Math.max(64, (container.value ? container.value.clientHeight : getBodyScrollHeight()) * 0.5 || 360);
|
||||||
|
if (width === 0 || !maxHeight) return;
|
||||||
|
const imgResizeRatio = width / img.properties.width;
|
||||||
|
const imgDrawHeight = img.properties.height * imgResizeRatio;
|
||||||
|
gallery.value.style.height = `${Math.max(64, Math.min(imgDrawHeight, maxHeight))}px`;
|
||||||
|
gallery.value.style.minHeight = 'initial';
|
||||||
|
gallery.value.style.maxHeight = 'initial';
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gallery.value.style.aspectRatio = 'initial';
|
||||||
}
|
}
|
||||||
|
|
||||||
watch([defaultStore.reactiveState.mediaListWithOneImageAppearance, gallery], () => calcAspectRatio());
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
calcAspectRatio();
|
||||||
|
|
||||||
const lightbox = new PhotoSwipeLightbox({
|
const lightbox = new PhotoSwipeLightbox({
|
||||||
dataSource: props.mediaList
|
dataSource: props.mediaList
|
||||||
.filter(media => {
|
.filter(media => {
|
||||||
@@ -203,7 +228,7 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
|
|||||||
&.n1 {
|
&.n1 {
|
||||||
grid-template-rows: 1fr;
|
grid-template-rows: 1fr;
|
||||||
|
|
||||||
// default (expand)
|
// default but fallback (expand)
|
||||||
min-height: 64px;
|
min-height: 64px;
|
||||||
max-height: clamp(
|
max-height: clamp(
|
||||||
64px,
|
64px,
|
||||||
@@ -212,20 +237,20 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
&.n116_9 {
|
&.n116_9 {
|
||||||
min-height: none;
|
min-height: initial;
|
||||||
max-height: none;
|
max-height: initial;
|
||||||
aspect-ratio: 16 / 9; // fallback
|
aspect-ratio: 16 / 9; // fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
&.n11_1{
|
&.n11_1{
|
||||||
min-height: none;
|
min-height: initial;
|
||||||
max-height: none;
|
max-height: initial;
|
||||||
aspect-ratio: 1 / 1; // fallback
|
aspect-ratio: 1 / 1; // fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
&.n12_3 {
|
&.n12_3 {
|
||||||
min-height: none;
|
min-height: initial;
|
||||||
max-height: none;
|
max-height: initial;
|
||||||
aspect-ratio: 2 / 3; // fallback
|
aspect-ratio: 2 / 3; // fallback
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -431,9 +431,15 @@ defineExpose({
|
|||||||
margin: auto;
|
margin: auto;
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
// TODO: mask-imageはiOSだとやたら重い。なんとかしたい
|
||||||
|
-webkit-mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 32px, rgba(0,0,0,1) calc(100% - 32px), rgba(0,0,0,0) 100%);
|
||||||
|
mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 32px, rgba(0,0,0,1) calc(100% - 32px), rgba(0,0,0,0) 100%);
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
@media (max-width: 500px) {
|
@media (max-width: 500px) {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
-webkit-mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 16px, rgba(0,0,0,1) calc(100% - 16px), rgba(0,0,0,0) 100%);
|
||||||
|
mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 16px, rgba(0,0,0,1) calc(100% - 16px), rgba(0,0,0,0) 100%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -165,6 +165,7 @@ import { getNoteSummary } from '@/scripts/get-note-summary';
|
|||||||
import { MenuItem } from '@/types/menu';
|
import { MenuItem } from '@/types/menu';
|
||||||
import MkRippleEffect from '@/components/MkRippleEffect.vue';
|
import MkRippleEffect from '@/components/MkRippleEffect.vue';
|
||||||
import { showMovedDialog } from '@/scripts/show-moved-dialog';
|
import { showMovedDialog } from '@/scripts/show-moved-dialog';
|
||||||
|
import { shouldCollapsed } from '@/scripts/collapsed';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
note: misskey.entities.Note;
|
note: misskey.entities.Note;
|
||||||
@@ -204,17 +205,7 @@ let appearNote = $computed(() => isRenote ? note.renote as misskey.entities.Note
|
|||||||
const isMyRenote = $i && ($i.id === note.userId);
|
const isMyRenote = $i && ($i.id === note.userId);
|
||||||
const showContent = ref(false);
|
const showContent = ref(false);
|
||||||
const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null;
|
const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null;
|
||||||
const isLong = (appearNote.cw == null && appearNote.text != null && (
|
const isLong = shouldCollapsed(appearNote);
|
||||||
(appearNote.text.includes('$[x2')) ||
|
|
||||||
(appearNote.text.includes('$[x3')) ||
|
|
||||||
(appearNote.text.includes('$[x4')) ||
|
|
||||||
(appearNote.text.includes('$[scale')) ||
|
|
||||||
(appearNote.text.includes('$[position')) ||
|
|
||||||
(appearNote.text.split('\n').length > 9) ||
|
|
||||||
(appearNote.text.length > 500) ||
|
|
||||||
(appearNote.files.length >= 5) ||
|
|
||||||
(urls && urls.length >= 4)
|
|
||||||
));
|
|
||||||
const collapsed = ref(appearNote.cw == null && isLong);
|
const collapsed = ref(appearNote.cw == null && isLong);
|
||||||
const isDeleted = ref(false);
|
const isDeleted = ref(false);
|
||||||
const muted = ref(checkWordMute(appearNote, $i, defaultStore.state.mutedWords));
|
const muted = ref(checkWordMute(appearNote, $i, defaultStore.state.mutedWords));
|
||||||
|
@@ -540,7 +540,7 @@ function onCompositionEnd(ev: CompositionEvent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function onPaste(ev: ClipboardEvent) {
|
async function onPaste(ev: ClipboardEvent) {
|
||||||
for (const { item, i } of Array.from(ev.clipboardData.items).map((item, i) => ({ item, i }))) {
|
for (const { item, i } of Array.from(ev.clipboardData.items, (item, i) => ({ item, i }))) {
|
||||||
if (item.kind === 'file') {
|
if (item.kind === 'file') {
|
||||||
const file = item.getAsFile();
|
const file = item.getAsFile();
|
||||||
const lio = file.name.lastIndexOf('.');
|
const lio = file.name.lastIndexOf('.');
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
<div :class="$style.file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)">
|
<div :class="$style.file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)">
|
||||||
<MkDriveFileThumbnail :data-id="element.id" :class="$style.thumbnail" :file="element" fit="cover"/>
|
<MkDriveFileThumbnail :data-id="element.id" :class="$style.thumbnail" :file="element" fit="cover"/>
|
||||||
<div v-if="element.isSensitive" :class="$style.sensitive">
|
<div v-if="element.isSensitive" :class="$style.sensitive">
|
||||||
<i class="ti ti-alert-triangle" style="margin: auto;"></i>
|
<i class="ti ti-eye-exclamation" style="margin: auto;"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@@ -31,16 +31,13 @@ import MkMediaList from '@/components/MkMediaList.vue';
|
|||||||
import MkPoll from '@/components/MkPoll.vue';
|
import MkPoll from '@/components/MkPoll.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { $i } from '@/account';
|
import { $i } from '@/account';
|
||||||
|
import { shouldCollapsed } from '@/scripts/collapsed';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
note: misskey.entities.Note;
|
note: misskey.entities.Note;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const isLong =
|
const isLong = shouldCollapsed(props.note);
|
||||||
props.note.cw == null && props.note.text != null && (
|
|
||||||
(props.note.text.split('\n').length > 9) ||
|
|
||||||
(props.note.text.length > 500)
|
|
||||||
);
|
|
||||||
|
|
||||||
const collapsed = $ref(isLong);
|
const collapsed = $ref(isLong);
|
||||||
</script>
|
</script>
|
||||||
|
@@ -16,8 +16,8 @@ import tinycolor from 'tinycolor2';
|
|||||||
const loaded = !!window.TagCanvas;
|
const loaded = !!window.TagCanvas;
|
||||||
const SAFE_FOR_HTML_ID = 'abcdefghijklmnopqrstuvwxyz';
|
const SAFE_FOR_HTML_ID = 'abcdefghijklmnopqrstuvwxyz';
|
||||||
const computedStyle = getComputedStyle(document.documentElement);
|
const computedStyle = getComputedStyle(document.documentElement);
|
||||||
const idForCanvas = Array.from(Array(16)).map(() => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
|
const idForCanvas = Array.from({ length: 16 }, () => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
|
||||||
const idForTags = Array.from(Array(16)).map(() => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
|
const idForTags = Array.from({ length: 16 }, () => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
|
||||||
let available = $ref(false);
|
let available = $ref(false);
|
||||||
let rootEl = $shallowRef<HTMLElement | null>(null);
|
let rootEl = $shallowRef<HTMLElement | null>(null);
|
||||||
let canvasEl = $shallowRef<HTMLCanvasElement | null>(null);
|
let canvasEl = $shallowRef<HTMLCanvasElement | null>(null);
|
||||||
|
@@ -38,14 +38,6 @@ const prepend = note => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onUserAdded = () => {
|
|
||||||
tlComponent.pagingComponent?.reload();
|
|
||||||
};
|
|
||||||
|
|
||||||
const onUserRemoved = () => {
|
|
||||||
tlComponent.pagingComponent?.reload();
|
|
||||||
};
|
|
||||||
|
|
||||||
let endpoint;
|
let endpoint;
|
||||||
let query;
|
let query;
|
||||||
let connection;
|
let connection;
|
||||||
@@ -125,8 +117,6 @@ if (props.src === 'antenna') {
|
|||||||
listId: props.list,
|
listId: props.list,
|
||||||
});
|
});
|
||||||
connection.on('note', prepend);
|
connection.on('note', prepend);
|
||||||
connection.on('userAdded', onUserAdded);
|
|
||||||
connection.on('userRemoved', onUserRemoved);
|
|
||||||
} else if (props.src === 'channel') {
|
} else if (props.src === 'channel') {
|
||||||
endpoint = 'channels/timeline';
|
endpoint = 'channels/timeline';
|
||||||
query = {
|
query = {
|
||||||
|
@@ -52,19 +52,21 @@
|
|||||||
</footer>
|
</footer>
|
||||||
</article>
|
</article>
|
||||||
</component>
|
</component>
|
||||||
<div v-if="tweetId" :class="$style.action">
|
<template v-if="showActions">
|
||||||
<MkButton :small="true" inline @click="tweetExpanded = true">
|
<div v-if="tweetId" :class="$style.action">
|
||||||
<i class="ti ti-brand-twitter"></i> {{ i18n.ts.expandTweet }}
|
<MkButton :small="true" inline @click="tweetExpanded = true">
|
||||||
</MkButton>
|
<i class="ti ti-brand-twitter"></i> {{ i18n.ts.expandTweet }}
|
||||||
</div>
|
</MkButton>
|
||||||
<div v-if="!playerEnabled && player.url" :class="$style.action">
|
</div>
|
||||||
<MkButton :small="true" inline @click="playerEnabled = true">
|
<div v-if="!playerEnabled && player.url" :class="$style.action">
|
||||||
<i class="ti ti-player-play"></i> {{ i18n.ts.enablePlayer }}
|
<MkButton :small="true" inline @click="playerEnabled = true">
|
||||||
</MkButton>
|
<i class="ti ti-player-play"></i> {{ i18n.ts.enablePlayer }}
|
||||||
<MkButton v-if="!isMobile" :small="true" inline @click="openPlayer()">
|
</MkButton>
|
||||||
<i class="ti ti-picture-in-picture"></i> {{ i18n.ts.openInWindow }}
|
<MkButton v-if="!isMobile" :small="true" inline @click="openPlayer()">
|
||||||
</MkButton>
|
<i class="ti ti-picture-in-picture"></i> {{ i18n.ts.openInWindow }}
|
||||||
</div>
|
</MkButton>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -85,9 +87,11 @@ const props = withDefaults(defineProps<{
|
|||||||
url: string;
|
url: string;
|
||||||
detail?: boolean;
|
detail?: boolean;
|
||||||
compact?: boolean;
|
compact?: boolean;
|
||||||
|
showActions?: boolean;
|
||||||
}>(), {
|
}>(), {
|
||||||
detail: false,
|
detail: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
|
showActions: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const MOBILE_THRESHOLD = 500;
|
const MOBILE_THRESHOLD = 500;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :class="$style.root" :style="{ zIndex, top: top + 'px', left: left + 'px' }">
|
<div :class="$style.root" :style="{ zIndex, top: top + 'px', left: left + 'px' }">
|
||||||
<Transition :name="defaultStore.state.animation ? '_transition_zoom' : ''" @afterLeave="emit('closed')">
|
<Transition :name="defaultStore.state.animation ? '_transition_zoom' : ''" @afterLeave="emit('closed')">
|
||||||
<MkUrlPreview v-if="showing" class="_popup _shadow" :url="url"/>
|
<MkUrlPreview v-if="showing" class="_popup _shadow" :url="url" :showActions="false"/>
|
||||||
</Transition>
|
</Transition>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@@ -4,6 +4,9 @@ import { userEvent, waitFor, within } from '@storybook/testing-library';
|
|||||||
import { StoryObj } from '@storybook/vue3';
|
import { StoryObj } from '@storybook/vue3';
|
||||||
import MkAd from './MkAd.vue';
|
import MkAd from './MkAd.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
|
||||||
|
let lock: Promise<undefined> | undefined;
|
||||||
|
|
||||||
const common = {
|
const common = {
|
||||||
render(args) {
|
render(args) {
|
||||||
return {
|
return {
|
||||||
@@ -25,41 +28,57 @@ const common = {
|
|||||||
template: '<MkAd v-bind="props" />',
|
template: '<MkAd v-bind="props" />',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
/* FIXME: disabled because it still didn’t pass after applying #11267
|
||||||
async play({ canvasElement, args }) {
|
async play({ canvasElement, args }) {
|
||||||
const canvas = within(canvasElement);
|
if (lock) {
|
||||||
const a = canvas.getByRole<HTMLAnchorElement>('link');
|
console.warn('This test is unexpectedly running twice in parallel, fix it!');
|
||||||
await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
|
console.warn('See also: https://github.com/misskey-dev/misskey/issues/11267');
|
||||||
const img = within(a).getByRole('img');
|
await lock;
|
||||||
await expect(img).toBeInTheDocument();
|
|
||||||
let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
|
|
||||||
await expect(buttons).toHaveLength(1);
|
|
||||||
const i = buttons[0];
|
|
||||||
await expect(i).toBeInTheDocument();
|
|
||||||
await userEvent.click(i);
|
|
||||||
await waitFor(() => expect(canvasElement).toHaveTextContent(i18n.ts._ad.back));
|
|
||||||
await expect(a).not.toBeInTheDocument();
|
|
||||||
await expect(i).not.toBeInTheDocument();
|
|
||||||
buttons = canvas.getAllByRole<HTMLButtonElement>('button');
|
|
||||||
await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
|
|
||||||
const reduce = args.__hasReduce ? buttons[0] : null;
|
|
||||||
const back = buttons[args.__hasReduce ? 1 : 0];
|
|
||||||
if (reduce) {
|
|
||||||
await expect(reduce).toBeInTheDocument();
|
|
||||||
await expect(reduce).toHaveTextContent(i18n.ts._ad.reduceFrequencyOfThisAd);
|
|
||||||
}
|
}
|
||||||
await expect(back).toBeInTheDocument();
|
|
||||||
await expect(back).toHaveTextContent(i18n.ts._ad.back);
|
let resolve: (value?: any) => void;
|
||||||
await userEvent.click(back);
|
lock = new Promise(r => resolve = r);
|
||||||
await waitFor(() => expect(canvas.queryByRole('img')).toBeTruthy());
|
|
||||||
if (reduce) {
|
try {
|
||||||
await expect(reduce).not.toBeInTheDocument();
|
const canvas = within(canvasElement);
|
||||||
|
const a = canvas.getByRole<HTMLAnchorElement>('link');
|
||||||
|
await expect(a.href).toMatch(/^https?:\/\/.*#test$/);
|
||||||
|
const img = within(a).getByRole('img');
|
||||||
|
await expect(img).toBeInTheDocument();
|
||||||
|
let buttons = canvas.getAllByRole<HTMLButtonElement>('button');
|
||||||
|
await expect(buttons).toHaveLength(1);
|
||||||
|
const i = buttons[0];
|
||||||
|
await expect(i).toBeInTheDocument();
|
||||||
|
await userEvent.click(i);
|
||||||
|
await waitFor(() => expect(canvasElement).toHaveTextContent(i18n.ts._ad.back));
|
||||||
|
await expect(a).not.toBeInTheDocument();
|
||||||
|
await expect(i).not.toBeInTheDocument();
|
||||||
|
buttons = canvas.getAllByRole<HTMLButtonElement>('button');
|
||||||
|
await expect(buttons).toHaveLength(args.__hasReduce ? 2 : 1);
|
||||||
|
const reduce = args.__hasReduce ? buttons[0] : null;
|
||||||
|
const back = buttons[args.__hasReduce ? 1 : 0];
|
||||||
|
if (reduce) {
|
||||||
|
await expect(reduce).toBeInTheDocument();
|
||||||
|
await expect(reduce).toHaveTextContent(i18n.ts._ad.reduceFrequencyOfThisAd);
|
||||||
|
}
|
||||||
|
await expect(back).toBeInTheDocument();
|
||||||
|
await expect(back).toHaveTextContent(i18n.ts._ad.back);
|
||||||
|
await userEvent.click(back);
|
||||||
|
await waitFor(() => expect(canvas.queryByRole('img')).toBeTruthy());
|
||||||
|
if (reduce) {
|
||||||
|
await expect(reduce).not.toBeInTheDocument();
|
||||||
|
}
|
||||||
|
await expect(back).not.toBeInTheDocument();
|
||||||
|
const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
|
||||||
|
await expect(aAgain).toBeInTheDocument();
|
||||||
|
const imgAgain = within(aAgain).getByRole('img');
|
||||||
|
await expect(imgAgain).toBeInTheDocument();
|
||||||
|
} finally {
|
||||||
|
resolve!();
|
||||||
|
lock = undefined;
|
||||||
}
|
}
|
||||||
await expect(back).not.toBeInTheDocument();
|
|
||||||
const aAgain = canvas.getByRole<HTMLAnchorElement>('link');
|
|
||||||
await expect(aAgain).toBeInTheDocument();
|
|
||||||
const imgAgain = within(aAgain).getByRole('img');
|
|
||||||
await expect(imgAgain).toBeInTheDocument();
|
|
||||||
},
|
},
|
||||||
|
*/
|
||||||
args: {
|
args: {
|
||||||
prefer: [],
|
prefer: [],
|
||||||
specify: {
|
specify: {
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
<MkUserCardMini :user="file.user"/>
|
<MkUserCardMini :user="file.user"/>
|
||||||
</MkA>
|
</MkA>
|
||||||
<div>
|
<div>
|
||||||
<MkSwitch v-model="isSensitive" @update:modelValue="toggleIsSensitive">NSFW</MkSwitch>
|
<MkSwitch v-model="isSensitive" @update:modelValue="toggleIsSensitive">{{ i18n.ts.sensitive }}</MkSwitch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
@@ -110,7 +110,7 @@ const selectAll = () => {
|
|||||||
if (selectedEmojis.value.length > 0) {
|
if (selectedEmojis.value.length > 0) {
|
||||||
selectedEmojis.value = [];
|
selectedEmojis.value = [];
|
||||||
} else {
|
} else {
|
||||||
selectedEmojis.value = emojisPaginationComponent.value.items.map(item => item.id);
|
selectedEmojis.value = Array.from(emojisPaginationComponent.value.items.values()).map(item => item.id);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<MkButton rounded style="margin: 0 auto;" @click="changeImage">{{ i18n.ts.selectFile }}</MkButton>
|
<MkButton rounded style="margin: 0 auto;" @click="changeImage">{{ i18n.ts.selectFile }}</MkButton>
|
||||||
<MkInput v-model="name">
|
<MkInput v-model="name" pattern="[a-z0-9_]">
|
||||||
<template #label>{{ i18n.ts.name }}</template>
|
<template #label>{{ i18n.ts.name }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="category" :datalist="customEmojiCategories">
|
<MkInput v-model="category" :datalist="customEmojiCategories">
|
||||||
@@ -70,6 +70,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, watch } from 'vue';
|
import { computed, watch } from 'vue';
|
||||||
|
import * as misskey from 'misskey-js';
|
||||||
import MkModalWindow from '@/components/MkModalWindow.vue';
|
import MkModalWindow from '@/components/MkModalWindow.vue';
|
||||||
import MkButton from '@/components/MkButton.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import MkInput from '@/components/MkInput.vue';
|
import MkInput from '@/components/MkInput.vue';
|
||||||
@@ -95,7 +96,7 @@ let isSensitive = $ref(props.emoji ? props.emoji.isSensitive : false);
|
|||||||
let localOnly = $ref(props.emoji ? props.emoji.localOnly : false);
|
let localOnly = $ref(props.emoji ? props.emoji.localOnly : false);
|
||||||
let roleIdsThatCanBeUsedThisEmojiAsReaction = $ref(props.emoji ? props.emoji.roleIdsThatCanBeUsedThisEmojiAsReaction : []);
|
let roleIdsThatCanBeUsedThisEmojiAsReaction = $ref(props.emoji ? props.emoji.roleIdsThatCanBeUsedThisEmojiAsReaction : []);
|
||||||
let rolesThatCanBeUsedThisEmojiAsReaction = $ref([]);
|
let rolesThatCanBeUsedThisEmojiAsReaction = $ref([]);
|
||||||
let file = $ref();
|
let file = $ref<misskey.entities.DriveFile>();
|
||||||
|
|
||||||
watch($$(roleIdsThatCanBeUsedThisEmojiAsReaction), async () => {
|
watch($$(roleIdsThatCanBeUsedThisEmojiAsReaction), async () => {
|
||||||
rolesThatCanBeUsedThisEmojiAsReaction = (await Promise.all(roleIdsThatCanBeUsedThisEmojiAsReaction.map((id) => os.api('admin/roles/show', { roleId: id }).catch(() => null)))).filter(x => x != null);
|
rolesThatCanBeUsedThisEmojiAsReaction = (await Promise.all(roleIdsThatCanBeUsedThisEmojiAsReaction.map((id) => os.api('admin/roles/show', { roleId: id }).catch(() => null)))).filter(x => x != null);
|
||||||
@@ -110,6 +111,10 @@ const emit = defineEmits<{
|
|||||||
|
|
||||||
async function changeImage(ev) {
|
async function changeImage(ev) {
|
||||||
file = await selectFile(ev.currentTarget ?? ev.target, null);
|
file = await selectFile(ev.currentTarget ?? ev.target, null);
|
||||||
|
const candidate = file.name.replace(/\.(.+)$/, '');
|
||||||
|
if (candidate.match(/^[a-z0-9_]+$/)) {
|
||||||
|
name = candidate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addRole() {
|
async function addRole() {
|
||||||
|
@@ -258,6 +258,7 @@ watch([
|
|||||||
showGapBetweenNotesInTimeline,
|
showGapBetweenNotesInTimeline,
|
||||||
instanceTicker,
|
instanceTicker,
|
||||||
overridedDeviceKind,
|
overridedDeviceKind,
|
||||||
|
mediaListWithOneImageAppearance,
|
||||||
], async () => {
|
], async () => {
|
||||||
await reloadAsk();
|
await reloadAsk();
|
||||||
});
|
});
|
||||||
|
19
packages/frontend/src/scripts/collapsed.ts
Normal file
19
packages/frontend/src/scripts/collapsed.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import * as mfm from 'mfm-js';
|
||||||
|
import * as misskey from 'misskey-js';
|
||||||
|
import { extractUrlFromMfm } from './extract-url-from-mfm';
|
||||||
|
|
||||||
|
export function shouldCollapsed(note: misskey.entities.Note): boolean {
|
||||||
|
const urls = note.text ? extractUrlFromMfm(mfm.parse(note.text)) : null;
|
||||||
|
const collapsed = note.cw == null && note.text != null && (
|
||||||
|
(note.text.includes('$[x2')) ||
|
||||||
|
(note.text.includes('$[x3')) ||
|
||||||
|
(note.text.includes('$[x4')) ||
|
||||||
|
(note.text.includes('$[scale')) ||
|
||||||
|
(note.text.split('\n').length > 9) ||
|
||||||
|
(note.text.length > 500) ||
|
||||||
|
(note.files.length >= 5) ||
|
||||||
|
(!!urls && urls.length >= 4)
|
||||||
|
);
|
||||||
|
|
||||||
|
return collapsed;
|
||||||
|
}
|
@@ -2,7 +2,7 @@ const twemojiSvgBase = '/twemoji';
|
|||||||
const fluentEmojiPngBase = '/fluent-emoji';
|
const fluentEmojiPngBase = '/fluent-emoji';
|
||||||
|
|
||||||
export function char2twemojiFilePath(char: string): string {
|
export function char2twemojiFilePath(char: string): string {
|
||||||
let codes = Array.from(char).map(x => x.codePointAt(0)?.toString(16));
|
let codes = Array.from(char, x => x.codePointAt(0)?.toString(16));
|
||||||
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
|
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
|
||||||
codes = codes.filter(x => x && x.length);
|
codes = codes.filter(x => x && x.length);
|
||||||
const fileName = codes.join('-');
|
const fileName = codes.join('-');
|
||||||
@@ -10,7 +10,7 @@ export function char2twemojiFilePath(char: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function char2fluentEmojiFilePath(char: string): string {
|
export function char2fluentEmojiFilePath(char: string): string {
|
||||||
let codes = Array.from(char).map(x => x.codePointAt(0)?.toString(16));
|
let codes = Array.from(char, x => x.codePointAt(0)?.toString(16));
|
||||||
// Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25
|
// Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25
|
||||||
if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char);
|
if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char);
|
||||||
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
|
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
|
||||||
|
@@ -1,3 +1,20 @@
|
|||||||
|
const requestIdleCallback: typeof globalThis.requestIdleCallback = globalThis.requestIdleCallback ?? ((callback) => {
|
||||||
|
const start = performance.now();
|
||||||
|
const timeoutId = setTimeout(() => {
|
||||||
|
callback({
|
||||||
|
didTimeout: false, // polyfill でタイムアウト発火することはない
|
||||||
|
timeRemaining() {
|
||||||
|
const diff = performance.now() - start;
|
||||||
|
return Math.max(0, 50 - diff); // <https://www.w3.org/TR/requestidlecallback/#idle-periods>
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return timeoutId;
|
||||||
|
});
|
||||||
|
const cancelIdleCallback: typeof globalThis.cancelIdleCallback = globalThis.cancelIdleCallback ?? ((timeoutId) => {
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
});
|
||||||
|
|
||||||
class IdlingRenderScheduler {
|
class IdlingRenderScheduler {
|
||||||
#renderers: Set<FrameRequestCallback>;
|
#renderers: Set<FrameRequestCallback>;
|
||||||
#rafId: number;
|
#rafId: number;
|
||||||
|
@@ -12,7 +12,8 @@ export function chooseFileFromPc(multiple: boolean, keepOriginal = false): Promi
|
|||||||
input.type = 'file';
|
input.type = 'file';
|
||||||
input.multiple = multiple;
|
input.multiple = multiple;
|
||||||
input.onchange = () => {
|
input.onchange = () => {
|
||||||
const promises = Array.from(input.files).map(file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal));
|
if (!input.files) return res([]);
|
||||||
|
const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal));
|
||||||
|
|
||||||
Promise.all(promises).then(driveFiles => {
|
Promise.all(promises).then(driveFiles => {
|
||||||
res(driveFiles);
|
res(driveFiles);
|
||||||
|
@@ -6,11 +6,13 @@
|
|||||||
--marginHalf: 10px;
|
--marginHalf: 10px;
|
||||||
|
|
||||||
--margin: var(--marginFull);
|
--margin: var(--marginFull);
|
||||||
--minBottomSpacing: 0px;
|
|
||||||
|
// switch dynamically
|
||||||
|
--minBottomSpacingMobile: calc(72px + max(12px, env(safe-area-inset-bottom, 0px)));
|
||||||
|
--minBottomSpacing: var(--minBottomSpacingMobile);
|
||||||
|
|
||||||
@media (max-width: 500px) {
|
@media (max-width: 500px) {
|
||||||
--margin: var(--marginHalf);
|
--margin: var(--marginHalf);
|
||||||
--minBottomSpacing: calc(72px + max(12px, env(safe-area-inset-bottom, 0px)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--ad: rgb(255 169 0 / 10%);
|
//--ad: rgb(255 169 0 / 10%);
|
||||||
|
@@ -207,9 +207,11 @@ watch($$(navFooter), () => {
|
|||||||
if (navFooter) {
|
if (navFooter) {
|
||||||
navFooterHeight = navFooter.offsetHeight;
|
navFooterHeight = navFooter.offsetHeight;
|
||||||
document.body.style.setProperty('--stickyBottom', `${navFooterHeight}px`);
|
document.body.style.setProperty('--stickyBottom', `${navFooterHeight}px`);
|
||||||
|
document.body.style.setProperty('--minBottomSpacing', 'var(--minBottomSpacingMobile)');
|
||||||
} else {
|
} else {
|
||||||
navFooterHeight = 0;
|
navFooterHeight = 0;
|
||||||
document.body.style.setProperty('--stickyBottom', '0px');
|
document.body.style.setProperty('--stickyBottom', '0px');
|
||||||
|
document.body.style.setProperty('--minBottomSpacing', '0px');
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
246
pnpm-lock.yaml
generated
246
pnpm-lock.yaml
generated
@@ -368,9 +368,6 @@ importers:
|
|||||||
ulid:
|
ulid:
|
||||||
specifier: 2.3.0
|
specifier: 2.3.0
|
||||||
version: 2.3.0
|
version: 2.3.0
|
||||||
unzipper:
|
|
||||||
specifier: 0.10.14
|
|
||||||
version: 0.10.14
|
|
||||||
vary:
|
vary:
|
||||||
specifier: 1.1.2
|
specifier: 1.1.2
|
||||||
version: 1.1.2
|
version: 1.1.2
|
||||||
@@ -565,9 +562,6 @@ importers:
|
|||||||
'@types/tmp':
|
'@types/tmp':
|
||||||
specifier: 0.2.3
|
specifier: 0.2.3
|
||||||
version: 0.2.3
|
version: 0.2.3
|
||||||
'@types/unzipper':
|
|
||||||
specifier: 0.10.6
|
|
||||||
version: 0.10.6
|
|
||||||
'@types/vary':
|
'@types/vary':
|
||||||
specifier: 1.1.0
|
specifier: 1.1.0
|
||||||
version: 1.1.0
|
version: 1.1.0
|
||||||
@@ -908,9 +902,6 @@ importers:
|
|||||||
acorn:
|
acorn:
|
||||||
specifier: 8.10.0
|
specifier: 8.10.0
|
||||||
version: 8.10.0
|
version: 8.10.0
|
||||||
chokidar-cli:
|
|
||||||
specifier: 3.0.0
|
|
||||||
version: 3.0.0
|
|
||||||
cross-env:
|
cross-env:
|
||||||
specifier: 7.0.3
|
specifier: 7.0.3
|
||||||
version: 7.0.3
|
version: 7.0.3
|
||||||
@@ -941,6 +932,9 @@ importers:
|
|||||||
msw-storybook-addon:
|
msw-storybook-addon:
|
||||||
specifier: 1.8.0
|
specifier: 1.8.0
|
||||||
version: 1.8.0(msw@1.2.2)
|
version: 1.8.0(msw@1.2.2)
|
||||||
|
nodemon:
|
||||||
|
specifier: 3.0.1
|
||||||
|
version: 3.0.1
|
||||||
prettier:
|
prettier:
|
||||||
specifier: 3.0.0
|
specifier: 3.0.0
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
@@ -8381,12 +8375,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/unzipper@0.10.6:
|
|
||||||
resolution: {integrity: sha512-zcBj329AHgKLQyz209N/S9R0GZqXSkUQO4tJSYE3x02qg4JuDFpgKMj50r82Erk1natCWQDIvSccDddt7jPzjA==}
|
|
||||||
dependencies:
|
|
||||||
'@types/node': 20.4.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/uuid@9.0.2:
|
/@types/uuid@9.0.2:
|
||||||
resolution: {integrity: sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==}
|
resolution: {integrity: sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -9048,11 +9036,6 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/ansi-regex@4.1.1:
|
|
||||||
resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/ansi-regex@5.0.1:
|
/ansi-regex@5.0.1:
|
||||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -9731,6 +9714,7 @@ packages:
|
|||||||
/big-integer@1.6.51:
|
/big-integer@1.6.51:
|
||||||
resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
|
resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
|
||||||
engines: {node: '>=0.6'}
|
engines: {node: '>=0.6'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/bin-check@4.1.0:
|
/bin-check@4.1.0:
|
||||||
resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
|
resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
|
||||||
@@ -9761,13 +9745,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
|
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
/binary@0.3.0:
|
|
||||||
resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==}
|
|
||||||
dependencies:
|
|
||||||
buffers: 0.1.1
|
|
||||||
chainsaw: 0.1.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/binaryextensions@2.3.0:
|
/binaryextensions@2.3.0:
|
||||||
resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
|
resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
|
||||||
engines: {node: '>=0.8'}
|
engines: {node: '>=0.8'}
|
||||||
@@ -9784,10 +9761,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
|
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/bluebird@3.4.7:
|
|
||||||
resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/bluebird@3.7.2:
|
/bluebird@3.7.2:
|
||||||
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
|
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -9930,11 +9903,6 @@ packages:
|
|||||||
/buffer-from@1.1.2:
|
/buffer-from@1.1.2:
|
||||||
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
||||||
|
|
||||||
/buffer-indexof-polyfill@1.0.2:
|
|
||||||
resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==}
|
|
||||||
engines: {node: '>=0.10'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/buffer-writer@2.0.0:
|
/buffer-writer@2.0.0:
|
||||||
resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==}
|
resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -9960,11 +9928,6 @@ packages:
|
|||||||
ieee754: 1.2.1
|
ieee754: 1.2.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/buffers@0.1.1:
|
|
||||||
resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==}
|
|
||||||
engines: {node: '>=0.2.0'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/bufferutil@4.0.7:
|
/bufferutil@4.0.7:
|
||||||
resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==}
|
resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==}
|
||||||
engines: {node: '>=6.14.2'}
|
engines: {node: '>=6.14.2'}
|
||||||
@@ -10185,12 +10148,6 @@ packages:
|
|||||||
type-detect: 4.0.8
|
type-detect: 4.0.8
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/chainsaw@0.1.0:
|
|
||||||
resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==}
|
|
||||||
dependencies:
|
|
||||||
traverse: 0.3.9
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/chalk-template@1.1.0:
|
/chalk-template@1.1.0:
|
||||||
resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==}
|
resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==}
|
||||||
engines: {node: '>=14.16'}
|
engines: {node: '>=14.16'}
|
||||||
@@ -10344,17 +10301,6 @@ packages:
|
|||||||
parse5: 7.1.2
|
parse5: 7.1.2
|
||||||
parse5-htmlparser2-tree-adapter: 7.0.0
|
parse5-htmlparser2-tree-adapter: 7.0.0
|
||||||
|
|
||||||
/chokidar-cli@3.0.0:
|
|
||||||
resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==}
|
|
||||||
engines: {node: '>= 8.10.0'}
|
|
||||||
hasBin: true
|
|
||||||
dependencies:
|
|
||||||
chokidar: 3.5.3
|
|
||||||
lodash.debounce: 4.0.8
|
|
||||||
lodash.throttle: 4.1.1
|
|
||||||
yargs: 13.3.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/chokidar@3.5.3:
|
/chokidar@3.5.3:
|
||||||
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
|
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
|
||||||
engines: {node: '>= 8.10.0'}
|
engines: {node: '>= 8.10.0'}
|
||||||
@@ -10465,14 +10411,6 @@ packages:
|
|||||||
wrap-ansi: 2.1.0
|
wrap-ansi: 2.1.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/cliui@5.0.0:
|
|
||||||
resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
|
|
||||||
dependencies:
|
|
||||||
string-width: 3.1.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
wrap-ansi: 5.1.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/cliui@6.0.0:
|
/cliui@6.0.0:
|
||||||
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
|
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -11081,6 +11019,17 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.0.0
|
ms: 2.0.0
|
||||||
|
|
||||||
|
/debug@3.2.7(supports-color@5.5.0):
|
||||||
|
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
|
||||||
|
peerDependencies:
|
||||||
|
supports-color: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
supports-color:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
ms: 2.1.3
|
||||||
|
supports-color: 5.5.0
|
||||||
|
|
||||||
/debug@3.2.7(supports-color@8.1.1):
|
/debug@3.2.7(supports-color@8.1.1):
|
||||||
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
|
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -11091,6 +11040,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
supports-color: 8.1.1
|
supports-color: 8.1.1
|
||||||
|
dev: true
|
||||||
|
|
||||||
/debug@4.3.4(supports-color@8.1.1):
|
/debug@4.3.4(supports-color@8.1.1):
|
||||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||||
@@ -11446,12 +11396,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
|
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
/duplexer2@0.1.4:
|
|
||||||
resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
|
|
||||||
dependencies:
|
|
||||||
readable-stream: 2.3.7
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/duplexer@0.1.2:
|
/duplexer@0.1.2:
|
||||||
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
|
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -11516,10 +11460,6 @@ packages:
|
|||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/emoji-regex@7.0.3:
|
|
||||||
resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/emoji-regex@8.0.0:
|
/emoji-regex@8.0.0:
|
||||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||||
|
|
||||||
@@ -11829,7 +11769,7 @@ packages:
|
|||||||
/eslint-import-resolver-node@0.3.7:
|
/eslint-import-resolver-node@0.3.7:
|
||||||
resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
|
resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7(supports-color@8.1.1)
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
is-core-module: 2.11.0
|
is-core-module: 2.11.0
|
||||||
resolve: 1.22.1
|
resolve: 1.22.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -11858,7 +11798,7 @@ packages:
|
|||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/parser': 5.61.0(eslint@8.45.0)(typescript@5.1.6)
|
'@typescript-eslint/parser': 5.61.0(eslint@8.45.0)(typescript@5.1.6)
|
||||||
debug: 3.2.7(supports-color@8.1.1)
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
eslint: 8.45.0
|
eslint: 8.45.0
|
||||||
eslint-import-resolver-node: 0.3.7
|
eslint-import-resolver-node: 0.3.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -11879,7 +11819,7 @@ packages:
|
|||||||
array-includes: 3.1.6
|
array-includes: 3.1.6
|
||||||
array.prototype.flat: 1.3.1
|
array.prototype.flat: 1.3.1
|
||||||
array.prototype.flatmap: 1.3.1
|
array.prototype.flatmap: 1.3.1
|
||||||
debug: 3.2.7(supports-color@8.1.1)
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
eslint: 8.45.0
|
eslint: 8.45.0
|
||||||
eslint-import-resolver-node: 0.3.7
|
eslint-import-resolver-node: 0.3.7
|
||||||
@@ -12921,16 +12861,6 @@ packages:
|
|||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/fstream@1.0.12:
|
|
||||||
resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
|
|
||||||
engines: {node: '>=0.6'}
|
|
||||||
dependencies:
|
|
||||||
graceful-fs: 4.2.11
|
|
||||||
inherits: 2.0.4
|
|
||||||
mkdirp: 0.5.6
|
|
||||||
rimraf: 2.7.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/function-bind@1.1.1:
|
/function-bind@1.1.1:
|
||||||
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
||||||
|
|
||||||
@@ -13498,7 +13428,6 @@ packages:
|
|||||||
/has-flag@3.0.0:
|
/has-flag@3.0.0:
|
||||||
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
|
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/has-flag@4.0.0:
|
/has-flag@4.0.0:
|
||||||
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
||||||
@@ -13715,7 +13644,7 @@ packages:
|
|||||||
engines: {node: '>= 4.5.0'}
|
engines: {node: '>= 4.5.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 4.3.0
|
agent-base: 4.3.0
|
||||||
debug: 3.2.7(supports-color@8.1.1)
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
@@ -13788,6 +13717,10 @@ packages:
|
|||||||
/ieee754@1.2.1:
|
/ieee754@1.2.1:
|
||||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||||
|
|
||||||
|
/ignore-by-default@1.0.1:
|
||||||
|
resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/ignore@5.2.4:
|
/ignore@5.2.4:
|
||||||
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
||||||
engines: {node: '>= 4'}
|
engines: {node: '>= 4'}
|
||||||
@@ -14143,11 +14076,6 @@ packages:
|
|||||||
number-is-nan: 1.0.1
|
number-is-nan: 1.0.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/is-fullwidth-code-point@2.0.0:
|
|
||||||
resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/is-fullwidth-code-point@3.0.0:
|
/is-fullwidth-code-point@3.0.0:
|
||||||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -15466,10 +15394,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/listenercount@1.0.1:
|
|
||||||
resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/listr2@3.14.0(enquirer@2.3.6):
|
/listr2@3.14.0(enquirer@2.3.6):
|
||||||
resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
|
resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
|
||||||
engines: {node: '>=10.0.0'}
|
engines: {node: '>=10.0.0'}
|
||||||
@@ -15569,10 +15493,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
|
resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/lodash.throttle@4.1.1:
|
|
||||||
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/lodash.union@4.6.0:
|
/lodash.union@4.6.0:
|
||||||
resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
|
resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -16318,7 +16238,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
|
resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
|
||||||
engines: {node: '>= 4.4.x'}
|
engines: {node: '>= 4.4.x'}
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7(supports-color@8.1.1)
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
iconv-lite: 0.4.24
|
iconv-lite: 0.4.24
|
||||||
sax: 1.2.4
|
sax: 1.2.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -16461,10 +16381,34 @@ packages:
|
|||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/nodemon@3.0.1:
|
||||||
|
resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
chokidar: 3.5.3
|
||||||
|
debug: 3.2.7(supports-color@5.5.0)
|
||||||
|
ignore-by-default: 1.0.1
|
||||||
|
minimatch: 3.1.2
|
||||||
|
pstree.remy: 1.1.8
|
||||||
|
semver: 7.5.4
|
||||||
|
simple-update-notifier: 2.0.0
|
||||||
|
supports-color: 5.5.0
|
||||||
|
touch: 3.1.0
|
||||||
|
undefsafe: 2.0.5
|
||||||
|
dev: true
|
||||||
|
|
||||||
/nofilter@3.1.0:
|
/nofilter@3.1.0:
|
||||||
resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
|
resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
|
||||||
engines: {node: '>=12.19'}
|
engines: {node: '>=12.19'}
|
||||||
|
|
||||||
|
/nopt@1.0.10:
|
||||||
|
resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
abbrev: 1.1.1
|
||||||
|
dev: true
|
||||||
|
|
||||||
/nopt@5.0.0:
|
/nopt@5.0.0:
|
||||||
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
|
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -17869,6 +17813,10 @@ packages:
|
|||||||
/psl@1.9.0:
|
/psl@1.9.0:
|
||||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
||||||
|
|
||||||
|
/pstree.remy@1.1.8:
|
||||||
|
resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/pug-attrs@3.0.0:
|
/pug-attrs@3.0.0:
|
||||||
resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==}
|
resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -18631,6 +18579,7 @@ packages:
|
|||||||
|
|
||||||
/require-main-filename@2.0.0:
|
/require-main-filename@2.0.0:
|
||||||
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
|
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/requires-port@1.0.0:
|
/requires-port@1.0.0:
|
||||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
||||||
@@ -19126,6 +19075,13 @@ packages:
|
|||||||
semver: 7.0.0
|
semver: 7.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/simple-update-notifier@2.0.0:
|
||||||
|
resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
dependencies:
|
||||||
|
semver: 7.5.4
|
||||||
|
dev: true
|
||||||
|
|
||||||
/sinon@14.0.2:
|
/sinon@14.0.2:
|
||||||
resolution: {integrity: sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==}
|
resolution: {integrity: sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19652,15 +19608,6 @@ packages:
|
|||||||
strip-ansi: 3.0.1
|
strip-ansi: 3.0.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/string-width@3.1.0:
|
|
||||||
resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
dependencies:
|
|
||||||
emoji-regex: 7.0.3
|
|
||||||
is-fullwidth-code-point: 2.0.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/string-width@4.2.3:
|
/string-width@4.2.3:
|
||||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -19721,13 +19668,6 @@ packages:
|
|||||||
ansi-regex: 2.1.1
|
ansi-regex: 2.1.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/strip-ansi@5.2.0:
|
|
||||||
resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
dependencies:
|
|
||||||
ansi-regex: 4.1.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/strip-ansi@6.0.1:
|
/strip-ansi@6.0.1:
|
||||||
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -19826,7 +19766,6 @@ packages:
|
|||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
dependencies:
|
dependencies:
|
||||||
has-flag: 3.0.0
|
has-flag: 3.0.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/supports-color@7.2.0:
|
/supports-color@7.2.0:
|
||||||
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
||||||
@@ -20194,6 +20133,13 @@ packages:
|
|||||||
ieee754: 1.2.1
|
ieee754: 1.2.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/touch@3.1.0:
|
||||||
|
resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
nopt: 1.0.10
|
||||||
|
dev: true
|
||||||
|
|
||||||
/tough-cookie@2.5.0:
|
/tough-cookie@2.5.0:
|
||||||
resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
|
resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
|
||||||
engines: {node: '>=0.8'}
|
engines: {node: '>=0.8'}
|
||||||
@@ -20224,10 +20170,6 @@ packages:
|
|||||||
/trace-redirect@1.0.6:
|
/trace-redirect@1.0.6:
|
||||||
resolution: {integrity: sha512-UUfa1DjjU5flcjMdaFIiIEGDTyu2y/IiMjOX4uGXa7meKBS4vD4f2Uy/tken9Qkd4Jsm4sRsfZcIIPqrRVF3Mg==}
|
resolution: {integrity: sha512-UUfa1DjjU5flcjMdaFIiIEGDTyu2y/IiMjOX4uGXa7meKBS4vD4f2Uy/tken9Qkd4Jsm4sRsfZcIIPqrRVF3Mg==}
|
||||||
|
|
||||||
/traverse@0.3.9:
|
|
||||||
resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/trim-newlines@3.0.1:
|
/trim-newlines@3.0.1:
|
||||||
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -20526,6 +20468,10 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/undefsafe@2.0.5:
|
||||||
|
resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/undertaker-registry@1.0.1:
|
/undertaker-registry@1.0.1:
|
||||||
resolution: {integrity: sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==}
|
resolution: {integrity: sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==}
|
||||||
engines: {node: '>= 0.10'}
|
engines: {node: '>= 0.10'}
|
||||||
@@ -20700,21 +20646,6 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/unzipper@0.10.14:
|
|
||||||
resolution: {integrity: sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==}
|
|
||||||
dependencies:
|
|
||||||
big-integer: 1.6.51
|
|
||||||
binary: 0.3.0
|
|
||||||
bluebird: 3.4.7
|
|
||||||
buffer-indexof-polyfill: 1.0.2
|
|
||||||
duplexer2: 0.1.4
|
|
||||||
fstream: 1.0.12
|
|
||||||
graceful-fs: 4.2.11
|
|
||||||
listenercount: 1.0.1
|
|
||||||
readable-stream: 2.3.7
|
|
||||||
setimmediate: 1.0.5
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/update-browserslist-db@1.0.11(browserslist@4.21.9):
|
/update-browserslist-db@1.0.11(browserslist@4.21.9):
|
||||||
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
|
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -21285,6 +21216,7 @@ packages:
|
|||||||
|
|
||||||
/which-module@2.0.0:
|
/which-module@2.0.0:
|
||||||
resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
|
resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/which-typed-array@1.1.9:
|
/which-typed-array@1.1.9:
|
||||||
resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
|
resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
|
||||||
@@ -21352,15 +21284,6 @@ packages:
|
|||||||
strip-ansi: 3.0.1
|
strip-ansi: 3.0.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/wrap-ansi@5.1.0:
|
|
||||||
resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
dependencies:
|
|
||||||
ansi-styles: 3.2.1
|
|
||||||
string-width: 3.1.0
|
|
||||||
strip-ansi: 5.2.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/wrap-ansi@6.2.0:
|
/wrap-ansi@6.2.0:
|
||||||
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -21475,6 +21398,7 @@ packages:
|
|||||||
|
|
||||||
/y18n@4.0.3:
|
/y18n@4.0.3:
|
||||||
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
|
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/y18n@5.0.8:
|
/y18n@5.0.8:
|
||||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
||||||
@@ -21494,13 +21418,6 @@ packages:
|
|||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/yargs-parser@13.1.2:
|
|
||||||
resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
|
|
||||||
dependencies:
|
|
||||||
camelcase: 5.3.1
|
|
||||||
decamelize: 1.2.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/yargs-parser@18.1.3:
|
/yargs-parser@18.1.3:
|
||||||
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
|
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -21524,21 +21441,6 @@ packages:
|
|||||||
object.assign: 4.1.4
|
object.assign: 4.1.4
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/yargs@13.3.2:
|
|
||||||
resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
|
|
||||||
dependencies:
|
|
||||||
cliui: 5.0.0
|
|
||||||
find-up: 3.0.0
|
|
||||||
get-caller-file: 2.0.5
|
|
||||||
require-directory: 2.1.1
|
|
||||||
require-main-filename: 2.0.0
|
|
||||||
set-blocking: 2.0.0
|
|
||||||
string-width: 3.1.0
|
|
||||||
which-module: 2.0.0
|
|
||||||
y18n: 4.0.3
|
|
||||||
yargs-parser: 13.1.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/yargs@15.4.1:
|
/yargs@15.4.1:
|
||||||
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
|
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
Reference in New Issue
Block a user