diff --git a/.gitignore b/.gitignore index 1488a65f683803..4106e3f7f8f0db 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,6 @@ yarn-debug.log # Ignore Docker option files docker-compose.override.yml + +# Ignore dotenv .local files +.env*.local diff --git a/.rubocop.yml b/.rubocop.yml index b0b92fcce031a0..23ebffde80870c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -194,6 +194,11 @@ Style/FormatStringToken: AllowedMethods: - redirect_with_vary +# Reason: Prevailing style choice +# https://docs.rubocop.org/rubocop/cops_style.html#stylehashaslastarrayitem +Style/HashAsLastArrayItem: + Enabled: false + # Reason: Enforce modern Ruby style # https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax Style/HashSyntax: diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index be9351a661d596..721d40a5d09ecc 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -131,19 +131,6 @@ Style/GuardClause: - 'lib/mastodon/cli/media.rb' - 'lib/tasks/repo.rake' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: braces, no_braces -Style/HashAsLastArrayItem: - Exclude: - - 'app/controllers/admin/statuses_controller.rb' - - 'app/controllers/api/v1/statuses_controller.rb' - - 'app/models/concerns/account/counters.rb' - - 'app/models/concerns/status/threading_concern.rb' - - 'app/models/status.rb' - - 'app/services/batched_remove_status_service.rb' - - 'app/services/notify_service.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Style/HashTransformValues: Exclude: diff --git a/.ruby-version b/.ruby-version index b347b11eac8ae6..351227fca344ed 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.3 +3.2.4 diff --git a/Dockerfile b/Dockerfile index 43bc24295d72c7..a95d41a65b5762 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,15 +7,15 @@ ARG TARGETPLATFORM=${TARGETPLATFORM} ARG BUILDPLATFORM=${BUILDPLATFORM} -# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.3"] -ARG RUBY_VERSION="3.2.3" +# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.4"] +ARG RUBY_VERSION="3.2.4" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] ARG NODE_MAJOR_VERSION="20" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node -# Ruby image to use for base image based on combined variables (ex: 3.2.3-slim-bookworm) +# Ruby image to use for base image based on combined variables (ex: 3.2.4-slim-bookworm) FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA @@ -29,7 +29,7 @@ ARG MASTODON_VERSION_METADATA="" # See: https://docs.joinmastodon.org/admin/config/#rails_serve_static_files ARG RAILS_SERVE_STATIC_FILES="true" # Allow to use YJIT compiler -# See: https://github.com/ruby/ruby/blob/v3_2_3/doc/yjit/yjit.md +# See: https://github.com/ruby/ruby/blob/v3_2_4/doc/yjit/yjit.md ARG RUBY_YJIT_ENABLE="1" # Timezone used by the Docker container and runtime, change with [--build-arg TZ=Europe/Berlin] ARG TZ="Etc/UTC" @@ -262,4 +262,4 @@ USER mastodon # Expose default Puma ports EXPOSE 3000 # Set container tini as default entry point -ENTRYPOINT ["/usr/bin/tini", "--"] \ No newline at end of file +ENTRYPOINT ["/usr/bin/tini", "--"] diff --git a/Gemfile.lock b/Gemfile.lock index 7068f5dd55d344..620da849924426 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -693,7 +693,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - selenium-webdriver (4.19.0) + selenium-webdriver (4.20.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index 64b516d81561fa..2070a7c70ce8f8 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -125,7 +125,7 @@ def edit_status_account_id return @edit_account_id || @account.id if @edit_account_checked @edit_account_checked = true - @edit_account_id = Account.local.find_by(username: 'official')&.id || @account.id + @edit_account_id = Account.representative.id end def filter_params diff --git a/app/javascript/mastodon/actions/markers.ts b/app/javascript/mastodon/actions/markers.ts index 84e5b33bcc00ec..6ecc867169f1a6 100644 --- a/app/javascript/mastodon/actions/markers.ts +++ b/app/javascript/mastodon/actions/markers.ts @@ -3,7 +3,7 @@ import { List as ImmutableList } from 'immutable'; import { debounce } from 'lodash'; import type { MarkerJSON } from 'mastodon/api_types/markers'; -import type { RootState } from 'mastodon/store'; +import type { AppDispatch, RootState } from 'mastodon/store'; import { createAppAsyncThunk } from 'mastodon/store/typed_functions'; import api, { authorizationTokenFromState } from '../api'; @@ -72,18 +72,21 @@ interface MarkerParam { } function getLastHomeId(state: RootState): string | undefined { - /* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ + // eslint-disable-next-line @typescript-eslint/no-unsafe-return return ( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call state // @ts-expect-error state.timelines is not yet typed .getIn(['timelines', 'home', 'items'], ImmutableList()) // @ts-expect-error state.timelines is not yet typed + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access .find((item) => item !== null) ); } function getLastNotificationId(state: RootState): string | undefined { // @ts-expect-error state.notifications is not yet typed + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call return state.getIn(['notifications', 'lastReadId']); } @@ -131,8 +134,8 @@ export const submitMarkersAction = createAppAsyncThunk<{ }); const debouncedSubmitMarkers = debounce( - (dispatch) => { - dispatch(submitMarkersAction()); + (dispatch: AppDispatch) => { + void dispatch(submitMarkersAction()); }, 300000, { diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 6f6a3235ea1cfd..c8b1178d771dc2 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -133,9 +133,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) { if (notification.status) { dispatch(importFetchedStatus(notification.status)); } - if (notification.statuses) { - dispatch(importFetchedStatuses(notification.statuses)); - } if (notification.report) { dispatch(importFetchedAccount(notification.report.target_account)); @@ -182,7 +179,6 @@ const excludeTypesFromFilter = filter => { 'status', 'list_status', 'update', - 'account_warning', 'admin.sign_up', 'admin.report', ]); @@ -241,10 +237,7 @@ export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedAccounts(response.data.map(item => item.account))); - dispatch(importFetchedStatuses( - response.data.map(item => item.status).filter(status => !!status) - .concat(response.data.flatMap(item => item.statuses || [])) - )); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); diff --git a/app/javascript/mastodon/components/account.jsx b/app/javascript/mastodon/components/account.jsx index f8808b5eef91ee..d2c67434224b24 100644 --- a/app/javascript/mastodon/components/account.jsx +++ b/app/javascript/mastodon/components/account.jsx @@ -1,17 +1,19 @@ import PropTypes from 'prop-types'; +import { useCallback } from 'react'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { EmptyAccount } from 'mastodon/components/empty_account'; import { ShortNumber } from 'mastodon/components/short_number'; import { VerifiedBadge } from 'mastodon/components/verified_badge'; +import DropdownMenuContainer from '../containers/dropdown_menu_container'; import { me } from '../initial_state'; import { Avatar } from './avatar'; @@ -30,158 +32,163 @@ const messages = defineMessages({ unmute_notifications: { id: 'account.unmute_notifications_short', defaultMessage: 'Unmute notifications' }, mute: { id: 'account.mute_short', defaultMessage: 'Mute' }, block: { id: 'account.block_short', defaultMessage: 'Block' }, + more: { id: 'status.more', defaultMessage: 'More' }, }); -class Account extends ImmutablePureComponent { - - static propTypes = { - size: PropTypes.number, - account: ImmutablePropTypes.record, - onFollow: PropTypes.func, - onBlock: PropTypes.func, - onMute: PropTypes.func, - onMuteNotifications: PropTypes.func, - intl: PropTypes.object.isRequired, - hidden: PropTypes.bool, - hideButtons: PropTypes.bool, - minimal: PropTypes.bool, - defaultAction: PropTypes.string, - children: PropTypes.object, - withBio: PropTypes.bool, - }; - - static defaultProps = { - size: 46, - }; - - handleFollow = () => { - this.props.onFollow(this.props.account); - }; - - handleBlock = () => { - this.props.onBlock(this.props.account); - }; - - handleMute = () => { - this.props.onMute(this.props.account); - }; - - handleMuteNotifications = () => { - this.props.onMuteNotifications(this.props.account, true); - }; - - handleUnmuteNotifications = () => { - this.props.onMuteNotifications(this.props.account, false); - }; - - render () { - const { account, intl, hidden, hideButtons, withBio, defaultAction, size, minimal, children } = this.props; - - if (!account) { - return ; - } +const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifications, hidden, hideButtons, minimal, defaultAction, children, withBio }) => { + const intl = useIntl(); - if (hidden) { - return ( - <> - {account.get('display_name')} - {account.get('username')} - - ); - } + const handleFollow = useCallback(() => { + onFollow(account); + }, [onFollow, account]); - let buttons; - - if (!hideButtons && account.get('id') !== me && account.get('relationship', null) !== null) { - const following = account.getIn(['relationship', 'following']); - const requested = account.getIn(['relationship', 'requested']); - const blocking = account.getIn(['relationship', 'blocking']); - const muting = account.getIn(['relationship', 'muting']); - - if (requested) { - buttons = .", + "domain_pill.your_handle": "Nama pengguna anda:", "embed.instructions": "Sematkan kiriman ini di situs web Anda dengan menyalin kode di bawah ini.", "embed.preview": "Tampilan akan seperti ini nantinya:", "emoji_button.activity": "Aktivitas", @@ -260,6 +295,10 @@ "follow_request.authorize": "Izinkan", "follow_request.reject": "Tolak", "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", + "follow_suggestions.curated_suggestion": "Pilihan staf", + "follow_suggestions.dismiss": "Jangan tampilkan lagi", + "follow_suggestions.hints.featured": "Profil ini telah dipilih sendiri oleh tim {domain}.", + "follow_suggestions.hints.friends_of_friends": "Profil ini populer di kalangan orang yang anda ikuti.", "followed_tags": "Tagar yang diikuti", "footer.about": "Tentang", "footer.directory": "Direktori profil", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index a9b300fa4f2a96..90253743fca0fb 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -20,6 +20,7 @@ "column.bookmarks": "Ebenrụtụakā", "column.home": "Be", "column.lists": "Ndepụta", + "column.notifications": "Nziọkwà", "column.pins": "Pinned post", "column_header.pin": "Gbado na profaịlụ gị", "column_subheading.settings": "Mwube", @@ -42,17 +43,28 @@ "confirmations.reply.confirm": "Zaa", "confirmations.unfollow.confirm": "Kwụsị iso", "conversation.delete": "Hichapụ nkata", + "disabled_account_banner.account_settings": "Mwube akaụntụ", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "domain_pill.username": "Ahaojiaru", "embed.instructions": "Embed this status on your website by copying the code below.", + "emoji_button.activity": "Mmemme", + "emoji_button.label": "Tibanye emoji", "emoji_button.search": "Chọọ...", + "emoji_button.symbols": "Ọdịmara", "empty_column.account_timeline": "No posts found", "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "Kpesa nsogbu", + "explore.trending_links": "Akụkọ", + "firehose.all": "Ha niine", + "follow_request.authorize": "Nye ikike", "footer.privacy_policy": "Iwu nzuzu", "getting_started.heading": "Mbido", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.show_replies": "Gosi nzaghachị", + "home.hide_announcements": "Zoo ọkwa", + "home.show_announcements": "Gosi ọkwa", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 435f98f30fc7c4..f5bf7c328165d5 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.", "follow_suggestions.curated_suggestion": "Úrval starfsfólks", "follow_suggestions.dismiss": "Ekki birta þetta aftur", + "follow_suggestions.featured_longer": "Handvalið af {domain}-teyminu", + "follow_suggestions.friends_of_friends_longer": "Vinsælt hjá fólki sem þú fylgist með", "follow_suggestions.hints.featured": "Þetta notandasnið hefur verið handvalið af {domain}-teyminu.", "follow_suggestions.hints.friends_of_friends": "Þetta notandasnið er vinsælt hjá fólki sem þú fylgist með.", "follow_suggestions.hints.most_followed": "Þetta notandasnið er eitt af þeim sem mest er fylgst með á {domain}.", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Þetta notandasnið er líkt þeim sniðum sem þú hefur valið að fylgjast með að undanförnu.", "follow_suggestions.personalized_suggestion": "Persónuaðlöguð tillaga", "follow_suggestions.popular_suggestion": "Vinsæl tillaga", + "follow_suggestions.popular_suggestion_longer": "Vinsælt á {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Svipar til notenda sem þú hefur nýlega farið að fylgjast með", "follow_suggestions.view_all": "Skoða allt", "follow_suggestions.who_to_follow": "Hverjum á að fylgjast með", "followed_tags": "Myllumerki sem fylgst er með", @@ -469,6 +473,15 @@ "notification.follow": "{name} fylgist með þér", "notification.follow_request": "{name} hefur beðið um að fylgjast með þér", "notification.mention": "{name} minntist á þig", + "notification.moderation-warning.learn_more": "Kanna nánar", + "notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni", + "notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.", + "notification.moderation_warning.action_disable": "Aðgangurinn þinn hefur verið gerður óvirkur.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Sumar færslurnar þínar hafa verið merktar sem viðkvæmt efni.", + "notification.moderation_warning.action_none": "Aðgangurinn þinn hefur fengið aðvörun frá umsjónarmanni.", + "notification.moderation_warning.action_sensitive": "Færslur þínar á verða héðan í frá merktar sem viðkvæmar.", + "notification.moderation_warning.action_silence": "Notandaaðgangurinn þinn hefur verið takmarkaður.", + "notification.moderation_warning.action_suspend": "Notandaaðgangurinn þinn hefur verið settur í frysti.", "notification.own_poll": "Könnuninni þinni er lokið", "notification.poll": "Könnun sem þú tókst þátt í er lokið", "notification.reblog": "{name} endurbirti færsluna þína", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fcfd09d75ff9a4..8ab5db1b171678 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "Anche se il tuo profilo non è privato, lo staff di {domain} ha pensato che potresti voler revisionare manualmente le richieste di seguirti da questi profili.", "follow_suggestions.curated_suggestion": "Scelta personale", "follow_suggestions.dismiss": "Non visualizzare più", + "follow_suggestions.featured_longer": "Selezionato personalmente dal team di {domain}", + "follow_suggestions.friends_of_friends_longer": "Popolare tra le persone che segui", "follow_suggestions.hints.featured": "Questo profilo è stato selezionato personalmente dal team di {domain}.", "follow_suggestions.hints.friends_of_friends": "Questo profilo è popolare tra le persone che segui.", "follow_suggestions.hints.most_followed": "Questo profilo è uno dei più seguiti su {domain}.", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Questo profilo è simile ai profili che hai seguito più recentemente.", "follow_suggestions.personalized_suggestion": "Suggerimenti personalizzati", "follow_suggestions.popular_suggestion": "Suggerimento frequente", + "follow_suggestions.popular_suggestion_longer": "Popolare su {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Simile ai profili che hai seguito di recente", "follow_suggestions.view_all": "Vedi tutto", "follow_suggestions.who_to_follow": "Chi seguire", "followed_tags": "Hashtag seguiti", @@ -469,6 +473,15 @@ "notification.follow": "{name} ha iniziato a seguirti", "notification.follow_request": "{name} ha richiesto di seguirti", "notification.mention": "{name} ti ha menzionato", + "notification.moderation-warning.learn_more": "Scopri di più", + "notification.moderation_warning": "Hai ricevuto un avviso di moderazione", + "notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.", + "notification.moderation_warning.action_disable": "Il tuo account è stato disattivato.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Alcuni dei tuoi post sono stati contrassegnati come sensibili.", + "notification.moderation_warning.action_none": "Il tuo account ha ricevuto un avviso di moderazione.", + "notification.moderation_warning.action_sensitive": "I tuoi post d'ora in poi saranno contrassegnati come sensibili.", + "notification.moderation_warning.action_silence": "Il tuo account è stato limitato.", + "notification.moderation_warning.action_suspend": "Il tuo account è stato sospeso.", "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha rebloggato il tuo post", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 9d28f7dc2f7ec8..683b597602e0c3 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -392,7 +392,7 @@ "filter_modal.select_filter.title": "この投稿をフィルターする", "filter_modal.title.status": "投稿をフィルターする", "filtered_notifications_banner.mentions": "{count, plural, one {メンション} other {メンション}}", - "filtered_notifications_banner.pending_requests": "{count, plural, =0 {アカウント} other {#アカウント}}からの通知がブロックされています", + "filtered_notifications_banner.pending_requests": "{count, plural, =0 {通知がブロックされているアカウントはありません} other {#アカウントからの通知がブロックされています}}", "filtered_notifications_banner.title": "ブロック済みの通知", "firehose.all": "すべて", "firehose.local": "このサーバー", @@ -585,15 +585,6 @@ "notification.status": "{name}さんが投稿しました", "notification.status_reference": "{name}さんがあなたの投稿を引用しました", "notification.update": "{name}さんが投稿を編集しました", - "notification.warning": "あなたは警告を出され、処分が実行されました。詳細はメールをご確認ください", - "notification.warning.none": "あなたは警告を出されました。詳細はメールをご確認ください。", - "notification.warning.delete_statuses": "あなたは警告を出され、1つまたは複数の投稿が削除されました。詳細はメールをご確認ください。", - "notification.warning.disable": "あなたは警告を出され、アカウントが無効化されました。詳細はメールをご確認ください。", - "notification.warning.force_cw": "あなたは警告を出され、投稿に警告文が追加されました。詳細はメールをご確認ください。", - "notification.warning.mark_statuses_as_sensitive": "あなたは警告を出され、投稿が閲覧注意としてマークされました。詳細はメールをご確認ください。", - "notification.warning.sensitive": "あなたは警告を出され、アカウントがセンシティブ指定されました。詳細はメールをご確認ください。", - "notification.warning.silence": "あなたは警告を出され、サイレンスされました。詳細はメールをご確認ください。", - "notification.warning.suspended": "あなたは警告を出され、サスペンドされました。詳細はメールをご確認ください。", "notification_requests.accept": "受け入れる", "notification_requests.dismiss": "無視", "notification_requests.notifications_from": "{name}からの通知", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 46d1f978350ae2..1958e4a6a09410 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -308,13 +308,17 @@ "follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.", "follow_suggestions.curated_suggestion": "Speciaal geselecteerd", "follow_suggestions.dismiss": "Niet meer weergeven", - "follow_suggestions.hints.featured": "Deze gebruiker is geselecteerd door het team van {domain}.", + "follow_suggestions.featured_longer": "Handmatig geselecteerd door het team van {domain}", + "follow_suggestions.friends_of_friends_longer": "Populair onder mensen die je volgt", + "follow_suggestions.hints.featured": "Deze gebruiker is handmatig geselecteerd door het team van {domain}.", "follow_suggestions.hints.friends_of_friends": "Deze gebruiker is populair onder de mensen die jij volgt.", "follow_suggestions.hints.most_followed": "Deze gebruiker is een van de meest gevolgde gebruikers op {domain}.", "follow_suggestions.hints.most_interactions": "Deze gebruiker is de laatste tijd erg populair op {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Deze gebruiker is vergelijkbaar met gebruikers die je recentelijk hebt gevolgd.", "follow_suggestions.personalized_suggestion": "Gepersonaliseerde aanbeveling", "follow_suggestions.popular_suggestion": "Populaire aanbeveling", + "follow_suggestions.popular_suggestion_longer": "Populair op {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Vergelijkbaar met accounts die je recentelijk bent gaan volgen", "follow_suggestions.view_all": "Alles weergeven", "follow_suggestions.who_to_follow": "Wie te volgen", "followed_tags": "Gevolgde hashtags", @@ -469,6 +473,15 @@ "notification.follow": "{name} volgt jou nu", "notification.follow_request": "{name} wil jou graag volgen", "notification.mention": "{name} vermeldde jou", + "notification.moderation-warning.learn_more": "Meer informatie", + "notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen", + "notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.", + "notification.moderation_warning.action_disable": "Je account is uitgeschakeld.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.", + "notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.", + "notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.", + "notification.moderation_warning.action_silence": "Jouw account is beperkt.", + "notification.moderation_warning.action_suspend": "Jouw account is opgeschort.", "notification.own_poll": "Jouw peiling is beëindigd", "notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw bericht", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 2cfb0d1247c890..14b355233b640e 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -468,6 +468,15 @@ "notification.follow": "{name} fylgde deg", "notification.follow_request": "{name} har bedt om å fylgja deg", "notification.mention": "{name} nemnde deg", + "notification.moderation-warning.learn_more": "Lær meir", + "notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring", + "notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.", + "notification.moderation_warning.action_disable": "Kontoen din har blitt deaktivert.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nokre av innlegga dine har blitt markert som sensitive.", + "notification.moderation_warning.action_none": "Kontoen din har mottatt ei moderasjonsåtvaring.", + "notification.moderation_warning.action_sensitive": "Innlegga dine vil bli markerte som sensitive frå no av.", + "notification.moderation_warning.action_silence": "Kontoen din har blitt avgrensa.", + "notification.moderation_warning.action_suspend": "Kontoen din har blitt suspendert.", "notification.own_poll": "Rundspørjinga di er ferdig", "notification.poll": "Ei rundspørjing du har røysta i er ferdig", "notification.reblog": "{name} framheva innlegget ditt", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 72f1ba58f50dbb..b763f740a2ef91 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość obserwacji.", "follow_suggestions.curated_suggestion": "Wybrane przez personel", "follow_suggestions.dismiss": "Nie pokazuj ponownie", + "follow_suggestions.featured_longer": "Wybrane przez zespół {domain}", + "follow_suggestions.friends_of_friends_longer": "Popularni wśród ludzi których obserwujesz", "follow_suggestions.hints.featured": "Ten profil został wybrany przez zespół {domain}.", "follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny w gronie użytkowników, których obserwujesz.", "follow_suggestions.hints.most_followed": "Ten profil jest jednym z najczęściej obserwowanych na {domain}.", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do profili ostatnio przez ciebie zaobserwowanych.", "follow_suggestions.personalized_suggestion": "Sugestia spersonalizowana", "follow_suggestions.popular_suggestion": "Sugestia popularna", + "follow_suggestions.popular_suggestion_longer": "Popularni na {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych przez ciebie profilów", "follow_suggestions.view_all": "Pokaż wszystkie", "follow_suggestions.who_to_follow": "Kogo obserwować", "followed_tags": "Obserwowane hasztagi", @@ -469,6 +473,15 @@ "notification.follow": "{name} obserwuje Cię", "notification.follow_request": "{name} chce cię zaobserwować", "notification.mention": "Wspomniało o Tobie przez {name}", + "notification.moderation-warning.learn_more": "Dowiedz się więcej", + "notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne", + "notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.", + "notification.moderation_warning.action_disable": "Twoje konto zostało wyłączone.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre twoje wpisy zostały oznaczone jako wrażliwe.", + "notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie moderacyjne.", + "notification.moderation_warning.action_sensitive": "Twoje wpisy będą od teraz oznaczane jako wrażliwe.", + "notification.moderation_warning.action_silence": "Twoje konto zostało ograniczone.", + "notification.moderation_warning.action_suspend": "Twoje konto zostało zawieszone.", "notification.own_poll": "Twoje głosowanie zakończyło się", "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyło się", "notification.reblog": "Twój post został podbity przez {name}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 1bb73db238611f..6bda11058ffadb 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -297,6 +297,7 @@ "filter_modal.select_filter.subtitle": "Use uma categoria existente ou crie uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", + "filtered_notifications_banner.mentions": "{count, plural, one {menção} other {menções}}", "filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça", "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Tudo", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 7e98cde5fa967e..70903065da1aae 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "Apesar de a sua não ser privada, a administração de {domain} pensa que poderá querer rever manualmente os pedidos de seguimento dessas contas.", "follow_suggestions.curated_suggestion": "Escolha da equipe", "follow_suggestions.dismiss": "Não mostrar novamente", + "follow_suggestions.featured_longer": "Escolhido a dedo pela equipa de {domain}", + "follow_suggestions.friends_of_friends_longer": "Popular entre as pessoas que segue", "follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipe {domain}.", "follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que você segue.", "follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos no {domain}.", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que você seguiu mais recentemente.", "follow_suggestions.personalized_suggestion": "Sugestão personalizada", "follow_suggestions.popular_suggestion": "Sugestão popular", + "follow_suggestions.popular_suggestion_longer": "Popular em {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Semelhantes aos perfis que seguiu recentemente", "follow_suggestions.view_all": "Ver tudo", "follow_suggestions.who_to_follow": "Quem seguir", "followed_tags": "Hashtags seguidas", @@ -469,6 +473,15 @@ "notification.follow": "{name} começou a seguir-te", "notification.follow_request": "{name} pediu para segui-lo", "notification.mention": "{name} mencionou-te", + "notification.moderation-warning.learn_more": "Saber mais", + "notification.moderation_warning": "Recebeu um aviso de moderação", + "notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.", + "notification.moderation_warning.action_disable": "A sua conta foi desativada.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas das suas publicações foram assinaladas como sensíveis.", + "notification.moderation_warning.action_none": "A sua conta recebeu um aviso de moderação.", + "notification.moderation_warning.action_sensitive": "As suas publicações serão, a partir de agora, assinaladas como sensíveis.", + "notification.moderation_warning.action_silence": "A sua conta foi limitada.", + "notification.moderation_warning.action_suspend": "A sua conta foi suspensa.", "notification.own_poll": "A sua votação terminou", "notification.poll": "Uma votação em que participaste chegou ao fim", "notification.reblog": "{name} reforçou a tua publicação", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 80c2031128b513..c2dd5297db1315 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -468,6 +468,11 @@ "notification.follow": "{name} följer dig", "notification.follow_request": "{name} har begärt att följa dig", "notification.mention": "{name} nämnde dig", + "notification.moderation-warning.learn_more": "Läs mer", + "notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.", + "notification.moderation_warning.action_disable": "Ditt konto har inaktiverats.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Några av dina inlägg har markerats som känsliga.", + "notification.moderation_warning.action_silence": "Ditt konto har begränsats.", "notification.own_poll": "Din röstning har avslutats", "notification.poll": "En omröstning du röstat i har avslutats", "notification.reblog": "{name} boostade ditt inlägg", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 83fa723388b591..ab6fe0bd70f77a 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的工作人员认为你也许会想手动审核审核这些账号的关注请求。", "follow_suggestions.curated_suggestion": "站务人员精选", "follow_suggestions.dismiss": "不再显示", + "follow_suggestions.featured_longer": "由 {domain} 管理团队精选", + "follow_suggestions.friends_of_friends_longer": "在你关注的人中很受欢迎", "follow_suggestions.hints.featured": "该用户已被 {domain} 管理团队精选。", "follow_suggestions.hints.friends_of_friends": "该用户在您关注的人中很受欢迎。", "follow_suggestions.hints.most_followed": "该用户是 {domain} 上关注度最高的用户之一。", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "该用户与您最近关注的用户类似。", "follow_suggestions.personalized_suggestion": "个性化建议", "follow_suggestions.popular_suggestion": "热门建议", + "follow_suggestions.popular_suggestion_longer": "在 {domain} 上很受欢迎", + "follow_suggestions.similar_to_recently_followed_longer": "与你近期关注的用户相似", "follow_suggestions.view_all": "查看全部", "follow_suggestions.who_to_follow": "推荐关注", "followed_tags": "关注的话题标签", @@ -469,6 +473,15 @@ "notification.follow": "{name} 开始关注你", "notification.follow_request": "{name} 向你发送了关注请求", "notification.mention": "{name} 提及了你", + "notification.moderation-warning.learn_more": "了解更多", + "notification.moderation_warning": "你收到了一条管理警告", + "notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。", + "notification.moderation_warning.action_disable": "你的账号已被禁用。", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "你的一些嘟文已被标记为敏感内容。", + "notification.moderation_warning.action_none": "你的账号收到了管理警告。", + "notification.moderation_warning.action_sensitive": "今后你的嘟文都会被标记为敏感内容。", + "notification.moderation_warning.action_silence": "你的账号已被限制。", + "notification.moderation_warning.action_suspend": "你的账号已被封禁.", "notification.own_poll": "你的投票已经结束", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转发了你的嘟文", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 0b328c7386523e..3ca9a8d11e6130 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -297,6 +297,7 @@ "filter_modal.select_filter.subtitle": "使用既有類別,或創建一個新類別", "filter_modal.select_filter.title": "過濾此帖文", "filter_modal.title.status": "過濾一則帖文", + "filtered_notifications_banner.mentions": "{count, plural, one {則提及} other {則提及}}", "filtered_notifications_banner.pending_requests": "來自 {count, plural, =0 {0 位} other {# 位}}你可能認識的人的通知", "filtered_notifications_banner.title": "已過濾之通知", "firehose.all": "全部", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 33a7070a51797c..f00d62c0762483 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -308,6 +308,8 @@ "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的管理員認為您可能想要自己審核這些帳號的跟隨請求。", "follow_suggestions.curated_suggestion": "精選內容", "follow_suggestions.dismiss": "不再顯示", + "follow_suggestions.featured_longer": "{domain} 團隊精選", + "follow_suggestions.friends_of_friends_longer": "受您跟隨之使用者愛戴的風雲人物", "follow_suggestions.hints.featured": "這個個人檔案是 {domain} 管理團隊精心挑選。", "follow_suggestions.hints.friends_of_friends": "這個個人檔案於您跟隨的帳號中很受歡迎。", "follow_suggestions.hints.most_followed": "這個個人檔案是 {domain} 中最受歡迎的帳號之一。", @@ -315,6 +317,8 @@ "follow_suggestions.hints.similar_to_recently_followed": "這個個人檔案與您最近跟隨之帳號類似。", "follow_suggestions.personalized_suggestion": "個人化推薦", "follow_suggestions.popular_suggestion": "熱門推薦", + "follow_suggestions.popular_suggestion_longer": "{domain} 上的人氣王", + "follow_suggestions.similar_to_recently_followed_longer": "與您近日跟隨相近之帳號", "follow_suggestions.view_all": "檢視全部", "follow_suggestions.who_to_follow": "推薦跟隨帳號", "followed_tags": "已跟隨主題標籤", @@ -469,6 +473,15 @@ "notification.follow": "{name} 已跟隨您", "notification.follow_request": "{name} 要求跟隨您", "notification.mention": "{name} 已提到您", + "notification.moderation-warning.learn_more": "了解更多", + "notification.moderation_warning": "您已收到管理員警告", + "notification.moderation_warning.action_delete_statuses": "某些您的嘟文已被刪除。", + "notification.moderation_warning.action_disable": "您的帳號已被停用。", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "某些您的嘟文已被標記為敏感內容。", + "notification.moderation_warning.action_none": "您的帳號已收到管理員警告。", + "notification.moderation_warning.action_sensitive": "即日起,您的嘟文將會被標記為敏感內容。", + "notification.moderation_warning.action_silence": "您的帳號已被限制。", + "notification.moderation_warning.action_suspend": "您的帳號已被停權。", "notification.own_poll": "您的投票已結束", "notification.poll": "您曾投過的投票已經結束", "notification.reblog": "{name} 已轉嘟您的嘟文", diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 1d0bca6103c003..14a326912769d3 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -55,11 +55,10 @@ export const notificationToMap = notification => ImmutableMap({ created_at: notification.created_at, emoji_reaction: ImmutableMap(notification.emoji_reaction), status: notification.status ? notification.status.id : null, - statuses: notification.statuses ? notification.statuses.map((status) => status.id) : null, list: notification.list ? ImmutableMap(notification.list) : null, report: notification.report ? fromJS(notification.report) : null, - account_warning: notification.account_warning ? ImmutableMap(notification.account_warning) : null, event: notification.event ? fromJS(notification.event) : null, + moderation_warning: notification.moderation_warning ? fromJS(notification.moderation_warning) : null, }); const normalizeNotification = (state, notification, usePendingItems) => { diff --git a/app/javascript/material-icons/400-24px/gavel-fill.svg b/app/javascript/material-icons/400-24px/gavel-fill.svg new file mode 100644 index 00000000000000..9699b8480a8479 --- /dev/null +++ b/app/javascript/material-icons/400-24px/gavel-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/gavel.svg b/app/javascript/material-icons/400-24px/gavel.svg new file mode 100644 index 00000000000000..9699b8480a8479 --- /dev/null +++ b/app/javascript/material-icons/400-24px/gavel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 40ba3b2a7d4df5..7de31d12cc5959 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2085,10 +2085,21 @@ a .account__avatar { white-space: nowrap; display: flex; align-items: center; - gap: 4px; + gap: 8px; +} - .fa-times { - color: $ui-secondary-color; +.account__relationship, +.explore__suggestions__card { + .icon-button { + border: 1px solid var(--background-border-color); + border-radius: 4px; + box-sizing: content-box; + padding: 5px; + + .icon { + width: 24px; + height: 24px; + } } } @@ -2244,7 +2255,8 @@ a.account__display-name { } } -.notification__relationships-severance-event { +.notification__relationships-severance-event, +.notification__moderation-warning { display: flex; gap: 16px; color: $secondary-text-color; @@ -3050,6 +3062,75 @@ $ui-header-logo-wordmark-width: 99px; display: none; } +.explore__suggestions__card { + padding: 12px 16px; + gap: 8px; + display: flex; + flex-direction: column; + border-bottom: 1px solid var(--background-border-color); + + &:last-child { + border-bottom: 0; + } + + &__source { + padding-inline-start: 60px; + font-size: 13px; + line-height: 16px; + color: $dark-text-color; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + + &__body { + display: flex; + gap: 12px; + align-items: center; + + &__main { + flex: 1 1 auto; + display: flex; + flex-direction: column; + gap: 8px; + min-width: 0; + + &__name-button { + display: flex; + align-items: center; + gap: 8px; + + &__name { + display: block; + color: inherit; + text-decoration: none; + flex: 1 1 auto; + min-width: 0; + } + + .button { + min-width: 80px; + } + + .display-name { + font-size: 15px; + line-height: 20px; + color: $secondary-text-color; + + strong { + font-weight: 700; + } + + &__account { + color: $darker-text-color; + display: block; + } + } + } + } + } +} + @media screen and (max-width: $no-gap-breakpoint - 1px) { .columns-area__panels__pane--compositional { display: none; @@ -7587,10 +7668,11 @@ a.status-card { content: ''; position: absolute; bottom: -1px; - left: 0; - width: 100%; + left: 50%; + transform: translateX(-50%); + width: 40px; height: 3px; - border-radius: 4px; + border-radius: 4px 4px 0 0; background: $highlight-text-color; } } diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb index bb031986d68186..bec7d3a4550df4 100644 --- a/app/lib/link_details_extractor.rb +++ b/app/lib/link_details_extractor.rb @@ -156,7 +156,7 @@ def height end def title - html_entities.decode(structured_data&.headline || opengraph_tag('og:title') || document.xpath('//title').map(&:content).first) + html_entities.decode(structured_data&.headline || opengraph_tag('og:title') || document.xpath('//title').map(&:content).first).strip end def description diff --git a/app/models/account_moderation_note.rb b/app/models/account_moderation_note.rb index ff399bab0c0edf..ad49b24229f2de 100644 --- a/app/models/account_moderation_note.rb +++ b/app/models/account_moderation_note.rb @@ -13,10 +13,12 @@ # class AccountModerationNote < ApplicationRecord + CONTENT_SIZE_LIMIT = 500 + belongs_to :account belongs_to :target_account, class_name: 'Account' scope :latest, -> { reorder('created_at DESC') } - validates :content, presence: true, length: { maximum: 500 } + validates :content, presence: true, length: { maximum: CONTENT_SIZE_LIMIT } end diff --git a/app/models/account_note.rb b/app/models/account_note.rb index 9bc704d988f83d..317e6873fa701e 100644 --- a/app/models/account_note.rb +++ b/app/models/account_note.rb @@ -14,9 +14,11 @@ class AccountNote < ApplicationRecord include RelationshipCacheable + COMMENT_SIZE_LIMIT = 2_000 + belongs_to :account belongs_to :target_account, class_name: 'Account' validates :account_id, uniqueness: { scope: :target_account_id } - validates :comment, length: { maximum: 2_000 } + validates :comment, length: { maximum: COMMENT_SIZE_LIMIT } end diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index c85d733619c761..3700ce4cd6c735 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -52,9 +52,8 @@ def save! process_reports! end - process_email! + process_notification! process_queue! - notify! end def report @@ -108,10 +107,6 @@ def process_strike! log_action(:create, @warning) if @warning.text.present? && type == 'none' end - def notify! - LocalNotificationWorker.perform_async(target_account.id, @warning.id, 'AccountWarning', 'warning') if @warning && %w(none sensitive silence).include?(type) - end - def process_reports! # If we're doing "mark as resolved" on a single report, # then we want to keep other reports open in case they @@ -163,8 +158,11 @@ def process_queue! queue_suspension_worker! if type == 'suspend' end - def process_email! - UserMailer.warning(target_account.user, warning).deliver_later! if warnable? + def process_notification! + return unless warnable? + + UserMailer.warning(target_account.user, warning).deliver_later! + LocalNotificationWorker.perform_async(target_account.id, warning.id, 'AccountWarning', 'moderation_warning') end def warnable? diff --git a/app/models/admin/status_batch_action.rb b/app/models/admin/status_batch_action.rb index d295b01e288ed1..832ddc56ac45d0 100644 --- a/app/models/admin/status_batch_action.rb +++ b/app/models/admin/status_batch_action.rb @@ -17,7 +17,6 @@ def send_email_notification=(value) def save! process_action! - notify! end private @@ -68,7 +67,8 @@ def handle_delete! statuses.each { |status| Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true) } unless target_account.local? end - UserMailer.warning(target_account.user, @warning).deliver_later! if warnable? + process_notification! + RemovalWorker.push_bulk(status_ids) { |status_id| [status_id, { 'preserve' => target_account.local?, 'immediate' => !target_account.local? }] } end @@ -104,7 +104,7 @@ def handle_mark_as_sensitive! text: text ) - UserMailer.warning(target_account.user, @warning).deliver_later! if warnable? + process_notification! end def handle_force_cw! @@ -140,7 +140,7 @@ def handle_force_cw! text: text ) - UserMailer.warning(target_account.user, @warning).deliver_later! if warnable? + process_notification! end def handle_report! @@ -158,10 +158,6 @@ def handle_remove_from_report! report.save! end - def notify! - LocalNotificationWorker.perform_async(target_account.id, @warning.id, 'AccountWarning', 'warning') if warnable? && @warning - end - def report @report ||= Report.find(report_id) if report_id.present? end @@ -170,6 +166,13 @@ def with_report? !report.nil? end + def process_notification! + return unless warnable? + + UserMailer.warning(target_account.user, @warning).deliver_later! + LocalNotificationWorker.perform_async(target_account.id, @warning.id, 'AccountWarning', 'moderation_warning') + end + def warnable? send_email_notification && target_account.local? end diff --git a/app/models/invite.rb b/app/models/invite.rb index c0cbc584586196..2fe9f22fbe1339 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -19,12 +19,14 @@ class Invite < ApplicationRecord include Expireable + COMMENT_SIZE_LIMIT = 420 + belongs_to :user, inverse_of: :invites has_many :users, inverse_of: :invite, dependent: nil scope :available, -> { where(expires_at: nil).or(where('expires_at >= ?', Time.now.utc)) } - validates :comment, length: { maximum: 420 } + validates :comment, length: { maximum: COMMENT_SIZE_LIMIT } before_validation :set_code diff --git a/app/models/notification.rb b/app/models/notification.rb index 3aa1e27412ab9c..602a106d5865b7 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -30,7 +30,7 @@ class Notification < ApplicationRecord 'EmojiReaction' => :emoji_reaction, 'StatusReference' => :status_reference, 'Poll' => :poll, - 'AccountWarning' => :warning, + 'AccountWarning' => :moderation_warning, }.freeze PROPERTIES = { @@ -70,10 +70,10 @@ class Notification < ApplicationRecord update: { filterable: false, }.freeze, - warning: { + severed_relationships: { filterable: false, }.freeze, - severed_relationships: { + moderation_warning: { filterable: false, }.freeze, 'admin.sign_up': { @@ -208,15 +208,6 @@ def preload_cache_collection_target_statuses(notifications, &_block) end end - def from_account_web - case activity_type - when 'AccountWarning' - account_warning&.target_account - else - from_account - end - end - after_initialize :set_from_account before_validation :set_from_account @@ -228,13 +219,13 @@ def set_from_account return unless new_record? case activity_type - when 'Status', 'Follow', 'Favourite', 'EmojiReaction', 'EmojiReact', 'FollowRequest', 'Poll', 'Report', 'AccountWarning' + when 'Status', 'Follow', 'Favourite', 'EmojiReaction', 'EmojiReact', 'FollowRequest', 'Poll', 'Report' self.from_account_id = activity&.account_id when 'Mention', 'StatusReference', 'ListStatus' self.from_account_id = activity&.status&.account_id when 'Account' self.from_account_id = activity&.id - when 'AccountRelationshipSeveranceEvent' + when 'AccountRelationshipSeveranceEvent', 'AccountWarning' # These do not really have an originating account, but this is mandatory # in the data model, and the recipient's account will by definition # always exist diff --git a/app/models/report.rb b/app/models/report.rb index df7e3d2efc0f62..3df5a20e1819c1 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -26,6 +26,8 @@ class Report < ApplicationRecord include Paginable include RateLimitable + COMMENT_SIZE_LIMIT = 1_000 + rate_limit by: :account, family: :reports belongs_to :account @@ -46,7 +48,7 @@ class Report < ApplicationRecord # A report is considered local if the reporter is local delegate :local?, to: :account - validates :comment, length: { maximum: 1_000 }, if: :local? + validates :comment, length: { maximum: COMMENT_SIZE_LIMIT }, if: :local? validates :rule_ids, absence: true, if: -> { (category_changed? || rule_ids_changed?) && !violation? } validate :validate_rule_ids, if: -> { (category_changed? || rule_ids_changed?) && violation? } diff --git a/app/models/report_note.rb b/app/models/report_note.rb index 74b46027e8bb42..b5c40a18b1487e 100644 --- a/app/models/report_note.rb +++ b/app/models/report_note.rb @@ -13,10 +13,12 @@ # class ReportNote < ApplicationRecord + CONTENT_SIZE_LIMIT = 500 + belongs_to :account belongs_to :report, inverse_of: :notes, touch: true scope :latest, -> { reorder(created_at: :desc) } - validates :content, presence: true, length: { maximum: 500 } + validates :content, presence: true, length: { maximum: CONTENT_SIZE_LIMIT } end diff --git a/app/models/rule.rb b/app/models/rule.rb index f28dc2ffeb4995..99a36397aa3736 100644 --- a/app/models/rule.rb +++ b/app/models/rule.rb @@ -15,9 +15,11 @@ class Rule < ApplicationRecord include Discard::Model + TEXT_SIZE_LIMIT = 300 + self.discard_column = :deleted_at - validates :text, presence: true, length: { maximum: 300 } + validates :text, presence: true, length: { maximum: TEXT_SIZE_LIMIT } scope :ordered, -> { kept.order(priority: :asc, id: :asc) } end diff --git a/app/models/user_invite_request.rb b/app/models/user_invite_request.rb index 2b76c88b944dcd..9dd67751668835 100644 --- a/app/models/user_invite_request.rb +++ b/app/models/user_invite_request.rb @@ -12,6 +12,8 @@ # class UserInviteRequest < ApplicationRecord + TEXT_SIZE_LIMIT = 420 + belongs_to :user, inverse_of: :invite_request - validates :text, presence: true, length: { maximum: 420 } + validates :text, presence: true, length: { maximum: TEXT_SIZE_LIMIT } end diff --git a/app/serializers/rest/account_warning_serializer.rb b/app/serializers/rest/account_warning_serializer.rb index 3f5940b71ccc2d..a0ef341d259d26 100644 --- a/app/serializers/rest/account_warning_serializer.rb +++ b/app/serializers/rest/account_warning_serializer.rb @@ -1,5 +1,16 @@ # frozen_string_literal: true class REST::AccountWarningSerializer < ActiveModel::Serializer - attributes :id, :action, :text, :status_ids + attributes :id, :action, :text, :status_ids, :created_at + + has_one :target_account, serializer: REST::AccountSerializer + has_one :appeal, serializer: REST::AppealSerializer + + def id + object.id.to_s + end + + def status_ids + object&.status_ids&.map(&:to_s) + end end diff --git a/app/serializers/rest/appeal_serializer.rb b/app/serializers/rest/appeal_serializer.rb new file mode 100644 index 00000000000000..a24cabc2728c35 --- /dev/null +++ b/app/serializers/rest/appeal_serializer.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class REST::AppealSerializer < ActiveModel::Serializer + attributes :text, :state + + def state + if object.approved? + 'approved' + elsif object.rejected? + 'rejected' + else + 'pending' + end + end +end diff --git a/app/serializers/rest/notification_serializer.rb b/app/serializers/rest/notification_serializer.rb index cd309820bdf97f..22f5e8e1aacb49 100644 --- a/app/serializers/rest/notification_serializer.rb +++ b/app/serializers/rest/notification_serializer.rb @@ -3,15 +3,13 @@ class REST::NotificationSerializer < ActiveModel::Serializer attributes :id, :type, :created_at - has_many :statuses, serializer: REST::StatusSerializer, if: :warning_type? - - belongs_to :from_account_web, key: :account, serializer: REST::AccountSerializer + belongs_to :from_account, key: :account, serializer: REST::AccountSerializer belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer belongs_to :emoji_reaction, if: :emoji_reaction_type?, serializer: REST::NotifyEmojiReactionSerializer - belongs_to :account_warning, if: :warning_type?, serializer: REST::AccountWarningSerializer belongs_to :list, if: :list_status_type?, serializer: REST::ListSerializer belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer + belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer def id object.id.to_s @@ -25,10 +23,6 @@ def report_type? object.type == :'admin.report' end - def warning_type? - object.type == :warning - end - def emoji_reaction_type? object.type == :emoji_reaction end @@ -45,7 +39,7 @@ def relationship_severance_event? object.type == :severed_relationships end - def statuses - Status.where(id: object.account_warning.status_ids).to_a + def moderation_warning_event? + object.type == :moderation_warning end end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 7978ecee36dcea..3716d38f9297f8 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -12,7 +12,7 @@ class NotifyService < BaseService status_reference status list_status - warning + moderation_warning # TODO: this probably warrants an email notification severed_relationships ).freeze @@ -26,7 +26,7 @@ def initialize(notification) def dismiss? blocked = @recipient.unavailable? - blocked ||= from_self? && @notification.type != :poll && @notification.type != :severed_relationships + blocked ||= from_self? && %i(poll severed_relationships moderation_warning).exclude?(@notification.type) return blocked if message? && from_staff? @@ -79,6 +79,7 @@ class FilterCondition admin.report poll update + account_warning ).freeze def initialize(notification) diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 38bdebaacd2062..e84cc2b23bf8d6 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -316,7 +316,7 @@ def idempotency_given? def idempotency_duplicate if scheduled? - @account.schedule_statuses.find(@idempotency_duplicate) + @account.scheduled_statuses.find(@idempotency_duplicate) else @account.statuses.find(@idempotency_duplicate) end @@ -371,7 +371,7 @@ def poll_attributes end def scheduled_options - @options.tap do |options_hash| + @options.dup.tap do |options_hash| options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id options_hash[:application_id] = options_hash.delete(:application)&.id options_hash[:scheduled_at] = nil diff --git a/app/views/admin/settings/content_retention/show.html.haml b/app/views/admin/settings/content_retention/show.html.haml index 3c5f7e2c03642e..5e7ebfbdd9e7b9 100644 --- a/app/views/admin/settings/content_retention/show.html.haml +++ b/app/views/admin/settings/content_retention/show.html.haml @@ -14,15 +14,19 @@ = f.input :media_cache_retention_period, input_html: { pattern: '[0-9]+' }, wrapper: :with_block_label + = f.input :backups_retention_period, + input_html: { pattern: '[0-9]+' }, + wrapper: :with_block_label + + %h4= t('admin.settings.content_retention.danger_zone') + + .fields-group = f.input :content_cache_retention_period, hint: false, input_html: { pattern: '[0-9]+' }, warning_hint: t('simple_form.hints.form_admin_settings.content_cache_retention_period'), wrapper: :with_block_label - = f.input :delete_content_cache_without_reaction, as: :boolean, wrapper: :with_label, kmyblue: true, hint: false - = f.input :backups_retention_period, - input_html: { pattern: '[0-9]+' }, - wrapper: :with_block_label + = f.input :delete_content_cache_without_reaction, as: :boolean, wrapper: :with_label, kmyblue: true, hint: t('simple_form.hints.form_admin_settings.delete_content_cache_without_reaction') .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/config/locales/de.yml b/config/locales/de.yml index 67aad1587364f3..923682ea12ae89 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1046,7 +1046,7 @@ de: apply_for_account: Konto beantragen captcha_confirmation: help_html: Falls du Probleme beim Lösen des CAPTCHA hast, dann kannst uns über %{email} kontaktieren und wir werden versuchen, dir zu helfen. - hint_html: Fast geschafft! Wir müssen uns vergewissern, dass du ein Mensch bist (damit wir Spam verhindern können!). Bitte löse das CAPTCHA und klicke auf „Weiter“. + hint_html: Fast geschafft! Wir müssen uns vergewissern, dass du ein Mensch bist (damit wir Spam verhindern können!). Bitte löse das CAPTCHA und klicke auf „Fortfahren“. title: Sicherheitsüberprüfung confirmations: awaiting_review: Deine E-Mail-Adresse wurde bestätigt und das Team von %{domain} überprüft nun deine Registrierung. Sobald es dein Konto genehmigt, wirst du eine E-Mail erhalten. @@ -1449,7 +1449,7 @@ de: cooldown: Nach dem Umzug wird es eine Weile dauern, bis du erneut umziehen darfst disabled_account: Dein altes Konto ist nur noch eingeschränkt nutzbar. Du kannst jedoch deine Daten exportieren und das Konto wieder reaktivieren. followers: Alle Follower werden vom alten zum neuen Konto übertragen - only_redirect_html: Alternativ kannst du auch nur eine Weiterleitung zu deinem neuen Profil einrichten, ohne die Follower zu übertragen. + only_redirect_html: Alternativ kannst du auch nur eine Weiterleitung zu deinem neuen Konto einrichten, ohne die Follower zu übertragen. other_data: Keine anderen Daten werden automatisch zum neuen Konto übertragen redirect: Dein altes Konto wird einen Hinweis erhalten, dass du umgezogen bist. Außerdem wird das Profil von Suchanfragen ausgeschlossen moderation: @@ -1845,7 +1845,7 @@ de: mark_statuses_as_sensitive: Deine Beiträge von %{acct} wurden mit einer Inhaltswarnung versehen none: Warnung für %{acct} sensitive: Deine Beiträge von %{acct} werden künftig mit einer Inhaltswarnung versehen - silence: Dein Konto %{acct} wurde stummgeschaltet + silence: Dein Konto %{acct} wurde eingeschränkt suspend: Dein Konto %{acct} wurde gesperrt title: delete_statuses: Beiträge entfernt diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index 73fa1fa60e3bcd..032132cf5cb16b 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -25,7 +25,7 @@ de: explanation_when_pending: Du hast dich für eine Einladung bei %{host} mit dieser E-Mail-Adresse beworben. Sobald du deine E-Mail-Adresse bestätigt hast, werden wir deine Anfrage überprüfen. Du kannst dich in dieser Zeit nicht anmelden. Wenn deine Anfrage abgelehnt wird, werden deine Daten entfernt – von dir ist keine weitere Handlung notwendig. Wenn du das nicht warst, dann kannst du diese E-Mail ignorieren. extra_html: Bitte beachte auch die Serverregeln und unsere Datenschutzerklärung. subject: 'Mastodon: Anleitung zum Bestätigen deines Kontos auf %{instance}' - title: Verifiziere E-Mail-Adresse + title: Verifiziere deine E-Mail-Adresse email_changed: explanation: 'Die E-Mail-Adresse deines Kontos wird geändert zu:' extra: Wenn du deine E-Mail-Adresse nicht geändert hast, ist es wahrscheinlich, dass sich jemand Zugang zu deinem Konto verschafft hat. Bitte ändere sofort dein Passwort oder kontaktiere die Administrator*innen des Servers, wenn du aus deinem Konto ausgesperrt bist. diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index af1769aa66f13b..193fecc757201a 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -12,6 +12,7 @@ eo: last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita. locked: Via konto estas ŝlosita. not_found_in_database: Nevalida %{authentication_keys} aŭ pasvorto. + omniauth_user_creation_failure: Eraro okazis kreinte konton por ĉi tiu identeco. pending: Via konto ankoraŭ estas kontrolata. timeout: Via seanco eksvalidiĝis. Bonvolu ensaluti denove por daŭrigi. unauthenticated: Vi devas ensaluti aŭ registriĝi antaŭ ol daŭrigi. @@ -39,7 +40,7 @@ eo: explanation: Retajpu la novan adreson por ŝanĝi vian retpoŝtadreson. extra: Se ĉi tiu ŝanĝo ne estis komencita de vi, bonvolu ignori ĉi tiun retmesaĝon. La retadreso por la Mastodon-konto ne ŝanĝiĝos se vi ne aliras la supran ligilon. subject: 'Mastodon: Konfirmi retpoŝton por %{instance}' - title: Kontrolu retpoŝtadreson + title: Kontroli retpoŝtadreson reset_password_instructions: action: Ŝanĝi pasvorton explanation: Vi petis novan pasvorton por via konto. diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml index 8e026794ee8532..7633156d789b8d 100644 --- a/config/locales/doorkeeper.bg.yml +++ b/config/locales/doorkeeper.bg.yml @@ -174,6 +174,7 @@ bg: read:filters: преглед на вашите филтри read:follows: преглед на вашите последвания read:lists: преглед на вашите списъци + read:me: четене само на основните сведения за акаунта ви read:mutes: преглед на вашите заглушавания read:notifications: преглед на вашите известия read:reports: преглед на вашите докладвания diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml index 9706f3db70384f..80827a87da20bb 100644 --- a/config/locales/doorkeeper.ca.yml +++ b/config/locales/doorkeeper.ca.yml @@ -174,6 +174,7 @@ ca: read:filters: mira els teus filtres read:follows: mira els teus seguiments read:lists: mira les teves llistes + read:me: llegir només la informació bàsica del vostre compte read:mutes: mira els teus silenciats read:notifications: mira les teves notificacions read:reports: mira els teus informes diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml index 2c8b0d13e17736..ed10e14e249d7a 100644 --- a/config/locales/doorkeeper.da.yml +++ b/config/locales/doorkeeper.da.yml @@ -174,6 +174,7 @@ da: read:filters: se dine filtre read:follows: se dine følger read:lists: se dine lister + read:me: læs kun kontoens basisoplysninger read:mutes: se dine tavsgørelser read:notifications: se dine notifikationer read:reports: se dine anmeldelser diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index 552dfeba371840..80d612255b9cc3 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -174,6 +174,7 @@ de: read:filters: deine Filter einsehen read:follows: sehen, wem du folgst read:lists: deine Listen sehen + read:me: nur deine grundlegenden Kontoinformationen lesen read:mutes: deine Stummschaltungen einsehen read:notifications: deine Benachrichtigungen sehen read:reports: deine Meldungen sehen diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 532db1f30d13b2..47cfc451aa2668 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -174,6 +174,7 @@ es-AR: read:filters: ver tus filtros read:follows: ver qué cuentas seguís read:lists: ver tus listas + read:me: leer solo la información básica de tu cuenta read:mutes: ver qué cuentas silenciaste read:notifications: ver tus notificaciones read:reports: ver tus denuncias diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index 082d656bc5d012..e56e0df3ba9bfa 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -174,6 +174,7 @@ es-MX: read:filters: ver tus filtros read:follows: ver a quién sigues read:lists: ver tus listas + read:me: leer solo la información básica de tu cuenta read:mutes: ver a quién has silenciado read:notifications: ver tus notificaciones read:reports: ver tus informes diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 002f813b326836..44e165a2156ccb 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -174,6 +174,7 @@ es: read:filters: ver tus filtros read:follows: ver a quién sigues read:lists: ver tus listas + read:me: leer solo la información básica de tu cuenta read:mutes: ver a quién has silenciado read:notifications: ver tus notificaciones read:reports: ver tus informes diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml index e7963672fae5d3..88a63f698bbd80 100644 --- a/config/locales/doorkeeper.eu.yml +++ b/config/locales/doorkeeper.eu.yml @@ -174,6 +174,7 @@ eu: read:filters: ikusi zure iragazkiak read:follows: ikusi zuk jarraitutakoak read:lists: ikusi zure zerrendak + read:me: irakurri soilik zure kontuaren oinarrizko informazioa read:mutes: ikusi zuk mutututakoak read:notifications: ikusi zure jakinarazpenak read:reports: ikusi zure salaketak diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index fea01d107660cd..ae8963c76fcf09 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -174,6 +174,7 @@ fi: read:filters: katso suodattimiasi read:follows: katso seurattujasi read:lists: katso listojasi + read:me: lue tilisi perustietoja read:mutes: katso mykistyksiäsi read:notifications: katso ilmoituksiasi read:reports: katso raporttejasi diff --git a/config/locales/doorkeeper.fo.yml b/config/locales/doorkeeper.fo.yml index 78f8701ae92bab..4f5cc5a645ba12 100644 --- a/config/locales/doorkeeper.fo.yml +++ b/config/locales/doorkeeper.fo.yml @@ -174,6 +174,7 @@ fo: read:filters: síggja tíni filtur read:follows: síggja hvørji tú fylgir read:lists: síggja tínar listar + read:me: les bara grundleggjandi upplýsingar av tínari kontu read:mutes: síggja tínar doyvingar read:notifications: síggja tínar fráboðanir read:reports: síggja tínar meldingar diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index aa0eae2844e8c7..d34c58decc4077 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -174,6 +174,7 @@ gl: read:filters: ver os filtros read:follows: ver a quen segues read:lists: ver as tuas listaxes + read:me: ler só a información básica da túa conta read:mutes: ver a quen tes acalado read:notifications: ver as notificacións read:reports: ver as túas denuncias diff --git a/config/locales/doorkeeper.he.yml b/config/locales/doorkeeper.he.yml index 9030e45e0c4662..a6376fa4c1d27a 100644 --- a/config/locales/doorkeeper.he.yml +++ b/config/locales/doorkeeper.he.yml @@ -174,6 +174,7 @@ he: read:filters: צפייה במסננים read:follows: צפייה בנעקבים read:lists: צפיה ברשימותיך + read:me: לקריאה בלבד של פרטי חשבונך הבסיסיים read:mutes: צפיה במושתקיך read:notifications: צפיה בהתראותיך read:reports: צפיה בדוחותיך diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml index 3822e9c202340a..28ce283ffaf850 100644 --- a/config/locales/doorkeeper.hu.yml +++ b/config/locales/doorkeeper.hu.yml @@ -174,6 +174,7 @@ hu: read:filters: szűrök megtekintése read:follows: követések megtekintése read:lists: listák megtekintése + read:me: csak a fiókod alapvető adatainak elolvasása read:mutes: némítások megtekintése read:notifications: értesítések megtekintése read:reports: bejelentések megtekintése diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml index b41531a1b15675..fd7d7a08367fbf 100644 --- a/config/locales/doorkeeper.ia.yml +++ b/config/locales/doorkeeper.ia.yml @@ -87,6 +87,7 @@ ia: read:filters: vider tu filtros read:follows: vider tu sequites read:lists: vider tu listas + read:me: leger solmente le information basic de tu conto read:notifications: vider tu notificationes read:reports: vider tu reportos read:statuses: vider tote le messages diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml index c1e2d4cfc36111..995d507f5bd3d0 100644 --- a/config/locales/doorkeeper.is.yml +++ b/config/locales/doorkeeper.is.yml @@ -174,6 +174,7 @@ is: read:filters: skoða síurnar þínar read:follows: sjá hverjum þú fylgist með read:lists: skoða listana þína + read:me: lesa einungis grunnupplýsingar aðgangsins þíns read:mutes: skoða hverja þú þaggar read:notifications: sjá tilkynningarnar þínar read:reports: skoða skýrslurnar þína diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index 3fd998fc4a61b6..f39f78466540f1 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -174,6 +174,7 @@ it: read:filters: visualizzare i tuoi filtri read:follows: visualizzare i tuoi seguiti read:lists: visualizzare i tuoi elenchi + read:me: leggi solo le informazioni di base del tuo account read:mutes: visualizzare i tuoi silenziamenti read:notifications: visualizzare le tue notifiche read:reports: visualizzare le tue segnalazioni diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml index 4721e3acdb63e3..12674cc125e20e 100644 --- a/config/locales/doorkeeper.ko.yml +++ b/config/locales/doorkeeper.ko.yml @@ -174,6 +174,7 @@ ko: read:filters: 필터 보기 read:follows: 팔로우 보기 read:lists: 리스트 보기 + read:me: 내 계정의 기본 정보만을 읽습니다 read:mutes: 뮤트 보기 read:notifications: 알림 보기 read:reports: 신고 보기 diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml index b3e6e79a1a3d62..9554c0ee6f5d19 100644 --- a/config/locales/doorkeeper.nl.yml +++ b/config/locales/doorkeeper.nl.yml @@ -174,6 +174,7 @@ nl: read:filters: jouw filters bekijken read:follows: de accounts die jij volgt bekijken read:lists: jouw lijsten bekijken + read:me: alleen de basisgegevens van jouw account lezen read:mutes: jouw genegeerde gebruikers bekijken read:notifications: jouw meldingen bekijken read:reports: jouw gerapporteerde berichten bekijken diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index 0e5d1ca455ae4d..ab0380c6fa789d 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -174,6 +174,7 @@ nn: read:filters: sjå filtera dine read:follows: sjå fylgjarane dine read:lists: sjå listene dine + read:me: les berre kontoen din sin grunnleggjande informasjon read:mutes: sjå kven du har målbunde read:notifications: sjå varsla dine read:reports: sjå rapportane dine diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml index 226c0d403c8491..eefca2de658fb4 100644 --- a/config/locales/doorkeeper.pl.yml +++ b/config/locales/doorkeeper.pl.yml @@ -174,6 +174,7 @@ pl: read:filters: dostęp do filtrów read:follows: dostęp do listy obserwowanych read:lists: dostęp do Twoich list + read:me: odczytaj tylko podstawowe informacje o koncie read:mutes: dostęp do listy wyciszonych read:notifications: możliwość odczytu powiadomień read:reports: dostęp do Twoich zgłoszeń diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index d7e9353b59be3e..150b4339e46e15 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -174,6 +174,7 @@ pt-BR: read:filters: ver seus filtros read:follows: ver quem você segue read:lists: ver suas listas + read:me: ler só as informações básicas da sua conta read:mutes: ver seus silenciados read:notifications: ver suas notificações read:reports: ver suas denúncias diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml index 31f6e462784f54..0457190cda149c 100644 --- a/config/locales/doorkeeper.pt-PT.yml +++ b/config/locales/doorkeeper.pt-PT.yml @@ -174,6 +174,7 @@ pt-PT: read:filters: ver os seus filtros read:follows: ver quem você segue read:lists: ver as suas listas + read:me: ler apenas as informações básicas da sua conta read:mutes: ver os utilizadores que silenciou read:notifications: ver as suas notificações read:reports: ver as suas denúncias diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml index a613308b28afbf..55e00ff96d6a06 100644 --- a/config/locales/doorkeeper.sl.yml +++ b/config/locales/doorkeeper.sl.yml @@ -174,6 +174,7 @@ sl: read:filters: oglejte si svoje filtre read:follows: oglejte si svoje sledilce read:lists: oglejte si svoje sezname + read:me: preberi le osnovne podatke računa read:mutes: oglejte si svoje utišane read:notifications: oglejte si svoja obvestila read:reports: oglejte si svoje prijave diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index f2c8bd34b8c6c2..d336f08c560a3c 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -174,6 +174,7 @@ sv: read:filters: se dina filter read:follows: se vem du följer read:lists: se dina listor + read:me: läs endast den grundläggande informationen för ditt konto read:mutes: se dina tystningar read:notifications: se dina notiser read:reports: se dina rapporter diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 47a15e1b8a7bad..f5ebbc5fd84383 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -174,6 +174,7 @@ tr: read:filters: süzgeçlerinizi görün read:follows: takip ettiklerinizi görün read:lists: listelerinizi görün + read:me: hesabınızın sadece temel bilgilerini okuma read:mutes: sessize aldıklarınızı görün read:notifications: bildirimlerinizi görün read:reports: raporlarınızı görün diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml index 8af404a7366c19..ac7fbbe15d7dfc 100644 --- a/config/locales/doorkeeper.uk.yml +++ b/config/locales/doorkeeper.uk.yml @@ -180,6 +180,7 @@ uk: read:filters: бачити Ваші фільтри read:follows: бачити Ваші підписки read:lists: бачити Ваші списки + read:me: читайте лише основну інформацію вашого облікового запису read:mutes: бачити ваші нехтування read:notifications: бачити Ваші сповіщення read:reports: бачити Ваші скарги diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 8375795273060f..84684d24ca7e59 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -174,6 +174,7 @@ vi: read:filters: xem bộ lọc read:follows: xem những người theo dõi read:lists: xem danh sách + read:me: chỉ đọc thông tin cơ bản tài khoản read:mutes: xem những người đã ẩn read:notifications: xem thông báo read:reports: xem báo cáo của bạn diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 36c7fb81277b8c..73f1f9725ce6ad 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -174,6 +174,7 @@ zh-CN: read:filters: 查看你的过滤器 read:follows: 查看你的关注 read:lists: 查看你的列表 + read:me: 只读取你账户的基本信息 read:mutes: 查看你的隐藏列表 read:notifications: 查看你的通知 read:reports: 查看你的举报 diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml index 79629b12febf39..76d13a74a5b7c6 100644 --- a/config/locales/doorkeeper.zh-HK.yml +++ b/config/locales/doorkeeper.zh-HK.yml @@ -174,6 +174,7 @@ zh-HK: read:filters: 檢視你的過濾條件 read:follows: 檢視你關注的人 read:lists: 檢視你的清單 + read:me: 僅讀取帳號的基本資訊 read:mutes: 檢視被你靜音的人 read:notifications: 檢視你的通知 read:reports: 檢視你的檢舉 diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index f2250b79cbce02..86827a7122435d 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -174,6 +174,7 @@ zh-TW: read:filters: 檢視您的過濾條件 read:follows: 檢視您跟隨之使用者 read:lists: 檢視您的列表 + read:me: 僅讀取您的帳號基本資訊 read:mutes: 檢視您靜音的人 read:notifications: 檢視您的通知 read:reports: 檢視您的檢舉 diff --git a/config/locales/en.yml b/config/locales/en.yml index ffca1bceaf2cb5..7fb2f30ef2e294 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -994,6 +994,7 @@ en: desc_html: This relies on external scripts from hCaptcha, which may be a security and privacy concern. In addition, this can make the registration process significantly less accessible to some (especially disabled) people. For these reasons, please consider alternative measures such as approval-based or invite-based registration. title: Require new users to solve a CAPTCHA to confirm their account content_retention: + danger_zone: Danger zone preamble: Control how user-generated content is stored in Mastodon. title: Content retention default_noindex: @@ -1507,6 +1508,7 @@ en: title_actions: delete_statuses: Post removal disable: Freezing of account + force_cw: Add content-warning to posts mark_statuses_as_sensitive: Marking of posts as sensitive none: Warning sensitive: Marking of account as sensitive diff --git a/config/locales/eo.yml b/config/locales/eo.yml index d59eadd5286fd1..749f80687df6de 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -74,7 +74,7 @@ eo: follows: Sekvatoj header: Kapa bildo inbox_url: Enira URL - invite_request_text: 가입하려는 이유 + invite_request_text: Kialoj por aliĝi invited_by: Invitita de ip: IP joined: Aliĝis @@ -104,7 +104,7 @@ eo: no_role_assigned: Sen rolo not_subscribed: Ne abonita pending: Pritraktata recenzo - perform_full_suspension: Suspendi + perform_full_suspension: Haltigi previous_strikes: Antaǔaj admonoj previous_strikes_description_html: one: Ĉi tiu konto havas unu admonon. @@ -121,7 +121,7 @@ eo: remote_suspension_reversible_hint_html: La konto estas suspendita, kaj la datumoj estos komplete forigitaj je %{date}. Ĝis tiam, la konto povas esti malsuspendita sen flankefiko. Se vi deziras tuj forigi ĉiujn datumojn de la konto, vi povas fari tion sube. remove_avatar: Forigi la profilbildon remove_header: Forigi kapan bildon - removed_avatar_msg: La rolfiguro de %{username} estas sukcese forigita + removed_avatar_msg: La profilbildo de %{username} estas sukcese forigita removed_header_msg: Kapbildo de %{username} suksece forigita resend_confirmation: already_confirmed: Ĉi tiu uzanto jam estas konfirmita @@ -184,7 +184,7 @@ eo: create_domain_block: Krei Blokadon De Domajno create_email_domain_block: Krei Blokadon De Retpoŝta Domajno create_ip_block: Krei IP-regulon - create_unavailable_domain: Krei nehaveblan domajnon + create_unavailable_domain: Krei Nehaveblan Domajnon create_user_role: Krei Rolon demote_user: Malpromocii Uzanton destroy_announcement: Forigi Anoncon @@ -193,9 +193,9 @@ eo: destroy_domain_allow: Forigi Domajnan Permeson destroy_domain_block: Forigi blokadon de domajno destroy_email_domain_block: Forigi blokadon de retpoŝta domajno - destroy_instance: Forigi domajnon + destroy_instance: Forigi Domajnon destroy_ip_block: Forigi IP-regulon - destroy_status: Forigi mesaĝon + destroy_status: Forigi Afiŝon destroy_unavailable_domain: Forigi Nehaveblan Domajnon destroy_user_role: Detrui Rolon disable_2fa_user: Malebligi 2FA @@ -285,7 +285,7 @@ eo: update_custom_emoji_html: "%{name} ĝisdatigis la emoĝion %{target}" update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}" update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}" - update_status_html: "%{name} ĝisdatigis mesaĝon de %{target}" + update_status_html: "%{name} ĝisdatigis afiŝon de %{target}" update_user_role_html: "%{name} ŝanĝis la rolon %{target}" deleted_account: forigita konto empty: Neniu ĵurnalo trovita. @@ -567,7 +567,7 @@ eo: disable: Malebligi disabled: Malebligita enable: Ebligi - enable_hint: Post ebligo, via servilo abonos ĉiujn publikajn mesaĝojn de tiu ripetilo, kaj komencos sendi publikajn mesaĝojn de la servilo al ĝi. + enable_hint: Post ebligo, via servilo abonos ĉiujn publikajn mesaĝojn de tiu ripetilo, kaj komencos sendi publikajn afiŝojn de la servilo al ĝi. enabled: Ebligita inbox_url: URL de la ripetilo pending: Atendante aprobon de la ripetilo @@ -587,7 +587,7 @@ eo: action_log: Ĵurnalo de revizo action_taken_by: Ago farita de actions: - delete_description_html: Raportitaj mesaĝoj forigotas kaj admono rekorditas. + delete_description_html: Raportitaj afiŝoj estos forigita kaj admono estos rekordita por helpi vin indiki estontajn afiŝojn de la sama konto kontraŭ reguloj. mark_as_sensitive_description_html: La audovidaĵo en la raportita mesaĝo markotas kiel sentema kaj admono rekorditas. other_description_html: Vidu pli da ebloj por regi la sintenon de la konto kaj por personigi la komunikadon kun la raportita konto. resolve_description_html: Nenio okazotas al la raportita konto kaj la raporto fermotas. @@ -634,7 +634,7 @@ eo: resolved: Solvitaj resolved_msg: Signalo sukcese solvita! skip_to_actions: Salti al agoj - status: Mesaĝoj + status: Afiŝo statuses: Raportita enhavo statuses_description_html: Sentema enhavo referencitas kun la raportita konto summary: @@ -787,6 +787,7 @@ eo: types: major: Ĉefa eldono minor: Neĉefa eldono + version: Versio statuses: account: Skribanto application: Aplikaĵo @@ -803,12 +804,12 @@ eo: media: title: Aŭdovidaĵoj metadata: Metadatumoj - no_status_selected: Neniu mesaĝo estis ŝanĝita ĉar neniu estis elektita + no_status_selected: Neniu afiŝo estis ŝanĝita ĉar neniu estis elektita open: Malfermi afiŝojn original_status: Originala afiŝo reblogs: Reblogaĵoj status_changed: Afiŝo ŝanĝiĝis - title: Mesaĝoj de la konto + title: Afiŝoj de la konto trending: Popularaĵoj visibility: Videbleco with_media: Kun aŭdovidaĵoj @@ -816,7 +817,7 @@ eo: actions: delete_statuses: "%{name} forigis afiŝojn de %{target}" disable: "%{name} frostigis la konton de %{target}" - mark_statuses_as_sensitive: "%{name} markis mesaĝojn de %{target} kiel sentemaj" + mark_statuses_as_sensitive: "%{name} markis afiŝojn de %{target} kiel tiklan" none: "%{name} sendis averton al %{target}" sensitive: "%{name} markis konton de %{target} kiel sentema" silence: "%{name} limigis la konton de %{target}" @@ -827,6 +828,8 @@ eo: system_checks: database_schema_check: message_html: Estas pritraktataj datumbazaj migradoj. Bonvolu ekzekuti ilin por certigi, ke la apliko kondutas kiel atendite + elasticsearch_preset: + action: Legi dokumentaron elasticsearch_running_check: message_html: Ne eblas konekti Elasticsearch. Bonvolu kontroli ke ĝi funkcias, aǔ malŝaltu plentekstan serĉon elasticsearch_version_check: @@ -940,7 +943,7 @@ eo: admin_mailer: new_appeal: actions: - delete_statuses: por forigi iliajn mesaĝojn + delete_statuses: por forigi iliajn afiŝojn disable: por frostigi ties konton mark_statuses_as_sensitive: por marki iliajn mesaĝojn kiel sentemaj none: averto @@ -991,7 +994,7 @@ eo: unsubscribe: Malabonu view: 'Vidi:' view_profile: Vidi profilon - view_status: Vidi mesaĝon + view_status: Vidi afiŝon applications: created: Aplikaĵo sukcese kreita destroyed: Aplikaĵo sukcese forigita @@ -1131,7 +1134,7 @@ eo: recipient: Senditas por reject_appeal: Malakcepti apelacion status: 'Afiŝo #%{id}' - status_removed: Mesaĝo jam forigitas de sistemo + status_removed: Afiŝo jam estas forigita de sistemo title: "%{action} de %{date}" title_actions: delete_statuses: Forigo de afiŝo @@ -1199,8 +1202,8 @@ eo: edit: add_keyword: Aldoni ĉefvorton keywords: Ĉefvortoj - statuses: Individuaj mesaĝoj - statuses_hint_html: Ĉi tiu filtrilo kongruas kelkajn mesaĝojn. Kontrolu mesaĝojn de la filtrilo. + statuses: Individuaj afiŝoj + statuses_hint_html: Ĉi tiu filtrilo kongruas kelkajn afiŝojn. Kontroli afiŝojn de la filtrilo. title: Ŝanĝi filtrilojn errors: deprecated_api_multiple_keywords: Ĉi tiuj parametroj ne povas ŝanĝitis de ĉi tiu programaro. Uzu pli novan programaron. @@ -1218,8 +1221,8 @@ eo: one: "%{count} afiŝo" other: "%{count} afiŝoj" statuses_long: - one: "%{count} mesaĝo kaŝita" - other: "%{count} mesaĝoj kaŝita" + one: "%{count} afiŝo estas kaŝita" + other: "%{count} afiŝoj estas kaŝitaj" title: Filtriloj new: save: Konservi novan filtrilon @@ -1230,7 +1233,7 @@ eo: remove: Forigi de filtrilo index: hint: Ĉi tiu filtrilo kongruas kelkaj mesaĝoj sendepende de aliaj kriterioj. - title: Filtritaj mesaĝoj + title: Filtritaj afiŝoj generic: all: Ĉio all_items_on_page_selected_html: @@ -1644,16 +1647,16 @@ eo: interaction_exceptions_explanation: Sciu ke estas neniu garantio ke mesaĝo estos forigita se ĝi iras sub la limo de diskonigoj aŭ stelumoj post atingi ĝin. keep_direct: Konservi rektajn mesaĝojn keep_direct_hint: Ne forigos viajn rektajn mesagôjn - keep_media: Konservi mesaĝojn kun aŭdovidaj aldonaĵoj + keep_media: Konservi afiŝojn kun aŭdovidaj aldonaĵoj keep_media_hint: Ne forigi mesaĝojn kiuj enhavas aŭdovidajn aldonaĵojn - keep_pinned: Konservi alpinglitajn mesaĝojn + keep_pinned: Konservi alpinglitajn afiŝojn keep_pinned_hint: Ne forigi viajn ajn alpinglitajn mesaĝojn keep_polls: Konservi enketojn keep_polls_hint: Ne forigi viajn ajn enketojn - keep_self_bookmark: Konservi mesaĝojn kiun vi legsignis + keep_self_bookmark: Konservi afiŝojn kiun vi legsignis keep_self_bookmark_hint: Ne forigi viajn siajn mesaĝojn se vi legsignis ilin - keep_self_fav: Konservi mesaĝojn kiujn vi stelumis - keep_self_fav_hint: Ne forigi proprajn mesaĝojn se vi stelumis ilin + keep_self_fav: Konservi afiŝojn kiujn vi stelumis + keep_self_fav_hint: Ne forigi proprajn afiŝojn se vi stelumis ilin min_age: '1209600': 2 semajnoj '15778476': 6 monatoj @@ -1664,7 +1667,7 @@ eo: '63113904': 2 jaroj '7889238': 3 monatoj min_age_label: Aĝlimo - min_favs: Konservi mesaĝojn stelumitajn almenaŭ + min_favs: Konservi afiŝojn stelumitajn almenaŭ min_favs_hint: Oni ne forigas viajn afiŝojn, kiuj estas diskonigitaj almenaŭ ĉi tiun nombron da fojoj. Lasu malplena por forigi afiŝojn sendepende de iliaj nombroj da diskonigoj min_reblogs: Konservi diskonitajn mesaĝojn almenau min_reblogs_hint: Oni ne forigas viajn afiŝojn kiuj estas diskonigitaj almenaŭ ĉi tiun nombron da fojoj. Lasu malplena por forigi afiŝojn sendepende de iliaj nombroj da diskonigoj @@ -1738,11 +1741,11 @@ eo: silence: Vi ankorau povas uzi vian konton, sed nur personoj kiuj jam sekvas vin vidos viajn mesaĝojn en tiu ĉi servilo, kaj vi eble estos ekskluzive el diversaj malkovrigaj funkcioj. Tamen, aliaj ankoraŭ povas permane eksekvi vin. suspend: Vi ne povas uzi vian konton plu, kaj via profilo kaj aliaj datumoj ne estas disponeblaj plu. reason: 'Kialo:' - statuses: 'Mesaĝoj ripetitaj:' + statuses: 'Afiŝoj citataj:' subject: - delete_statuses: Viaj mesaĝoj ĉe %{acct} forigitas + delete_statuses: Viaj afiŝoj ĉe %{acct} estas forigitaj disable: Via konto %{acct} estas frostigita - mark_statuses_as_sensitive: Viaj mesaĝoj ĉe %{acct} markitas kiel sentemaj + mark_statuses_as_sensitive: Viaj afiŝoj ĉe %{acct} estas markitaj kiel tiklemaj none: Averto por %{acct} sensitive: Viaj mesaĝoj ĉe %{acct} markitas kiel sentemaj malantau ol nun silence: Oni limigis vian konton %{acct} diff --git a/config/locales/ia.yml b/config/locales/ia.yml index a167b5d8cdb9c9..6c9929315610bc 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -15,17 +15,27 @@ ia: instance_actor_flash: Iste conto es un agente virtual usate pro representar le servitor mesme e non alcun usator individual. Illo es usate pro le federation e non debe esser suspendite. last_active: ultime activitate link_verified_on: Le proprietate de iste ligamine ha essite verificate le %{date} + nothing_here: Il ha nihil ci! + pin_errors: + following: Tu debe primo sequer le persona que tu vole indorsar posts: one: Message other: Messages posts_tab_heading: Messages admin: + account_actions: + action: Exequer action + title: Exequer action de moderation sur %{acct} account_moderation_notes: create: Lassar un nota created_msg: Nota de moderation create con successo! + destroyed_msg: Nota de moderation destruite con successo! accounts: add_email_domain_block: Blocar dominio de e-mail + approve: Approbar + approved_msg: Demanda de inscription de %{username} approbate con successo are_you_sure: Es tu secur? + avatar: Avatar by_domain: Dominio change_email: changed_msg: Email cambiate con successo! @@ -34,6 +44,11 @@ ia: new_email: Nove e-mail submit: Cambiar e-mail title: Cambiar e-mail pro %{username} + change_role: + changed_msg: Rolo cambiate con successo! + label: Cambiar rolo + no_role: Necun rolo + title: Cambiar rolo pro %{username} confirm: Confirmar confirmed: Confirmate confirming: In confirmation @@ -42,25 +57,59 @@ ia: deleted: Delite demote: Degradar destroyed_msg: Le datos de %{username} ora es in cauda pro su imminente deletion + disable: Gelar + disable_sign_in_token_auth: Disactivar le authentication per token in e-mail disable_two_factor_authentication: Disactivar 2FA + disabled: Gelate display_name: Nomine visibile domain: Dominio edit: Modificar email: E-mail email_status: Stato de e-mail + enable: Disgelar + enable_sign_in_token_auth: Activar le authentication per token in e-mail enabled: Activate + enabled_msg: Conto de %{username} disgelate con successo followers: Sequitores + follows: Sequites + header: Capite + inbox_url: URL de cassa de entrata + invite_request_text: Motivos pro le inscription + invited_by: Invitate per + ip: IP + joined: Inscription location: all: Toto + local: Local + remote: Remote title: Location + login_status: Stato de session + media_attachments: Annexos multimedial + memorialize: Render commemorative + memorialized: Conto commemorative + memorialized_msg: "%{username} ha essite convertite in un conto commemorative" moderation: active: Active all: Toto disabled: Disactivate + pending: In tractamento + silenced: Limitate + suspended: Suspendite + title: Moderation moderation_notes: Notas de moderation most_recent_activity: Activitate plus recente most_recent_ip: IP plus recente + no_account_selected: Necun conto ha essite cambiate perque necun ha essite seligite + no_limits_imposed: Necun limite imponite + no_role_assigned: Necun rolo assignate + not_subscribed: Non subscribite + pending: Attende revision + perform_full_suspension: Suspender + previous_strikes: Previe admonitiones + promote: Promover + protocol: Protocollo public: Public + push_subscription_expires: Subscription PuSH expira le redownload: Actualisar profilo resend_confirmation: already_confirmed: Iste usator jam es confirmate @@ -237,6 +286,9 @@ ia: updated_at: Actualisate view_profile: Vider profilo roles: + assigned_users: + one: "%{count} usator" + other: "%{count} usatores" everyone: Permissiones predefinite privileges: delete_user_data: Deler le datos de usator diff --git a/config/locales/ja.yml b/config/locales/ja.yml index a60dba35195eed..9753ecd374be78 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1500,6 +1500,7 @@ ja: title_actions: delete_statuses: 投稿の削除 disable: アカウント凍結 + force_cw: 投稿に警告文を追加 mark_statuses_as_sensitive: 投稿を閲覧注意としてマーク none: 警告 sensitive: アカウントを閲覧注意としてマーク diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 4c22335eaa9cf3..9cb9cadee975a4 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1671,6 +1671,9 @@ pt-BR: domain_block: Suspensão do servidor (%{target_name}) user_domain_block: Você bloqueou %{target_name} lost_followers: Seguidores perdidos + lost_follows: Seguidores perdidos + preamble: Você poderá perder seguidores e seguidores quando bloquear um domínio ou quando os seus moderadores decidirem suspender um servidor remoto. Quando isso acontecer, você poderá baixar listas de relações desfeitas, a serem inspecionadas e possivelmente importadas para outro servidor. + purged: As informações sobre este servidor foram eliminadas pelos administradores do seu servidor. type: Evento statuses: attached: @@ -1765,6 +1768,7 @@ pt-BR: contrast: Mastodon (Alto contraste) default: Mastodon (Noturno) mastodon-light: Mastodon (Diurno) + system: Automático (usar tema do sistema) time: formats: default: "%H:%M em %d de %b de %Y" diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 8d5be382d260d1..f72da822584770 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -96,16 +96,17 @@ en: warn: Hide the filtered content behind a warning mentioning the filter's title form_admin_settings: activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets - backups_retention_period: Keep generated user archives for the specified number of days. + backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days. bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations. closed_registrations_message: Displayed when sign-ups are closed - content_cache_retention_period: All posts and boosts from other servers will be deleted after the specified number of days. Some posts may not be recoverable. All related bookmarks, favourites and boosts will also be lost and impossible to undo. + content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use. custom_css: You can apply custom styles on the web version of Mastodon. + delete_content_cache_without_reaction: This feature currently raises concerns about load. We anticipate the emergence of user bots that bookmark all posts. Please consider this carefully, especially on large servers. enable_local_timeline: While enabling this feature will allow for interaction between like-minded users, it may also strengthen the internal atmosphere; since Mastodon is supposed to have a local timeline, we recommend annotating it in the server introduction if it is to be disabled. enable_public_unlisted_visibility: If true, your community maybe closed-minded. If turn it false, strongly recommend that you disclose that you have disabled this setting! enable_public_visibility: If disabled, public posts will be forcibly replaced with "Local public" or "Unlisted" posts. mascot: Overrides the illustration in the advanced web interface. - media_cache_retention_period: Downloaded media files will be deleted after the specified number of days when set to a positive value, and re-downloaded on demand. + media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time. peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense. profile_directory: The profile directory lists all users who have opted-in to be discoverable. receive_other_servers_emoji_reaction: It can cause load. It is recommended to enable it only when there are few people. @@ -354,7 +355,7 @@ en: bootstrap_timeline_accounts: Always recommend these accounts to new users check_lts_version_only: Check kmyblue LTS version only when update check closed_registrations_message: Custom message when sign-ups are not available - content_cache_retention_period: Content cache retention period + content_cache_retention_period: Remote content retention period custom_css: Custom CSS delete_content_cache_without_reaction: Exclude favorite/bookmarked posts from deletion enable_emoji_reaction: Enable emoji reaction function diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index 2f04ce982e78d4..7012cdb1cd0833 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -30,6 +30,7 @@ ia: defaults: autofollow: Invitar a sequer tu conto avatar: Pictura de profilo + chosen_languages: Filtrar linguas confirm_new_password: Confirmar nove contrasigno confirm_password: Confirmar contrasigno current_password: Contrasigno actual @@ -39,6 +40,7 @@ ia: new_password: Nove contrasigno password: Contrasigno setting_advanced_layout: Activar le interfacie web avantiate + setting_always_send_emails: Sempre inviar notificationes per e-mail setting_default_language: Lingua de publication setting_display_media_default: Predefinite setting_display_media_hide_all: Celar toto diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 1ebef25ea73f78..8300f16c16553d 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -108,6 +108,7 @@ ja: closed_registrations_message: アカウント作成を停止している時に表示されます content_cache_retention_period: 指定した日数が経過した他のサーバーの投稿とブーストを削除します。削除された投稿は再取得できない場合があります。削除された投稿についたブックマークやお気に入り、ブーストも失われ、元に戻せません。 custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。 + delete_content_cache_without_reaction: この機能は現在、負荷に関する懸念があります。すべての投稿をブックマークするユーザーbotの出現も想定されます。特に大規模サーバーでは慎重に検討してください。 enable_local_timeline: 有効にすると気の合ったユーザー同士の交流が捗る反面、内輪の雰囲気が強くなるかもしれません。Mastodonはローカルタイムラインがあるものだと思われているので、無効にする場合はサーバー紹介での注記をおすすめします。 enable_public_unlisted_visibility: 有効にするとあなたのコミュニティは閉鎖的になるかもしれません。この設定はkmyblueの主要機能の1つであり、無効にする場合は概要などに記載することを強くおすすめします。 enable_public_visibility: 無効にすると公開投稿は強制的に「ローカル公開」または「非収載」に置き換えられます。 diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 676f5e37a3f354..c3eea9f1182d08 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -116,6 +116,7 @@ pt-BR: sign_up_requires_approval: Novas inscrições exigirão sua aprovação severity: Escolha o que acontecerá com as solicitações deste IP rule: + hint: Opcional. Forneça mais detalhes sobre a regra text: Descreva uma regra ou requisito para os usuários neste servidor. Tente mantê-la curta e simples. sessions: otp: 'Digite o código de dois fatores gerado pelo aplicativo no seu celular ou use um dos códigos de recuperação:' diff --git a/db/migrate/20240217171534_remove_defaults_for_status_pins_timestamps.rb b/db/migrate/20240217171534_remove_defaults_for_status_pins_timestamps.rb new file mode 100644 index 00000000000000..301371a02d6c32 --- /dev/null +++ b/db/migrate/20240217171534_remove_defaults_for_status_pins_timestamps.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class RemoveDefaultsForStatusPinsTimestamps < ActiveRecord::Migration[7.1] + def change + change_column_default :status_pins, :created_at, from: -> { 'CURRENT_TIMESTAMP' }, to: nil + change_column_default :status_pins, :updated_at, from: -> { 'CURRENT_TIMESTAMP' }, to: nil + end +end diff --git a/db/migrate/20240426000034_move_account_warning_notifications.rb b/db/migrate/20240426000034_move_account_warning_notifications.rb new file mode 100644 index 00000000000000..fdabf0218c30db --- /dev/null +++ b/db/migrate/20240426000034_move_account_warning_notifications.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class MoveAccountWarningNotifications < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + class Notification < ApplicationRecord; end + + def up + Notification.where(type: 'warning').in_batches.update_all(type: 'moderation_warning') + end + + def down + Notification.where(type: 'moderation_warning').in_batches.update_all(type: 'warning') + end +end diff --git a/db/migrate/20240426233435_migrate_moderation_warning_notifications_from_account.rb b/db/migrate/20240426233435_migrate_moderation_warning_notifications_from_account.rb new file mode 100644 index 00000000000000..65baf952f109bc --- /dev/null +++ b/db/migrate/20240426233435_migrate_moderation_warning_notifications_from_account.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class MigrateModerationWarningNotificationsFromAccount < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + class Notification < ApplicationRecord; end + + def up + Notification.where(type: 'moderation_warning').in_batches.update_all('from_account_id = account_id') + end + + # No need to reinstate this information as it is a privacy issue. + def down; end +end diff --git a/db/schema.rb b/db/schema.rb index d4e8fecbbca70b..91719634e2a219 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_04_01_222541) do +ActiveRecord::Schema[7.1].define(version: 2024_04_26_233435) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1367,8 +1367,8 @@ create_table "status_pins", force: :cascade do |t| t.bigint "account_id", null: false t.bigint "status_id", null: false - t.datetime "created_at", precision: nil, default: -> { "now()" }, null: false - t.datetime "updated_at", precision: nil, default: -> { "now()" }, null: false + t.datetime "created_at", precision: nil, null: false + t.datetime "updated_at", precision: nil, null: false t.index ["account_id", "status_id"], name: "index_status_pins_on_account_id_and_status_id", unique: true t.index ["status_id"], name: "index_status_pins_on_status_id" end diff --git a/lib/tasks/dangerous.rake b/lib/tasks/dangerous.rake index cd2da0677e4ac5..f258efd7b71c09 100644 --- a/lib/tasks/dangerous.rake +++ b/lib/tasks/dangerous.rake @@ -14,9 +14,27 @@ namespace :dangerous do end target_migrations = %w( - 20231022074913 - 20231021005339 - 20230314120530 + 20240426233435 + 20240426000034 + 20240401222541 + 20240327234026 + 20240326231854 + 20240320231633 + 20240312230204 + 20240229233617 + 20240227225017 + 20240227222450 + 20240227033337 + 20240218233621 + 20240217230006 + 20240217093511 + 20240217022038 + 20240216042730 + 20240212230358 + 20240212224800 + 20240121231131 + 20240117022353 + 20240117021025 20240109035435 20231214225249 20231212225737 @@ -27,6 +45,8 @@ namespace :dangerous do 20231028005948 20231028004612 20231023083359 + 20231022074913 + 20231021005339 20231009235215 20231007090808 20231006030102 @@ -74,30 +94,12 @@ namespace :dangerous do 20230405121613 20230320234918 20230314121142 + 20230314120530 20230314081013 20230314021909 20230308061833 20230223102416 20230222232121 - 20240117021025 - 20240117022353 - 20240121231131 - 20240212224800 - 20240212230358 - 20240216042730 - 20240217022038 - 20240217093511 - 20240217230006 - 20240218233621 - 20240227033337 - 20240227222450 - 20240227225017 - 20240229233617 - 20240312230204 - 20240320231633 - 20240326231854 - 20240327234026 - 20240401222541 ) # Removed: account_groups target_tables = %w( diff --git a/package.json b/package.json index 475566effd6c93..5401c36a31d51d 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "core-js": "^3.30.2", "cross-env": "^7.0.3", "css-loader": "^5.2.7", - "cssnano": "^6.0.1", + "cssnano": "^7.0.0", "detect-passive-events": "^2.0.3", "emoji-mart": "npm:emoji-mart-lazyload@latest", "escape-html": "^1.0.3", diff --git a/spec/models/admin/account_action_spec.rb b/spec/models/admin/account_action_spec.rb index 9bc9f8061d7f10..a9dcf352dcdaea 100644 --- a/spec/models/admin/account_action_spec.rb +++ b/spec/models/admin/account_action_spec.rb @@ -69,22 +69,22 @@ end end - it 'creates Admin::ActionLog' do - expect do - subject - end.to change(Admin::ActionLog, :count).by 1 - end + it 'sends notification, log the action, and closes other reports', :aggregate_failures do + other_report = Fabricate(:report, target_account: target_account) - it 'calls process_email!' do - allow(account_action).to receive(:process_email!) - subject - expect(account_action).to have_received(:process_email!) - end + emails = [] + expect do + emails = capture_emails { subject } + end.to (change(Admin::ActionLog.where(action: type), :count).by 1) + .and(change { other_report.reload.action_taken? }.from(false).to(true)) + + expect(emails).to contain_exactly( + have_attributes( + to: contain_exactly(target_account.user.email) + ) + ) - it 'calls process_reports!' do - allow(account_action).to receive(:process_reports!) - subject - expect(account_action).to have_received(:process_reports!) + expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(target_account.id, anything, 'AccountWarning', 'moderation_warning') end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index 172d1c65b99f47..3c7d51ae1a3217 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -138,6 +138,17 @@ expect(notification.account).to eq(account) end end + + context 'when activity_type is an AccountWarning' do + it 'sets the notification from_account to the recipient of the notification' do + account = Fabricate(:account) + account_warning = Fabricate(:account_warning, target_account: account) + + notification = Fabricate.build(:notification, activity_type: 'AccountWarning', activity: account_warning, account: account) + + expect(notification.from_account).to eq(account) + end + end end describe '.preload_cache_collection_target_statuses' do diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 31a601dcb0e23c..a1358fbc54579b 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -54,6 +54,13 @@ .to not_change { account.statuses_count } .and(not_change { previous_status.replies_count }) end + + it 'returns existing status when used twice with idempotency key' do + account = Fabricate(:account) + status1 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future) + status2 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future) + expect(status2.id).to eq status1.id + end end it 'creates response to the original status of boost' do diff --git a/streaming/package.json b/streaming/package.json index f90a1e4404642e..a0e7d96bb5ba31 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -24,7 +24,7 @@ "jsdom": "^24.0.0", "pg": "^8.5.0", "pg-connection-string": "^2.6.0", - "pino": "^8.17.2", + "pino": "^9.0.0", "pino-http": "^9.0.0", "prom-client": "^15.0.0", "uuid": "^9.0.0", diff --git a/yarn.lock b/yarn.lock index 220bbd8c5bba94..6d5e08ab82ad3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2806,7 +2806,7 @@ __metadata: core-js: "npm:^3.30.2" cross-env: "npm:^7.0.3" css-loader: "npm:^5.2.7" - cssnano: "npm:^6.0.1" + cssnano: "npm:^7.0.0" detect-passive-events: "npm:^2.0.3" emoji-mart: "npm:emoji-mart-lazyload@latest" escape-html: "npm:^1.0.3" @@ -2923,7 +2923,7 @@ __metadata: jsdom: "npm:^24.0.0" pg: "npm:^8.5.0" pg-connection-string: "npm:^2.6.0" - pino: "npm:^8.17.2" + pino: "npm:^9.0.0" pino-http: "npm:^9.0.0" pino-pretty: "npm:^11.0.0" prom-client: "npm:^15.0.0" @@ -6687,64 +6687,64 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^6.1.2": - version: 6.1.2 - resolution: "cssnano-preset-default@npm:6.1.2" +"cssnano-preset-default@npm:^7.0.1": + version: 7.0.1 + resolution: "cssnano-preset-default@npm:7.0.1" dependencies: browserslist: "npm:^4.23.0" css-declaration-sorter: "npm:^7.2.0" - cssnano-utils: "npm:^4.0.2" - postcss-calc: "npm:^9.0.1" - postcss-colormin: "npm:^6.1.0" - postcss-convert-values: "npm:^6.1.0" - postcss-discard-comments: "npm:^6.0.2" - postcss-discard-duplicates: "npm:^6.0.3" - postcss-discard-empty: "npm:^6.0.3" - postcss-discard-overridden: "npm:^6.0.2" - postcss-merge-longhand: "npm:^6.0.5" - postcss-merge-rules: "npm:^6.1.1" - postcss-minify-font-values: "npm:^6.1.0" - postcss-minify-gradients: "npm:^6.0.3" - postcss-minify-params: "npm:^6.1.0" - postcss-minify-selectors: "npm:^6.0.4" - postcss-normalize-charset: "npm:^6.0.2" - postcss-normalize-display-values: "npm:^6.0.2" - postcss-normalize-positions: "npm:^6.0.2" - postcss-normalize-repeat-style: "npm:^6.0.2" - postcss-normalize-string: "npm:^6.0.2" - postcss-normalize-timing-functions: "npm:^6.0.2" - postcss-normalize-unicode: "npm:^6.1.0" - postcss-normalize-url: "npm:^6.0.2" - postcss-normalize-whitespace: "npm:^6.0.2" - postcss-ordered-values: "npm:^6.0.2" - postcss-reduce-initial: "npm:^6.1.0" - postcss-reduce-transforms: "npm:^6.0.2" - postcss-svgo: "npm:^6.0.3" - postcss-unique-selectors: "npm:^6.0.4" + cssnano-utils: "npm:^5.0.0" + postcss-calc: "npm:^10.0.0" + postcss-colormin: "npm:^7.0.0" + postcss-convert-values: "npm:^7.0.0" + postcss-discard-comments: "npm:^7.0.0" + postcss-discard-duplicates: "npm:^7.0.0" + postcss-discard-empty: "npm:^7.0.0" + postcss-discard-overridden: "npm:^7.0.0" + postcss-merge-longhand: "npm:^7.0.0" + postcss-merge-rules: "npm:^7.0.0" + postcss-minify-font-values: "npm:^7.0.0" + postcss-minify-gradients: "npm:^7.0.0" + postcss-minify-params: "npm:^7.0.0" + postcss-minify-selectors: "npm:^7.0.0" + postcss-normalize-charset: "npm:^7.0.0" + postcss-normalize-display-values: "npm:^7.0.0" + postcss-normalize-positions: "npm:^7.0.0" + postcss-normalize-repeat-style: "npm:^7.0.0" + postcss-normalize-string: "npm:^7.0.0" + postcss-normalize-timing-functions: "npm:^7.0.0" + postcss-normalize-unicode: "npm:^7.0.0" + postcss-normalize-url: "npm:^7.0.0" + postcss-normalize-whitespace: "npm:^7.0.0" + postcss-ordered-values: "npm:^7.0.0" + postcss-reduce-initial: "npm:^7.0.0" + postcss-reduce-transforms: "npm:^7.0.0" + postcss-svgo: "npm:^7.0.0" + postcss-unique-selectors: "npm:^7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/af99021f936763850f5f35dc9e6a9dfb0da30856dea36e0420b011da2a447099471db2a5f3d1f5f52c0489da186caf9a439d8f048a80f82617077efb018333fa + checksum: 10c0/bee65239d25de2ba87e85b4091cbc1cac9ba1b57c9f803dff5a71ea8a55a885045805840dd732be284c28cca6343dece37fc76d7096aba37cfa02eff2ee7714c languageName: node linkType: hard -"cssnano-utils@npm:^4.0.2": - version: 4.0.2 - resolution: "cssnano-utils@npm:4.0.2" +"cssnano-utils@npm:^5.0.0": + version: 5.0.0 + resolution: "cssnano-utils@npm:5.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/260b8c8ffa48b908aa77ef129f9b8648ecd92aed405b20e7fe6b8370779dd603530344fc9d96683d53533246e48b36ac9d2aa5a476b4f81c547bbad86d187f35 + checksum: 10c0/492593fb45151e8622357bb958d0d80475372de38523ef0587d77e9c5f386beb55c30b41f2f3c735a374a230bc61404eb7ae9c2beeab0666afb499442c62ecba languageName: node linkType: hard -"cssnano@npm:^6.0.1": - version: 6.1.2 - resolution: "cssnano@npm:6.1.2" +"cssnano@npm:^7.0.0": + version: 7.0.1 + resolution: "cssnano@npm:7.0.1" dependencies: - cssnano-preset-default: "npm:^6.1.2" + cssnano-preset-default: "npm:^7.0.1" lilconfig: "npm:^3.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/4df0dc0389b34b38acb09b7cfb07267b0eda95349c6d5e9b7666acc7200bb33359650869a60168e9d878298b05f4ad2c7f070815c90551720a3f4e1037f79691 + checksum: 10c0/8b17d13efe98ec2db2fbde9ca24e91842b9afe2f80becc5e4271ee1170d77cf73eed3cdc2f35ed51bacdeac763ff85db45ae8e9627a8862bf01d457a819a640e languageName: node linkType: hard @@ -12948,13 +12948,13 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0": - version: 1.1.0 - resolution: "pino-abstract-transport@npm:1.1.0" +"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0, pino-abstract-transport@npm:^1.2.0": + version: 1.2.0 + resolution: "pino-abstract-transport@npm:1.2.0" dependencies: readable-stream: "npm:^4.0.0" split2: "npm:^4.0.0" - checksum: 10c0/6e9b9d5a2c0a37f91ecaf224d335daae1ae682b1c79a05b06ef9e0f0a5d289f8e597992217efc857796dae6f1067e9b4882f95c6228ff433ddc153532cae8aca + checksum: 10c0/b4ab59529b7a91f488440147fc58ee0827a6c1c5ca3627292339354b1381072c1a6bfa9b46d03ad27872589e8477ecf74da12cf286e1e6b665ac64a3b806bf07 languageName: node linkType: hard @@ -13001,7 +13001,7 @@ __metadata: languageName: node linkType: hard -"pino@npm:^8.17.1, pino@npm:^8.17.2": +"pino@npm:^8.17.1": version: 8.20.0 resolution: "pino@npm:8.20.0" dependencies: @@ -13022,6 +13022,27 @@ __metadata: languageName: node linkType: hard +"pino@npm:^9.0.0": + version: 9.0.0 + resolution: "pino@npm:9.0.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.1.1" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^1.2.0" + pino-std-serializers: "npm:^6.0.0" + process-warning: "npm:^3.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + sonic-boom: "npm:^3.7.0" + thread-stream: "npm:^2.6.0" + bin: + pino: bin.js + checksum: 10c0/10ef10aee0cf80af8ed83468cff2e29d642b6794b53cf641e1abcaf9e9958d8bcbc6e09d62757054aef3b4415c45d66a5018da11d43b81a23ba299ef5dc4e8b1 + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" @@ -13083,15 +13104,15 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^9.0.1": - version: 9.0.1 - resolution: "postcss-calc@npm:9.0.1" +"postcss-calc@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-calc@npm:10.0.0" dependencies: - postcss-selector-parser: "npm:^6.0.11" + postcss-selector-parser: "npm:^6.0.16" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.2.2 - checksum: 10c0/e0df07337162dbcaac5d6e030c7fd289e21da8766a9daca5d6b2b3c8094bb524ae5d74c70048ea7fe5fe4960ce048c60ac97922d917c3bbff34f58e9d2b0eb0e + postcss: ^8.4.38 + checksum: 10c0/d4d529f2f71b49f17441eed74a7564ccd2779c72ed8648d4bb2530261a27c0ca01fe6a07260e7bf57e55f46dd68dea07e52fd1a6b538db7bc13015124be258a5 languageName: node linkType: hard @@ -13145,9 +13166,9 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-colormin@npm:6.1.0" +"postcss-colormin@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-colormin@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" @@ -13155,19 +13176,19 @@ __metadata: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/0802963fa0d8f2fe408b2e088117670f5303c69a58c135f0ecf0e5ceff69e95e87111b22c4e29c9adb2f69aa8d3bc175f4e8e8708eeb99c9ffc36c17064de427 + checksum: 10c0/d365a5365e0a94748309d32c7208cd06249bc53eb82cc32c771de4073b109fa8552e58d60dbe84d7e69e68081ed8a01fbf645d38a650e90cb2e13b21043cd796 languageName: node linkType: hard -"postcss-convert-values@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-convert-values@npm:6.1.0" +"postcss-convert-values@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-convert-values@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/a80066965cb58fe8fcaf79f306b32c83fc678e1f0678e43f4db3e9fee06eed6db92cf30631ad348a17492769d44757400493c91a33ee865ee8dedea9234a11f5 + checksum: 10c0/5d7cfa06f307e024574a1842016f006691e0c1932352f53a99ce8f2f9930c64c3c1ae17518e9e4e5176630b99f1beaab37bc339bc779fb07dc543670ae66bb21 languageName: node linkType: hard @@ -13225,39 +13246,39 @@ __metadata: languageName: node linkType: hard -"postcss-discard-comments@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-discard-comments@npm:6.0.2" +"postcss-discard-comments@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-discard-comments@npm:7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/338a1fcba7e2314d956e5e5b9bd1e12e6541991bf85ac72aed6e229a029bf60edb31f11576b677623576169aa7d9c75e1be259ac7b50d0b735b841b5518f9da9 + checksum: 10c0/7fef7deea85c1e68161f69057be19a3aedd54d23c9b464c9b1531faa7a115f0c96a4f0ee3a560ce300578599dbc8114fe0fb744208b20b9d2fd8df1b4b39c58a languageName: node linkType: hard -"postcss-discard-duplicates@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-discard-duplicates@npm:6.0.3" +"postcss-discard-duplicates@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-discard-duplicates@npm:7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/24d2f00e54668f2837eb38a64b1751d7a4a73b2752f9749e61eb728f1fae837984bc2b339f7f5207aff5f66f72551253489114b59b9ba21782072677a81d7d1b + checksum: 10c0/37d568dc18d47b8b9f0fd6d5115b1faf96c2bf429fc4586508a773533479e18627d6260cad6a3ca7d3bfc2f220fd9448410aee40e07f2ec6c6f96bbe3595dbc8 languageName: node linkType: hard -"postcss-discard-empty@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-discard-empty@npm:6.0.3" +"postcss-discard-empty@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-discard-empty@npm:7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/1af08bb29f18eda41edf3602b257d89a4cf0a16f79fc773cfebd4a37251f8dbd9b77ac18efe55d0677d000b43a8adf2ef9328d31961c810e9433a38494a1fa65 + checksum: 10c0/b54fc9ad59a6015f6b82b8c826717a4a2f82b272608f6ae37a0b568f4f6c503f5ac7d13d415853a946a0422cb37b9fe1d5ddcee91fe0c2086001138710600d8b languageName: node linkType: hard -"postcss-discard-overridden@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-discard-overridden@npm:6.0.2" +"postcss-discard-overridden@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-discard-overridden@npm:7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/fda70ef3cd4cb508369c5bbbae44d7760c40ec9f2e65df1cd1b6e0314317fb1d25ae7f64987ca84e66889c1e9d1862487a6ce391c159dfe04d536597bfc5030d + checksum: 10c0/ca00ed1d4e8793fc780039f235fa2caef123d3aa28cae47cc1472ca03b21386c39fae1f11fbf319dcb94c6bda923824067254c7e20e8b00354b47015dc754658 languageName: node linkType: hard @@ -13375,77 +13396,77 @@ __metadata: languageName: node linkType: hard -"postcss-merge-longhand@npm:^6.0.5": - version: 6.0.5 - resolution: "postcss-merge-longhand@npm:6.0.5" +"postcss-merge-longhand@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-merge-longhand@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^6.1.1" + stylehacks: "npm:^7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/5a223a7f698c05ab42e9997108a7ff27ea1e0c33a11a353d65a04fc89c3b5b750b9e749550d76b6406329117a055adfc79dde7fee48dca5c8e167a2854ae3fea + checksum: 10c0/5f814f396a5107dcb5e74c2d4e55ebcd03b9bc2b3619ed7aea63a441854023ce349bc371d30aec1ac33a375139afac02709e7721e055b5e624701ac6576e8a10 languageName: node linkType: hard -"postcss-merge-rules@npm:^6.1.1": - version: 6.1.1 - resolution: "postcss-merge-rules@npm:6.1.1" +"postcss-merge-rules@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-merge-rules@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" - cssnano-utils: "npm:^4.0.2" + cssnano-utils: "npm:^5.0.0" postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/6d8952dbb19b1e59bf5affe0871fa1be6515103466857cff5af879d6cf619659f8642ec7a931cabb7cdbd393d8c1e91748bf70bee70fa3edea010d4e25786d04 + checksum: 10c0/d9cb3a4e55db57aa7ba0bb1caefb82db93c8493d2b3db66091dae9d5794ca04729e660115765ff254d0eb960e4db037f6c5b92562b396b05216888d12acc08e0 languageName: node linkType: hard -"postcss-minify-font-values@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-minify-font-values@npm:6.1.0" +"postcss-minify-font-values@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-minify-font-values@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/0d6567170c22a7db42096b5eac298f041614890fbe01759a9fa5ccda432f2bb09efd399d92c11bf6675ae13ccd259db4602fad3c358317dee421df5f7ab0a003 + checksum: 10c0/f8be40099a6986d96b9cd2eb9c32a9c681efc6ecd6504c9ab7e01feb9e688c8b9656dfd7f35aa6de2585a86d607f62152ee81d0175e712e4658d184d25f63d58 languageName: node linkType: hard -"postcss-minify-gradients@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-minify-gradients@npm:6.0.3" +"postcss-minify-gradients@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-minify-gradients@npm:7.0.0" dependencies: colord: "npm:^2.9.3" - cssnano-utils: "npm:^4.0.2" + cssnano-utils: "npm:^5.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/7fcbcec94fe5455b89fe1b424a451198e60e0407c894bbacdc062d9fdef2f8571b483b5c3bb17f22d2f1249431251b2de22e1e4e8b0614d10624f8ee6e71afd2 + checksum: 10c0/15d162192b598242e14def81a62e30cf273ab14f1db702c391e6bdd442c570a1aa76fc326874253a2d67f75b4d4fe73ba4f664e85dbff883f24b7090c340bfad languageName: node linkType: hard -"postcss-minify-params@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-minify-params@npm:6.1.0" +"postcss-minify-params@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-minify-params@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" - cssnano-utils: "npm:^4.0.2" + cssnano-utils: "npm:^5.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/e5c38c3e5fb42e2ca165764f983716e57d854a63a477f7389ccc94cd2ab8123707006613bd7f29acc6eafd296fff513aa6d869c98ac52590f886d641cb21a59e + checksum: 10c0/28a7ae313a197aeaff8b3fa1e695a6443b11a74258374a05adee6a1b05f5849ef52037b7a5069d6910614b03b4610acdaf4a76f38b89cb42e813a8cb5ec2fc01 languageName: node linkType: hard -"postcss-minify-selectors@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-minify-selectors@npm:6.0.4" +"postcss-minify-selectors@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-minify-selectors@npm:7.0.0" dependencies: postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/695ec2e1e3a7812b0cabe1105d0ed491760be3d8e9433914fb5af1fc30a84e6dc24089cd31b7e300de620b8e7adf806526c1acf8dd14077a7d1d2820c60a327c + checksum: 10c0/6baf0ea71b8dfd01bdb5b516d01aa00244c55cad8d9c674358d735cef2a6aca6586dd480d419cc8d3f470e6d2d7d19354592044f19766993caf9800d3d7e0d36 languageName: node linkType: hard @@ -13506,101 +13527,101 @@ __metadata: languageName: node linkType: hard -"postcss-normalize-charset@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-charset@npm:6.0.2" +"postcss-normalize-charset@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-charset@npm:7.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/af32a3b4cf94163d728b8aa935b2494c9f69fbc96a33b35f67ae15dbdef7fcc8732569df97cbaaf20ca6c0103c39adad0cfce2ba07ffed283796787f6c36f410 + checksum: 10c0/06d9c4487a4b0e195133a1fb7a115db7014e49d2567cce73e24c59f473f0e65a1999850a726afb3bdb2d36017a3e5c92ac4fd2a7ecc427da4ff79522765fabdd languageName: node linkType: hard -"postcss-normalize-display-values@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-display-values@npm:6.0.2" +"postcss-normalize-display-values@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-display-values@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/782761850c7e697fdb6c3ff53076de716a71b60f9e835efb2f7ef238de347c88b5d55f0d43cf5c608e1ee58de65360e3d9fccd5f20774bba08ded7c87d8a5651 + checksum: 10c0/439524e1d3ed36d6265c05da10540e17aa8605e1b396f71ca4364ab3b8b98ca97763c58c211fb9492662429d43613a7fe7009a8638c84a8db327e572c382272a languageName: node linkType: hard -"postcss-normalize-positions@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-positions@npm:6.0.2" +"postcss-normalize-positions@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-positions@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/9fdd42a47226bbda5f68774f3c4c3a90eb4fa708aef5a997c6a52fe6cac06585c9774038fe3bc1aa86a203c29223b8d8db6ebe7580c1aa293154f2b48db0b038 + checksum: 10c0/428763c937cd178c8ee544cd93a9d1fef667dc9a8700ffe2e61b0beeea7f64f712492b9aeb8a1ef927ab752ec34be7ddeb23d2b50e4bc6eba02b0e58312b27a7 languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-repeat-style@npm:6.0.2" +"postcss-normalize-repeat-style@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-repeat-style@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/9133ccbdf1286920c1cd0d01c1c5fa0bd3251b717f2f3e47d691dcc44978ac1dc419d20d9ae5428bd48ee542059e66b823ba699356f5968ccced5606c7c7ca34 + checksum: 10c0/cf7cd9f355fd26f1c9b0c11a923029ac5ea3020520db5a9778dd19c5ee1f48a1f1f368b4ae75fc6b63cb5761eef72333e486ab0de1537b9cb62d213a8c5576d0 languageName: node linkType: hard -"postcss-normalize-string@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-string@npm:6.0.2" +"postcss-normalize-string@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-string@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/fecc2d52c4029b24fecf2ca2fb45df5dbdf9f35012194ad4ea80bc7be3252cdcb21a0976400902320595aa6178f2cc625cc804c6b6740aef6efa42105973a205 + checksum: 10c0/8857563f85841ce432bb9a5a9ba129847890b61693adff96d565b69dc2d5456f54dec33f4f6ce5b0abf0a484dbfb0145846d99f988959c5ac875a86a2a180576 languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-timing-functions@npm:6.0.2" +"postcss-normalize-timing-functions@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-timing-functions@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/a22af0b3374704e59ae70bbbcc66b7029137e284f04e30a2ad548818d1540d6c1ed748dd8f689b9b6df5c1064085a00ad07b6f7e25ffaad49d4e661b616cdeae + checksum: 10c0/bc5f6999b4c9e28e5be785ef90fe68fd48d44059ecc73ee194c2603260597d685b13a1e1751df9a2cee100fea7abb7e1b1cbcf1a7a428a576961705c9d426788 languageName: node linkType: hard -"postcss-normalize-unicode@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-normalize-unicode@npm:6.1.0" +"postcss-normalize-unicode@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-unicode@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/ff5746670d94dd97b49a0955c3c71ff516fb4f54bbae257f877d179bacc44a62e50a0fd6e7ddf959f2ca35c335de4266b0c275d880bb57ad7827189339ab1582 + checksum: 10c0/f2d6ab0076c006dcf3ed33ba30686f2d29e81a408c66acced22e2c942df6d613697ea786137833dd258aafab5fda4d3eb27df13a82df830357dbad9b79154881 languageName: node linkType: hard -"postcss-normalize-url@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-url@npm:6.0.2" +"postcss-normalize-url@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-url@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/4718f1c0657788d2c560b340ee8e0a4eb3eb053eba6fbbf489e9a6e739b4c5f9ce1957f54bd03497c50a1f39962bf6ab9ff6ba4976b69dd160f6afd1670d69b7 + checksum: 10c0/3050e228be48fe0121d1316c267e629b232e8401a547128d142c3dea55eeae1e232c9beeea5c76439009188993b14925c5cf40e3a44856d076a7b8fcf4721f86 languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-normalize-whitespace@npm:6.0.2" +"postcss-normalize-whitespace@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-normalize-whitespace@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/d5275a88e29a894aeb83a2a833e816d2456dbf3f39961628df596ce205dcc4895186a023812ff691945e0804241ccc53e520d16591b5812288474b474bbaf652 + checksum: 10c0/8d61234962a4850fc61292592171e1d13de2e90d96a2eaed8c85672a05caceda02a3bd1cb495cb72414741f99d50083362df14923efaca1b3e09657d24cea34b languageName: node linkType: hard @@ -13613,15 +13634,15 @@ __metadata: languageName: node linkType: hard -"postcss-ordered-values@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-ordered-values@npm:6.0.2" +"postcss-ordered-values@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-ordered-values@npm:7.0.0" dependencies: - cssnano-utils: "npm:^4.0.2" + cssnano-utils: "npm:^5.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/aece23a289228aa804217a85f8da198d22b9123f02ca1310b81834af380d6fbe115e4300683599b4a2ab7f1c6a1dbd6789724c47c38e2b0a3774f2ea4b4f0963 + checksum: 10c0/42b14f9518b573318594c2aeb2f13fd1fbe44936d14f1b28a438e7a82644ace9a2946699bebfe7a2d383534dc24e7203c35308d749f3c585a86daa238ad920a4 languageName: node linkType: hard @@ -13737,26 +13758,26 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-initial@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-reduce-initial@npm:6.1.0" +"postcss-reduce-initial@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-reduce-initial@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/a8f28cf51ce9a1b9423cce1a01c1d7cbee90125930ec36435a0073e73aef402d90affe2fd3600c964b679cf738869fda447b95a9acce74414e9d67d5c6ba8646 + checksum: 10c0/ed50cd680ce258df953b82ce9b3fb52564d08548724577810800e236d017d80430cbccb4b1ad38b0f4d521663598e44ab93136b20064231181ef49e1e113ae10 languageName: node linkType: hard -"postcss-reduce-transforms@npm:^6.0.2": - version: 6.0.2 - resolution: "postcss-reduce-transforms@npm:6.0.2" +"postcss-reduce-transforms@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-reduce-transforms@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/755ef27b3d083f586ac831f0c611a66e76f504d27e2100dc7674f6b86afad597901b4520cb889fe58ca70e852aa7fd0c0acb69a63d39dfe6a95860b472394e7c + checksum: 10c0/b2d4b65e71d38b604b41937850d1d64794964d6eced90f05891cfae8a78c7a9fed49911f51da9dcc5d715ac18e8bc7eacf691f2c5321dfe4d781f3e4442dfea9 languageName: node linkType: hard @@ -13805,7 +13826,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": version: 6.0.16 resolution: "postcss-selector-parser@npm:6.0.16" dependencies: @@ -13815,26 +13836,26 @@ __metadata: languageName: node linkType: hard -"postcss-svgo@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-svgo@npm:6.0.3" +"postcss-svgo@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-svgo@npm:7.0.0" dependencies: postcss-value-parser: "npm:^4.2.0" svgo: "npm:^3.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/994b15a88cbb411f32cfa98957faa5623c76f2d75fede51f5f47238f06b367ebe59c204fecbdaf21ccb9e727239a4b290087e04c502392658a0c881ddfbd61f2 + checksum: 10c0/0e724069b5de83aa2b8f8a4746cb60cb663e0a8bbab0e4ba995649cb0562205af57d1f54b89fb90d8ae04a4b7ac3ac6e3751afffc3cff697cb19f7a36b71b195 languageName: node linkType: hard -"postcss-unique-selectors@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-unique-selectors@npm:6.0.4" +"postcss-unique-selectors@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-unique-selectors@npm:7.0.0" dependencies: postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/bfb99d8a7c675c93f2e65c9d9d563477bfd46fdce9e2727d42d57982b31ccbaaf944e8034bfbefe48b3119e77fba7eb1b181c19b91cb3a5448058fa66a7c9ae9 + checksum: 10c0/33b532ad0e9271c5a379859e18adfdc72986bb538672cc0fbc06295d824f82dba3f7b57264e18a3214901bc5244ff5408d28b530374d24a088507287c7f520ce languageName: node linkType: hard @@ -16365,15 +16386,15 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^6.1.1": - version: 6.1.1 - resolution: "stylehacks@npm:6.1.1" +"stylehacks@npm:^7.0.0": + version: 7.0.0 + resolution: "stylehacks@npm:7.0.0" dependencies: browserslist: "npm:^4.23.0" postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/2dd2bccfd8311ff71492e63a7b8b86c3d7b1fff55d4ba5a2357aff97743e633d351cdc2f5ae3c0057637d00dab4ef5fc5b218a1b370e4585a41df22b5a5128be + checksum: 10c0/c1c0231974ab7922af3a535a9cb78bfe84997767da7defe111cc76d7f10c9e139fe8cb0f9d5bea87b0c0cc0166c82a6ec98a3d6242d7e29ef90adceecfd330ae languageName: node linkType: hard @@ -16770,12 +16791,12 @@ __metadata: languageName: node linkType: hard -"thread-stream@npm:^2.0.0": - version: 2.4.1 - resolution: "thread-stream@npm:2.4.1" +"thread-stream@npm:^2.0.0, thread-stream@npm:^2.6.0": + version: 2.6.0 + resolution: "thread-stream@npm:2.6.0" dependencies: real-require: "npm:^0.2.0" - checksum: 10c0/ce29265810b9550ce896726301ff006ebfe96b90292728f07cfa4c379740585583046e2a8018afc53aca66b18fed12b33a84f3883e7ebc317185f6682898b8f8 + checksum: 10c0/276e2545b33273232eb2c22c53fc11844951c1322f8a78c522477af716ebcfe0d106ccf1fbc455f6e48d928e93231fed6377ce91fdcb3885086e8ffa1f011c88 languageName: node linkType: hard