Merge branch 'develop' into sw-notification-action

This commit is contained in:
tamaina 2021-08-11 22:53:07 +09:00
commit 90b735f588
938 changed files with 33452 additions and 464 deletions

View file

@ -1 +1,12 @@
see [releases](https://github.com/misskey-dev/misskey/releases) ## 12.86.0 (2021/08/11)
### Improvements
- ドキュメントの更新
- ドキュメントにchangelogを追加
- ぼかし効果のオプションを追加
- Vueを3.2.1に更新
- UIの調整
### Bugfixes
- ハッシュタグ入力が空のときに#が付くのを修正
- フォローリクエストのEメール通知を修正

View file

@ -2,6 +2,6 @@ files:
- source: /locales/ja-JP.yml - source: /locales/ja-JP.yml
translation: /locales/%locale%.yml translation: /locales/%locale%.yml
update_option: update_as_unapproved update_option: update_as_unapproved
- source: /src/docs/ja-JP/*.md - source: /src/docs/ja-JP/**/*.md
translation: /src/docs/%locale%/%original_file_name% translation: /src/docs/%locale%/**/%original_file_name%
update_option: update_as_unapproved update_option: update_as_unapproved

View file

@ -111,6 +111,7 @@ editWidgets: "Upravit widget"
editWidgetsExit: "Hotovo" editWidgetsExit: "Hotovo"
customEmojis: "Vlastní emoji" customEmojis: "Vlastní emoji"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Jméno emoji" emojiName: "Jméno emoji"
emojiUrl: "URL obrázku" emojiUrl: "URL obrázku"
addEmoji: "Přidat emoji" addEmoji: "Přidat emoji"

View file

@ -128,6 +128,7 @@ editWidgets: "Widgets bearbeiten"
editWidgetsExit: "Fertig" editWidgetsExit: "Fertig"
customEmojis: "Benutzerdefinierte Emojis" customEmojis: "Benutzerdefinierte Emojis"
emoji: "Emojis" emoji: "Emojis"
emojis: "Emojis"
emojiName: "Emojiname" emojiName: "Emojiname"
emojiUrl: "Emoji-URL" emojiUrl: "Emoji-URL"
addEmoji: "Emoji hinzufügen" addEmoji: "Emoji hinzufügen"
@ -158,8 +159,8 @@ annotation: "Anmerkung"
federation: "Föderation" federation: "Föderation"
instances: "Instanzen" instances: "Instanzen"
registeredAt: "Registriert am" registeredAt: "Registriert am"
latestRequestSentAt: "Letzte Anfrage gesendet am" latestRequestSentAt: "Letzte Anfrage gesendet"
latestRequestReceivedAt: "Letzte Anfrage erhalten am" latestRequestReceivedAt: "Letzte Anfrage erhalten"
latestStatus: "Neuster Status" latestStatus: "Neuster Status"
storageUsage: "Verbrauchter Speicherplatz" storageUsage: "Verbrauchter Speicherplatz"
charts: "Diagramme" charts: "Diagramme"
@ -776,6 +777,7 @@ _docs:
generalTopics: "Allgemeine Themen" generalTopics: "Allgemeine Themen"
advancedTopics: "Erweiterte Themen" advancedTopics: "Erweiterte Themen"
admin: "Administration" admin: "Administration"
translateWarn: "Dies ist ein übersetztes Dokument. Es kann zu Unterschieden mit dem Original kommen."
_ad: _ad:
back: "Zurück" back: "Zurück"
reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen" reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen"
@ -1642,4 +1644,4 @@ _deck:
antenna: "Antennen" antenna: "Antennen"
list: "Listen" list: "Listen"
mentions: "Erwähnungen" mentions: "Erwähnungen"
direct: "Direkt" direct: "Direktnachrichten"

View file

@ -128,6 +128,7 @@ editWidgets: "Edit widgets"
editWidgetsExit: "Done" editWidgetsExit: "Done"
customEmojis: "Custom Emoji" customEmojis: "Custom Emoji"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Emoji name" emojiName: "Emoji name"
emojiUrl: "Emoji URL" emojiUrl: "Emoji URL"
addEmoji: "Add an emoji" addEmoji: "Add an emoji"
@ -158,8 +159,8 @@ annotation: "Comments"
federation: "Federation" federation: "Federation"
instances: "Instances" instances: "Instances"
registeredAt: "Registered at" registeredAt: "Registered at"
latestRequestSentAt: "Last request sent at" latestRequestSentAt: "Last request sent"
latestRequestReceivedAt: "Last request received at" latestRequestReceivedAt: "Last request received"
latestStatus: "Latest status" latestStatus: "Latest status"
storageUsage: "Storage usage" storageUsage: "Storage usage"
charts: "Charts" charts: "Charts"
@ -729,7 +730,7 @@ userInfo: "User information"
unknown: "Unknown" unknown: "Unknown"
onlineStatus: "Online status" onlineStatus: "Online status"
hideOnlineStatus: "Hide online status" hideOnlineStatus: "Hide online status"
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some functions such as the search." hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some features such as the search."
online: "Online" online: "Online"
active: "Active" active: "Active"
offline: "Offline" offline: "Offline"
@ -776,6 +777,7 @@ _docs:
generalTopics: "General topics" generalTopics: "General topics"
advancedTopics: "Advanced Topics" advancedTopics: "Advanced Topics"
admin: "Administration" admin: "Administration"
translateWarn: "This is a translated document. Its contents may differ from the original."
_ad: _ad:
back: "Back" back: "Back"
reduceFrequencyOfThisAd: "Show this ad less" reduceFrequencyOfThisAd: "Show this ad less"
@ -1076,7 +1078,7 @@ _2fa:
_permissions: _permissions:
"read:account": "View your account information" "read:account": "View your account information"
"write:account": "Edit your account information" "write:account": "Edit your account information"
"read:blocks": "View your list of blocked users" "read:blocks": "View the list of people you blocked"
"write:blocks": "Edit your list of blocked users" "write:blocks": "Edit your list of blocked users"
"read:drive": "Access your drive files and folders" "read:drive": "Access your drive files and folders"
"write:drive": "Edit or delete your drive files and folders" "write:drive": "Edit or delete your drive files and folders"
@ -1620,7 +1622,7 @@ _notification:
receiveFollowRequest: "Received follow requests" receiveFollowRequest: "Received follow requests"
followRequestAccepted: "Accepted follow requests" followRequestAccepted: "Accepted follow requests"
groupInvited: "Group invitations" groupInvited: "Group invitations"
app: "Notifications from apps" app: "Notifications from linked apps"
_deck: _deck:
alwaysShowMainColumn: "Always show main column" alwaysShowMainColumn: "Always show main column"
columnAlign: "Align columns" columnAlign: "Align columns"
@ -1642,4 +1644,4 @@ _deck:
antenna: "Antennas" antenna: "Antennas"
list: "List" list: "List"
mentions: "Mentions" mentions: "Mentions"
direct: "Direct" direct: "Direct notes"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Esperanto" _lang_: "Esperanto"
headlineMisskey: "Reto ligiĝanta per notoj" headlineMisskey: "Reto ligiĝanta per notoj"
introMisskey: "Bonvenon! Misskey (Ĉi-sekve Miskejo) estas malfermitkoda malcentriza mikrobloga servo.\nKreu \"noto\"n por ke kunhavu tion kio nun okazas aŭ ke eksendu tion kio pri vi📡\nFunkcion \"reago\" vi povas uzi kaj aldoni vian reagon pri ciu noto de ĉiu homo👍\nVolu esplori nova mondo🚀" introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentriza mikrobloga servo.\nKreu \"noto\"n por kunhavu tion ke nun okazas, aŭ por dissendu pri vi📡\nPer la funkcio \"reago\" vi ankaŭ povas rapide esprimi vian senton pri ĉies noto👍\nVolu esplori nova mondo🚀"
monthAndDay: "{day}-a/{month}" monthAndDay: "{day}-a/{month}"
search: "Serĉi" search: "Serĉi"
notifications: "Sciigoj" notifications: "Sciigoj"
@ -23,7 +23,7 @@ otherSettings: "Aliaj agordoj"
openInWindow: "Malfermi en nova fenestro" openInWindow: "Malfermi en nova fenestro"
profile: "Profilo" profile: "Profilo"
timeline: "Templinio" timeline: "Templinio"
noAccountDescription: "Tiu uzanto ne enhavas biografion je la profilo." noAccountDescription: "Tiu uzanto ankoraŭ ne skribis biografieton"
login: "Ensaluti" login: "Ensaluti"
loggingIn: "Ensalutado..." loggingIn: "Ensalutado..."
logout: "Elsaluti" logout: "Elsaluti"
@ -43,8 +43,8 @@ unpin: "Depingli"
copyContent: "Kopii enhavon" copyContent: "Kopii enhavon"
copyLink: "Kopii ligilon" copyLink: "Kopii ligilon"
delete: "Forviŝi" delete: "Forviŝi"
deleteAndEdit: "Foriginte redakti" deleteAndEdit: "Forigi kaj redakti"
deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi la noton kaj redakti ĝin? Ĉiuj reagoj, renotoj, kaj respondoj ankaŭ foriĝos." deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi kaj redakti la noton? Ĉiuj reagoj, renotoj, kaj respondoj ankaŭ foriĝos."
addToList: "Aldoni al la listo" addToList: "Aldoni al la listo"
sendMessage: "Sendi mesaĝon" sendMessage: "Sendi mesaĝon"
copyUsername: "Kopii uzantnomon" copyUsername: "Kopii uzantnomon"
@ -62,7 +62,7 @@ import: "Importi"
export: "Eksporti" export: "Eksporti"
files: "Dosieroj" files: "Dosieroj"
download: "Elŝuti" download: "Elŝuti"
driveFileDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la dosierujon {name}? Noto aldonita ĝin ankaŭ foriĝos." driveFileDeleteConfirm: "Ĉu vi certas, ke vi volas forviŝi la dosieron \"{name}\"? Ankaŭ notoj kiu enhavas ĝin forviŝiĝos."
unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}'(o)n?" unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}'(o)n?"
lists: "Listoj" lists: "Listoj"
noLists: "Neniu listo" noLists: "Neniu listo"
@ -113,10 +113,12 @@ editWidgets: "Redakti fenestraĵon"
editWidgetsExit: "Fini la redaktadon" editWidgetsExit: "Fini la redaktadon"
customEmojis: "Personecigitaj emoĵioj" customEmojis: "Personecigitaj emoĵioj"
emoji: "Emoĵio" emoji: "Emoĵio"
emojis: "Emoĵio"
emojiName: "Nomo de emoĵio" emojiName: "Nomo de emoĵio"
emojiUrl: "URL de la bildo de emoĵio" emojiUrl: "URL de la bildo de emoĵio"
addEmoji: "Aldoni emoĵion" addEmoji: "Aldoni emoĵion"
cacheRemoteFiles: "Havi staplon por foraj dosieroj" settingGuide: "Rekomendaj agordoj"
cacheRemoteFiles: "Havi staplon por transaj dosieroj"
flagAsBot: "Tiu uzanto estas roboto" flagAsBot: "Tiu uzanto estas roboto"
flagAsCat: "Tiu uzanto estas kato" flagAsCat: "Tiu uzanto estas kato"
addAccount: "Aldoni konton" addAccount: "Aldoni konton"
@ -127,7 +129,7 @@ youHaveNoLists: "Vi ne havas listojn."
followConfirm: "Ĉu vi certas ke vi volas sekvi {name}'(o)n?" followConfirm: "Ĉu vi certas ke vi volas sekvi {name}'(o)n?"
selectUser: "Elekti uzanton" selectUser: "Elekti uzanton"
annotation: "Komentarioj" annotation: "Komentarioj"
federation: "Fediverso" federation: "Konfederacio"
instances: "Ekzemplo" instances: "Ekzemplo"
perHour: "Po horo" perHour: "Po horo"
perDay: "Po tago" perDay: "Po tago"
@ -135,19 +137,19 @@ blockThisInstance: "Bloki tiu ekzemplo"
withNFiles: "{n} dosiero(j)" withNFiles: "{n} dosiero(j)"
disk: "Diskilo" disk: "Diskilo"
instanceInfo: "Informo pri la ekzemplo" instanceInfo: "Informo pri la ekzemplo"
clearCachedFiles: "Forviŝi datumon en staplo" clearCachedFiles: "Malplenigi la staplon"
clearCachedFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn transajn dosierojn en la staplo?" clearCachedFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn transajn dosierojn en la staplo?"
blockedInstances: "Blokataj ekzemploj" blockedInstances: "Blokataj ekzemploj"
muteAndBlock: "Silentitaj / Blokitaj" muteAndBlock: "Silentigatoj kaj blokatoj"
mutedUsers: "Silentigitaj uzantoj" mutedUsers: "Silentigataj uzantoj"
blockedUsers: "Blokitaj uzantoj" blockedUsers: "Blokataj uzantoj"
noUsers: "Sen uzantoj" noUsers: "Sen uzantoj"
editProfile: "Redakti profilon" editProfile: "Redakti profilon"
noteDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la noton?" noteDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la noton?"
pinLimitExceeded: "Vi ne plu povas alpingli noton." pinLimitExceeded: "Vi ne plu povas alpingli noton."
noCustomEmojis: "Neniu emoĵio" noCustomEmojis: "Neniu emoĵio"
federating: "Konfederado" federating: "Konfederado"
blocked: "Blokita" blocked: "Blokata"
subscribing: "Abonita" subscribing: "Abonita"
notResponding: "Alvokato ne disponeblas" notResponding: "Alvokato ne disponeblas"
instanceFollowing: "Sekvatoj sur la ekzemplo" instanceFollowing: "Sekvatoj sur la ekzemplo"
@ -168,14 +170,14 @@ removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"'(o)n?"
deleteAreYouSure: "Ĉu vi certas ke vi volas forviŝi \"{x}\"'(o)n?" deleteAreYouSure: "Ĉu vi certas ke vi volas forviŝi \"{x}\"'(o)n?"
messaging: "Retbabili" messaging: "Retbabili"
upload: "Alŝuti" upload: "Alŝuti"
fromDrive: "De la diskingo en Miskejo" fromDrive: "De la diskingo"
fromUrl: "De URL" fromUrl: "De URL"
uploadFromUrl: "Alŝuti de URL" uploadFromUrl: "Alŝuti de URL"
uploadFromUrlDescription: "URL de la dosiero kiun vi volu alŝuti" uploadFromUrlDescription: "URL de la dosiero kiun vi volu alŝuti"
games: "Ludoj sur Miskejo" games: "Ludoj sur Misskey"
messageRead: "Legita" messageRead: "Legita"
startMessaging: "Komenci babiladon" startMessaging: "Komenci babiladon"
tos: "Kondiĉoj de Uzado" tos: "Kondiĉoj de uzado"
start: "Komenciĝi" start: "Komenciĝi"
home: "Hejmo" home: "Hejmo"
remoteUserCaution: "Ĉi tiu Infomoj estas ne tute ekzakta pro distanca uzanto." remoteUserCaution: "Ĉi tiu Infomoj estas ne tute ekzakta pro distanca uzanto."
@ -191,11 +193,11 @@ folderName: "Nomo de la dosierujo"
renameFolder: "Alinomi la dosierujon" renameFolder: "Alinomi la dosierujon"
deleteFolder: "Forviŝi dosierujon" deleteFolder: "Forviŝi dosierujon"
addFile: "Aldoni dosieron" addFile: "Aldoni dosieron"
emptyDrive: "La diskingo enhavas neniun." emptyDrive: "La diskingo malplenas."
unableToDelete: "Ne forigebla" unableToDelete: "Ne forigebla"
inputNewFileName: "Entajpu nova dosiernomon" inputNewFileName: "Entajpu nova dosiernomon"
inputNewFolderName: "Entajpu nova nomon de la dosierujo" inputNewFolderName: "Entajpu nova nomon de la dosierujo"
hasChildFilesOrFolders: "La dosierujo enhavas dosieron kaj ne estas forigebla." hasChildFilesOrFolders: "La dosierujo ne estas forviŝebla, ĉar ĝi ne malplenas."
copyUrl: "Kopii URL" copyUrl: "Kopii URL"
rename: "Alinomi" rename: "Alinomi"
avatar: "Ikono" avatar: "Ikono"
@ -221,16 +223,20 @@ name: "Nomo"
withFileAntenna: "Nur kun aldonaĵo" withFileAntenna: "Nur kun aldonaĵo"
notesAndReplies: "Kun respondoj" notesAndReplies: "Kun respondoj"
withFiles: "Kun aldonaĵo" withFiles: "Kun aldonaĵo"
silenceConfirm: "Ĉu vi certas ke vi volas silentigi la uzanton?" silence: "Mutigi"
unsilenceConfirm: "Ĉu vi certas, ke vi ne plu volas ke la uzanto silentas?" silenceConfirm: "Ĉu vi certas ke vi volas mutigi la uzanton?"
unsilence: "Malmutigi"
unsilenceConfirm: "Ĉu vi certas ke vi volas malmutigi la uzanton?"
recentlyUpdatedUsers: "Uzantoj kiu lastatempe faris noton"
recentlyRegisteredUsers: "Nove aniĝintaj uzantoj"
popularTags: "Popularaj kradvortoj" popularTags: "Popularaj kradvortoj"
userList: "Listoj" userList: "Listoj"
aboutMisskey: "Pri Miskejo" aboutMisskey: "Pri Misskey"
securityKeyName: "Nomo de la ŝlosilo" securityKeyName: "Nomo de la ŝlosilo"
passwordLessLogin: "Ensaluti sen pasvorto" passwordLessLogin: "Ensaluti sen pasvorto"
resetPassword: "Restarigi pasvorton" resetPassword: "Restarigi pasvorton"
newPasswordIs: "La nova pasvorto estas {password}." newPasswordIs: "La nova pasvorto estas {password}."
cacheClear: "Forviŝi datumon en stalo" cacheClear: "Malplenigi staplon"
help: "Manlibro de uzado" help: "Manlibro de uzado"
inputMessageHere: "Entajpu masaĝo tie ĉi" inputMessageHere: "Entajpu masaĝo tie ĉi"
groupName: "Grupa nomo" groupName: "Grupa nomo"
@ -240,12 +246,13 @@ noteOf: "Noto de {user}"
noMessagesYet: "Neniu mesaĝo" noMessagesYet: "Neniu mesaĝo"
newMessageExists: "Vi ricevis novan mesaĝon." newMessageExists: "Vi ricevis novan mesaĝon."
onlyOneFileCanBeAttached: "Vi povas aldoni nur unu dosieron po unu mesaĝo." onlyOneFileCanBeAttached: "Vi povas aldoni nur unu dosieron po unu mesaĝo."
invitationCode: "Kodo de invito"
uiLanguage: "Lingvo de la interfaco" uiLanguage: "Lingvo de la interfaco"
tags: "Etikedoj" tags: "Etikedoj"
createAccount: "Krei konton" createAccount: "Krei konton"
existingAccount: "Ekzista konto" existingAccount: "Ekzista konto"
noFollowRequests: "Vi ne havas eksekvopetojn." noFollowRequests: "Vi ne havas eksekvopetojn."
openImageInNewTab: "Fermi la bildo sur nova tablo" openImageInNewTab: "Fermi la bildon en nova tablo"
local: "Loka" local: "Loka"
remote: "Transa" remote: "Transa"
accountSettings: "Agordoj de Konto" accountSettings: "Agordoj de Konto"
@ -256,14 +263,17 @@ deleteAll: "Forviŝi ĉiujn"
showInPage: "Vidi en paĝo" showInPage: "Vidi en paĝo"
deleteAllFiles: "Forviŝi ĉiujn dosierojn" deleteAllFiles: "Forviŝi ĉiujn dosierojn"
deleteAllFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn viajn dosierojn?" deleteAllFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn viajn dosierojn?"
userSilenced: "Tiu uzanto estas mutigata."
deletedNote: "Forviŝita noto" deletedNote: "Forviŝita noto"
invisibleNote: "Malpublika noto" invisibleNote: "Malpublika noto"
poll: "Balotujo" poll: "Balotujo"
edit: "Redakti"
emailServer: "Retpoŝta servilo" emailServer: "Retpoŝta servilo"
email: "Retpoŝto" email: "Retpoŝto"
emailAddress: "Retpoŝta adreso" emailAddress: "Retpoŝta adreso"
smtpUser: "Uzantnomo" smtpUser: "Uzantnomo"
smtpPass: "Pasvorto" smtpPass: "Pasvorto"
wordMute: "Silentigo de vortoj"
userSaysSomething: "{name} parolis ion" userSaysSomething: "{name} parolis ion"
display: "Vidi" display: "Vidi"
database: "Datumbazo" database: "Datumbazo"
@ -273,7 +283,9 @@ abuseReports: "Signali"
reportAbuse: "Signali" reportAbuse: "Signali"
reportAbuseOf: "Signali {name}'(o)n" reportAbuseOf: "Signali {name}'(o)n"
send: "Sendi" send: "Sendi"
i18nInfo: "Misskey estas tradukata en diversaj lingvoj far volontuloj. Oni povas kontribui por la tradukado sur {link}." openInNewTab: "Malfermi en nova langeto"
editTheseSettingsMayBreakAccount: "Redakti tiujn agordojn estas eble damaĝi konton."
i18nInfo: "Misskey estas tradukata en diversaj lingvoj far volontuloj. Oni povas kontribui por la tradukado ĉe {link}."
followingCount: "Numero de sekvatoj" followingCount: "Numero de sekvatoj"
followersCount: "Numero de sekvantoj" followersCount: "Numero de sekvantoj"
yes: "Jes" yes: "Jes"
@ -282,7 +294,7 @@ driveFilesCount: "Numero de dosieroj en la diskingo"
noteFavoritesCount: "Numero de la preferataj notoj" noteFavoritesCount: "Numero de la preferataj notoj"
makeExplorable: "Igi videbla konto sur la paĝo \"Esplorado\"" makeExplorable: "Igi videbla konto sur la paĝo \"Esplorado\""
showTitlebar: "Montri titolobredon" showTitlebar: "Montri titolobredon"
clearCache: "Forviŝi datumon en staplo" clearCache: "Malplenigi staplon"
onlineUsersCount: "{n} uzanto(j) estas surlinea" onlineUsersCount: "{n} uzanto(j) estas surlinea"
nUsers: "{n} uzanto(j)" nUsers: "{n} uzanto(j)"
saveAs: "Konservi kiel…" saveAs: "Konservi kiel…"
@ -290,9 +302,11 @@ createdAt: "Kreita je"
updatedAt: "Laste ĝisdatigita" updatedAt: "Laste ĝisdatigita"
deleteConfirm: "Ĉu certas forviŝi?" deleteConfirm: "Ĉu certas forviŝi?"
closeAccount: "Forigi konton" closeAccount: "Forigi konton"
editCode: "Redakti kodon"
emailNotification: "Sciigoj per retpoŝto" emailNotification: "Sciigoj per retpoŝto"
publish: "Publikigi" publish: "Publikigi"
inChannelSearch: "Serĉi en kanalo" inChannelSearch: "Serĉi en kanalo"
useReactionPickerForContextMenu: "Malfermu reago-elektilon per dekstro-kliki"
typingUsers: "{users} estas entajpanta(j)..." typingUsers: "{users} estas entajpanta(j)..."
online: "Surkonektita" online: "Surkonektita"
offline: "Forkonektita" offline: "Forkonektita"
@ -315,14 +329,16 @@ _aboutMisskey:
contributors: "Precipaj kontribuantoj" contributors: "Precipaj kontribuantoj"
allContributors: "Ĉiuj kontribuintoj" allContributors: "Ĉiuj kontribuintoj"
source: "Fontkodo" source: "Fontkodo"
translation: "Traduki Miskejon" translation: "Traduki Misskey'on"
patrons: "Mecenatoj" patrons: "Mecenatoj"
_mfm: _mfm:
mention: "Mencioj" mention: "Mencioj"
hashtag: "Kradvorto" hashtag: "Kradvorto"
url: "URL" url: "URL"
blockCode: "Kodo (Ujo)" inlineCode: "Kodo (en linio)"
blockMath: "Formulo (Ujo)" blockCode: "Kodo (bloko)"
inlineMath: "Formulo (en linio)"
blockMath: "Formulo (bloko)"
quote: "Citi" quote: "Citi"
emoji: "Personecigitaj emoĵioj" emoji: "Personecigitaj emoĵioj"
search: "Serĉi" search: "Serĉi"
@ -337,9 +353,10 @@ _channel:
_menuDisplay: _menuDisplay:
hide: "Kaŝi" hide: "Kaŝi"
_wordMute: _wordMute:
muteWords: "Silentanta vorto" muteWords: "Silentigataj vortoj"
mutedNotes: "Silentigataj notoj" mutedNotes: "Silentigataj notoj"
_theme: _theme:
code: "Kodo de koloraro"
keys: keys:
hashtag: "Kradvorto" hashtag: "Kradvorto"
mention: "Mencioj" mention: "Mencioj"
@ -366,21 +383,25 @@ _time:
hour: "hor" hour: "hor"
day: "Tago" day: "Tago"
_tutorial: _tutorial:
title: "Uzado de Misskey (Ĉi-sekve Miskejo)" title: "Uzado de Misskey"
step1_1: "Bonvenon." step1_1: "Bonvenon."
step7_2: "Se vi volus scii pli pri Miskejon, volu rigardi la fako {help}." step7_2: "Se vi volus scii pli pri Miskejon, volu rigardi la fakon {help}."
step7_3: "Do, bonvolu amuziĝi Miskejon🚀"
_permissions: _permissions:
"read:blocks": "Vidi la listo de la uzantoj kiun vi blokis." "read:blocks": "Vidi la liston de uzantoj kiun vi blokas"
"write:blocks": "Redakti la liston de la uzantoj kiun vi blokis." "write:blocks": "Redakti vian liston de blokataj uzantoj"
"read:drive": "Ĉia operacio por legi la informon de dosiero en via diskingo de Miskejo" "read:drive": "Operacio por legi la informon de dosiero en via diskingo de Miskejo"
"write:drive": "Ĉia operacio por skribi, forviŝi, aŭ alimaniere ŝanĝi la informon de dosiero en via diskingo de Miskejo" "write:drive": "Ĉia operacio por skribi, forviŝi, aŭ alimaniere ŝanĝi la informon de dosiero en via diskingo de Miskejo"
"read:favorites": "Vidi la listo de la preferoj" "read:favorites": "Vidi vian liston de preferatoj"
"read:following": "Vidi tion kion vi sekvas" "read:following": "Vidi tion kion vi sekvas"
"write:following": "Sekvi kaj/aŭ malsekvi alian uzanton" "write:following": "Sekvi kaj/aŭ malsekvi alian uzanton"
"read:messaging": "Vidi via retbabilado" "read:messaging": "Vidi via retbabilado"
"read:mutes": "Vidi vian liston de silentigoj"
"write:mutes": "Redakti vian liston de silentigoj"
"write:notes": "Krei / Forviŝi noton" "write:notes": "Krei / Forviŝi noton"
"read:notifications": "Vidi sciigojn" "read:notifications": "Vidi sciigojn"
"read:reactions": "Vidi reagojn" "read:reactions": "Vidi reagojn"
"write:reactions": "Redakti viajn reagojn"
"read:pages": "Vidi via paĝojn" "read:pages": "Vidi via paĝojn"
"read:page-likes": "Vidi ŝatojn de paĝo" "read:page-likes": "Vidi ŝatojn de paĝo"
"read:channels": "Vidi kanalojn" "read:channels": "Vidi kanalojn"
@ -398,7 +419,8 @@ _widgets:
notifications: "Sciigoj" notifications: "Sciigoj"
timeline: "Templinio" timeline: "Templinio"
clock: "Horloĝo" clock: "Horloĝo"
federation: "Fediverso" federation: "Konfederacio"
slideshow: "Bildoprezento"
onlineUsers: "Surkonektita uzanto" onlineUsers: "Surkonektita uzanto"
_cw: _cw:
show: "Vidu pli" show: "Vidu pli"
@ -426,16 +448,17 @@ _postForm:
_profile: _profile:
name: "Nomo" name: "Nomo"
username: "Uzantnomo" username: "Uzantnomo"
metadataEdit: "Redakti kromaj informoj"
changeAvatar: "Ŝanĝi profilbildon" changeAvatar: "Ŝanĝi profilbildon"
_exportOrImport: _exportOrImport:
followingList: "Sekvataj" followingList: "Sekvataj"
muteList: "Silentigado" muteList: "Silentigoj"
blockingList: "Blokado" blockingList: "Blokado"
userLists: "Listoj" userLists: "Listoj"
_timelines: _timelines:
home: "Hejmo" home: "Hejmo"
local: "Loka" local: "Loka"
social: "Transa" social: "Sociala"
global: "Konfederacia" global: "Konfederacia"
_rooms: _rooms:
translate: "Movi" translate: "Movi"
@ -444,12 +467,14 @@ _rooms:
server: "Servilo" server: "Servilo"
moon: "La luno" moon: "La luno"
_pages: _pages:
editPage: "Redakti paĝon"
deleted: "La paĝo estas forigita." deleted: "La paĝo estas forigita."
editThisPage: "Redakti la paĝon"
viewPage: "Vidi via paĝojn" viewPage: "Vidi via paĝojn"
my: "Miaj paĝoj" my: "Miaj paĝoj"
content: "Blokado de paĝo" content: "Blokado de paĝo"
url: "URL de paĝo" url: "URL de paĝo"
chooseBlock: "Aldoni ujon" chooseBlock: "Aldoni blokon"
blocks: blocks:
image: "Bildoj" image: "Bildoj"
_post: _post:

View file

@ -127,6 +127,7 @@ editWidgets: "Editar widgets"
editWidgetsExit: "Terminar edición" editWidgetsExit: "Terminar edición"
customEmojis: "Emojis personalizados" customEmojis: "Emojis personalizados"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Nombre del emoji" emojiName: "Nombre del emoji"
emojiUrl: "URL de la imágen del emoji" emojiUrl: "URL de la imágen del emoji"
addEmoji: "Agregar emoji" addEmoji: "Agregar emoji"

View file

@ -128,6 +128,7 @@ editWidgets: "Modifier les widgets"
editWidgetsExit: "Valider les modifications" editWidgetsExit: "Valider les modifications"
customEmojis: "Émojis personnalisés" customEmojis: "Émojis personnalisés"
emoji: "Émoji" emoji: "Émoji"
emojis: "Émoji"
emojiName: "Nom de lémoji" emojiName: "Nom de lémoji"
emojiUrl: "URL de lémoji" emojiUrl: "URL de lémoji"
addEmoji: "Ajouter un émoji" addEmoji: "Ajouter un émoji"
@ -767,6 +768,7 @@ global: "Global"
squareAvatars: "Avatars carrés" squareAvatars: "Avatars carrés"
sent: "Envoyer" sent: "Envoyer"
hashtags: "Hashtags" hashtags: "Hashtags"
troubleshooting: "Résolution de problèmes"
_docs: _docs:
continueReading: "Lire plus" continueReading: "Lire plus"
features: "Fonctionnalités" features: "Fonctionnalités"
@ -871,6 +873,8 @@ _mfm:
blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur." blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur."
font: "Police de caractères" font: "Police de caractères"
fontDescription: "Il est possible de choisir la police." fontDescription: "Il est possible de choisir la police."
rainbow: "Arc-en-ciel"
rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel."
_reversi: _reversi:
reversi: "Reversi" reversi: "Reversi"
gameSettings: "Réglages de la partie" gameSettings: "Réglages de la partie"
@ -1605,11 +1609,11 @@ _notification:
youWereInvitedToGroup: "Invité·e au groupe" youWereInvitedToGroup: "Invité·e au groupe"
_types: _types:
all: "Toutes" all: "Toutes"
follow: "Abonnements" follow: "Nouvel·le abonné·e"
mention: "Mentions" mention: "Mentions"
reply: "Réponses" reply: "Réponses"
renote: "Partager" renote: "Renotes"
quote: "Citer" quote: "Citations"
reaction: "Réactions" reaction: "Réactions"
pollVote: "Votes dans des sondages" pollVote: "Votes dans des sondages"
receiveFollowRequest: "Demande d'abonnement reçue" receiveFollowRequest: "Demande d'abonnement reçue"

View file

@ -128,6 +128,7 @@ editWidgets: "Sunting gawit"
editWidgetsExit: "Selesai" editWidgetsExit: "Selesai"
customEmojis: "Emoji kustom" customEmojis: "Emoji kustom"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Nama emoji" emojiName: "Nama emoji"
emojiUrl: "URL Emoji" emojiUrl: "URL Emoji"
addEmoji: "Tambahkan emoji" addEmoji: "Tambahkan emoji"

View file

@ -127,6 +127,7 @@ editWidgets: "Modifica i widget"
editWidgetsExit: "Modifica fine" editWidgetsExit: "Modifica fine"
customEmojis: "Emoji personalizzati" customEmojis: "Emoji personalizzati"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Nome dell'emoji" emojiName: "Nome dell'emoji"
emojiUrl: "URL dell'emoji" emojiUrl: "URL dell'emoji"
addEmoji: "Aggiungi un emoji" addEmoji: "Aggiungi un emoji"
@ -743,6 +744,7 @@ ratio: "Rapporto"
global: "Federata" global: "Federata"
sent: "Inviare" sent: "Inviare"
hashtags: "Hashtag" hashtags: "Hashtag"
troubleshooting: "Risoluzione problemi"
_docs: _docs:
continueReading: "Leggi di più" continueReading: "Leggi di più"
features: "Funzionalità" features: "Funzionalità"
@ -805,6 +807,7 @@ _mfm:
blur: "Sfocatura" blur: "Sfocatura"
font: "Tipo di carattere" font: "Tipo di carattere"
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
rainbow: "Arcobaleno"
_reversi: _reversi:
reversi: "Reversi" reversi: "Reversi"
gameSettings: "Impostazioni di gioco" gameSettings: "Impostazioni di gioco"
@ -1392,12 +1395,12 @@ _notification:
youWereInvitedToGroup: "Invitat@ al gruppo" youWereInvitedToGroup: "Invitat@ al gruppo"
_types: _types:
all: "Tutto" all: "Tutto"
follow: "Follows" follow: "Nuovə follower"
mention: "Menzioni" mention: "Menzioni"
reply: "Rispondi" reply: "Risposte"
renote: "Rinota" renote: "Rinota"
quote: "Cita" quote: "Cita"
reaction: "Reazione" reaction: "Reazioni"
pollVote: "Voti ricevuti" pollVote: "Voti ricevuti"
receiveFollowRequest: "Richiesta di follow ricevuta" receiveFollowRequest: "Richiesta di follow ricevuta"
followRequestAccepted: "Richiesta di follow accettata" followRequestAccepted: "Richiesta di follow accettata"

View file

@ -128,6 +128,7 @@ editWidgets: "ウィジェットを編集"
editWidgetsExit: "編集を終了" editWidgetsExit: "編集を終了"
customEmojis: "カスタム絵文字" customEmojis: "カスタム絵文字"
emoji: "絵文字" emoji: "絵文字"
emojis: "絵文字"
emojiName: "絵文字名" emojiName: "絵文字名"
emojiUrl: "絵文字画像URL" emojiUrl: "絵文字画像URL"
addEmoji: "絵文字を追加" addEmoji: "絵文字を追加"
@ -770,6 +771,7 @@ received: "受信"
searchResult: "検索結果" searchResult: "検索結果"
hashtags: "ハッシュタグ" hashtags: "ハッシュタグ"
troubleshooting: "トラブルシューティング" troubleshooting: "トラブルシューティング"
useBlurEffect: "UIにぼかし効果を使用"
_docs: _docs:
continueReading: "続きを読む" continueReading: "続きを読む"
@ -777,6 +779,7 @@ _docs:
generalTopics: "一般的なトピック" generalTopics: "一般的なトピック"
advancedTopics: "高度なトピック" advancedTopics: "高度なトピック"
admin: "管理" admin: "管理"
translateWarn: "このドキュメントは翻訳されたものです。オリジナルとは内容が異なる場合があります。"
_ad: _ad:
back: "戻る" back: "戻る"

View file

@ -127,6 +127,7 @@ editWidgets: "ウィジェットをいじる"
editWidgetsExit: "編集終ったで" editWidgetsExit: "編集終ったで"
customEmojis: "カスタム絵文字" customEmojis: "カスタム絵文字"
emoji: "絵文字" emoji: "絵文字"
emojis: "絵文字"
emojiName: "絵文字名" emojiName: "絵文字名"
emojiUrl: "絵文字画像URL" emojiUrl: "絵文字画像URL"
addEmoji: "絵文字を追加" addEmoji: "絵文字を追加"

View file

@ -7,7 +7,9 @@ username: "Isem n umseqdac"
password: "Awal uffir" password: "Awal uffir"
ok: "IH" ok: "IH"
settings: "Iɣewwaṛen" settings: "Iɣewwaṛen"
otherSettings: "Iɣewwaren nniḍen"
profile: "Amaɣnu" profile: "Amaɣnu"
signup: "Jerred"
save: "Sekles" save: "Sekles"
delete: "Kkes" delete: "Kkes"
addToList: "Rnu ɣer tebdart" addToList: "Rnu ɣer tebdart"
@ -27,15 +29,31 @@ followers: "Imeḍfaṛen"
followsYou: "Yeṭṭafaṛ-ik·em-id" followsYou: "Yeṭṭafaṛ-ik·em-id"
createList: "Snulfu-d tabdart" createList: "Snulfu-d tabdart"
enterListName: "Isem n tebdart" enterListName: "Isem n tebdart"
privacy: "Tabaḍnit"
follow: "Ḍfeṛ" follow: "Ḍfeṛ"
you: "Kečči·mmi" you: "Kečči·mmi"
selectList: "Fren tabdart" selectList: "Fren tabdart"
youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart" youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart"
security: "Taɣellist"
remove: "Kkes" remove: "Kkes"
userList: "Tibdarin" userList: "Tibdarin"
securityKey: "Tasarutt n tɣellist"
securityKeyName: "Isem n tsarutt"
signinRequired: "Ttxil jerred"
signinWith: "Tuqqna s {x}"
tapSecurityKey: "Sekcem tasarutt-ik·im n tɣellist"
uiLanguage: "Tutlayt n wegrudem" uiLanguage: "Tutlayt n wegrudem"
accountSettings: "Iɣewwaṛen n umiḍan"
plugins: "Izegrar"
email: "Imayl"
emailAddress: "Tansa imayl"
smtpUser: "Isem n umseqdac" smtpUser: "Isem n umseqdac"
smtpPass: "Awal uffir" smtpPass: "Awal uffir"
other: "Wiyyaḍ"
accountInfo: "Talɣut n umiḍan"
emailNotification: "Ilɣa imayl"
selectAccount: "Fren amiḍan"
accounts: "Imiḍan"
_email: _email:
_follow: _follow:
title: "Yeṭṭafaṛ-ik·em-id" title: "Yeṭṭafaṛ-ik·em-id"
@ -48,6 +66,8 @@ _theme:
mention: "Bder" mention: "Bder"
_sfx: _sfx:
notification: "Ilɣuyen" notification: "Ilɣuyen"
_permissions:
"write:account": "Ẓreg talɣut n umiḍan-ik·im"
_widgets: _widgets:
notifications: "Ilɣuyen" notifications: "Ilɣuyen"
_cw: _cw:

View file

@ -128,6 +128,7 @@ editWidgets: "위젯 편집"
editWidgetsExit: "편집 종료" editWidgetsExit: "편집 종료"
customEmojis: "커스텀 이모지" customEmojis: "커스텀 이모지"
emoji: "이모지" emoji: "이모지"
emojis: "이모지"
emojiName: "이모지 이름" emojiName: "이모지 이름"
emojiUrl: "이모지 URL" emojiUrl: "이모지 URL"
addEmoji: "이모지 추가" addEmoji: "이모지 추가"
@ -766,8 +767,15 @@ customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야
global: "글로벌" global: "글로벌"
squareAvatars: "프로필 아이콘을 사각형으로 표시" squareAvatars: "프로필 아이콘을 사각형으로 표시"
sent: "전송" sent: "전송"
received: "수신"
searchResult: "검색 결과"
hashtags: "해시태그" hashtags: "해시태그"
troubleshooting: "트러블 슈팅"
_docs: _docs:
continueReading: "계속 읽기"
features: "기능"
generalTopics: "일반 주제"
advancedTopics: "심화 주제"
admin: "관리" admin: "관리"
_ad: _ad:
back: "뒤로" back: "뒤로"
@ -867,6 +875,8 @@ _mfm:
blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다." blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다."
font: "폰트" font: "폰트"
fontDescription: "내용의 글꼴을 지정할 수 있습니다." fontDescription: "내용의 글꼴을 지정할 수 있습니다."
rainbow: "무지개"
rainbowDescription: "내용을 무지개로 표시합니다."
_reversi: _reversi:
reversi: "리버시" reversi: "리버시"
gameSettings: "대국 설정" gameSettings: "대국 설정"

View file

@ -128,6 +128,7 @@ editWidgets: "Edytuj widżet"
editWidgetsExit: "Gotowe" editWidgetsExit: "Gotowe"
customEmojis: "Niestandardowe emoji" customEmojis: "Niestandardowe emoji"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji"
emojiName: "Nazwa emoji" emojiName: "Nazwa emoji"
emojiUrl: "Adres URL emoji" emojiUrl: "Adres URL emoji"
addEmoji: "Dodaj emoji" addEmoji: "Dodaj emoji"

View file

@ -128,6 +128,7 @@ editWidgets: "Редактировать виджеты"
editWidgetsExit: "Готово" editWidgetsExit: "Готово"
customEmojis: "Эмодзи пользователя" customEmojis: "Эмодзи пользователя"
emoji: "Эмодзи" emoji: "Эмодзи"
emojis: "Эмодзи"
emojiName: "Название эмодзи" emojiName: "Название эмодзи"
emojiUrl: "URL эмодзи" emojiUrl: "URL эмодзи"
addEmoji: "Добавить эмодзи" addEmoji: "Добавить эмодзи"

View file

@ -127,6 +127,7 @@ editWidgets: "Редагувати віджети"
editWidgetsExit: "Готово" editWidgetsExit: "Готово"
customEmojis: "Кастомні емоджі" customEmojis: "Кастомні емоджі"
emoji: "Емоджі" emoji: "Емоджі"
emojis: "Емоджі"
emojiName: "Назва емоджі" emojiName: "Назва емоджі"
emojiUrl: "URL емодзі" emojiUrl: "URL емодзі"
addEmoji: "Додати емодзі" addEmoji: "Додати емодзі"

View file

@ -128,6 +128,7 @@ editWidgets: "编辑小工具"
editWidgetsExit: "完成编辑" editWidgetsExit: "完成编辑"
customEmojis: "自定义表情符号" customEmojis: "自定义表情符号"
emoji: "表情符号" emoji: "表情符号"
emojis: "表情符号"
emojiName: "表情符号名称" emojiName: "表情符号名称"
emojiUrl: "表情符号地址" emojiUrl: "表情符号地址"
addEmoji: "添加表情符号" addEmoji: "添加表情符号"
@ -769,12 +770,14 @@ sent: "发送"
received: "收取" received: "收取"
searchResult: "搜索结果" searchResult: "搜索结果"
hashtags: "话题标签" hashtags: "话题标签"
troubleshooting: "故障排除"
_docs: _docs:
continueReading: "继续阅读" continueReading: "继续阅读"
features: "特性" features: "特性"
generalTopics: "通常提示" generalTopics: "通常提示"
advancedTopics: "进阶提示" advancedTopics: "进阶提示"
admin: "管理" admin: "管理"
translateWarn: "本文档是翻译后的文档。内容可能与原文有所不同。"
_ad: _ad:
back: "返回" back: "返回"
reduceFrequencyOfThisAd: "减少此广告的频率" reduceFrequencyOfThisAd: "减少此广告的频率"

View file

@ -128,6 +128,7 @@ editWidgets: "編輯小工具"
editWidgetsExit: "完成" editWidgetsExit: "完成"
customEmojis: "自訂表情符號" customEmojis: "自訂表情符號"
emoji: "表情符號" emoji: "表情符號"
emojis: "表情符號"
emojiName: "表情符號名稱" emojiName: "表情符號名稱"
emojiUrl: "表情符號URL" emojiUrl: "表情符號URL"
addEmoji: "加入表情符號" addEmoji: "加入表情符號"

View file

@ -1,7 +1,7 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <syuilotan@yahoo.co.jp>", "author": "syuilo <syuilotan@yahoo.co.jp>",
"version": "12.84.3", "version": "12.86.0",
"codename": "indigo", "codename": "indigo",
"repository": { "repository": {
"type": "git", "type": "git",
@ -101,7 +101,7 @@
"@types/websocket": "1.0.3", "@types/websocket": "1.0.3",
"@types/ws": "7.4.6", "@types/ws": "7.4.6",
"@typescript-eslint/parser": "4.28.3", "@typescript-eslint/parser": "4.28.3",
"@vue/compiler-sfc": "3.1.5", "@vue/compiler-sfc": "3.2.1",
"abort-controller": "3.0.0", "abort-controller": "3.0.0",
"apexcharts": "3.27.2", "apexcharts": "3.27.2",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
@ -238,7 +238,7 @@
"uuid": "8.3.2", "uuid": "8.3.2",
"v-debounce": "0.1.2", "v-debounce": "0.1.2",
"vanilla-tilt": "1.7.0", "vanilla-tilt": "1.7.0",
"vue": "3.1.5", "vue": "3.2.1",
"vue-color": "2.8.1", "vue-color": "2.8.1",
"vue-json-pretty": "1.8.1", "vue-json-pretty": "1.8.1",
"vue-loader": "16.3.1", "vue-loader": "16.3.1",

View file

@ -48,15 +48,7 @@ export default defineComponent({
render() { render() {
if (this.items.length === 0) return; if (this.items.length === 0) return;
return h(this.$store.state.animation ? TransitionGroup : 'div', this.$store.state.animation ? { const renderChildren = () => this.items.map((item, i) => {
class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''),
name: 'list',
tag: 'div',
'data-direction': this.direction,
'data-reversed': this.reversed ? 'true' : 'false',
} : {
class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''),
}, this.items.map((item, i) => {
const el = this.$slots.default({ const el = this.$slots.default({
item: item item: item
})[0]; })[0];
@ -98,7 +90,19 @@ export default defineComponent({
return el; return el;
} }
} }
})); });
return h(this.$store.state.animation ? TransitionGroup : 'div', this.$store.state.animation ? {
class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''),
name: 'list',
tag: 'div',
'data-direction': this.direction,
'data-reversed': this.reversed ? 'true' : 'false',
} : {
class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''),
}, {
default: renderChildren
});
}, },
}); });
</script> </script>

View file

@ -114,7 +114,7 @@ export default defineComponent({
if (this.selectMode) { if (this.selectMode) {
this.$emit('chosen', this.file); this.$emit('chosen', this.file);
} else { } else {
os.modalMenu(this.getMenu(), ev.currentTarget || ev.target); os.popupMenu(this.getMenu(), ev.currentTarget || ev.target);
} }
}, },

View file

@ -629,7 +629,7 @@ export default defineComponent({
}, },
showMenu(ev) { showMenu(ev) {
os.modalMenu(this.getMenu(), ev.currentTarget || ev.target); os.popupMenu(this.getMenu(), ev.currentTarget || ev.target);
}, },
onContextmenu(ev) { onContextmenu(ev) {

View file

@ -1,17 +1,17 @@
<template> <template>
<MkModal ref="modal" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')"> <MkPopup ref="popup" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.popup.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')" #default="{point}">
<MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/> <MkEmojiPicker class="ryghynhb _popup _shadow" :class="{ pointer: point === 'top' }" :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/>
</MkModal> </MkPopup>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, markRaw } from 'vue'; import { defineComponent, markRaw } from 'vue';
import MkModal from '@client/components/ui/modal.vue'; import MkPopup from '@client/components/ui/popup.vue';
import MkEmojiPicker from '@client/components/emoji-picker.vue'; import MkEmojiPicker from '@client/components/emoji-picker.vue';
export default defineComponent({ export default defineComponent({
components: { components: {
MkModal, MkPopup,
MkEmojiPicker, MkEmojiPicker,
}, },
@ -33,7 +33,7 @@ export default defineComponent({
}, },
}, },
emits: ['done', 'closed'], emits: ['done', 'close', 'closed'],
data() { data() {
return { return {
@ -44,7 +44,7 @@ export default defineComponent({
methods: { methods: {
chosen(emoji: any) { chosen(emoji: any) {
this.$emit('done', emoji); this.$emit('done', emoji);
this.$refs.modal.close(); this.$refs.popup.close();
}, },
opening() { opening() {
@ -56,145 +56,20 @@ export default defineComponent({
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.omfetrab { .ryghynhb {
$pad: 8px; &.pointer {
--eachSize: 40px; &:before {
--size: 8px;
display: flex; content: '';
flex-direction: column; display: block;
contain: content; position: absolute;
top: calc(0px - (var(--size) * 2));
&.big { left: 0;
--eachSize: 44px; right: 0;
} width: 0;
margin: auto;
&.w1 { border: solid var(--size) transparent;
width: calc((var(--eachSize) * 5) + (#{$pad} * 2)); border-bottom-color: var(--popup);
}
&.w2 {
width: calc((var(--eachSize) * 6) + (#{$pad} * 2));
}
&.w3 {
width: calc((var(--eachSize) * 7) + (#{$pad} * 2));
}
&.h1 {
--height: calc((var(--eachSize) * 4) + (#{$pad} * 2));
}
&.h2 {
--height: calc((var(--eachSize) * 6) + (#{$pad} * 2));
}
&.h3 {
--height: calc((var(--eachSize) * 8) + (#{$pad} * 2));
}
> .search {
width: 100%;
padding: 12px;
box-sizing: border-box;
font-size: 1em;
outline: none;
border: none;
background: transparent;
color: var(--fg);
&:not(.filled) {
order: 1;
z-index: 2;
box-shadow: 0px -1px 0 0px var(--divider);
}
}
> .emojis {
height: var(--height);
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
> .index {
min-height: var(--height);
position: relative;
border-bottom: solid 0.5px var(--divider);
> .arrow {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
padding: 16px 0;
text-align: center;
opacity: 0.5;
pointer-events: none;
}
}
section {
> header {
position: sticky;
top: 0;
left: 0;
z-index: 1;
padding: 8px;
font-size: 12px;
}
> div {
padding: $pad;
> button {
position: relative;
padding: 0;
width: var(--eachSize);
height: var(--eachSize);
border-radius: 4px;
&:focus {
outline: solid 2px var(--focus);
z-index: 1;
}
&:hover {
background: rgba(0, 0, 0, 0.05);
}
&:active {
background: var(--accent);
box-shadow: inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15);
}
> * {
font-size: 24px;
height: 1.25em;
vertical-align: -.25em;
pointer-events: none;
}
}
}
&.result {
border-bottom: solid 0.5px var(--divider);
&:empty {
display: none;
}
}
&.unicode {
min-height: 384px;
}
&.custom {
min-height: 64px;
}
} }
} }
} }

View file

@ -1,5 +1,5 @@
<template> <template>
<div class="omfetrab _popup" :class="['w' + width, 'h' + height, { big }]"> <div class="omfetrab" :class="['w' + width, 'h' + height, { big }]">
<input ref="search" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" v-model.trim="q" :placeholder="$ts.search" @paste.stop="paste" @keyup.enter="done()"> <input ref="search" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" v-model.trim="q" :placeholder="$ts.search" @paste.stop="paste" @keyup.enter="done()">
<div class="emojis" ref="emojis"> <div class="emojis" ref="emojis">
<section class="result"> <section class="result">
@ -346,7 +346,6 @@ export default defineComponent({
display: flex; display: flex;
flex-direction: column; flex-direction: column;
contain: content;
&.big { &.big {
--eachSize: 44px; --eachSize: 44px;

View file

@ -32,8 +32,8 @@
margin: -8px calc(var(--formXPadding) * -1) 0 calc(var(--formXPadding) * -1); margin: -8px calc(var(--formXPadding) * -1) 0 calc(var(--formXPadding) * -1);
padding: 8px calc(var(--formContentHMargin) + var(--formXPadding)) 8px calc(var(--formContentHMargin) + var(--formXPadding)); padding: 8px calc(var(--formContentHMargin) + var(--formXPadding)) 8px calc(var(--formContentHMargin) + var(--formXPadding));
background: var(--X17); background: var(--X17);
-webkit-backdrop-filter: blur(10px); -webkit-backdrop-filter: var(--blur, blur(10px));
backdrop-filter: blur(10px); backdrop-filter: var(--blur, blur(10px));
} }
._themeChanging_ ._formLabel { ._themeChanging_ ._formLabel {

View file

@ -1,6 +1,6 @@
<template> <template>
<MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')">
<div class="hrmcaedk _popup _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }"> <div class="hrmcaedk _window _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }">
<div class="header" @contextmenu="onContextmenu"> <div class="header" @contextmenu="onContextmenu">
<span class="title"> <span class="title">
<XHeader :info="pageInfo" :back-button="history.length > 0" @back="back()" :close-button="true" @close="$refs.modal.close()"/> <XHeader :info="pageInfo" :back-button="history.length > 0" @back="back()" :close-button="true" @close="$refs.modal.close()"/>

View file

@ -454,7 +454,7 @@ export default defineComponent({
renote(viaKeyboard = false) { renote(viaKeyboard = false) {
pleaseLogin(); pleaseLogin();
this.blur(); this.blur();
os.modalMenu([{ os.popupMenu([{
text: this.$ts.renote, text: this.$ts.renote,
icon: 'fas fa-retweet', icon: 'fas fa-retweet',
action: () => { action: () => {
@ -743,14 +743,14 @@ export default defineComponent({
}, },
menu(viaKeyboard = false) { menu(viaKeyboard = false) {
os.modalMenu(this.getMenu(), this.$refs.menuButton, { os.popupMenu(this.getMenu(), this.$refs.menuButton, {
viaKeyboard viaKeyboard
}).then(this.focus); }).then(this.focus);
}, },
showRenoteMenu(viaKeyboard = false) { showRenoteMenu(viaKeyboard = false) {
if (!this.isMyRenote) return; if (!this.isMyRenote) return;
os.modalMenu([{ os.popupMenu([{
text: this.$ts.unrenote, text: this.$ts.unrenote,
icon: 'fas fa-trash-alt', icon: 'fas fa-trash-alt',
danger: true, danger: true,
@ -794,7 +794,7 @@ export default defineComponent({
async clip() { async clip() {
const clips = await os.api('clips/list'); const clips = await os.api('clips/list');
os.modalMenu([{ os.popupMenu([{
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.createNew, text: this.$ts.createNew,
action: async () => { action: async () => {

View file

@ -429,7 +429,7 @@ export default defineComponent({
renote(viaKeyboard = false) { renote(viaKeyboard = false) {
pleaseLogin(); pleaseLogin();
this.blur(); this.blur();
os.modalMenu([{ os.popupMenu([{
text: this.$ts.renote, text: this.$ts.renote,
icon: 'fas fa-retweet', icon: 'fas fa-retweet',
action: () => { action: () => {
@ -718,14 +718,14 @@ export default defineComponent({
}, },
menu(viaKeyboard = false) { menu(viaKeyboard = false) {
os.modalMenu(this.getMenu(), this.$refs.menuButton, { os.popupMenu(this.getMenu(), this.$refs.menuButton, {
viaKeyboard viaKeyboard
}).then(this.focus); }).then(this.focus);
}, },
showRenoteMenu(viaKeyboard = false) { showRenoteMenu(viaKeyboard = false) {
if (!this.isMyRenote) return; if (!this.isMyRenote) return;
os.modalMenu([{ os.popupMenu([{
text: this.$ts.unrenote, text: this.$ts.unrenote,
icon: 'fas fa-trash-alt', icon: 'fas fa-trash-alt',
danger: true, danger: true,
@ -769,7 +769,7 @@ export default defineComponent({
async clip() { async clip() {
const clips = await os.api('clips/list'); const clips = await os.api('clips/list');
os.modalMenu([{ os.popupMenu([{
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.createNew, text: this.$ts.createNew,
action: async () => { action: async () => {

View file

@ -5,8 +5,7 @@
</p> </p>
<ul ref="choices"> <ul ref="choices">
<li v-for="(choice, i) in choices" :key="i"> <li v-for="(choice, i) in choices" :key="i">
<MkInput class="input" :model-value="choice" @update:modelValue="onInput(i, $event)"> <MkInput class="input" :model-value="choice" @update:modelValue="onInput(i, $event)" :placeholder="$t('_poll.choiceN', { n: i + 1 })">
<template #label>{{ $t('_poll.choiceN', { n: i + 1 }) }}</template>
</MkInput> </MkInput>
<button @click="remove(i)" class="_button"> <button @click="remove(i)" class="_button">
<i class="fas fa-times"></i> <i class="fas fa-times"></i>

View file

@ -112,7 +112,7 @@ export default defineComponent({
showFileMenu(file, ev: MouseEvent) { showFileMenu(file, ev: MouseEvent) {
if (this.menu) return; if (this.menu) return;
this.menu = os.modalMenu([{ this.menu = os.popupMenu([{
text: this.$ts.renameFile, text: this.$ts.renameFile,
icon: 'fas fa-i-cursor', icon: 'fas fa-i-cursor',
action: () => { this.rename(file) } action: () => { this.rename(file) }

View file

@ -45,7 +45,7 @@
<button class="_button" @click="togglePoll" :class="{ active: poll }" v-tooltip="$ts.poll"><i class="fas fa-poll-h"></i></button> <button class="_button" @click="togglePoll" :class="{ active: poll }" v-tooltip="$ts.poll"><i class="fas fa-poll-h"></i></button>
<button class="_button" @click="useCw = !useCw" :class="{ active: useCw }" v-tooltip="$ts.useCw"><i class="fas fa-eye-slash"></i></button> <button class="_button" @click="useCw = !useCw" :class="{ active: useCw }" v-tooltip="$ts.useCw"><i class="fas fa-eye-slash"></i></button>
<button class="_button" @click="insertMention" v-tooltip="$ts.mention"><i class="fas fa-at"></i></button> <button class="_button" @click="insertMention" v-tooltip="$ts.mention"><i class="fas fa-at"></i></button>
<button class="_button" @click="withHashtags = !withHashtags" v-tooltip="$ts.hashtags"><i class="fas fa-hashtag"></i></button> <button class="_button" @click="withHashtags = !withHashtags" :class="{ active: withHashtags }" v-tooltip="$ts.hashtags"><i class="fas fa-hashtag"></i></button>
<button class="_button" @click="insertEmoji" v-tooltip="$ts.emoji"><i class="fas fa-laugh-squint"></i></button> <button class="_button" @click="insertEmoji" v-tooltip="$ts.emoji"><i class="fas fa-laugh-squint"></i></button>
<button class="_button" @click="showActions" v-tooltip="$ts.plugin" v-if="postFormActions.length > 0"><i class="fas fa-plug"></i></button> <button class="_button" @click="showActions" v-tooltip="$ts.plugin" v-if="postFormActions.length > 0"><i class="fas fa-plug"></i></button>
</footer> </footer>
@ -641,7 +641,7 @@ export default defineComponent({
viaMobile: isMobile viaMobile: isMobile
}; };
if (this.withHashtags) { if (this.withHashtags && this.hashtags && this.hashtags.trim() !== '') {
const hashtags = this.hashtags.trim().split(' ').map(x => x.startsWith('#') ? x : '#' + x).join(' '); const hashtags = this.hashtags.trim().split(' ').map(x => x.startsWith('#') ? x : '#' + x).join(' ');
data.text = data.text ? `${data.text} ${hashtags}` : hashtags; data.text = data.text ? `${data.text} ${hashtags}` : hashtags;
} }
@ -690,7 +690,7 @@ export default defineComponent({
}, },
showActions(ev) { showActions(ev) {
os.modalMenu(postFormActions.map(action => ({ os.popupMenu(postFormActions.map(action => ({
text: action.title, text: action.title,
action: () => { action: () => {
action.handler({ action.handler({

View file

@ -170,7 +170,7 @@ export default defineComponent({
} }
> span { > span {
color: #fff; color: var(--fgOnAccent);
} }
} }

View file

@ -93,7 +93,7 @@ export default defineComponent({
}, },
async openMenu(ev) { async openMenu(ev) {
os.modalMenu([{ os.popupMenu([{
type: 'label', type: 'label',
text: 'Fruits' text: 'Fruits'
}, { }, {

View file

@ -3,13 +3,11 @@
<div class="auth _section"> <div class="auth _section">
<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div> <div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
<div class="normal-signin" v-if="!totpLogin"> <div class="normal-signin" v-if="!totpLogin">
<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:modelValue="onUsernameChange"> <MkInput v-model="username" :placeholder="$ts.username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:modelValue="onUsernameChange">
<template #label>{{ $ts.username }}</template>
<template #prefix>@</template> <template #prefix>@</template>
<template #suffix>@{{ host }}</template> <template #suffix>@{{ host }}</template>
</MkInput> </MkInput>
<MkInput v-model="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required> <MkInput v-model="password" :placeholder="$ts.password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
<template #label>{{ $ts.password }}</template>
<template #prefix><i class="fas fa-lock"></i></template> <template #prefix><i class="fas fa-lock"></i></template>
<template #caption><button class="_textButton" @click="resetPassword" type="button">{{ $ts.forgotPassword }}</button></template> <template #caption><button class="_textButton" @click="resetPassword" type="button">{{ $ts.forgotPassword }}</button></template>
</MkInput> </MkInput>

View file

@ -115,7 +115,7 @@ export default defineComponent({
z-index: 1; // box-shadow z-index: 1; // box-shadow
display: block; display: block;
min-width: 100px; min-width: 100px;
width: min-content; width: max-content;
padding: 8px 14px; padding: 8px 14px;
text-align: center; text-align: center;
font-weight: normal; font-weight: normal;
@ -127,6 +127,7 @@ export default defineComponent({
border-radius: 999px; border-radius: 999px;
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
transition: background 0.1s ease;
&:not(:disabled):hover { &:not(:disabled):hover {
background: var(--buttonHoverBg); background: var(--buttonHoverBg);
@ -142,7 +143,7 @@ export default defineComponent({
&.primary { &.primary {
font-weight: bold; font-weight: bold;
color: #fff !important; color: var(--fgOnAccent) !important;
background: var(--accent); background: var(--accent);
&:not(:disabled):hover { &:not(:disabled):hover {
@ -176,17 +177,8 @@ export default defineComponent({
} }
&:focus { &:focus {
&:after { outline: solid 2px var(--focus);
content: ""; outline-offset: 2px;
pointer-events: none;
position: absolute;
top: -5px;
right: -5px;
bottom: -5px;
left: -5px;
border: 2px solid var(--accentAlpha03);
border-radius: 10px;
}
} }
&.inline + .bghgjjyj { &.inline + .bghgjjyj {

View file

@ -102,8 +102,8 @@ export default defineComponent({
background: var(--panel); background: var(--panel);
/* TODO panel /* TODO panel
background: var(--X17); background: var(--X17);
-webkit-backdrop-filter: blur(8px); -webkit-backdrop-filter: var(--blur, blur(8px));
backdrop-filter: blur(20px); backdrop-filter: var(--blur, blur(20px));
*/ */
> .title { > .title {

View file

@ -210,8 +210,7 @@ export default defineComponent({
> .label { > .label {
font-size: 0.85em; font-size: 0.85em;
padding: 0 0 6px 6px; padding: 0 0 8px 12px;
font-weight: bold;
user-select: none; user-select: none;
&:empty { &:empty {
@ -221,7 +220,7 @@ export default defineComponent({
> .caption { > .caption {
font-size: 0.8em; font-size: 0.8em;
padding: 6px 0 0 6px; padding: 8px 0 0 12px;
color: var(--fgTransparentWeak); color: var(--fgTransparentWeak);
&:empty { &:empty {
@ -251,6 +250,7 @@ export default defineComponent({
outline: none; outline: none;
box-shadow: none; box-shadow: none;
box-sizing: border-box; box-sizing: border-box;
transition: border-color 0.1s ease-out;
&:hover { &:hover {
border-color: var(--inputBorderHover); border-color: var(--inputBorderHover);

View file

@ -1,5 +1,5 @@
<template> <template>
<div class="rrevdjwt" :class="{ left: align === 'left' }" <div class="rrevdjwt" :class="{ left: align === 'left', pointer: point === 'top' }"
ref="items" ref="items"
@contextmenu.self="e => e.preventDefault()" @contextmenu.self="e => e.preventDefault()"
v-hotkey="keymap" v-hotkey="keymap"
@ -58,7 +58,11 @@ export default defineComponent({
align: { align: {
type: String, type: String,
requried: false requried: false
} },
point: {
type: String,
requried: false
},
}, },
emits: ['close'], emits: ['close'],
data() { data() {
@ -137,6 +141,22 @@ export default defineComponent({
.rrevdjwt { .rrevdjwt {
padding: 8px 0; padding: 8px 0;
&.pointer {
&:before {
--size: 8px;
content: '';
display: block;
position: absolute;
top: calc(0px - (var(--size) * 2));
left: 0;
right: 0;
width: 0;
margin: auto;
border: solid var(--size) transparent;
border-bottom-color: var(--popup);
}
}
&.left { &.left {
> .item { > .item {
text-align: left; text-align: left;
@ -171,13 +191,13 @@ export default defineComponent({
} }
&:hover { &:hover {
color: #fff; color: var(--fgOnAccent);
background: var(--accent); background: var(--accent);
text-decoration: none; text-decoration: none;
} }
&:active { &:active {
color: #fff; color: var(--fgOnAccent);
background: var(--accentDarken); background: var(--accentDarken);
} }

View file

@ -1,6 +1,6 @@
<template> <template>
<MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')">
<div class="ebkgoccj _popup _narrow_" @keydown="onKeydown" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }"> <div class="ebkgoccj _window _narrow_" @keydown="onKeydown" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }">
<div class="header"> <div class="header">
<button class="_button" v-if="withOkButton" @click="$emit('close')"><i class="fas fa-times"></i></button> <button class="_button" v-if="withOkButton" @click="$emit('close')"><i class="fas fa-times"></i></button>
<span class="title"> <span class="title">

View file

@ -1,19 +1,20 @@
<template> <template>
<MkModal ref="modal" :src="src" @click="$refs.modal.close()" @closed="$emit('closed')"> <MkPopup ref="popup" :src="src" @closed="$emit('closed')" #default="{point}">
<MkMenu :items="items" :align="align" @close="$refs.modal.close()" class="_popup"/> <MkMenu :items="items" :align="align" :point="point" @close="$refs.popup.close()" class="_popup _shadow"/>
</MkModal> </MkPopup>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import MkModal from './modal.vue'; import MkPopup from './popup.vue';
import MkMenu from './menu.vue'; import MkMenu from './menu.vue';
export default defineComponent({ export default defineComponent({
components: { components: {
MkModal, MkPopup,
MkMenu, MkMenu,
}, },
props: { props: {
items: { items: {
type: Array, type: Array,
@ -31,17 +32,7 @@ export default defineComponent({
required: false required: false
}, },
}, },
emits: ['closed'],
computed: { emits: ['close', 'closed'],
keymap(): any {
return {
'esc': () => this.$refs.modal.close(),
};
},
},
}); });
</script> </script>
<style lang="scss" scoped>
</style>

View file

@ -0,0 +1,216 @@
<template>
<transition :name="$store.state.animation ? 'popup-menu' : ''" :duration="$store.state.animation ? 300 : 0" appear @after-leave="onClosed" @enter="$emit('opening')" @after-enter="childRendered">
<div v-show="manualShowing != null ? manualShowing : showing" class="ccczpooj" :class="{ front, fixed, top: position === 'top' }" ref="content" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }">
<slot :point="point"></slot>
</div>
</transition>
</template>
<script lang="ts">
import { defineComponent, PropType } from 'vue';
function getFixedContainer(el: Element | null): Element | null {
if (el == null || el.tagName === 'BODY') return null;
const position = window.getComputedStyle(el).getPropertyValue('position');
if (position === 'fixed') {
return el;
} else {
return getFixedContainer(el.parentElement);
}
}
export default defineComponent({
props: {
manualShowing: {
type: Boolean,
required: false,
default: null,
},
srcCenter: {
type: Boolean,
required: false
},
src: {
type: Object as PropType<HTMLElement>,
required: false,
},
position: {
required: false
},
front: {
type: Boolean,
required: false,
default: false,
}
},
emits: ['opening', 'click', 'esc', 'close', 'closed'],
data() {
return {
showing: true,
fixed: false,
transformOrigin: 'center',
contentClicking: false,
point: null,
};
},
mounted() {
this.$watch('src', () => {
if (this.src) {
this.src.style.pointerEvents = 'none';
}
this.fixed = getFixedContainer(this.src) != null;
this.$nextTick(() => {
this.align();
});
}, { immediate: true });
this.$nextTick(() => {
const popover = this.$refs.content as any;
new ResizeObserver((entries, observer) => {
this.align();
}).observe(popover);
});
document.addEventListener('mousedown', this.onDocumentClick, { passive: true });
},
beforeUnmount() {
document.removeEventListener('mousedown', this.onDocumentClick);
},
methods: {
align() {
if (this.src == null) return;
const popover = this.$refs.content as any;
if (popover == null) return;
const rect = this.src.getBoundingClientRect();
const width = popover.offsetWidth;
const height = popover.offsetHeight;
let left;
let top;
if (this.srcCenter) {
const x = rect.left + (this.fixed ? 0 : window.pageXOffset) + (this.src.offsetWidth / 2);
const y = rect.top + (this.fixed ? 0 : window.pageYOffset) + (this.src.offsetHeight / 2);
left = (x - (width / 2));
top = (y - (height / 2));
} else {
const x = rect.left + (this.fixed ? 0 : window.pageXOffset) + (this.src.offsetWidth / 2);
const y = rect.top + (this.fixed ? 0 : window.pageYOffset) + this.src.offsetHeight;
left = (x - (width / 2));
top = y;
}
if (this.fixed) {
if (left + width > window.innerWidth) {
left = window.innerWidth - width;
}
if (top + height > window.innerHeight) {
top = window.innerHeight - height;
}
} else {
if (left + width - window.pageXOffset > window.innerWidth) {
left = window.innerWidth - width + window.pageXOffset - 1;
}
if (top + height - window.pageYOffset > window.innerHeight) {
top = window.innerHeight - height + window.pageYOffset - 1;
}
}
if (top < 0) {
top = 0;
}
if (left < 0) {
left = 0;
}
if (top > rect.top + (this.fixed ? 0 : window.pageYOffset)) {
this.point = 'top';
this.transformOrigin = 'center top';
} else {
this.point = null;
this.transformOrigin = 'center';
}
popover.style.left = left + 'px';
popover.style.top = top + 'px';
},
childRendered() {
//
const content = this.$refs.content.children[0];
content.addEventListener('mousedown', e => {
this.contentClicking = true;
window.addEventListener('mouseup', e => {
// click mouseup
setTimeout(() => {
this.contentClicking = false;
}, 100);
}, { passive: true, once: true });
}, { passive: true });
},
close() {
if (this.src) this.src.style.pointerEvents = 'auto';
this.showing = false;
this.$emit('close');
},
onClosed() {
this.$emit('closed');
},
onDocumentClick(ev) {
const flyoutElement = this.$refs.content;
let targetElement = ev.target;
do {
if (targetElement === flyoutElement) {
return;
}
targetElement = targetElement.parentNode;
} while (targetElement);
this.close();
}
}
});
</script>
<style lang="scss" scoped>
.popup-menu-enter-active {
transform-origin: var(--transformOrigin);
transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1), transform 0.2s cubic-bezier(0, 0, 0.2, 1) !important;
}
.popup-menu-leave-active {
transform-origin: var(--transformOrigin);
transition: opacity 0.2s cubic-bezier(0.4, 0, 1, 1), transform 0.2s cubic-bezier(0.4, 0, 1, 1) !important;
}
.popup-menu-enter-from, .popup-menu-leave-to {
pointer-events: none;
opacity: 0;
transform: scale(0.9);
}
.ccczpooj {
position: absolute;
z-index: 10000;
&.fixed {
position: fixed;
}
&.front {
z-index: 20000;
}
}
</style>

View file

@ -155,8 +155,7 @@ export default defineComponent({
> .label { > .label {
font-size: 0.85em; font-size: 0.85em;
padding: 0 0 6px 6px; padding: 0 0 8px 12px;
font-weight: bold;
user-select: none; user-select: none;
&:empty { &:empty {
@ -166,7 +165,7 @@ export default defineComponent({
> .caption { > .caption {
font-size: 0.8em; font-size: 0.8em;
padding: 6px 0 0 6px; padding: 8px 0 0 12px;
color: var(--fgTransparentWeak); color: var(--fgTransparentWeak);
&:empty { &:empty {
@ -197,6 +196,7 @@ export default defineComponent({
box-shadow: none; box-shadow: none;
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
transition: border-color 0.1s ease-out;
&:hover { &:hover {
border-color: var(--inputBorderHover); border-color: var(--inputBorderHover);

View file

@ -176,8 +176,7 @@ export default defineComponent({
> .label { > .label {
font-size: 0.85em; font-size: 0.85em;
padding: 0 0 6px 6px; padding: 0 0 8px 12px;
font-weight: bold;
user-select: none; user-select: none;
&:empty { &:empty {
@ -187,7 +186,7 @@ export default defineComponent({
> .caption { > .caption {
font-size: 0.8em; font-size: 0.8em;
padding: 6px 0 0 6px; padding: 8px 0 0 12px;
color: var(--fgTransparentWeak); color: var(--fgTransparentWeak);
&:empty { &:empty {
@ -218,6 +217,7 @@ export default defineComponent({
outline: none; outline: none;
box-shadow: none; box-shadow: none;
box-sizing: border-box; box-sizing: border-box;
transition: border-color 0.1s ease-out;
&:hover { &:hover {
border-color: var(--inputBorderHover); border-color: var(--inputBorderHover);

View file

@ -1,7 +1,7 @@
<template> <template>
<transition :name="$store.state.animation ? 'window' : ''" appear @after-leave="$emit('closed')"> <transition :name="$store.state.animation ? 'window' : ''" appear @after-leave="$emit('closed')">
<div class="ebkgocck" :class="{ front }" v-if="showing"> <div class="ebkgocck" :class="{ front }" v-if="showing">
<div class="body _popup _shadow _narrow_" @mousedown="onBodyMousedown" @keydown="onKeydown"> <div class="body _window _shadow _narrow_" @mousedown="onBodyMousedown" @keydown="onKeydown">
<div class="header" :class="{ mini }" @contextmenu.prevent.stop="onContextmenu"> <div class="header" :class="{ mini }" @contextmenu.prevent.stop="onContextmenu">
<button v-if="closeButton" class="_button" @click="close()"><i class="fas fa-times"></i></button> <button v-if="closeButton" class="_button" @click="close()"><i class="fas fa-times"></i></button>
@ -416,6 +416,7 @@ export default defineComponent({
flex-shrink: 0; flex-shrink: 0;
user-select: none; user-select: none;
height: var(--height); height: var(--height);
border-bottom: solid 1px var(--divider);
> ::v-deep(button) { > ::v-deep(button) {
height: var(--height); height: var(--height);

View file

@ -18,12 +18,12 @@
<div class="customize-container"> <div class="customize-container">
<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button> <button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button>
<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> <button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button>
<component :is="`mkw-${element.name}`" :widget="element" :setting-callback="setting => settings[element.id] = setting" :column="column" @updateProps="updateWidget(element.id, $event)"/> <component :is="`mkw-${element.name}`" :widget="element" :setting-callback="setting => settings[element.id] = setting" @updateProps="updateWidget(element.id, $event)"/>
</div> </div>
</template> </template>
</XDraggable> </XDraggable>
</template> </template>
<component v-else class="widget" v-for="widget in widgets" :is="`mkw-${widget.name}`" :key="widget.id" :widget="widget" :column="column" @updateProps="updateWidget(widget.id, $event)"/> <component v-else class="widget" v-for="widget in widgets" :is="`mkw-${widget.name}`" :key="widget.id" :widget="widget" @updateProps="updateWidget(widget.id, $event)"/>
</div> </div>
</template> </template>

View file

@ -272,6 +272,14 @@ watch(defaultStore.reactiveState.useBlurEffectForModal, v => {
document.documentElement.style.setProperty('--modalBgFilter', v ? 'blur(4px)' : 'none'); document.documentElement.style.setProperty('--modalBgFilter', v ? 'blur(4px)' : 'none');
}, { immediate: true }); }, { immediate: true });
watch(defaultStore.reactiveState.useBlurEffect, v => {
if (v) {
document.documentElement.style.removeProperty('--blur');
} else {
document.documentElement.style.setProperty('--blur', 'none');
}
}, { immediate: true });
let reloadDialogShowing = false; let reloadDialogShowing = false;
stream.on('_disconnected_', async () => { stream.on('_disconnected_', async () => {
if (defaultStore.state.serverDisconnectedBehavior === 'reload') { if (defaultStore.state.serverDisconnectedBehavior === 'reload') {

View file

@ -143,7 +143,7 @@ export const menuDef = {
title: 'switchUi', title: 'switchUi',
icon: 'fas fa-columns', icon: 'fas fa-columns',
action: (ev) => { action: (ev) => {
os.modalMenu([{ os.popupMenu([{
text: i18n.locale.default, text: i18n.locale.default,
action: () => { action: () => {
localStorage.setItem('ui', 'default'); localStorage.setItem('ui', 'default');

View file

@ -368,10 +368,10 @@ export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea:
}); });
} }
export function modalMenu(items: any[], src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) { export function popupMenu(items: any[], src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let dispose; let dispose;
popup(import('@client/components/ui/modal-menu.vue'), { popup(import('@client/components/ui/popup-menu.vue'), {
items, items,
src, src,
align: options?.align, align: options?.align,

View file

@ -68,40 +68,58 @@ import * as symbols from '@client/symbols';
const patrons = [ const patrons = [
'Satsuki Yanagi', 'Satsuki Yanagi',
'noellabo', 'noellabo',
'Gargron', 'mametsuko',
'Atsuko Tominaga',
'AureoleArk', 'AureoleArk',
'Gargron',
'Nokotaro Takeda',
'Suji Yan',
'Hekovic',
'Gitmo Life Services',
'nenohi',
'naga_rus', 'naga_rus',
'Melilot', 'Melilot',
'Hekovic',
'Nokotaro Takeda',
'dansup',
'nenohi',
'motcha',
'nanami kan',
'Eduardo Quiros',
'Peter G.',
'YUKIMOCHI',
'Efertone', 'Efertone',
'makokunsan', 'oi_yekssim',
'nanami kan',
'motcha',
'dansup',
'Quinton Macejkovic',
'YUKIMOCHI',
'mewl hayabusa', 'mewl hayabusa',
'makokunsan',
'Peter G.',
'Nesakko',
'regtan',
'見当かなみ', '見当かなみ',
'natalie', 'natalie',
'Jerry',
'takimura', 'takimura',
'sikyosyounin', 'sikyosyounin',
'weepjp', 'YuzuRyo61',
'mydarkstar',
'Nesakko',
'sheeta.s', 'sheeta.s',
'osapon', 'osapon',
'YuzuRyo61',
'wara',
'mkatze', 'mkatze',
'kiritan',
'CG', 'CG',
'nafuchoco',
'Takumi Sugita',
'chidori ninokura',
'mydarkstar',
'kiritan',
'kabo2468y',
'weepjp',
'Liaizon Wakest',
'Steffen K9',
'Roujo',
'uroco @99',
'totokoro',
'public_yusuke',
'wara',
'S Y',
'Denshi', 'Denshi',
'Osushimaru', 'Osushimaru',
'Liaizon Wakest', '吴浥',
'DignifiedSilence',
't_w',
]; ];
export default defineComponent({ export default defineComponent({

View file

@ -272,7 +272,7 @@ export default defineComponent({
showTypeMenu(e: MouseEvent) { showTypeMenu(e: MouseEvent) {
return new Promise<ThemeValue>((resolve) => { return new Promise<ThemeValue>((resolve) => {
os.modalMenu([{ os.popupMenu([{
text: this.$ts._theme.defaultValue, text: this.$ts._theme.defaultValue,
action: () => resolve(null), action: () => resolve(null),
}, { }, {

View file

@ -152,8 +152,8 @@ export default defineComponent({
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
-webkit-backdrop-filter: blur(16px); -webkit-backdrop-filter: var(--blur, blur(16px));
backdrop-filter: blur(16px); backdrop-filter: var(--blur, blur(16px));
background: rgba(0, 0, 0, 0.3); background: rgba(0, 0, 0, 0.3);
} }

View file

@ -79,7 +79,7 @@ export default defineComponent({
methods: { methods: {
menu(ev) { menu(ev) {
os.modalMenu([this.isOwned ? { os.popupMenu([this.isOwned ? {
icon: 'fas fa-pencil-alt', icon: 'fas fa-pencil-alt',
text: this.$ts.edit, text: this.$ts.edit,
action: async () => { action: async () => {

View file

@ -5,6 +5,7 @@
<div class="body" v-html="body"></div> <div class="body" v-html="body"></div>
<div class="footer"> <div class="footer">
<MkLink :url="`https://github.com/misskey-dev/misskey/blob/master/src/docs/${lang}/${doc}.md`" class="at">{{ $ts.docSource }}</MkLink> <MkLink :url="`https://github.com/misskey-dev/misskey/blob/master/src/docs/${lang}/${doc}.md`" class="at">{{ $ts.docSource }}</MkLink>
<p v-if="lang !== 'ja-JP'">{{ $ts.translateWarn }}</p>
</div> </div>
</div> </div>
</div> </div>
@ -115,7 +116,7 @@ export default defineComponent({
line-height: 1.5; line-height: 1.5;
&.max-width_500px { &.max-width_500px {
padding: 16px; padding: 24px;
} }
> .main { > .main {

View file

@ -80,7 +80,7 @@ export default defineComponent({
methods: { methods: {
menu(emoji, ev) { menu(emoji, ev) {
os.modalMenu([{ os.popupMenu([{
type: 'label', type: 'label',
text: ':' + emoji.name + ':', text: ':' + emoji.name + ':',
}, { }, {

View file

@ -228,6 +228,7 @@ export default defineComponent({
> .footer { > .footer {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 0.9em;
> .status { > .status {
&.suspended { &.suspended {
@ -249,7 +250,6 @@ export default defineComponent({
> .right { > .right {
margin-left: auto; margin-left: auto;
font-size: 0.9em;
> .latestStatus { > .latestStatus {
border: solid 1px var(--divider); border: solid 1px var(--divider);

View file

@ -14,6 +14,8 @@
</FormKeyValueView> </FormKeyValueView>
</FormGroup> </FormGroup>
<FormButton v-if="$i.isAdmin || $i.isModerator" @click="info" primary>{{ $ts.settings }}</FormButton>
<FormTextarea readonly :value="instance.description"> <FormTextarea readonly :value="instance.description">
<span>{{ $ts.description }}</span> <span>{{ $ts.description }}</span>
</FormTextarea> </FormTextarea>
@ -147,6 +149,7 @@ import * as os from '@client/os';
import number from '@client/filters/number'; import number from '@client/filters/number';
import bytes from '@client/filters/bytes'; import bytes from '@client/filters/bytes';
import * as symbols from '@client/symbols'; import * as symbols from '@client/symbols';
import MkInstanceInfo from '@client/pages/instance/instance.vue';
const chartLimit = 90; const chartLimit = 90;
const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b)); const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b));
@ -440,6 +443,12 @@ export default defineComponent({
}] }]
}; };
}, },
info() {
os.popup(MkInstanceInfo, {
instance: this.instance
}, {}, 'closed');
}
} }
}); });
</script> </script>

View file

@ -146,7 +146,7 @@ export default defineComponent({
}, },
remoteMenu(emoji, ev) { remoteMenu(emoji, ev) {
os.modalMenu([{ os.popupMenu([{
type: 'label', type: 'label',
text: ':' + emoji.name + ':', text: ':' + emoji.name + ':',
}, { }, {

View file

@ -167,7 +167,7 @@ export default defineComponent({
}; };
const lookup = (ev) => { const lookup = (ev) => {
os.modalMenu([{ os.popupMenu([{
text: i18n.locale.user, text: i18n.locale.user,
icon: 'fas fa-user', icon: 'fas fa-user',
action: () => { action: () => {

View file

@ -116,7 +116,7 @@ export default defineComponent({
}, },
start(ev) { start(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.messagingWithUser, text: this.$ts.messagingWithUser,
icon: 'fas fa-user', icon: 'fas fa-user',
action: () => { this.startUser() } action: () => { this.startUser() }

View file

@ -320,7 +320,7 @@ const Component = defineComponent({
menu(ev) { menu(ev) {
const path = this.groupId ? `/my/messaging/group/${this.groupId}` : `/my/messaging/${this.userAcct}`; const path = this.groupId ? `/my/messaging/group/${this.groupId}` : `/my/messaging/${this.userAcct}`;
os.modalMenu([this.inWindow ? undefined : { os.popupMenu([this.inWindow ? undefined : {
text: this.$ts.openInWindow, text: this.$ts.openInWindow,
icon: 'fas fa-window-maximize', icon: 'fas fa-window-maximize',
action: () => { action: () => {

View file

@ -333,8 +333,8 @@ export default defineComponent({
top: var(--stickyTop, 0px); top: var(--stickyTop, 0px);
padding: 16px; padding: 16px;
font-weight: bold; font-weight: bold;
-webkit-backdrop-filter: blur(10px); -webkit-backdrop-filter: var(--blur, blur(10px));
backdrop-filter: blur(10px); backdrop-filter: var(--blur, blur(10px));
background-color: var(--X16); background-color: var(--X16);
} }

View file

@ -1,11 +1,12 @@
<template> <template>
<div class="qkcjvfiv _section"> <div class="qkcjvfiv">
<MkButton @click="create" primary class="add"><i class="fas fa-plus"></i> {{ $ts.createList }}</MkButton> <MkButton @click="create" primary class="add"><i class="fas fa-plus"></i> {{ $ts.createList }}</MkButton>
<MkPagination :pagination="pagination" #default="{items}" class="lists _content" ref="list"> <MkPagination :pagination="pagination" #default="{items}" class="lists _content" ref="list">
<div class="list _panel" v-for="(list, i) in items" :key="list.id"> <MkA v-for="list in items" :key="list.id" class="list _panel" :to="`/my/lists/${ list.id }`">
<MkA :to="`/my/lists/${ list.id }`">{{ list.name }}</MkA> <div class="name">{{ list.name }}</div>
</div> <MkAvatars :user-ids="list.userIds"/>
</MkA>
</MkPagination> </MkPagination>
</div> </div>
</template> </template>
@ -14,6 +15,7 @@
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import MkPagination from '@client/components/ui/pagination.vue'; import MkPagination from '@client/components/ui/pagination.vue';
import MkButton from '@client/components/ui/button.vue'; import MkButton from '@client/components/ui/button.vue';
import MkAvatars from '@client/components/avatars.vue';
import * as os from '@client/os'; import * as os from '@client/os';
import * as symbols from '@client/symbols'; import * as symbols from '@client/symbols';
@ -21,6 +23,7 @@ export default defineComponent({
components: { components: {
MkPagination, MkPagination,
MkButton, MkButton,
MkAvatars,
}, },
data() { data() {
@ -57,14 +60,27 @@ export default defineComponent({
<style lang="scss" scoped> <style lang="scss" scoped>
.qkcjvfiv { .qkcjvfiv {
padding: 16px;
> .add { > .add {
margin: 0 auto var(--margin) auto; margin: 0 auto var(--margin) auto;
} }
> .lists { > .lists {
> .list { > .list {
display: flex; display: block;
padding: 16px; padding: 16px;
border: solid 1px var(--divider);
border-radius: 6px;
&:hover {
border: solid 1px var(--accent);
text-decoration: none;
}
> .name {
margin-bottom: 4px;
}
} }
} }
} }

View file

@ -64,7 +64,7 @@ export default defineComponent({
methods: { methods: {
menu(account, ev) { menu(account, ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.switch, text: this.$ts.switch,
icon: 'fas fa-exchange-alt', icon: 'fas fa-exchange-alt',
action: () => this.switchAccount(account), action: () => this.switchAccount(account),
@ -77,7 +77,7 @@ export default defineComponent({
}, },
addAccount(ev) { addAccount(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.existingAccount, text: this.$ts.existingAccount,
action: () => { this.addExistingAccount(); }, action: () => { this.addExistingAccount(); },
}, { }, {

View file

@ -33,6 +33,7 @@
<template #label>{{ $ts.appearance }}</template> <template #label>{{ $ts.appearance }}</template>
<FormSwitch v-model:value="disableAnimatedMfm">{{ $ts.disableAnimatedMfm }}</FormSwitch> <FormSwitch v-model:value="disableAnimatedMfm">{{ $ts.disableAnimatedMfm }}</FormSwitch>
<FormSwitch v-model:value="reduceAnimation">{{ $ts.reduceUiAnimation }}</FormSwitch> <FormSwitch v-model:value="reduceAnimation">{{ $ts.reduceUiAnimation }}</FormSwitch>
<FormSwitch v-model:value="useBlurEffect">{{ $ts.useBlurEffect }}</FormSwitch>
<FormSwitch v-model:value="useBlurEffectForModal">{{ $ts.useBlurEffectForModal }}</FormSwitch> <FormSwitch v-model:value="useBlurEffectForModal">{{ $ts.useBlurEffectForModal }}</FormSwitch>
<FormSwitch v-model:value="showGapBetweenNotesInTimeline">{{ $ts.showGapBetweenNotesInTimeline }}</FormSwitch> <FormSwitch v-model:value="showGapBetweenNotesInTimeline">{{ $ts.showGapBetweenNotesInTimeline }}</FormSwitch>
<FormSwitch v-model:value="loadRawImages">{{ $ts.loadRawImages }}</FormSwitch> <FormSwitch v-model:value="loadRawImages">{{ $ts.loadRawImages }}</FormSwitch>
@ -132,6 +133,7 @@ export default defineComponent({
serverDisconnectedBehavior: defaultStore.makeGetterSetter('serverDisconnectedBehavior'), serverDisconnectedBehavior: defaultStore.makeGetterSetter('serverDisconnectedBehavior'),
reduceAnimation: defaultStore.makeGetterSetter('animation', v => !v, v => !v), reduceAnimation: defaultStore.makeGetterSetter('animation', v => !v, v => !v),
useBlurEffectForModal: defaultStore.makeGetterSetter('useBlurEffectForModal'), useBlurEffectForModal: defaultStore.makeGetterSetter('useBlurEffectForModal'),
useBlurEffect: defaultStore.makeGetterSetter('useBlurEffect'),
showGapBetweenNotesInTimeline: defaultStore.makeGetterSetter('showGapBetweenNotesInTimeline'), showGapBetweenNotesInTimeline: defaultStore.makeGetterSetter('showGapBetweenNotesInTimeline'),
disableAnimatedMfm: defaultStore.makeGetterSetter('animatedMfm', v => !v, v => !v), disableAnimatedMfm: defaultStore.makeGetterSetter('animatedMfm', v => !v, v => !v),
useOsNativeEmojis: defaultStore.makeGetterSetter('useOsNativeEmojis'), useOsNativeEmojis: defaultStore.makeGetterSetter('useOsNativeEmojis'),

View file

@ -94,7 +94,7 @@ export default defineComponent({
}, },
remove(reaction, ev) { remove(reaction, ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.remove, text: this.$ts.remove,
action: () => { action: () => {
this.reactions = this.reactions.filter(x => x !== reaction) this.reactions = this.reactions.filter(x => x !== reaction)

View file

@ -147,7 +147,7 @@ export default defineComponent({
this.saveSrc(); this.saveSrc();
} }
})); }));
os.modalMenu(items, ev.currentTarget || ev.target); os.popupMenu(items, ev.currentTarget || ev.target);
}, },
async chooseAntenna(ev) { async chooseAntenna(ev) {
@ -161,7 +161,7 @@ export default defineComponent({
this.saveSrc(); this.saveSrc();
} }
})); }));
os.modalMenu(items, ev.currentTarget || ev.target); os.popupMenu(items, ev.currentTarget || ev.target);
}, },
async chooseChannel(ev) { async chooseChannel(ev) {
@ -177,7 +177,7 @@ export default defineComponent({
this.$router.push(`/channels/${channel.id}`); this.$router.push(`/channels/${channel.id}`);
} }
})); }));
os.modalMenu(items, ev.currentTarget || ev.target); os.popupMenu(items, ev.currentTarget || ev.target);
}, },
saveSrc() { saveSrc() {

View file

@ -338,7 +338,7 @@ export default defineComponent({
}, },
menu(ev) { menu(ev) {
os.modalMenu(getUserMenu(this.user), ev.currentTarget || ev.target); os.popupMenu(getUserMenu(this.user), ev.currentTarget || ev.target);
}, },
parallaxLoop() { parallaxLoop() {
@ -613,8 +613,8 @@ export default defineComponent({
position: absolute; position: absolute;
top: 12px; top: 12px;
right: 12px; right: 12px;
-webkit-backdrop-filter: blur(8px); -webkit-backdrop-filter: var(--blur, blur(8px));
backdrop-filter: blur(8px); backdrop-filter: var(--blur, blur(8px));
background: rgba(0, 0, 0, 0.2); background: rgba(0, 0, 0, 0.2);
padding: 8px; padding: 8px;
border-radius: 24px; border-radius: 24px;

View file

@ -117,7 +117,7 @@ export default defineComponent({
}, },
showMenu(ev) { showMenu(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$t('aboutX', { x: instanceName }), text: this.$t('aboutX', { x: instanceName }),
icon: 'fas fa-info-circle', icon: 'fas fa-info-circle',
action: () => { action: () => {
@ -260,6 +260,7 @@ export default defineComponent({
display: block; display: block;
margin: 0; margin: 0;
padding: 32px 32px 24px 32px; padding: 32px 32px 24px 32px;
font-size: 1.5em;
> .logo { > .logo {
vertical-align: bottom; vertical-align: bottom;

View file

@ -101,7 +101,7 @@ export default defineComponent({
}, },
showMenu(ev) { showMenu(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$t('aboutX', { x: instanceName }), text: this.$t('aboutX', { x: instanceName }),
icon: 'fas fa-info-circle', icon: 'fas fa-info-circle',
action: () => { action: () => {

View file

@ -121,7 +121,7 @@ export default defineComponent({
}, },
showMenu(ev) { showMenu(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$t('aboutX', { x: instanceName }), text: this.$t('aboutX', { x: instanceName }),
icon: 'fas fa-info-circle', icon: 'fas fa-info-circle',
action: () => { action: () => {

View file

@ -201,7 +201,11 @@ export default (opts) => ({
if (isBottom) { if (isBottom) {
// オーバーフローしたら古いアイテムは捨てる // オーバーフローしたら古いアイテムは捨てる
if (this.items.length >= opts.displayLimit) { if (this.items.length >= opts.displayLimit) {
this.items = this.items.slice(-opts.displayLimit); // このやり方だとVue 3.2以降アニメーションが動かなくなる
//this.items = this.items.slice(-opts.displayLimit);
while (this.items.length >= opts.displayLimit) {
this.items.shift();
}
this.more = true; this.more = true;
} }
} }
@ -216,7 +220,11 @@ export default (opts) => ({
// オーバーフローしたら古いアイテムは捨てる // オーバーフローしたら古いアイテムは捨てる
if (this.items.length >= opts.displayLimit) { if (this.items.length >= opts.displayLimit) {
this.items = this.items.slice(0, opts.displayLimit); // このやり方だとVue 3.2以降アニメーションが動かなくなる
//this.items = this.items.slice(0, opts.displayLimit);
while (this.items.length >= opts.displayLimit) {
this.items.pop();
}
this.more = true; this.more = true;
} }
} else { } else {

View file

@ -69,7 +69,7 @@ export function selectFile(src: any, label: string | null, multiple = false) {
}); });
}; };
os.modalMenu([label ? { os.popupMenu([label ? {
text: label, text: label,
type: 'label' type: 'label'
} : undefined, { } : undefined, {

View file

@ -23,6 +23,7 @@ export const builtinThemes = [
require('@client/themes/d-dark.json5'), require('@client/themes/d-dark.json5'),
require('@client/themes/d-persimmon.json5'), require('@client/themes/d-persimmon.json5'),
require('@client/themes/d-astro.json5'), require('@client/themes/d-astro.json5'),
require('@client/themes/d-future.json5'),
require('@client/themes/d-black.json5'), require('@client/themes/d-black.json5'),
] as Theme[]; ] as Theme[];

View file

@ -142,6 +142,10 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'device', where: 'device',
default: true default: true
}, },
useBlurEffect: {
where: 'device',
default: false
},
showFixedPostForm: { showFixedPostForm: {
where: 'device', where: 'device',
default: false default: false

View file

@ -189,7 +189,7 @@ hr {
._buttonPrimary { ._buttonPrimary {
@extend ._button; @extend ._button;
color: #fff; color: var(--fgOnAccent);
background: var(--accent); background: var(--accent);
&:not(:disabled):hover { &:not(:disabled):hover {
@ -318,12 +318,18 @@ hr {
} }
} }
._popup { ._window {
background: var(--panel); background: var(--panel);
border-radius: var(--radius); border-radius: var(--radius);
contain: content; contain: content;
} }
._popup {
background: var(--popup);
border-radius: var(--radius);
contain: layout; // ふき出しがボックスから飛び出て表示されるようなデザインをする場合もあるので paint contain することができない
}
._root { ._root {
box-sizing: border-box; box-sizing: border-box;
margin: var(--root-margin, 32px) auto; margin: var(--root-margin, 32px) auto;
@ -398,8 +404,8 @@ hr {
._acrylic { ._acrylic {
background: var(--acrylicPanel); background: var(--acrylicPanel);
-webkit-backdrop-filter: blur(15px); -webkit-backdrop-filter: var(--blur, blur(15px));
backdrop-filter: blur(15px); backdrop-filter: var(--blur, blur(15px));
} }
._inputSplit { ._inputSplit {

View file

@ -19,6 +19,7 @@
fgTransparentWeak: ':alpha<0.75<@fg', fgTransparentWeak: ':alpha<0.75<@fg',
fgTransparent: ':alpha<0.5<@fg', fgTransparent: ':alpha<0.5<@fg',
fgHighlighted: ':lighten<3<@fg', fgHighlighted: ':lighten<3<@fg',
fgOnAccent: '#fff',
divider: 'rgba(255, 255, 255, 0.1)', divider: 'rgba(255, 255, 255, 0.1)',
indicator: '@accent', indicator: '@accent',
panel: ':lighten<3<@bg', panel: ':lighten<3<@bg',
@ -28,6 +29,7 @@
panelHeaderDivider: 'rgba(0, 0, 0, 0)', panelHeaderDivider: 'rgba(0, 0, 0, 0)',
panelBorder: '" solid 1px var(--divider)', panelBorder: '" solid 1px var(--divider)',
acrylicPanel: ':alpha<0.5<@panel', acrylicPanel: ':alpha<0.5<@panel',
popup: ':lighten<3<@panel',
shadow: 'rgba(0, 0, 0, 0.3)', shadow: 'rgba(0, 0, 0, 0.3)',
header: ':alpha<0.7<@panel', header: ':alpha<0.7<@panel',
navBg: '@panel', navBg: '@panel',

View file

@ -19,6 +19,7 @@
fgTransparentWeak: ':alpha<0.75<@fg', fgTransparentWeak: ':alpha<0.75<@fg',
fgTransparent: ':alpha<0.5<@fg', fgTransparent: ':alpha<0.5<@fg',
fgHighlighted: ':darken<3<@fg', fgHighlighted: ':darken<3<@fg',
fgOnAccent: '#fff',
divider: 'rgba(0, 0, 0, 0.1)', divider: 'rgba(0, 0, 0, 0.1)',
indicator: '@accent', indicator: '@accent',
panel: ':lighten<3<@bg', panel: ':lighten<3<@bg',
@ -28,6 +29,7 @@
panelHeaderDivider: 'rgba(0, 0, 0, 0)', panelHeaderDivider: 'rgba(0, 0, 0, 0)',
panelBorder: '" solid 1px var(--divider)', panelBorder: '" solid 1px var(--divider)',
acrylicPanel: ':alpha<0.5<@panel', acrylicPanel: ':alpha<0.5<@panel',
popup: ':lighten<3<@panel',
shadow: 'rgba(0, 0, 0, 0.1)', shadow: 'rgba(0, 0, 0, 0.1)',
header: ':alpha<0.7<@panel', header: ':alpha<0.7<@panel',
navBg: '@panel', navBg: '@panel',

View file

@ -0,0 +1,25 @@
{
id: '32a637ef-b47a-4775-bb7b-bacbb823f865',
name: 'Mi Future',
author: 'syuilo',
base: 'dark',
props: {
accent: '#63e2b7',
bg: '#101014',
fg: '#D5D5D6',
fgHighlighted: '#fff',
fgOnAccent: '#000',
divider: 'rgba(255, 255, 255, 0.1)',
panel: '#18181c',
panelHeaderBg: '@panel',
panelHeaderDivider: '@divider',
renote: '@accent',
mention: '#f2c97d',
mentionMe: '@accent',
hashtag: '#70c0e8',
link: '#e88080',
},
}

View file

@ -31,7 +31,7 @@
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import { modalMenu } from '@client/os'; import { popupMenu } from '@client/os';
import { url } from '@client/config'; import { url } from '@client/config';
export default defineComponent({ export default defineComponent({
@ -121,7 +121,7 @@ export default defineComponent({
if (menu.length > 0) menu.push(null); if (menu.length > 0) menu.push(null);
menu = menu.concat(this.menu); menu = menu.concat(this.menu);
} }
modalMenu(menu, ev.currentTarget || ev.target); popupMenu(menu, ev.currentTarget || ev.target);
} }
} }
}); });

View file

@ -150,7 +150,7 @@ export default defineComponent({
}); });
})); }));
os.modalMenu([...[{ os.popupMenu([...[{
type: 'link', type: 'link',
text: this.$ts.profile, text: this.$ts.profile,
to: `/@${ this.$i.username }`, to: `/@${ this.$i.username }`,
@ -159,7 +159,7 @@ export default defineComponent({
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.addAccount, text: this.$ts.addAccount,
action: () => { action: () => {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.existingAccount, text: this.$ts.existingAccount,
action: () => { this.addAccount(); }, action: () => { this.addAccount(); },
}, { }, {
@ -374,8 +374,8 @@ export default defineComponent({
padding-top: 8px; padding-top: 8px;
padding-bottom: 8px; padding-bottom: 8px;
background: var(--X14); background: var(--X14);
-webkit-backdrop-filter: blur(8px); -webkit-backdrop-filter: var(--blur, blur(8px));
backdrop-filter: blur(8px); backdrop-filter: var(--blur, blur(8px));
} }
&:first-child { &:first-child {

View file

@ -55,7 +55,7 @@
<MkA to="/my/favorites" class="item"><i class="fas fa-star icon"></i>{{ $ts.favorites }}</MkA> <MkA to="/my/favorites" class="item"><i class="fas fa-star icon"></i>{{ $ts.favorites }}</MkA>
</div> </div>
</div> </div>
<MkAd class="a" prefer="square"/> <MkAd class="a" :prefer="['square']"/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="left"> <div class="left">
@ -373,8 +373,8 @@ export default defineComponent({
position: sticky; position: sticky;
top: 0; top: 0;
background: var(--X17); background: var(--X17);
-webkit-backdrop-filter: blur(8px); -webkit-backdrop-filter: var(--blur, blur(8px));
backdrop-filter: blur(8px); backdrop-filter: var(--blur, blur(8px));
z-index: 1; z-index: 1;
color: var(--fgTransparentWeak); color: var(--fgTransparentWeak);

View file

@ -432,7 +432,7 @@ export default defineComponent({
pleaseLogin(); pleaseLogin();
this.operating = true; this.operating = true;
this.blur(); this.blur();
os.modalMenu([{ os.popupMenu([{
text: this.$ts.renote, text: this.$ts.renote,
icon: 'fas fa-retweet', icon: 'fas fa-retweet',
action: () => { action: () => {
@ -726,7 +726,7 @@ export default defineComponent({
menu(viaKeyboard = false) { menu(viaKeyboard = false) {
this.operating = true; this.operating = true;
os.modalMenu(this.getMenu(), this.$refs.menuButton, { os.popupMenu(this.getMenu(), this.$refs.menuButton, {
viaKeyboard viaKeyboard
}).then(() => { }).then(() => {
this.operating = false; this.operating = false;
@ -736,7 +736,7 @@ export default defineComponent({
showRenoteMenu(viaKeyboard = false) { showRenoteMenu(viaKeyboard = false) {
if (!this.isMyRenote) return; if (!this.isMyRenote) return;
os.modalMenu([{ os.popupMenu([{
text: this.$ts.unrenote, text: this.$ts.unrenote,
icon: 'fas fa-trash-alt', icon: 'fas fa-trash-alt',
danger: true, danger: true,
@ -780,7 +780,7 @@ export default defineComponent({
async clip() { async clip() {
const clips = await os.api('clips/list'); const clips = await os.api('clips/list');
os.modalMenu([{ os.popupMenu([{
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.createNew, text: this.$ts.createNew,
action: async () => { action: async () => {

View file

@ -178,7 +178,7 @@ export default defineComponent({
}, },
openChannelMenu(ev) { openChannelMenu(ev) {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.copyUrl, text: this.$ts.copyUrl,
icon: 'fas fa-link', icon: 'fas fa-link',
action: () => { action: () => {

View file

@ -593,7 +593,7 @@ export default defineComponent({
}, },
showActions(ev) { showActions(ev) {
os.modalMenu(postFormActions.map(action => ({ os.popupMenu(postFormActions.map(action => ({
text: action.title, text: action.title,
action: () => { action: () => {
action.handler({ action.handler({

View file

@ -130,8 +130,8 @@ export default defineComponent({
width: 100%; width: 100%;
font-weight: bold; font-weight: bold;
//background-color: var(--panel); //background-color: var(--panel);
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
border-bottom: solid 0.5px var(--divider); border-bottom: solid 0.5px var(--divider);
box-sizing: border-box; box-sizing: border-box;

View file

@ -305,8 +305,8 @@ export default defineComponent({
&.naked { &.naked {
background: var(--acrylicBg) !important; background: var(--acrylicBg) !important;
-webkit-backdrop-filter: blur(10px); -webkit-backdrop-filter: var(--blur, blur(10px));
backdrop-filter: blur(10px); backdrop-filter: var(--blur, blur(10px));
> header { > header {
background: transparent; background: transparent;

View file

@ -116,7 +116,7 @@ export default defineComponent({
}); });
})); }));
os.modalMenu([...[{ os.popupMenu([...[{
type: 'link', type: 'link',
text: this.$ts.profile, text: this.$ts.profile,
to: `/@${ this.$i.username }`, to: `/@${ this.$i.username }`,
@ -125,7 +125,7 @@ export default defineComponent({
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.addAccount, text: this.$ts.addAccount,
action: () => { action: () => {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.existingAccount, text: this.$ts.existingAccount,
action: () => { this.addAccount(); }, action: () => { this.addAccount(); },
}, { }, {

View file

@ -138,8 +138,8 @@ export default defineComponent({
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
//background-color: var(--panel); //background-color: var(--panel);
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
> ._button { > ._button {

View file

@ -136,7 +136,7 @@ export default defineComponent({
}); });
})); }));
os.modalMenu([...[{ os.popupMenu([...[{
type: 'link', type: 'link',
text: this.$ts.profile, text: this.$ts.profile,
to: `/@${ this.$i.username }`, to: `/@${ this.$i.username }`,
@ -145,7 +145,7 @@ export default defineComponent({
icon: 'fas fa-plus', icon: 'fas fa-plus',
text: this.$ts.addAccount, text: this.$ts.addAccount,
action: () => { action: () => {
os.modalMenu([{ os.popupMenu([{
text: this.$ts.existingAccount, text: this.$ts.existingAccount,
action: () => { this.addAccount(); }, action: () => { this.addAccount(); },
}, { }, {

View file

@ -12,7 +12,7 @@
</div> </div>
</template> </template>
<main class="main _panel" @contextmenu.stop="onContextmenu"> <main class="main" @contextmenu.stop="onContextmenu">
<header class="header" @click="onHeaderClick"> <header class="header" @click="onHeaderClick">
<XHeader :info="pageInfo" :back-button="true" @back="back()"/> <XHeader :info="pageInfo" :back-button="true" @back="back()"/>
</header> </header>
@ -240,7 +240,7 @@ export default defineComponent({
&.wallpaper { &.wallpaper {
background: var(--wallpaperOverlay); background: var(--wallpaperOverlay);
//backdrop-filter: blur(4px); //backdrop-filter: var(--blur, blur(4px));
} }
&.isMobile { &.isMobile {
@ -292,7 +292,10 @@ export default defineComponent({
width: 750px; width: 750px;
margin: 0 16px 0 0; margin: 0 16px 0 0;
background: var(--panel); background: var(--panel);
border-left: solid 1px var(--divider);
border-right: solid 1px var(--divider);
border-radius: 0; border-radius: 0;
overflow: clip;
--margin: 12px; --margin: 12px;
> .header { > .header {
@ -300,8 +303,8 @@ export default defineComponent({
z-index: 1000; z-index: 1000;
top: var(--globalHeaderHeight, 0px); top: var(--globalHeaderHeight, 0px);
height: $header-height; height: $header-height;
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
border-bottom: solid 0.5px var(--divider); border-bottom: solid 0.5px var(--divider);
} }
@ -343,6 +346,7 @@ export default defineComponent({
> .main { > .main {
margin-top: 0; margin-top: 0;
border: solid 1px var(--divider);
border-radius: var(--radius); border-radius: var(--radius);
} }
@ -376,8 +380,8 @@ export default defineComponent({
display: flex; display: flex;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
border-top: solid 0.5px var(--divider); border-top: solid 0.5px var(--divider);

View file

@ -1,7 +1,7 @@
<template> <template>
<div class="ddiqwdnk"> <div class="ddiqwdnk">
<XWidgets class="widgets" :edit="editMode" :widgets="$store.reactiveState.widgets.value.filter(w => w.place === place)" @add-widget="addWidget" @remove-widget="removeWidget" @update-widget="updateWidget" @update-widgets="updateWidgets" @exit="editMode = false"/> <XWidgets class="widgets" :edit="editMode" :widgets="$store.reactiveState.widgets.value.filter(w => w.place === place)" @add-widget="addWidget" @remove-widget="removeWidget" @update-widget="updateWidget" @update-widgets="updateWidgets" @exit="editMode = false"/>
<MkAd class="a" prefer="square"/> <MkAd class="a" :prefer="['square']"/>
<button v-if="editMode" @click="editMode = false" class="_textButton edit" style="font-size: 0.9em;"><i class="fas fa-check"></i> {{ $ts.editWidgetsExit }}</button> <button v-if="editMode" @click="editMode = false" class="_textButton edit" style="font-size: 0.9em;"><i class="fas fa-check"></i> {{ $ts.editWidgetsExit }}</button>
<button v-else @click="editMode = true" class="_textButton edit" style="font-size: 0.9em;"><i class="fas fa-pencil-alt"></i> {{ $ts.editWidgets }}</button> <button v-else @click="editMode = true" class="_textButton edit" style="font-size: 0.9em;"><i class="fas fa-pencil-alt"></i> {{ $ts.editWidgets }}</button>

View file

@ -250,7 +250,7 @@ export default defineComponent({
&.wallpaper { &.wallpaper {
background: var(--wallpaperOverlay); background: var(--wallpaperOverlay);
//backdrop-filter: blur(4px); //backdrop-filter: var(--blur, blur(4px));
} }
> .contents { > .contents {
@ -269,8 +269,8 @@ export default defineComponent({
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
//background-color: var(--panel); //background-color: var(--panel);
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
//border-bottom: solid 0.5px var(--divider); //border-bottom: solid 0.5px var(--divider);
user-select: none; user-select: none;
@ -341,8 +341,8 @@ export default defineComponent({
display: flex; display: flex;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
&:not(.navHidden) { &:not(.navHidden) {

View file

@ -90,8 +90,8 @@ export default defineComponent({
left: 0; left: 0;
z-index: 1000; z-index: 1000;
line-height: $height; line-height: $height;
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--X16); background-color: var(--X16);
> .wide { > .wide {

View file

@ -122,8 +122,8 @@ export default defineComponent({
background: rgba(0, 0, 0, 0.3); background: rgba(0, 0, 0, 0.3);
&.transparent { &.transparent {
-webkit-backdrop-filter: blur(12px); -webkit-backdrop-filter: var(--blur, blur(12px));
backdrop-filter: blur(12px); backdrop-filter: var(--blur, blur(12px));
} }
} }
@ -140,8 +140,8 @@ export default defineComponent({
margin: 0 auto; margin: 0 auto;
> .panel { > .panel {
-webkit-backdrop-filter: blur(8px); -webkit-backdrop-filter: var(--blur, blur(8px));
backdrop-filter: blur(8px); backdrop-filter: var(--blur, blur(8px));
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
border-radius: var(--radius); border-radius: var(--radius);

View file

@ -89,8 +89,8 @@ export default defineComponent({
line-height: $header-height; line-height: $header-height;
text-align: center; text-align: center;
//background-color: var(--panel); //background-color: var(--panel);
-webkit-backdrop-filter: blur(32px); -webkit-backdrop-filter: var(--blur, blur(32px));
backdrop-filter: blur(32px); backdrop-filter: var(--blur, blur(32px));
background-color: var(--header); background-color: var(--header);
border-bottom: solid 0.5px var(--divider); border-bottom: solid 0.5px var(--divider);
} }

View file

@ -86,7 +86,7 @@ export default defineComponent({
this.setSrc('list'); this.setSrc('list');
} }
})); }));
os.modalMenu([{ os.popupMenu([{
text: this.$ts._timelines.home, text: this.$ts._timelines.home,
icon: 'fas fa-home', icon: 'fas fa-home',
action: () => { this.setSrc('home') } action: () => { this.setSrc('home') }

View file

@ -0,0 +1,8 @@
# LTL/STL/GTLの無効化
Misskeyでは、LTL/STL/GTLをそれぞれ無効化することができます。有効/無効を切り替えるには、インスタンスコントロールパネルで設定します。
LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。

View file

@ -0,0 +1,5 @@
# よくある質問
ここでは、サーバー管理者向けのよくある質問を掲載しています。
## デフォルトテーマを設定したい
現在、デフォルトテーマ設定機能は実装されていません。

View file

@ -0,0 +1,7 @@
# AiScript
AiScriptは、Misskeyで使用できるスクリプト言語です。
<div class="info"> AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
## 使い方
AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。

Some files were not shown because too many files have changed in this diff Show more