diff --git a/.browserslistrc b/.browserslistrc index 54dd3aaf3..0376af4bc 100644 --- a/.browserslistrc +++ b/.browserslistrc @@ -1,7 +1,9 @@ [production] defaults -not IE 11 +> 0.2% +ios >= 15.6 not dead +not OperaMini all [development] supports es6-module diff --git a/.github/renovate.json5 b/.github/renovate.json5 index dab99829a..e92608a43 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -125,6 +125,22 @@ ], groupName: null, // We dont want them to belong to any group }, + { + // Group all RuboCop packages with `rubocop` in the same PR + matchManagers: ['bundler'], + matchPackageNames: ['rubocop'], + matchPackagePrefixes: ['rubocop-'], + matchUpdateTypes: ['patch', 'minor'], + groupName: 'RuboCop (non-major)', + }, + { + // Group all RSpec packages with `rspec` in the same PR + matchManagers: ['bundler'], + matchPackageNames: ['rspec'], + matchPackagePrefixes: ['rspec-'], + matchUpdateTypes: ['patch', 'minor'], + groupName: 'RSpec (non-major)', + }, // Add labels depending on package manager { matchManagers: ['npm', 'nvm'], addLabels: ['javascript'] }, { matchManagers: ['bundler', 'ruby-version'], addLabels: ['ruby'] }, diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 7fd259ae0..624c3b7a2 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -114,6 +114,7 @@ jobs: - '3.0' - '3.1' - '.ruby-version' + - '3.3' steps: - uses: actions/checkout@v4 @@ -189,6 +190,7 @@ jobs: - '3.0' - '3.1' - '.ruby-version' + - '3.3' steps: - uses: actions/checkout@v4 @@ -288,6 +290,7 @@ jobs: - '3.0' - '3.1' - '.ruby-version' + - '3.3' search-image: - docker.elastic.co/elasticsearch/elasticsearch:7.17.13 include: diff --git a/.haml-lint.yml b/.haml-lint.yml index 8cfcaec8d..2b553ca56 100644 --- a/.haml-lint.yml +++ b/.haml-lint.yml @@ -1,5 +1,3 @@ -inherits_from: .haml-lint_todo.yml - exclude: - 'vendor/**/*' - lib/templates/haml/scaffold/_form.html.haml @@ -14,3 +12,5 @@ linters: enabled: true LineLength: max: 320 + ViewLength: + max: 200 # Override default value of 100 inherited from rubocop diff --git a/Gemfile b/Gemfile index 3a1ff81d4..35b9ee91d 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ gem 'htmlentities', '~> 4.3' gem 'http', '~> 5.1' gem 'http_accept_language', '~> 2.1' gem 'httplog', '~> 1.6.2' +gem 'i18n', '1.14.1' # TODO: Remove version when resolved: https://github.com/glebm/i18n-tasks/issues/552 / https://github.com/ruby-i18n/i18n/pull/688 gem 'idn-ruby', require: 'idn' gem 'inline_svg' gem 'kaminari', '~> 1.2' @@ -89,7 +90,7 @@ gem 'sidekiq-bulk', '~> 0.2.0' gem 'simple-navigation', '~> 4.4' gem 'simple_form', '~> 5.2' gem 'stoplight', '~> 3.0.1' -gem 'strong_migrations', '1.7.0' +gem 'strong_migrations', '1.8.0' gem 'tty-prompt', '~> 0.23', require: false gem 'twitter-text', '~> 3.1.0' gem 'tzinfo-data', '~> 1.2023' diff --git a/Gemfile.lock b/Gemfile.lock index 9c5bb940b..b341ca84b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -139,7 +139,7 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.6) + bigdecimal (3.1.7) bindata (2.4.15) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) @@ -213,7 +213,7 @@ GEM devise_pam_authenticatable2 (9.2.0) devise (>= 4.0.0) rpam2 (~> 4.0) - diff-lcs (1.5.0) + diff-lcs (1.5.1) discard (1.3.0) activerecord (>= 4.2, < 8) docile (1.4.0) @@ -225,8 +225,7 @@ GEM dotenv-rails (2.8.1) dotenv (= 2.8.1) railties (>= 3.2) - drb (2.2.0) - ruby2_keywords + drb (2.2.1) ed25519 (1.3.0) elasticsearch (7.13.3) elasticsearch-api (= 7.13.3) @@ -438,7 +437,7 @@ GEM mime-types-data (3.2023.1205) mini_mime (1.1.5) mini_portile2 (2.8.5) - minitest (5.21.2) + minitest (5.22.3) msgpack (1.7.2) multi_json (1.15.0) multipart-post (2.3.0) @@ -500,7 +499,7 @@ GEM openssl-signature_algorithm (1.3.0) openssl (> 2.0) orm_adapter (0.5.0) - ox (2.14.17) + ox (2.14.18) parallel (1.24.0) parser (3.3.0.5) ast (~> 2.4.1) @@ -535,7 +534,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.7.3) - rack (2.2.8.1) + rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (2.0.2) @@ -583,7 +582,7 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.8) + rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) railties (7.1.3.2) @@ -601,7 +600,7 @@ GEM link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.7.0) rdf (~> 3.3) - rdoc (6.6.2) + rdoc (6.6.3.1) psych (>= 4.0.0) redcarpet (3.6.0) redis (4.8.1) @@ -635,21 +634,21 @@ GEM rspec-mocks (3.13.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.1) + rspec-rails (6.1.2) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) - rspec-core (~> 3.12) - rspec-expectations (~> 3.12) - rspec-mocks (~> 3.12) - rspec-support (~> 3.12) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) rspec-sidekiq (4.1.0) rspec-core (~> 3.0) rspec-expectations (~> 3.0) rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.13.1) - rubocop (1.60.2) + rubocop (1.62.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -657,24 +656,24 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.30.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) + rubocop-ast (1.31.2) + parser (>= 3.3.0.4) rubocop-capybara (2.20.0) rubocop (~> 1.41) - rubocop-factory_bot (2.25.0) - rubocop (~> 1.33) + rubocop-factory_bot (2.25.1) + rubocop (~> 1.41) rubocop-performance (1.20.2) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.30.0, < 2.0) - rubocop-rails (2.23.1) + rubocop-rails (2.24.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) - rubocop-ast (>= 1.30.0, < 2.0) - rubocop-rspec (2.26.1) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rspec (2.27.1) rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) @@ -735,7 +734,7 @@ GEM stoplight (3.0.2) redlock (~> 1.0) stringio (3.1.0) - strong_migrations (1.7.0) + strong_migrations (1.8.0) activerecord (>= 5.2) swd (1.3.0) activesupport (>= 3) @@ -866,6 +865,7 @@ DEPENDENCIES http (~> 5.1) http_accept_language (~> 2.1) httplog (~> 1.6.2) + i18n (= 1.14.1) i18n-tasks (~> 1.0) idn-ruby inline_svg @@ -940,7 +940,7 @@ DEPENDENCIES simplecov-lcov (~> 0.8) stackprof stoplight (~> 3.0.1) - strong_migrations (= 1.7.0) + strong_migrations (= 1.8.0) test-prof thor (~> 1.2) tty-prompt (~> 0.23) diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 9beb8fde6..d3be7817f 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -128,7 +128,7 @@ module Admin def unblock_email authorize @account, :unblock_email? - CanonicalEmailBlock.where(reference_account: @account).delete_all + CanonicalEmailBlock.matching_account(@account).delete_all log_action :unblock_email, @account diff --git a/app/controllers/api/v1/featured_tags/suggestions_controller.rb b/app/controllers/api/v1/featured_tags/suggestions_controller.rb index 76633210a..4f732ed2d 100644 --- a/app/controllers/api/v1/featured_tags/suggestions_controller.rb +++ b/app/controllers/api/v1/featured_tags/suggestions_controller.rb @@ -12,6 +12,10 @@ class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController private def set_recently_used_tags - @recently_used_tags = Tag.recently_used(current_account).where.not(id: current_account.featured_tags).limit(10) + @recently_used_tags = Tag.recently_used(current_account).where.not(id: featured_tag_ids).limit(10) + end + + def featured_tag_ids + current_account.featured_tags.pluck(:tag_id) end end diff --git a/app/controllers/severed_relationships_controller.rb b/app/controllers/severed_relationships_controller.rb new file mode 100644 index 000000000..168e85e3f --- /dev/null +++ b/app/controllers/severed_relationships_controller.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +class SeveredRelationshipsController < ApplicationController + layout 'admin' + + before_action :authenticate_user! + before_action :set_body_classes + before_action :set_cache_headers + + before_action :set_event, only: [:following, :followers] + + def index + @events = AccountRelationshipSeveranceEvent.where(account: current_account) + end + + def following + respond_to do |format| + format.csv { send_data following_data, filename: "following-#{@event.target_name}-#{@event.created_at.to_date.iso8601}.csv" } + end + end + + def followers + respond_to do |format| + format.csv { send_data followers_data, filename: "followers-#{@event.target_name}-#{@event.created_at.to_date.iso8601}.csv" } + end + end + + private + + def set_event + @event = AccountRelationshipSeveranceEvent.find(params[:id]) + end + + def following_data + CSV.generate(headers: ['Account address', 'Show boosts', 'Notify on new posts', 'Languages'], write_headers: true) do |csv| + @event.severed_relationships.active.about_local_account(current_account).includes(:remote_account).reorder(id: :desc).each do |follow| + csv << [acct(follow.target_account), follow.show_reblogs, follow.notify, follow.languages&.join(', ')] + end + end + end + + def followers_data + CSV.generate(headers: ['Account address'], write_headers: true) do |csv| + @event.severed_relationships.passive.about_local_account(current_account).includes(:remote_account).reorder(id: :desc).each do |follow| + csv << [acct(follow.account)] + end + end + end + + def acct(account) + account.local? ? account.local_username_and_domain : account.acct + end + + def set_body_classes + @body_classes = 'admin' + end + + def set_cache_headers + response.cache_control.replace(private: true, no_store: true) + end +end diff --git a/app/helpers/branding_helper.rb b/app/helpers/branding_helper.rb index 2b9c233c2..f72d6df5d 100644 --- a/app/helpers/branding_helper.rb +++ b/app/helpers/branding_helper.rb @@ -21,15 +21,4 @@ module BrandingHelper def render_logo image_pack_tag('logo.svg', alt: 'Mastodon', class: 'logo logo--icon') end - - def render_symbol(version = :icon) - path = case version - when :icon - 'logo-symbol-icon.svg' - when :wordmark - 'logo-symbol-wordmark.svg' - end - - render(file: Rails.root.join('app', 'javascript', 'images', path)).html_safe # rubocop:disable Rails/OutputSafety - end end diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 12bd43f80..7477e45e5 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -75,6 +75,7 @@ export const INIT_MEDIA_EDIT_MODAL = 'INIT_MEDIA_EDIT_MODAL'; export const COMPOSE_CHANGE_MEDIA_DESCRIPTION = 'COMPOSE_CHANGE_MEDIA_DESCRIPTION'; export const COMPOSE_CHANGE_MEDIA_FOCUS = 'COMPOSE_CHANGE_MEDIA_FOCUS'; +export const COMPOSE_CHANGE_MEDIA_ORDER = 'COMPOSE_CHANGE_MEDIA_ORDER'; export const COMPOSE_SET_STATUS = 'COMPOSE_SET_STATUS'; export const COMPOSE_FOCUS = 'COMPOSE_FOCUS'; @@ -809,3 +810,9 @@ export function changePollSettings(expiresIn, isMultiple) { isMultiple, }; } + +export const changeMediaOrder = (a, b) => ({ + type: COMPOSE_CHANGE_MEDIA_ORDER, + a, + b, +}); diff --git a/app/javascript/mastodon/components/badge.jsx b/app/javascript/mastodon/components/badge.jsx index 646655c24..5e0b2587b 100644 --- a/app/javascript/mastodon/components/badge.jsx +++ b/app/javascript/mastodon/components/badge.jsx @@ -7,8 +7,8 @@ import PersonIcon from '@/material-icons/400-24px/person.svg?react'; import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react'; -export const Badge = ({ icon, label, domain }) => ( -
+export const Badge = ({ icon, label, domain, roleId }) => ( +
{icon} {label} {domain && {domain}} @@ -19,6 +19,7 @@ Badge.propTypes = { icon: PropTypes.node, label: PropTypes.node, domain: PropTypes.node, + roleId: PropTypes.string }; Badge.defaultProps = { diff --git a/app/javascript/mastodon/components/column_header.jsx b/app/javascript/mastodon/components/column_header.jsx index 7fd646690..a7d07ffdb 100644 --- a/app/javascript/mastodon/components/column_header.jsx +++ b/app/javascript/mastodon/components/column_header.jsx @@ -13,7 +13,7 @@ import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react' import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; import { Icon } from 'mastodon/components/icon'; -import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context'; +import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; import { useAppHistory } from './router'; @@ -26,10 +26,9 @@ const messages = defineMessages({ back: { id: 'column_back_button.label', defaultMessage: 'Back' }, }); -const BackButton = ({ pinned, show, onlyIcon }) => { +const BackButton = ({ onlyIcon }) => { const history = useAppHistory(); const intl = useIntl(); - const { multiColumn } = useColumnsContext(); const handleBackClick = useCallback(() => { if (history.location?.state?.fromMastodon) { @@ -39,10 +38,6 @@ const BackButton = ({ pinned, show, onlyIcon }) => { } }, [history]); - const showButton = history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || show); - - if (!showButton) return null; - return ( ; } - backButton = ; + if (history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || showBackButton)) { + backButton = ; + } const collapsedContent = [ extraContent, @@ -199,16 +194,16 @@ class ColumnHeader extends PureComponent {

{hasTitle && ( <> - {showBackButton && backButton} + {backButton} )} - {!hasTitle && showBackButton && backButton} + {!hasTitle && backButton}
{extraButton} diff --git a/app/javascript/mastodon/containers/account_container.jsx b/app/javascript/mastodon/containers/account_container.jsx index a134452e7..f171fcc2f 100644 --- a/app/javascript/mastodon/containers/account_container.jsx +++ b/app/javascript/mastodon/containers/account_container.jsx @@ -13,7 +13,6 @@ import { import { openModal } from '../actions/modal'; import { initMuteModal } from '../actions/mutes'; import Account from '../components/account'; -import { unfollowModal } from '../initial_state'; import { makeGetAccount } from '../selectors'; const messages = defineMessages({ @@ -34,18 +33,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onFollow (account) { if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { - if (unfollowModal) { - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - message: @{account.get('acct')} }} />, - confirm: intl.formatMessage(messages.unfollowConfirm), - onConfirm: () => dispatch(unfollowAccount(account.get('id'))), - }, - })); - } else { - dispatch(unfollowAccount(account.get('id'))); - } + dispatch(openModal({ + modalType: 'CONFIRM', + modalProps: { + message: @{account.get('acct')} }} />, + confirm: intl.formatMessage(messages.unfollowConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + }, + })); } else { dispatch(followAccount(account.get('id'))); } diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index ecb1108de..e9d6071a2 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -408,7 +408,7 @@ class Header extends ImmutablePureComponent { } account.get('roles', []).forEach((role) => { - badges.push({role.get('name')}} domain={domain} />); + badges.push({role.get('name')}} domain={domain} roleId={role.get('id')} />); }); return ( diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx index 071dbdbfb..73fd62841 100644 --- a/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx +++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.jsx @@ -21,7 +21,6 @@ import { initDomainBlockModal, unblockDomain } from '../../../actions/domain_blo import { openModal } from '../../../actions/modal'; import { initMuteModal } from '../../../actions/mutes'; import { initReport } from '../../../actions/reports'; -import { unfollowModal } from '../../../initial_state'; import { makeGetAccount, getAccountHidden } from '../../../selectors'; import Header from '../components/header'; @@ -47,31 +46,23 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onFollow (account) { if (account.getIn(['relationship', 'following'])) { - if (unfollowModal) { - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - message: @{account.get('acct')} }} />, - confirm: intl.formatMessage(messages.unfollowConfirm), - onConfirm: () => dispatch(unfollowAccount(account.get('id'))), - }, - })); - } else { - dispatch(unfollowAccount(account.get('id'))); - } + dispatch(openModal({ + modalType: 'CONFIRM', + modalProps: { + message: @{account.get('acct')} }} />, + confirm: intl.formatMessage(messages.unfollowConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + }, + })); } else if (account.getIn(['relationship', 'requested'])) { - if (unfollowModal) { - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - message: @{account.get('acct')} }} />, - confirm: intl.formatMessage(messages.cancelFollowRequestConfirm), - onConfirm: () => dispatch(unfollowAccount(account.get('id'))), - }, - })); - } else { - dispatch(unfollowAccount(account.get('id'))); - } + dispatch(openModal({ + modalType: 'CONFIRM', + modalProps: { + message: @{account.get('acct')} }} />, + confirm: intl.formatMessage(messages.cancelFollowRequestConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + }, + })); } else { dispatch(followAccount(account.get('id'))); } diff --git a/app/javascript/mastodon/features/compose/components/compose_form.jsx b/app/javascript/mastodon/features/compose/components/compose_form.jsx index b93bac9d1..9b4d3dfeb 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.jsx +++ b/app/javascript/mastodon/features/compose/components/compose_form.jsx @@ -21,7 +21,6 @@ import PollButtonContainer from '../containers/poll_button_container'; import PrivacyDropdownContainer from '../containers/privacy_dropdown_container'; import SpoilerButtonContainer from '../containers/spoiler_button_container'; import UploadButtonContainer from '../containers/upload_button_container'; -import UploadFormContainer from '../containers/upload_form_container'; import WarningContainer from '../containers/warning_container'; import { countableText } from '../util/counter'; @@ -30,6 +29,7 @@ import { EditIndicator } from './edit_indicator'; import { NavigationBar } from './navigation_bar'; import { PollForm } from "./poll_form"; import { ReplyIndicator } from './reply_indicator'; +import { UploadForm } from './upload_form'; const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\u0009\u000a\u000b\u000c\u000d'; @@ -283,7 +283,7 @@ class ComposeForm extends ImmutablePureComponent { />
- +
diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx index acc3fd0ce..43795d030 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx @@ -330,6 +330,7 @@ class EmojiPickerDropdown extends PureComponent { state = { active: false, loading: false, + placement: 'bottom', }; setRef = (c) => { @@ -381,10 +382,14 @@ class EmojiPickerDropdown extends PureComponent { return this.target; }; + handleOverlayEnter = (state) => { + this.setState({ placement: state.placement }); + }; + render () { const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props; const title = intl.formatMessage(messages.emoji); - const { active, loading } = this.state; + const { active, loading, placement } = this.state; return (
@@ -397,7 +402,7 @@ class EmojiPickerDropdown extends PureComponent { inverted /> - + {({ props, placement })=> (
diff --git a/app/javascript/mastodon/features/compose/components/upload.jsx b/app/javascript/mastodon/features/compose/components/upload.jsx index e8045ae81..7f6ef6cfd 100644 --- a/app/javascript/mastodon/features/compose/components/upload.jsx +++ b/app/javascript/mastodon/features/compose/components/upload.jsx @@ -1,77 +1,81 @@ import PropTypes from 'prop-types'; +import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; +import { useDispatch, useSelector } from 'react-redux'; import spring from 'react-motion/lib/spring'; import CloseIcon from '@/material-icons/400-20px/close.svg?react'; import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import WarningIcon from '@/material-icons/400-24px/warning.svg?react'; +import { undoUploadCompose, initMediaEditModal } from 'mastodon/actions/compose'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; +import Motion from 'mastodon/features/ui/util/optional_motion'; -import Motion from '../../ui/util/optional_motion'; +export const Upload = ({ id, onDragStart, onDragEnter, onDragEnd }) => { + const dispatch = useDispatch(); + const media = useSelector(state => state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id)); + const sensitive = useSelector(state => state.getIn(['compose', 'spoiler'])); -export default class Upload extends ImmutablePureComponent { + const handleUndoClick = useCallback(() => { + dispatch(undoUploadCompose(id)); + }, [dispatch, id]); - static propTypes = { - media: ImmutablePropTypes.map.isRequired, - sensitive: PropTypes.bool, - onUndo: PropTypes.func.isRequired, - onOpenFocalPoint: PropTypes.func.isRequired, - }; + const handleFocalPointClick = useCallback(() => { + dispatch(initMediaEditModal(id)); + }, [dispatch, id]); - handleUndoClick = e => { - e.stopPropagation(); - this.props.onUndo(this.props.media.get('id')); - }; + const handleDragStart = useCallback(() => { + onDragStart(id); + }, [onDragStart, id]); - handleFocalPointClick = e => { - e.stopPropagation(); - this.props.onOpenFocalPoint(this.props.media.get('id')); - }; + const handleDragEnter = useCallback(() => { + onDragEnter(id); + }, [onDragEnter, id]); - render () { - const { media, sensitive } = this.props; - - if (!media) { - return null; - } - - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - const missingDescription = (media.get('description') || '').length === 0; - - return ( -
- - {({ scale }) => ( -
- {sensitive && } - -
- - -
- -
- -
-
- )} -
-
- ); + if (!media) { + return null; } -} + const focusX = media.getIn(['meta', 'focus', 'x']); + const focusY = media.getIn(['meta', 'focus', 'y']); + const x = ((focusX / 2) + .5) * 100; + const y = ((focusY / -2) + .5) * 100; + const missingDescription = (media.get('description') || '').length === 0; + + return ( +
+ + {({ scale }) => ( +
+ {sensitive && } + +
+ + +
+ +
+ +
+
+ )} +
+
+ ); +}; + +Upload.propTypes = { + id: PropTypes.string, + onDragEnter: PropTypes.func, + onDragStart: PropTypes.func, + onDragEnd: PropTypes.func, +}; diff --git a/app/javascript/mastodon/features/compose/components/upload_form.jsx b/app/javascript/mastodon/features/compose/components/upload_form.jsx index 46bac7823..adf559138 100644 --- a/app/javascript/mastodon/features/compose/components/upload_form.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_form.jsx @@ -1,31 +1,53 @@ -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; +import { useRef, useCallback } from 'react'; -import UploadContainer from '../containers/upload_container'; -import UploadProgressContainer from '../containers/upload_progress_container'; +import { useSelector, useDispatch } from 'react-redux'; -export default class UploadForm extends ImmutablePureComponent { +import { changeMediaOrder } from 'mastodon/actions/compose'; - static propTypes = { - mediaIds: ImmutablePropTypes.list.isRequired, - }; +import { Upload } from './upload'; +import { UploadProgress } from './upload_progress'; - render () { - const { mediaIds } = this.props; +export const UploadForm = () => { + const dispatch = useDispatch(); + const mediaIds = useSelector(state => state.getIn(['compose', 'media_attachments']).map(item => item.get('id'))); + const active = useSelector(state => state.getIn(['compose', 'is_uploading'])); + const progress = useSelector(state => state.getIn(['compose', 'progress'])); + const isProcessing = useSelector(state => state.getIn(['compose', 'is_processing'])); - return ( - <> - + const dragItem = useRef(); + const dragOverItem = useRef(); - {mediaIds.size > 0 && ( -
- {mediaIds.map(id => ( - - ))} -
- )} - - ); - } + const handleDragStart = useCallback(id => { + dragItem.current = id; + }, [dragItem]); -} + const handleDragEnter = useCallback(id => { + dragOverItem.current = id; + }, [dragOverItem]); + + const handleDragEnd = useCallback(() => { + dispatch(changeMediaOrder(dragItem.current, dragOverItem.current)); + dragItem.current = null; + dragOverItem.current = null; + }, [dispatch, dragItem, dragOverItem]); + + return ( + <> + + + {mediaIds.size > 0 && ( +
+ {mediaIds.map(id => ( + + ))} +
+ )} + + ); +}; diff --git a/app/javascript/mastodon/features/compose/components/upload_progress.jsx b/app/javascript/mastodon/features/compose/components/upload_progress.jsx index 1276cded1..fd0c8f453 100644 --- a/app/javascript/mastodon/features/compose/components/upload_progress.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_progress.jsx @@ -1,5 +1,4 @@ import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; @@ -10,46 +9,40 @@ import { Icon } from 'mastodon/components/icon'; import Motion from '../../ui/util/optional_motion'; -export default class UploadProgress extends PureComponent { - - static propTypes = { - active: PropTypes.bool, - progress: PropTypes.number, - isProcessing: PropTypes.bool, - }; - - render () { - const { active, progress, isProcessing } = this.props; - - if (!active) { - return null; - } - - let message; - - if (isProcessing) { - message = ; - } else { - message = ; - } - - return ( -
- - -
- {message} - -
- - {({ width }) => -
- } - -
-
-
- ); +export const UploadProgress = ({ active, progress, isProcessing }) => { + if (!active) { + return null; } -} + let message; + + if (isProcessing) { + message = ; + } else { + message = ; + } + + return ( +
+ + +
+ {message} + +
+ + {({ width }) => +
+ } + +
+
+
+ ); +}; + +UploadProgress.propTypes = { + active: PropTypes.bool, + progress: PropTypes.number, + isProcessing: PropTypes.bool, +}; diff --git a/app/javascript/mastodon/features/compose/containers/upload_container.js b/app/javascript/mastodon/features/compose/containers/upload_container.js deleted file mode 100644 index a17a69144..000000000 --- a/app/javascript/mastodon/features/compose/containers/upload_container.js +++ /dev/null @@ -1,27 +0,0 @@ -import { connect } from 'react-redux'; - -import { undoUploadCompose, initMediaEditModal, submitCompose } from '../../../actions/compose'; -import Upload from '../components/upload'; - -const mapStateToProps = (state, { id }) => ({ - media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), - sensitive: state.getIn(['compose', 'spoiler']), -}); - -const mapDispatchToProps = dispatch => ({ - - onUndo: id => { - dispatch(undoUploadCompose(id)); - }, - - onOpenFocalPoint: id => { - dispatch(initMediaEditModal(id)); - }, - - onSubmit (router) { - dispatch(submitCompose(router)); - }, - -}); - -export default connect(mapStateToProps, mapDispatchToProps)(Upload); diff --git a/app/javascript/mastodon/features/compose/containers/upload_form_container.js b/app/javascript/mastodon/features/compose/containers/upload_form_container.js deleted file mode 100644 index 336525cf5..000000000 --- a/app/javascript/mastodon/features/compose/containers/upload_form_container.js +++ /dev/null @@ -1,9 +0,0 @@ -import { connect } from 'react-redux'; - -import UploadForm from '../components/upload_form'; - -const mapStateToProps = state => ({ - mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')), -}); - -export default connect(mapStateToProps)(UploadForm); diff --git a/app/javascript/mastodon/features/compose/containers/upload_progress_container.js b/app/javascript/mastodon/features/compose/containers/upload_progress_container.js deleted file mode 100644 index ffff321c3..000000000 --- a/app/javascript/mastodon/features/compose/containers/upload_progress_container.js +++ /dev/null @@ -1,11 +0,0 @@ -import { connect } from 'react-redux'; - -import UploadProgress from '../components/upload_progress'; - -const mapStateToProps = state => ({ - active: state.getIn(['compose', 'is_uploading']), - progress: state.getIn(['compose', 'progress']), - isProcessing: state.getIn(['compose', 'is_processing']), -}); - -export default connect(mapStateToProps)(UploadProgress); diff --git a/app/javascript/mastodon/features/directory/components/account_card.jsx b/app/javascript/mastodon/features/directory/components/account_card.jsx index ff1f8a653..9c5e68812 100644 --- a/app/javascript/mastodon/features/directory/components/account_card.jsx +++ b/app/javascript/mastodon/features/directory/components/account_card.jsx @@ -20,7 +20,7 @@ import { Avatar } from 'mastodon/components/avatar'; import { Button } from 'mastodon/components/button'; import { DisplayName } from 'mastodon/components/display_name'; import { ShortNumber } from 'mastodon/components/short_number'; -import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state'; +import { autoPlayGif, me } from 'mastodon/initial_state'; import { makeGetAccount } from 'mastodon/selectors'; const messages = defineMessages({ @@ -48,38 +48,30 @@ const makeMapStateToProps = () => { const mapDispatchToProps = (dispatch, { intl }) => ({ onFollow(account) { if (account.getIn(['relationship', 'following'])) { - if (unfollowModal) { - dispatch( - openModal({ - modalType: 'CONFIRM', - modalProps: { - message: ( - @{account.get('acct')} }} - /> - ), - confirm: intl.formatMessage(messages.unfollowConfirm), - onConfirm: () => dispatch(unfollowAccount(account.get('id'))), - } }), - ); - } else { - dispatch(unfollowAccount(account.get('id'))); - } - } else if (account.getIn(['relationship', 'requested'])) { - if (unfollowModal) { - dispatch(openModal({ + dispatch( + openModal({ modalType: 'CONFIRM', modalProps: { - message: @{account.get('acct')} }} />, - confirm: intl.formatMessage(messages.cancelFollowRequestConfirm), + message: ( + @{account.get('acct')} }} + /> + ), + confirm: intl.formatMessage(messages.unfollowConfirm), onConfirm: () => dispatch(unfollowAccount(account.get('id'))), - }, - })); - } else { - dispatch(unfollowAccount(account.get('id'))); - } + } }), + ); + } else if (account.getIn(['relationship', 'requested'])) { + dispatch(openModal({ + modalType: 'CONFIRM', + modalProps: { + message: @{account.get('acct')} }} />, + confirm: intl.formatMessage(messages.cancelFollowRequestConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + }, + })); } else { dispatch(followAccount(account.get('id'))); } diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx index 7d651f2ca..a8f40a31d 100644 --- a/app/javascript/mastodon/features/follow_requests/index.jsx +++ b/app/javascript/mastodon/features/follow_requests/index.jsx @@ -68,7 +68,7 @@ class FollowRequests extends ImmutablePureComponent { ); return ( - + ; const unreadMarkersShowStr = ; const alertStr = ; const showStr = ; @@ -68,16 +69,18 @@ export default class ColumnSettings extends PureComponent { )} - {alertsEnabled && browserSupport && browserPermission === 'default' && ( - - - - )} -
+ {alertsEnabled && browserSupport && browserPermission === 'default' && ( +
+ + + +
+ )} +

@@ -114,6 +117,16 @@ export default class ColumnSettings extends PureComponent {
+
+

+ +

+ +
+ +
+
+

diff --git a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx index bf9467bd6..adf58afbf 100644 --- a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx +++ b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx @@ -6,8 +6,7 @@ import { Link } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; - -import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react'; import { fetchNotificationPolicy } from 'mastodon/actions/notifications'; import { Icon } from 'mastodon/components/icon'; import { toCappedNumber } from 'mastodon/utils/numbers'; @@ -34,7 +33,7 @@ export const FilteredNotificationsBanner = () => { return ( - +
diff --git a/app/javascript/mastodon/features/notifications/components/notification.jsx b/app/javascript/mastodon/features/notifications/components/notification.jsx index d7101f838..5527f3d48 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification.jsx @@ -12,6 +12,7 @@ import { HotKeys } from 'react-hotkeys'; import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react'; +import HeartBrokenIcon from '@/material-icons/400-24px/heart_broken-fill.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react'; @@ -26,6 +27,7 @@ import { WithRouterPropTypes } from 'mastodon/utils/react_router'; import FollowRequestContainer from '../containers/follow_request_container'; +import RelationshipsSeveranceEvent from './relationships_severance_event'; import Report from './report'; const messages = defineMessages({ @@ -358,6 +360,30 @@ class Notification extends ImmutablePureComponent { ); } + renderRelationshipsSevered (notification) { + const { intl, unread } = this.props; + + if (!notification.get('event')) { + return null; + } + + return ( + +
+
+ + + + + +
+ + +
+
+ ); + } + renderAdminSignUp (notification, account, link) { const { intl, unread } = this.props; @@ -429,6 +455,8 @@ class Notification extends ImmutablePureComponent { return this.renderUpdate(notification, link); case 'poll': return this.renderPoll(notification, account); + case 'severed_relationships': + return this.renderRelationshipsSevered(notification); case 'admin.sign_up': return this.renderAdminSignUp(notification, account, link); case 'admin.report': diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx index 1cdf5b5df..276bcbeba 100644 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx @@ -5,8 +5,8 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; +import SettingsIcon from '@/material-icons/400-20px/settings.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; import { requestBrowserPermission } from 'mastodon/actions/notifications'; import { changeSetting } from 'mastodon/actions/settings'; import { Button } from 'mastodon/components/button'; @@ -42,7 +42,7 @@ class NotificationsPermissionBanner extends PureComponent {

-

}} />

+

}} />

); diff --git a/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx b/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx new file mode 100644 index 000000000..23d0d2eec --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/relationships_severance_event.jsx @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types'; + +import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; + +import ImmutablePropTypes from 'react-immutable-proptypes'; + +import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; + +// This needs to be kept in sync with app/models/relationship_severance_event.rb +const messages = defineMessages({ + account_suspension: { id: 'relationship_severance_notification.types.account_suspension', defaultMessage: 'Account has been suspended' }, + domain_block: { id: 'relationship_severance_notification.types.domain_block', defaultMessage: 'Domain has been suspended' }, + user_domain_block: { id: 'relationship_severance_notification.types.user_domain_block', defaultMessage: 'You blocked this domain' }, +}); + +const RelationshipsSeveranceEvent = ({ event, hidden }) => { + const intl = useIntl(); + + if (hidden || !event) { + return null; + } + + return ( +
+
+
+ + {' · '} + { event.get('purged') ? ( + + ) : ( + + )} +
+ {intl.formatMessage(messages[event.get('type')])} +
+ +
+ + + +
+
+
+ ); + +}; + +RelationshipsSeveranceEvent.propTypes = { + event: ImmutablePropTypes.map.isRequired, + hidden: PropTypes.bool, +}; + +export default RelationshipsSeveranceEvent; diff --git a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js index e448cd26a..4e0184cef 100644 --- a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js +++ b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js @@ -5,7 +5,7 @@ import FilterBar from '../components/filter_bar'; const makeMapStateToProps = state => ({ selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']), - advancedMode: false, + advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']), }); const mapDispatchToProps = (dispatch) => ({ diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx index d1f449844..09bef3bea 100644 --- a/app/javascript/mastodon/features/notifications/request.jsx +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -7,8 +7,8 @@ import { Helmet } from 'react-helmet'; import { useSelector, useDispatch } from 'react-redux'; -import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react'; import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; import Column from 'mastodon/components/column'; @@ -94,7 +94,7 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => { { + ) : ( )} diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 596c9ca49..d8c57a2a0 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -38,7 +38,6 @@ * @property {string} title * @property {boolean} show_trends * @property {boolean} trends_as_landing_page - * @property {boolean} unfollow_modal * @property {boolean} use_blurhash * @property {boolean=} use_pending_items * @property {string} version @@ -99,7 +98,6 @@ export const source_url = getMeta('source_url'); export const timelinePreview = getMeta('timeline_preview'); export const title = getMeta('title'); export const trendsAsLanding = getMeta('trends_as_landing_page'); -export const unfollowModal = getMeta('unfollow_modal'); export const useBlurhash = getMeta('use_blurhash'); export const usePendingItems = getMeta('use_pending_items'); export const version = getMeta('version'); diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index d692925d1..4670a6e2d 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -434,7 +434,7 @@ "mute_modal.they_can_mention_and_follow": "Могат да ви споменават и последват, но няма да ги виждате.", "mute_modal.they_wont_know": "Няма да узнаят, че са били заглушени.", "mute_modal.title": "Заглушавате ли потребител?", - "mute_modal.you_wont_see_mentions": "Няма да виждате споменаващи ги публикации.", + "mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.", "mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.", "navigation_bar.about": "Относно", "navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс", @@ -471,6 +471,7 @@ "notification.own_poll": "Анкетата ви приключи", "notification.poll": "Анкета, в която гласувахте, приключи", "notification.reblog": "{name} подсили ваша публикация", + "notification.severed_relationships": "Връзката с {name} е прекъсната", "notification.status": "{name} току-що публикува", "notification.update": "{name} промени публикация", "notification_requests.accept": "Приемам", @@ -587,6 +588,12 @@ "refresh": "Опресняване", "regeneration_indicator.label": "Зареждане…", "regeneration_indicator.sublabel": "Подготовка на началния ви инфоканал!", + "relationship_severance_notification.purged_data": "прочистено от администраторите", + "relationship_severance_notification.relationships": "{count, plural, one {# връзка} other {# връзки}}", + "relationship_severance_notification.types.account_suspension": "Акаунтът е спрян", + "relationship_severance_notification.types.domain_block": "Домейнът е спрян", + "relationship_severance_notification.types.user_domain_block": "Блокирахте този домейн", + "relationship_severance_notification.view": "Преглед", "relative_time.days": "{number} д.", "relative_time.full.days": "преди {number, plural, one {# ден} other {# дни}}", "relative_time.full.hours": "преди {number, plural, one {# час} other {# часа}}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index e0d62c78b..c95e8a950 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -471,6 +471,7 @@ "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en què has votat", "notification.reblog": "{name} t'ha impulsat", + "notification.severed_relationships": "S'han eliminat les relacions amb {name}", "notification.status": "{name} acaba de publicar", "notification.update": "{name} ha editat un tut", "notification_requests.accept": "Accepta", @@ -587,6 +588,12 @@ "refresh": "Actualitza", "regeneration_indicator.label": "Es carrega…", "regeneration_indicator.sublabel": "Es prepara la teva línia de temps d'Inici!", + "relationship_severance_notification.purged_data": "purgat pels administradors", + "relationship_severance_notification.relationships": "{count, plural, one {# relació} other {# relacions}}", + "relationship_severance_notification.types.account_suspension": "S'ha suspès el compte", + "relationship_severance_notification.types.domain_block": "S'ha suspès el domini", + "relationship_severance_notification.types.user_domain_block": "Heu blocat aquest domini", + "relationship_severance_notification.view": "Visualitza", "relative_time.days": "{number}d", "relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}", "relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index bff044e7d..ca32ba298 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -585,6 +585,12 @@ "refresh": "Genindlæs", "regeneration_indicator.label": "Indlæser…", "regeneration_indicator.sublabel": "Din hjemmetidslinje klargøres!", + "relationship_severance_notification.purged_data": "renset af administratorer", + "relationship_severance_notification.relationships": "{count, plural, one {# forhold} other {# forhold}}", + "relationship_severance_notification.types.account_suspension": "Konto er blevet suspenderet", + "relationship_severance_notification.types.domain_block": "Domæne er blevet suspenderet", + "relationship_severance_notification.types.user_domain_block": "Dette domæne blev blokeret", + "relationship_severance_notification.view": "Vis", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dag} other {# dage}} siden", "relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index cb03e7ba3..bed336f76 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -471,6 +471,7 @@ "notification.own_poll": "Deine Umfrage ist beendet", "notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet", "notification.reblog": "{name} teilte deinen Beitrag", + "notification.severed_relationships": "Beziehungen zu {name} getrennt", "notification.status": "{name} hat gerade etwas gepostet", "notification.update": "{name} bearbeitete einen Beitrag", "notification_requests.accept": "Akzeptieren", @@ -587,6 +588,12 @@ "refresh": "Aktualisieren", "regeneration_indicator.label": "Wird geladen …", "regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!", + "relationship_severance_notification.purged_data": "von Administrator*innen entfernt", + "relationship_severance_notification.relationships": "{count, plural, one {# Beziehung} other {# Beziehungen}}", + "relationship_severance_notification.types.account_suspension": "Konto wurde gesperrt", + "relationship_severance_notification.types.domain_block": "Domain wurde gesperrt", + "relationship_severance_notification.types.user_domain_block": "Du hast diese Domain blockiert", + "relationship_severance_notification.view": "Anzeigen", "relative_time.days": "{number} T.", "relative_time.full.days": "vor {number, plural, one {# Tag} other {# Tagen}}", "relative_time.full.hours": "vor {number, plural, one {# Stunde} other {# Stunden}}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 376dfb7e4..1134b393a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -471,6 +471,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your post", + "notification.severed_relationships": "Relationships with {name} severed", "notification.status": "{name} just posted", "notification.update": "{name} edited a post", "notification_requests.accept": "Accept", @@ -483,6 +484,8 @@ "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favorites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", @@ -587,6 +590,12 @@ "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relationship_severance_notification.purged_data": "purged by administrators", + "relationship_severance_notification.relationships": "{count, plural, one {# relationship} other {# relationships}}", + "relationship_severance_notification.types.account_suspension": "Account has been suspended", + "relationship_severance_notification.types.domain_block": "Domain has been suspended", + "relationship_severance_notification.types.user_domain_block": "You blocked this domain", + "relationship_severance_notification.view": "View", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 53144cfcb..fec707be6 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -471,6 +471,7 @@ "notification.own_poll": "Tu encuesta finalizó", "notification.poll": "Finalizó una encuesta en la que votaste", "notification.reblog": "{name} adhirió a tu mensaje", + "notification.severed_relationships": "Relaciones con {name} cortadas", "notification.status": "{name} acaba de enviar un mensaje", "notification.update": "{name} editó un mensaje", "notification_requests.accept": "Aceptar", @@ -587,6 +588,12 @@ "refresh": "Refrescar", "regeneration_indicator.label": "Cargando…", "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!", + "relationship_severance_notification.purged_data": "purgada por administradores", + "relationship_severance_notification.relationships": "{count, plural, one {# relación} other {# relaciones}}", + "relationship_severance_notification.types.account_suspension": "La cuenta fue suspendida", + "relationship_severance_notification.types.domain_block": "El dominio fue suspendido", + "relationship_severance_notification.types.user_domain_block": "Bloqueaste este dominio", + "relationship_severance_notification.view": "Ver", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural,one {hace # día} other {hace # días}}", "relative_time.full.hours": "{number, plural,one {hace # hora} other {hace # horas}}", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index aae678a7d..bd0081d71 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -471,6 +471,7 @@ "notification.own_poll": "Zure inkesta amaitu da", "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da", "notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari", + "notification.severed_relationships": "{name} erabiltzailearekin zenuen erlazioa galdu da", "notification.status": "{name} erabiltzaileak bidalketa egin berri du", "notification.update": "{name} erabiltzaileak bidalketa bat editatu du", "notification_requests.accept": "Onartu", @@ -587,6 +588,12 @@ "refresh": "Berritu", "regeneration_indicator.label": "Kargatzen…", "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!", + "relationship_severance_notification.purged_data": "administratzaileek kendua", + "relationship_severance_notification.relationships": "{count, plural, one {Erlazio #} other {# erlazio}}", + "relationship_severance_notification.types.account_suspension": "Kontua bertan behera utzi da", + "relationship_severance_notification.types.domain_block": "Domeinua bertan behera utzi da", + "relationship_severance_notification.types.user_domain_block": "Domeinu hau blokeatu duzu", + "relationship_severance_notification.view": "Ikusi", "relative_time.days": "{number}e", "relative_time.full.days": "Duela {number, plural, one {egun #} other {# egun}}", "relative_time.full.hours": "Duela {number, plural, one {ordu #} other {# ordu}}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index bb5370b6d..2cf85926f 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -471,6 +471,7 @@ "notification.own_poll": "Äänestyksesi on päättynyt", "notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.reblog": "{name} tehosti julkaisuasi", + "notification.severed_relationships": "Suhteet palvelimeen {name} katkenneet", "notification.status": "{name} julkaisi juuri", "notification.update": "{name} muokkasi julkaisua", "notification_requests.accept": "Hyväksy", @@ -587,6 +588,12 @@ "refresh": "Päivitä", "regeneration_indicator.label": "Ladataan…", "regeneration_indicator.sublabel": "Kotisyötettäsi valmistellaan!", + "relationship_severance_notification.purged_data": "ylläpitäjien tyhjentämä", + "relationship_severance_notification.relationships": "{count, plural, one {# suhde} other {# suhdetta}}", + "relationship_severance_notification.types.account_suspension": "Tili on jäädytetty", + "relationship_severance_notification.types.domain_block": "Verkkotunnus on jäädytetty", + "relationship_severance_notification.types.user_domain_block": "Estit tämän verkkotunnuksen", + "relationship_severance_notification.view": "Näytä", "relative_time.days": "{number} pv", "relative_time.full.days": "{number, plural, one {# päivä} other {# päivää}} sitten", "relative_time.full.hours": "{number, plural, one {# tunti} other {# tuntia}} sitten", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index c3e3f8cc1..3ea13cc7f 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -7,7 +7,7 @@ "about.domain_blocks.silenced.explanation": "Yvirhøvur, so sært tú ikki vangar og innihald frá hesum ambætaranum, uttan so at tú skilliga leitar hesi upp ella velur tey við at fylgja teimum.", "about.domain_blocks.silenced.title": "Avmarkað", "about.domain_blocks.suspended.explanation": "Ongar dátur frá hesum ambætara verða viðgjørd, goymd ella deild, tað ger, at samskifti við aðrar ambætarar er iki møguligt.", - "about.domain_blocks.suspended.title": "Koyrdur frá", + "about.domain_blocks.suspended.title": "Gjørt óvirkið", "about.not_available": "Hetta er ikki tøkt á føroyska servaranum enn.", "about.powered_by": "Miðfirra almennur miðil koyrandi á {mastodon}", "about.rules": "Ambætarareglur", @@ -471,6 +471,7 @@ "notification.own_poll": "Tín atkvøðugreiðsla er endað", "notification.poll": "Ein atkvøðugreiðsla, har tú hevur atkvøtt, er endað", "notification.reblog": "{name} lyfti tín post", + "notification.severed_relationships": "Tilknýti við {name} avbrotið", "notification.status": "{name} hevur júst postað", "notification.update": "{name} rættaði ein post", "notification_requests.accept": "Góðtak", @@ -587,6 +588,12 @@ "refresh": "Endurles", "regeneration_indicator.label": "Innlesur…", "regeneration_indicator.sublabel": "Tín heimarás verður gjørd klár!", + "relationship_severance_notification.purged_data": "reinsað av umsitarum", + "relationship_severance_notification.relationships": "{count, plural, one {# tilknýti} other {# tilknýti}}", + "relationship_severance_notification.types.account_suspension": "Kontan er ógildað", + "relationship_severance_notification.types.domain_block": "Økisnavn er ógildað", + "relationship_severance_notification.types.user_domain_block": "Tú hevur forðað hesum økisnavni", + "relationship_severance_notification.view": "Vís", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dagur} other {# dagar}} síðani", "relative_time.full.hours": "{number, plural, one {# tími} other {# tímar}} síðani", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 9549686d7..1e1c78f29 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -89,6 +89,14 @@ "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.show_less": "Afficher moins", + "block_modal.show_more": "Afficher plus", + "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", + "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", + "block_modal.title": "Bloquer l'utilisateur ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois", "bundle_column_error.copy_stacktrace": "Copier le rapport d'erreur", "bundle_column_error.error.body": "La page demandée n'a pas pu être affichée. Cela pourrait être dû à un bogue dans notre code, ou à un problème de compatibilité avec le navigateur.", @@ -169,6 +177,7 @@ "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?", "confirmations.discard_edit_media.confirm": "Rejeter", "confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, voulez-vous quand même les supprimer?", + "confirmations.domain_block.confirm": "Bloquer le serveur", "confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans vos fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.", "confirmations.edit.confirm": "Éditer", "confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", @@ -200,6 +209,27 @@ "dismissable_banner.explore_statuses": "Voici des publications venant de tout le web social gagnant en popularité aujourd’hui. Les nouvelles publications avec plus de boosts et de favoris sont classés plus haut.", "dismissable_banner.explore_tags": "Ces hashtags sont présentement en train de gagner de l'ampleur parmi des personnes sur les serveurs du réseau décentralisé dont celui-ci.", "dismissable_banner.public_timeline": "Ce sont les messages publics les plus récents de personnes sur le web social que les gens de {domain} suivent.", + "domain_block_modal.block": "Bloquer le serveur", + "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", + "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", + "domain_block_modal.title": "Bloquer le domaine ?", + "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", + "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", + "domain_pill.server": "Serveur", + "domain_pill.their_handle": "Son identifiant :", + "domain_pill.their_server": "Son foyer numérique, là où tous ses posts résident.", + "domain_pill.their_username": "Son identifiant unique sur leur serveur. Il est possible de rencontrer des utilisateurs avec le même nom sur différents serveurs.", + "domain_pill.username": "Nom d’utilisateur", + "domain_pill.whats_in_a_handle": "Qu'est-ce qu'un identifiant ?", + "domain_pill.who_they_are": "Comme un identifiant contient le nom et le service hébergeant une personne, vous pouvez interagir sur .", + "domain_pill.who_you_are": "Comme un identifiant indique votre nom et le service vous hébergeant, vous pouvez interagir avec .", + "domain_pill.your_handle": "Votre identifiant :", + "domain_pill.your_server": "Votre foyer numérique, là où vos messages résident. Vous souhaitez changer ? Lancez un transfert vers un autre serveur quand vous le voulez et vos abonné·e·s suivront automatiquement.", + "domain_pill.your_username": "Votre identifiant unique sur ce serveur. Il est possible de trouver des utilisateurs ayant le même nom d'utilisateur sur différents serveurs.", "embed.instructions": "Intégrez cette publication à votre site en copiant le code ci-dessous.", "embed.preview": "Voici comment il apparaîtra:", "emoji_button.activity": "Activité", @@ -236,6 +266,7 @@ "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouvelles publications, elles apparaîtront ici.", "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.", "empty_column.mutes": "Vous n’avez masqué aucun compte pour le moment.", + "empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.", "empty_column.notifications": "Vous n'avez pas encore de notifications. Quand d'autres personnes interagissent avec vous, vous en verrez ici.", "empty_column.public": "Il n’y a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bogue dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", @@ -396,6 +427,15 @@ "loading_indicator.label": "Chargement…", "media_gallery.toggle_visible": "{number, plural, one {Cacher l’image} other {Cacher les images}}", "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous avez déménagé sur {movedToAccount}.", + "mute_modal.hide_from_notifications": "Cacher des notifications", + "mute_modal.hide_options": "Masquer les options", + "mute_modal.indefinite": "Jusqu'à ce que je les réactive", + "mute_modal.show_options": "Afficher les options", + "mute_modal.they_can_mention_and_follow": "Ils peuvent vous mentionner et vous suivre, mais vous ne les verrez pas.", + "mute_modal.they_wont_know": "Ils ne sauront pas qu'ils ont été rendus silencieux.", + "mute_modal.title": "Rendre cet utilisateur silencieux ?", + "mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", "navigation_bar.about": "À propos", "navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée", "navigation_bar.blocks": "Comptes bloqués", @@ -431,8 +471,13 @@ "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé est terminé", "notification.reblog": "{name} a boosté votre message", + "notification.severed_relationships": "Relation avec {name} rompues", "notification.status": "{name} vient de publier", "notification.update": "{name} a modifié une publication", + "notification_requests.accept": "Accepter", + "notification_requests.dismiss": "Rejeter", + "notification_requests.notifications_from": "Notifications de {name}", + "notification_requests.title": "Notifications filtrées", "notifications.clear": "Effacer notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications?", "notifications.column_settings.admin.report": "Nouveaux signalements:", @@ -464,6 +509,15 @@ "notifications.permission_denied": "Les notifications de bureau ne sont pas disponibles en raison d'une demande de permission de navigateur précédemment refusée", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a précedemment été refusée", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.", + "notifications.policy.filter_new_accounts.hint": "Créés au cours des derniers {days, plural, one {un jour} other {# jours}}", + "notifications.policy.filter_new_accounts_title": "Nouveaux comptes", + "notifications.policy.filter_not_followers_hint": "Incluant les personnes qui vous suivent depuis moins de {days, plural, one {un jour} other {# jours}}", + "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", + "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", + "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", + "notifications.policy.filter_private_mentions_hint": "Filtré sauf si c'est en réponse à une mention de vous ou si vous suivez l'expéditeur", + "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", + "notifications.policy.title": "Filtrer les notifications de…", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Ne rien rater", @@ -534,6 +588,12 @@ "refresh": "Actualiser", "regeneration_indicator.label": "Chargement…", "regeneration_indicator.sublabel": "Votre fil d'accueil est en cours de préparation!", + "relationship_severance_notification.purged_data": "supprimées par les administrateurs", + "relationship_severance_notification.relationships": "{count, plural, one {# relation} other {# relations}}", + "relationship_severance_notification.types.account_suspension": "Le compte a été suspendu", + "relationship_severance_notification.types.domain_block": "Le domaine a été suspendu", + "relationship_severance_notification.types.user_domain_block": "Vous avez bloqué ce domaine", + "relationship_severance_notification.view": "Afficher", "relative_time.days": "{number} j", "relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}", "relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}", @@ -640,9 +700,11 @@ "status.direct": "Mention privée @{name}", "status.direct_indicator": "Mention privée", "status.edit": "Modifier", + "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifiée {count, plural, one {{count} fois} other {{count} fois}}", "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", + "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer cette publication", "status.filtered": "Filtrée", "status.hide": "Masquer le message", @@ -663,6 +725,7 @@ "status.reblog": "Booster", "status.reblog_private": "Booster avec visibilité originale", "status.reblogged_by": "{name} a boosté", + "status.reblogs": "{count, plural, one {boost} other {boosts}}", "status.reblogs.empty": "Personne n’a encore boosté cette publication. Lorsque quelqu’un le fera, elle apparaîtra ici.", "status.redraft": "Supprimer et réécrire", "status.remove_bookmark": "Retirer des signets", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 29b4d56a4..af5ed66bd 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -89,6 +89,14 @@ "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.show_less": "Afficher moins", + "block_modal.show_more": "Afficher plus", + "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", + "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", + "block_modal.title": "Bloquer l'utilisateur ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "bundle_column_error.copy_stacktrace": "Copier le rapport d'erreur", "bundle_column_error.error.body": "La page demandée n'a pas pu être affichée. Cela peut être dû à un bogue dans notre code, ou à un problème de compatibilité avec le navigateur.", @@ -169,6 +177,7 @@ "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?", "confirmations.discard_edit_media.confirm": "Rejeter", "confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, les supprimer quand même ?", + "confirmations.domain_block.confirm": "Bloquer le serveur", "confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans vos fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.", "confirmations.edit.confirm": "Modifier", "confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", @@ -200,6 +209,27 @@ "dismissable_banner.explore_statuses": "Ces messages venant de tout le web social gagnent en popularité aujourd’hui. Les nouveaux messages avec plus de boosts et de favoris sont classés plus haut.", "dismissable_banner.explore_tags": "Ces hashtags sont actuellement en train de gagner de l'ampleur parmi les personnes sur les serveurs du réseau décentralisé dont celui-ci.", "dismissable_banner.public_timeline": "Ce sont les posts publics les plus récents de personnes sur le web social que les gens sur {domain} suivent.", + "domain_block_modal.block": "Bloquer le serveur", + "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", + "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", + "domain_block_modal.title": "Bloquer le domaine ?", + "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", + "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", + "domain_pill.server": "Serveur", + "domain_pill.their_handle": "Son identifiant :", + "domain_pill.their_server": "Son foyer numérique, là où tous ses posts résident.", + "domain_pill.their_username": "Son identifiant unique sur leur serveur. Il est possible de rencontrer des utilisateurs avec le même nom sur différents serveurs.", + "domain_pill.username": "Nom d’utilisateur", + "domain_pill.whats_in_a_handle": "Qu'est-ce qu'un identifiant ?", + "domain_pill.who_they_are": "Comme un identifiant contient le nom et le service hébergeant une personne, vous pouvez interagir sur .", + "domain_pill.who_you_are": "Comme un identifiant indique votre nom et le service vous hébergeant, vous pouvez interagir avec .", + "domain_pill.your_handle": "Votre identifiant :", + "domain_pill.your_server": "Votre foyer numérique, là où vos messages résident. Vous souhaitez changer ? Lancez un transfert vers un autre serveur quand vous le voulez et vos abonné·e·s suivront automatiquement.", + "domain_pill.your_username": "Votre identifiant unique sur ce serveur. Il est possible de trouver des utilisateurs ayant le même nom d'utilisateur sur différents serveurs.", "embed.instructions": "Intégrez ce message à votre site en copiant le code ci-dessous.", "embed.preview": "Il apparaîtra comme cela :", "emoji_button.activity": "Activités", @@ -236,6 +266,7 @@ "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, ils apparaîtront ici.", "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.", "empty_column.mutes": "Vous n’avez masqué aucun compte pour le moment.", + "empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.", "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", @@ -396,6 +427,15 @@ "loading_indicator.label": "Chargement…", "media_gallery.toggle_visible": "{number, plural, one {Cacher l’image} other {Cacher les images}}", "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous l'avez déplacé à {movedToAccount}.", + "mute_modal.hide_from_notifications": "Cacher des notifications", + "mute_modal.hide_options": "Masquer les options", + "mute_modal.indefinite": "Jusqu'à ce que je les réactive", + "mute_modal.show_options": "Afficher les options", + "mute_modal.they_can_mention_and_follow": "Ils peuvent vous mentionner et vous suivre, mais vous ne les verrez pas.", + "mute_modal.they_wont_know": "Ils ne sauront pas qu'ils ont été rendus silencieux.", + "mute_modal.title": "Rendre cet utilisateur silencieux ?", + "mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", "navigation_bar.about": "À propos", "navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée", "navigation_bar.blocks": "Comptes bloqués", @@ -431,8 +471,13 @@ "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre message", + "notification.severed_relationships": "Relation avec {name} rompues", "notification.status": "{name} vient de publier", "notification.update": "{name} a modifié un message", + "notification_requests.accept": "Accepter", + "notification_requests.dismiss": "Rejeter", + "notification_requests.notifications_from": "Notifications de {name}", + "notification_requests.title": "Notifications filtrées", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", "notifications.column_settings.admin.report": "Nouveaux signalements :", @@ -464,6 +509,15 @@ "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.", + "notifications.policy.filter_new_accounts.hint": "Créés au cours des derniers {days, plural, one {un jour} other {# jours}}", + "notifications.policy.filter_new_accounts_title": "Nouveaux comptes", + "notifications.policy.filter_not_followers_hint": "Incluant les personnes qui vous suivent depuis moins de {days, plural, one {un jour} other {# jours}}", + "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", + "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", + "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", + "notifications.policy.filter_private_mentions_hint": "Filtré sauf si c'est en réponse à une mention de vous ou si vous suivez l'expéditeur", + "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", + "notifications.policy.title": "Filtrer les notifications de…", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Toujours au courant", @@ -534,6 +588,12 @@ "refresh": "Actualiser", "regeneration_indicator.label": "Chargement…", "regeneration_indicator.sublabel": "Votre fil principal est en cours de préparation !", + "relationship_severance_notification.purged_data": "supprimées par les administrateurs", + "relationship_severance_notification.relationships": "{count, plural, one {# relation} other {# relations}}", + "relationship_severance_notification.types.account_suspension": "Le compte a été suspendu", + "relationship_severance_notification.types.domain_block": "Le domaine a été suspendu", + "relationship_severance_notification.types.user_domain_block": "Vous avez bloqué ce domaine", + "relationship_severance_notification.view": "Afficher", "relative_time.days": "{number} j", "relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}", "relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}", @@ -640,9 +700,11 @@ "status.direct": "Mention privée @{name}", "status.direct_indicator": "Mention privée", "status.edit": "Modifier", + "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifié {count, plural, one {{count} fois} other {{count} fois}}", "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", + "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer ce message", "status.filtered": "Filtré", "status.hide": "Masquer le message", @@ -663,6 +725,7 @@ "status.reblog": "Partager", "status.reblog_private": "Partager à l’audience originale", "status.reblogged_by": "{name} a partagé", + "status.reblogs": "{count, plural, one {boost} other {boosts}}", "status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.", "status.redraft": "Supprimer et réécrire", "status.remove_bookmark": "Retirer des marque-pages", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index ad9a58d83..9c566909a 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -471,6 +471,7 @@ "notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch", "notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch", "notification.reblog": "Bhrosnaich {name} am post agad", + "notification.severed_relationships": "Chaidh na dàimhean le {name} a dhealachadh", "notification.status": "Phostaich {name} rud", "notification.update": "Dheasaich {name} post", "notification_requests.accept": "Gabh ris", @@ -508,13 +509,13 @@ "notifications.permission_denied": "Chan eil brathan deasga ri fhaighinn on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", "notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", "notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.", - "notifications.policy.filter_new_accounts.hint": "Chaidh a chruthachadh o chionn {count, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", + "notifications.policy.filter_new_accounts.hint": "Chaidh a chruthachadh o chionn {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", "notifications.policy.filter_new_accounts_title": "Cunntasan ùra", - "notifications.policy.filter_not_followers_hint": "A’ gabhail a-staigh an fheadhainn a lean ort nas lugha na {count, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh", + "notifications.policy.filter_not_followers_hint": "A’ gabhail a-staigh an fheadhainn a lean ort nas lugha na {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh", "notifications.policy.filter_not_followers_title": "Daoine nach eil gad leantainn", "notifications.policy.filter_not_following_hint": "Gus an aontaich thu riutha a làimh", "notifications.policy.filter_not_following_title": "Daoine nach eil thu a’ leantainn", - "notifications.policy.filter_private_mentions_hint": "Criathraichte ach ma tha e a’ freagairt do dh’iomradh agad fhèin no ma tha thu a’ leantainn an seòladair", + "notifications.policy.filter_private_mentions_hint": "Criathraichte ach ma tha e a’ freagairt do dh’iomradh agad fhèin no ma tha thu a’ leantainn an t-seòladair", "notifications.policy.filter_private_mentions_title": "Iomraidhean prìobhaideach o choigrich", "notifications.policy.title": "Falamhaich na brathan o…", "notifications_permission_banner.enable": "Cuir brathan deasga an comas", @@ -587,6 +588,12 @@ "refresh": "Ath-nuadhaich", "regeneration_indicator.label": "’Ga luchdadh…", "regeneration_indicator.sublabel": "Tha do dhachaigh ’ga ullachadh!", + "relationship_severance_notification.purged_data": "chaidh a phurgaideachadh leis na rianairean", + "relationship_severance_notification.relationships": "{count, plural, one {# dàimh} two {# dhàimh} few {# dàimhean} other {# dàimh}}", + "relationship_severance_notification.types.account_suspension": "Chaidh cunntas a chur à rèim", + "relationship_severance_notification.types.domain_block": "Chaidh àrainn a chur à rèim", + "relationship_severance_notification.types.user_domain_block": "Bhac thu an àrainn seo", + "relationship_severance_notification.view": "Seall", "relative_time.days": "{number}l", "relative_time.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air ais", "relative_time.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air ais", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 57882196f..57d13205f 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -471,6 +471,7 @@ "notification.own_poll": "A túa enquisa rematou", "notification.poll": "Rematou a enquisa na que votaches", "notification.reblog": "{name} compartiu a túa publicación", + "notification.severed_relationships": "Cortouse a relación con {name}", "notification.status": "{name} publicou", "notification.update": "{name} editou unha publicación", "notification_requests.accept": "Aceptar", @@ -587,6 +588,12 @@ "refresh": "Actualizar", "regeneration_indicator.label": "Estase a cargar…", "regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!", + "relationship_severance_notification.purged_data": "purgada pola administración", + "relationship_severance_notification.relationships": "{count, plural, one {# relación} other {# relacións}}", + "relationship_severance_notification.types.account_suspension": "A conta foi suspendida", + "relationship_severance_notification.types.domain_block": "O dominio foi suspendido", + "relationship_severance_notification.types.user_domain_block": "Bloqueaches este dominio", + "relationship_severance_notification.view": "Ver", "relative_time.days": "{number}d", "relative_time.full.days": "hai {number, plural, one {# día} other {# días}}", "relative_time.full.hours": "hai {number, plural, one {# hora} other {# horas}}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 48f028f3b..1f65c3549 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -248,7 +248,7 @@ "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", "empty_column.account_hides_collections": "המשתמש.ת בחר.ה להסתיר מידע זה", - "empty_column.account_suspended": "חשבון מושהה", + "empty_column.account_suspended": "חשבון מושעה", "empty_column.account_timeline": "אין עדיין אף הודעה!", "empty_column.account_unavailable": "פרופיל לא זמין", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", @@ -471,6 +471,7 @@ "notification.own_poll": "הסקר שלך הסתיים", "notification.poll": "סקר שהצבעת בו הסתיים", "notification.reblog": "הודעתך הודהדה על ידי {name}", + "notification.severed_relationships": "חתכתם כל קשר עם {name}", "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו הודעה", "notification_requests.accept": "לקבל", @@ -587,6 +588,12 @@ "refresh": "רענון", "regeneration_indicator.label": "טוען…", "regeneration_indicator.sublabel": "פיד הבית שלך בהכנה!", + "relationship_severance_notification.purged_data": "המידע נמחק על ידי ההנהלה", + "relationship_severance_notification.relationships": "{count, plural, one {קשר אחד} other {# קשרים}}", + "relationship_severance_notification.types.account_suspension": "החשבון הושעה", + "relationship_severance_notification.types.domain_block": "השרת הושעה", + "relationship_severance_notification.types.user_domain_block": "חסמת שרת זה", + "relationship_severance_notification.view": "הצג", "relative_time.days": "{number} ימים", "relative_time.full.days": "לפני {number, plural, one {# יום} other {# ימים}}", "relative_time.full.hours": "לפני {number, plural, one {# שעה} other {# שעות}}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index c13c8dc22..d9dfd01a2 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -92,11 +92,11 @@ "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.show_less": "Kevesebb mutatása", "block_modal.show_more": "Több mutatása", - "block_modal.they_cant_mention": "Nem említhetnek meg vagy követhetnek téged.", - "block_modal.they_cant_see_posts": "Nem láthatják a bejegyzéseidet, és te sem fogod látni az övékét.", - "block_modal.they_will_know": "Láthatják, hogy le vannak tiltva.", + "block_modal.they_cant_mention": "Nem említhet meg és nem követhet téged.", + "block_modal.they_cant_see_posts": "Nem láthatja a bejegyzéseidet, és te sem fogod látni az övéit.", + "block_modal.they_will_know": "Láthatja, hogy le van tiltva.", "block_modal.title": "Letiltsuk a felhasználót?", - "block_modal.you_wont_see_mentions": "Nem látsz majd őket említő bejegyzéseket.", + "block_modal.you_wont_see_mentions": "Nem látsz majd őt említő bejegyzéseket.", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "bundle_column_error.copy_stacktrace": "Hibajelentés másolása", "bundle_column_error.error.body": "A kért lap nem jeleníthető meg. Ez lehet, hogy kódhiba, vagy böngészőkompatibitási hiba.", @@ -176,7 +176,7 @@ "confirmations.delete_list.confirm": "Törlés", "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?", "confirmations.discard_edit_media.confirm": "Elvetés", - "confirmations.discard_edit_media.message": "Elmentetlen változtatásaid vannak a média leírásában vagy előnézetében. Eldobjuk őket?", + "confirmations.discard_edit_media.message": "Mentetlen változtatásaid vannak a média leírásában vagy előnézetében, mindenképp elveted?", "confirmations.domain_block.confirm": "Kiszolgáló letiltása", "confirmations.domain_block.message": "Biztos, hogy le szeretnéd tiltani a teljes {domain} domaint? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő, és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se az idővonalakon, se az értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.", "confirmations.edit.confirm": "Szerkesztés", @@ -213,7 +213,7 @@ "domain_block_modal.block_account_instead": "Helyette @{name} letiltása", "domain_block_modal.they_can_interact_with_old_posts": "Az ezen a kiszolgálón lévő emberek interaktálhatnak a régi bejegyzéseiddel.", "domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.", - "domain_block_modal.they_wont_know": "Nem fogják tudni, hogy letiltották őket.", + "domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.", "domain_block_modal.title": "Letiltsuk a domaint?", "domain_block_modal.you_will_lose_followers": "Az ezen a kiszolgálón lévő összes követődet törölni fogjuk.", "domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.", @@ -350,7 +350,7 @@ "home.pending_critical_update.title": "Kritikus biztonsági frissítés érhető el!", "home.show_announcements": "Közlemények megjelenítése", "interaction_modal.description.favourite": "Egy Mastodon fiókkal kedvencnek jelölheted ezt a bejegyzést, tudatva a szerzővel, hogy értékeled és elteszed későbbre.", - "interaction_modal.description.follow": "Egy Mastodon fiókkal bekövetheted {name} fiókot, hogy lásd a bejegyzéseit a saját hírfolyamodban.", + "interaction_modal.description.follow": "Egy Mastodon-fiókkal követheted {name} fiókját, hogy lásd a bejegyzéseit a kezdőlapodon.", "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.", "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.", "interaction_modal.login.action": "Vigyen haza", @@ -431,11 +431,11 @@ "mute_modal.hide_options": "Beállítások elrejtése", "mute_modal.indefinite": "Amíg nem oldom fel a némítást", "mute_modal.show_options": "Beállítások megjelenítése", - "mute_modal.they_can_mention_and_follow": "Megemlíthetnek vagy követhetnek téged, de nem fogod őket látni.", - "mute_modal.they_wont_know": "Nem fogják tudni, hogy lenémították őket.", + "mute_modal.they_can_mention_and_follow": "Megemlíthet vagy követhet téged, de te nem fogod ezeket látni.", + "mute_modal.they_wont_know": "Nem fogja tudni, hogy lenémítottad.", "mute_modal.title": "Elnémítsuk a felhasználót?", - "mute_modal.you_wont_see_mentions": "Nem látsz majd őket említő bejegyzéseket.", - "mute_modal.you_wont_see_posts": "Továbbra is látni fogják a bejegyzéseidet, de te nem fogod látni az övékét.", + "mute_modal.you_wont_see_mentions": "Nem látsz majd őt említő bejegyzéseket.", + "mute_modal.you_wont_see_posts": "Továbbra is látni fogja a bejegyzéseidet, de te nem fogod látni az övéit.", "navigation_bar.about": "Névjegy", "navigation_bar.advanced_interface": "Megnyitás a speciális webes felületben", "navigation_bar.blocks": "Letiltott felhasználók", @@ -471,6 +471,7 @@ "notification.own_poll": "A szavazásod véget ért", "notification.poll": "Egy szavazás, melyben részt vettél, véget ért", "notification.reblog": "{name} megtolta a bejegyzésedet", + "notification.severed_relationships": "A kapcsolatok megszakítva ezzel: {name}", "notification.status": "{name} bejegyzést tett közzé", "notification.update": "{name} szerkesztett egy bejegyzést", "notification_requests.accept": "Elfogadás", @@ -587,6 +588,12 @@ "refresh": "Frissítés", "regeneration_indicator.label": "Betöltés…", "regeneration_indicator.sublabel": "A saját idővonalad épp készül!", + "relationship_severance_notification.purged_data": "rendszergazdák által véglegesen törölve", + "relationship_severance_notification.relationships": "{count, plural, one {# kapcsolat} other {# kapcsolat}}", + "relationship_severance_notification.types.account_suspension": "A fiók fel van függesztve", + "relationship_severance_notification.types.domain_block": "A domain fel van függesztve", + "relationship_severance_notification.types.user_domain_block": "Blokkoltad ezt a domaint", + "relationship_severance_notification.view": "Megtekintés", "relative_time.days": "{number}n", "relative_time.full.days": "{number, plural, one {# napja} other {# napja}}", "relative_time.full.hours": "{number, plural, one {# órája} other {# órája}}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 3b4ea15f9..7d5df9198 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -89,6 +89,14 @@ "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non elaborato)", "audio.hide": "Nascondi audio", + "block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.", + "block_modal.show_less": "Mostra meno", + "block_modal.show_more": "Mostra di più", + "block_modal.they_cant_mention": "Non possono menzionarti o seguirti.", + "block_modal.they_cant_see_posts": "Non possono vedere i tuoi post e tu non vedrai i loro.", + "block_modal.they_will_know": "Possono vedere che sono bloccati.", + "block_modal.title": "Bloccare l'utente?", + "block_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio, la prossima volta", "bundle_column_error.copy_stacktrace": "Copia rapporto sull'errore", "bundle_column_error.error.body": "Impossibile rendedrizzare la pagina richiesta. Potrebbe dipendere da un bug nel nostro codice o da un problema di compatibilità di un browser.", @@ -169,6 +177,7 @@ "confirmations.delete_list.message": "Sei sicuro di voler eliminare permanentemente questa lista?", "confirmations.discard_edit_media.confirm": "Scarta", "confirmations.discard_edit_media.message": "Hai delle modifiche non salvate alla descrizione o anteprima del media, scartarle comunque?", + "confirmations.domain_block.confirm": "Blocca il server", "confirmations.domain_block.message": "Sei davvero sicuro di voler bloccare l'intero {domain}? In gran parte dei casi, è sufficiente e preferibile bloccare o silenziare alcuni profili. Non visualizzerai i contenuti da quel dominio in alcuna cronologia pubblica o tra le tue notifiche. I tuoi seguaci da quel dominio saranno rimossi.", "confirmations.edit.confirm": "Modifica", "confirmations.edit.message": "Modificare ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?", @@ -200,6 +209,27 @@ "dismissable_banner.explore_statuses": "Questi sono post da tutto il social web che stanno guadagnando popolarità oggi. I post più recenti con più condivisioni e preferiti sono classificati più in alto.", "dismissable_banner.explore_tags": "Questi hashtag stanno ottenendo popolarità tra le persone su questo e altri server della rete decentralizzata, al momento.", "dismissable_banner.public_timeline": "Questi sono i post pubblici più recenti di persone sul social che le persone su {domain} seguono.", + "domain_block_modal.block": "Blocca il server", + "domain_block_modal.block_account_instead": "Blocca invece @{name}", + "domain_block_modal.they_can_interact_with_old_posts": "Le persone da questo server possono interagire con i tuoi vecchi post.", + "domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.", + "domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.", + "domain_block_modal.title": "Bloccare il dominio?", + "domain_block_modal.you_will_lose_followers": "Tutti i tuoi seguaci da questo server verranno rimossi.", + "domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.", + "domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.", + "domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.", + "domain_pill.server": "Server", + "domain_pill.their_handle": "Il loro nome univoco:", + "domain_pill.their_server": "La loro casa digitale, dove risiedono tutti i loro post.", + "domain_pill.their_username": "Il loro identificatore univoco sul loro server. È possibile trovare utenti con lo stesso nome utente su server diversi.", + "domain_pill.username": "Nome utente", + "domain_pill.whats_in_a_handle": "Cosa c'è in un nome univoco?", + "domain_pill.who_they_are": "Poiché i nomi univoci indicano chi sia qualcuno e dove si trovi, puoi interagire con le persone attraverso la rete sociale delle .", + "domain_pill.who_you_are": "Poiché il tuo nome univoco indica chi tu sia e dove ti trovi, le persone possono interagire con te sulla rete sociale delle .", + "domain_pill.your_handle": "Il tuo nome univoco:", + "domain_pill.your_server": "La tua casa digitale, dove vivono tutti i tuoi post. Non ti piace questa? Cambia server in qualsiasi momento e porta con te anche i tuoi seguaci.", + "domain_pill.your_username": "Il tuo identificatore univoco su questo server. È possibile trovare utenti con lo stesso nome utente su server diversi.", "embed.instructions": "Incorpora questo post sul tuo sito web, copiando il seguente codice.", "embed.preview": "Ecco come apparirà:", "emoji_button.activity": "Attività", @@ -397,6 +427,15 @@ "loading_indicator.label": "Caricamento…", "media_gallery.toggle_visible": "{number, plural, one {Nascondi immagine} other {Nascondi immagini}}", "moved_to_account_banner.text": "Il tuo profilo {disabledAccount} è correntemente disabilitato perché ti sei spostato a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Nascondi dalle notifiche", + "mute_modal.hide_options": "Nascondi le opzioni", + "mute_modal.indefinite": "Finché io non le riattivo", + "mute_modal.show_options": "Mostre le opzioni", + "mute_modal.they_can_mention_and_follow": "Possono menzionarti e seguirti, ma non li vedrai.", + "mute_modal.they_wont_know": "Non sapranno di essere stati silenziati.", + "mute_modal.title": "Silenziare l'utente?", + "mute_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.", + "mute_modal.you_wont_see_posts": "Possono ancora vedere i tuoi post, ma tu non vedrai i loro.", "navigation_bar.about": "Info", "navigation_bar.advanced_interface": "Apri nell'interfaccia web avanzata", "navigation_bar.blocks": "Utenti bloccati", @@ -432,6 +471,7 @@ "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha rebloggato il tuo post", + "notification.severed_relationships": "Relazioni interrotte con {name}", "notification.status": "{name} ha appena pubblicato un post", "notification.update": "{name} ha modificato un post", "notification_requests.accept": "Accetta", @@ -548,6 +588,12 @@ "refresh": "Ricarica", "regeneration_indicator.label": "Caricamento…", "regeneration_indicator.sublabel": "Il feed della tua home è in preparazione!", + "relationship_severance_notification.purged_data": "rimossi dagli amministratori", + "relationship_severance_notification.relationships": "{count, plural,one {# relazione} other {# relazioni}}", + "relationship_severance_notification.types.account_suspension": "L'account è stato sospeso", + "relationship_severance_notification.types.domain_block": "Il dominio è stato sospeso", + "relationship_severance_notification.types.user_domain_block": "Hai bloccato questo dominio", + "relationship_severance_notification.view": "Visualizza", "relative_time.days": "{number}g", "relative_time.full.days": "{number, plural, one {# giorno} other {# giorni}} fa", "relative_time.full.hours": "{number, plural, one {# ora} other {# ore}} fa", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 5fd28cfd8..da354f391 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -220,11 +220,16 @@ "domain_pill.activitypub_lets_connect": "이것은 마스토돈 뿐만이 아니라 다른 소셜 앱들을 넘나들며 사람들을 연결하고 상호작용 할 수 있게 합니다.", "domain_pill.activitypub_like_language": "액티비티펍은 마스토돈이 다른 소셜 네트워크와 대화할 때 쓰는 언어 같은 것입니다.", "domain_pill.server": "서버", - "domain_pill.their_handle": "그의 핸들:", + "domain_pill.their_handle": "이 사람의 핸들:", + "domain_pill.their_server": "그의 게시물이 살고 있는 디지털 거처입니다.", + "domain_pill.their_username": "그의 서버에서 유일한 식별자입니다. 다른 서버에서 같은 사용자명을 가진 사용자를 찾을 수도 있습니다.", "domain_pill.username": "사용자명", "domain_pill.whats_in_a_handle": "핸들엔 무엇이 담겨 있나요?", + "domain_pill.who_they_are": "핸들은 어디에 있는 누구인지를 나타내기 때문에 들의 소셜 웹을 넘나들며 사람들과 상호작용 할 수 있습니다.", "domain_pill.who_you_are": "내 핸들은 내가 어디에 있는 누군지 나타내기 때문에 사람들은 을 통해 소셜 웹을 넘나들며 나와 상호작용 할 수 있습니다.", "domain_pill.your_handle": "내 핸들:", + "domain_pill.your_server": "내 게시물들이 살고 있는 나의 디지털 거처입니다. 마음에 들지 않나요? 팔로워를 데리고 언제든지 다른 서버로 거처를 옮길 수도 있습니다.", + "domain_pill.your_username": "이 서버에서 유일한 내 식별자입니다. 다른 서버에서 같은 사용자명을 가진 사용자를 찾을 수도 있습니다.", "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.", "embed.preview": "이렇게 표시됩니다:", "emoji_button.activity": "활동", @@ -466,6 +471,7 @@ "notification.own_poll": "설문을 마침", "notification.poll": "참여한 설문이 종료됨", "notification.reblog": "{name} 님이 부스트했습니다", + "notification.severed_relationships": "{name} 님과의 관계가 단절되었습니다", "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notification.update": "{name} 님이 게시물을 수정했습니다", "notification_requests.accept": "수락", @@ -507,11 +513,11 @@ "notifications.policy.filter_new_accounts_title": "새 계정", "notifications.policy.filter_not_followers_hint": "나를 팔로우 한 지 {days, plural, other {# 일}}이 되지 않은 사람들을 포함", "notifications.policy.filter_not_followers_title": "나를 팔로우하지 않는 사람들", - "notifications.policy.filter_not_following_hint": "내가 수동으로 승인하기 전까지", + "notifications.policy.filter_not_following_hint": "내가 수동으로 승인하지 않는 한", "notifications.policy.filter_not_following_title": "내가 팔로우하지 않는 사람들", "notifications.policy.filter_private_mentions_hint": "내가 한 멘션에 단 답글이거나 내가 발신자를 팔로우 한 것이 아닌 이상 걸러집니다", "notifications.policy.filter_private_mentions_title": "청하지 않은 개인적인 멘션", - "notifications.policy.title": "알림을 거를 사람들…", + "notifications.policy.title": "알림을 제외할 조건들…", "notifications_permission_banner.enable": "데스크탑 알림 활성화", "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", "notifications_permission_banner.title": "아무것도 놓치지 마세요", @@ -582,6 +588,12 @@ "refresh": "새로고침", "regeneration_indicator.label": "불러오는 중…", "regeneration_indicator.sublabel": "홈 피드를 준비하고 있습니다!", + "relationship_severance_notification.purged_data": "관리자에 의해 제거되었습니다", + "relationship_severance_notification.relationships": "{count, plural, other {# 건의 관계}}", + "relationship_severance_notification.types.account_suspension": "계정이 정지되었습니다", + "relationship_severance_notification.types.domain_block": "도메인이 정지되었습니다", + "relationship_severance_notification.types.user_domain_block": "내가 이 도메인을 차단했습니다", + "relationship_severance_notification.view": "보기", "relative_time.days": "{number}일 전", "relative_time.full.days": "{number} 일 전", "relative_time.full.hours": "{number} 시간 전", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 2f4185f69..1eb8aa4ab 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -91,7 +91,10 @@ "audio.hide": "Eskonde audio", "block_modal.show_less": "Amostra manko", "block_modal.show_more": "Amostra mas", + "block_modal.they_cant_mention": "No te puede enmentar ni segir.", + "block_modal.they_will_know": "Puede ver ke esta blokado.", "block_modal.title": "Bloka utilizador?", + "block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.", "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", @@ -205,9 +208,17 @@ "dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.", "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.", "domain_block_modal.block": "Bloka sirvidor", + "domain_block_modal.block_account_instead": "Bloka @{name} en su lugar", + "domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.", + "domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.", "domain_block_modal.title": "Bloka el domeno?", + "domain_block_modal.you_will_lose_followers": "Se efasaran todos tus suivantes de este sirvidor.", + "domain_block_modal.you_wont_see_posts": "No veras publikasyones ni avizos de utilizadores en este sirvidor.", "domain_pill.server": "Sirvidor", + "domain_pill.their_handle": "Su alias:", "domain_pill.username": "Nombre de utilizador", + "domain_pill.whats_in_a_handle": "En ke konsiste el alias?", + "domain_pill.your_handle": "Tu alias:", "embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.", "embed.preview": "Paresera ansina:", "emoji_button.activity": "Aktivita", @@ -404,6 +415,13 @@ "loading_indicator.label": "Eskargando…", "media_gallery.toggle_visible": "{number, plural, one {Eskonde imaje} other {Eskonde imajes}}", "moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Eskonde de avizos", + "mute_modal.hide_options": "Eskonde opsyones", + "mute_modal.indefinite": "Asta ke desho de silensyarlo", + "mute_modal.show_options": "Amostra opsyones", + "mute_modal.they_wont_know": "No savra ke tiene sido silensyado.", + "mute_modal.title": "Silensiar utilizador?", + "mute_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.", "navigation_bar.about": "Sovre mozotros", "navigation_bar.advanced_interface": "Avre en la enterfaz avanzada", "navigation_bar.blocks": "Utilizadores blokados", @@ -553,6 +571,8 @@ "refresh": "Arefreska", "regeneration_indicator.label": "Eskargando…", "regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!", + "relationship_severance_notification.types.user_domain_block": "Blokates este domeno", + "relationship_severance_notification.view": "Mira", "relative_time.days": "{number} d", "relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}", "relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 51d06c823..21fa46faa 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -236,7 +236,7 @@ "empty_column.lists": "Pašlaik Tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", "empty_column.notifications": "Tev vēl nav paziņojumu. Kad citi cilvēki ar Tevi mijiedarbosies, Tu to redzēsi šeit.", - "empty_column.public": "Šeit nekā nav! Ieraksti kaut ko publiski vai seko lietotājiem no citiem serveriem, lai iegūtu saturu", + "empty_column.public": "Šeit nekā nav. Ieraksti kaut ko publiski vai seko lietotājiem no citiem serveriem, lai iegūtu saturu", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", @@ -265,6 +265,7 @@ "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", + "filtered_notifications_banner.pending_requests": "Paziņojumi no {count, plural, =0 {neviena} one {viena cilvēka} other {# cilvēkiem}}, ko Tu varētu zināt", "firehose.all": "Visi", "firehose.local": "Šis serveris", "firehose.remote": "Citi serveri", @@ -273,6 +274,7 @@ "follow_requests.unlocked_explanation": "Lai gan Tavs konts nav slēgts, {domain} darbinieki iedomājās, ka Tu varētu vēlēties pašrocīgi pārskatīt sekošanas pieprasījumus no šiem kontiem.", "follow_suggestions.curated_suggestion": "Darbinieku izvēle", "follow_suggestions.dismiss": "Vairs nerādīt", + "follow_suggestions.personalized_suggestion": "Pielāgots ieteikums", "follow_suggestions.view_all": "Skatīt visu", "follow_suggestions.who_to_follow": "Kam sekot", "followed_tags": "Sekojamie tēmturi", @@ -413,7 +415,7 @@ "navigation_bar.security": "Drošība", "not_signed_in_indicator.not_signed_in": "Ir jāpiesakās, lai piekļūtu šim resursam.", "notification.admin.report": "{name} ziņoja par {target}", - "notification.admin.sign_up": "{name} ir pierakstījies", + "notification.admin.sign_up": "{name} pierakstījās", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", "notification.follow": "{name} uzsāka Tev sekot", "notification.follow_request": "{name} nosūtīja Tev sekošanas pieprasījumu", @@ -464,7 +466,7 @@ "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.", "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:", - "onboarding.follows.title": "Populārs Mastodon", + "onboarding.follows.title": "Pielāgo savu mājas barotni", "onboarding.profile.discoverable": "Padarīt manu profilu atklājamu", "onboarding.profile.display_name": "Attēlojamais vārds", "onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…", @@ -482,7 +484,7 @@ "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", - "onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}", + "onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni", "onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", "onboarding.steps.setup_profile.body": "Palielini mijiedarbību ar aptverošu profilu!", @@ -492,14 +494,14 @@ "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divpakāpju autentifikāciju. Tas darbojas ar jebkuru Tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", "onboarding.tips.accounts_from_other_servers": "Vai zināji? Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!", "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu serveri!", - "onboarding.tips.verification": "Vai zināji? Tu vari verificēt savu kontu, ievietojot saiti uz savu Mastodon profilu savā vietnē un pievienojot vietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti!", + "onboarding.tips.verification": "Vai zināji? Tu vari apliecināt savu kontu, ievietojot savā tīmekļvietnē saiti uz savu Mastodon profilu un pievienojot tīmekļvietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti.", "password_confirmation.exceeds_maxlength": "Paroles apstiprināšana pārsniedz maksimālo paroles garumu", "password_confirmation.mismatching": "Paroles apstiprinājums neatbilst", "picture_in_picture.restore": "Novietot atpakaļ", "poll.closed": "Pabeigta", "poll.refresh": "Atsvaidzināt", "poll.reveal": "Skatīt rezultātus", - "poll.total_people": "{count, plural, zero {# cilvēku} one {# persona} other {# cilvēki}}", + "poll.total_people": "{count, plural, zero {# cilvēku} one {# cilvēks} other {# cilvēki}}", "poll.total_votes": "{count, plural, zero {# balsojumu} one {# balsojums} other {# balsojumi}}", "poll.vote": "Balsot", "poll.voted": "Tu balsoji par šo atbildi", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 9bf40a714..4be0808f2 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -471,6 +471,7 @@ "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", + "notification.severed_relationships": "Volgrelaties met {name} verbroken", "notification.status": "{name} heeft zojuist een bericht geplaatst", "notification.update": "{name} heeft een bericht bewerkt", "notification_requests.accept": "Accepteren", @@ -587,6 +588,12 @@ "refresh": "Vernieuwen", "regeneration_indicator.label": "Aan het laden…", "regeneration_indicator.sublabel": "Jouw starttijdlijn wordt aangemaakt!", + "relationship_severance_notification.purged_data": "verwijderd door beheerders", + "relationship_severance_notification.relationships": "{count, plural, one {# volgrelatie} other {# volgrelaties}}", + "relationship_severance_notification.types.account_suspension": "Account is opgeschort", + "relationship_severance_notification.types.domain_block": "Domein is opgeschort", + "relationship_severance_notification.types.user_domain_block": "Je hebt dit domein geblokkeerd", + "relationship_severance_notification.view": "Weergeven", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dag} other {# dagen}} geleden", "relative_time.full.hours": "{number, plural, one {# uur} other {# uur}} geleden", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index a218cadf8..7742d83e1 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -32,7 +32,7 @@ "account.featured_tags.last_status_never": "Ingen innlegg", "account.featured_tags.title": "{name} sine framheva emneknaggar", "account.follow": "Fylg", - "account.follow_back": "Følg tilbake", + "account.follow_back": "Fylg tilbake", "account.followers": "Fylgjarar", "account.followers.empty": "Ingen fylgjer denne brukaren enno.", "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}", @@ -49,7 +49,7 @@ "account.media": "Media", "account.mention": "Nemn @{name}", "account.moved_to": "{name} seier at deira nye konto no er:", - "account.mute": "Målbind @{name}", + "account.mute": "Demp @{name}", "account.mute_notifications_short": "Demp varslingar", "account.mute_short": "Demp", "account.muted": "Målbunden", @@ -69,9 +69,9 @@ "account.unblock_short": "Stopp blokkering", "account.unendorse": "Ikkje vis på profil", "account.unfollow": "Slutt å fylgja", - "account.unmute": "Opphev målbinding av @{name}", + "account.unmute": "Opphev demping av @{name}", "account.unmute_notifications_short": "Opphev demping av varslingar", - "account.unmute_short": "Opphev målbinding", + "account.unmute_short": "Opphev demping", "account_note.placeholder": "Klikk for å leggja til merknad", "admin.dashboard.daily_retention": "Mengda brukarar aktive ved dagar etter registrering", "admin.dashboard.monthly_retention": "Mengda brukarar aktive ved månader etter registrering", @@ -79,8 +79,8 @@ "admin.dashboard.retention.cohort": "Registrert månad", "admin.dashboard.retention.cohort_size": "Nye brukarar", "admin.impact_report.instance_accounts": "Kontoprofilar dette vil sletta", - "admin.impact_report.instance_followers": "Følgjarar våre brukarar vil mista", - "admin.impact_report.instance_follows": "Følgjarar deira brukarar vil mista", + "admin.impact_report.instance_followers": "Fylgjarar som brukarane våre ville mista", + "admin.impact_report.instance_follows": "Fylgjarar som brukarane deira ville mista", "admin.impact_report.title": "Samandrag av konsekvensane", "alert.rate_limited.message": "Ver venleg å prøv på nytt etter {retry_time, time, medium}.", "alert.rate_limited.title": "Redusert kapasitet", @@ -89,9 +89,14 @@ "announcement.announcement": "Kunngjering", "attachments_list.unprocessed": "(ubehandla)", "audio.hide": "Gøym lyd", - "block_modal.remote_users_caveat": "Vi vil be tenaren {domain} om å respektere di avgjerd. Det kan ikkje garanterast at det vert etterfølgd, sidan nokre tenarar kan handtere blokkering ulikt. Offentlege innlegg kan framleis vere synlege for ikkje-innlogga brukarar.", + "block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektere di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.", "block_modal.show_less": "Vis mindre", "block_modal.show_more": "Vis meir", + "block_modal.they_cant_mention": "Dei kan ikkje nemna eller fylgja deg.", + "block_modal.they_cant_see_posts": "Dei kan ikkje sjå innlegga dine, og du vil ikkje sjå deira.", + "block_modal.they_will_know": "Dei kan sjå at dei er blokkerte.", + "block_modal.title": "Blokker brukaren?", + "block_modal.you_wont_see_mentions": "Du ser ikkje innlegg som nemner dei.", "boost_modal.combo": "Du kan trykkja {combo} for å hoppa over dette neste gong", "bundle_column_error.copy_stacktrace": "Kopier feilrapport", "bundle_column_error.error.body": "Den etterspurde sida kan ikke hentast fram. Det kan skuldast ein feil i koden vår eller eit kompatibilitetsproblem.", @@ -172,12 +177,13 @@ "confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?", "confirmations.discard_edit_media.confirm": "Forkast", "confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?", - "confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.", + "confirmations.domain_block.confirm": "Blokker tenaren", + "confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller dempingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.", "confirmations.edit.confirm": "Rediger", "confirmations.edit.message": "Å redigera no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?", "confirmations.logout.confirm": "Logg ut", "confirmations.logout.message": "Er du sikker på at du vil logga ut?", - "confirmations.mute.confirm": "Målbind", + "confirmations.mute.confirm": "Demp", "confirmations.redraft.confirm": "Slett & skriv på nytt", "confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.", "confirmations.reply.confirm": "Svar", @@ -202,7 +208,15 @@ "dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.", "dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.", "dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.", - "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} følgjer.", + "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} fylgjer.", + "domain_block_modal.block": "Blokker tenaren", + "domain_block_modal.block_account_instead": "Blokker @{name} i staden", + "domain_block_modal.they_can_interact_with_old_posts": "Folk på denne tenaren kan samhandla med dei gamle innlegga dine.", + "domain_block_modal.they_cant_follow": "Ingen på denne tenaren kan fylgja deg.", + "domain_block_modal.they_wont_know": "Dei veit ikkje at dei er blokkerte.", + "domain_block_modal.title": "Blokker domenet?", + "domain_block_modal.you_will_lose_followers": "Alle fylgjarane dine frå denne tenaren blir fjerna.", + "domain_block_modal.you_wont_see_posts": "Du vil ikkje sjå innlegg eller varslingar frå brukarar på denne tenaren.", "domain_pill.activitypub_lets_connect": "Den lar deg kople til og samhandle med folk ikkje berre på Mastodon, men òg på tvers av forskjellige sosiale appar.", "domain_pill.activitypub_like_language": "ActivityPub er som språket Mastodon snakkar med andre sosiale nettverk.", "domain_pill.server": "Tenar", @@ -214,7 +228,7 @@ "domain_pill.who_they_are": "Sidan handtak seier kven nokon er og kvar dei er, kan du interagere med folk på tvers av det sosiale nettverket av .", "domain_pill.who_you_are": "Sidan handtaket ditt seier kven du er og kvar du er, kan folk interagere med deg på tvers av det sosiale nettverket av .", "domain_pill.your_handle": "Handtaket ditt:", - "domain_pill.your_server": "Din digitale heim, som alle postane dine bur i. Liker du ikkje dette? Overfør tenarar når som helst og ta med følgjarane dine òg.", + "domain_pill.your_server": "Din digitale heim, der alle innlegga dine bur i. Liker du ikkje dette? Byt til ein ny tenar når som helst og ta med fylgjarane dine òg.", "domain_pill.your_username": "Din unike identifikator på denne tenaren. Det er mogleg å finne brukarar med same brukarnamn på forskjellige tenarar.", "embed.instructions": "Bygg inn denne statusen på nettsida di ved å kopiera koden nedanfor.", "embed.preview": "Slik kjem det til å sjå ut:", @@ -234,7 +248,7 @@ "emoji_button.symbols": "Symbol", "emoji_button.travel": "Reise & stader", "empty_column.account_hides_collections": "Denne brukaren har valt å ikkje gjere denne informasjonen tilgjengeleg", - "empty_column.account_suspended": "Kontoen er suspendert", + "empty_column.account_suspended": "Kontoen er utestengd", "empty_column.account_timeline": "Ingen tut her!", "empty_column.account_unavailable": "Profil ikkje tilgjengeleg", "empty_column.blocks": "Du har ikkje blokkert nokon enno.", @@ -245,16 +259,16 @@ "empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!", "empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.", "empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.", - "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.", + "empty_column.follow_requests": "Ingen har spurt om å fylgja deg enno. Når nokon gjer det, vil det dukka opp her.", "empty_column.followed_tags": "Du fylgjer ingen emneknaggar enno. Når du gjer det, vil dei syna her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen enno.", - "empty_column.home": "Heime-tidslina di er tom! Følg fleire folk for å fylle ho med innhald. {suggestions}", + "empty_column.home": "Heime-tidslina di er tom! Fylg fleire folk for å fylla ho med innhald. {suggestions}.", "empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.", "empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.", "empty_column.mutes": "Du har ikkje målbunde nokon enno.", "empty_column.notification_requests": "Ferdig! Her er det ingenting. Når du får nye varsel, kjem dei opp her slik du har valt.", "empty_column.notifications": "Du har ingen varsel enno. Kommuniser med andre for å starte samtalen.", - "empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller følg brukarar frå andre tenarar manuelt for å fylle det opp", + "empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller fylg brukarar frå andre tenarar manuelt for å få meir her", "error.unexpected_crash.explanation": "På grunn av eit nettlesarkompatibilitetsproblem eller ein feil i koden vår, kunne ikkje denne sida bli vist slik den skal.", "error.unexpected_crash.explanation_addons": "Denne sida kunne ikkje visast som den skulle. Feilen kjem truleg frå ei nettleserutviding eller frå automatiske omsetjingsverktøy.", "error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Hjelper ikkje dette kan du framleis nytta Mastodon i ein annan nettlesar eller app.", @@ -301,7 +315,7 @@ "follow_suggestions.personalized_suggestion": "Personleg forslag", "follow_suggestions.popular_suggestion": "Populært forslag", "follow_suggestions.view_all": "Vis alle", - "follow_suggestions.who_to_follow": "Kven som skal følgjast", + "follow_suggestions.who_to_follow": "Kven du kan fylgja", "followed_tags": "Fylgde emneknaggar", "footer.about": "Om", "footer.directory": "Profilmappe", @@ -413,6 +427,15 @@ "loading_indicator.label": "Lastar…", "media_gallery.toggle_visible": "{number, plural, one {Skjul bilete} other {Skjul bilete}}", "moved_to_account_banner.text": "Kontoen din, {disabledAccount} er for tida deaktivert fordi du har flytta til {movedToAccount}.", + "mute_modal.hide_from_notifications": "Ikkje vis varslingar", + "mute_modal.hide_options": "Gøym val", + "mute_modal.indefinite": "Til eg avdempar dei", + "mute_modal.show_options": "Vis val", + "mute_modal.they_can_mention_and_follow": "Dei kan nemna og fylgja deg, men du vil ikkje sjå dei.", + "mute_modal.they_wont_know": "Dei veit ikkje at dei er dempa.", + "mute_modal.title": "Demp brukaren?", + "mute_modal.you_wont_see_mentions": "Du vil ikkje sjå innlegg som nemner dei.", + "mute_modal.you_wont_see_posts": "Dei kan framleis sjå innlegga dine, men du vil ikkje sjå deira.", "navigation_bar.about": "Om", "navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt", "navigation_bar.blocks": "Blokkerte brukarar", @@ -448,6 +471,7 @@ "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", + "notification.severed_relationships": "Forholda med {name} er brotne", "notification.status": "{name} la nettopp ut", "notification.update": "{name} redigerte eit innlegg", "notification_requests.accept": "Godkjenn", @@ -551,8 +575,8 @@ "privacy.change": "Endre personvernet på innlegg", "privacy.direct.long": "Alle nemnde i innlegget", "privacy.direct.short": "Spesifikke folk", - "privacy.private.long": "Berre dine følgjarar", - "privacy.private.short": "Følgjarar", + "privacy.private.long": "Berre dei som fylgjer deg", + "privacy.private.short": "Fylgjarar", "privacy.public.long": "Kven som helst på og av Mastodon", "privacy.public.short": "Offentleg", "privacy.unlisted.additional": "Dette er akkurat som offentleg, bortsett frå at innlegga ikkje dukkar opp i direktestraumar eller merkelappar, i oppdagingar eller Mastodon-søk, sjølv om du har sagt ja til at kontoen skal vera synleg.", @@ -564,6 +588,12 @@ "refresh": "Oppdater", "regeneration_indicator.label": "Lastar…", "regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!", + "relationship_severance_notification.purged_data": "sletta av administratorar", + "relationship_severance_notification.relationships": "{count, plural, one {# forhold} other {# forhold}}", + "relationship_severance_notification.types.account_suspension": "Kontoen er utvist", + "relationship_severance_notification.types.domain_block": "Domenet er utestengt", + "relationship_severance_notification.types.user_domain_block": "Du blokkerte dette domenet", + "relationship_severance_notification.view": "Sjå", "relative_time.days": "{number}dg", "relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sidan", "relative_time.full.hours": "{number, plural, one {# time} other {# timar}} sidan", @@ -592,7 +622,7 @@ "report.comment.title": "Er det noko anna du meiner me bør vite?", "report.forward": "Vidaresend til {target}", "report.forward_hint": "Kontoen er frå ein annan tenar. Vil du senda ein anonymisert kopi av rapporten dit òg?", - "report.mute": "Målbind", + "report.mute": "Demp", "report.mute_explanation": "Du vil ikkje lenger sjå innlegga deira. Dei kan framleis fylgje deg og sjå innlegga dine, men vil ikkje vite at du har valt å ikkje sjå innlegga deira.", "report.next": "Neste", "report.placeholder": "Tilleggskommentarar", @@ -663,16 +693,18 @@ "status.block": "Blokker @{name}", "status.bookmark": "Set bokmerke", "status.cancel_reblog_private": "Opphev framheving", - "status.cannot_reblog": "Denne posten kan ikkje framhevast", + "status.cannot_reblog": "Du kan ikkje framheva dette innlegget", "status.copy": "Kopier lenke til status", "status.delete": "Slett", "status.detailed_status": "Detaljert samtalevisning", "status.direct": "Nevn @{name} privat", "status.direct_indicator": "Privat omtale", "status.edit": "Rediger", + "status.edited": "Sist endra {date}", "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}", "status.embed": "Bygg inn", "status.favourite": "Favoritt", + "status.favourites": "{count, plural, one {favoritt} other {favorittar}}", "status.filter": "Filtrer dette innlegget", "status.filtered": "Filtrert", "status.hide": "Skjul innlegget", @@ -684,8 +716,8 @@ "status.media_hidden": "Mediet er gøymt", "status.mention": "Nemn @{name}", "status.more": "Meir", - "status.mute": "Målbind @{name}", - "status.mute_conversation": "Målbind samtale", + "status.mute": "Demp @{name}", + "status.mute_conversation": "Demp samtale", "status.open": "Utvid denne statusen", "status.pin": "Fest på profil", "status.pinned": "Festa tut", @@ -693,6 +725,7 @@ "status.reblog": "Framhev", "status.reblog_private": "Framhev til dei originale mottakarane", "status.reblogged_by": "{name} framheva", + "status.reblogs": "{count, plural, one {framheving} other {framhevingar}}", "status.reblogs.empty": "Ingen har framheva dette tutet enno. Om nokon gjer, så dukkar det opp her.", "status.redraft": "Slett & skriv på nytt", "status.remove_bookmark": "Fjern bokmerke", @@ -708,11 +741,11 @@ "status.show_more": "Vis meir", "status.show_more_all": "Vis meir for alle", "status.show_original": "Vis original", - "status.title.with_attachments": "{user} postet {attachmentCount, plural, one {et vedlegg} other {{attachmentCount} vedlegg}}", + "status.title.with_attachments": "{user} la ut {attachmentCount, plural, one {eitt vedlegg} other {{attachmentCount} vedlegg}}", "status.translate": "Omset", "status.translated_from_with": "Omsett frå {lang} ved bruk av {provider}", "status.uncached_media_warning": "Førehandsvisning er ikkje tilgjengeleg", - "status.unmute_conversation": "Opphev målbinding av samtalen", + "status.unmute_conversation": "Opphev demping av samtalen", "status.unpin": "Løys frå profil", "subscribed_languages.lead": "Kun innlegg på valde språk vil bli dukke opp i heimestraumen din og i listene dine etter denne endringa. For å motta innlegg på alle språk, la vere å velje nokon.", "subscribed_languages.save": "Lagre endringar", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index b1145f64d..d4b37ffe6 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -89,6 +89,14 @@ "announcement.announcement": "Anúncio", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", + "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.", + "block_modal.show_less": "Mostrar menos", + "block_modal.show_more": "Mostrar mais", + "block_modal.they_cant_mention": "Eles não o podem mencionar ou seguir.", + "block_modal.they_cant_see_posts": "Eles não podem ver as suas publicações e você não verá as deles.", + "block_modal.they_will_know": "Eles podem ver que estão bloqueados.", + "block_modal.title": "Bloquear utilizador?", + "block_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "bundle_column_error.copy_stacktrace": "Copiar relatório de erros", "bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.", @@ -169,6 +177,7 @@ "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?", "confirmations.discard_edit_media.confirm": "Descartar", "confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição ou pré-visualização do conteúdo. Descartar mesmo assim?", + "confirmations.domain_block.confirm": "Bloquear servidor", "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.", "confirmations.edit.confirm": "Editar", "confirmations.edit.message": "Editar agora irá sobrescrever a mensagem que está a compor. Tem a certeza de que deseja continuar?", @@ -200,6 +209,27 @@ "dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.", "dismissable_banner.explore_tags": "Estas #etiquetas estão presentemente a ganhar atenção entre as pessoas neste e noutros servidores da rede descentralizada.", "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.", + "domain_block_modal.block": "Bloquear servidor", + "domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa", + "domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as suas publicações antigas.", + "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode segui-lo.", + "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", + "domain_block_modal.title": "Bloquear domínio?", + "domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.", + "domain_block_modal.you_wont_see_posts": "Não verá publicações ou notificações de utilizadores neste servidor.", + "domain_pill.activitypub_lets_connect": "Permite-lhe conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.", + "domain_pill.activitypub_like_language": "O ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", + "domain_pill.server": "Servidor", + "domain_pill.their_handle": "O seu identificador:", + "domain_pill.their_server": "A sua casa digital, onde se encontram todas as suas publicações.", + "domain_pill.their_username": "O seu identificador único no seu servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.", + "domain_pill.username": "Nome de utilizador", + "domain_pill.whats_in_a_handle": "Em que consiste um identificador?", + "domain_pill.who_they_are": "Uma vez que os identificadores dizem quem é alguém e onde está, pode interagir com as pessoas através da rede social de .", + "domain_pill.who_you_are": "Uma vez que o seu identificador indica quem é e onde está, as pessoas podem interagir consigo através da rede social de .", + "domain_pill.your_handle": "O seu identificador:", + "domain_pill.your_server": "A sua casa digital, onde se encontram todas as suas publicações. Não gosta deste? Mude de servidor a qualquer momento e leve também os seus seguidores.", + "domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.", "embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.", "embed.preview": "Podes ver aqui como irá ficar:", "emoji_button.activity": "Actividade", @@ -397,6 +427,15 @@ "loading_indicator.label": "A carregar…", "media_gallery.toggle_visible": "Alternar visibilidade", "moved_to_account_banner.text": "A sua conta {disabledAccount} está, no momento, desativada, porque você migrou para {movedToAccount}.", + "mute_modal.hide_from_notifications": "Ocultar das notificações", + "mute_modal.hide_options": "Ocultar opções", + "mute_modal.indefinite": "Até que eu os tire do silêncio", + "mute_modal.show_options": "Mostrar opções", + "mute_modal.they_can_mention_and_follow": "Eles podem mencioná-lo e segui-lo, mas você não os verá.", + "mute_modal.they_wont_know": "Eles não saberão que foram silenciados.", + "mute_modal.title": "Silenciar utilizador?", + "mute_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.", + "mute_modal.you_wont_see_posts": "Eles podem continuar a ver as suas publicações, mas você não verá as deles.", "navigation_bar.about": "Sobre", "navigation_bar.advanced_interface": "Abrir na interface web avançada", "navigation_bar.blocks": "Utilizadores bloqueados", diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json index de3d61917..67aad9100 100644 --- a/app/javascript/mastodon/locales/ry.json +++ b/app/javascript/mastodon/locales/ry.json @@ -6,6 +6,8 @@ "about.domain_blocks.silenced.title": "Обмежено", "about.domain_blocks.suspended.explanation": "Ниякі податкы из сього сервера не будут уброблені, усокочені ци поміняні, што чинит невозможнов хоть-яку інтеракцію ци зязок из хосновачами из сього сервера.", "about.domain_blocks.suspended.title": "Заблоковано", + "about.not_available": "Ися інформація не была доступна на сюм сервері.", + "about.powered_by": "Децентралізована медіа основана на {mastodon}", "about.rules": "Правила сервера", "account.account_note_header": "Примітка", "account.add_or_remove_from_list": "Дати авадь забрати из исписа", @@ -16,22 +18,30 @@ "account.block_short": "Заблоковати", "account.blocked": "Заблоковано", "account.browse_more_on_origin_server": "Позирайте бульше на ориґіналнум профілю", + "account.cancel_follow_request": "Удмінити пудписку", "account.copy": "Зкопіровати удкликованя на профіл", + "account.disable_notifications": "Бульше не сповіщати ми коли {name} пише", "account.domain_blocked": "Домен заблокованый", "account.edit_profile": "Управити профіл", + "account.enable_notifications": "Уповістити ня, кой {name} пише", "account.endorse": "Указовати на профілови", "account.featured_tags.last_status_at": "Датум послідньої публикації {date}", "account.featured_tags.last_status_never": "Ниє публикацій", + "account.featured_tags.title": "Ублюблені гештеґы {name}", "account.follow": "Пудписати ся", + "account.follow_back": "Пудписати ся тоже", "account.followers": "Пудписникы", "account.followers.empty": "У сього хосновача раз ниє пудписникув.", "account.following": "Слідуєте", "account.follows.empty": "Сись хосновач щи никого не слідує.", "account.go_to_profile": "Перейти на профіл", + "account.hide_reblogs": "Спрятати друленя уд @{name}", + "account.joined_short": "Датум прикапчованя", "account.languages": "Поміняти убрані языкы", "account.link_verified_on": "Властность сього удкликованя было звірено {date}", "account.media": "Медіа", "account.moved_to": "Хосновач {name} указав, ож новый профіл йим є:", + "account.mute": "Стишити {name}", "account.mute_notifications_short": "Стишити голошіня", "account.mute_short": "Стишити", "account.muted": "Стишено", @@ -44,8 +54,22 @@ "account.requested": "Чекат ся на пудтвердженя. Нажміт убы удмінити запрос на слідованя", "account.requested_follow": "Хосновач {name} просит ся пудписати ся на вас", "account.share": "Пошырити профіл хосновача {name}", + "account.show_reblogs": "Указати друленя уд {name}", "account.unblock": "Розблоковати {name}", "account.unblock_domain": "Розблоковати домен {domain}", + "account.unblock_short": "Розблоковати", + "account.unendorse": "Не указовати на профілови", + "account.unfollow": "Удписати ся", + "account.unmute_notifications_short": "Указовати голошіня", + "account.unmute_short": "Указовати", + "account_note.placeholder": "Клопкніт обы додати примітку", + "admin.dashboard.retention.cohort_size": "Нові хосновачі", + "admin.impact_report.instance_accounts": "Профілі из акаунтув, котрі ся удалят", + "admin.impact_report.instance_followers": "Пудписникы, котрых стратят наші хосновачі", + "admin.impact_report.instance_follows": "Пудписникы, котрых стратят їхні хосновачі", + "admin.impact_report.title": "Вплыв цілком", + "alert.rate_limited.message": "Попробуйте зась по {retry_time, time, medium}.", + "alert.rate_limited.title": "Частота обмежена", "bundle_column_error.return": "Вернути ся на головну", "bundle_column_error.routing.body": "Не можеме найти сяку сторунку. Бизувні сьте, ож URL у адресному шорикови є добрый?", "bundle_column_error.routing.title": "404", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 8c9238bb9..dd21d3030 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -89,6 +89,9 @@ "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skryť zvuk", + "block_modal.show_less": "Zobraziť menej", + "block_modal.show_more": "Zobraziť viac", + "block_modal.title": "Blokovať užívateľa?", "boost_modal.combo": "Nabudúce môžete preskočiť stlačením {combo}", "bundle_column_error.copy_stacktrace": "Kopírovať chybovú hlášku", "bundle_column_error.error.body": "Požadovanú stránku nebolo možné vykresliť. Môže to byť spôsobené chybou v našom kóde alebo problémom s kompatibilitou prehliadača.", @@ -169,6 +172,7 @@ "confirmations.delete_list.message": "Určite chcete tento zoznam trvalo vymazať?", "confirmations.discard_edit_media.confirm": "Zahodiť", "confirmations.discard_edit_media.message": "Máte neuložené zmeny v popise alebo náhľade média, zahodiť ich aj tak?", + "confirmations.domain_block.confirm": "Blokovať server", "confirmations.domain_block.message": "Určite chcete blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych účtov, čo aj odporúčame. Obsah z tejto domény neuvidíte v žiadnej verejnej časovej osi ani v upozorneniach. Vaši sledujúci pochádzajúci z tejto domény budú odstránení.", "confirmations.edit.confirm": "Upraviť", "confirmations.edit.message": "Úpravou prepíšete príspevok, ktorý máte rozpísaný. Určite chcete pokračovať?", @@ -200,6 +204,12 @@ "dismissable_banner.explore_statuses": "Toto sú príspevky z celej sociálnej siete, ktoré sú dnes populárne. Novšie príspevky s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.", "dismissable_banner.explore_tags": "Toto sú hashtagy zo sociálnej siete, ktoré sú dnes populárne. Novšie hashtagy používané viacerými ľuďmi sú radené vyššie.", "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od účtov na sociálnej sieti, ktoré sú sledované účtami z {domain}.", + "domain_block_modal.block": "Blokovať server", + "domain_block_modal.block_account_instead": "Namiesto toho zablokuj @{name}", + "domain_block_modal.title": "Blokovať doménu?", + "domain_pill.server": "Server", + "domain_pill.their_server": "Ich digitálny domov, kde žijú všetky ich príspevky.", + "domain_pill.username": "Používateľské meno", "embed.instructions": "Tento príspevok môžete pridať na svoju webovú stránku použitím tohto kódu.", "embed.preview": "Takto bude vyzerať:", "emoji_button.activity": "Aktivita", @@ -267,6 +277,7 @@ "filter_modal.select_filter.title": "Filtrovanie tohto príspevku", "filter_modal.title.status": "Filtrovanie príspevku", "filtered_notifications_banner.pending_requests": "Oboznámenia od {count, plural, =0 {nikoho} one {jedného človeka} other {# ľudí}} čo môžeš poznať", + "filtered_notifications_banner.title": "Filtrované oznámenia", "firehose.all": "Všetko", "firehose.local": "Tento server", "firehose.remote": "Ostatné servery", @@ -395,6 +406,9 @@ "loading_indicator.label": "Načítavanie…", "media_gallery.toggle_visible": "{number, plural, one {Skryť obrázok} other {Skryť obrázky}}", "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný, pretože ste sa presunuli na {movedToAccount}.", + "mute_modal.hide_options": "Skryť možnosti", + "mute_modal.show_options": "Zobraziť možnosti", + "mute_modal.title": "Stíšiť užívateľa?", "navigation_bar.about": "O tomto serveri", "navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní", "navigation_bar.blocks": "Blokované účty", @@ -433,6 +447,7 @@ "notification.status": "{name} uverejňuje niečo nové", "notification.update": "{name} upravuje príspevok", "notification_requests.accept": "Prijať", + "notification_requests.dismiss": "Zamietnuť", "notification_requests.notifications_from": "Oboznámenia od {name}", "notification_requests.title": "Filtrované oboznámenia", "notifications.clear": "Vyčistiť upozornenia", @@ -469,6 +484,7 @@ "notifications.policy.filter_new_accounts_title": "Nové účty", "notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú", "notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ", + "notifications.policy.title": "Filtrovať oznámenia od…", "notifications_permission_banner.enable": "Povoliť upozornenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nenechajte si nič ujsť", @@ -539,6 +555,7 @@ "refresh": "Obnoviť", "regeneration_indicator.label": "Načítavanie…", "regeneration_indicator.sublabel": "Váš domovský kanál sa pripravuje.", + "relationship_severance_notification.view": "Zobraziť", "relative_time.days": "{number} dní", "relative_time.full.days": "Pred {number, plural, one {# dňom} other {# dňami}}", "relative_time.full.hours": "Pred {number, plural, one {# hodinou} other {# hodinami}}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index de22e98f0..d31b41080 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -471,6 +471,7 @@ "notification.own_poll": "Vaša anketa je zaključena", "notification.poll": "Anketa, v kateri ste sodelovali, je zaključena", "notification.reblog": "{name} je izpostavila/a vašo objavo", + "notification.severed_relationships": "Veze z {name} prekinjene", "notification.status": "{name} je pravkar objavil/a", "notification.update": "{name} je uredil(a) objavo", "notification_requests.accept": "Sprejmi", @@ -516,7 +517,7 @@ "notifications.policy.filter_not_following_title": "Ljudje, ki jim ne sledite", "notifications.policy.filter_private_mentions_hint": "Filtrirano, razen če je odgovor na vašo lastno omembo ali če sledite pošiljatelju", "notifications.policy.filter_private_mentions_title": "Neželene zasebne omembe", - "notifications.policy.title": "Skrij obvestila od …", + "notifications.policy.title": "Filtriraj obvestila od …", "notifications_permission_banner.enable": "Omogoči obvestila na namizju", "notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.", "notifications_permission_banner.title": "Nikoli ne zamudite ničesar", @@ -587,6 +588,12 @@ "refresh": "Osveži", "regeneration_indicator.label": "Nalaganje …", "regeneration_indicator.sublabel": "Vaš domači vir se pripravlja!", + "relationship_severance_notification.purged_data": "očistili skrbniki", + "relationship_severance_notification.relationships": "{count, plural, one {# veza} two {# vezi} few {# veze} other {# vez}}", + "relationship_severance_notification.types.account_suspension": "Račun je bil suspendiran", + "relationship_severance_notification.types.domain_block": "Domena je bila suspendirana", + "relationship_severance_notification.types.user_domain_block": "Domeno ste blokirali", + "relationship_severance_notification.view": "Pogled", "relative_time.days": "{number} d", "relative_time.full.days": "{number, plural, one {pred # dnem} two {pred # dnevoma} few {pred # dnevi} other {pred # dnevi}}", "relative_time.full.hours": "{number, plural, one {pred # uro} two {pred # urama} few {pred # urami} other {pred # urami}}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index dd8f4ad98..a5122d098 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -470,6 +470,7 @@ "notification.own_poll": "Pyetësori juaj ka përfunduar", "notification.poll": "Ka përfunduar një pyetësor ku keni votuar", "notification.reblog": "{name} përforcoi mesazhin tuaj", + "notification.severed_relationships": "Marrëdhëniet me {name} u ndërprenë", "notification.status": "{name} sapo postoi", "notification.update": "{name} përpunoi një postim", "notification_requests.accept": "Pranoje", @@ -584,6 +585,12 @@ "refresh": "Rifreskoje", "regeneration_indicator.label": "Po ngarkohet…", "regeneration_indicator.sublabel": "Prurja juaj vetjake po përgatitet!", + "relationship_severance_notification.purged_data": "spastruar nga përgjegjës", + "relationship_severance_notification.relationships": "{count, plural, one {# marrëdhënie} other {# marrëdhënie}}", + "relationship_severance_notification.types.account_suspension": "Llogaria është pezulluar", + "relationship_severance_notification.types.domain_block": "Përkatësia është pezulluar", + "relationship_severance_notification.types.user_domain_block": "E bllokuat këtë përkatësi", + "relationship_severance_notification.view": "Shiheni", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# ditë} other {# ditë}} më parë", "relative_time.full.hours": "{number, plural, one {# orë} other {# orë}} më parë", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 1bfd3e480..016007f49 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -89,6 +89,7 @@ "announcement.announcement": "Meddelande", "attachments_list.unprocessed": "(obehandlad)", "audio.hide": "Dölj audio", + "block_modal.remote_users_caveat": "Vi kommer att be servern {domain} att respektera ditt beslut. Dock garanteras inte efterlevnad eftersom vissa servrar kan hantera blockeringar på olika sätt. Offentliga inlägg kan fortfarande vara synliga för icke-inloggade användare.", "block_modal.show_less": "Visa mindre", "block_modal.show_more": "Visa mer", "block_modal.they_cant_mention": "De kan inte nämna eller följa dig.", @@ -212,8 +213,12 @@ "domain_block_modal.block_account_instead": "Blockera @{name} istället", "domain_block_modal.they_can_interact_with_old_posts": "Personer från denna server kan interagera med dina gamla inlägg.", "domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.", + "domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.", "domain_block_modal.title": "Blockera domän?", "domain_block_modal.you_will_lose_followers": "Alla dina följare från denna server kommer att tas bort.", + "domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.", + "domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.", + "domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.", "domain_pill.server": "Server", "domain_pill.their_username": "Deras unika identifierare på deras server. Det är möjligt att hitta användare med samma användarnamn på olika servrar.", "domain_pill.username": "Användarnamn", @@ -415,6 +420,8 @@ "mute_modal.hide_options": "Dölj alternativ", "mute_modal.show_options": "Visa alternativ", "mute_modal.they_can_mention_and_follow": "De kan nämna och följa dig, men du ser dem inte.", + "mute_modal.they_wont_know": "De vet inte att de har blivit tysta.", + "mute_modal.title": "Tysta användare?", "mute_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "mute_modal.you_wont_see_posts": "De kan fortfarande se dina inlägg, men du kan inte se deras.", "navigation_bar.about": "Om", @@ -454,6 +461,10 @@ "notification.reblog": "{name} boostade ditt inlägg", "notification.status": "{name} publicerade just ett inlägg", "notification.update": "{name} redigerade ett inlägg", + "notification_requests.accept": "Godkänn", + "notification_requests.dismiss": "Avfärda", + "notification_requests.notifications_from": "Aviseringar från {name}", + "notification_requests.title": "Filtrerade meddelanden", "notifications.clear": "Rensa aviseringar", "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?", "notifications.column_settings.admin.report": "Nya rapporter:", @@ -485,9 +496,12 @@ "notifications.permission_denied": "Skrivbordsaviseringar är otillgängliga på grund av tidigare nekade förfrågningar om behörighet i webbläsaren", "notifications.permission_denied_alert": "Skrivbordsaviseringar kan inte aktiveras, eftersom att webbläsarens behörighet har nekats innan", "notifications.permission_required": "Skrivbordsaviseringar är otillgängliga eftersom att rättigheten som krävs inte har godkänts.", + "notifications.policy.filter_new_accounts.hint": "Skapad inom de senaste {days, plural, one {dagen} other {# dagarna}}", "notifications.policy.filter_new_accounts_title": "Nya konton", "notifications.policy.filter_not_followers_title": "Personer som inte följer dig", "notifications.policy.filter_not_following_title": "Personer du inte följer", + "notifications.policy.filter_private_mentions_title": "Oombedda privata omnämnanden", + "notifications.policy.title": "Filtrera ut aviseringar från…", "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar", "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", "notifications_permission_banner.title": "Missa aldrig något", @@ -558,6 +572,11 @@ "refresh": "Läs om", "regeneration_indicator.label": "Laddar…", "regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!", + "relationship_severance_notification.purged_data": "rensad av administratörer", + "relationship_severance_notification.types.account_suspension": "Ditt konto har blivit avstängt", + "relationship_severance_notification.types.domain_block": "Domänen har stängts av", + "relationship_severance_notification.types.user_domain_block": "Du blockerade denna domän", + "relationship_severance_notification.view": "Visa", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sedan", "relative_time.full.hours": "{number, plural, one {# timme} other {# timmar}} sedan", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index bf88e53c9..799400ea3 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -471,6 +471,7 @@ "notification.own_poll": "Anketiniz sona erdi", "notification.poll": "Oy verdiğiniz bir anket sona erdi", "notification.reblog": "{name} gönderini yeniden paylaştı", + "notification.severed_relationships": "{name} ile ilişkiler koptu", "notification.status": "{name} az önce gönderdi", "notification.update": "{name} bir gönderiyi düzenledi", "notification_requests.accept": "Onayla", @@ -587,6 +588,12 @@ "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", "regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!", + "relationship_severance_notification.purged_data": "yöneticiler tarafından temizlendi", + "relationship_severance_notification.relationships": "{count, plural, one {# ilişki} other {# ilişki}}", + "relationship_severance_notification.types.account_suspension": "Hesap askıya alındı", + "relationship_severance_notification.types.domain_block": "Alan adı askıya alındı", + "relationship_severance_notification.types.user_domain_block": "Bu alan adını engellediniz", + "relationship_severance_notification.view": "Görüntüle", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# gün} other {# gün}} önce", "relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} önce", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index bb0d0b39e..3456327a6 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -89,6 +89,14 @@ "announcement.announcement": "Оголошення", "attachments_list.unprocessed": "(не оброблено)", "audio.hide": "Сховати аудіо", + "block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.", + "block_modal.show_less": "Згорнути", + "block_modal.show_more": "Розгорнути", + "block_modal.they_cant_mention": "Вони не можуть згадувати та стежити за вами.", + "block_modal.they_cant_see_posts": "Вони не можуть бачити ваших дописів, а ви бачитимете їхні.", + "block_modal.they_will_know": "Вони можуть бачити, що вони заблоковані.", + "block_modal.title": "Заблокувати користувача?", + "block_modal.you_wont_see_mentions": "Ви не бачитимете дописів, де їх згадано.", "boost_modal.combo": "Ви можете натиснути {combo}, щоби пропустити це наступного разу", "bundle_column_error.copy_stacktrace": "Копіювати звіт про помилку", "bundle_column_error.error.body": "Неможливо показати запитану сторінку. Це може бути спричинено помилкою у нашому коді, або через проблему сумісності з браузером.", @@ -169,6 +177,7 @@ "confirmations.delete_list.message": "Ви впевнені, що хочете видалити цей список назавжди?", "confirmations.discard_edit_media.confirm": "Відкинути", "confirmations.discard_edit_media.message": "У вас є незбережені зміни в описі медіа або попереднього перегляду, все одно відкинути їх?", + "confirmations.domain_block.confirm": "Блокувати сервер", "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати або приховати лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.", "confirmations.edit.confirm": "Змінити", "confirmations.edit.message": "Редагування перезапише повідомлення, яке ви зараз пишете. Ви впевнені, що хочете продовжити?", @@ -200,6 +209,16 @@ "dismissable_banner.explore_statuses": "Ці дописи з цього та інших серверів децентралізованої мережі зараз набирають популярності на цьому сервері. Новіші дописи з частішим поширенням та додаванням до вподобаного мають вищий рейтинг.", "dismissable_banner.explore_tags": "Ці хештеги зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі. Хештеги, які використовуються більшою кількістю людей, мають вищий рейтинг.", "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей в соціальній мережі, на які підписані люди в {domain}.", + "domain_block_modal.block": "Блокувати сервер", + "domain_block_modal.block_account_instead": "Блокувати @{name} натомість", + "domain_block_modal.they_can_interact_with_old_posts": "Люди з цього сервера можуть взаємодіяти зі своїми старими дописами.", + "domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.", + "domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.", + "domain_block_modal.title": "Заблокувати домен?", + "domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.", + "domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.", + "domain_pill.server": "Сервер", + "domain_pill.username": "Ім'я користувача", "embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.", "embed.preview": "Ось який вигляд це матиме:", "emoji_button.activity": "Діяльність", @@ -397,6 +416,15 @@ "loading_indicator.label": "Завантаження…", "media_gallery.toggle_visible": "{number, plural, one {Приховати зображення} other {Приховати зображення}}", "moved_to_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений, оскільки вас перенесено до {movedToAccount}.", + "mute_modal.hide_from_notifications": "Сховати зі сповіщень", + "mute_modal.hide_options": "Сховати опції", + "mute_modal.indefinite": "Доки я не перестану ігнорувати їх", + "mute_modal.show_options": "Показати опції", + "mute_modal.they_can_mention_and_follow": "Вони зможуть згадувати та стежити за вами, але ви їх не бачитимете.", + "mute_modal.they_wont_know": "Вони не знатимуть, що їх ігнорують.", + "mute_modal.title": "Ігнорувати користувача?", + "mute_modal.you_wont_see_mentions": "Ви не бачитимете дописів, де їх згадано.", + "mute_modal.you_wont_see_posts": "Вони все ще можуть бачити ваші дописи, але ви не бачитимете їхніх.", "navigation_bar.about": "Про застосунок", "navigation_bar.advanced_interface": "Відкрити в розширеному вебінтерфейсі", "navigation_bar.blocks": "Заблоковані користувачі", @@ -432,6 +460,7 @@ "notification.own_poll": "Ваше опитування завершилося", "notification.poll": "Опитування, у якому ви голосували, скінчилося", "notification.reblog": "{name} поширює ваш допис", + "notification.severed_relationships": "Зв'язки з {name} розірвані", "notification.status": "{name} щойно дописує", "notification.update": "{name} змінює допис", "notification_requests.accept": "Прийняти", @@ -544,6 +573,12 @@ "refresh": "Оновити", "regeneration_indicator.label": "Завантаження…", "regeneration_indicator.sublabel": "Хвилинку, ми готуємо вашу стрічку!", + "relationship_severance_notification.purged_data": "очищено адміністраторами", + "relationship_severance_notification.relationships": "{count, plural, one {# зв'язок} few {# зв'язки} many {# зв'язків} other {# зв'язок}}", + "relationship_severance_notification.types.account_suspension": "Обліковий запис призупинено", + "relationship_severance_notification.types.domain_block": "Домен призупинено", + "relationship_severance_notification.types.user_domain_block": "Ви заблокували цей домен", + "relationship_severance_notification.view": "Вигляд", "relative_time.days": "{number}д", "relative_time.full.days": "{number, plural, one {# день} few {# дні} other {# днів}} тому", "relative_time.full.hours": "{number, plural, one {# година} few {# години} other {# годин}} тому", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index b51b832b2..9b09d2145 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -471,6 +471,7 @@ "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", "notification.poll": "Cuộc bình chọn đã kết thúc", "notification.reblog": "{name} đăng lại tút của bạn", + "notification.severed_relationships": "Mối quan hệ với {name} bị cắt đứt", "notification.status": "{name} đăng tút mới", "notification.update": "{name} đã sửa tút", "notification_requests.accept": "Chấp nhận", @@ -587,6 +588,12 @@ "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Trang chủ của bạn đang được cập nhật!", + "relationship_severance_notification.purged_data": "bị quản trị viên xóa", + "relationship_severance_notification.relationships": "{count, plural, other {# mối quan hệ}}", + "relationship_severance_notification.types.account_suspension": "Người này đã bị vô hiệu hóa", + "relationship_severance_notification.types.domain_block": "Máy chủ này đã bị vô hiệu hóa", + "relationship_severance_notification.types.user_domain_block": "Bạn đã chặn máy chủ này", + "relationship_severance_notification.view": "Chi tiết", "relative_time.days": "{number} ngày", "relative_time.full.days": "{number, plural, other {# ngày}}", "relative_time.full.hours": "{number, plural, other {# giờ}}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 1a39dc235..cc68ab762 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -471,6 +471,7 @@ "notification.own_poll": "你的投票已经结束", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转发了你的嘟文", + "notification.severed_relationships": "与 {name} 的关系已被切断", "notification.status": "{name} 刚刚发布嘟文", "notification.update": "{name} 编辑了嘟文", "notification_requests.accept": "接受", @@ -587,6 +588,12 @@ "refresh": "刷新", "regeneration_indicator.label": "加载中…", "regeneration_indicator.sublabel": "你的主页动态正在准备中!", + "relationship_severance_notification.purged_data": "被管理员清除", + "relationship_severance_notification.relationships": "{count, plural, other {# 条关系}}", + "relationship_severance_notification.types.account_suspension": "账户已被封禁", + "relationship_severance_notification.types.domain_block": "域名已被封禁", + "relationship_severance_notification.types.user_domain_block": "你屏蔽了这个域名", + "relationship_severance_notification.view": "查看", "relative_time.days": "{number} 天前", "relative_time.full.days": "{number, plural, one {# 天} other {# 天}}前", "relative_time.full.hours": "{number, plural, one {# 小时} other {# 小时}}前", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 30313d92f..228430dd8 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -471,6 +471,7 @@ "notification.own_poll": "您的投票已結束", "notification.poll": "您曾投過的投票已經結束", "notification.reblog": "{name} 已轉嘟您的嘟文", + "notification.severed_relationships": "已斷絕與 {name} 之服務關係", "notification.status": "{name} 剛剛嘟文", "notification.update": "{name} 已編輯嘟文", "notification_requests.accept": "接受", @@ -587,6 +588,12 @@ "refresh": "重新整理", "regeneration_indicator.label": "載入中…", "regeneration_indicator.sublabel": "您的首頁時間軸正在準備中!", + "relationship_severance_notification.purged_data": "已被管理員清除", + "relationship_severance_notification.relationships": "{count, plural, other {# 個服務關係}}", + "relationship_severance_notification.types.account_suspension": "該帳號已被停權", + "relationship_severance_notification.types.domain_block": "該網域已被停權", + "relationship_severance_notification.types.user_domain_block": "您已封鎖此網域", + "relationship_severance_notification.view": "檢視", "relative_time.days": "{number} 天", "relative_time.full.days": "{number, plural, other {# 天}}前", "relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前", diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 8dc280185..97218e9f7 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -45,6 +45,7 @@ import { INIT_MEDIA_EDIT_MODAL, COMPOSE_CHANGE_MEDIA_DESCRIPTION, COMPOSE_CHANGE_MEDIA_FOCUS, + COMPOSE_CHANGE_MEDIA_ORDER, COMPOSE_SET_STATUS, COMPOSE_FOCUS, } from '../actions/compose'; @@ -536,6 +537,14 @@ export default function compose(state = initialState, action) { return state.set('language', action.language); case COMPOSE_FOCUS: return state.set('focusDate', new Date()).update('text', text => text.length > 0 ? text : action.defaultText); + case COMPOSE_CHANGE_MEDIA_ORDER: + return state.update('media_attachments', list => { + const indexA = list.findIndex(x => x.get('id') === action.a); + const moveItem = list.get(indexA); + const indexB = list.findIndex(x => x.get('id') === action.b); + + return list.splice(indexA, 1).splice(indexB, 0, moveItem); + }); default: return state; } diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index b1c80b3d4..bc8593643 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -55,6 +55,7 @@ export const notificationToMap = notification => ImmutableMap({ created_at: notification.created_at, status: notification.status ? notification.status.id : null, report: notification.report ? fromJS(notification.report) : null, + event: notification.event ? fromJS(notification.event) : null, }); const normalizeNotification = (state, notification, usePendingItems) => { diff --git a/app/javascript/material-icons/400-20px/settings-fill.svg b/app/javascript/material-icons/400-20px/settings-fill.svg new file mode 100644 index 000000000..f5de77821 --- /dev/null +++ b/app/javascript/material-icons/400-20px/settings-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-20px/settings.svg b/app/javascript/material-icons/400-20px/settings.svg new file mode 100644 index 000000000..472569ab6 --- /dev/null +++ b/app/javascript/material-icons/400-20px/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/archive-fill.svg b/app/javascript/material-icons/400-24px/archive-fill.svg deleted file mode 100644 index bb604288f..000000000 --- a/app/javascript/material-icons/400-24px/archive-fill.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/archive.svg b/app/javascript/material-icons/400-24px/archive.svg deleted file mode 100644 index 6b72fca4e..000000000 --- a/app/javascript/material-icons/400-24px/archive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/heart_broken-fill.svg b/app/javascript/material-icons/400-24px/heart_broken-fill.svg new file mode 100644 index 000000000..75ff3932c --- /dev/null +++ b/app/javascript/material-icons/400-24px/heart_broken-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/heart_broken.svg b/app/javascript/material-icons/400-24px/heart_broken.svg new file mode 100644 index 000000000..2ce7de57f --- /dev/null +++ b/app/javascript/material-icons/400-24px/heart_broken.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inventory_2-fill.svg b/app/javascript/material-icons/400-24px/inventory_2-fill.svg new file mode 100644 index 000000000..10ec85da0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/inventory_2-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inventory_2.svg b/app/javascript/material-icons/400-24px/inventory_2.svg new file mode 100644 index 000000000..d00fb1a63 --- /dev/null +++ b/app/javascript/material-icons/400-24px/inventory_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/link_off-fill.svg b/app/javascript/material-icons/400-24px/link_off-fill.svg new file mode 100644 index 000000000..618e77534 --- /dev/null +++ b/app/javascript/material-icons/400-24px/link_off-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/link_off.svg b/app/javascript/material-icons/400-24px/link_off.svg new file mode 100644 index 000000000..618e77534 --- /dev/null +++ b/app/javascript/material-icons/400-24px/link_off.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 8b7e5f5e8..4bb3216e4 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1688,6 +1688,7 @@ body > [data-popper-placement] { .animated-number { color: $secondary-text-color; + font-weight: 500; } } @@ -4847,6 +4848,11 @@ a.status-card { position: relative; margin-top: 5px; z-index: 2; + background: var(--dropdown-background-color); + backdrop-filter: var(--background-filter); + border: 1px solid var(--dropdown-border-color); + box-shadow: var(--dropdown-shadow); + border-radius: 5px; .emoji-mart-scroll { transition: opacity 200ms ease; @@ -8580,6 +8586,12 @@ noscript { color: $darker-text-color; margin-bottom: 15px; text-align: center; + + .icon { + width: 20px; + height: 20px; + vertical-align: middle; + } } } @@ -8811,8 +8823,9 @@ noscript { .safety-action-modal, .interaction-modal { - max-width: 90vw; + max-width: 100vw; width: 600px; + overflow-y: auto; } .interaction-modal { diff --git a/app/javascript/styles/mastodon/emoji_picker.scss b/app/javascript/styles/mastodon/emoji_picker.scss index fec0c10dd..14ce6a14b 100644 --- a/app/javascript/styles/mastodon/emoji_picker.scss +++ b/app/javascript/styles/mastodon/emoji_picker.scss @@ -14,21 +14,9 @@ } .emoji-mart-bar { - border: 0 solid var(--dropdown-border-color); - &:first-child { - border-bottom-width: 1px; - border-top-left-radius: 5px; - border-top-right-radius: 5px; background: var(--dropdown-border-color); } - - &:last-child { - border-top-width: 1px; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - display: none; - } } .emoji-mart-anchors { @@ -94,7 +82,6 @@ height: 270px; max-height: 35vh; padding: 0 6px 6px; - background: var(--dropdown-background-color); will-change: transform; &::-webkit-scrollbar-track:hover, @@ -106,7 +93,6 @@ .emoji-mart-search { padding: 10px; padding-inline-end: 45px; - background: var(--dropdown-background-color); position: relative; input { @@ -195,7 +181,6 @@ width: 100%; font-weight: 500; padding: 5px 6px; - background: var(--dropdown-background-color); } } diff --git a/app/javascript/styles/mastodon/rich_text.scss b/app/javascript/styles/mastodon/rich_text.scss index c77c23bc4..c57db26e0 100644 --- a/app/javascript/styles/mastodon/rich_text.scss +++ b/app/javascript/styles/mastodon/rich_text.scss @@ -1,5 +1,6 @@ .status__content__text, .e-content, +.edit-indicator__content, .reply-indicator__content { pre, blockquote { @@ -55,10 +56,3 @@ list-style-type: decimal; } } - -.reply-indicator__content { - blockquote { - border-left-color: $inverted-text-color; - color: $inverted-text-color; - } -} diff --git a/app/models/account_relationship_severance_event.rb b/app/models/account_relationship_severance_event.rb new file mode 100644 index 000000000..c1269fad6 --- /dev/null +++ b/app/models/account_relationship_severance_event.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +# +# == Schema Information +# +# Table name: account_relationship_severance_events +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# relationship_severance_event_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# followers_count :integer default(0), not null +# following_count :integer default(0), not null +# +class AccountRelationshipSeveranceEvent < ApplicationRecord + self.ignored_columns += %w( + relationships_count + ) + + belongs_to :account + belongs_to :relationship_severance_event + + has_many :severed_relationships, through: :relationship_severance_event + + delegate :type, + :target_name, + :purged, + :purged?, + to: :relationship_severance_event, + prefix: false + + before_create :set_relationships_count! + + private + + def set_relationships_count! + self.followers_count = severed_relationships.about_local_account(account).passive.count + self.following_count = severed_relationships.about_local_account(account).active.count + end +end diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb index d09df6f5e..c05eb9801 100644 --- a/app/models/canonical_email_block.rb +++ b/app/models/canonical_email_block.rb @@ -20,6 +20,7 @@ class CanonicalEmailBlock < ApplicationRecord validates :canonical_email_hash, presence: true, uniqueness: true scope :matching_email, ->(email) { where(canonical_email_hash: email_to_canonical_email_hash(email)) } + scope :matching_account, ->(account) { matching_email(account&.user_email).or(where(reference_account: account)) } def to_log_human_identifier canonical_email_hash diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb index 85363febf..a32697b66 100644 --- a/app/models/concerns/account/interactions.rb +++ b/app/models/concerns/account/interactions.rb @@ -83,6 +83,11 @@ module Account::Interactions has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account + with_options class_name: 'SeveredRelationship', dependent: :destroy do + has_many :severed_relationships, foreign_key: 'local_account_id', inverse_of: :local_account + has_many :remote_severed_relationships, foreign_key: 'remote_account_id', inverse_of: :remote_account + end + # Account notes has_many :account_notes, dependent: :destroy diff --git a/app/models/concerns/account/merging.rb b/app/models/concerns/account/merging.rb index 960ee1819..bd8b16223 100644 --- a/app/models/concerns/account/merging.rb +++ b/app/models/concerns/account/merging.rb @@ -27,6 +27,16 @@ module Account::Merging end end + [ + Notification, NotificationPermission, NotificationRequest + ].each do |klass| + klass.where(from_account_id: other_account.id).reorder(nil).find_each do |record| + record.update_attribute(:from_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + end + target_classes = [ Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin, AccountNote @@ -48,6 +58,18 @@ module Account::Merging record.update_attribute(:account_warning_id, id) end + SeveredRelationship.about_local_account(other_account).reorder(nil).find_each do |record| + record.update_attribute(:local_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + + SeveredRelationship.about_remote_account(other_account).reorder(nil).find_each do |record| + record.update_attribute(:remote_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + # Some follow relationships have moved, so the cache is stale Rails.cache.delete_matched("followers_hash:#{id}:*") Rails.cache.delete_matched("relationships:#{id}:*") diff --git a/app/models/concerns/browser_detection.rb b/app/models/concerns/browser_detection.rb new file mode 100644 index 000000000..d42d0a5c9 --- /dev/null +++ b/app/models/concerns/browser_detection.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module BrowserDetection + extend ActiveSupport::Concern + + included do + before_save :assign_user_agent + end + + def detection + @detection ||= Browser.new(user_agent) + end + + def browser + detection.id + end + + def platform + detection.platform.id + end + + private + + def assign_user_agent + self.user_agent ||= '' + end +end diff --git a/app/models/concerns/user/has_settings.rb b/app/models/concerns/user/has_settings.rb index bfa8aa2ca..65373325f 100644 --- a/app/models/concerns/user/has_settings.rb +++ b/app/models/concerns/user/has_settings.rb @@ -27,10 +27,6 @@ module User::HasSettings settings['default_sensitive'] end - def setting_unfollow_modal - settings['web.unfollow_modal'] - end - def setting_boost_modal settings['web.reblog_modal'] end diff --git a/app/models/login_activity.rb b/app/models/login_activity.rb index 654dd623a..240d571c0 100644 --- a/app/models/login_activity.rb +++ b/app/models/login_activity.rb @@ -16,21 +16,11 @@ # class LoginActivity < ApplicationRecord + include BrowserDetection + enum :authentication_method, { password: 'password', otp: 'otp', webauthn: 'webauthn', sign_in_token: 'sign_in_token', omniauth: 'omniauth' } belongs_to :user validates :authentication_method, inclusion: { in: authentication_methods.keys } - - def detection - @detection ||= Browser.new(user_agent) - end - - def browser - detection.id - end - - def platform - detection.platform.id - end end diff --git a/app/models/notification.rb b/app/models/notification.rb index 861a15436..b2376c78a 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -54,6 +54,9 @@ class Notification < ApplicationRecord update: { filterable: false, }.freeze, + severed_relationships: { + filterable: false, + }.freeze, 'admin.sign_up': { filterable: false, }.freeze, @@ -86,6 +89,7 @@ class Notification < ApplicationRecord belongs_to :favourite, inverse_of: :notification belongs_to :poll, inverse_of: false belongs_to :report, inverse_of: false + belongs_to :account_relationship_severance_event, inverse_of: false end validates :type, inclusion: { in: TYPES } @@ -182,6 +186,11 @@ class Notification < ApplicationRecord self.from_account_id = activity&.status&.account_id when 'Account' self.from_account_id = activity&.id + when 'AccountRelationshipSeveranceEvent' + # 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 + self.from_account_id = account_id end end diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index 6901b3985..6e9cae662 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -7,7 +7,7 @@ # id :bigint(8) not null, primary key # account_id :bigint(8) not null # from_account_id :bigint(8) not null -# last_status_id :bigint(8) not null +# last_status_id :bigint(8) # notifications_count :bigint(8) default(0), not null # dismissed :boolean default(FALSE), not null # created_at :datetime not null diff --git a/app/models/relationship_severance_event.rb b/app/models/relationship_severance_event.rb new file mode 100644 index 000000000..30ada2576 --- /dev/null +++ b/app/models/relationship_severance_event.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: relationship_severance_events +# +# id :bigint(8) not null, primary key +# type :integer not null +# target_name :string not null +# purged :boolean default(FALSE), not null +# created_at :datetime not null +# updated_at :datetime not null +# +class RelationshipSeveranceEvent < ApplicationRecord + self.inheritance_column = nil + + has_many :severed_relationships, inverse_of: :relationship_severance_event, dependent: :delete_all + + enum :type, { + domain_block: 0, + user_domain_block: 1, + account_suspension: 2, + } + + scope :about_local_account, ->(account) { where(id: SeveredRelationship.about_local_account(account).select(:relationship_severance_event_id)) } + + def import_from_active_follows!(follows) + import_from_follows!(follows, true) + end + + def import_from_passive_follows!(follows) + import_from_follows!(follows, false) + end + + def affected_local_accounts + Account.where(id: severed_relationships.select(:local_account_id)) + end + + private + + def import_from_follows!(follows, active) + SeveredRelationship.insert_all( + follows.pluck(:account_id, :target_account_id, :show_reblogs, :notify, :languages).map do |account_id, target_account_id, show_reblogs, notify, languages| + { + local_account_id: active ? account_id : target_account_id, + remote_account_id: active ? target_account_id : account_id, + show_reblogs: show_reblogs, + notify: notify, + languages: languages, + relationship_severance_event_id: id, + direction: active ? :active : :passive, + } + end + ) + end +end diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index c67180d3b..d0a77daf0 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -16,6 +16,8 @@ # class SessionActivation < ApplicationRecord + include BrowserDetection + belongs_to :user, inverse_of: :session_activations belongs_to :access_token, class_name: 'Doorkeeper::AccessToken', dependent: :destroy, optional: true belongs_to :web_push_subscription, class_name: 'Web::PushSubscription', dependent: :destroy, optional: true @@ -24,19 +26,6 @@ class SessionActivation < ApplicationRecord to: :access_token, allow_nil: true - def detection - @detection ||= Browser.new(user_agent) - end - - def browser - detection.id - end - - def platform - detection.platform.id - end - - before_save :assign_user_agent before_create :assign_access_token class << self @@ -67,10 +56,6 @@ class SessionActivation < ApplicationRecord private - def assign_user_agent - self.user_agent = '' if user_agent.nil? - end - def assign_access_token self.access_token = Doorkeeper::AccessToken.create!(access_token_attributes) end diff --git a/app/models/severed_relationship.rb b/app/models/severed_relationship.rb new file mode 100644 index 000000000..64b5b0001 --- /dev/null +++ b/app/models/severed_relationship.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: severed_relationships +# +# id :bigint(8) not null, primary key +# relationship_severance_event_id :bigint(8) not null +# local_account_id :bigint(8) not null +# remote_account_id :bigint(8) not null +# direction :integer not null +# show_reblogs :boolean +# notify :boolean +# languages :string is an Array +# created_at :datetime not null +# updated_at :datetime not null +# +class SeveredRelationship < ApplicationRecord + belongs_to :relationship_severance_event + belongs_to :local_account, class_name: 'Account' + belongs_to :remote_account, class_name: 'Account' + + enum :direction, { + passive: 0, # analogous to `local_account.passive_relationships` + active: 1, # analogous to `local_account.active_relationships` + } + + scope :about_local_account, ->(account) { where(local_account: account) } + scope :about_remote_account, ->(account) { where(remote_account: account) } + + scope :active, -> { where(direction: :active) } + scope :passive, -> { where(direction: :passive) } + + def account + active? ? local_account : remote_account + end + + def target_account + active? ? remote_account : local_account + end +end diff --git a/app/models/user.rb b/app/models/user.rb index ee9116b9f..17ec90c9e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -14,7 +14,6 @@ # sign_in_count :integer default(0), not null # current_sign_in_at :datetime # last_sign_in_at :datetime -# admin :boolean default(FALSE), not null # confirmation_token :string # confirmed_at :datetime # confirmation_sent_at :datetime @@ -29,7 +28,6 @@ # otp_backup_codes :string is an Array # account_id :bigint(8) not null # disabled :boolean default(FALSE), not null -# moderator :boolean default(FALSE), not null # invite_id :bigint(8) # chosen_languages :string is an Array # created_by_application_id :bigint(8) diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 030cbec4d..6571632fc 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -27,7 +27,6 @@ class UserSettings setting :disable_swiping, default: false setting :delete_modal, default: true setting :reblog_modal, default: false - setting :unfollow_modal, default: true setting :reduce_motion, default: false setting :expand_content_warnings, default: false setting :display_media, default: 'default', in: %w(default show_all hide_all) diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 9f7921461..72aaabcfc 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -17,7 +17,6 @@ class InitialStateSerializer < ActiveModel::Serializer if object.current_account store[:me] = object.current_account.id.to_s - store[:unfollow_modal] = object_account_user.setting_unfollow_modal store[:boost_modal] = object_account_user.setting_boost_modal store[:delete_modal] = object_account_user.setting_delete_modal store[:auto_play_gif] = object_account_user.setting_auto_play_gif diff --git a/app/serializers/rest/account_relationship_severance_event_serializer.rb b/app/serializers/rest/account_relationship_severance_event_serializer.rb new file mode 100644 index 000000000..751bc103c --- /dev/null +++ b/app/serializers/rest/account_relationship_severance_event_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::AccountRelationshipSeveranceEventSerializer < ActiveModel::Serializer + attributes :id, :type, :purged, :target_name, :followers_count, :following_count, :created_at + + def id + object.id.to_s + end +end diff --git a/app/serializers/rest/notification_serializer.rb b/app/serializers/rest/notification_serializer.rb index 137fc53dd..36a0adfec 100644 --- a/app/serializers/rest/notification_serializer.rb +++ b/app/serializers/rest/notification_serializer.rb @@ -6,6 +6,7 @@ class REST::NotificationSerializer < ActiveModel::Serializer 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 :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer def id object.id.to_s @@ -18,4 +19,8 @@ class REST::NotificationSerializer < ActiveModel::Serializer def report_type? object.type == :'admin.report' end + + def relationship_severance_event? + object.type == :severed_relationships + end end diff --git a/app/services/after_block_domain_from_account_service.rb b/app/services/after_block_domain_from_account_service.rb index 89d007c1c..adb17845c 100644 --- a/app/services/after_block_domain_from_account_service.rb +++ b/app/services/after_block_domain_from_account_service.rb @@ -9,18 +9,21 @@ class AfterBlockDomainFromAccountService < BaseService def call(account, domain) @account = account @domain = domain + @domain_block_event = nil clear_notifications! remove_follows! reject_existing_followers! reject_pending_follow_requests! + notify_of_severed_relationships! end private def remove_follows! - @account.active_relationships.where(target_account: Account.where(domain: @domain)).includes(:target_account).reorder(nil).find_each do |follow| - UnfollowService.new.call(@account, follow.target_account) + @account.active_relationships.where(target_account: Account.where(domain: @domain)).includes(:target_account).reorder(nil).in_batches do |follows| + domain_block_event.import_from_active_follows!(follows) + follows.each { |follow| UnfollowService.new.call(@account, follow.target_account) } end end @@ -29,8 +32,9 @@ class AfterBlockDomainFromAccountService < BaseService end def reject_existing_followers! - @account.passive_relationships.where(account: Account.where(domain: @domain)).includes(:account).reorder(nil).find_each do |follow| - reject_follow!(follow) + @account.passive_relationships.where(account: Account.where(domain: @domain)).includes(:account).reorder(nil).in_batches do |follows| + domain_block_event.import_from_passive_follows!(follows) + follows.each { |follow| reject_follow!(follow) } end end @@ -47,4 +51,15 @@ class AfterBlockDomainFromAccountService < BaseService ActivityPub::DeliveryWorker.perform_async(Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), @account.id, follow.account.inbox_url) end + + def notify_of_severed_relationships! + return if @domain_block_event.nil? + + event = AccountRelationshipSeveranceEvent.create!(account: @account, relationship_severance_event: @domain_block_event) + LocalNotificationWorker.perform_async(@account.id, event.id, 'AccountRelationshipSeveranceEvent', 'severed_relationships') + end + + def domain_block_event + @domain_block_event ||= RelationshipSeveranceEvent.create!(type: :user_domain_block, target_name: @domain) + end end diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 76cc36ff6..00d020d2b 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -5,8 +5,11 @@ class BlockDomainService < BaseService def call(domain_block, update = false) @domain_block = domain_block + @domain_block_event = nil + process_domain_block! process_retroactive_updates! if update + notify_of_severed_relationships! end private @@ -37,7 +40,17 @@ class BlockDomainService < BaseService blocked_domain_accounts.without_suspended.in_batches.update_all(suspended_at: @domain_block.created_at, suspension_origin: :local) blocked_domain_accounts.where(suspended_at: @domain_block.created_at).reorder(nil).find_each do |account| - DeleteAccountService.new.call(account, reserve_username: true, suspended_at: @domain_block.created_at) + DeleteAccountService.new.call(account, reserve_username: true, suspended_at: @domain_block.created_at, relationship_severance_event: domain_block_event) + end + end + + def notify_of_severed_relationships! + return if @domain_block_event.nil? + + # TODO: check how efficient that query is, also check `push_bulk`/`perform_bulk` + @domain_block_event.affected_local_accounts.reorder(nil).find_each do |account| + event = AccountRelationshipSeveranceEvent.create!(account: account, relationship_severance_event: @domain_block_event) + LocalNotificationWorker.perform_async(account.id, event.id, 'AccountRelationshipSeveranceEvent', 'severed_relationships') end end @@ -45,6 +58,10 @@ class BlockDomainService < BaseService domain_block.domain end + def domain_block_event + @domain_block_event ||= RelationshipSeveranceEvent.create!(type: :domain_block, target_name: blocked_domain) + end + def blocked_domain_accounts Account.by_domain_and_subdomains(blocked_domain) end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 7c7cb97df..328d8ae8f 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -58,6 +58,8 @@ class DeleteAccountService < BaseService reports targeted_moderation_notes targeted_reports + severed_relationships + remote_severed_relationships ).freeze # Suspend or remove an account and remove as much of its data @@ -72,6 +74,7 @@ class DeleteAccountService < BaseService # @option [Boolean] :skip_side_effects Side effects are ActivityPub and streaming API payloads # @option [Boolean] :skip_activitypub Skip sending ActivityPub payloads. Implied by :skip_side_effects # @option [Time] :suspended_at Only applicable when :reserve_username is true + # @option [RelationshipSeveranceEvent] :relationship_severance_event Event used to record severed relationships not initiated by the user def call(account, **options) @account = account @options = { reserve_username: true, reserve_email: true }.merge(options) @@ -84,6 +87,7 @@ class DeleteAccountService < BaseService @options[:skip_activitypub] = true if @options[:skip_side_effects] + record_severed_relationships! distribute_activities! purge_content! fulfill_deletion_request! @@ -181,6 +185,7 @@ class DeleteAccountService < BaseService # polymorphically associated notifications generated by this account Notification.where(from_account: @account).in_batches.delete_all + NotificationRequest.where(from_account: @account).in_batches.delete_all end def purge_favourites! @@ -266,6 +271,20 @@ class DeleteAccountService < BaseService end end + def record_severed_relationships! + return if relationship_severance_event.nil? + + @account.active_relationships.in_batches do |follows| + # NOTE: these follows are passive with regards to the local accounts + relationship_severance_event.import_from_passive_follows!(follows) + end + + @account.passive_relationships.in_batches do |follows| + # NOTE: these follows are active with regards to the local accounts + relationship_severance_event.import_from_active_follows!(follows) + end + end + def delete_actor_json @delete_actor_json ||= Oj.dump(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account, always_sign: true)) end @@ -305,4 +324,8 @@ class DeleteAccountService < BaseService def skip_activitypub? @options[:skip_activitypub] end + + def relationship_severance_event + @options[:relationship_severance_event] + end end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index f3d16f1be..c83e4c017 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -9,6 +9,8 @@ class NotifyService < BaseService update poll status + # TODO: this probably warrants an email notification + severed_relationships ).freeze class DismissCondition @@ -20,7 +22,7 @@ class NotifyService < BaseService def dismiss? blocked = @recipient.unavailable? - blocked ||= from_self? && @notification.type != :poll + blocked ||= from_self? && @notification.type != :poll && @notification.type != :severed_relationships return blocked if message? && from_staff? diff --git a/app/services/purge_domain_service.rb b/app/services/purge_domain_service.rb index 9df81f13e..ca0f0d441 100644 --- a/app/services/purge_domain_service.rb +++ b/app/services/purge_domain_service.rb @@ -2,10 +2,26 @@ class PurgeDomainService < BaseService def call(domain) - Account.remote.where(domain: domain).reorder(nil).find_each do |account| - DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) - end - CustomEmoji.remote.where(domain: domain).reorder(nil).find_each(&:destroy) + @domain = domain + + purge_relationship_severance_events! + purge_accounts! + purge_emojis! + Instance.refresh end + + def purge_relationship_severance_events! + RelationshipSeveranceEvent.where(type: [:domain_block, :user_domain_block], target_name: @domain).in_batches.update_all(purged: true) + end + + def purge_accounts! + Account.remote.where(domain: @domain).reorder(nil).find_each do |account| + DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) + end + end + + def purge_emojis! + CustomEmoji.remote.where(domain: @domain).reorder(nil).find_each(&:destroy) + end end diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index da2f2055d..d380d807a 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -30,7 +30,7 @@ = render 'admin/accounts/counters', account: @account - if @account.local? && @account.user.nil? - = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) + = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.matching_account(@account).exists? - else .table-wrapper %table.table.inline-table diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 3597152e0..8a8099278 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -16,19 +16,43 @@ .dashboard .dashboard__item - = react_admin_component :counter, measure: 'new_users', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.new_users'), href: admin_accounts_path(origin: 'local') + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_accounts_path(origin: 'local'), + label: t('admin.dashboard.new_users'), + measure: 'new_users', + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'active_users', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.active_users'), href: admin_accounts_path(origin: 'local') + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_accounts_path(origin: 'local'), + label: t('admin.dashboard.active_users'), + measure: 'active_users', + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'interactions', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.interactions') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.dashboard.interactions'), + measure: 'interactions', + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'opened_reports', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.opened_reports'), href: admin_reports_path + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_reports_path, + label: t('admin.dashboard.opened_reports'), + measure: 'opened_reports', + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'resolved_reports', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.resolved_reports'), href: admin_reports_path(resolved: '1') + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_reports_path(resolved: '1'), + label: t('admin.dashboard.resolved_reports'), + measure: 'resolved_reports', + start_at: @time_period.first .dashboard__item = link_to admin_reports_path, class: 'dashboard__quick-access' do @@ -47,22 +71,51 @@ %span= t('admin.dashboard.pending_appeals_html', count: @pending_appeals_count) = fa_icon 'chevron-right fw' .dashboard__item - = react_admin_component :dimension, dimension: 'sources', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.sources') + = react_admin_component :dimension, + dimension: 'sources', + end_at: @time_period.last, + label: t('admin.dashboard.sources'), + limit: 8, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'languages', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.top_languages') + = react_admin_component :dimension, + dimension: 'languages', + end_at: @time_period.last, + label: t('admin.dashboard.top_languages'), + limit: 8, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'servers', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.top_servers') + = react_admin_component :dimension, + dimension: 'servers', + end_at: @time_period.last, + label: t('admin.dashboard.top_servers'), + limit: 8, + start_at: @time_period.first .dashboard__item.dashboard__item--span-double-column - = react_admin_component :retention, start_at: @time_period.last - 6.months, end_at: @time_period.last, frequency: 'month' + = react_admin_component :retention, + end_at: @time_period.last, + frequency: 'month', + start_at: @time_period.last - 6.months .dashboard__item.dashboard__item--span-double-row - = react_admin_component :trends, limit: 7 + = react_admin_component :trends, + limit: 7 .dashboard__item - = react_admin_component :dimension, dimension: 'software_versions', start_at: @time_period.first, end_at: @time_period.last, limit: 4, label: t('admin.dashboard.software') + = react_admin_component :dimension, + dimension: 'software_versions', + end_at: @time_period.last, + label: t('admin.dashboard.software'), + limit: 4, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'space_usage', start_at: @time_period.first, end_at: @time_period.last, limit: 3, label: t('admin.dashboard.space') + = react_admin_component :dimension, + dimension: 'space_usage', + end_at: @time_period.last, + label: t('admin.dashboard.space'), + limit: 3, + start_at: @time_period.first diff --git a/app/views/admin/domain_blocks/confirm_suspension.html.haml b/app/views/admin/domain_blocks/confirm_suspension.html.haml index a5df8ba3f..4c4f92d71 100644 --- a/app/views/admin/domain_blocks/confirm_suspension.html.haml +++ b/app/views/admin/domain_blocks/confirm_suspension.html.haml @@ -14,7 +14,8 @@ %hr.spacer - = react_admin_component :impact_report, domain: @domain_block.domain + = react_admin_component :impact_report, + domain: @domain_block.domain .actions = link_to t('.cancel'), admin_instances_path, class: 'button button-tertiary' diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index 5f2664df7..5bf4e899f 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -14,21 +14,66 @@ .dashboard .dashboard__item - = react_admin_component :counter, measure: 'instance_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_accounts_measure'), href: admin_accounts_path(origin: 'remote', by_domain: @instance.domain) + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_accounts_path(origin: 'remote', by_domain: @instance.domain), + label: t('admin.instances.dashboard.instance_accounts_measure'), + measure: 'instance_accounts', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'instance_statuses', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_statuses_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_statuses_measure'), + measure: 'instance_statuses', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'instance_media_attachments', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_media_attachments_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_media_attachments_measure'), + measure: 'instance_media_attachments', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'instance_follows', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_follows_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_follows_measure'), + measure: 'instance_follows', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'instance_followers', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_followers_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_followers_measure'), + measure: 'instance_followers', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'instance_reports', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, label: t('admin.instances.dashboard.instance_reports_measure'), href: admin_reports_path(by_target_domain: @instance.domain) + = react_admin_component :counter, + end_at: @time_period.last, + href: admin_reports_path(by_target_domain: @instance.domain), + label: t('admin.instances.dashboard.instance_reports_measure'), + measure: 'instance_reports', + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'instance_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, limit: 8, label: t('admin.instances.dashboard.instance_accounts_dimension') + = react_admin_component :dimension, + dimension: 'instance_accounts', + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_accounts_dimension'), + limit: 8, + params: { domain: @instance.domain }, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'instance_languages', start_at: @time_period.first, end_at: @time_period.last, params: { domain: @instance.domain }, limit: 8, label: t('admin.instances.dashboard.instance_languages_dimension') + = react_admin_component :dimension, + dimension: 'instance_languages', + end_at: @time_period.last, + label: t('admin.instances.dashboard.instance_languages_dimension'), + limit: 8, + params: { domain: @instance.domain }, + start_at: @time_period.first + - else %p = t('admin.instances.unknown_instance') diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index e20dd38c4..e37fa2590 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -20,7 +20,11 @@ %p= t 'admin.reports.category_description_html' -= react_admin_component :report_reason_selector, id: @report.id, category: @report.category, rule_ids: @report.rule_ids&.map(&:to_s), disabled: @report.action_taken? += react_admin_component :report_reason_selector, + category: @report.category, + disabled: @report.action_taken?, + id: @report.id, + rule_ids: @report.rule_ids&.map(&:to_s) - if @report.comment.present? = render 'admin/reports/comment', report: @report diff --git a/app/views/admin/status_edits/_status_edit.html.haml b/app/views/admin/status_edits/_status_edit.html.haml index 19a0e063d..725477721 100644 --- a/app/views/admin/status_edits/_status_edit.html.haml +++ b/app/views/admin/status_edits/_status_edit.html.haml @@ -1,20 +1,30 @@ -.status - .status__content>< - - if status_edit.spoiler_text.blank? - = prerender_custom_emojis(status_content_format(status_edit), status_edit.emojis) - - else - %details< - %summary>< - %strong> Content warning: #{prerender_custom_emojis(h(status_edit.spoiler_text), status_edit.emojis)} - = prerender_custom_emojis(status_content_format(status_edit), status_edit.emojis) - - - unless status_edit.ordered_media_attachments.empty? - = render partial: 'admin/reports/media_attachments', locals: { status: status_edit } - - .detailed-status__meta - %time.formatted{ datetime: status_edit.created_at.iso8601, title: l(status_edit.created_at) }= l(status_edit.created_at) - - - if status_edit.sensitive? +%li + .history__entry + %h5 + - if status_edit_iteration.first? + = t('admin.statuses.original_status') + - else + = t('admin.statuses.status_changed') · - = fa_icon('eye-slash fw') - = t('stream_entries.sensitive_content') + %time.formatted{ datetime: status_edit.created_at.iso8601, title: l(status_edit.created_at) }= l(status_edit.created_at) + + .status + .status__content>< + - if status_edit.spoiler_text.blank? + = prerender_custom_emojis(status_content_format(status_edit), status_edit.emojis) + - else + %details< + %summary>< + %strong> Content warning: #{prerender_custom_emojis(h(status_edit.spoiler_text), status_edit.emojis)} + = prerender_custom_emojis(status_content_format(status_edit), status_edit.emojis) + + - unless status_edit.ordered_media_attachments.empty? + = render partial: 'admin/reports/media_attachments', locals: { status: status_edit } + + .detailed-status__meta + %time.formatted{ datetime: status_edit.created_at.iso8601, title: l(status_edit.created_at) }= l(status_edit.created_at) + + - if status_edit.sensitive? + · + = fa_icon('eye-slash fw') + = t('stream_entries.sensitive_content') diff --git a/app/views/admin/statuses/show.html.haml b/app/views/admin/statuses/show.html.haml index 0e88624de..9cadde287 100644 --- a/app/views/admin/statuses/show.html.haml +++ b/app/views/admin/statuses/show.html.haml @@ -47,15 +47,4 @@ %h3= t('admin.statuses.history') %ol.history - - batched_ordered_status_edits.with_index do |status_edit, i| - %li - .history__entry - %h5 - - if i.zero? - = t('admin.statuses.original_status') - - else - = t('admin.statuses.status_changed') - · - %time.formatted{ datetime: status_edit.created_at.iso8601, title: l(status_edit.created_at) }= l(status_edit.created_at) - - = render status_edit + = render partial: 'admin/status_edits/status_edit', collection: batched_ordered_status_edits diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index e4c985c19..2e4424bec 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -9,15 +9,45 @@ .dashboard .dashboard__item - = react_admin_component :counter, measure: 'tag_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_accounts_measure'), href: tag_url(@tag), target: '_blank', rel: 'noopener noreferrer' + = react_admin_component :counter, + end_at: @time_period.last, + href: tag_url(@tag), + label: t('admin.trends.tags.dashboard.tag_accounts_measure'), + measure: 'tag_accounts', + params: { id: @tag.id }, + rel: 'noopener noreferrer', + start_at: @time_period.first, + target: '_blank' .dashboard__item - = react_admin_component :counter, measure: 'tag_uses', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_uses_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.trends.tags.dashboard.tag_uses_measure'), + measure: 'tag_uses', + params: { id: @tag.id }, + start_at: @time_period.first .dashboard__item - = react_admin_component :counter, measure: 'tag_servers', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_servers_measure') + = react_admin_component :counter, + end_at: @time_period.last, + label: t('admin.trends.tags.dashboard.tag_servers_measure'), + measure: 'tag_servers', + params: { id: @tag.id }, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'tag_servers', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, limit: 8, label: t('admin.trends.tags.dashboard.tag_servers_dimension') + = react_admin_component :dimension, + dimension: 'tag_servers', + end_at: @time_period.last, + label: t('admin.trends.tags.dashboard.tag_servers_dimension'), + limit: 8, + params: { id: @tag.id }, + start_at: @time_period.first .dashboard__item - = react_admin_component :dimension, dimension: 'tag_languages', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, limit: 8, label: t('admin.trends.tags.dashboard.tag_languages_dimension') + = react_admin_component :dimension, + dimension: 'tag_languages', + end_at: @time_period.last, + label: t('admin.trends.tags.dashboard.tag_languages_dimension'), + limit: 8, + params: { id: @tag.id }, + start_at: @time_period.first .dashboard__item = link_to admin_tag_path(@tag.id), class: ['dashboard__quick-access', @tag.usable? ? 'positive' : 'negative'] do - if @tag.usable? diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index c72107367..449657f8c 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -44,5 +44,5 @@ = content_for?(:content) ? yield(:content) : yield .logo-resources{ 'tabindex' => '-1', 'inert' => true, 'aria-hidden' => true } - = render_symbol :icon - = render_symbol :wordmark + = inline_svg_tag 'logo-symbol-icon.svg' + = inline_svg_tag 'logo-symbol-wordmark.svg' diff --git a/app/views/layouts/embedded.html.haml b/app/views/layouts/embedded.html.haml index d8aa522d8..54d4ba715 100644 --- a/app/views/layouts/embedded.html.haml +++ b/app/views/layouts/embedded.html.haml @@ -21,4 +21,4 @@ = yield .logo-resources{ 'tabindex' => '-1', 'inert' => true, 'aria-hidden' => true } - = render_symbol :icon + = inline_svg_tag 'logo-symbol-icon.svg' diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 76cd4381d..e89e015b2 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -66,7 +66,6 @@ %h4= t 'appearance.confirmation_dialogs' .fields-group - = ff.input :'web.unfollow_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_unfollow_modal') = ff.input :'web.reblog_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_boost_modal') = ff.input :'web.delete_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_delete_modal') diff --git a/app/views/severed_relationships/index.html.haml b/app/views/severed_relationships/index.html.haml new file mode 100644 index 000000000..7c599e9c0 --- /dev/null +++ b/app/views/severed_relationships/index.html.haml @@ -0,0 +1,34 @@ +- content_for :page_title do + = t('settings.severed_relationships') + +%p.muted-hint= t('severed_relationships.preamble') + +- unless @events.empty? + .table-wrapper + %table.table + %thead + %tr + %th= t('exports.archive_takeout.date') + %th= t('severed_relationships.type') + %th= t('severed_relationships.lost_follows') + %th= t('severed_relationships.lost_followers') + %tbody + - @events.each do |event| + %tr + %td= l event.created_at + %td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name) + - if event.purged? + %td{ rowspan: 2 }= t('severed_relationships.purged') + - else + %td + - count = event.following_count + - if count.zero? + = t('generic.none') + - else + = table_link_to 'download', t('severed_relationships.download', count: count), following_severed_relationship_path(event, format: :csv) + %td + - count = event.followers_count + - if count.zero? + = t('generic.none') + - else + = table_link_to 'download', t('severed_relationships.download', count: count), followers_severed_relationship_path(event, format: :csv) diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb index f4556db39..6d56e4390 100644 --- a/config/initializers/application_controller_renderer.rb +++ b/config/initializers/application_controller_renderer.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Be sure to restart your server when you modify this file. # ActiveSupport::Reloader.to_prepare do diff --git a/config/locales/an.yml b/config/locales/an.yml index 5ac57f423..068a20187 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1423,7 +1423,6 @@ an: import: Importar import_and_export: Importar y exportar migrate: Migración de cuenta - notifications: Notificacions preferences: Preferencias profile: Perfil relationships: Seguindo y seguidores diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 5b932f525..b0579c6f3 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1751,7 +1751,6 @@ ar: import: استيراد import_and_export: استيراد وتصدير migrate: تهجير الحساب - notifications: الإخطارات preferences: التفضيلات profile: الملف التعريفي relationships: المتابِعون والمتابَعون diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 9b9d5510c..816858d4a 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -801,7 +801,6 @@ ast: import: Importación import_and_export: Importación ya esportación migrate: Migración de la cuenta - notifications: Avisos preferences: Preferencies profile: Perfil públicu relationships: Perfiles que sigues ya te siguen diff --git a/config/locales/be.yml b/config/locales/be.yml index d04409ca9..63f605e9f 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1704,7 +1704,7 @@ be: import: Імпарт import_and_export: Імпарт і экспарт migrate: Перамяшчэнне ўліковага запісу - notifications: Апавяшчэнні + notifications: Email апавяшчэнні preferences: Налады profile: Профіль relationships: Падпіскі і падпісчыкі diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 3f05bfa0c..e888c2ea9 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -597,6 +597,9 @@ bg: actions_description_html: Решете какво действие може да се предприеме, за да бъде отхвърлен докладът. Ако предприемете наказателно действие срещу докладвания акаунт, към него ще бъде изпратено известие по имейл, освен ако Спам категорията не е била избрана. actions_description_remote_html: Преценете с какво действие да решите този доклад. Това ще има ефекет върху това как вашият сървър комуникира с този отдалечен акаунт и се справя с неговото съдържание. add_to_report: Добавяне на още към доклада + already_suspended_badges: + local: Вече е спряно на този сървър + remote: Вече е спряно на сървъра им are_you_sure: Сигурни ли сте? assign_to_self: Назначаване на мен assigned: Назначен модератор @@ -1652,14 +1655,26 @@ bg: import: Импортиране import_and_export: Импортиране и експортиране migrate: Миграция на акаунта - notifications: Известия + notifications: Известия по имейла preferences: Предпочитания profile: Профил relationships: Последвания и последователи + severed_relationships: Прекъснати връзки statuses_cleanup: Автоматично изтриване на публикации strikes: Модериране на предупреждения two_factor_authentication: Двустепенно удостоверяване webauthn_authentication: Ключове за сигурност + severed_relationships: + download: Изтегляне (%{count}) + event_type: + account_suspension: Спиране на акаунта (%{target_name}) + domain_block: Спиране на сървъра (%{target_name}) + user_domain_block: Блокирахте %{target_name} + lost_followers: Загубени последователи + lost_follows: Загубени последвания + preamble: Може да загубите последванията и последователите, блокирайки домейн или когато модераторите ви решават да спрат отдалечен сървър. Случавайки се това, вие ще може да изтеглите списъците с прекъснати връзки, които да се проверят и възможно да се внесат на друг сървър. + purged: Сведенията за този сървър са били прочистени от администраторите на сървъра ви. + type: Събитие statuses: attached: audio: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index dedf69d7b..f94abe265 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -597,6 +597,9 @@ ca: actions_description_html: Decideix quina acció a prendre per a resoldre aquest informe. Si prens un acció punitiva contra el compte denunciat, se li enviarà una notificació per correu electrònic, excepte quan se selecciona la categoria Spam. actions_description_remote_html: Decideix quina acció prendre per a resoldre aquest informe. Això només afectarà com el teu servidor es comunica amb aquest compte remot i en gestiona el contingut. add_to_report: Afegir més al informe + already_suspended_badges: + local: Ja és suspès en aquest servidor + remote: Ja és suspès al seu servidor are_you_sure: Segur? assign_to_self: Assigna'm assigned: Moderador assignat @@ -1652,14 +1655,26 @@ ca: import: Importació import_and_export: Importació i exportació migrate: Migració del compte - notifications: Notificacions + notifications: Notificacions per correu electrònic preferences: Preferències profile: Perfil relationships: Seguits i seguidors + severed_relationships: Relacions eliminades statuses_cleanup: Esborrat automàtic de tuts strikes: Accions de mediació two_factor_authentication: Autenticació de dos factors webauthn_authentication: Claus de seguretat + severed_relationships: + download: Baixa (%{count}) + event_type: + account_suspension: Suspensió del compte (%{target_name}) + domain_block: Suspensió del servidor (%{target_name}) + user_domain_block: Heu blocat %{target_name} + lost_followers: Seguidors perduts + lost_follows: Seguiments perduts + preamble: Quan bloqueu un domini o els vostres moderadors decideixen suspendre un servidor remot, podeu perdre seguidors i seguiments. Si passa, podeu baixar la llista de relacions trencades per a revisar-la i, de cas, importar-la a un altre servidor. + purged: Els administradors del vostre servidor han purgat la informació relativa a aquest servidor. + type: Esdeveniment statuses: attached: audio: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index c1f280a24..dfa035eca 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -942,7 +942,6 @@ ckb: import: هاوردن import_and_export: هاوردەکردن و ناردن migrate: گواستنەوەی هەژمارە - notifications: ئاگادارییەکان preferences: پەسەندەکان profile: پرۆفایل relationships: شوێنکەوتوو و شوێنکەوتوان diff --git a/config/locales/co.yml b/config/locales/co.yml index 13c8b7431..7d8abcd11 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -926,7 +926,6 @@ co: import: Impurtazione import_and_export: Impurtazione è spurtazione migrate: Migrazione di u contu - notifications: Nutificazione preferences: Priferenze profile: Prufile relationships: Abbunamenti è abbunati diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 7e4e38054..b44b01bee 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1704,7 +1704,6 @@ cs: import: Import import_and_export: Import a export migrate: Přesun účtu - notifications: Oznámení preferences: Předvolby profile: Profil relationships: Sledovaní a sledující diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 067d939de..93d249cb5 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1756,7 +1756,6 @@ cy: import: Mewnforio import_and_export: Mewnforio ac allforio migrate: Mudo cyfrif - notifications: Hysbysiadau preferences: Dewisiadau profile: Proffil cyhoeddus relationships: Yn dilyn a dilynwyr diff --git a/config/locales/da.yml b/config/locales/da.yml index fcb600d7b..63762f740 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -597,6 +597,9 @@ da: actions_description_html: Afgør, hvilke foranstaltning, der skal træffes for at løse denne anmeldelse. Træffes en straffende foranstaltning mod den anmeldte konto, fremsendes en e-mailnotifikation, undtagen når kategorien Spam er valgt. actions_description_remote_html: Fastslå en nødvendig handling mhp. at løse denne anmeldelse. Dette vil kun påvirke din servers kommunikation med, og indholdshåndtering for, fjernkontoen. add_to_report: Føj mere til anmeldelse + already_suspended_badges: + local: Allerede suspenderet på denne server + remote: Allerede suspenderet på vedkommendes server are_you_sure: Sikker? assign_to_self: Tildel til mig assigned: Tildelt moderator @@ -1652,14 +1655,25 @@ da: import: Import import_and_export: Import og eksport migrate: Kontomigrering - notifications: Notifikationer + notifications: E-mailnotifikationer preferences: Præferencer profile: Offentlig profil relationships: Følger og følgere + severed_relationships: Afbrudte forhold statuses_cleanup: Auto-indlægssletning strikes: Moderationsadvarsler two_factor_authentication: Tofaktorgodkendelse webauthn_authentication: Sikkerhedsnøgler + severed_relationships: + download: Download (%{count}) + event_type: + account_suspension: Kontosuspendering (%{target_name}) + domain_block: Serversuspendering (%{target_name}) + user_domain_block: "%{target_name} blev blokeret" + lost_followers: Tabte følgere + preamble: Der kan mistes fulgte objekter og følgere, når et domæne blokeres eller moderatorerne beslutter at suspendere en ekstern server. Når det sker, kan der downloades lister over afbrudte relationer til inspektion og mulig import på anden server. + purged: Oplysninger om denne server er blevet renset af serveradministratoreren. + type: Begivenhed statuses: attached: audio: diff --git a/config/locales/de.yml b/config/locales/de.yml index 84f10d8e0..620b571f9 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -597,6 +597,9 @@ de: actions_description_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an dieses gesendet, außer wenn die Spam-Kategorie ausgewählt ist. actions_description_remote_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Dies wirkt sich lediglich darauf aus, wie dein Server mit diesem externen Konto kommuniziert und dessen Inhalt handhabt. add_to_report: Meldung ergänzen + already_suspended_badges: + local: Auf diesem Server bereits gesperrt + remote: Auf dem anderen Server bereits gesperrt are_you_sure: Bist du dir sicher? assign_to_self: Mir zuweisen assigned: Zugewiesene*r Moderator*in @@ -1652,14 +1655,26 @@ de: import: Importieren import_and_export: Importieren und exportieren migrate: Kontoumzug - notifications: Benachrichtigungen + notifications: E-Mail-Benachrichtigungen preferences: Einstellungen profile: Öffentliches Profil relationships: Follower und Folge ich + severed_relationships: Getrennte Beziehungen statuses_cleanup: Automatische Löschung strikes: Maßnahmen two_factor_authentication: Zwei-Faktor-Authentisierung (2FA) webauthn_authentication: Sicherheitsschlüssel + severed_relationships: + download: Herunterladen (%{count}) + event_type: + account_suspension: Kontosperre (%{target_name}) + domain_block: Serversperre (%{target_name}) + user_domain_block: Du hast %{target_name} blockiert + lost_followers: Verlorene Follower + lost_follows: Konten entfolgt + preamble: Möglicherweise verlierst du Follower und entfolgst Konten, wenn du eine Domain blockierst oder Moderator*innen externe Server sperren. Sollte das der Fall sein, wirst du eine Liste mit den getrennten Beziehungen herunterladen können. Dadurch kannst du die Änderungen einsehen oder die Liste auf einen anderen Server importieren. + purged: Informationen über diesen Server wurden von deinen Server-Administrator*innen entfernt. + type: Ereignis statuses: attached: audio: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 6746e813d..94b4774b6 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -6,7 +6,7 @@ lv: send_instructions: Pēc dažām minūtēm saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. failure: - already_authenticated: Jau esi pierakstījies. + already_authenticated: Tu jau esi pieteicies. inactive: Tavs konts vēl nav aktivizēts. invalid: Nederīga %{authentication_keys} vai parole. last_attempt: Tev ir vēl viens mēģinājums, pirms tavs konts tiks bloķēts. @@ -22,7 +22,7 @@ lv: action: Apstiprini savu e-pasta adresi action_with_app: Apstiprināt un atgriezties %{app} explanation: Ar šo e-pasta adresi esi izveidojis kontu vietnē %{host}. Tu esi viena klikšķa attālumā no tā aktivizēšanas. Ja tas nebiji tu, lūdzu, ignorē šo e-pasta ziņojumu. - explanation_when_pending: Tu pieteicies uzaicinājumam uz %{host} ar šo e-pasta adresi. Kad būsi apstiprinājis savu e-pasta adresi, mēs izskatīsim pieteikumu. Tu vari pierakstīties, lai mainītu savu informāciju vai dzēstu savu kontu, taču nevari piekļūt lielākajai daļai funkciju, kamēr tavs konts nav apstiprināts. Ja tavs pieteikums tiks noraidīts, tavi dati tiks noņemti, tāpēc tev nebūs jāveic nekādas darbības. Ja tas nebiji tu, lūdzu, ignorē šo e-pasta ziņojumu. + explanation_when_pending: Tu pieteicies uzaicinājumam uz %{host} ar šo e-pasta adresi. Kad būsi apstiprinājis savu e-pasta adresi, mēs izskatīsim pieteikumu. Tu vari pieteikties, lai mainītu savu informāciju vai izdzēstu savu kontu, taču Tu nevari piekļūt lielākajai daļai iespēju, kamēr Tavs konts nav apstiprināts. Ja Tavs pieteikums tiks noraidīts, Tavi dati tiks noņemti, tāpēc Tev nebūs jāveic nekādas darbības. Ja tas nebiji Tu, lūgums neņemt vērā šo e-pasta ziņojumu. extra_html: Lūdzu, pārskati arī servera noteikumus un mūsu pakalpojumu sniegšanas noteikumus. subject: 'Mastodon: Apstiprināšanas norādījumi %{instance}' title: Apstiprini savu e-pasta adresi @@ -90,7 +90,7 @@ lv: no_token: Tu nevari piekļūt šai lapai, ja neesi saņēmis paroles atiestatīšanas e-pasta ziņojumu. Ja ienāci no paroles atiestatīšanas e-pasta, lūdzu, pārliecinies, vai izmanto visu norādīto URL. send_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - updated: Tava parole ir veiksmīgi nomainīta. Tagad tu esi pierakstījies. + updated: Tava parole tika veiksmīgi nomainīta. Tu tagad esi pieteicies. updated_not_active: Tava parole ir veiksmīgi nomainīta. registrations: destroyed: Visu labu! Tavs konts ir veiksmīgi atcelts. Mēs ceram tevi drīz atkal redzēt. @@ -103,7 +103,7 @@ lv: updated: Tavs konts ir veiksmīgi atjaunināts. sessions: already_signed_out: Veiksmīgi izrakstījies. - signed_in: Veiksmīgi pierakstījies. + signed_in: Veiksmīgi pieteicies. signed_out: Veiksmīgi izrakstījies. unlocks: send_instructions: Pēc dažām minūtēm tu saņemsi e-pastu ar norādījumiem, kā atbloķēt savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index 01d6e5a46..e9e8e1f6e 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -66,11 +66,11 @@ nn: subject: 'Mastodon: Instruksjonar for å opne kontoen igjen' webauthn_credential: added: - explanation: Følgende sikkerhetsnøkkel har blitt lagt til i kontoen din + explanation: Denne tryggingsnykjelen er lagt til kontoen din subject: 'Mastodon: Ny sikkerheitsnøkkel' title: Ein ny sikkerheitsnøkkel har blitt lagt til deleted: - explanation: Den følgande sikkerheitsnøkkelen har blitt sletta frå kontoen din + explanation: Denne tryggingsnykjelen er sletta frå kontoen din subject: 'Mastodon: Sikkerheitsnøkkel sletta' title: Ein av sikkerheitsnøklane dine har blitt sletta webauthn_disabled: diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml index 65e2bfcb7..b3e6e79a1 100644 --- a/config/locales/doorkeeper.nl.yml +++ b/config/locales/doorkeeper.nl.yml @@ -164,7 +164,7 @@ nl: admin:write:ip_blocks: moderatieacties op geblokkeerde IP-adressen uitvoeren admin:write:reports: moderatieacties op rapportages uitvoeren crypto: end-to-end-encryptie gebruiken - follow: relaties tussen accounts bewerken + follow: volgrelaties tussen accounts bewerken push: jouw pushmeldingen ontvangen read: alle gegevens van jouw account lezen read:accounts: informatie accounts bekijken diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index 66dd0f909..0e5d1ca45 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -92,9 +92,9 @@ nn: invalid_resource_owner: Ressurseigardetaljane er ikkje gyldige, eller så er det ikkje mogleg å finna eigaren invalid_scope: Det etterspurte omfanget er ugyldig, ukjent eller har feil struktur. invalid_token: - expired: Tilgangsbeviset har gått ut på dato - revoked: Tilgangsbeviset har blitt oppheva - unknown: Tilgangsbeviset er ugyldig + expired: Innloggingsnykelen har gått ut på dato + revoked: Innloggingsnykelen er oppheva + unknown: Innloggngsnykelen er ugyldig resource_owner_authenticator_not_configured: Ressurseigar kunne ikkje finnast fordi Doorkeeper.configure.resource_owner_authenticator ikkje er konfigurert. server_error: Autoriseringstenaren støtte på ei uventa hending som hindra han i å svara på førespurnaden. temporarily_unavailable: Autoriseringstenaren kan ikkje hansama førespurnaden grunna kortvarig overbelastning eller tenarvedlikehald. @@ -129,11 +129,11 @@ nn: crypto: Ende-til-ende-kryptering favourites: Favorittar filters: Filter - follow: Dei du fylgjer, målbind og blokkerer + follow: Dei du fylgjer, dempar og blokkerer follows: Fylgjer lists: Lister media: Mediavedlegg - mutes: Målbindingar + mutes: Dempingar notifications: Varsel push: Pushvarsel reports: Rapportar @@ -183,13 +183,13 @@ nn: write:accounts: redigera profilen din write:blocks: blokker kontoar og domene write:bookmarks: bokmerk innlegg - write:conversations: målbind og slett samtalar + write:conversations: demp og slett samtalar write:favourites: favorittmarker innlegg write:filters: lag filter write:follows: fylg folk write:lists: lag lister write:media: last opp mediefiler - write:mutes: målbind folk og samtalar + write:mutes: demp folk og samtalar write:notifications: tøm varsla dine write:reports: rapporter andre folk write:statuses: publiser innlegg diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index f9813b131..f2250b79c 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -130,7 +130,7 @@ zh-TW: favourites: 最愛 filters: 過濾器 follow: 跟隨、靜音與封鎖 - follows: 跟隨的使用者 + follows: 正在跟隨 lists: 列表 media: 多媒體附加檔案 mutes: 靜音 diff --git a/config/locales/el.yml b/config/locales/el.yml index d3d91abc2..2e7ac8746 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1524,7 +1524,6 @@ el: import: Εισαγωγή import_and_export: Εισαγωγή και εξαγωγή migrate: Μετακόμιση λογαριασμού - notifications: Ειδοποιήσεις preferences: Προτιμήσεις profile: Προφίλ relationships: Ακολουθείς και σε ακολουθούν diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index b5d92541d..a2f84b093 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1647,7 +1647,6 @@ en-GB: import: Import import_and_export: Import and export migrate: Account migration - notifications: Notifications preferences: Preferences profile: Profile relationships: Follows and followers diff --git a/config/locales/en.yml b/config/locales/en.yml index 6fc81ca5f..823e720ea 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1656,14 +1656,26 @@ en: import: Import import_and_export: Import and export migrate: Account migration - notifications: Notifications + notifications: E-mail notifications preferences: Preferences profile: Public profile relationships: Follows and followers + severed_relationships: Severed relationships statuses_cleanup: Automated post deletion strikes: Moderation strikes two_factor_authentication: Two-factor Auth webauthn_authentication: Security keys + severed_relationships: + download: Download (%{count}) + event_type: + account_suspension: Account suspension (%{target_name}) + domain_block: Server suspension (%{target_name}) + user_domain_block: You blocked %{target_name} + lost_followers: Lost followers + lost_follows: Lost follows + preamble: You may lose follows and followers when you block a domain or when your moderators decide to suspend a remote server. When that happens, you will be able to download lists of severed relationships, to be inspected and possibly imported on another server. + purged: Information about this server has been purged by your server's administrators. + type: Event statuses: attached: audio: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index cb5654b4c..d59eadd52 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1579,7 +1579,6 @@ eo: import: Enporti import_and_export: Importi kaj eksporti migrate: Konta migrado - notifications: Sciigoj preferences: Preferoj profile: Profilo relationships: Sekvatoj kaj sekvantoj diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index aae437b95..fd53f9d4f 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -597,6 +597,9 @@ es-AR: actions_description_html: Decidí qué medidas tomar para resolver esta denuncia. Si tomás una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decidí qué medidas tomar para resolver esta denuncia. Esto sólo afectará la forma en que tu servidor se comunica con esta cuenta remota y maneja su contenido. add_to_report: Agregar más a la denuncia + already_suspended_badges: + local: Ya suspendido en este servidor + remote: Ya suspendido en su servidor are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado @@ -1652,14 +1655,26 @@ es-AR: import: Importar import_and_export: Importación y exportación migrate: Migración de la cuenta - notifications: Notificaciones + notifications: Notificaciones por correo electrónico preferences: Configuración profile: Perfil público relationships: Seguimientos + severed_relationships: Relaciones cortadas statuses_cleanup: Eliminación auto. de mensajes strikes: Moderación de incumplimientos two_factor_authentication: Aut. de dos factores webauthn_authentication: Llaves de seguridad + severed_relationships: + download: Descargar (%{count}) + event_type: + account_suspension: Suspensión de cuenta (%{target_name}) + domain_block: Suspensión de cuenta (%{target_name}) + user_domain_block: Bloqueaste a %{target_name} + lost_followers: Seguidores perdidos + lost_follows: Cuentas seguidas perdidas + preamble: Podés perder seguidores y cuentas seguidas cuando bloqueás un dominio o cuando tus moderadores deciden suspender un servidor remoto. Cuando esto suceda, vas a poder descargar listas de relaciones cortadas, que serán inspectadas y posiblemente importadas en otro servidor. + purged: La información sobre este servidor fue purgada por los administradores de tu servidor. + type: Evento statuses: attached: audio: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index e7e1a4ff8..24b4af7ec 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -597,6 +597,9 @@ es-MX: actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. add_to_report: Añadir más al reporte + already_suspended_badges: + local: Ya suspendido en este servidor + remote: Ya suspendido en su servidor are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado @@ -1652,7 +1655,7 @@ es-MX: import: Importar import_and_export: Importar y exportar migrate: Migración de cuenta - notifications: Notificaciones + notifications: Notificaciones por correo electrónico preferences: Preferencias profile: Perfil relationships: Siguiendo y seguidores @@ -1865,6 +1868,9 @@ es-MX: follows_subtitle: Seguir cuentas conocidas follows_title: A quién seguir follows_view_more: Ver más personas para seguir + hashtags_recent_count: + one: "%{people} personas en los últimos 2 días" + other: "%{people} personas en los últimos 2 días" hashtags_subtitle: Explora las tendencias de los últimos 2 días hashtags_title: Etiquetas en tendencia hashtags_view_more: Ver más etiquetas en tendencia diff --git a/config/locales/es.yml b/config/locales/es.yml index 24822116c..22ee45d3b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -597,6 +597,9 @@ es: actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este informe. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. add_to_report: Añadir más al reporte + already_suspended_badges: + local: Ya suspendido en este servidor + remote: Ya suspendido en su servidor are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado @@ -1652,7 +1655,7 @@ es: import: Importar import_and_export: Importar y exportar migrate: Migración de cuenta - notifications: Notificaciones + notifications: Notificaciones por correo electrónico preferences: Preferencias profile: Perfil relationships: Siguiendo y seguidores diff --git a/config/locales/et.yml b/config/locales/et.yml index 80e3d3ef6..889ddfcff 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1652,7 +1652,6 @@ et: import: Impordi import_and_export: Import / eksport migrate: Konto kolimine - notifications: Teated preferences: Eelistused profile: Profiil relationships: Jälgitud ja jälgijad diff --git a/config/locales/eu.yml b/config/locales/eu.yml index ac641ab45..3e770b85c 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -599,6 +599,9 @@ eu: actions_description_html: Erabaki txosten hau konpontzeko ze ekintza hartu. Salatutako kontuaren aurka zigor ekintza bat hartzen baduzu, eposta jakinarazpen bat bidaliko zaie, Spam kategoria hautatzean ezik. actions_description_remote_html: Hautatu txosten honi konponbidea aurkitzeko zein neurri hartu. Hau soilik zure zerbitzaria urruneko kontu honekin nola komunikatu eta bere edukia nola maneiatzeko da. add_to_report: Gehitu gehiago txostenera + already_suspended_badges: + local: Dagoeneko kanporatu da zerbitzari honetatik + remote: Dagoeneko kanporatu da bere zerbitzaritik are_you_sure: Ziur zaude? assign_to_self: Esleitu niri assigned: Esleitutako moderatzailea @@ -1656,14 +1659,26 @@ eu: import: Inportazioa import_and_export: Inportatu eta esportatu migrate: Kontuaren migrazioa - notifications: Jakinarazpenak + notifications: Posta bidezko jakinarazpenak preferences: Hobespenak profile: Profila relationships: Jarraitutakoak eta jarraitzaileak + severed_relationships: Indartutako erlazioak statuses_cleanup: Bidalketak automatikoki ezabatzea strikes: Moderazio neurriak two_factor_authentication: Bi faktoreetako autentifikazioa webauthn_authentication: Segurtasun gakoak + severed_relationships: + download: Deskargatu (%{count}) + event_type: + account_suspension: Kontua bertan behera uztea (%{target_name}) + domain_block: Domeinua bertan behera uztea (%{target_name}) + user_domain_block: "%{target_name} blokeatu duzu" + lost_followers: Galdutako jarraitzaileak + lost_follows: Jarraitzeari utzi diozun jendea + preamble: Jarraitzaileak gal ditzakezu, baita jendea jarraitzeari utzi domeinu bat blokeatzen duzunean edo moderatzaileek urruneko zerbitzari bat bertan behera uztea erabakitzen badute. Hau gertatzean, galdutako erlazioen zerrendak deskargatu ahalko dituzu, aztertzeko eta agian, beste zerbitzari batean inportatzeko. + purged: Zerbitzari honen informazioa kendu du zerbitzariko administratzaileak. + type: Gertaera statuses: attached: audio: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index df9b92627..d93d2e7d5 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1416,7 +1416,6 @@ fa: import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری migrate: انتقال حساب - notifications: آگاهی‌ها preferences: ترجیحات profile: نمایه relationships: پیگیری‌ها و پیگیران diff --git a/config/locales/fi.yml b/config/locales/fi.yml index a92ad4ecb..fe5956fd5 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -597,6 +597,9 @@ fi: actions_description_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä kohtaan, hänelle lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti-luokka on valittuna. actions_description_remote_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Tämä vaikuttaa vain siihen, miten palvelimesi kommunikoi tämän etätilin kanssa ja käsittelee sen sisältöä. add_to_report: Lisää raporttiin + already_suspended_badges: + local: Jäädytetty jo tällä palvelimella + remote: Jäädytetty jo tällä palvelimella are_you_sure: Oletko varma? assign_to_self: Ota tehtäväksi assigned: Määritetty valvoja @@ -1652,14 +1655,26 @@ fi: import: Tuo import_and_export: Tuonti ja vienti migrate: Tilin muutto muualle - notifications: Ilmoitukset + notifications: Sähköposti-ilmoitukset preferences: Ominaisuudet profile: Julkinen profiili relationships: Seuratut ja seuraajat + severed_relationships: Katkenneet suhteet statuses_cleanup: Autom. julkaisujen poisto strikes: Valvontavaroitukset two_factor_authentication: Kaksivaiheinen todennus webauthn_authentication: Suojausavaimet + severed_relationships: + download: Lataa (%{count}) + event_type: + account_suspension: Tilin jäädytys (%{target_name}) + domain_block: Palvelimen jäädytys (%{target_name}) + user_domain_block: Estit käyttäjän %{target_name} + lost_followers: Menetetyt seuraajat + lost_follows: Menetetyt seuratut + preamble: Voit menettää seurattusi ja seuraajasi, kun estät verkkotunnuksen tai kun valvojasi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista suhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle. + purged: Palvelimesi ylläpitäjät ovat tyhjentäneet tämän palvelimen tiedot. + type: Tapahtuma statuses: attached: audio: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 45633d85b..1850c2a3b 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -94,7 +94,7 @@ fo: disabled: Óvirkið pending: Í bíðistøðu silenced: Avmarkað - suspended: Avbrotin + suspended: Gjørt óvirkin title: Umsjón moderation_notes: Umsjónarviðmerkingar most_recent_activity: Feskasta virksemi @@ -150,7 +150,7 @@ fo: strikes: Eldri fráboðanir subscribe: Tekna hald suspend: Fyribils ikki í gildi - suspended: Ikki í gildi + suspended: Gjørt óvirkin suspension_irreversible: Dáturnar á hesu kontu er endaliga sletttaðar. Tú kann seta hana í gildi, men dáturnar fáast ikki aftur. suspension_reversible_hint_html: Kontan er sett úr gildi og dáturnar verða endaliga strikaðar tann %{date}. Inntil tá kann kontan endurskapast uttan fylgjur. Ynskir tú at strika allar dátur hjá kontuni beinan vegin, so kanst tú gera tað niðanfyri. title: Kontur @@ -597,6 +597,9 @@ fo: actions_description_html: Ger av hvør atgerð skal takast fyri at avgreiða hesa meldingina. Revsitiltøk móti meldaðu kontuni føra við sær, at ein teldupostfráboðan verður send teimum, undantikið tá Ruskpostur verður valdur. actions_description_remote_html: Tak avgerð um hvat skal gerast fyri at avgreiða hesa rapporteringina. Hetta fer einans at ávirka, hvussu tín ambætari samskiftir við hesa fjarkontuna og hvussu hann handfer tilfar frá henni. add_to_report: Legg meira afturat meldingini + already_suspended_badges: + local: Longu gjørt óvirkin á hesum ambætaranum + remote: Longu gjørt óvirkin á teirra ambætara are_you_sure: Er tú vís/ur? assign_to_self: Tilluta mær assigned: Tilnevnt umsjónarfólk @@ -1652,14 +1655,26 @@ fo: import: Innflyt import_and_export: Innflyt og útflyt migrate: Flyting av kontu - notifications: Fráboðanir + notifications: Teldupostfráboðanir preferences: Stillingar profile: Vangi relationships: Fylging og fylgjarar + severed_relationships: Avbrotin tilknýti statuses_cleanup: Sjálvvirkandi striking av postum strikes: Umsjónaratsóknir two_factor_authentication: Váttan í tveimum stigum webauthn_authentication: Trygdarlyklar + severed_relationships: + download: Niðurtøkur (%{count}) + event_type: + account_suspension: Kontuógilding (%{target_name}) + domain_block: Ambætara-ógilding (%{target_name}) + user_domain_block: Tú hevur forðað %{target_name} + lost_followers: Mistir fylgjarar + lost_follows: Mist fylgi + preamble: Tá ið tú forðar einum økisnavni, ella tínir umsitarar velja at avgilda ein fjarambætara, kanst tú missa fylgi og fylgjarar. Um tað hendir, kanst tú taka ein lista av avbrotnum tilknýtum niður, sum tú kanst eftirhyggja og møguliga innflyta á ein nýggjan ambætara. + purged: Umsitararnir fyri tín ambætara hava tømt upplýsingar um henda ambætara úr skipanini. + type: Tiltak statuses: attached: audio: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 2ed482770..6e422455c 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -597,6 +597,9 @@ fr-CA: actions_description_html: Décidez des mesures à prendre pour résoudre ce signalement. Si vous prenez des mesures punitives contre le compte signalé, une notification sera envoyée par e-mail, sauf si la catégorie Spam est sélectionnée. actions_description_remote_html: Décidez des mesures à prendre pour résoudre ce signalement. Cela n'affectera que la manière dont votre serveur communique avec ce compte distant et traite son contenu. add_to_report: Ajouter davantage au rapport + already_suspended_badges: + local: Déjà suspendu sur ce serveur + remote: Déjà suspendu sur le serveur distant are_you_sure: Voulez-vous vraiment faire ça ? assign_to_self: Me l’assigner assigned: Modérateur assigné @@ -1652,14 +1655,26 @@ fr-CA: import: Import de données import_and_export: Import et export migrate: Migration de compte - notifications: Notifications + notifications: Notifications par mail preferences: Préférences profile: Profil relationships: Abonnements et abonné·e·s + severed_relationships: Relations rompues statuses_cleanup: Suppression automatique de messages strikes: Sanctions de modération two_factor_authentication: Identification à deux facteurs webauthn_authentication: Clés de sécurité + severed_relationships: + download: Téléchargement (%{count}) + event_type: + account_suspension: Suspension du compte (%{target_name}) + domain_block: Suspension du serveur (%{target_name}) + user_domain_block: Vous avez bloqué %{target_name} + lost_followers: Abonné·e·s perdu·e·s + lost_follows: Abonnements perdus + preamble: Vous pouvez perdre des abonnés et des abonnements lorsque vous bloquez un domaine ou lorsque vos modérateurs décident de suspendre un serveur distant. Lorsque cela arrive, vous êtes en mesure de télécharger une liste de vos relations rompues, afin de l'inspecter et d'éventuellement l'importer sur un autre serveur. + purged: Les informations sur ce serveur ont été purgées par les administrateurs du serveur. + type: Evènement statuses: attached: audio: @@ -1865,6 +1880,9 @@ fr-CA: follows_subtitle: Suivez des comptes populaires follows_title: Qui suivre follows_view_more: Voir plus de personnes à suivre + hashtags_recent_count: + one: "%{people} personne dans les deux derniers jours" + other: "%{people} personnes dans les deux derniers jours" hashtags_subtitle: Explorez les tendances depuis les 2 derniers jours hashtags_title: Hashtags populaires hashtags_view_more: Voir plus de hashtags populaires diff --git a/config/locales/fr.yml b/config/locales/fr.yml index ae012c153..31f5bfa51 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -597,6 +597,9 @@ fr: actions_description_html: Décidez des mesures à prendre pour résoudre ce signalement. Si vous prenez des mesures punitives contre le compte signalé, une notification sera envoyée par e-mail, sauf si la catégorie Spam est sélectionnée. actions_description_remote_html: Décidez des mesures à prendre pour résoudre ce signalement. Cela n'affectera que la manière dont votre serveur communique avec ce compte distant et traite son contenu. add_to_report: Ajouter davantage au rapport + already_suspended_badges: + local: Déjà suspendu sur ce serveur + remote: Déjà suspendu sur le serveur distant are_you_sure: Voulez-vous vraiment faire ça ? assign_to_self: Me l’assigner assigned: Modérateur assigné @@ -1652,14 +1655,26 @@ fr: import: Import de données import_and_export: Import et export migrate: Migration de compte - notifications: Notifications + notifications: Notifications par mail preferences: Préférences profile: Profil relationships: Abonnements et abonné·e·s + severed_relationships: Relations rompues statuses_cleanup: Suppression automatique de messages strikes: Sanctions de modération two_factor_authentication: Authentification à deux facteurs webauthn_authentication: Clés de sécurité + severed_relationships: + download: Téléchargement (%{count}) + event_type: + account_suspension: Suspension du compte (%{target_name}) + domain_block: Suspension du serveur (%{target_name}) + user_domain_block: Vous avez bloqué %{target_name} + lost_followers: Abonné·e·s perdu·e·s + lost_follows: Abonnements perdus + preamble: Vous pouvez perdre des abonnés et des abonnements lorsque vous bloquez un domaine ou lorsque vos modérateurs décident de suspendre un serveur distant. Lorsque cela arrive, vous êtes en mesure de télécharger une liste de vos relations rompues, afin de l'inspecter et d'éventuellement l'importer sur un autre serveur. + purged: Les informations sur ce serveur ont été purgées par les administrateurs du serveur. + type: Evènement statuses: attached: audio: @@ -1865,6 +1880,9 @@ fr: follows_subtitle: Suivez des comptes populaires follows_title: Qui suivre follows_view_more: Voir plus de personnes à suivre + hashtags_recent_count: + one: "%{people} personne dans les deux derniers jours" + other: "%{people} personnes dans les deux derniers jours" hashtags_subtitle: Explorez les tendances depuis les 2 derniers jours hashtags_title: Hashtags populaires hashtags_view_more: Voir plus de hashtags populaires diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 742b2903a..1d62f7c6a 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1647,7 +1647,6 @@ fy: import: Ymportearje import_and_export: Ymportearje en eksportearje migrate: Accountmigraasje - notifications: Meldingen preferences: Ynstellingen profile: Profyl relationships: Folgers en folgjenden diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 5c61898ef..a3ad293e5 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -461,7 +461,6 @@ ga: development: Forbairt edit_profile: Cuir an phróifíl in eagar import: Iompórtáil - notifications: Fógraí preferences: Sainroghanna pearsanta profile: Próifíl webauthn_authentication: Eochracha slándála diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 79bbbea0f..11402d3f5 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -621,6 +621,9 @@ gd: actions_description_html: Socraich dè a nì thu airson an gearan seo fhuasgladh. Ma chuireas tu peanas air a’ chunntas le gearan air, gheibh iad brath air a’ phost-d mura tagh thu an roinn-seòrsa Spama. actions_description_remote_html: Cuir romhad dè an gnìomh a ghabhas tu airson an gearan seo fhuasgladh. Cha bheir seo buaidh ach air mar a làimhsicheas am frithealaiche agadsa an cunntas cèin seo is mar a nì e conaltradh leis. add_to_report: Cuir barrachd ris a’ ghearan + already_suspended_badges: + local: Chaidh an cur à rèim air an fhrithealaiche seo mu thràth + remote: Chaidh an cur à rèim air an fhrithealaiche aca-san mu thràth are_you_sure: A bheil thu cinnteach? assign_to_self: Iomruin dhomh-sa assigned: Maor iomruinte @@ -1704,14 +1707,26 @@ gd: import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh migrate: Imrich cunntais - notifications: Brathan + notifications: Brathan puist-d preferences: Roghainnean profile: Pròifil phoblach relationships: Dàimhean leantainn + severed_relationships: Dàimhean dealaichte statuses_cleanup: Sguabadh às phostaichean strikes: Rabhaidhean na maorsainneachd two_factor_authentication: Dearbhadh dà-cheumnach webauthn_authentication: Iuchraichean tèarainteachd + severed_relationships: + download: Luchdaich a-nuas (%{count}) + event_type: + account_suspension: Cunntas à rèim (%{target_name}) + domain_block: Frithealaiche à rèim (%{target_name}) + user_domain_block: Bhac thu %{target_name} + lost_followers: An luchd-leantainn a chaill thu + lost_follows: Daoine nach lean thu tuilleadh + preamble: Dh’fhaoidte gun chaill thu dàimhean leantainn nuair a bhacas tu àrainn no nuair a chuireas na maoir romhpa gun cuir iad frithealaiche cèin à rèim. Nuair a thachras sin, ’s urrainn dhut liosta de na dàimhean dealaichte a luchdadh a-nuas airson sùil a thoirt orra agus an ion-phortadh gu frithealaiche eile ’s dòcha. + purged: Chaidh am fiosrachadh mun fhrithealaiche seo a phurgaideachadh le rianairean an fhrithealaiche agad. + type: Tachartas statuses: attached: audio: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 57249d2ca..4b1c9f096 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -597,6 +597,9 @@ gl: actions_description_html: Decide que acción tomar respecto desta denuncia. Se tomas accións punitivas contra a conta denunciada, enviaráselles un email coa notificación, excepto se está seleccionada a categoría Spam. actions_description_remote_html: Decide a acción a tomar para resolver a denuncia. Isto só lle afecta ao xeito en que o teu servidor se comunica con esta conta remota e xestiona o seu contido. add_to_report: Engadir máis á denuncia + already_suspended_badges: + local: Xa está suspendida neste servidor + remote: Xa está suspendida no seu servidor are_you_sure: Tes certeza? assign_to_self: Asignarme assigned: Moderador asignado @@ -1652,14 +1655,26 @@ gl: import: Importar import_and_export: Importar e exportar migrate: Migrar conta - notifications: Notificacións + notifications: Notificacións por correo preferences: Preferencias profile: Perfil relationships: Seguindo e seguidoras + severed_relationships: Relacións cortadas statuses_cleanup: Borrado automático da publicación strikes: Avisos da moderación two_factor_authentication: Validar Dobre Factor webauthn_authentication: Chaves de seguridade + severed_relationships: + download: Descargar (%{count}) + event_type: + account_suspension: Suspensión da conta (%{target_name}) + domain_block: Suspensión do servidor (%{target_name}) + user_domain_block: Bloqueaches a %{target_name} + lost_followers: Seguidoras perdidas + lost_follows: Seguimentos perdidos + preamble: Pode acontecer que perdas seguidoras e seguimentos ao bloquear un dominio ou cando a Moderación do teu servidor decide suspender un servidor remoto. Se acontecese isto, podes descargar unha lista coas relacións cortadas para revisala e, se queres, importala noutro servidor. + purged: A administración do teu servidor purgou a información acerca deste servidor. + type: Evento statuses: attached: audio: diff --git a/config/locales/he.yml b/config/locales/he.yml index 1388a7163..da9392554 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -621,6 +621,9 @@ he: actions_description_html: בחר/י איזו פעולה לבצע על מנת לפתור את הדו"ח. אם תופעל פעולת ענישה כנגד החשבון המדווח, הודעת דוא"ל תשלח אליהם, אלא אם נבחרה קטגוריית הספאם. actions_description_remote_html: בחרו איזו פעולה לבצע כדי לפתור את הדיווח שהוגש. פעולה זו תשפיע רק על התקשורת מול השרת שלך עם החשבון המרוחק ותוכנו. add_to_report: הוספת פרטים לדיווח + already_suspended_badges: + local: כבר הודח בשרת זה + remote: כבר הודח בשרת שלו are_you_sure: 100% על בטוח? assign_to_self: הקצה אלי assigned: מנחה מוקצה @@ -1704,14 +1707,26 @@ he: import: יבוא import_and_export: יבוא ויצוא migrate: הגירת חשבון - notifications: התראות + notifications: התראות בדואל preferences: העדפות profile: פרופיל relationships: נעקבים ועוקבים + severed_relationships: קשרים שנותקו statuses_cleanup: מחיקת הודעות אוטומטית strikes: עבירות מנהלתיות two_factor_authentication: אימות דו-שלבי webauthn_authentication: מפתחות אבטחה + severed_relationships: + download: הורדה (%{count}) + event_type: + account_suspension: השעיית חשבון (%{target_name}) + domain_block: השעיית שרת (%{target_name}) + user_domain_block: חסמת את %{target_name} + lost_followers: אובדן עוקבים + lost_follows: אובדן נעקבים + preamble: הנכם עשויים לאבד עוקבים ונעקבים כשתחסמו שרת או כשמנהליכם יחליטו להשעות שרת אחר. במקרה כזה, תוכלו להוריד רשימה של קשרי המעקב שנותקו, כדי לעבור עליהם ואם תרצו לייבא אותם לשרת אחר. + purged: מידע על שרת מרוחק זה נמחק על ידי מנהלי השרת שלך. + type: אירוע statuses: attached: audio: diff --git a/config/locales/hr.yml b/config/locales/hr.yml index c5020f6f9..4ea818b30 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -211,7 +211,6 @@ hr: featured_tags: Istaknuti hashtagovi import: Uvezi import_and_export: Uvezi i izvezi - notifications: Obavijesti preferences: Postavke profile: Profil statuses_cleanup: Automatsko brisanje postova diff --git a/config/locales/hu.yml b/config/locales/hu.yml index f09f7e428..4ea0a9652 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -597,6 +597,9 @@ hu: actions_description_html: Döntsd el, mit csináljunk, hogy megoldjuk ezt a bejelentést. Ha valamilyen büntető intézkedést hozol a bejelentett fiók ellen, küldünk neki egy figyelmeztetést e-mail-ben, kivéve ha a Spam kategóriát választod. actions_description_remote_html: Döntsd el, mit tegyünk a bejelentés lezárásának érdekében. Ez csak azt befolyásolja, hogy a saját kiszolgálód hogyan kommunikál ezzel a távoli fiókkal és hogyan kezeli annak tartalmait. add_to_report: Továbbiak hozzáadása a bejelentéshez + already_suspended_badges: + local: Már felfüggesztették ezen a szerveren + remote: Már felfüggesztették a kiszolgálóján are_you_sure: Biztos vagy benne? assign_to_self: Magamhoz rendelés assigned: Hozzárendelt moderátor @@ -1652,14 +1655,26 @@ hu: import: Importálás import_and_export: Import és export migrate: Fiók átirányítása - notifications: Értesítések + notifications: E-mail-értesítések preferences: Beállítások profile: Profil relationships: Követések és követők + severed_relationships: Megszakított kapcsolatok statuses_cleanup: Bejegyzések automatikus törlése strikes: Moderációs felrótt vétségek two_factor_authentication: Kétlépcsős hitelesítés webauthn_authentication: Biztonsági kulcsok + severed_relationships: + download: Letöltés (%{count}) + event_type: + account_suspension: Fiók felfüggesztése (%{target_name}) + domain_block: Kiszolgáló felfüggesztése (%{target_name}) + user_domain_block: 'Blokkoltad ezt: %{target_name}' + lost_followers: Elvesztett követők + lost_follows: Elvesztett követések + preamble: Ha blokkolsz egy domaint, vagy ha a moderátorok úgy döntenek, hogy blokkolnak egy távoli kiszolgálót, akkor követőket és követéseket veszíthetsz. Amikor ez megtörténik, akkor letöltheted a megszakadt kapcsolatokat, hogy átvizsgáld őket, és esetleg egy másik kiszolgálón importáld őket. + purged: A kiszolgáló információit a kiszolgálód rendszergazdái véglegesen eltávolították. + type: Esemény statuses: attached: audio: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 9d596dd83..5042e3f7f 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -778,7 +778,6 @@ hy: import: Ներմուծել import_and_export: Ներմուծել և արտահանել migrate: Հաշուի տեղափոխում - notifications: Ծանուցումներ preferences: Կարգավորումներ profile: Հաշիւ relationships: Հետեւումներ և հետեւորդներ diff --git a/config/locales/id.yml b/config/locales/id.yml index d1c04ad1d..bee282fa8 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1389,7 +1389,6 @@ id: import: Impor import_and_export: Impor dan ekspor migrate: Pemindahan akun - notifications: Notifikasi preferences: Pilihan profile: Profil relationships: Ikuti dan pengikut diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 7a0ae6292..6763a8038 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1652,7 +1652,6 @@ ie: import: Importar import_and_export: Importation e exportation migrate: Migration de conto - notifications: Notificationes preferences: Preferenties profile: Public profil relationships: Sequetes e sequitores diff --git a/config/locales/io.yml b/config/locales/io.yml index 4561a43e8..ed0d0d634 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1621,7 +1621,6 @@ io: import: Importacar import_and_export: Importaco e exportaco migrate: Kontomigro - notifications: Avizi preferences: Preferi profile: Profilo relationships: Sequati e sequanti diff --git a/config/locales/is.yml b/config/locales/is.yml index d7a3f8e2c..710b35fce 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -597,6 +597,9 @@ is: actions_description_html: Ákveddu til hvaða aðgerða eigi að taka til að leysa þessa kæru. Ef þú ákveður að refsa kærða notandaaðgangnum, verður viðkomandi send tilkynning í tölvupósti, nema ef flokkurinn Ruslpóstur sé valinn. actions_description_remote_html: Ákveddu til hvaða aðgerða eigi að taka til að leysa þessa kæru. Þetta mun aðeins hafa áhrif á hvernig netþjónninn þinn meðhöndlar þennan fjartengda aðgang og efnið á honum. add_to_report: Bæta fleiru í kæru + already_suspended_badges: + local: Þegar frystur á þessum netþjóni + remote: Þegar frystur á hinum netþjóninum are_you_sure: Ertu viss? assign_to_self: Úthluta mér assigned: Úthlutaður umsjónarmaður @@ -1656,7 +1659,6 @@ is: import: Flytja inn import_and_export: Inn- og útflutningur migrate: Yfirfærsla notandaaðgangs - notifications: Tilkynningar preferences: Kjörstillingar profile: Notandasnið relationships: Fylgist með og fylgjendur diff --git a/config/locales/it.yml b/config/locales/it.yml index 6e7f9a7ce..c63d8ef28 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -597,6 +597,9 @@ it: actions_description_html: Decidete quali azioni intraprendere per risolvere la segnalazione. Se si intraprende un'azione punitiva contro l'account segnalato, gli sarà inviata una notifica via e-mail, tranne quando è selezionata la categoria Spam. actions_description_remote_html: Decide quali azioni intraprendere per risolvere la relazione. Questo influenzerà solo come il tuo server comunica con questo account remoto e ne gestisce il contenuto. add_to_report: Aggiungi altro al report + already_suspended_badges: + local: Già sospeso su questo server + remote: Già sospeso sul loro server are_you_sure: Sei sicuro? assign_to_self: Assegna a me assigned: Moderatore assegnato @@ -1654,14 +1657,26 @@ it: import: Importa import_and_export: Importa ed esporta migrate: Migrazione dell'account - notifications: Notifiche + notifications: Notifiche e-mail preferences: Preferenze profile: Profilo relationships: Follows e followers + severed_relationships: Relazioni interrotte statuses_cleanup: Cancellazione automatica dei post strikes: Sanzioni di moderazione two_factor_authentication: Autenticazione a due fattori webauthn_authentication: Chiavi di sicurezza + severed_relationships: + download: Scarica (%{count}) + event_type: + account_suspension: Sospensione dell'account (%{target_name}) + domain_block: Sospensione del server (%{target_name}) + user_domain_block: Hai bloccato %{target_name} + lost_followers: Seguaci persi + lost_follows: Account seguiti persi + preamble: Potresti perdere account seguiti e seguaci quando blocchi un dominio o quando i tuoi moderatori decidono di sospendere un server remoto. Quando ciò accadrà, potrai scaricare liste di relazioni interrotte, da consultare ed eventualmente importare su un altro server. + purged: Le informazioni su questo server sono state eliminate dagli amministratori del tuo server. + type: Evento statuses: attached: audio: @@ -1867,6 +1882,9 @@ it: follows_subtitle: Segui account ben noti follows_title: Chi seguire follows_view_more: Visualizza più persone da seguire + hashtags_recent_count: + one: "%{people} persona negli ultimi 2 giorni" + other: "%{people} persone negli ultimi 2 giorni" hashtags_subtitle: Esplora le tendenze degli ultimi 2 giorni hashtags_title: Hashtag di tendenza hashtags_view_more: Visualizza altri hashtag di tendenza diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f5e874f98..19b2e94db 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1626,7 +1626,6 @@ ja: import: データのインポート import_and_export: インポート・エクスポート migrate: アカウントの引っ越し - notifications: 通知 preferences: ユーザー設定 profile: プロフィール relationships: フォロー・フォロワー diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 74b863460..c92fd98a7 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -419,7 +419,6 @@ ka: export: მონაცემის ექსპორტი import: იმპორტი migrate: ანგარიშის მიგრაცია - notifications: შეტყობინებები preferences: პრეფერენციები two_factor_authentication: მეორე-ფაქტორის აუტენტიფიკაცია statuses: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 566ba0dee..4ba608c9f 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -784,7 +784,6 @@ kab: import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan - notifications: Ilɣa preferences: Imenyafen profile: Ameɣnu relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 1dcbce97e..f08d8ead1 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -643,7 +643,6 @@ kk: import: Импорт import_and_export: Импорт/экспорт migrate: Аккаунт көшіру - notifications: Ескертпелер preferences: Баптаулар profile: Профиль relationships: Жазылымдар және оқырмандар diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c4dcb5687..c556c9e81 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -587,6 +587,9 @@ ko: actions_description_html: 이 신고를 해결하기 위해 취해야 할 조치를 지정해주세요. 신고된 계정에 대해 처벌 조치를 취하면, 스팸 카테고리가 선택된 경우를 제외하고 해당 계정으로 이메일 알림이 전송됩니다. actions_description_remote_html: 이 신고를 해결하기 위해 실행할 행동을 결정하세요. 이 결정은 이 원격 계정과 그 콘텐츠를 다루는 방식에 대해 이 서버에서만 영향을 끼칩니다 add_to_report: 신고에 더 추가하기 + already_suspended_badges: + local: 이 서버에서 이미 정지되었습니다 + remote: 저 서버에서 이미 정지되었습니다 are_you_sure: 확실합니까? assign_to_self: 나에게 할당하기 assigned: 할당된 중재자 @@ -1628,14 +1631,26 @@ ko: import: 데이터 가져오기 import_and_export: 가져오기 & 내보내기 migrate: 계정 이동 - notifications: 알림 + notifications: 이메일 알림 preferences: 환경설정 profile: 공개 프로필 relationships: 팔로잉과 팔로워 + severed_relationships: 단절된 관계들 statuses_cleanup: 게시물 자동 삭제 strikes: 중재 기록 two_factor_authentication: 2단계 인증 webauthn_authentication: 보안 키 + severed_relationships: + download: 다운로드 (%{count}) + event_type: + account_suspension: 계정 정지 (%{target_name}) + domain_block: 서버 정지 (%{target_name}) + user_domain_block: 내가 %{target_name}을 차단했습니다 + lost_followers: 잃은 팔로워 + lost_follows: 잃은 팔로우 + preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다. + purged: 이 서버에 대한 정보는 관리자에 의해 삭제되었습니다. + type: 이벤트 statuses: attached: audio: @@ -1823,8 +1838,10 @@ ko: feature_action: 더 알아보기 feature_audience: 마스토돈은 중개자 없이 청중을 관리할 수 있는 특별한 가능성을 제공합니다. 자체 인프라에 배포된 마스토돈을 사용하면 온라인에 있는 다른 마스토돈 서버에도 팔로우하거나 팔로우할 수 있으며, 본인 외에는 누구의 통제도 받지 않습니다. feature_audience_title: 신뢰 있는 청중 구축 + feature_control: 내가 홈 피드에서 무엇을 보고 싶은지는 내가 제일 잘 압니다. 알고리즘이나 시간을 낭비하게 만드는 광고는 없습니다. 계정 하나로 다른 마스토돈 서버에 있는 누구나 팔로우 하여 그들의 게시물을 시간순으로 받아보고 인터넷의 한 구석을 좀 더 나답게 만들어 보세요. feature_control_title: 내 타임라인에 대해 통제권을 유지하세요 feature_creativity: 마스토돈은 오디오, 비디오, 사진, 접근성 설명(alt), 투표, 콘텐츠 주의 (블라인드), 움직이는 아바타, 커스텀 이모티콘, 썸네일 자르기, 그리고 더 많은 것들을 당신이 온라인에서 당신을 더 잘 드러낼 수 있도록 돕기위해 지원합니다. 당신이 그림이나 음악을 올리던, 팟캐스트 같은것을 진행하던 마스토돈이 함께합니다. + feature_creativity_title: 독보적인 창의성 feature_moderation: 마스토돈은 의사 결정권을 사용자에게 돌려줍니다. 각 서버는 기업 소셜 미디어처럼 하향식이 아닌 로컬에서 시행되는 자체 규칙과 규정을 만들 수 있어 다양한 그룹의 요구에 가장 유연하게 대응할 수 있습니다. 동의하는 규칙이 있는 서버에 가입하거나 직접 서버를 호스팅하세요. feature_moderation_title: 올바른 중재 follow_action: 팔로우 diff --git a/config/locales/ku.yml b/config/locales/ku.yml index f8d9cd80d..74dcd6f8f 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1417,7 +1417,6 @@ ku: import: Têxistin import_and_export: Têxistin û derxistin migrate: Barkirina ajimêrê - notifications: Agahdarî preferences: Hilbijarte profile: Profîl relationships: Şopandin û şopîner diff --git a/config/locales/lad.yml b/config/locales/lad.yml index c0ab028b9..3aaac3ab5 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -597,6 +597,9 @@ lad: actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam. actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido. add_to_report: Adjusta mas al raporto + already_suspended_badges: + local: Ya suspendido en este sirvidor + remote: Ya suspendido en sus sirvidor are_you_sure: Estas siguro? assign_to_self: Asinyamela a mi assigned: Moderador asinyado @@ -1652,7 +1655,7 @@ lad: import: Importo import_and_export: Importo i eksporto migrate: Migrasyon de kuento - notifications: Avizos + notifications: Avizos por posta elektronika preferences: Preferensyas profile: Profil publiko relationships: Segidos i suivantes @@ -1660,6 +1663,9 @@ lad: strikes: Amonestamientos de moderasyon two_factor_authentication: Autentifikasyon en dos pasos webauthn_authentication: Yaves de sigurita + severed_relationships: + download: Abasha (%{count}) + type: Evenimiento statuses: attached: audio: @@ -1860,6 +1866,9 @@ lad: follows_subtitle: Sige kuentos konesidos follows_title: A ken segir follows_view_more: Ve mas personas para segir + hashtags_recent_count: + one: "%{people} persona en los ultimos 2 diyas" + other: "%{people} personas en los ultimos 2 diyas" hashtags_subtitle: Eksplora los trendes de los ultimos 2 diyas hashtags_title: Etiketas en trend hashtags_view_more: Ve mas etiketas en trend diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 610b4437c..44b5443fc 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -466,6 +466,9 @@ lt: destroyed_msg: Skundo žinutė sekmingai ištrinta! reports: action_taken_by: Veiksmo ėmėsi + already_suspended_badges: + local: Jau sustabdytas šiame serveryje + remote: Jau sustabdytas jų serveryje are_you_sure: Ar esi įsitikinęs (-usi)? assign_to_self: Paskirti man assigned: Paskirtas moderatorius @@ -755,7 +758,6 @@ lt: featured_tags: Rodomi saitažodžiai(#) import: Importuoti migrate: Paskyros migracija - notifications: Pranešimai preferences: Preferencijos two_factor_authentication: Dviejų veiksnių autentikacija statuses: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index bd2500a91..ee8395400 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -16,9 +16,9 @@ lv: instance_actor_flash: Šis konts ir virtuāls aktieris, ko izmanto, lai pārstāvētu pašu serveri, nevis atsevišķu lietotāju. To izmanto federācijas nolūkos, un to nevajadzētu apturēt. last_active: pēdējā aktivitāte link_verified_on: Šīs saites piederība tika pārbaudīta %{date} - nothing_here: Te nekā nav! + nothing_here: Šeit nekā nav. pin_errors: - following: Tev jau ir jāseko personai, kuru vēlies apstiprināt + following: Tev ir jāseko personai, kuru vēlies atbalstīt posts: one: Ziņa other: Ziņas @@ -575,7 +575,7 @@ lv: relays: add_new: Pievienot jaunu releju delete: Dzēst - description_html: "Federācijas relejs ir starpniekserveris, kas apmainās ar lielu publisko ziņu apjomu starp serveriem, kas to abonē un publicē. Tas var palīdzēt maziem un vidējiem serveriem atklāt saturu no federācijas, pretējā gadījumā vietējiem lietotājiem manuāli jāseko citām personām attālos serveros." + description_html: "Federācijas pārraidītājs ir starpniekserveris, kas apmainās ar lielu publisko ierakstu apjomu starp serveriem, kas to abonē un publicē tajā. Tas var palīdzēt maziem un vidējiem serveriem atklāt saturu fediversā, pretējā gadījumā vietējiem lietotājiem būtu pasrocīgi jāseko citiem cilvēkiem attālos serveros." disable: Atspējot disabled: Atspējots enable: Iespējot @@ -659,7 +659,7 @@ lv: actions: delete_html: Noņemt aizskarošās ziņas mark_as_sensitive_html: Atzīmēt aizskarošo ziņu multivides saturu kā sensitīvu - silence_html: Ievērojami ierobežojiet @%{acct} sasniedzamību, padarot viņa profilu un saturu redzamu tikai personām, kas jau seko viņiem vai manuāli meklē profilu + silence_html: Ievērojami ierobežo @%{acct} sasniedzamību, padarot viņa profilu un saturu redzamu tikai cilvēkiem, kas jau seko tam vai pašrocīgi uzmeklē profilu suspend_html: Apturēt @%{acct}, padarot viņu profilu un saturu nepieejamu un neiespējamu mijiedarbību ar close_report: 'Atzīmēt ziņojumu #%{id} kā atrisinātu' close_reports_html: Atzīmējiet visus pārskatus par @%{acct} kā atrisinātus @@ -902,9 +902,9 @@ lv: publishers: no_publisher_selected: Neviens publicētājs netika mainīts, jo neviens netika atlasīts shared_by_over_week: - one: Pēdējās nedēļas laikā kopīgoja viena persona + one: Pēdējās nedēļas laikā kopīgoja viens cilvēks other: Pēdējās nedēļas laikā kopīgoja %{count} cilvēki - zero: Pēdējās nedēļas laikā kopīgoja %{count} personas + zero: Pēdējās nedēļas laikā kopīgoja %{count} cilvēku title: Populārākās saites usage_comparison: Šodien kopīgots %{today} reizes, salīdzinot ar %{yesterday} vakar not_allowed_to_trend: Popularizešana nav atļauta @@ -944,7 +944,7 @@ lv: not_trendable: Neparādīsies pie tendencēm not_usable: Nevar tikt lietots peaked_on_and_decaying: Sasniedza maksimumu %{date}, tagad samazinās - title: Populārākie tēmturi + title: Izplatīti tēmturi trendable: Var parādīsies pie tendencēm trending_rank: 'Populārākie #%{rank}' usable: Var tikt lietots @@ -952,7 +952,7 @@ lv: used_by_over_week: one: Pēdējās nedēļas laikā izmantoja viens cilvēks other: Pēdējās nedēļas laikā izmantoja %{count} cilvēki - zero: Pēdējās nedēļas laikā izmantoja %{count} personas + zero: Pēdējās nedēļas laikā izmantoja %{count} cilvēku title: Tendences trending: Populārākie warning_presets: @@ -1015,7 +1015,7 @@ lv: new_trending_statuses: title: Populārākās ziņas new_trending_tags: - title: Populārākie tēmturi + title: Izplatīti tēmturi subject: Tiek pārskatītas jaunas tendences %{instance} aliases: add_new: Izveidot aizstājvārdu @@ -1040,7 +1040,7 @@ lv: salutation: "%{name}," settings: 'Mainīt e-pasta uztādījumus: %{link}' unsubscribe: Atcelt abonēšanu - view: 'Skatījums:' + view: 'Skatīt:' view_profile: Skatīt profilu view_status: Skatīt ziņu applications: @@ -1119,7 +1119,7 @@ lv: title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. - preamble: Izmantojot kontu šajā Mastodon serverī, tu varēsi sekot jebkurai citai personai tīklā neatkarīgi no tā, kur tiek mitināts viņas konts. + preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts viņa konts. title: Atļauj tevi iestatīt %{domain}. status: account_status: Konta statuss @@ -1351,7 +1351,7 @@ lv: following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename}. lists_html: Tu gatavojies pievienot līdz pat %{total_items} kontiem no %{filename} saviem sarakstiem. Jauni saraksti tiks izveidoti, ja nav saraksta, ko pievienot. muting_html: Tu gatavojies noklusināt līdz pat %{total_items} kontiem no %{filename}. - preface: Tu vari importēt datus, kurus esi eksportējis no cita servera, piemēram, to personu sarakstu, kurām tu seko vai kuras bloķē. + preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē. recent_imports: Nesen importēts states: finished: Pabeigts @@ -1481,7 +1481,7 @@ lv: report: subject: "%{name} iesniedza ziņojumu" sign_up: - subject: "%{name} ir pierakstījies" + subject: "%{name} pierakstījās" favourite: body: 'Tavu ziņu izlasei pievienoja %{name}:' subject: "%{name} pievienoja tavu ziņu izlasei" @@ -1667,7 +1667,6 @@ lv: import: Imports import_and_export: Imports un eksports migrate: Konta migrācija - notifications: Paziņojumi preferences: Iestatījumi profile: Profils relationships: Sekojamie un sekotāji @@ -1709,9 +1708,9 @@ lv: reblog: Izceltu ierakstu nevar piespraust poll: total_people: - one: "%{count} persona" + one: "%{count} cilvēks" other: "%{count} cilvēki" - zero: "%{count} personu" + zero: "%{count} cilvēku" total_votes: one: "%{count} balss" other: "%{count} balsis" @@ -1827,7 +1826,7 @@ lv: explanation: delete_statuses: Tika konstatēts, ka dažas no tavām ziņām pārkāpj vienu vai vairākas kopienas vadlīnijas, un rezultātā %{instance} moderatori tās noņēma. disable: Tu vairs nevari izmantot savu kontu, taču tavs profils un citi dati paliek neskarti. Tu vari pieprasīt savu datu dublējumu, mainīt konta iestatījumus vai dzēst kontu. - mark_statuses_as_sensitive: "%{instance} moderatori dažas no tavām ziņām ir atzīmējušas kā sensitīvas. Tas nozīmē, ka cilvēkiem būs jāpieskaras ziņās esošajai multividei, pirms tiek parādīts priekšskatījums. Tu arī pats vari atzīmēt mediju kā sensitīvu, kad tādu publicēsi turpmāk." + mark_statuses_as_sensitive: "%{instance} moderatori dažus no Taviem ierakstiem ir atzīmējuši kā jutīgus. Tas nozīmē, ka cilvēkiem būs jāpiesit ierakstos esošajiem informāijas nesējiem, pirms tiek attēlots priekšskatījums. Tu arī pats vari atzīmēt informācijas nesēju kā jutīgu, kad nākotnē tādu ievietosi." sensitive: No šī brīža visi augšupielādētie multivides faili tiks atzīmēti kā sensitīvi un paslēpti aiz klikšķa brīdinājuma. silence: Tu joprojām vari izmantot savu kontu, taču tikai tie cilvēki, kuri jau tev seko, redzēs tavas ziņas šajā serverī, un tev var tikt liegtas dažādas atklāšanas funkcijas. Tomēr citi joprojām var tev manuāli sekot. suspend: Tu vairs nevari izmantot savu kontu, un tavs profils un citi dati vairs nav pieejami. Tu joprojām vari pieteikties, lai pieprasītu savu datu dublēšanu, līdz dati tiks pilnībā noņemti aptuveni 30 dienu laikā, taču mēs saglabāsim dažus pamata datus, lai neļautu tev izvairīties no apturēšanas. @@ -1850,8 +1849,15 @@ lv: silence: Konts ierobežots suspend: Konts apturēts welcome: + edit_profile_action: Pielāgot + edit_profile_title: Pielāgo savu profilu explanation: Šeit ir daži padomi, kā sākt darbu feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi. + follow_title: Pielāgo savu mājas barotni + hashtags_recent_count: + one: "%{people} cilvēks pēdējās 2 dienās" + other: "%{people} cilvēki pēdējās 2 dienās" + zero: "%{people} cilvēku pēdējās divās dienās" subject: Laipni lūgts Mastodon title: Laipni lūgts uz borta, %{name}! users: @@ -1860,11 +1866,11 @@ lv: invalid_otp_token: Nederīgs divfaktora kods otp_lost_help_html: Ja esi zaudējis piekļuvi abiem, tu vari sazināties ar %{email} seamless_external_login: Tu esi pieteicies, izmantojot ārēju pakalpojumu, tāpēc paroles un e-pasta iestatījumi nav pieejami. - signed_in_as: 'Pierakstījies kā:' + signed_in_as: 'Pieteicies kā:' verification: - extra_instructions_html: Padoms. saite tavā vietnē var būt neredzama. Svarīga daļa ir rel="me", kas novērš uzdošanos vietnēs ar lietotāju ģenerētu saturu. Tu vari pat lapas galvenē izmantot tagu link, nevis a, taču HTML ir jābūt pieejamam, neizpildot JavaScript. + extra_instructions_html: Padoms: saite Tavā vietnē var būt neredzama. Svarīga daļa ir rel="me", kas novērš uzdošanos vietnēs ar lietotāju izveidotu saturu. Tu pat vari lapas galvenē izmantot tagu link, nevis a, taču HTML ir jābūt pieejamam bez JavaScript izpildīšanas. here_is_how: Lūk, kā - hint_html: "Ikviens var apliecināt savu identitāti Mastodon. Pamatojoties uz atvērtiem tīmekļa standartiem, tagad un uz visiem laikiem bez maksas. Viss, kas tev nepieciešams, ir personīga vietne, pēc kuras cilvēki tevi atpazīst. Kad no sava profila izveidosi saiti uz šo vietni, mēs pārbaudīsim, vai vietne novirza atpakaļ uz tavu profilu, un tajā tiks parādīts vizuāls indikators." + hint_html: "Ikviens var apliecināt savu identitāti Mastodon. Balstīts uz atvērtiem tīmekļa standartiem, tagad un uz visiem laikiem bez maksas. Viss, kas Tev nepieciešams, ir personīga vietne, pēc kuras cilvēki Tevi atpazīst. Kad savā profilu sasaistīsi ar šo tīmekļvietni, mēs pārbaudīsim, vai tīmekļvietnei ir saite uz Tavu profilu, un tajā tiks parādīts redzama norāde." instructions_html: Ievieto starpliktuvē un ielīmē tālāk norādīto kodu savas tīmekļvietnes HTML! Tad pievieno savas tīmekļvietnes adresi vienā no papildu laukiem savā profila cilnē "Labot profilu" un saglabā izmaiņas! verification: Pārbaude verified_links: Tavas verifikācijas saites diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 5f8de5298..883a40031 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -87,5 +87,3 @@ ml: subject: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു" relationships: following: പിന്തുടരുന്നു - settings: - notifications: അറിയിപ്പുകൾ diff --git a/config/locales/ms.yml b/config/locales/ms.yml index bfd6591dd..f39c26a5c 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1595,7 +1595,6 @@ ms: import: Import import_and_export: Import dan eksport migrate: Penghijrahan akaun - notifications: Pemberitahuan preferences: Keutamaan profile: Profil relationships: Ikutan dan pengikut diff --git a/config/locales/my.yml b/config/locales/my.yml index 6898db877..4ac9ecdd4 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1594,7 +1594,6 @@ my: import: ထည့်သွင်းခြင်း import_and_export: ထည့်သွင်းခြင်းနှင့် ထုတ်ယူခြင်း migrate: အကောင့်ပြောင်းရွှေ့ခြင်း - notifications: အသိပေးချက်များ preferences: သတ်မှတ်ချက်များ profile: ပရိုဖိုင် relationships: စောင့်ကြည့်သူများနှင့် စောင့်ကြည့်စာရင်း diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 3b4c586dc..91aabb1fa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -560,7 +560,7 @@ nl: no_ip_block_selected: Er zijn geen IP-regels veranderd, omdat er geen een was geselecteerd title: IP-regels relationships: - title: Relaties van %{acct} + title: Volgrelaties van %{acct} relays: add_new: Nieuwe relayserver toevoegen delete: Verwijderen @@ -597,6 +597,9 @@ nl: actions_description_html: Beslis welke maatregel moet worden genomen om deze rapportage op te lossen. Wanneer je een (straf)maatregel tegen het gerapporteerde account neemt, krijgt het account een e-mailmelding, behalve wanneer de spam-categorie is gekozen. actions_description_remote_html: Beslis welke actie moet worden ondernomen om deze rapportage op te lossen. Dit is alleen van invloed op hoe jouw server met dit externe account communiceert en de inhoud ervan beheert. add_to_report: Meer aan de rapportage toevoegen + already_suspended_badges: + local: Al geschorst op deze server + remote: Al geschorst op hun server are_you_sure: Weet je het zeker? assign_to_self: Aan mij toewijzen assigned: Toegewezen moderator @@ -1569,7 +1572,7 @@ nl: moved: Verhuisd mutual: Wederzijds primary: Primair - relationship: Relatie + relationship: Volgrelatie remove_selected_domains: Alle volgers van de geselecteerde domeinen verwijderen remove_selected_followers: Geselecteerde volgers verwijderen remove_selected_follows: Geselecteerde gebruikers ontvolgen @@ -1652,14 +1655,26 @@ nl: import: Importeren import_and_export: Importeren en exporteren migrate: Accountmigratie - notifications: Meldingen + notifications: E-mailmeldingen preferences: Voorkeuren profile: Openbaar profiel relationships: Volgers en gevolgde accounts + severed_relationships: Verbroken volgrelaties statuses_cleanup: Automatisch berichten verwijderen strikes: Vastgestelde overtredingen two_factor_authentication: Tweestapsverificatie webauthn_authentication: Beveiligingssleutels + severed_relationships: + download: Downloaden (%{count}) + event_type: + account_suspension: Accountschorsing (%{target_name}) + domain_block: Serverschorsing (%{target_name}) + user_domain_block: Je hebt %{target_name} geblokkeerd + lost_followers: Verloren volgers + lost_follows: Verloren gevolgde accounts + preamble: Je kan gevolgde accounts en volgers verliezen wanneer je een domein blokkeert of wanneer de moderators van jouw server beslissen om een externe server op te schorten. Wanneer dat gebeurt, kun je lijsten van verbroken volgrelaties downloaden, deze inspecteren en mogelijk importeren op een andere server. + purged: Informatie over deze server is verwijderd door de beheerders van jouw server. + type: Gebeurtenis statuses: attached: audio: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index f53b67d09..7145f3037 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -58,7 +58,7 @@ nn: demote: Degrader destroyed_msg: "%{username} sine data er no i slettekøa" disable: Slå av - disable_sign_in_token_auth: Slå av e-post token autentisering + disable_sign_in_token_auth: Slå av innlogging med epost-nykel disable_two_factor_authentication: Slå av 2FA disabled: Slege av display_name: Synleg namn @@ -67,7 +67,7 @@ nn: email: E-post email_status: E-poststatus enable: Slå på - enable_sign_in_token_auth: Slå på e-post token autentisering + enable_sign_in_token_auth: Slå på innlogging med epost-nykel enabled: Aktivert enabled_msg: Gjenaktiverte %{username} sin konto followers: Fylgjarar @@ -152,15 +152,15 @@ nn: suspend: Utvis og slett kontodata for godt suspended: Utvist suspension_irreversible: Data frå denne kontoen har blitt ikkje-reverserbart sletta. Du kan oppheve suspenderinga av kontoen for å bruke den, men det vil ikkje gjenopprette alle data den tidligare har hatt. - suspension_reversible_hint_html: Kontoen har blitt suspendert, og data vil bli fullstendig fjerna den %{date}. Fram til då kan kontoen gjenopprettes uten negative effekter. Om du ynskjer å fjerne kontodata no, kan du gjere det nedanfor. + suspension_reversible_hint_html: Kontoen har vorte stengd, og data vil bli fullstendig fjerna den %{date}. Fram til då kandu gjenoppretta kontoen utan negative konsekvensar. Om du ynskjer å fjerna kontodata no, kan du gjera det nedanfor. title: Kontoar unblock_email: Avblokker e-postadresse unblocked_email_msg: Avblokkerte %{username} si e-postadresse unconfirmed_email: E-post utan stadfesting undo_sensitized: Angr tving ømtolig - undo_silenced: Angr målbinding + undo_silenced: Angre avgrensinga undo_suspension: Angr utvising - unsilenced_msg: Opphevde vellykket begrensningen av %{username} sin konto + unsilenced_msg: Oppheva avgrensinga av %{username} sin konto unsubscribe: Avmeld unsuspended_msg: Oppheving av utvisinga av %{username} sin konto var vellykka username: Brukarnamn @@ -200,10 +200,10 @@ nn: destroy_user_role: Øydelegg rolle disable_2fa_user: Skruv av 2FA disable_custom_emoji: Skruv av tilpassa emoji - disable_sign_in_token_auth_user: Slå av e-post tokenautentisering for brukar + disable_sign_in_token_auth_user: Slå av innlogging med epost-nykel for brukaren disable_user: Skruv av brukar enable_custom_emoji: Skruv på tilpassa emoji - enable_sign_in_token_auth_user: Slå på e-post tokenautentisering for brukar + enable_sign_in_token_auth_user: Slå på innlogging med epost-nykel for brukaren enable_user: Skruv på brukar memorialize_account: Opprett minnekonto promote_user: Forfrem brukar @@ -221,7 +221,7 @@ nn: unblock_email_account: Avblokker e-postadresse unsensitive_account: Angr tving ømtolig konto unsilence_account: Angre avgrensing av konto - unsuspend_account: Opphev suspensjonen av kontoen + unsuspend_account: Opphev utestenginga av kontoen update_announcement: Oppdater kunngjøringen update_custom_emoji: Oppdater tilpassa emoji update_domain_block: Oppdater domene-sperring @@ -259,10 +259,10 @@ nn: destroy_user_role_html: "%{name} sletta rolla %{target}" disable_2fa_user_html: "%{name} tok vekk krav om tofaktorautentisering for brukaren %{target}" disable_custom_emoji_html: "%{name} deaktiverte emojien %{target}" - disable_sign_in_token_auth_user_html: "%{name} deaktivert e-post token for godkjenning for %{target}" + disable_sign_in_token_auth_user_html: "%{name} skrudde av innlogging med epost-nykel for %{target}" disable_user_html: "%{name} slo av innlogging for brukaren %{target}" enable_custom_emoji_html: "%{name} aktiverte emojien %{target}" - enable_sign_in_token_auth_user_html: "%{name} aktiverte e-post token autentisering for %{target}" + enable_sign_in_token_auth_user_html: "%{name} skrudde på innlogging med epost-nykel for %{target}" enable_user_html: "%{name} aktiverte innlogging for brukaren %{target}" memorialize_account_html: "%{name} endret %{target}s konto til en minneside" promote_user_html: "%{name} fremja brukaren %{target}" @@ -274,7 +274,7 @@ nn: reset_password_user_html: "%{name} tilbakestilte passordet for brukaren %{target}" resolve_report_html: "%{name} løyste ein rapport %{target}" sensitive_account_html: "%{name} markerte %{target} sitt media som ømtolig" - silence_account_html: "%{name} begrensa %{target} sin konto" + silence_account_html: "%{name} avgrensa %{target} sin konto" suspend_account_html: "%{name} utviste %{target} sin konto" unassigned_report_html: "%{name} løyste ein rapport %{target}" unblock_email_account_html: "%{name} avblokkerte %{target} si e-postadresse" @@ -385,38 +385,38 @@ nn: add_new: Lag ny confirm_suspension: cancel: Avbryt - confirm: Suspender + confirm: Utvis permanent_action: Å oppheve suspensjonen vil ikkje gjenopprette data eller koplingar. - preamble_html: Du er i ferd med å suspendera %{domain} inkludert underdomener. + preamble_html: Du er i ferd med å utestenga %{domain} inkludert underdomene. remove_all_data: Dette vil fjerna alt innhald, media og profildata for kontoar som tilhøyrer dette domenet frå din tenar. stop_communication: Tenaren din vil slutta å kommunisera med desse tenarane. title: Stadfest domeneblokkering for %{domain} - undo_relationships: Dette vil oppheve alle følgar-relasjonar mellom kontoane dine og kontoar på desse tenerane. + undo_relationships: Dette vil oppheve alle fylgjar-relasjonar mellom kontoane dine og kontoar på desse tenerane. created_msg: Domeneblokkering blir nå behandlet destroyed_msg: Domeneblokkering har nå blitt angret domain: Domene edit: Rediger domeneblokkering - existing_domain_block: Du har allerede pålagt strengere begrensninger på %{name}. - existing_domain_block_html: Du har allerede pålagt strengere begrensninger på %{name}, du kan være nødt til oppheve blokkeringen av den først. + existing_domain_block: Du har allereie gjort strengare avgrensingar av %{name}. + existing_domain_block_html: Du har allereie avgrensa kontoen til %{name} kraftig, det kan henda du må oppheva blokkeringa fyrst. export: Eksporter import: Importer new: create: Lag blokkering hint: Domeneblokkeringen vil ikke hindre opprettelse av kontooppføringer i databasen, men vil retroaktivt og automatisk benytte spesifikke moderasjonsmetoder på de kontoene. severity: - desc_html: "Målbind gjer kontoen sine postear usynlege for alle som ikkje følger den. Utvis fjernar alt innhald, media og profildata frå kontoen. Bruk Ingen viss du berre vil fjerne mediafiler." + desc_html: "Avgrens gjer innlegg frå kontoar på dette domenet usynlege for alle som ikkje fylgjer dei. Utvis fjernar alt innhald, media og profildata frå kontoar på dette domenet frå tenaren din. Bruk Ingen viss du berre vil avvisa mediafiler." noop: Ingen - silence: Målbind + silence: Avgrens suspend: Utvis title: Ny domeneblokkering no_domain_block_selected: Ingen domeneblokkeringar vart endra sidan ingen var valde not_permitted: Du har ikkje løyve til å utføra denne handlinga obfuscate: Obfuskere domenenavn - obfuscate_hint: Skjul deler av domenenavnet i listen hvis annonsering av listen over domenebegrensninger er slått på + obfuscate_hint: Gøym delar av domenenamnet i lista viss kunngjering av lista over domeneavgrensingar er påskrudd private_comment: Privat kommentar - private_comment_hint: Kommenter angående denne domenebegrensningen for internt bruk av moderatorene. + private_comment_hint: Kommentar om denne domeneavgrensinga til intern bruk for administratorane. public_comment: Offentleg kommentar - public_comment_hint: Kommenter angående denne domenebegrensningen for offentligheten, hvis publisering av domenebegrensningslisten er slått på. + public_comment_hint: Kommentar om denne domeneavgrensinga for publikum, viss kunngjering av lista over avgrensa domene er påskrudd. reject_media: Avvis mediefiler reject_media_hint: Fjernar mediefiler som er lagra lokalt og nektar å lasta ned andre i framtida. Har ikkje noko å seia for utvisingar reject_reports: Avvis rapportar @@ -480,7 +480,7 @@ nn: title: Tilgjenge warning: Det siste forsøket på å koble til denne serveren lyktes ikke back_to_all: Alle - back_to_limited: Begrenset + back_to_limited: Avgrensa back_to_warning: Advarsel by_domain: Domene confirm_purge: Er du sikker på at du vil slette data permanent fra dette domenet? @@ -491,16 +491,16 @@ nn: policies: reject_media: Avvis media reject_reports: Avvis rapporter - silence: Begrens - suspend: Suspender + silence: Avgrens + suspend: Utvis policy: Vilkår reason: Offentlig årsak title: Retningslinjer for innhold dashboard: instance_accounts_dimension: Mest fylgde kontoar instance_accounts_measure: lagrede kontoer - instance_followers_measure: våre følgere der - instance_follows_measure: deres følgere her + instance_followers_measure: fylgjarane våre der + instance_follows_measure: fylgjarane deira her instance_languages_dimension: Mest brukte språk instance_media_attachments_measure: lagrede mediavedlegg instance_reports_measure: rapporter om dem @@ -597,6 +597,9 @@ nn: actions_description_html: Avgjer kva som skal gjerast med denne rapporteringa. Dersom du utfører straffetiltak mot den rapporterte kontoen, vil dei motta ein e-post – så sant du ikkje har valt kategorien Spam. actions_description_remote_html: Avgjer kva du vil gjera for å løysa denne rapporten. Dette påverkar berre korleis tenaren din kommuniserer med kontoen på ein annan tenar, og korleis tenaren din handterer innhald derifrå. add_to_report: Legg til i rapporten + already_suspended_badges: + local: Allereie utestengd på denne tenaren + remote: Allereie utestengd på tenaren deira are_you_sure: Er du sikker? assign_to_self: Tilegn til meg assigned: Tilsett moderator @@ -648,7 +651,7 @@ nn: actions: delete_html: Fjerna dei påtala innlegga mark_as_sensitive_html: Markera dei påtala mediefilene som sensitive - silence_html: Sterkt avgrensa korleis @%{acct} kan samhandla ved å gjera brukarprofilen og innhaldet synleg berre for folk som allereie fylgjer brukarkontoen eller søkjer han opp manuelt + silence_html: Avgrens kraftig korleis @%{acct} kan samhandla med andre ved å gjera brukarprofilen og innhaldet synleg berre for folk som allereie fylgjer brukarkontoen eller søkjer opp profilen manuelt suspend_html: Stengja brukarkontoen til @%{acct}, slik at brukarprofilen og innhaldet blir utilgjengeleg og umogleg å samhandla med close_report: Marker rapport nr. %{id} som løyst close_reports_html: Marker alle rapportane om @%{acct} som løyste @@ -829,9 +832,9 @@ nn: mark_statuses_as_sensitive: "%{name} markerte %{target} sine innlegg som ømtålige" none: "%{name} sendte en advarsel til %{target}" sensitive: "%{name} markerte %{target} sin konto som ømtolig" - silence: "%{name} begrenset %{target}s konto" + silence: "%{name} avgrensa kontoen til %{target}" suspend: "%{name} utviste %{target} sin konto" - appeal_approved: Klage tatt til følge + appeal_approved: Anka appeal_pending: Klage behandles appeal_rejected: Anken er avvist system_checks: @@ -978,8 +981,8 @@ nn: mark_statuses_as_sensitive: å merke innleggene sine som følsomme none: en advarsel sensitive: å merke kontoen sin som følsom - silence: for å begrense deres konto - suspend: for å suspendere kontoen deres + silence: for å avgrensa kontoen deira + suspend: for å stenga kontoen deira body: "%{target} ankar på ei modereringsavgjerd av %{action_taken_by} den %{date}, som var %{type}. Dei skreiv:" next_steps: Du kan godkjenna anken for å endra modereringsavgjerda, eller du kan oversjå anken. subject: "%{username} ankar ei modereringsavgjer på %{instance}" @@ -1010,7 +1013,7 @@ nn: created_msg: Laga eit nytt kallenamn. No kan du setja i gang med flyttinga frå den gamle kontoen. deleted_msg: Fjerna kallenamnet. No vert det ikkje lenger mogeleg å flytta frå den andre kontoen til denne. empty: Du har inkje alias. - hint_html: Dersom du vil flytte fra en annen konto til den, kan du lage et alias her, som er påkrevd før du kan gå videre med å flytte følgere fra den gamle kontoen til den nye. Handlingen i seg selv er harmløs og reversibel. Kontoflyttingen har blitt satt i gang fra den gamle kontoen. + hint_html: Viss du vil flytta frå ein annan konto til denne, kan du laga eit alias her. Det treng du før du kan halda fram med å flytta fylgjarar frå den gamle kontoen til dnene. Denne handlinga er i seg sjølv harmlaus og kan angrast. Du har starta overføringa frå den gamle kontoen. remove: Fjern aliaslenking appearance: advanced_web_interface: Avansert nettgrensesnitt @@ -1064,7 +1067,7 @@ nn: didnt_get_confirmation: Fekk du ikkje stadfestingslenka? dont_have_your_security_key: Har du ikke sikkerhetsnøkkelen din? forgot_password: Har du gløymt passordet ditt? - invalid_reset_password_token: Tilgangsnykelen er ugyldig eller utgått. Ver venleg å beda om ein ny ein. + invalid_reset_password_token: Tilgangsnykelen er ugyldig eller utgått. Ver venleg å be om ein ny ein. link_to_otp: Skriv inn en 2-trinnskode fra din 2-trinnspåloggingsenhet eller en gjenopprettingskode link_to_webauth: Bruk sikkerhetsnøkkel-enheten din log_in_with: Logg inn med @@ -1107,7 +1110,7 @@ nn: title: Logg inn på %{domain} sign_up: manual_review: Når du lagar ein konto på %{domain}, vil moderatorane våre gå gjennom påmeldinga di manuelt. For å hjelpa oss med påmeldinga di, er det fint om du skriv litt om deg sjølv og kvifor du vil ha ein konto på %{domain}. - preamble: Med en konto på denne Mastodon-tjeneren vil du kunne følge andre personer på nettverket, uansett hvor kontoen deres holder til. + preamble: Med ein konto på denne Mastodon-tenaren kan du fylgja andre folk på nettverket, uansett kvar dei har brukarkontoen sin. title: La oss få deg satt i gang på %{domain}. status: account_status: Kontostatus @@ -1167,7 +1170,7 @@ nn: strikes: action_taken: Handling utført appeal: Klage - appeal_approved: Denne advarselens klage ble tatt til følge og er ikke lenger gyldig + appeal_approved: Denne handlinga er anka og er ikkje lenger gyldig appeal_rejected: Klagen ble avvist appeal_submitted_at: Klage levert appealed_msg: Din klage har blitt levert. Du får beskjed om den blir godkjent. @@ -1188,8 +1191,8 @@ nn: mark_statuses_as_sensitive: Markering av innlegg som ømtolige none: Advarsel sensitive: Markering av konto som ømtolig - silence: Begrensning av konto - suspend: Suspensjon av konto + silence: Avgrensing av konto + suspend: Utestenging av konto your_appeal_approved: Din klage har blitt godkjent your_appeal_pending: Du har levert en klage your_appeal_rejected: Din klage har blitt avvist @@ -1421,7 +1424,7 @@ nn: migrations: acct: Flytta til cancel: Avbryt omdirigeringen - cancel_explanation: Å avbryte omdirigeringen vil reaktivere din nåværende konto, men vil ikke bringe tilbake følgere som har blitt flyttet til den kontoen. + cancel_explanation: Viss du avbryt omdirigeringa, vil det ta i bruk at den noverande kontoen din, men det vil ikkje få tilbake fylgjarar som er flytte til den andre kontoen. cancelled_msg: Avbrøt omdirigeringen med suksess. errors: already_moved: er den same kontoen som du allereie har flytta til @@ -1432,7 +1435,7 @@ nn: followers_count: Fylgjarar då kontoen vart flytta incoming_migrations: Flyttar frå ein annan konto incoming_migrations_html: For å flytta frå ein annnan konto til denne må du fyrst laga eit kallenamn til kontoen. - moved_msg: Kontoen din omdirigeres nå til %{acct}, og følgerne dine blir flyttet over. + moved_msg: Kontoen din vidaresender no til %{acct}, og fylgjarane dine blir flytte over dit. not_redirecting: Kontoen din omdirigeres ikke til noen andre kontoer for øyeblikket. on_cooldown: Du har nylig overført kontoen din. Denne funksjonen blir tilgjengelig igjen om %{count} dager. past_migrations: Tidlegare vandringar @@ -1445,7 +1448,7 @@ nn: before: 'Før du fortsetter, vennligst les disse notisene nøye:' cooldown: Etter flytting er det en nedkjølingsperiode der du ikke vil kunne flytte igjen disabled_account: Din nåværende konto vil ikke være fullt brukbar etterpå. Men du vil ha tilgang til dataeksportering såvel som reaktivering. - followers: Denne handlingen vil flytte alle følgere fra den nåværende kontoen til den nye kontoen + followers: Denne handlinga flyttar alle fylgjarar frå denne kontoen til den nye only_redirect_html: Alternativt kan du velge å bare legge ut en omdirigering på profilen din. other_data: Inkje anna data flyttast av seg sjølve redirect: Profilen til din nåværende konto vil bli oppdatert med en omdirigeringsnotis og bli fjernet fra søk @@ -1507,9 +1510,9 @@ nn: trillion: Bil otp_authentication: code_hint: Skriv inn koden generert av autentiseringsappen din for å bekrefte - description_html: Hvis du skrur på 2-trinnsautentisering ved hjelp av en autentiseringsapp, vil pålogging kreve at du er i besittelse av autentiseringsenheten din, som genererer sjetonger som du skal skrive inn. + description_html: Viss du skrur på tofaktorinnlogging med ein innloggingsapp, må du ha telefonen din klar når du loggar inn. Telefonen lagar innloggingsnyklar du må skriva inn. enable: Aktiver - instructions_html: "Skann denne QR-koden i Authy, Google Autentisering, eller en lignende TOTP-app på en av dine enheter. Fra nå av, vil den appen generere sjetonger som du vil måtte skrive inn når du logger på." + instructions_html: "Skann denne QR-koden i Google authenticator eller annan tofaktor-app på telefonen din. Frå no vil den appen laga tilgangsnyklar som du skriv inn når du vil logga inn." manual_instructions: 'Hvis du ikke kan skanne QR-koden og må skrive den inn manuelt, her er tekstkoden i ren tekst:' setup: Sett opp wrong_code: Den innskrevne koden var ugyldig! Er tjenertiden og enhetstiden riktige? @@ -1561,7 +1564,7 @@ nn: dormant: I dvale follow_failure: Greidde ikkje fylgja alle kontoane du valde. follow_selected_followers: Følg valgte tilhengere - followers: Følgere + followers: Fylgjarar following: Følginger invited: Innboden last_active: Sist aktiv @@ -1652,14 +1655,26 @@ nn: import: Hent inn import_and_export: Importer og eksporter migrate: Kontoflytting - notifications: Varsel + notifications: E-postvarslingar preferences: Innstillingar profile: Profil relationships: Fylgjar og fylgjarar + severed_relationships: Brotne forhold statuses_cleanup: Automatisert sletting av innlegg strikes: Modereringsadvarsler two_factor_authentication: Tostegsautorisering webauthn_authentication: Sikkerhetsnøkler + severed_relationships: + download: Last ned (%{count}) + event_type: + account_suspension: Utestenging av konto (%{target_name}) + domain_block: Tenarutestenging (%{target_name}) + user_domain_block: Du blokkerte %{target_name} + lost_followers: Mista fylgjarar + lost_follows: Mista fylgjer + preamble: Du kan mista fylgjarar og folk du fylgjer når du blokkerer eit domene eller når moderatorar avgjer å utestenga ein annan tenar. Når det skjer, vil du kunne lasta ned ei liste over brotne forhold, slik at du kan sjå gjennom ho og kanskje importera ho på ein annan tenar. + purged: Informasjonen om denne tenaren er sletta av administratorane på tenaren din. + type: Hending statuses: attached: audio: @@ -1820,7 +1835,7 @@ nn: mark_statuses_as_sensitive: Nokre av innlegga dine har vorte markerte som ømtolige av moderatorane ved %{instance}. Dette tyder at folk må trykkje på mediane i innlegga for å førehandsvise dei. Du kan markera media som ømtolig sjølv når du legg ut nye innlegg. sensitive: Frå no av vil alle dine opplasta mediefiler bli markert som ømtolig og skjult bak ei klikk-åtvaring. silence: Medan kontoen din er avgrensa, vil berre folk som allereie fylgjer deg sjå dine tutar på denne tenaren, og du kan bli ekskludert fra diverse offentlige oppføringer. Andre kan framleis fylgje deg manuelt. - suspend: Du kan ikkje lenger bruke kontoen din, og profilen og andre data er ikkje lenger tilgjengelege. Du kan framleis logge inn for å be om ein sikkerheitskopi av data før dei blir fullstendig sletta om omtrent 30 dagar, men vi beheld nokre grunnleggjande data for å forhindre deg å omgå suspenderinga. + suspend: Du kan ikkje lenger bruka kontoen din, og profilen og andre data er ikkje lenger tilgjengelege. Du kan framleis logga inn for å be om ein sikkerheitskopi av data før dei blir fullstendig sletta om omtrent 30 dagar, men me vil lagra nokre grunnleggjande data for å syta for at du ikkje omgår utestenginga. reason: 'Årsak:' statuses: 'Innlegg sitert:' subject: @@ -1865,6 +1880,9 @@ nn: follows_subtitle: Fylg kjende folk follows_title: Kven du kan fylgja follows_view_more: Sjå fleire du kan fylgja + hashtags_recent_count: + one: "%{people} person dei siste to dagane" + other: "%{people} personar dei siste to dagane" hashtags_subtitle: Sjå kva som har vore populært dei siste to dagane hashtags_title: Populære emneknaggar hashtags_view_more: Sjå fleire populære emneknaggar diff --git a/config/locales/no.yml b/config/locales/no.yml index 4cdf2ca82..c71dffc63 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1649,7 +1649,6 @@ import: Importér import_and_export: Importer og eksporter migrate: Kontomigrering - notifications: Varslinger preferences: Innstillinger profile: Profil relationships: Følginger og følgere diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 569f76715..0a653ea46 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -832,7 +832,6 @@ oc: import: Importar de donadas import_and_export: Import e export migrate: Migracion de compte - notifications: Notificacions preferences: Preferéncias profile: Perfil relationships: Abonaments e seguidors diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e43f9a605..89eec685d 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -621,6 +621,9 @@ pl: actions_description_html: Zdecyduj, jakie działania należy podjąć, aby rozstrzygnąć niniejsze zgłoszenie. Jeśli podejmiesz działania karne przeciwko zgłoszonemu kontowi, zostanie do nich wysłane powiadomienie e-mail, chyba że wybrano kategorię Spam. actions_description_remote_html: Zdecyduj, jakie działanie należy podjąć, aby rozwiązać to zgłoszenie. Będzie to miało wpływ jedynie na sposób, w jaki Twój serwer komunikuje się z tym kontem zdalnym i obsługuje jego zawartość. add_to_report: Dodaj więcej do zgłoszenia + already_suspended_badges: + local: Już zawieszono na tym serwerze + remote: Już zawieszono na ich serwerze are_you_sure: Czy na pewno? assign_to_self: Przypisz do siebie assigned: Przypisany moderator @@ -1704,14 +1707,26 @@ pl: import: Importowanie danych import_and_export: Import i eksport migrate: Migracja konta - notifications: Powiadomienia + notifications: Powiadomienia e-mail preferences: Preferencje profile: Profil relationships: Obserwowani i obserwujący + severed_relationships: Zerwane związki statuses_cleanup: Automatyczne usuwanie wpisów strikes: Ostrzeżenia moderacyjne two_factor_authentication: Uwierzytelnianie dwuetapowe webauthn_authentication: Klucze bezpieczeństwa + severed_relationships: + download: Pobierz (%{count}) + event_type: + account_suspension: Zawieszenie konta (%{target_name}) + domain_block: Zawieszenie serwera (%{target_name}) + user_domain_block: Zablokowano %{target_name} + lost_followers: Utraceni obserwujący + lost_follows: Utracone obserwowania + preamble: Możesz stracić obserwowania i obserwujących kiedy zablokujesz domenę albo kiedy twoi moderatorzy postanowią zawiesić obcy serwer. W tym wypadku będziesz móc pobrać listę zerwanych związków do przejrzenia i potencjalnego importu na innym serwerze. + purged: Informacje o tym serwerze zostały wyczyszczone przez administratora twojego serwera. + type: Zdarzenie statuses: attached: audio: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 194de9a3e..78a20aed0 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1652,7 +1652,6 @@ pt-BR: import: Importar import_and_export: Importar e exportar migrate: Migração de conta - notifications: Notificações preferences: Preferências profile: Perfil relationships: Seguindo e seguidores diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 57a698e1d..9dde61ff0 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -597,6 +597,9 @@ pt-PT: actions_description_html: Decida a ação a tomar para resolver esta denúncia. Se decidir por uma ação punitiva contra a conta denunciada, um e-mail de notificação será enviado, excetuando quando selecionada a categoria Spam. actions_description_remote_html: Decida quais as medidas a tomar para resolver esta denúncia. Isso apenas afetará como o seu servido comunica com esta conta remota e gere o seu conteúdo. add_to_report: Adicionar mais à denúncia + already_suspended_badges: + local: Já suspenso neste servidor + remote: Já suspenso no servidor deles are_you_sure: Tem a certeza? assign_to_self: Atribuída a mim assigned: Atribuída ao moderador @@ -1652,7 +1655,7 @@ pt-PT: import: Importar import_and_export: Importar e exportar migrate: Migração de conta - notifications: Notificações + notifications: Notificações por e-mail preferences: Preferências profile: Perfil relationships: Seguindo e seguidores @@ -1865,6 +1868,9 @@ pt-PT: follows_subtitle: Siga contas bem conhecidas follows_title: Quem seguir follows_view_more: Veja mais pessoas para seguir + hashtags_recent_count: + one: "%{people} pessoa nos últimos 2 dias" + other: "%{people} pessoas nos últimos 2 dias" hashtags_subtitle: Explore o que está em tendência desde os últimos 2 dias hashtags_title: Trending hashtags hashtags_view_more: Ver mais hashtags em alta diff --git a/config/locales/ru.yml b/config/locales/ru.yml index d2c460970..05ea31ff8 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1699,7 +1699,6 @@ ru: import: Импорт import_and_export: Импорт и экспорт migrate: Миграция учётной записи - notifications: Уведомления preferences: Настройки profile: Профиль relationships: Подписки и подписчики diff --git a/config/locales/sc.yml b/config/locales/sc.yml index e51ac84ea..01c355794 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -985,7 +985,6 @@ sc: import: Importatzione import_and_export: Importatzione e esportatzione migrate: Tràmuda de contu - notifications: Notìficas preferences: Preferèntzias profile: Profilu relationships: Gente chi sighis e sighiduras diff --git a/config/locales/sco.yml b/config/locales/sco.yml index 8382dec76..2a7b1e3e7 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1407,7 +1407,6 @@ sco: import: Import import_and_export: Import an export migrate: Accoont flittin - notifications: Notes preferences: Preferences profile: Profile relationships: Follaes and follaers diff --git a/config/locales/si.yml b/config/locales/si.yml index e0be7ff8e..f5e65fda8 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1274,7 +1274,6 @@ si: import: ආයාතය import_and_export: ආයාත හා නිර්යාත migrate: ගිණුම් සංක්‍රමණය - notifications: දැනුම්දීම් preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගමන හා අනුගාමික diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index a4e57841e..823929c55 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -116,6 +116,7 @@ fr-CA: sign_up_requires_approval: Les nouvelles inscriptions nécessiteront votre approbation severity: Choisir ce qui se passera avec les requêtes de cette adresse IP rule: + hint: Optionnel. Fournissez plus de détails sur la règle text: Décrivez une règle ou une exigence pour les utilisateurs sur ce serveur. Essayez de la garder courte et simple sessions: otp: 'Entrez le code d’authentification à deux facteurs généré par l’application de votre téléphone ou utilisez un de vos codes de récupération :' @@ -299,6 +300,7 @@ fr-CA: patch: Notifier pour des mises à jour de corrections de bug trending_tag: Nouvelle tendance nécessitant supervision rule: + hint: Information supplémentaire text: Règle settings: indexable: Inclure la page de profil dans les moteurs de recherches diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index bd1dc6885..4c8de1b20 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -116,6 +116,7 @@ fr: sign_up_requires_approval: Les nouvelles inscriptions nécessiteront votre approbation severity: Choisir ce qui se passera avec les requêtes de cette adresse IP rule: + hint: Optionnel. Fournissez plus de détails sur la règle text: Décrivez une règle ou une exigence pour les utilisateurs sur ce serveur. Essayez de la garder courte et simple sessions: otp: 'Entrez le code d’authentification à deux facteurs généré par l’application de votre téléphone ou utilisez un de vos codes de récupération :' @@ -299,6 +300,7 @@ fr: patch: Notifier pour des mises à jour de corrections de bug trending_tag: Nouvelle tendance nécessitant supervision rule: + hint: Information supplémentaire text: Règle settings: indexable: Inclure la page de profil dans les moteurs de recherches diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index d948a88ed..627d96df0 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -303,7 +303,7 @@ ko: hint: 추가 정보 text: 규칙 settings: - indexable: 검색 엔진에 프로필 페이지 기재하기 + indexable: 검색엔진에 프로필 페이지 포함하기 show_application: 어떤 앱으로 게시물을 보냈는지 표시 tag: listable: 이 해시태그가 검색과 추천에 보여지도록 허용 diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 596fbe3e3..002761065 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -6,7 +6,7 @@ lv: discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. - indexable: Tavas publiskās ziņas var tikt parādītas Mastodon meklēšanas rezultātos. Personas, kuras ir mijiedarbojušās ar tavām ziņām, var tās meklēt neatkarīgi no tā. + indexable: Tavi publiskie ieraksti var tikt parādīti Mastodon meklēšanas iznākumā. Cilvēki, kuri ir mijiedarbojušies ar Taviem ierakstiem, var tos meklēt neatkarīgi no tā. note: 'Tu vari @minēt citus cilvēkus vai #mirkļbirkas.' show_collections: Cilvēki varēs pārlūkot Tavus sekotājus un sekojamos. Cilvēki, kuriem Tu seko, redzēs, ka Tu seko viņiem neatkarīgi no tā. unlocked: Cilvēki varēs tev sekot, neprasot apstiprinājumu. Noņem atzīmi, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, pieņemt vai noraidīt jaunus sekotājus. @@ -44,7 +44,7 @@ lv: context: Viens vai vairāki konteksti, kur jāpiemēro filtrs current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli - digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas + digest: Tiek nosūtīts tikai pēc ilgstošas bezdarbības un tikai tad, ja savas prombūtnes laikā esi saņēmis jebkādas personīgas ziņas email: Tev tiks nosūtīts apstiprinājuma e-pasts header: WEBP, PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 72525619c..a9f5f609f 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -165,7 +165,7 @@ nn: none: Gjer inkje sensitive: Ømtolig silence: Togn - suspend: Utvis og slett kontodata for godt + suspend: Utvis warning_preset_id: Bruk åtvaringsoppsett announcement: all_day: Heildagshending @@ -224,7 +224,7 @@ nn: setting_use_blurhash: Vis fargerike overgangar for gøymde medium setting_use_pending_items: Saktemodus severity: Alvorsgrad - sign_in_token_attempt: Trygdenykel + sign_in_token_attempt: Innloggingsnykel title: Tittel type: Importtype username: Brukarnamn @@ -280,7 +280,7 @@ nn: severities: no_access: Blokker tilgang sign_up_block: Blokker registrering - sign_up_requires_approval: Begrens påmeldinger + sign_up_requires_approval: Avgrens påmeldingar severity: Oppføring notification_emails: appeal: Nokon klagar på ei moderatoravgjerd diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index c3b8625c8..37372cac2 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -116,6 +116,7 @@ sv: sign_up_requires_approval: Nya registreringar kräver ditt godkännande severity: Välj vad som ska hända med förfrågningar från denna IP rule: + hint: Valfritt. Ange mer information om regeln text: Beskriv en regel eller ett krav för användare av denna server. Försök hålla det kort och koncist sessions: otp: 'Ange tvåfaktorskoden som genererades av din telefonapp, eller använd någon av dina återställningskoder:' diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 1d8866645..8c613e958 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -198,11 +198,14 @@ sk: destroy_ip_block: Vymaž IP pravidlo destroy_status: Vymaž príspevok destroy_unavailable_domain: Vymaž nedostupnú doménu + destroy_user_role: Zničiť rolu disable_2fa_user: Vypni dvoj-faktorové overovanie disable_custom_emoji: Vypni vlastné emotikony + disable_sign_in_token_auth_user: Zakázať používateľom overovanie e-mailovým tokenom disable_user: Deaktivuj užívateľa enable_custom_emoji: Povoľ vlastné emotikony enable_user: Povoľ užívateľa + memorialize_account: Zmena na „in memoriam“ promote_user: Povýš užívateľskú rolu reject_appeal: Zamietni námietku reject_user: Zamietni užívateľa @@ -447,10 +450,13 @@ sk: instance_statuses_measure: uložené príspevky delivery: all: Všetko + clear: Vymazať chyby doručovania failing: Zlyhávajúce + restart: Reštartovať doručovanie stop: Zastav doručenie unavailable: Nedostupné delivery_available: Je v dosahu doručovania + delivery_error_days: Dni chybného doručovania empty: Nenájdené žiadne domény. moderation: all: Všetky @@ -1188,11 +1194,14 @@ sk: import: Importuj import_and_export: Import a export migrate: Presuň účet - notifications: Oboznámenia + notifications: Emailové upozornenia preferences: Voľby profile: Profil relationships: Sledovania a následovatelia two_factor_authentication: Dvojfázové overenie + severed_relationships: + lost_followers: Stratení nasledovatelia + lost_follows: Stratené sledovania statuses: attached: description: 'Priložené: %{attached}' diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 3f2b65b76..adb3a041c 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -621,6 +621,9 @@ sl: actions_description_html: Odločite se, katere ukrepe boste sprejeli za rešitev te prijave. Če sprejmete kazenski ukrep proti prijavljenemu računu, mu bo poslano e-poštno obvestilo, razen če je izbrana kategorija Neželena pošta. actions_description_remote_html: Odločite se za dejanje, ki bo odločilo o tej prijavi. To bo vplivalo le na to, kako vaš strežnik komunicira s tem oddaljenim računom in obravnava njegovo vsebino. add_to_report: Dodaj več v prijavo + already_suspended_badges: + local: Že suspendiran na tem strežniku + remote: Že suspendiran na njihovem strežniku are_you_sure: Ali ste prepričani? assign_to_self: Dodeli meni assigned: Dodeljen moderator @@ -1256,17 +1259,17 @@ sl: exports: archive_takeout: date: Datum - download: Prenesi svoj arhiv - hint_html: Zahtevate lahko arhiv vaših objav in naloženih medijev. Izvoženi podatki bodo v zapisu ActivityPub, ki ga bo mogoče brati s poljubno skladno programsko opremo. Arhiv lahko zahtevate vsakih 7 dni. - in_progress: Prevajanje arhiva... + download: Prenesite svoj arhiv + hint_html: Zahtevate lahko arhiv svojih objav in naloženih medijev. Izvoženi podatki bodo v zapisu ActivityPub, ki ga bo mogoče brati s poljubno skladno programsko opremo. Arhiv lahko zahtevate vsakih 7 dni. + in_progress: Pripravljanje vašega arhiva … request: Zahtevajte svoj arhiv size: Velikost - blocks: Blokirate + blocks: Blokirani bookmarks: Zaznamki csv: CSV - domain_blocks: Bloki domene + domain_blocks: Blokirane domene lists: Seznami - mutes: Utišate + mutes: Utišani storage: Shranjeni mediji featured_tags: add_new: Dodaj novo @@ -1610,17 +1613,17 @@ sl: confirm_follow_selected_followers: Ali ste prepričani, da želite slediti izbranim sledilcem? confirm_remove_selected_followers: Ali ste prepričani, da želite odstraniti izbrane sledilce? confirm_remove_selected_follows: Ali ste prepričani, da želite odstraniti izbrana sledenja? - dormant: Skrit + dormant: Nedejavno follow_failure: Nekaterim od izbranih računov ni bilo mogoče slediti. follow_selected_followers: Sledi izbranim sledilcem followers: Sledilci - following: Sledi + following: Sledeni invited: Vabljeni last_active: Zadnja dejavnost - most_recent: Najnovejša + most_recent: Najnovejše moved: Prestavljeno - mutual: Vzajemna - primary: Primarna + mutual: Vzajemno + primary: Primarno relationship: Razmerje remove_selected_domains: Odstrani vse sledilce iz izbranih domen remove_selected_followers: Odstrani izbrane sledilce @@ -1704,14 +1707,26 @@ sl: import: Uvozi import_and_export: Uvoz in izvoz migrate: Selitev računa - notifications: Obvestila + notifications: Obvestila po e-pošti preferences: Nastavitve profile: Profil relationships: Sledenja in sledilci + severed_relationships: Prekinjene veze statuses_cleanup: Samodejno brisanje objav strikes: Ukrepi morediranja two_factor_authentication: Dvofaktorsko overjanje webauthn_authentication: Varnostni ključi + severed_relationships: + download: Prejmi (%{count}) + event_type: + account_suspension: Suspendiranje računa (%{target_name}) + domain_block: Suspendiranje strežnika (%{target_name}) + user_domain_block: Blokirali ste %{target_name} + lost_followers: Izgubljeni sledilci + lost_follows: Izgubljena sledeni + preamble: Če blokirate domeno ali če se vaši moderatorji odločijo suspendirati oddaljen strežnik, lahko izgubite sledene in sledilce. Ko se to zgodi, boste lahko prejeli sezname prekinjenih vez za pregled in morebitno uvažanje na drugem strežniku. + purged: Podatke o tem strežniku so očistili skrbniki vašega strežnika. + type: Dogodek statuses: attached: audio: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 759f99547..3742b6142 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -596,6 +596,9 @@ sq: actions_description_html: Vendosni cili veprim të kryhet për të zgjidhur këtë raportim. Nëse ndërmerrni një veprim ndëshkues kundër llogarisë së raportuar, atyre do t’u dërgohet një njoftim me email, hiq rastin kur përzgjidhet kategoria I padëshiruar. actions_description_remote_html: Vendosni cili veprim të ndërmerret për zgjidhjen e këtij raportimi. Kjo do të prekë vetëm mënyrën se si shërbyesi juaj komunikon me këtë llogari të largët dhe se si e trajtojnë lëndën e saj. add_to_report: Shtoni më tepër te raportimi + already_suspended_badges: + local: Tashmë i pezulluar në këtë shërbyes + remote: Tashmë i pezulluar në shërbyesin e vet are_you_sure: A jeni i sigurt? assign_to_self: Caktojani vetes assigned: Iu caktua moderator @@ -1648,14 +1651,24 @@ sq: import: Importo import_and_export: Importim dhe eksportim migrate: Migrim llogarie - notifications: Njoftime + notifications: Njoftime me email preferences: Parapëlqime profile: Profil relationships: Ndjekje dhe ndjekës + severed_relationships: Marrëdhënie të ndërprera statuses_cleanup: Fshirje e automatizuar postimesh strikes: Paralajmërime nga moderimi two_factor_authentication: Mirëfilltësim Dyfaktorësh webauthn_authentication: Kyçe sigurie + severed_relationships: + download: Shkarkim (%{count}) + event_type: + account_suspension: Pezullim llogarie (%{target_name}) + domain_block: Pezullim shërbyesi (%{target_name}) + user_domain_block: Bllokuat %{target_name} + preamble: Mund të humbni ndjekje dhe ndjekës, kur bllokoni një përkatësi, ose kur moderatorët tuaj vendosin të pezullojnë një shërbyes të largët. Kur kjo ndodh, do të jeni në gjendje të shkarkoni lista marrëdhëniesh të dëmtuara, për t’i shqyrtuar dhe mundet për t’i importuar në një shërbyes tjetër. + purged: Hollësitë rreth këtij shërbyesi janë spastuar nga përgjegjësit e shërbyesit tuaj. + type: Akt statuses: attached: audio: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 74a5e0b1c..4f10fe864 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1678,7 +1678,6 @@ sr-Latn: import: Uvoz import_and_export: Uvoz i izvoz migrate: Prebacivanje naloga - notifications: Obaveštenja preferences: Podešavanja profile: Javni profil relationships: Praćenja i pratioci diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 9e7dd9c35..382f196bd 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1678,7 +1678,6 @@ sr: import: Увоз import_and_export: Увоз и извоз migrate: Пребацивање налога - notifications: Обавештења preferences: Подешавања profile: Јавни профил relationships: Праћења и пратиоци diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d282d9222..8ffb3c1e2 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1652,7 +1652,7 @@ sv: import: Importera import_and_export: Import och export migrate: Kontoflytt - notifications: Aviseringar + notifications: E-postaviseringar preferences: Inställningar profile: Profil relationships: Följer och följare @@ -1660,6 +1660,9 @@ sv: strikes: Modereringsprickar two_factor_authentication: Tvåfaktorsautentisering webauthn_authentication: Säkerhetsnycklar + severed_relationships: + lost_follows: Förlorade följare + type: Händelse statuses: attached: audio: diff --git a/config/locales/th.yml b/config/locales/th.yml index 67d2b9479..558552362 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -585,6 +585,9 @@ th: actions_description_html: ตัดสินใจว่าการกระทำใดที่จะใช้เพื่อแก้ปัญหารายงานนี้ หากคุณใช้การกระทำที่เป็นการลงโทษต่อบัญชีที่รายงาน จะส่งการแจ้งเตือนอีเมลถึงเขา ยกเว้นเมื่อมีการเลือกหมวดหมู่ สแปม actions_description_remote_html: ตัดสินใจว่าการกระทำใดที่จะใช้เพื่อแก้ปัญหารายงานนี้ นี่จะมีผลต่อวิธีที่เซิร์ฟเวอร์ ของคุณ สื่อสารกับบัญชีระยะไกลนี้และจัดการเนื้อหาของบัญชีเท่านั้น add_to_report: เพิ่มข้อมูลเพิ่มเติมไปยังรายงาน + already_suspended_badges: + local: ระงับในเซิร์ฟเวอร์นี้อยู่แล้ว + remote: ระงับในเซิร์ฟเวอร์ของเขาอยู่แล้ว are_you_sure: คุณแน่ใจหรือไม่? assign_to_self: มอบหมายให้ฉัน assigned: ผู้กลั่นกรองที่ได้รับมอบหมาย @@ -1626,7 +1629,7 @@ th: import: การนำเข้า import_and_export: การนำเข้าและการส่งออก migrate: การโยกย้ายบัญชี - notifications: การแจ้งเตือน + notifications: การแจ้งเตือนทางอีเมล preferences: การกำหนดลักษณะ profile: โปรไฟล์สาธารณะ relationships: การติดตามและผู้ติดตาม diff --git a/config/locales/tr.yml b/config/locales/tr.yml index a942e5b39..692b3d281 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -597,6 +597,9 @@ tr: actions_description_html: Bu bildirimi çözmek için ne yapılması gerektiğine karar verin. Bildirilen hesap için ceza işlemi yaparsanız, İstenmeyen kategorisi seçilmemişse, onlara bir e-posta duyurusu gönderilecektir. actions_description_remote_html: Bu bildirimi çözmek için hangi eylemi yapmak istediğinize karar verin. Bu yalnızca sizin sunucunuzun bu uzak hesapla nasıl etkileşeğini ve içeriğiyle ne yapacağını etkiler. add_to_report: Bildirime daha fazlasını ekle + already_suspended_badges: + local: Bu sunucuda zaten askıya alınmış + remote: Sunucularında zaten askıya alınmış are_you_sure: Emin misiniz? assign_to_self: Bana ata assigned: Denetleyici atandı @@ -1652,14 +1655,26 @@ tr: import: İçe aktar import_and_export: İçe ve dışa aktar migrate: Hesap taşıma - notifications: Bildirimler + notifications: E-posta bildirimleri preferences: Tercihler profile: Profil relationships: Takip edilenler ve takipçiler + severed_relationships: Kopmuş ilişkiler statuses_cleanup: Otomatik gönderi silme strikes: Moderasyon eylemleri two_factor_authentication: İki adımlı doğrulama webauthn_authentication: Güvenlik anahtarları + severed_relationships: + download: İndir (%{count}) + event_type: + account_suspension: Hesap askıya alma (%{target_name}) + domain_block: Sunucu askıya alma (%{target_name}) + user_domain_block: 'Engellediniz: %{target_name}' + lost_followers: Kaybedilen takipçiler + lost_follows: Kaybedilen takipler + preamble: Bir alan adını engellediğinizde veya denetleyicileriniz uzak bir sunucuyu askıya almaya karar verdiğinde takipçilerinizi ve takiplerinizi kaybedebilirsiniz. Bu olduğunda, kopan ilişkilerin bir listesini, incelemek ve başka bir sunucuya aktarmak için indirebileceksiniz. + purged: Bu sunucu hakkındaki bilgiler, sunucunun yöneticileri tarafından temizlenmiş. + type: Olay statuses: attached: audio: diff --git a/config/locales/tt.yml b/config/locales/tt.yml index 845b33a02..c1a22a4ca 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -511,7 +511,6 @@ tt: development: Ясаучылар өчен edit_profile: Профильне үзгәртү import: Импортлау - notifications: Искәртүләр preferences: Caylaw profile: Профиль two_factor_authentication: Ике-факторлы авторизация diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 9c343489e..b02e9c556 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -621,6 +621,9 @@ uk: actions_description_html: Визначте, які дії слід вжити для розв'язання цієї скарги. Якщо ви оберете каральні дії проти зареєстрованого облікового запису, про них буде надіслано сповіщення електронним листом, крім випадків, коли вибрано категорію Спам. actions_description_remote_html: Визначте, які дії слід вжити для розв'язання цього звіту. Це вплине тільки на те, як ваш сервер з'єднується з цим віддаленим обліковим записом і обробляє його вміст. add_to_report: Додати ще подробиць до скарги + already_suspended_badges: + local: Вже призупинено на цьому сервері + remote: Уже призупинено на їх сервері are_you_sure: Ви впевнені? assign_to_self: Призначити мені assigned: Призначений модератор @@ -1704,14 +1707,26 @@ uk: import: Імпорт import_and_export: Імпорт та експорт migrate: Міграція облікового запису - notifications: Сповіщення + notifications: E-mail сповіщення preferences: Налаштування profile: Загальнодоступний профіль relationships: Підписки та підписники + severed_relationships: Розірвані зв'язки statuses_cleanup: Автовидалення допису strikes: Попередження модераторів two_factor_authentication: Двофакторна автентифікація webauthn_authentication: Ключі безпеки + severed_relationships: + download: Завантажити (%{count}) + event_type: + account_suspension: Призупинення облікового запису (%{target_name}) + domain_block: Призупинення сервера (%{target_name}) + user_domain_block: Ви заблокували %{target_name} + lost_followers: Втрачені підписники + lost_follows: Втрачені підписки + preamble: Ви можете втратити підписки та підписників, коли ви блокуєте домен або коли модератори вирішують призупинити віддалений сервер. Коли це станеться, ви зможете завантажити списки розірваних зв'язків, які мають бути перевірені та, можливо, імпортовані на іншому сервері. + purged: Інформацію про цей сервер очищені адміністраторами вашого сервера. + type: Подія statuses: attached: audio: @@ -1908,8 +1923,41 @@ uk: apps_ios_action: Завантажити з App Store apps_step: Завантажити наші офіційні застосунки. apps_title: Застосунки Mastodon + checklist_subtitle: 'Розпочнімо у цій новій соціальній межі:' + checklist_title: Контрольний список привітання + edit_profile_action: Персоналізувати + edit_profile_step: Інші, ймовірно, швидше взаємодіятимуть з вами, якщо ви заповните профіль. + edit_profile_title: Персоналізуйте свій профіль explanation: Ось кілька порад для початку feature_action: Докладніше + feature_audience: Mastodon надає унікальну можливість керувати своєю аудиторією без посередників. Маючи сервер Mastodon, розгорнутий на власній інфраструктурі, його користувачі можуть взаємодіяти з будь-яким іншим сервером Mastodon, не віддаючи контроль у чужі руки. + feature_audience_title: Формуйте свою аудиторію з впевненістю + feature_control: Тільки ви знаєте, що саме хочете бачити на своєму сервері. Немає алгоритмів або реклами, що марнують ваш час. Слідкуйте за будь-яким сервером Mastodon з одного облікового запису та отримуйте повідомлення в хронологічному порядку, і зробіть ваш куточок інтернету трохи схожим на вас. + feature_control_title: Керуйте своєю стрічкою + feature_creativity: Mastodon підтримує дописи з аудіо, відео та зображеннями, опис для доступності, опитування, попередження про вміст, анімовані аватари, користувацькі емодзі, мініатюри, керування кадруванням мініатюр та багато іншого. Чи викладаєте ви своє мистецтво, чи музику або подкаст, Mastodon тут для вас. + feature_creativity_title: Необмежена творчість + feature_moderation: Mastodon повертає прийняття рішень у ваші руки. На відміну від соціальних мереж, що належать корпораціям, які спускають свої правила згори, кожен сервер Mastodon встановлює свої правила і норми, яких дотримуються на місцевому рівні, що робить їх найгнучкішими для задовільнення потреб різних груп людей. Приєднуйтесь до сервера з правилами, з якими ви згодні, або створіть свій власний. + feature_moderation_title: Модерація, якою вона має бути + follow_action: Підписатися + follow_step: Ви керуєте головною стрічкою. Заповнюйте її цікавими людьми. + follow_title: Персоналізуйте домашню стрічку + follows_subtitle: Стежте за відомими обліковими записами + follows_title: На кого підписатися + follows_view_more: Переглянути більше людей, щоб підписатися + hashtags_recent_count: + few: "%{people} особи за останні 2 дні" + many: "%{people} осіб за останні 2 дні" + one: "%{people} особа за останні 2 дні" + other: "%{people} особа за останні 2 дні" + hashtags_subtitle: Дізнавайтеся, що було популярним минулі 2 дні + hashtags_title: Популярні хештеги + hashtags_view_more: Переглянути більше популярних хештеґів + post_action: Створити + post_step: Привітайтеся зі світом, з текстом, світлинами, відео та опитуваннями. + post_title: Напишіть свій перший допис + share_action: Поділитися + share_step: Розкажіть друзям, як знайти вас на Mastodon. + share_title: Поділіться своїм профілем Mastodon sign_in_action: Увійти subject: Ласкаво просимо до Mastodon title: Ласкаво просимо, %{name}! diff --git a/config/locales/vi.yml b/config/locales/vi.yml index b9efeee46..f71ff741d 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -585,6 +585,9 @@ vi: actions_description_html: Nếu áp đặt trừng phạt, một email thông báo sẽ được gửi cho người này, ngoại trừ Spam. actions_description_remote_html: Chọn hành động cần thực hiện để xử lý báo cáo này. Điều này sẽ chỉ ảnh hưởng đến cách máy chủ của bạn giao tiếp với tài khoản này và xử lý nội dung của nó. add_to_report: Bổ sung báo cáo + already_suspended_badges: + local: Đã vô hiệu hóa trên máy chủ này + remote: Đã vô hiệu hóa trên máy chủ khác are_you_sure: Bạn có chắc không? assign_to_self: Giao cho tôi assigned: Người xử lý @@ -1626,14 +1629,26 @@ vi: import: Nhập dữ liệu import_and_export: Dữ liệu migrate: Chuyển tài khoản sang máy chủ khác - notifications: Thông báo + notifications: Thông báo email preferences: Chung profile: Hồ sơ relationships: Quan hệ + severed_relationships: Mối quan hệ bị cắt đứt statuses_cleanup: Tự động xóa tút cũ strikes: Lần cảnh cáo two_factor_authentication: Xác minh 2 bước webauthn_authentication: Khóa bảo mật + severed_relationships: + download: Tải xuống (%{count}) + event_type: + account_suspension: Người bị vô hiệu hóa (%{target_name}) + domain_block: Máy chủ bị vô hiệu hóa (%{target_name}) + user_domain_block: Bạn đã chặn %{target_name} + lost_followers: Mất người theo dõi + lost_follows: Mất người đang theo dõi + preamble: Bạn có thể mất số lượt theo dõi và người theo dõi khi chặn một máy chủ hoặc khi kiểm duyệt viên của bạn quyết định tạm dừng máy chủ từ xa. Khi điều đó xảy ra, bạn sẽ có thể tải xuống danh sách các mối quan hệ đã bị cắt đứt, để kiểm tra và nhập vào máy chủ khác. + purged: Thông tin về máy chủ này đã bị quản trị viên máy chủ của bạn xóa sạch. + type: Sự kiện statuses: attached: audio: diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 1db573369..180fcf2f1 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -110,5 +110,4 @@ zgh: account_settings: ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ back: ⴰⵖⵓⵍ ⵖⵔ ⵎⴰⵙⵜⵓⴷⵓⵏ edit_profile: ⵙⵏⴼⵍ ⵉⴼⵔⵙ - notifications: ⵜⵉⵏⵖⵎⵉⵙⵉⵏ profile: ⵉⴼⵔⵙ diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 2d1d82b30..dcc99d7a9 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -585,6 +585,9 @@ zh-CN: actions_description_html: 决定采取何种措施处理此举报。如果对被举报账号采取惩罚性措施,将向其发送一封电子邮件通知。但若选中垃圾信息类别则不会发送通知。 actions_description_remote_html: 决定采取何种行动来解决此举报。 这只会影响您的服务器如何与该远程帐户的通信并处理其内容。 add_to_report: 增加更多举报内容 + already_suspended_badges: + local: 已经在此服务器上暂停 + remote: 已在其所属服务器被封禁 are_you_sure: 你确定吗? assign_to_self: 接管 assigned: 已接管的监察员 @@ -1626,14 +1629,26 @@ zh-CN: import: 导入 import_and_export: 导入和导出 migrate: 账户迁移 - notifications: 通知 + notifications: 电子邮件通知 preferences: 首选项 profile: 个人资料 relationships: 关注管理 + severed_relationships: 已断开的关系 statuses_cleanup: 自动删除嘟文 strikes: 操作记录 two_factor_authentication: 双因素认证 webauthn_authentication: 安全密钥 + severed_relationships: + download: 下载 (%{count}) + event_type: + account_suspension: 账户被封禁 (%{target_name}) + domain_block: 服务器被封禁 (%{target_name}) + user_domain_block: 你屏蔽了 %{target_name} + lost_followers: 失去的关注者 + lost_follows: 失去的关注 + preamble: 当你屏蔽一个域名或你的管理员决定封禁一个外站服务器时,你可能会失去关注和粉丝。在这种情况下,你可以下载被切断的关系的列表,进行检查以便导入另一个服务器。 + purged: 关于此服务器的信息已被你所在服务器的管理员清除。 + type: 事件 statuses: attached: audio: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 0bb362ead..2a0f802a1 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1626,7 +1626,6 @@ zh-HK: import: 匯入 import_and_export: 匯入及匯出 migrate: 帳戶遷移 - notifications: 通知 preferences: 偏好設定 profile: 個人資料 relationships: 關注及追隨者 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 4c450f3c1..e83001e7d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -585,6 +585,9 @@ zh-TW: actions_description_html: 決定應對此報告採取何種行動。若您對檢舉之帳號採取懲罰措施,則將對他們發送 e-mail 通知,如非選擇了 垃圾郵件 類別。 actions_description_remote_html: 決定將對此檢舉報告採取何種動作。這將僅作用於您的伺服器與此遠端帳號及其內容之通訊行為。 add_to_report: 加入更多至報告 + already_suspended_badges: + local: 已自此伺服器停權 + remote: 已自該伺服器停權 are_you_sure: 您確定嗎? assign_to_self: 指派給自己 assigned: 指派站務 @@ -1328,7 +1331,7 @@ zh-TW: muting: 正在匯入已靜音帳號 type: 匯入類型 type_groups: - constructive: 跟隨者與書籤 + constructive: 跟隨中與書籤 destructive: 封鎖與靜音 types: blocking: 您封鎖的使用者列表 @@ -1628,14 +1631,26 @@ zh-TW: import: 匯入 import_and_export: 匯入及匯出 migrate: 帳號搬遷 - notifications: 通知 + notifications: 電子郵件通知 preferences: 偏好設定 profile: 個人檔案 relationships: 跟隨中與跟隨者 + severed_relationships: 已斷絕服務關係 statuses_cleanup: 自動嘟文刪除 strikes: 管理警告 two_factor_authentication: 兩階段驗證 webauthn_authentication: 安全金鑰 + severed_relationships: + download: 下載 (%{count} 份) + event_type: + account_suspension: 停權帳號 (%{target_name}) + domain_block: 停權伺服器 (%{target_name}) + user_domain_block: 您已封鎖 %{target_name} + lost_followers: 失去之跟隨者 + lost_follows: 失去之跟隨中 + preamble: 當您封鎖網域或您的管理員決定停權遠端伺服器時,您可能失去跟隨中或跟隨者。當此發生時,您能下載斷絕服務關係之列表並於其他伺服器中檢視或匯入資料。 + purged: 關於此伺服器已被您的伺服器管理員清除之資訊 + type: 事件 statuses: attached: audio: diff --git a/config/navigation.rb b/config/navigation.rb index 1e7acf3b9..791025d52 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -12,11 +12,15 @@ SimpleNavigation::Configuration.run do |navigation| n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_path, if: -> { current_user.functional? && !self_destruct } do |s| s.item :appearance, safe_join([fa_icon('desktop fw'), t('settings.appearance')]), settings_preferences_appearance_path - s.item :notifications, safe_join([fa_icon('bell fw'), t('settings.notifications')]), settings_preferences_notifications_path + s.item :notifications, safe_join([fa_icon('envelope fw'), t('settings.notifications')]), settings_preferences_notifications_path s.item :other, safe_join([fa_icon('cog fw'), t('preferences.other')]), settings_preferences_other_path end - n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_path, if: -> { current_user.functional? && !self_destruct } + n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_path, if: -> { current_user.functional? && !self_destruct } do |s| + s.item :current, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_path + s.item :severed_relationships, safe_join([fa_icon('unlink fw'), t('settings.severed_relationships')]), severed_relationships_path + end + n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? && !self_destruct } n.item :statuses_cleanup, safe_join([fa_icon('history fw'), t('settings.statuses_cleanup')]), statuses_cleanup_path, if: -> { current_user.functional_or_moved? && !self_destruct } diff --git a/config/routes.rb b/config/routes.rb index 55f2de6a1..d032b5110 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -189,6 +189,14 @@ Rails.application.routes.draw do end resource :relationships, only: [:show, :update] + resources :severed_relationships, only: [:index] do + member do + constraints(format: :csv) do + get :followers + get :following + end + end + end resource :statuses_cleanup, controller: :statuses_cleanup, only: [:show, :update] get '/media_proxy/:id/(*any)', to: 'media_proxy#show', as: :media_proxy, format: false diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb index 0e9a42f8d..a0ce0a663 100644 --- a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -36,8 +36,8 @@ class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1] requires_new_policy = true end - if deserialized_settings['interactions.must_be_following_dm'] - policy.filter_private_mentions = true + unless deserialized_settings['interactions.must_be_following_dm'] + policy.filter_private_mentions = false requires_new_policy = true end diff --git a/db/migrate/20240312100644_create_relationship_severance_events.rb b/db/migrate/20240312100644_create_relationship_severance_events.rb new file mode 100644 index 000000000..8c55fe330 --- /dev/null +++ b/db/migrate/20240312100644_create_relationship_severance_events.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CreateRelationshipSeveranceEvents < ActiveRecord::Migration[7.0] + def change + create_table :relationship_severance_events do |t| + t.integer :type, null: false + t.string :target_name, null: false + t.boolean :purged, null: false, default: false + + t.timestamps + + t.index [:type, :target_name] + end + end +end diff --git a/db/migrate/20240312105620_create_severed_relationships.rb b/db/migrate/20240312105620_create_severed_relationships.rb new file mode 100644 index 000000000..1ed911cd5 --- /dev/null +++ b/db/migrate/20240312105620_create_severed_relationships.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class CreateSeveredRelationships < ActiveRecord::Migration[7.0] + def change + create_table :severed_relationships do |t| + # No need to have an index on this foreign key as it is covered by `index_severed_relationships_on_unique_tuples` + t.references :relationship_severance_event, null: false, foreign_key: { on_delete: :cascade }, index: false + + # No need to have an index on this foregin key as it is covered by `index_severed_relationships_on_local_account_and_event` + t.references :local_account, null: false, foreign_key: { to_table: :accounts, on_delete: :cascade }, index: false + t.references :remote_account, null: false, foreign_key: { to_table: :accounts, on_delete: :cascade } + + # Used to describe whether `local_account` is the active (follower) or passive (followed) part of the relationship + t.integer :direction, null: false + + # Those attributes are carried over from the `follows` table + t.boolean :show_reblogs + t.boolean :notify + t.string :languages, array: true + + t.timestamps + + t.index [:relationship_severance_event_id, :local_account_id, :direction, :remote_account_id], name: 'index_severed_relationships_on_unique_tuples', unique: true + t.index [:local_account_id, :relationship_severance_event_id], name: 'index_severed_relationships_on_local_account_and_event' + end + end +end diff --git a/db/migrate/20240320140159_create_account_relationship_severance_events.rb b/db/migrate/20240320140159_create_account_relationship_severance_events.rb new file mode 100644 index 000000000..5262c508f --- /dev/null +++ b/db/migrate/20240320140159_create_account_relationship_severance_events.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class CreateAccountRelationshipSeveranceEvents < ActiveRecord::Migration[7.1] + def change + create_table :account_relationship_severance_events do |t| + t.belongs_to :account, foreign_key: { on_delete: :cascade }, null: false + t.belongs_to :relationship_severance_event, foreign_key: { on_delete: :cascade }, null: false + + t.integer :relationships_count, default: 0, null: false + + t.index [:account_id, :relationship_severance_event_id], unique: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240320163441_change_notification_request_last_status_id_nullable.rb b/db/migrate/20240320163441_change_notification_request_last_status_id_nullable.rb new file mode 100644 index 000000000..afc3df5aa --- /dev/null +++ b/db/migrate/20240320163441_change_notification_request_last_status_id_nullable.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class ChangeNotificationRequestLastStatusIdNullable < ActiveRecord::Migration[7.1] + def change + change_column_null :notification_requests, :last_status_id, true + end +end diff --git a/db/migrate/20240322125607_add_followers_and_following_counts_to_account_relationship_severance_events.rb b/db/migrate/20240322125607_add_followers_and_following_counts_to_account_relationship_severance_events.rb new file mode 100644 index 000000000..ab5752b7a --- /dev/null +++ b/db/migrate/20240322125607_add_followers_and_following_counts_to_account_relationship_severance_events.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class AddFollowersAndFollowingCountsToAccountRelationshipSeveranceEvents < ActiveRecord::Migration[7.1] + def change + add_column :account_relationship_severance_events, :followers_count, :integer, default: 0, null: false + add_column :account_relationship_severance_events, :following_count, :integer, default: 0, null: false + end +end diff --git a/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb b/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb new file mode 100644 index 000000000..9baefa677 --- /dev/null +++ b/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class MigrateInteractionSettingsToPolicyAgain < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + # Dummy classes, to make migration possible across version changes + class Account < ApplicationRecord + has_one :user, inverse_of: :account + has_one :notification_policy, inverse_of: :account + end + + class User < ApplicationRecord + belongs_to :account + end + + class NotificationPolicy < ApplicationRecord + belongs_to :account + end + + def up + User.includes(account: :notification_policy).find_each do |user| + deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + + next if deserialized_settings.nil? + + # If the user has configured a notification policy, don't override it + next if user.account.notification_policy.present? + + policy = user.account.build_notification_policy + requires_new_policy = false + + if deserialized_settings['interactions.must_be_follower'] + policy.filter_not_followers = true + requires_new_policy = true + end + + if deserialized_settings['interactions.must_be_following'] + policy.filter_not_following = true + requires_new_policy = true + end + + unless deserialized_settings['interactions.must_be_following_dm'] + policy.filter_private_mentions = false + requires_new_policy = true + end + + policy.save if requires_new_policy && policy.changed? + rescue ActiveRecord::RecordNotUnique + next + end + end + + def down; end +end diff --git a/db/post_migrate/20240322130318_remove_relationships_count_from_account_relationship_severance_events.rb b/db/post_migrate/20240322130318_remove_relationships_count_from_account_relationship_severance_events.rb new file mode 100644 index 000000000..76f2d325f --- /dev/null +++ b/db/post_migrate/20240322130318_remove_relationships_count_from_account_relationship_severance_events.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class RemoveRelationshipsCountFromAccountRelationshipSeveranceEvents < ActiveRecord::Migration[7.1] + def change + safety_assured { remove_column :account_relationship_severance_events, :relationships_count, :integer, default: 0, null: false } + end +end diff --git a/db/post_migrate/20240322161611_remove_obsolete_roles_from_users.rb b/db/post_migrate/20240322161611_remove_obsolete_roles_from_users.rb new file mode 100644 index 000000000..8a46a1d7d --- /dev/null +++ b/db/post_migrate/20240322161611_remove_obsolete_roles_from_users.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class RemoveObsoleteRolesFromUsers < ActiveRecord::Migration[7.1] + def change + safety_assured { remove_column :users, :admin, :boolean, default: false, null: false } + safety_assured { remove_column :users, :moderator, :boolean, default: false, null: false } + end +end diff --git a/db/schema.rb b/db/schema.rb index b98253a6c..27c486487 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_03_10_123453) do +ActiveRecord::Schema[7.1].define(version: 2024_03_22_161611) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -90,6 +90,18 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do t.index ["target_account_id"], name: "index_account_pins_on_target_account_id" end + create_table "account_relationship_severance_events", force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "relationship_severance_event_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "followers_count", default: 0, null: false + t.integer "following_count", default: 0, null: false + t.index ["account_id", "relationship_severance_event_id"], name: "idx_on_account_id_relationship_severance_event_id_7bd82bf20e", unique: true + t.index ["account_id"], name: "index_account_relationship_severance_events_on_account_id" + t.index ["relationship_severance_event_id"], name: "idx_on_relationship_severance_event_id_403f53e707" + end + create_table "account_stats", force: :cascade do |t| t.bigint "account_id", null: false t.bigint "statuses_count", default: 0, null: false @@ -689,7 +701,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do create_table "notification_requests", id: :bigint, default: -> { "timestamp_id('notification_requests'::text)" }, force: :cascade do |t| t.bigint "account_id", null: false t.bigint "from_account_id", null: false - t.bigint "last_status_id", null: false + t.bigint "last_status_id" t.bigint "notifications_count", default: 0, null: false t.boolean "dismissed", default: false, null: false t.datetime "created_at", null: false @@ -871,6 +883,15 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do t.string "url" end + create_table "relationship_severance_events", force: :cascade do |t| + t.integer "type", null: false + t.string "target_name", null: false + t.boolean "purged", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["type", "target_name"], name: "index_relationship_severance_events_on_type_and_target_name" + end + create_table "relays", force: :cascade do |t| t.string "inbox_url", default: "", null: false t.string "follow_activity_id" @@ -950,6 +971,21 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do t.index ["thing_type", "thing_id", "var"], name: "index_settings_on_thing_type_and_thing_id_and_var", unique: true end + create_table "severed_relationships", force: :cascade do |t| + t.bigint "relationship_severance_event_id", null: false + t.bigint "local_account_id", null: false + t.bigint "remote_account_id", null: false + t.integer "direction", null: false + t.boolean "show_reblogs" + t.boolean "notify" + t.string "languages", array: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["local_account_id", "relationship_severance_event_id"], name: "index_severed_relationships_on_local_account_and_event" + t.index ["relationship_severance_event_id", "local_account_id", "direction", "remote_account_id"], name: "index_severed_relationships_on_unique_tuples", unique: true + t.index ["remote_account_id"], name: "index_severed_relationships_on_remote_account_id" + end + create_table "site_uploads", force: :cascade do |t| t.string "var", default: "", null: false t.string "file_file_name" @@ -1134,7 +1170,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at", precision: nil t.datetime "last_sign_in_at", precision: nil - t.boolean "admin", default: false, null: false t.string "confirmation_token" t.datetime "confirmed_at", precision: nil t.datetime "confirmation_sent_at", precision: nil @@ -1149,7 +1184,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do t.string "otp_backup_codes", array: true t.bigint "account_id", null: false t.boolean "disabled", default: false, null: false - t.boolean "moderator", default: false, null: false t.bigint "invite_id" t.string "chosen_languages", array: true t.bigint "created_by_application_id" @@ -1228,6 +1262,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do add_foreign_key "account_notes", "accounts", on_delete: :cascade add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade add_foreign_key "account_pins", "accounts", on_delete: :cascade + add_foreign_key "account_relationship_severance_events", "accounts", on_delete: :cascade + add_foreign_key "account_relationship_severance_events", "relationship_severance_events", on_delete: :cascade add_foreign_key "account_stats", "accounts", on_delete: :cascade add_foreign_key "account_statuses_cleanup_policies", "accounts", on_delete: :cascade add_foreign_key "account_warnings", "accounts", column: "target_account_id", on_delete: :cascade @@ -1320,6 +1356,9 @@ ActiveRecord::Schema[7.1].define(version: 2024_03_10_123453) do add_foreign_key "scheduled_statuses", "accounts", on_delete: :cascade add_foreign_key "session_activations", "oauth_access_tokens", column: "access_token_id", name: "fk_957e5bda89", on_delete: :cascade add_foreign_key "session_activations", "users", name: "fk_e5fda67334", on_delete: :cascade + add_foreign_key "severed_relationships", "accounts", column: "local_account_id", on_delete: :cascade + add_foreign_key "severed_relationships", "accounts", column: "remote_account_id", on_delete: :cascade + add_foreign_key "severed_relationships", "relationship_severance_events", on_delete: :cascade add_foreign_key "status_edits", "accounts", on_delete: :nullify add_foreign_key "status_edits", "statuses", on_delete: :cascade add_foreign_key "status_pins", "accounts", name: "fk_d4cb435b62", on_delete: :cascade diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index 9f234e386..d16d55eae 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -5,7 +5,7 @@ require_relative 'base' module Mastodon::CLI class Maintenance < Base MIN_SUPPORTED_VERSION = 2019_10_01_213028 - MAX_SUPPORTED_VERSION = 2023_09_07_150100 + MAX_SUPPORTED_VERSION = 2023_10_23_105620 # Stubs to enjoy ActiveRecord queries while not depending on a particular # version of the code/database @@ -26,6 +26,9 @@ module Mastodon::CLI class ListAccount < ApplicationRecord; end class PollVote < ApplicationRecord; end class Mention < ApplicationRecord; end + class Notification < ApplicationRecord; end + class NotificationPermission < ApplicationRecord; end + class NotificationRequest < ApplicationRecord; end class AccountDomainBlock < ApplicationRecord; end class AnnouncementReaction < ApplicationRecord; end class FeaturedTag < ApplicationRecord; end @@ -39,9 +42,10 @@ module Mastodon::CLI class Webhook < ApplicationRecord; end class BulkImport < ApplicationRecord; end class SoftwareUpdate < ApplicationRecord; end + class SeveredRelationship < ApplicationRecord; end class DomainBlock < ApplicationRecord - enum severity: { silence: 0, suspend: 1, noop: 2 } + enum :severity, { silence: 0, suspend: 1, noop: 2 } scope :by_severity, -> { in_order_of(:severity, %w(noop silence suspend)).order(:domain) } end @@ -107,6 +111,18 @@ module Mastodon::CLI end end + from_classes = [Notification] + from_classes << NotificationPermission if db_table_exists?(:notification_permissions) + from_classes << NotificationRequest if db_table_exists?(:notification_requests) + + from_classes.each do |klass| + klass.where(from_account_id: other_account.id).find_each do |record| + record.update_attribute(:from_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + end + target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin] target_classes << AccountNote if db_table_exists?(:account_notes) @@ -129,6 +145,20 @@ module Mastodon::CLI record.update_attribute(:account_warning_id, id) end end + + if db_table_exists?(:severed_relationships) + SeveredRelationship.where(local_account_id: other_account.id).reorder(nil).find_each do |record| + record.update_attribute(:local_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + + SeveredRelationship.where(remote_account_id: other_account.id).reorder(nil).find_each do |record| + record.update_attribute(:remote_account_id, id) + rescue ActiveRecord::RecordNotUnique + next + end + end end end diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 935f6d24a..6afc013ed 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -105,6 +105,12 @@ namespace :tests do exit(1) end + policy = NotificationPolicy.find_by(account: User.find(1).account) + unless policy.filter_private_mentions == false && policy.filter_not_following == true + puts 'Notification policy not migrated as expected' + exit(1) + end + puts 'No errors found. Database state is consistent with a successful migration process.' end @@ -181,7 +187,8 @@ namespace :tests do INSERT INTO "settings" (id, thing_type, thing_id, var, value, created_at, updated_at) VALUES - (5, 'User', 4, 'default_language', E'--- kmr\n', now(), now()); + (5, 'User', 4, 'default_language', E'--- kmr\n', now(), now()), + (6, 'User', 1, 'interactions', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nmust_be_follower: false\nmust_be_following: true\nmust_be_following_dm: false\n', now(), now()); SQL end diff --git a/package.json b/package.json index a42767580..ed59a68a4 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "path-complete-extname": "^1.0.0", "postcss": "^8.4.24", "postcss-loader": "^4.3.0", + "postcss-preset-env": "^9.5.2", "prop-types": "^15.8.1", "punycode": "^2.3.0", "react": "^18.2.0", diff --git a/postcss.config.js b/postcss.config.js index 5d58d74e3..b6ea8130b 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,5 +1,6 @@ module.exports = ({ env }) => ({ plugins: [ + 'postcss-preset-env', 'autoprefixer', env === 'production' ? 'cssnano' : '', ], diff --git a/spec/fabricators/account_relationship_severance_event_fabricator.rb b/spec/fabricators/account_relationship_severance_event_fabricator.rb new file mode 100644 index 000000000..5580d5209 --- /dev/null +++ b/spec/fabricators/account_relationship_severance_event_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:account_relationship_severance_event) do + account + relationship_severance_event +end diff --git a/spec/fabricators/canonical_email_block_fabricator.rb b/spec/fabricators/canonical_email_block_fabricator.rb index 1ef53ff4a..2f979df79 100644 --- a/spec/fabricators/canonical_email_block_fabricator.rb +++ b/spec/fabricators/canonical_email_block_fabricator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true Fabricator(:canonical_email_block) do - email { sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } } + email { |attrs| attrs[:reference_account] ? attrs[:reference_account].user_email : sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } } reference_account { Fabricate.build(:account) } end diff --git a/spec/fabricators/featured_tag_fabricator.rb b/spec/fabricators/featured_tag_fabricator.rb index 0803dc43a..6003099db 100644 --- a/spec/fabricators/featured_tag_fabricator.rb +++ b/spec/fabricators/featured_tag_fabricator.rb @@ -2,6 +2,6 @@ Fabricator(:featured_tag) do account { Fabricate.build(:account) } - tag { Fabricate.build(:tag) } + tag { nil } name { sequence(:name) { |i| "Tag#{i}" } } end diff --git a/spec/fabricators/relationship_severance_event_fabricator.rb b/spec/fabricators/relationship_severance_event_fabricator.rb new file mode 100644 index 000000000..7fec14e9f --- /dev/null +++ b/spec/fabricators/relationship_severance_event_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:relationship_severance_event) do + type { :domain_block } + target_name { 'example.com' } +end diff --git a/spec/fabricators/severed_relationship_fabricator.rb b/spec/fabricators/severed_relationship_fabricator.rb new file mode 100644 index 000000000..6600b72cd --- /dev/null +++ b/spec/fabricators/severed_relationship_fabricator.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +Fabricator(:severed_relationship) do + local_account { Fabricate.build(:account) } + remote_account { Fabricate.build(:account) } + relationship_severance_event { Fabricate.build(:relationship_severance_event) } + direction { :active } +end diff --git a/spec/features/severed_relationships_spec.rb b/spec/features/severed_relationships_spec.rb new file mode 100644 index 000000000..b933398a0 --- /dev/null +++ b/spec/features/severed_relationships_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Severed relationships page' do + include ProfileStories + + describe 'GET severed_relationships#index' do + before do + as_a_logged_in_user + + event = Fabricate(:relationship_severance_event) + Fabricate.times(3, :severed_relationship, local_account: bob.account, relationship_severance_event: event) + Fabricate(:account_relationship_severance_event, account: bob.account, relationship_severance_event: event) + end + + it 'returns http success' do + visit severed_relationships_path + + expect(page).to have_title(I18n.t('settings.severed_relationships')) + expect(page).to have_link(href: following_severed_relationship_path(AccountRelationshipSeveranceEvent.first, format: :csv)) + end + end +end diff --git a/spec/models/relationship_severance_event_spec.rb b/spec/models/relationship_severance_event_spec.rb new file mode 100644 index 000000000..93c0f1a26 --- /dev/null +++ b/spec/models/relationship_severance_event_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe RelationshipSeveranceEvent do + let(:local_account) { Fabricate(:account) } + let(:remote_account) { Fabricate(:account, domain: 'example.com') } + let(:event) { Fabricate(:relationship_severance_event) } + + describe '#import_from_active_follows!' do + before do + local_account.follow!(remote_account) + end + + it 'imports the follow relationships with the expected direction' do + event.import_from_active_follows!(local_account.active_relationships) + + relationships = event.severed_relationships.to_a + expect(relationships.size).to eq 1 + expect(relationships[0].account).to eq local_account + expect(relationships[0].target_account).to eq remote_account + end + end + + describe '#import_from_passive_follows!' do + before do + remote_account.follow!(local_account) + end + + it 'imports the follow relationships with the expected direction' do + event.import_from_passive_follows!(local_account.passive_relationships) + + relationships = event.severed_relationships.to_a + expect(relationships.size).to eq 1 + expect(relationships[0].account).to eq remote_account + expect(relationships[0].target_account).to eq local_account + end + end + + describe '#affected_local_accounts' do + before do + event.severed_relationships.create!(local_account: local_account, remote_account: remote_account, direction: :active) + end + + it 'correctly lists local accounts' do + expect(event.affected_local_accounts.to_a).to contain_exactly(local_account) + end + end +end diff --git a/spec/models/severed_relationship_spec.rb b/spec/models/severed_relationship_spec.rb new file mode 100644 index 000000000..0f922d798 --- /dev/null +++ b/spec/models/severed_relationship_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe SeveredRelationship do + let(:local_account) { Fabricate(:account) } + let(:remote_account) { Fabricate(:account, domain: 'example.com') } + let(:event) { Fabricate(:relationship_severance_event) } + + describe '#account' do + context 'when the local account is the follower' do + let(:severed_relationship) { Fabricate(:severed_relationship, relationship_severance_event: event, local_account: local_account, remote_account: remote_account, direction: :active) } + + it 'returns the local account' do + expect(severed_relationship.account).to eq local_account + end + end + + context 'when the local account is being followed' do + let(:severed_relationship) { Fabricate(:severed_relationship, relationship_severance_event: event, local_account: local_account, remote_account: remote_account, direction: :passive) } + + it 'returns the remote account' do + expect(severed_relationship.account).to eq remote_account + end + end + end + + describe '#target_account' do + context 'when the local account is the follower' do + let(:severed_relationship) { Fabricate(:severed_relationship, relationship_severance_event: event, local_account: local_account, remote_account: remote_account, direction: :active) } + + it 'returns the remote account' do + expect(severed_relationship.target_account).to eq remote_account + end + end + + context 'when the local account is being followed' do + let(:severed_relationship) { Fabricate(:severed_relationship, relationship_severance_event: event, local_account: local_account, remote_account: remote_account, direction: :passive) } + + it 'returns the local account' do + expect(severed_relationship.target_account).to eq local_account + end + end + end +end diff --git a/spec/requests/api/v1/featured_tags/suggestions_spec.rb b/spec/requests/api/v1/featured_tags/suggestions_spec.rb index f7b453b74..00451540c 100644 --- a/spec/requests/api/v1/featured_tags/suggestions_spec.rb +++ b/spec/requests/api/v1/featured_tags/suggestions_spec.rb @@ -7,13 +7,35 @@ describe 'Featured Tags Suggestions API' do let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:scopes) { 'read:accounts' } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - let(:account) { Fabricate(:account) } + let(:account) { Fabricate(:account, user: user) } describe 'GET /api/v1/featured_tags/suggestions' do - it 'returns http success' do - get '/api/v1/featured_tags/suggestions', params: { account_id: account.id, limit: 2 }, headers: headers + let!(:unused_featured_tag) { Fabricate(:tag, name: 'unused_featured_tag') } + let!(:used_tag) { Fabricate(:tag, name: 'used_tag') } + let!(:used_featured_tag) { Fabricate(:tag, name: 'used_featured_tag') } - expect(response).to have_http_status(200) + before do + _unused_tag = Fabricate(:tag, name: 'unused_tag') + + # Make relevant tags used by account + status = Fabricate(:status, account: account) + status.tags << used_tag + status.tags << used_featured_tag + + # Feature the relevant tags + Fabricate :featured_tag, account: account, name: unused_featured_tag.name + Fabricate :featured_tag, account: account, name: used_featured_tag.name + end + + it 'returns http success and recently used but not featured tags' do + get '/api/v1/featured_tags/suggestions', params: { limit: 2 }, headers: headers + + expect(response) + .to have_http_status(200) + expect(body_as_json) + .to contain_exactly( + include(name: used_tag.name) + ) end end end diff --git a/spec/requests/api/v1/notifications/policies_spec.rb b/spec/requests/api/v1/notifications/policies_spec.rb index fe6bdbd97..9acd47a7b 100644 --- a/spec/requests/api/v1/notifications/policies_spec.rb +++ b/spec/requests/api/v1/notifications/policies_spec.rb @@ -22,10 +22,20 @@ RSpec.describe 'Policies' do it_behaves_like 'forbidden for wrong scope', 'write write:notifications' context 'with no options' do - it 'returns http success', :aggregate_failures do + it 'returns json with expected attributes', :aggregate_failures do subject expect(response).to have_http_status(200) + expect(body_as_json).to include( + filter_not_following: false, + filter_not_followers: false, + filter_new_accounts: false, + filter_private_mentions: true, + summary: a_hash_including( + pending_requests_count: '1', + pending_notifications_count: '0' + ) + ) end end end @@ -35,14 +45,25 @@ RSpec.describe 'Policies' do put '/api/v1/notifications/policy', headers: headers, params: params end - let(:params) { {} } + let(:params) { { filter_not_following: true } } it_behaves_like 'forbidden for wrong scope', 'read read:notifications' - it 'returns http success' do - subject + it 'changes notification policy and returns an updated json object', :aggregate_failures do + expect { subject } + .to change { NotificationPolicy.find_or_initialize_by(account: user.account).filter_not_following }.from(false).to(true) expect(response).to have_http_status(200) + expect(body_as_json).to include( + filter_not_following: true, + filter_not_followers: false, + filter_new_accounts: false, + filter_private_mentions: true, + summary: a_hash_including( + pending_requests_count: '0', + pending_notifications_count: '0' + ) + ) end end end diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb index 64675d562..772402a6b 100644 --- a/spec/requests/api/v1/notifications/requests_spec.rb +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -82,15 +82,10 @@ RSpec.describe 'Requests' do it_behaves_like 'forbidden for wrong scope', 'read read:notifications' - it 'returns http success' do + it 'returns http success and dismisses the notification request', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'dismisses the notification request' do - subject - expect(notification_request.reload.dismissed?).to be true end diff --git a/spec/services/after_block_domain_from_account_service_spec.rb b/spec/services/after_block_domain_from_account_service_spec.rb index 2fce424b1..12e780357 100644 --- a/spec/services/after_block_domain_from_account_service_spec.rb +++ b/spec/services/after_block_domain_from_account_service_spec.rb @@ -5,22 +5,33 @@ require 'rails_helper' RSpec.describe AfterBlockDomainFromAccountService do subject { described_class.new } - let!(:wolf) { Fabricate(:account, username: 'wolf', domain: 'evil.org', inbox_url: 'https://evil.org/inbox', protocol: :activitypub) } - let!(:alice) { Fabricate(:account, username: 'alice') } + let(:wolf) { Fabricate(:account, username: 'wolf', domain: 'evil.org', inbox_url: 'https://evil.org/wolf/inbox', protocol: :activitypub) } + let(:dog) { Fabricate(:account, username: 'dog', domain: 'evil.org', inbox_url: 'https://evil.org/dog/inbox', protocol: :activitypub) } + let(:alice) { Fabricate(:account, username: 'alice') } before do - allow(ActivityPub::DeliveryWorker).to receive(:perform_async) + wolf.follow!(alice) + alice.follow!(dog) end - it 'purge followers from blocked domain' do - wolf.follow!(alice) + around do |example| + Sidekiq::Testing.fake! do + example.run + end + end + + it 'purges followers from blocked domain, sends them Reject->Follow, and records severed relationships', :aggregate_failures do subject.call(alice, 'evil.org') + expect(wolf.following?(alice)).to be false - end + expect(ActivityPub::DeliveryWorker.jobs.pluck('args')).to contain_exactly( + [a_string_including('"type":"Reject"'), alice.id, wolf.inbox_url], + [a_string_including('"type":"Undo"'), alice.id, dog.inbox_url] + ) - it 'sends Reject->Follow to followers from blocked domain' do - wolf.follow!(alice) - subject.call(alice, 'evil.org') - expect(ActivityPub::DeliveryWorker).to have_received(:perform_async).once + severed_relationships = alice.severed_relationships.to_a + expect(severed_relationships.count).to eq 2 + expect(severed_relationships[0].relationship_severance_event).to eq severed_relationships[1].relationship_severance_event + expect(severed_relationships.map { |rel| [rel.account, rel.target_account] }).to contain_exactly([wolf, alice], [alice, dog]) end end diff --git a/spec/services/block_domain_service_spec.rb b/spec/services/block_domain_service_spec.rb index 0f278293a..d4f0c042d 100644 --- a/spec/services/block_domain_service_spec.rb +++ b/spec/services/block_domain_service_spec.rb @@ -5,6 +5,8 @@ require 'rails_helper' RSpec.describe BlockDomainService do subject { described_class.new } + let(:local_account) { Fabricate(:account) } + let(:bystander) { Fabricate(:account, domain: 'evil.org') } let!(:bad_account) { Fabricate(:account, username: 'badguy666', domain: 'evil.org') } let!(:bad_status_plain) { Fabricate(:status, account: bad_account, text: 'You suck') } let!(:bad_status_with_attachment) { Fabricate(:status, account: bad_account, text: 'Hahaha') } @@ -13,62 +15,54 @@ RSpec.describe BlockDomainService do describe 'for a suspension' do before do + local_account.follow!(bad_account) + bystander.follow!(local_account) + end + + it 'creates a domain block, suspends remote accounts with appropriate suspension date, records severed relationships and sends notification', :aggregate_failures do subject.call(DomainBlock.create!(domain: 'evil.org', severity: :suspend)) - end - it 'creates a domain block' do expect(DomainBlock.blocked?('evil.org')).to be true - end - it 'removes remote accounts from that domain' do + # Suspends account with appropriate suspension date expect(bad_account.reload.suspended?).to be true - end - - it 'records suspension date appropriately' do expect(bad_account.reload.suspended_at).to eq DomainBlock.find_by(domain: 'evil.org').created_at - end - it 'keeps already-banned accounts banned' do + # Keep already-suspended account without updating the suspension date expect(already_banned_account.reload.suspended?).to be true - end - - it 'does not overwrite suspension date of already-banned accounts' do expect(already_banned_account.reload.suspended_at).to_not eq DomainBlock.find_by(domain: 'evil.org').created_at - end - it 'removes the remote accounts\'s statuses and media attachments' do + # Removes content expect { bad_status_plain.reload }.to raise_exception ActiveRecord::RecordNotFound expect { bad_status_with_attachment.reload }.to raise_exception ActiveRecord::RecordNotFound expect { bad_attachment.reload }.to raise_exception ActiveRecord::RecordNotFound + + # Records severed relationships + severed_relationships = local_account.severed_relationships.to_a + expect(severed_relationships.count).to eq 2 + expect(severed_relationships[0].relationship_severance_event).to eq severed_relationships[1].relationship_severance_event + expect(severed_relationships.map { |rel| [rel.account, rel.target_account] }).to contain_exactly([bystander, local_account], [local_account, bad_account]) + + # Sends severed relationships notification + expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(local_account.id, anything, 'AccountRelationshipSeveranceEvent', 'severed_relationships') end end describe 'for a silence with reject media' do - before do + it 'does not mark the domain as blocked, but silences accounts with an appropriate silencing date, clears media', :aggregate_failures, :sidekiq_inline do subject.call(DomainBlock.create!(domain: 'evil.org', severity: :silence, reject_media: true)) - end - it 'does not create a domain block' do expect(DomainBlock.blocked?('evil.org')).to be false - end - it 'silences remote accounts from that domain' do + # Silences account with appropriate silecing date expect(bad_account.reload.silenced?).to be true - end - - it 'records suspension date appropriately' do expect(bad_account.reload.silenced_at).to eq DomainBlock.find_by(domain: 'evil.org').created_at - end - it 'keeps already-banned accounts banned' do + # Keeps already-silenced accounts without updating the silecing date expect(already_banned_account.reload.silenced?).to be true - end - - it 'does not overwrite suspension date of already-banned accounts' do expect(already_banned_account.reload.silenced_at).to_not eq DomainBlock.find_by(domain: 'evil.org').created_at - end - it 'leaves the domains status and attachments, but clears media', :sidekiq_inline do + # Leaves posts but clears media expect { bad_status_plain.reload }.to_not raise_error expect { bad_status_with_attachment.reload }.to_not raise_error expect { bad_attachment.reload }.to_not raise_error diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb index d62f7ef0d..7c72a4776 100644 --- a/spec/services/suspend_account_service_spec.rb +++ b/spec/services/suspend_account_service_spec.rb @@ -59,7 +59,7 @@ RSpec.describe SuspendAccountService, :sidekiq_inline do remote_follower.follow!(account) end - it 'sends an update actor to followers and reporters' do + it 'sends an Update actor activity to followers and reporters' do subject expect(a_request(:post, remote_follower.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once expect(a_request(:post, remote_reporter.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once @@ -85,8 +85,9 @@ RSpec.describe SuspendAccountService, :sidekiq_inline do account.follow!(local_followee) end - it 'sends a reject follow' do + it 'sends a Reject Follow activity', :aggregate_failures do subject + expect(a_request(:post, account.inbox_url).with { |req| match_reject_follow_request(req, account, local_followee) }).to have_been_made.once end end diff --git a/streaming/package.json b/streaming/package.json index 6e183a181..f90a1e440 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -37,7 +37,7 @@ "@types/uuid": "^9.0.0", "@types/ws": "^8.5.9", "eslint-define-config": "^2.0.0", - "pino-pretty": "^10.3.1", + "pino-pretty": "^11.0.0", "typescript": "^5.0.4" }, "optionalDependencies": { diff --git a/yarn.lock b/yarn.lock index d5e53d23f..13ea8583d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,55 +42,55 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/code-frame@npm:7.23.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" dependencies: - "@babel/highlight": "npm:^7.23.4" - chalk: "npm:^2.4.2" - checksum: 10c0/a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + "@babel/highlight": "npm:^7.24.2" + picocolors: "npm:^1.0.0" + checksum: 10c0/d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/compat-data@npm:7.23.5" - checksum: 10c0/081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/compat-data@npm:7.24.1" + checksum: 10c0/8a1935450345c326b14ea632174696566ef9b353bd0d6fb682456c0774342eeee7654877ced410f24a731d386fdcbf980b75083fc764964d6f816b65792af2f5 languageName: node linkType: hard "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1": - version: 7.24.0 - resolution: "@babel/core@npm:7.24.0" + version: 7.24.3 + resolution: "@babel/core@npm:7.24.3" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.2" + "@babel/generator": "npm:^7.24.1" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.24.0" - "@babel/parser": "npm:^7.24.0" + "@babel/helpers": "npm:^7.24.1" + "@babel/parser": "npm:^7.24.1" "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/bb37cbf0bdfd676b246af0a3d9a7932d10573f2d45114fdda02a71889e35530ce13d8930177e78b065d6734b8d45a4fbf7c77f223b1d44b4a28cfe5fefee93ed + checksum: 10c0/e6e756b6de27d0312514a005688fa1915c521ad4269a388913eff2120a546538078f8488d6d16e86f851872f263cb45a6bbae08738297afb9382600d2ac342a9 languageName: node linkType: hard -"@babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": - version: 7.23.6 - resolution: "@babel/generator@npm:7.23.6" +"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/generator@npm:7.24.1" dependencies: - "@babel/types": "npm:^7.23.6" - "@jridgewell/gen-mapping": "npm:^0.3.2" - "@jridgewell/trace-mapping": "npm:^0.3.17" + "@babel/types": "npm:^7.24.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 10c0/53540e905cd10db05d9aee0a5304e36927f455ce66f95d1253bb8a179f286b88fa7062ea0db354c566fe27f8bb96567566084ffd259f8feaae1de5eccc8afbda + checksum: 10c0/f0eea7497657cdf68cfb4b7d181588e1498eefd1f303d73b0d8ca9b21a6db27136a6f5beb8f988b6bdcd4249870826080950450fd310951de42ecf36df274881 languageName: node linkType: hard @@ -122,7 +122,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: @@ -135,22 +135,22 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" +"@babel/helper-create-class-features-plugin@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-member-expression-to-functions": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.9" + "@babel/helper-replace-supers": "npm:^7.24.1" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/2ae5759fe8845fda99b34f2ba6cd0794fc860213d14c93a87aa9180960252bce621157a79c373b7fbb423b25a55fb0e20eae0d5f8e4ad5ef22dc70e7c2af3805 + checksum: 10c0/45372890634c37deefc81f44b7d958fe210f7da7d8a2239c9849c6041a56536f74bf3aa2d115bc06d5680d0dc49c1303f74a045d76ae0dd1592c7d5c0c268ebc languageName: node linkType: hard @@ -167,9 +167,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.5.0": - version: 0.5.0 - resolution: "@babel/helper-define-polyfill-provider@npm:0.5.0" +"@babel/helper-define-polyfill-provider@npm:^0.6.1": + version: 0.6.1 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.1" dependencies: "@babel/helper-compilation-targets": "npm:^7.22.6" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -178,11 +178,11 @@ __metadata: resolve: "npm:^1.14.2" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/2b053b96a0c604a7e0f5c7d13a8a55f4451d938f7af42bd40f62a87df15e6c87a0b1dbd893a0f0bb51077b54dc3ba00a58b166531a5940ad286ab685dd8979ec + checksum: 10c0/210e1c8ac118f7c5a0ef5b42c4267c3db2f59b1ebc666a275d442b86896de4a66ef93539d702870f172f9749cd44c89f53056a5b17e619c3142b12ed4e4e6aae languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": +"@babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" checksum: 10c0/e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 @@ -208,7 +208,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15": +"@babel/helper-member-expression-to-functions@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" dependencies: @@ -217,12 +217,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-module-imports@npm:7.22.15" +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" dependencies: - "@babel/types": "npm:^7.22.15" - checksum: 10c0/4e0d7fc36d02c1b8c8b3006dfbfeedf7a367d3334a04934255de5128115ea0bafdeb3e5736a2559917f0653e4e437400d54542da0468e08d3cbc86d3bbfa8f30 + "@babel/types": "npm:^7.24.0" + checksum: 10c0/052c188adcd100f5e8b6ff0c9643ddaabc58b6700d3bbbc26804141ad68375a9f97d9d173658d373d31853019e65f62610239e3295cdd58e573bdcb2fded188d languageName: node linkType: hard @@ -270,16 +270,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.9": - version: 7.22.20 - resolution: "@babel/helper-replace-supers@npm:7.22.20" +"@babel/helper-replace-supers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-replace-supers@npm:7.24.1" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" + "@babel/helper-member-expression-to-functions": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 + checksum: 10c0/d39a3df7892b7c3c0e307fb229646168a9bd35e26a72080c2530729322600e8cff5f738f44a14860a2358faffa741b6a6a0d6749f113387b03ddbfa0ec10e1a0 languageName: node linkType: hard @@ -324,7 +324,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": +"@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 10c0/af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 @@ -342,70 +342,71 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/helpers@npm:7.24.0" +"@babel/helpers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helpers@npm:7.24.1" dependencies: "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" - checksum: 10c0/dd27c9f11c1c5244ef312fae37636f2fcc69c541c46508017b846c4cf680af059f1922ce84e3f778f123a70d027ded75c96070ee8e906f3bc52dc26dc43df608 + checksum: 10c0/b3445860ae749fc664682b291f092285e949114e8336784ae29f88eb4c176279b01cc6740005a017a0389ae4b4e928d5bbbc01de7da7e400c972e3d6f792063a languageName: node linkType: hard -"@babel/highlight@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/highlight@npm:7.23.4" +"@babel/highlight@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/highlight@npm:7.24.2" dependencies: "@babel/helper-validator-identifier": "npm:^7.22.20" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" - checksum: 10c0/fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + picocolors: "npm:^1.0.0" + checksum: 10c0/98ce00321daedeed33a4ed9362dc089a70375ff1b3b91228b9f05e6591d387a81a8cba68886e207861b8871efa0bc997ceabdd9c90f6cce3ee1b2f7f941b42db languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/parser@npm:7.24.0" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/parser@npm:7.24.1" bin: parser: ./bin/babel-parser.js - checksum: 10c0/77593d0b9de9906823c4d653bb6cda1c7593837598516330f655f70cba6224a37def7dbe5b4dad0038482d407d8d209eb8be5f48ca9a13357d769f829c5adb8e + checksum: 10c0/d2a8b99aa5f33182b69d5569367403a40e7c027ae3b03a1f81fd8ac9b06ceb85b31f6ee4267fb90726dc2ac99909c6bdaa9cf16c379efab73d8dfe85cee32c50 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/356a4e9fc52d7ca761ce6857fc58e2295c2785d22565760e6a5680be86c6e5883ab86e0ba25ef572882c01713d3a31ae6cfa3e3222cdb95e6026671dab1fa415 + checksum: 10c0/d4e592e6fc4878654243d2e7b51ea86471b868a8cb09de29e73b65d2b64159990c6c198fd7c9c2af2e38b1cddf70206243792853c47384a84f829dada152f605 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10c0/a8785f099d55ca71ed89815e0f3a636a80c16031f80934cfec17c928d096ee0798964733320c8b145ef36ba429c5e19d5107b06231e0ab6777cfb0f01adfdc23 + checksum: 10c0/351c36e45795a7890d610ab9041a52f4078a59429f6e74c281984aa44149a10d43e82b3a8172c703c0d5679471e165d1c02b6d2e45a677958ee301b89403f202 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.7": - version: 7.23.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.7" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/355746e21ad7f43e4f4daef54cfe2ef461ecd19446b2afedd53c39df1bf9aa2eeeeaabee2279b1321de89a97c9360e4f76e9ba950fee50ff1676c25f6929d625 + checksum: 10c0/d7dd5a59a54635a3152895dcaa68f3370bb09d1f9906c1e72232ff759159e6be48de4a598a993c986997280a2dc29922a48aaa98020f16439f3f57ad72788354 languageName: node linkType: hard @@ -484,25 +485,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" +"@babel/plugin-syntax-import-assertions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7db8b59f75667bada2293353bb66b9d5651a673b22c72f47da9f5c46e719142481601b745f9822212fd7522f92e26e8576af37116f85dae1b5e5967f80d0faab + checksum: 10c0/72f0340d73e037f0702c61670054e0af66ece7282c5c2f4ba8de059390fee502de282defdf15959cd9f71aa18dc5c5e4e7a0fde317799a0600c6c4e0a656d82b languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" +"@babel/plugin-syntax-import-attributes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/99b40d33d79205a8e04bb5dea56fd72906ffc317513b20ca7319e7683e18fce8ea2eea5e9171056f92b979dc0ab1e31b2cb5171177a5ba61e05b54fe7850a606 + checksum: 10c0/309634e3335777aee902552b2cf244c4a8050213cc878b3fb9d70ad8cbbff325dc46ac5e5791836ff477ea373b27832238205f6ceaff81f7ea7c4c7e8fbb13bb languageName: node linkType: hard @@ -528,14 +529,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" +"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/563bb7599b868773f1c7c1d441ecc9bc53aeb7832775da36752c926fc402a1fa5421505b39e724f71eb217c13e4b93117e081cac39723b0e11dac4c897f33c3e + checksum: 10c0/6cec76fbfe6ca81c9345c2904d8d9a8a0df222f9269f0962ed6eb2eb8f3f10c2f15e993d1ef09dbaf97726bf1792b5851cf5bd9a769f966a19448df6be95d19a languageName: node linkType: hard @@ -627,14 +628,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.23.3, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" +"@babel/plugin-syntax-typescript@npm:^7.24.1, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4d6e9cdb9d0bfb9bd9b220fc951d937fce2ca69135ec121153572cebe81d86abc9a489208d6b69ee5f10cadcaeffa10d0425340a5029e40e14a6025021b90948 + checksum: 10c0/7a81e277dcfe3138847e8e5944e02a42ff3c2e864aea6f33fd9b70d1556d12b0e70f0d56cc1985d353c91bcbf8fe163e6cc17418da21129b7f7f1d8b9ac00c93 languageName: node linkType: hard @@ -650,310 +651,310 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" +"@babel/plugin-transform-arrow-functions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b128315c058f5728d29b0b78723659b11de88247ea4d0388f0b935cddf60a80c40b9067acf45cbbe055bd796928faef152a09d9e4a0695465aca4394d9f109ca + checksum: 10c0/f44bfacf087dc21b422bab99f4e9344ee7b695b05c947dacae66de05c723ab9d91800be7edc1fa016185e8c819f3aca2b4a5f66d8a4d1e47d9bad80b8fa55b8e languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.9" +"@babel/plugin-transform-async-generator-functions@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-remap-async-to-generator": "npm:^7.22.20" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4ff75f9ce500e1de8c0236fa5122e6475a477d19cb9a4c2ae8651e78e717ebb2e2cecfeca69d420def779deaec78b945843b9ffd15f02ecd7de5072030b4469b + checksum: 10c0/55ceed059f819dcccbfe69600bfa1c055ada466bd54eda117cfdd2cf773dd85799e2f6556e4a559b076e93b9704abcca2aef9d72aad7dc8a5d3d17886052f1d3 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" +"@babel/plugin-transform-async-to-generator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" dependencies: - "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-remap-async-to-generator": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/da3ffd413eef02a8e2cfee3e0bb0d5fc0fcb795c187bc14a5a8e8874cdbdc43bbf00089c587412d7752d97efc5967c3c18ff5398e3017b9a14a06126f017e7e9 + checksum: 10c0/3731ba8e83cbea1ab22905031f25b3aeb0b97c6467360a2cc685352f16e7c786417d8883bc747f5a0beff32266bdb12a05b6292e7b8b75967087200a7bc012c4 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/82c12a11277528184a979163de7189ceb00129f60dd930b0d5313454310bf71205f302fb2bf0430247161c8a22aaa9fb9eec1459f9f7468206422c191978fd59 + checksum: 10c0/6fbaa85f5204f34845dfc0bebf62fdd3ac5a286241c85651e59d426001e7a1785ac501f154e093e0b8ee49e1f51e3f8b06575a5ae8d4a9406d43e4816bf18c37 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" +"@babel/plugin-transform-block-scoping@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-block-scoping@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/83006804dddf980ab1bcd6d67bc381e24b58c776507c34f990468f820d0da71dba3697355ca4856532fa2eeb2a1e3e73c780f03760b5507a511cbedb0308e276 + checksum: 10c0/1a230ad95d9672626831e22df9b4838901681fa11d44c3811d71ca64ea53f5e87de2abef865f70fe62657053278d9034cc4ea3bab0fd3300bdf9e73b3f85f97a languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" +"@babel/plugin-transform-class-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bca30d576f539eef216494b56d610f1a64aa9375de4134bc021d9660f1fa735b1d7cc413029f22abc0b7cb737e3a57935c8ae9d8bd1730921ccb1deebce51bfd + checksum: 10c0/00dff042ac9df4ae67b5ef98b1137cc72e0a24e6d911dc200540a8cb1f00b4cff367a922aeb22da17da662079f0abcd46ee1c5f4cdf37ceebf6ff1639bb9af27 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-class-static-block@npm:7.23.4" +"@babel/plugin-transform-class-static-block@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-class-static-block@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/fdca96640ef29d8641a7f8de106f65f18871b38cc01c0f7b696d2b49c76b77816b30a812c08e759d06dd10b4d9b3af6b5e4ac22a2017a88c4077972224b77ab0 + checksum: 10c0/3095d02b7932890b82346d42200a89a56b6ca7d25a69a94242ab5b1772f18138b8e639358dd70d23add2df8b0d1640e1e13729c2c275ecce550cbe89048ba85f languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.23.8": - version: 7.23.8 - resolution: "@babel/plugin-transform-classes@npm:7.23.8" +"@babel/plugin-transform-classes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-classes@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-replace-supers": "npm:^7.24.1" "@babel/helper-split-export-declaration": "npm:^7.22.6" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/227ac5166501e04d9e7fbd5eda6869b084ffa4af6830ac12544ac6ea14953ca00eb1762b0df9349c0f6c8d2a799385910f558066cd0fb85b9ca437b1131a6043 + checksum: 10c0/586a95826be4d68056fa23d8e6c34353ce2ea59bf3ca8cf62bc784e60964d492d76e1b48760c43fd486ffb65a79d3fed9a4f91289e4f526f88c3b6acc0dfb00e languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" +"@babel/plugin-transform-computed-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/template": "npm:^7.22.15" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3ca8a006f8e652b58c21ecb84df1d01a73f0a96b1d216fd09a890b235dd90cb966b152b603b88f7e850ae238644b1636ce5c30b7c029c0934b43383932372e4a + checksum: 10c0/8292c508b656b7722e2c2ca0f6f31339852e3ed2b9b80f6e068a4010e961b431ca109ecd467fc906283f4b1574c1e7b1cb68d35a4dea12079d386c15ff7e0eac languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" +"@babel/plugin-transform-destructuring@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/717e9a62c1b0c93c507f87b4eaf839ec08d3c3147f14d74ae240d8749488d9762a8b3950132be620a069bde70f4b3e4ee9867b226c973fcc40f3cdec975cde71 + checksum: 10c0/a08e706a9274a699abc3093f38c72d4a5354eac11c44572cc9ea049915b6e03255744297069fd94fcce82380725c5d6b1b11b9a84c0081aa3aa6fc2fdab98ef6 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" +"@babel/plugin-transform-dotall-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" dependencies: "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6c89286d1277c2a63802a453c797c87c1203f89e4c25115f7b6620f5fce15d8c8d37af613222f6aa497aa98773577a6ec8752e79e13d59bc5429270677ea010b + checksum: 10c0/758def705ec5a87ef910280dc2df5d2fda59dc5d4771c1725c7aed0988ae5b79e29aeb48109120301a3e1c6c03dfac84700469de06f38ca92c96834e09eadf5d languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" +"@babel/plugin-transform-duplicate-keys@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7e2640e4e6adccd5e7b0615b6e9239d7c98363e21c52086ea13759dfa11cf7159b255fc5331c2de435639ea8eb6acefae115ae0d797a3d19d12587652f8052a5 + checksum: 10c0/41072f57f83a6c2b15f3ee0b6779cdca105ff3d98061efe92ac02d6c7b90fdb6e7e293b8a4d5b9c690d9ae5d3ae73e6bde4596dc4d8c66526a0e5e1abc73c88c languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.4" +"@babel/plugin-transform-dynamic-import@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/19ae4a4a2ca86d35224734c41c48b2aa6a13139f3cfa1cbd18c0e65e461de8b65687dec7e52b7a72bb49db04465394c776aa1b13a2af5dc975b2a0cde3dcab67 + checksum: 10c0/7e2834780e9b5251ef341854043a89c91473b83c335358620ca721554877e64e416aeb3288a35f03e825c4958e07d5d00ead08c4490fadc276a21fe151d812f1 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1" dependencies: "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5c33ee6a1bdc52fcdf0807f445b27e3fbdce33008531885e65a699762327565fffbcfde8395be7f21bcb22d582e425eddae45650c986462bb84ba68f43687516 + checksum: 10c0/f0fc4c5a9add25fd6bf23dabe6752e9b7c0a2b2554933dddfd16601245a2ba332b647951079c782bf3b94c6330e3638b9b4e0227f469a7c1c707446ba0eba6c7 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.4" +"@babel/plugin-transform-export-namespace-from@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/38bf04f851e36240bbe83ace4169da626524f4107bfb91f05b4ad93a5fb6a36d5b3d30b8883c1ba575ccfc1bac7938e90ca2e3cb227f7b3f4a9424beec6fd4a7 + checksum: 10c0/510bb23b2423d5fbffef69b356e4050929c21a7627e8194b1506dd935c7d9cbbd696c9ae9d7c3bcd7e6e7b69561b0b290c2d72d446327b40fc20ce40bbca6712 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/plugin-transform-for-of@npm:7.23.6" +"@babel/plugin-transform-for-of@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-for-of@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/46681b6ab10f3ca2d961f50d4096b62ab5d551e1adad84e64be1ee23e72eb2f26a1e30e617e853c74f1349fffe4af68d33921a128543b6f24b6d46c09a3e2aec + checksum: 10c0/e4bc92b1f334246e62d4bde079938df940794db564742034f6597f2e38bd426e11ae8c5670448e15dd6e45c462f2a9ab3fa87259bddf7c08553ffd9457fc2b2c languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-function-name@npm:7.23.3" +"@babel/plugin-transform-function-name@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-function-name@npm:7.24.1" dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/89cb9747802118048115cf92a8f310752f02030549b26f008904990cbdc86c3d4a68e07ca3b5c46de8a46ed4df2cb576ac222c74c56de67253d2a3ddc2956083 + checksum: 10c0/65c1735ec3b5e43db9b5aebf3c16171c04b3050c92396b9e22dda0d2aaf51f43fdcf147f70a40678fd9a4ee2272a5acec4826e9c21bcf968762f4c184897ad75 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-json-strings@npm:7.23.4" +"@babel/plugin-transform-json-strings@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/39e82223992a9ad857722ae051291935403852ad24b0dd64c645ca1c10517b6bf9822377d88643fed8b3e61a4e3f7e5ae41cf90eb07c40a786505d47d5970e54 + checksum: 10c0/13d9b6a3c31ab4be853b3d49d8d1171f9bd8198562fd75da8f31e7de31398e1cfa6eb1d073bed93c9746e4f9c47a53b20f8f4c255ece3f88c90852ad3181dc2d languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-literals@npm:7.23.3" +"@babel/plugin-transform-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8292106b106201464c2bfdd5c014fe6a9ca1c0256eb0a8031deb20081e21906fe68b156186f77d993c23eeab6d8d6f5f66e8895eec7ed97ce6de5dbcafbcd7f4 + checksum: 10c0/a27cc7d565ee57b5a2bf136fa889c5c2f5988545ae7b3b2c83a7afe5dd37dfac80dca88b1c633c65851ce6af7d2095c04c01228657ce0198f918e64b5ccd01fa languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.4" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/87b034dd13143904e405887e6125d76c27902563486efc66b7d9a9d8f9406b76c6ac42d7b37224014af5783d7edb465db0cdecd659fa3227baad0b3a6a35deff + checksum: 10c0/98a2e0843ddfe51443c1bfcf08ba40ad8856fd4f8e397b392a5390a54f257c8c1b9a99d8ffc0fc7e8c55cce45e2cd9c2795a4450303f48f501bcbd662de44554 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" +"@babel/plugin-transform-member-expression-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/687f24f3ec60b627fef6e87b9e2770df77f76727b9d5f54fa4c84a495bb24eb4a20f1a6240fa22d339d45aac5eaeb1b39882e941bfd00cf498f9c53478d1ec88 + checksum: 10c0/2af731d02aa4c757ef80c46df42264128cbe45bfd15e1812d1a595265b690a44ad036041c406a73411733540e1c4256d8174705ae6b8cfaf757fc175613993fd languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" +"@babel/plugin-transform-modules-amd@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1" dependencies: "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9f7ec036f7cfc588833a4dd117a44813b64aa4c1fd5bfb6c78f60198c1d290938213090c93a46f97a68a2490fad909e21a82b2472e95da74d108c125df21c8d5 + checksum: 10c0/71fd04e5e7026e6e52701214b1e9f7508ba371b757e5075fbb938a79235ed66a54ce65f89bb92b59159e9f03f01b392e6c4de6d255b948bec975a90cfd6809ef languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" +"@babel/plugin-transform-modules-commonjs@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" dependencies: "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d + checksum: 10c0/efb3ea2047604a7eb44a9289311ebb29842fe6510ff8b66a77a60440448c65e1312a60dc48191ed98246bdbd163b5b6f3348a0669bcc0e3809e69c7c776b20fa languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" dependencies: "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-identifier": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1926631fe9d87c0c53427a3420ad49da62d53320d0016b6afab64e5417a672aa5bdff3ea1d24746ffa1e43319c28a80f5d8cef0ad214760d399c293b5850500f + checksum: 10c0/38145f8abe8a4ce2b41adabe5d65eb7bd54a139dc58e2885fec975eb5cf247bd938c1dd9f09145c46dbe57d25dd0ef7f00a020e5eb0cbe8195b2065d51e2d93d languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" +"@babel/plugin-transform-modules-umd@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" dependencies: "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f0d2f890a15b4367d0d8f160bed7062bdb145c728c24e9bfbc1211c7925aae5df72a88df3832c92dd2011927edfed4da1b1249e4c78402e893509316c0c2caa6 + checksum: 10c0/14c90c58562b54e17fe4a8ded3f627f9a993648f8378ef00cb2f6c34532032b83290d2ad54c7fff4f0c2cd49091bda780f8cc28926ec4b77a6c2141105a2e699 languageName: node linkType: hard @@ -969,138 +970,137 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-new-target@npm:7.23.3" +"@babel/plugin-transform-new-target@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-new-target@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f489b9e1f17b42b2ba6312d58351e757cb23a8409f64f2bb6af4c09d015359588a5d68943b20756f141d0931a94431c782f3ed1225228a930a04b07be0c31b04 + checksum: 10c0/c4cabe628163855f175a8799eb73d692b6f1dc347aae5022af0c253f80c92edb962e48ddccc98b691eff3d5d8e53c9a8f10894c33ba4cebc2e2f8f8fe554fb7a languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.4" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bce490d22da5c87ff27fffaff6ad5a4d4979b8d7b72e30857f191e9c1e1824ba73bb8d7081166289369e388f94f0ce5383a593b1fc84d09464a062c75f824b0b + checksum: 10c0/c8532951506fb031287280cebeef10aa714f8a7cea2b62a13c805f0e0af945ba77a7c87e4bbbe4c37fe973e0e5d5e649cfac7f0374f57efc54cdf9656362a392 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.4" +"@babel/plugin-transform-numeric-separator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e34902da4f5588dc4812c92cb1f6a5e3e3647baf7b4623e30942f551bf1297621abec4e322ebfa50b320c987c0f34d9eb4355b3d289961d9035e2126e3119c12 + checksum: 10c0/15e2b83292e586fb4f5b4b4021d4821a806ca6de2b77d5ad6c4e07aa7afa23704e31b4d683dac041afc69ac51b2461b96e8c98e46311cc1faba54c73f235044f languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.0" +"@babel/plugin-transform-object-rest-spread@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1" dependencies: - "@babel/compat-data": "npm:^7.23.5" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.23.3" + "@babel/plugin-transform-parameters": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/02fe8b99ee6329e68b97b1b1b5410e50c6c20470e73dcd1d287c6ddb5623c654dce82327b2a3f6710ee3b512fe4950e43ab81d0bbc33d771f0cad3bc3cef87c6 + checksum: 10c0/e301f1a66b63bafc2bce885305cc88ab30ec875b5e2c7933fb7f9cbf0d954685aa10334ffcecf147ba19d6a1d7ffab37baf4ce871849d395941c56fdb3060f73 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-super@npm:7.23.3" +"@babel/plugin-transform-object-super@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-object-super@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-replace-supers": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a6856fd8c0afbe5b3318c344d4d201d009f4051e2f6ff6237ff2660593e93c5997a58772b13d639077c3e29ced3440247b29c496cd77b13af1e7559a70009775 + checksum: 10c0/d30e6b9e59a707efd7ed524fc0a8deeea046011a6990250f2e9280516683138e2d13d9c52daf41d78407bdab0378aef7478326f2a15305b773d851cb6e106157 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.4" +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4ef61812af0e4928485e28301226ce61139a8b8cea9e9a919215ebec4891b9fea2eb7a83dc3090e2679b7d7b2c8653da601fbc297d2addc54a908b315173991e + checksum: 10c0/68408b9ef772d9aa5dccf166c86dc4d2505990ce93e03dcfc65c73fb95c2511248e009ba9ccf5b96405fb85de1c16ad8291016b1cc5689ee4becb1e3050e0ae7 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.23.3, @babel/plugin-transform-optional-chaining@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4" +"@babel/plugin-transform-optional-chaining@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/305b773c29ad61255b0e83ec1e92b2f7af6aa58be4cba1e3852bddaa14f7d2afd7b4438f41c28b179d6faac7eb8d4fb5530a17920294f25d459b8f84406bfbfb + checksum: 10c0/b4688795229c9e9ce978eccf979fe515eb4e8d864d2dcd696baa937c8db13e3d46cff664a3cd6119dfe60e261f5d359b10c6783effab7cc91d75d03ad7f43d05 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-parameters@npm:7.23.3" +"@babel/plugin-transform-parameters@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-parameters@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a8d4cbe0f6ba68d158f5b4215c63004fc37a1fdc539036eb388a9792017c8496ea970a1932ccb929308f61e53dc56676ed01d8df6f42bc0a85c7fd5ba82482b7 + checksum: 10c0/eee8d2f72d3ee0876dc8d85f949f4adf34685cfe36c814ebc20c96315f3891a53d43c764d636b939e34d55e6a6a4af9aa57ed0d7f9439eb5771a07277c669e55 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" +"@babel/plugin-transform-private-methods@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/745a655edcd111b7f91882b921671ca0613079760d8c9befe336b8a9bc4ce6bb49c0c08941831c950afb1b225b4b2d3eaac8842e732db095b04db38efd8c34f4 + checksum: 10c0/d8e18587d2a8b71a795da5e8841b0e64f1525a99ad73ea8b9caa331bc271d69646e2e1e749fd634321f3df9d126070208ddac22a27ccf070566b2efb74fecd99 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.4" +"@babel/plugin-transform-private-property-in-object@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8d31b28f24204b4d13514cd3a8f3033abf575b1a6039759ddd6e1d82dd33ba7281f9bc85c9f38072a665d69bfa26dc40737eefaf9d397b024654a483d2357bf5 + checksum: 10c0/33d2b9737de7667d7a1b704eef99bfecc6736157d9ea28c2e09010d5f25e33ff841c41d89a4430c5d47f4eb3384e24770fa0ec79600e1e38d6d16e2f9333b4b5 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" +"@babel/plugin-transform-property-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b2549f23f90cf276c2e3058c2225c3711c2ad1c417e336d3391199445a9776dd791b83be47b2b9a7ae374b40652d74b822387e31fa5267a37bf49c122e1a9747 + checksum: 10c0/3bf3e01f7bb8215a8b6d0081b6f86fea23e3a4543b619e059a264ede028bc58cdfb0acb2c43271271915a74917effa547bc280ac636a9901fa9f2fb45623f87e languageName: node linkType: hard @@ -1115,26 +1115,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" +"@babel/plugin-transform-react-display-name@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3aed142af7bd1aed1df2bdad91ed33ba1cdd5c3c67ce6eafba821ff72f129162a197ffb55f1eb1775af276abd5545934489a8257fef6c6665ddf253a4f39a939 + checksum: 10c0/adf1a3cb0df8134533a558a9072a67e34127fd489dfe431c3348a86dd41f3e74861d5d5134bbb68f61a9cdb3f7e79b2acea1346be94ce4d3328a64e5a9e09be1 languageName: node linkType: hard "@babel/plugin-transform-react-inline-elements@npm:^7.21.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-inline-elements@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-react-inline-elements@npm:7.24.1" dependencies: "@babel/helper-builder-react-jsx": "npm:^7.22.10" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/138f7769b30f65d339588155affe677c68fde3cdaa060a2dc73152cc8c941c246d4b2ae73c8f1d9ddf1055e587fcb7379c155d49daec086ed50557f2117c1d50 + checksum: 10c0/83fc6afaebbe82a5b14936f00b6d1ffce1a3d908ac749d5daa43f724d32c98b50807ffc3ce2492c1aa49870189507b751993a4a079b9c3226c9b8aab783d08b6 languageName: node linkType: hard @@ -1149,208 +1149,208 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/plugin-transform-react-jsx@npm:7.22.15" +"@babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-module-imports": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-jsx": "npm:^7.22.5" - "@babel/types": "npm:^7.22.15" + "@babel/plugin-syntax-jsx": "npm:^7.23.3" + "@babel/types": "npm:^7.23.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/db37491e3eea5530521e177380312f308f01f806866fa0ce08d48fc5a8c9eaf9a954f778fa1ff477248afb72e916eb66ab3d35254bb6a8979f8b8e74a0fd8873 + checksum: 10c0/8851b3adc515cd91bdb06ff3a23a0f81f0069cfef79dfb3fa744da4b7a82e3555ccb6324c4fa71ecf22508db13b9ff6a0ed96675f95fc87903b9fc6afb699580 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.23.3" +"@babel/plugin-transform-react-pure-annotations@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/76287adeab656fb7f39243e5ab6a8c60069cf69fffeebd1566457d56cb2f966366a23bd755d3e369f4d0437459e3b76243df370caa7d7d2287a8560b66c53ca2 + checksum: 10c0/9eb3056fcaadd63d404fd5652b2a3f693bc4758ba753fee5b5c580c7a64346eeeb94e5a4f77a99c76f3cf06d1f1ad6c227647cd0b1219efe3d00cafa5a6e7b2a languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" +"@babel/plugin-transform-regenerator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3b0e989ae5db78894ee300b24e07fbcec490c39ab48629c519377581cf94e90308f4ddc10a8914edc9f403e2d3ac7a7ae0ae09003629d852da03e2ba846299c6 + checksum: 10c0/0a333585d7c0b38d31cc549d0f3cf7c396d1d50b6588a307dc58325505ddd4f5446188bc536c4779431b396251801b3f32d6d8e87db8274bc84e8c41950737f7 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" +"@babel/plugin-transform-reserved-words@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4e6d61f6c9757592661cfbd2c39c4f61551557b98cb5f0995ef10f5540f67e18dde8a42b09716d58943b6e4b7ef5c9bcf19902839e7328a4d49149e0fecdbfcd + checksum: 10c0/936d6e73cafb2cbb495f6817c6f8463288dbc9ab3c44684b931ebc1ece24f0d55dfabc1a75ba1de5b48843d0fef448dcfdbecb8485e4014f8f41d0d1440c536f languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.24.0 - resolution: "@babel/plugin-transform-runtime@npm:7.24.0" + version: 7.24.3 + resolution: "@babel/plugin-transform-runtime@npm:7.24.3" dependencies: - "@babel/helper-module-imports": "npm:^7.22.15" + "@babel/helper-module-imports": "npm:^7.24.3" "@babel/helper-plugin-utils": "npm:^7.24.0" - babel-plugin-polyfill-corejs2: "npm:^0.4.8" - babel-plugin-polyfill-corejs3: "npm:^0.9.0" - babel-plugin-polyfill-regenerator: "npm:^0.5.5" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.10.1" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a632e0c6f4b1be21955646ba4f6e4af323daaa6ab68ce39f92f5186d444402e920b33cabd40759c36f72d8c36f256a35ea03060e407ca69bcf373fdcb450aa42 + checksum: 10c0/ee01967bf405d84bd95ca4089166a18fb23fe9851a6da53dcf712a7f8ba003319996f21f320d568ec76126e18adfaee978206ccda86eef7652d47cc9a052e75e languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" +"@babel/plugin-transform-shorthand-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c423c66fec0b6503f50561741754c84366ef9e9818442c8881fbaa90cc363fd137084b9431cdc00ed2f1fd8c8a1a5982c4a7e1f2af3769db4caf2ac7ea55d4f0 + checksum: 10c0/8273347621183aada3cf1f3019d8d5f29467ba13a75b72cb405bc7f23b7e05fd85f4edb1e4d9f0103153dddb61826a42dc24d466480d707f8932c1923a4c25fa languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-spread@npm:7.23.3" +"@babel/plugin-transform-spread@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-spread@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a348e4ae47e4ceeceb760506ec7bf835ccc18a2cf70ec74ebfbe41bc172fa2412b05b7d1b86836f8aee375e41a04ff20486074778d0e2d19d668b33dc52e9dbb + checksum: 10c0/50a0302e344546d57e5c9f4dea575f88e084352eeac4e9a3e238c41739eef2df1daf4a7ebbb3ccb7acd3447f6a5ce9938405f98bf5f5583deceb8257f5a673c9 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" +"@babel/plugin-transform-sticky-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/cd15c407906b41e4b924ea151e455c11274dba050771ee7154ad88a1a274140ac5e84efc8d08c4379f2f0cec8a09e4a0a3b2a3a954ba6a67d9fb35df1c714c56 + checksum: 10c0/786fe2ae11ef9046b9fa95677935abe495031eebf1274ad03f2054a20adea7b9dbd00336ac0b143f7924bc562e5e09793f6e8613607674b97e067d4838ccc4a0 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" +"@babel/plugin-transform-template-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9b5f43788b9ffcb8f2b445a16b1aa40fcf23cb0446a4649445f098ec6b4cb751f243a535da623d59fefe48f4c40552f5621187a61811779076bab26863e3373d + checksum: 10c0/f73bcda5488eb81c6e7a876498d9e6b72be32fca5a4d9db9053491a2d1300cd27b889b463fd2558f3cd5826a85ed00f61d81b234aa55cb5a0abf1b6fa1bd5026 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" +"@babel/plugin-transform-typeof-symbol@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/50e81d84c6059878be2a0e41e0d790cab10882cfb8fa85e8c2665ccb0b3cd7233f49197f17427bc7c1b36c80e07076640ecf1b641888d78b9cb91bc16478d84a + checksum: 10c0/d392f549bfd13414f59feecdf3fb286f266a3eb9107a9de818e57907bda56eed08d1f6f8e314d09bf99252df026a7fd4d5df839acd45078a777abcebaa9a8593 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typescript@npm:7.23.3" +"@babel/plugin-transform-typescript@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-typescript@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-typescript": "npm:^7.23.3" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/plugin-syntax-typescript": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a3c738efcf491ceb1eee646f57c44990ee0c80465527b88fcfa0b7602688c4ff8c165a4c5b62caf05d968b095212018fd30a02879c12d37c657081f57b31fb26 + checksum: 10c0/9abce423ed2d3cb9398b09e3ed9efea661e92bd32e919f5c7942ac4bad4c5fd23a1d575bb7444d8c92261b68fb626552e0d9eea960372b6b6f54c2c9699a2649 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" +"@babel/plugin-transform-unicode-escapes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f1ed54742dc982666f471df5d087cfda9c6dbf7842bec2d0f7893ed359b142a38c0210358f297ab5c7a3e11ec0dfb0e523de2e2edf48b62f257aaadd5f068866 + checksum: 10c0/67a72a1ed99639de6a93aead35b1993cb3f0eb178a8991fcef48732c38c9f0279c85bbe1e2e2477b85afea873e738ff0955a35057635ce67bc149038e2d8a28e languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1" dependencies: "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dca5702d43fac70351623a12e4dfa454fd028a67498888522b644fd1a02534fabd440106897e886ebcc6ce6a39c58094ca29953b6f51bc67372aa8845a5ae49f + checksum: 10c0/d9d9752df7d51bf9357c0bf3762fe16b8c841fca9ecf4409a16f15ccc34be06e8e71abfaee1251b7d451227e70e6b873b36f86b090efdb20f6f7de5fdb6c7a05 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" +"@babel/plugin-transform-unicode-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1" dependencies: "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/df824dcca2f6e731f61d69103e87d5dd974d8a04e46e28684a4ba935ae633d876bded09b8db890fd72d0caf7b9638e2672b753671783613cc78d472951e2df8c + checksum: 10c0/6046ab38e5d14ed97dbb921bd79ac1d7ad9d3286da44a48930e980b16896db2df21e093563ec3c916a630dc346639bf47c5924a33902a06fe3bbb5cdc7ef5f2f languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1" dependencies: "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/30fe1d29af8395a867d40a63a250ca89072033d9bc7d4587eeebeaf4ad7f776aab83064321bfdb1d09d7e29a1d392852361f4f60a353f0f4d1a3b435dcbf256b + checksum: 10c0/b6c1f6b90afeeddf97e5713f72575787fcb7179be7b4c961869bfbc66915f66540dc49da93e4369da15596bd44b896d1eb8a50f5e1fd907abd7a1a625901006b languageName: node linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.24.0 - resolution: "@babel/preset-env@npm:7.24.0" + version: 7.24.3 + resolution: "@babel/preset-env@npm:7.24.3" dependencies: - "@babel/compat-data": "npm:^7.23.5" + "@babel/compat-data": "npm:^7.24.1" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-option": "npm:^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.24.1" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.23.3" - "@babel/plugin-syntax-import-attributes": "npm:^7.23.3" + "@babel/plugin-syntax-import-assertions": "npm:^7.24.1" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.1" "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" @@ -1362,63 +1362,63 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" - "@babel/plugin-transform-async-generator-functions": "npm:^7.23.9" - "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" - "@babel/plugin-transform-block-scoping": "npm:^7.23.4" - "@babel/plugin-transform-class-properties": "npm:^7.23.3" - "@babel/plugin-transform-class-static-block": "npm:^7.23.4" - "@babel/plugin-transform-classes": "npm:^7.23.8" - "@babel/plugin-transform-computed-properties": "npm:^7.23.3" - "@babel/plugin-transform-destructuring": "npm:^7.23.3" - "@babel/plugin-transform-dotall-regex": "npm:^7.23.3" - "@babel/plugin-transform-duplicate-keys": "npm:^7.23.3" - "@babel/plugin-transform-dynamic-import": "npm:^7.23.4" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.23.3" - "@babel/plugin-transform-export-namespace-from": "npm:^7.23.4" - "@babel/plugin-transform-for-of": "npm:^7.23.6" - "@babel/plugin-transform-function-name": "npm:^7.23.3" - "@babel/plugin-transform-json-strings": "npm:^7.23.4" - "@babel/plugin-transform-literals": "npm:^7.23.3" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.4" - "@babel/plugin-transform-member-expression-literals": "npm:^7.23.3" - "@babel/plugin-transform-modules-amd": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-modules-systemjs": "npm:^7.23.9" - "@babel/plugin-transform-modules-umd": "npm:^7.23.3" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.24.3" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.1" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.1" + "@babel/plugin-transform-block-scoping": "npm:^7.24.1" + "@babel/plugin-transform-class-properties": "npm:^7.24.1" + "@babel/plugin-transform-class-static-block": "npm:^7.24.1" + "@babel/plugin-transform-classes": "npm:^7.24.1" + "@babel/plugin-transform-computed-properties": "npm:^7.24.1" + "@babel/plugin-transform-destructuring": "npm:^7.24.1" + "@babel/plugin-transform-dotall-regex": "npm:^7.24.1" + "@babel/plugin-transform-duplicate-keys": "npm:^7.24.1" + "@babel/plugin-transform-dynamic-import": "npm:^7.24.1" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.24.1" + "@babel/plugin-transform-for-of": "npm:^7.24.1" + "@babel/plugin-transform-function-name": "npm:^7.24.1" + "@babel/plugin-transform-json-strings": "npm:^7.24.1" + "@babel/plugin-transform-literals": "npm:^7.24.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.1" + "@babel/plugin-transform-member-expression-literals": "npm:^7.24.1" + "@babel/plugin-transform-modules-amd": "npm:^7.24.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.1" + "@babel/plugin-transform-modules-systemjs": "npm:^7.24.1" + "@babel/plugin-transform-modules-umd": "npm:^7.24.1" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" - "@babel/plugin-transform-new-target": "npm:^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" - "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.0" - "@babel/plugin-transform-object-super": "npm:^7.23.3" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" - "@babel/plugin-transform-parameters": "npm:^7.23.3" - "@babel/plugin-transform-private-methods": "npm:^7.23.3" - "@babel/plugin-transform-private-property-in-object": "npm:^7.23.4" - "@babel/plugin-transform-property-literals": "npm:^7.23.3" - "@babel/plugin-transform-regenerator": "npm:^7.23.3" - "@babel/plugin-transform-reserved-words": "npm:^7.23.3" - "@babel/plugin-transform-shorthand-properties": "npm:^7.23.3" - "@babel/plugin-transform-spread": "npm:^7.23.3" - "@babel/plugin-transform-sticky-regex": "npm:^7.23.3" - "@babel/plugin-transform-template-literals": "npm:^7.23.3" - "@babel/plugin-transform-typeof-symbol": "npm:^7.23.3" - "@babel/plugin-transform-unicode-escapes": "npm:^7.23.3" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.23.3" - "@babel/plugin-transform-unicode-regex": "npm:^7.23.3" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.23.3" + "@babel/plugin-transform-new-target": "npm:^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.1" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.1" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.1" + "@babel/plugin-transform-object-super": "npm:^7.24.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.1" + "@babel/plugin-transform-parameters": "npm:^7.24.1" + "@babel/plugin-transform-private-methods": "npm:^7.24.1" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.1" + "@babel/plugin-transform-property-literals": "npm:^7.24.1" + "@babel/plugin-transform-regenerator": "npm:^7.24.1" + "@babel/plugin-transform-reserved-words": "npm:^7.24.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.1" + "@babel/plugin-transform-spread": "npm:^7.24.1" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.1" + "@babel/plugin-transform-template-literals": "npm:^7.24.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.24.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.24.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.1" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.1" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.8" - babel-plugin-polyfill-corejs3: "npm:^0.9.0" - babel-plugin-polyfill-regenerator: "npm:^0.5.5" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.10.4" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" core-js-compat: "npm:^3.31.0" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/cb5098bb860aede8418f204d7a693108d7c318edbb227f9842ac6aa71f2154ea1737846994af9bcd0c0b716cd73904f69f09bef635a9679465ec3558144beb4f + checksum: 10c0/abd6f3b6c6a71d4ff766cda5b51467677a811240d022492e651065e26ce1a8eb2067eabe5653fce80dda9c5c204fb7b89b419578d7e86eaaf7970929ee7b4885 languageName: node linkType: hard @@ -1436,33 +1436,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.22.3": - version: 7.23.3 - resolution: "@babel/preset-react@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/preset-react@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-transform-react-display-name": "npm:^7.23.3" - "@babel/plugin-transform-react-jsx": "npm:^7.22.15" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-validator-option": "npm:^7.23.5" + "@babel/plugin-transform-react-display-name": "npm:^7.24.1" + "@babel/plugin-transform-react-jsx": "npm:^7.23.4" "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/cecb2493e09fd4ffa5effcef1d06e968386b1bfe077a99834f7e8ef249208274fca62fe5a6b3986ef1c1c3900b2eb409adb528ae1b73dba31397b16f9262e83c + checksum: 10c0/a842abc5a024ed68a0ce4c1244607d40165cb6f8cf1817ebda282e470f20302d81c6a61cb41c1a31aa6c4e99ce93df4dd9e998a8ded1417c25d7480f0e14103a languageName: node linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.23.3 - resolution: "@babel/preset-typescript@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/preset-typescript@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-syntax-jsx": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-typescript": "npm:^7.23.3" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-validator-option": "npm:^7.23.5" + "@babel/plugin-syntax-jsx": "npm:^7.24.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.1" + "@babel/plugin-transform-typescript": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 + checksum: 10c0/0033dc6fbc898ed0d8017c83a2dd5e095c82909e2f83e48cf9f305e3e9287148758c179ad90f27912cf98ca68bfec3643c57c70c0ca34d3a6c50dc8243aef406 languageName: node linkType: hard @@ -1483,11 +1483,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.24.0 - resolution: "@babel/runtime@npm:7.24.0" + version: 7.24.1 + resolution: "@babel/runtime@npm:7.24.1" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/3495eed727bf4a4f84c35bb51ab53317ae38f4bbc3b1d0a8303751f9dfa0ce6f5fb2afced72b76c3dd0d8bb2ccb84787559a4dee9886291a36b26f02f0f759b4 + checksum: 10c0/500c6a99ddd84f37c7bc5dbc84777af47b1372b20e879941670451d55484faf18a673c5ebee9ca2b0f36208a729417873b35b1b92e76f811620f6adf7b8cb0f1 languageName: node linkType: hard @@ -1502,25 +1502,25 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/traverse@npm:7.24.0" +"@babel/traverse@npm:7, @babel/traverse@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/traverse@npm:7.24.1" dependencies: - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.1" + "@babel/generator": "npm:^7.24.1" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/55ffd2b0ce0fbd0a09051edc4def4fb1e96f35e0b100c0dc2a7429df569971ae312c290e980e423471f350961705698a257c7eea8c8304918024cc26f02468ba + checksum: 10c0/c087b918f6823776537ba246136c70e7ce0719fc05361ebcbfd16f4e6f2f6f1f8f4f9167f1d9b675f27d12074839605189cc9d689de20b89a85e7c140f23daab languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.24.0 resolution: "@babel/types@npm:7.24.0" dependencies: @@ -1538,38 +1538,453 @@ __metadata: languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.5.0": - version: 2.5.0 - resolution: "@csstools/css-parser-algorithms@npm:2.5.0" +"@csstools/cascade-layer-name-parser@npm:^1.0.9": + version: 1.0.9 + resolution: "@csstools/cascade-layer-name-parser@npm:1.0.9" peerDependencies: - "@csstools/css-tokenizer": ^2.2.3 - checksum: 10c0/31b4a523d956e204af9842183678cca5a88ad76551d54dcb6083f8a6f2dfd8fdec6c09bca5410842af54b90997308bebee7593c17dbc1a4e951453b54bd3f024 + "@csstools/css-parser-algorithms": ^2.6.1 + "@csstools/css-tokenizer": ^2.2.4 + checksum: 10c0/f6e28c7cdeca44711288400cf20de9ebc4db71eafa39ca9a6b3e9f5d3295ba636dd986aac9fcb9e6171c84d436712d68ced923504d78d5fda0601c880eb352fe languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.3": - version: 2.2.3 - resolution: "@csstools/css-tokenizer@npm:2.2.3" - checksum: 10c0/557266ec52e8b36c19008a5bbd7151effba085cdd6d68270c01afebf914981caac698eda754b2a530a8a9947a3dd70e3f3a39a5e037c4170bb2a055a92754acb +"@csstools/color-helpers@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/color-helpers@npm:4.0.0" + checksum: 10c0/fc78871253f8c92789ed64a0e5555bd2873c2b62a49c30baced88487561fe09fe897b0d16fcf7bf2a94f78ff37530773a4395ce5efc016810c094041b5bbcd42 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.7": - version: 2.1.7 - resolution: "@csstools/media-query-list-parser@npm:2.1.7" +"@csstools/css-calc@npm:^1.2.0": + version: 1.2.0 + resolution: "@csstools/css-calc@npm:1.2.0" peerDependencies: - "@csstools/css-parser-algorithms": ^2.5.0 - "@csstools/css-tokenizer": ^2.2.3 - checksum: 10c0/433aef06b00f1d402fd24074a1919b8e2de94245a3b780da6466c8cc9e0f3cc93d2db930f0fce36c7d6908cd50b626cd61e803d3f62dddad79eeb742858028ef + "@csstools/css-parser-algorithms": ^2.6.1 + "@csstools/css-tokenizer": ^2.2.4 + checksum: 10c0/ef12dc08ccdb9903e5cb24d81b469080b94c79123415f62f707196a85c53420b7729be608930314c7a9404f50c832fe5256f647c0567d1c825079cb77f6a8719 languageName: node linkType: hard -"@csstools/selector-specificity@npm:^3.0.1": +"@csstools/css-color-parser@npm:^1.6.2": + version: 1.6.2 + resolution: "@csstools/css-color-parser@npm:1.6.2" + dependencies: + "@csstools/color-helpers": "npm:^4.0.0" + "@csstools/css-calc": "npm:^1.2.0" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.6.1 + "@csstools/css-tokenizer": ^2.2.4 + checksum: 10c0/f587482fd7a40b6bd4cc790771245477d82203ba08f8f85981908680423476b9733c71fb4f1ba655f4dfb77907b4dfbb654dd7ba89e9edf0ba5229c26830ee8f + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^2.5.0, @csstools/css-parser-algorithms@npm:^2.6.1": + version: 2.6.1 + resolution: "@csstools/css-parser-algorithms@npm:2.6.1" + peerDependencies: + "@csstools/css-tokenizer": ^2.2.4 + checksum: 10c0/2c60377c4ffc96bbeb962cab19c09fccbcc834785928747219ed3bd916a34e52977393935d1d36501403f3f95ff59d358dd741d1dddcdaf9564ab36d73926aa6 + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^2.2.3, @csstools/css-tokenizer@npm:^2.2.4": + version: 2.2.4 + resolution: "@csstools/css-tokenizer@npm:2.2.4" + checksum: 10c0/23997db5874514f4b951ebd215e1e6cc8baf03adf9a35fc6fd028b84cb52aa2dc053860722108c09859a9b37b455f62b84181fe15539cd37797ea699b9ff85f0 + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^2.1.7, @csstools/media-query-list-parser@npm:^2.1.9": + version: 2.1.9 + resolution: "@csstools/media-query-list-parser@npm:2.1.9" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.6.1 + "@csstools/css-tokenizer": ^2.2.4 + checksum: 10c0/602e9b5631928c078e670018df20b959bfb8e42ea11024d5218f1604e5ef94e070a74934a919ccbff3713e506d99096057947fa0c2e4768939f7b22479553534 + languageName: node + linkType: hard + +"@csstools/postcss-cascade-layers@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-cascade-layers@npm:4.0.3" + dependencies: + "@csstools/selector-specificity": "npm:^3.0.2" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/63f29af21eed000130f6f1268c00188a52eafbdeccc6acf5aa46507e499259631aa89f928b01b4698c41f3f68703db4c6e363c0e6f64b04b20c7e6452a5b259a + languageName: node + linkType: hard + +"@csstools/postcss-color-function@npm:^3.0.12": + version: 3.0.12 + resolution: "@csstools/postcss-color-function@npm:3.0.12" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a270aef93e98efb2b184b84a5de8acc28b10aed229807d1e5b5cf43309b281782895322ec98c0c9486b306ec68915e06689d6959c13ea2ab37fbb773ecd02335 + languageName: node + linkType: hard + +"@csstools/postcss-color-mix-function@npm:^2.0.12": + version: 2.0.12 + resolution: "@csstools/postcss-color-mix-function@npm:2.0.12" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/42c7d48eeb1c1e49265505b560b9e034861254c62c5f78d89538255decab67d70f89bf81b269b208aa2103e9f48a51a33bb009eb17774f07c0459929d97f7056 + languageName: node + linkType: hard + +"@csstools/postcss-exponential-functions@npm:^1.0.5": + version: 1.0.5 + resolution: "@csstools/postcss-exponential-functions@npm:1.0.5" + dependencies: + "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/45e18ca9025597da29cbef214cef39fcabef1e169bbb1f5c015de5f677e2927a1c3b8ae18558d815701e8d3e64db1043412a222af35036c92c25011a0e1e027d + languageName: node + linkType: hard + +"@csstools/postcss-font-format-keywords@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-font-format-keywords@npm:3.0.2" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1b9bf031ce1a00fef1fae0b1ad614eddc6bb4c036ecad47e065c99063ba3d2f6ab8e47f9db02a6fbe8b75b0e02a075a7a80480d4296918970ba9e8d36f07a523 + languageName: node + linkType: hard + +"@csstools/postcss-gamut-mapping@npm:^1.0.5": + version: 1.0.5 + resolution: "@csstools/postcss-gamut-mapping@npm:1.0.5" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/33e2185ae8f8a229476bd5a60c0523aef8cb4de552a6c532514b9d87bff579f36fb7640dd14c9ea56906996d43f4d5ab969a4f704e1b8a94f7802beb3df31d08 + languageName: node + linkType: hard + +"@csstools/postcss-gradients-interpolation-method@npm:^4.0.13": + version: 4.0.13 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.13" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/af7c2d9c8e2249ea4cc50c9ef1b5ad75b1ed062020f1a8906ba9baf3143c4e2638b8b2189d7552838558e7b9a8a1ee9aa0baa076f5deabb23c1dc90fd78d7eab + languageName: node + linkType: hard + +"@csstools/postcss-hwb-function@npm:^3.0.11": + version: 3.0.11 + resolution: "@csstools/postcss-hwb-function@npm:3.0.11" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d779617ef97ff22a125fbdd65f01dd3dd5bc607dbe7f3b02ae808d2fcccb1d5022b7f8e66e64283f7f9c52b6997bf0dc649566c734f0e3e4f3ba3c66a3b564a8 + languageName: node + linkType: hard + +"@csstools/postcss-ic-unit@npm:^3.0.5": + version: 3.0.5 + resolution: "@csstools/postcss-ic-unit@npm:3.0.5" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/bf21b74e1bdff425481724a36385f1ebe7c8aea6cccfcf6715cad58449d2d19419342e94d33d6626ec09bed8d4ab6e391b8eebaa3bda721e7f41e5c64c485f2a + languageName: node + linkType: hard + +"@csstools/postcss-initial@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-initial@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5d21c7c611d90a4b6758ba5be5e38d8d9eea9499c62797c4f5e01fbc9ccc2c68daf1c201850efe70ffa4ff9e979e7dea80b854b8793768550879562881aa6f9f + languageName: node + linkType: hard + +"@csstools/postcss-is-pseudo-class@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.5" + dependencies: + "@csstools/selector-specificity": "npm:^3.0.2" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5f35d5474957be30f54b89cf46b818390754af8094c4d9a083a79d579ccd817452bb7e2cfef8951c664d4c6ba381d8d45cd89f49339a42941f947ccb032f9d45 + languageName: node + linkType: hard + +"@csstools/postcss-light-dark-function@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-light-dark-function@npm:1.0.1" + dependencies: + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/538e809b473b91245cb79418949c4a27c0e82b0ea357f9c93b054e07d3194857e53979693226be9448904a7d9d4ad4732ad34183db82927bb172fe6cab1e53a8 + languageName: node + linkType: hard + +"@csstools/postcss-logical-float-and-clear@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-logical-float-and-clear@npm:2.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/92d9184bf8a159753a5872463dcfde580abd9b935e2a59f7ebe601cd14d9871f2f9f4dc18d8bbe251e7d8a3e446e302d9d99bf408d9cabbd9a6323825f5e833d + languageName: node + linkType: hard + +"@csstools/postcss-logical-overflow@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-logical-overflow@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a8f5b1fdaf4ce7b1665407dac2f2e0c0ea11195e6873cfc714d9cd206489170fd91fc172b337330baf60191206f60579e235264f0dc7fee750ccd27ffe02c163 + languageName: node + linkType: hard + +"@csstools/postcss-logical-overscroll-behavior@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-logical-overscroll-behavior@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/9485502bd9235276525351818d6cc11544ac1b270bb4f527f3fac32fe98ac66269366c34cdb8f61920b10ff9aac5824935004a5927490a5febca77eb41226604 + languageName: node + linkType: hard + +"@csstools/postcss-logical-resize@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-logical-resize@npm:2.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/18f7e19ea465a15b334d8231b9ed98b630c74a6c2a6c52884437b852065f7b55bb1282cdbbdc1136aade479e996605b01799ab0ab771e2c47fd78d966ed33162 + languageName: node + linkType: hard + +"@csstools/postcss-logical-viewport-units@npm:^2.0.7": + version: 2.0.7 + resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.7" + dependencies: + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/9493f5395ccfe88d0d0740e54f77f0c844afc79b164068fdd907aed75004b4252ba9423dea22194ad98114dd1a2e77c14e307604305d926425251d4ab3013949 + languageName: node + linkType: hard + +"@csstools/postcss-media-minmax@npm:^1.1.4": + version: 1.1.4 + resolution: "@csstools/postcss-media-minmax@npm:1.1.4" + dependencies: + "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/media-query-list-parser": "npm:^2.1.9" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/620bb85065195c72cf9c0abe9af822f9feeaf919b53bfd47ec09f75b644cb544bd967b09278c48f829348808b34c552718c1aa3eb5342e2dec983e22eb63b0a0 + languageName: node + linkType: hard + +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.7": + version: 2.0.7 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.7" + dependencies: + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/media-query-list-parser": "npm:^2.1.9" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d5d52a744f9a9466d86a506aab430811778dfa681d3f52f5486ee9b686390919eaae9ad356b84bc782d263227f35913ef68d9a6c3eefcfc38d8ffaccc9b94de0 + languageName: node + linkType: hard + +"@csstools/postcss-nested-calc@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-nested-calc@npm:3.0.2" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/3e24cf641170f9090f0dce088f6dae09ed9a0f38af1bdaa369ecc791a94cce54d7a02a0634f661a97fae24e04f1601c21d753593de018c80ad4236d36144b975 + languageName: node + linkType: hard + +"@csstools/postcss-normalize-display-values@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-normalize-display-values@npm:3.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a20e2f4c213a5ec6e004c2ba76b543d3288a39aae21b3198b06a57df0d2c7916111d2cd70dcb0e8c6ca1cf1b01751e88fd2fe9abbc070e1efab1a4e54dcdbbbe + languageName: node + linkType: hard + +"@csstools/postcss-oklab-function@npm:^3.0.12": + version: 3.0.12 + resolution: "@csstools/postcss-oklab-function@npm:3.0.12" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1454f57c756bdc882a523b50634823a0c31d7adc35330e13c80f9573c287f2a4ab30bbce48e0e8788dfe5a293d55113db2205373523b202a8828b9088e55e51c + languageName: node + linkType: hard + +"@csstools/postcss-progressive-custom-properties@npm:^3.1.1": + version: 3.1.1 + resolution: "@csstools/postcss-progressive-custom-properties@npm:3.1.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/9303296c8285a8154d2ee22d5a1330c94c5f361d277a1fd27172e868e3511619a6876538beacae0c9e925a9d1e81a32438d405526170faa84cad0c2d2159fdd2 + languageName: node + linkType: hard + +"@csstools/postcss-relative-color-syntax@npm:^2.0.12": + version: 2.0.12 + resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.12" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/e12a59b89372fbc5cc460cfeceeea2ddc8b7a8f5639a767dbd6c7ff799bf740ac5dd7ae6797703f74efeadd696801042bff8770117cf5ed70646dcc598637334 + languageName: node + linkType: hard + +"@csstools/postcss-scope-pseudo-class@npm:^3.0.1": version: 3.0.1 - resolution: "@csstools/selector-specificity@npm:3.0.1" + resolution: "@csstools/postcss-scope-pseudo-class@npm:3.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/489c5469951277b810754ba02e9f6c42196e03f2203b908181a81747bf1dcaa7b194c8c0f5c7dcb6b7276d08f2573a71bd7df4f2251c034ef1b92968c7070285 + languageName: node + linkType: hard + +"@csstools/postcss-stepped-value-functions@npm:^3.0.6": + version: 3.0.6 + resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.6" + dependencies: + "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a198aedc4fffe88909c92bfaa36031e6803e739a2578ba4a81c01b9f1525e6a6876d6ffacbbe21701298598dcade8b2ac8423d8ab0fc5d9f4ba86ed60f53cbca + languageName: node + linkType: hard + +"@csstools/postcss-text-decoration-shorthand@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.4" + dependencies: + "@csstools/color-helpers": "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/2e17535bbeed8ca5f095e6aecfb552004c1920597f16146fe6ec773b46af95f9e0e3cf77181d4216a23528de8e042bd85f82df1562447f52e7687ed8628f0adc + languageName: node + linkType: hard + +"@csstools/postcss-trigonometric-functions@npm:^3.0.6": + version: 3.0.6 + resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.6" + dependencies: + "@csstools/css-calc": "npm:^1.2.0" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4b484af853d9eb59a4a4b1c063fcf48e2658bb2d6930dfab1d79e676986534687e6440b8cdcd2731ddcb7726537f4ed484208a2b80ef2c9359053762ba35e5e7 + languageName: node + linkType: hard + +"@csstools/postcss-unset-value@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-unset-value@npm:3.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5032c3125eada0a3a77d0867644cf994e28b789aaa40e990e7eebcdf5a9ed9f36b30e0904827044cea39849c9a9a19c90e82d3ca655550d82a7530872b3b6ff8 + languageName: node + linkType: hard + +"@csstools/selector-resolve-nested@npm:^1.1.0": + version: 1.1.0 + resolution: "@csstools/selector-resolve-nested@npm:1.1.0" peerDependencies: postcss-selector-parser: ^6.0.13 - checksum: 10c0/4280f494726d5e38de74e28dee2ff74ec86244560dff4edeec3ddff3ac73c774c19535bd1bb70cad77949bfb359cf87e977d0ec3264591e3b7260342a20dd84f + checksum: 10c0/3a53b14e048d48b8900c1cf30442ab5eec1a1087c74ce41459c4dcd42ad7d363c9327890ba7aed25288d09c206d9565178bae126b25cdc3e1170a1d55e763c77 + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^3.0.1, @csstools/selector-specificity@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/selector-specificity@npm:3.0.2" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: 10c0/d0c7dae2f1e9536e3e17f00467320a704f3208c76283c29c57fd69d4b83dcf6d062f492ed687c5ffd5f47fada9f0657c2efc89ea18fd4b038f757669553e0095 + languageName: node + linkType: hard + +"@csstools/utilities@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/utilities@npm:1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/2ac10895e0a1f9e1fc9c092197c8595a09f632552791af91219f38c55bb39083fb44b74a6a7de9112492cf24a2fe66d20c955a2b4aff041d5c017d87bbebc0f2 languageName: node linkType: hard @@ -2231,14 +2646,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10c0/376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb languageName: node linkType: hard @@ -2249,10 +2664,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 10c0/bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 languageName: node linkType: hard @@ -2273,13 +2688,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/0ea0b2675cf513ec44dc25605616a3c9b808b9832e74b5b63c44260d66b58558bba65764f81928fc1033ead911f8718dca1134049c3e7a93937faf436671df31 + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 languageName: node linkType: hard @@ -2388,6 +2803,7 @@ __metadata: path-complete-extname: "npm:^1.0.0" postcss: "npm:^8.4.24" postcss-loader: "npm:^4.3.0" + postcss-preset-env: "npm:^9.5.2" prettier: "npm:^3.0.0" prop-types: "npm:^15.8.1" punycode: "npm:^2.3.0" @@ -2470,7 +2886,7 @@ __metadata: pg-connection-string: "npm:^2.6.0" pino: "npm:^8.17.2" pino-http: "npm:^9.0.0" - pino-pretty: "npm:^10.3.1" + pino-pretty: "npm:^11.0.0" prom-client: "npm:^15.0.0" typescript: "npm:^5.0.4" utf-8-validate: "npm:^6.0.3" @@ -2589,8 +3005,8 @@ __metadata: linkType: hard "@reduxjs/toolkit@npm:^2.0.1": - version: 2.2.1 - resolution: "@reduxjs/toolkit@npm:2.2.1" + version: 2.2.2 + resolution: "@reduxjs/toolkit@npm:2.2.2" dependencies: immer: "npm:^10.0.3" redux: "npm:^5.0.1" @@ -2604,7 +3020,7 @@ __metadata: optional: true react-redux: optional: true - checksum: 10c0/675f816b311d6d703259e00c73977c9c5968e41b039d6d149e34e9084d5e6718aff3b692d2b7697974fb57a056687932117da1dd5202d392811d8d4e91d09322 + checksum: 10c0/d749181b1bc071698517cba7ce05c42ddfe99363019249722b4dfa3afc71b3a6e4cb9885af574cf81c5d6515f68201ebfedddb5c14b262c941a45112fdc66ce3 languageName: node linkType: hard @@ -4622,12 +5038,12 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.14": - version: 10.4.18 - resolution: "autoprefixer@npm:10.4.18" +"autoprefixer@npm:^10.4.14, autoprefixer@npm:^10.4.18": + version: 10.4.19 + resolution: "autoprefixer@npm:10.4.19" dependencies: browserslist: "npm:^4.23.0" - caniuse-lite: "npm:^1.0.30001591" + caniuse-lite: "npm:^1.0.30001599" fraction.js: "npm:^4.3.7" normalize-range: "npm:^0.1.2" picocolors: "npm:^1.0.0" @@ -4636,7 +5052,7 @@ __metadata: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 10c0/b6e1c1ba2fc6c09360cdcd75b00ce809c5dbe1ad4c30f0186764609a982aa5563d45965cb9e6a9d195c639a9fb1dcac2594484fc41624050195f626e9add666e + checksum: 10c0/fe0178eb8b1da4f15c6535cd329926609b22d1811e047371dccce50563623f8075dd06fb167daff059e4228da651b0bdff6d9b44281541eaf0ce0b79125bfd19 languageName: node linkType: hard @@ -4789,39 +5205,39 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.8": - version: 0.4.8 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.8" +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.10 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.10" dependencies: "@babel/compat-data": "npm:^7.22.6" - "@babel/helper-define-polyfill-provider": "npm:^0.5.0" + "@babel/helper-define-polyfill-provider": "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/843e7528de0e03a31a6f3837896a95f75b0b24b0294a077246282372279e974400b0bdd82399e8f9cbfe42c87ed56540fd71c33eafb7c8e8b9adac546ecc5fe5 + checksum: 10c0/910bfb1d809cae49cf43348f9b1e4a5e4c895aa25686fdd2ff8af7b7a996b88ad39597707905d097e08d4e70e14340ac935082ef4e035e77f68741f813f2a80d languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.9.0": - version: 0.9.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.9.0" +"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": + version: 0.10.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.5.0" - core-js-compat: "npm:^3.34.0" + "@babel/helper-define-polyfill-provider": "npm:^0.6.1" + core-js-compat: "npm:^3.36.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/b857010736c5e42e20b683973dae862448a42082fcc95b3ef188305a6864a4f94b5cbd568e49e4cd7172c6b2eace7bc403c3ba0984fbe5479474ade01126d559 + checksum: 10c0/31b92cd3dfb5b417da8dfcf0deaa4b8b032b476d7bb31ca51c66127cf25d41e89260e89d17bc004b2520faa38aa9515fafabf81d89f9d4976e9dc1163e4a7c41 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.5.5": - version: 0.5.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.5" +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.5.0" + "@babel/helper-define-polyfill-provider": "npm:^0.6.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/2aab692582082d54e0df9f9373dca1b223e65b4e7e96440160f27ed8803d417a1fa08da550f08aa3820d2010329ca91b68e2b6e9bd7aed51c93d46dfe79629bb + checksum: 10c0/0b55a35a75a261f62477d8d0f0c4a8e3b66f109323ce301d7de6898e168c41224de3bc26a92f48f2c7fcc19dfd1fc60fe71098bfd4f804a0463ff78586892403 languageName: node linkType: hard @@ -5160,7 +5576,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": +"browserslist@npm:^4.0.0, browserslist@npm:^4.22.2, browserslist@npm:^4.22.3, browserslist@npm:^4.23.0": version: 4.23.0 resolution: "browserslist@npm:4.23.0" dependencies: @@ -5379,10 +5795,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001587, caniuse-lite@npm:^1.0.30001591": - version: 1.0.30001591 - resolution: "caniuse-lite@npm:1.0.30001591" - checksum: 10c0/21937d341c3d75994504db21340f65573a1e847a8ab33ee4964ed493994d6552864c494ba144485459abd9c711c75c0708bc9fa19f2bff525bff75ffb0a42c3b +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001587, caniuse-lite@npm:^1.0.30001599": + version: 1.0.30001599 + resolution: "caniuse-lite@npm:1.0.30001599" + checksum: 10c0/8b3b9610b5be88533a3c8d0770d6896f7b1a9fee3dbeb7339e4ee119a514c81e5e07a628a5a289a6541ca291ac78a9402f5a99cf6012139e91f379083488a8eb languageName: node linkType: hard @@ -5869,10 +6285,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 10c0/c01ca3ef8d7b8187bae434434582288681273b5a9ed27521d4d7f9f7928fe0c920df0decd9f9d3bbd2d14ac432b8c8cf42b98b3bdd5bfe0e6edddeebebe8b61d +"cookie@npm:0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: 10c0/f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 languageName: node linkType: hard @@ -5883,12 +6299,12 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.34.0": - version: 3.35.1 - resolution: "core-js-compat@npm:3.35.1" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": + version: 3.36.1 + resolution: "core-js-compat@npm:3.36.1" dependencies: - browserslist: "npm:^4.22.2" - checksum: 10c0/c3b872e1f9703aa9554cce816207d85730da4703f1776c540b4da11bbbef6d9a1e6041625b5c1f58d2ada3d05f4a2b92897b7de5315c5ecd5d33d50dec86cca7 + browserslist: "npm:^4.23.0" + checksum: 10c0/70fba18a4095cd8ac04e5ba8cee251e328935859cf2851c1f67770068ea9f9fe71accb1b7de17cd3c9a28d304a4c41712bd9aa895110ebb6e3be71b666b029d1 languageName: node linkType: hard @@ -6069,6 +6485,17 @@ __metadata: languageName: node linkType: hard +"css-blank-pseudo@npm:^6.0.1": + version: 6.0.1 + resolution: "css-blank-pseudo@npm:6.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/04f2dc1c39a429cb4958b60a9d00b03e29a78e3e55fe111b3a0660b7c6c478455d5907eda7c7a495cf72dbe83ae3c80b409e0468ca1ba5ccef992e69a8f49df8 + languageName: node + linkType: hard + "css-declaration-sorter@npm:^7.1.1": version: 7.1.1 resolution: "css-declaration-sorter@npm:7.1.1" @@ -6085,6 +6512,19 @@ __metadata: languageName: node linkType: hard +"css-has-pseudo@npm:^6.0.2": + version: 6.0.2 + resolution: "css-has-pseudo@npm:6.0.2" + dependencies: + "@csstools/selector-specificity": "npm:^3.0.2" + postcss-selector-parser: "npm:^6.0.13" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/96f9a6a4f31e11797e583d458535e11fa513b3f1f430ab566964a2f0792eaaa543213598b0a509516f07464234348ab11d56448b6d0c0c8a36988e0c86cf4ca1 + languageName: node + linkType: hard + "css-loader@npm:^5.2.7": version: 5.2.7 resolution: "css-loader@npm:5.2.7" @@ -6105,6 +6545,15 @@ __metadata: languageName: node linkType: hard +"css-prefers-color-scheme@npm:^9.0.1": + version: 9.0.1 + resolution: "css-prefers-color-scheme@npm:9.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/b94da00d84c4ebb56eb8fce96d4fdb20d2e622a7cd8cd6d7b87d1d2b718a55ce88bccc9d871771bfe77c5107de06132ba87190e3656f049e45f19f652d50136c + languageName: node + linkType: hard + "css-select-base-adapter@npm:^0.1.1": version: 0.1.1 resolution: "css-select-base-adapter@npm:0.1.1" @@ -6198,6 +6647,13 @@ __metadata: languageName: node linkType: hard +"cssdb@npm:^7.11.1": + version: 7.11.2 + resolution: "cssdb@npm:7.11.2" + checksum: 10c0/5cd8dfee703dfbd7b7a8c3a93d65d26007ec1cd9692379b5868a0ceedf23b88e28d4b98f1cb9a4161f8b01e4a229e08ba9603fb94b756a3df6e07c423fff5b5d + languageName: node + linkType: hard + "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" @@ -6207,9 +6663,9 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^6.1.0": - version: 6.1.0 - resolution: "cssnano-preset-default@npm:6.1.0" +"cssnano-preset-default@npm:^6.1.1": + version: 6.1.1 + resolution: "cssnano-preset-default@npm:6.1.1" dependencies: browserslist: "npm:^4.23.0" css-declaration-sorter: "npm:^7.1.1" @@ -6221,12 +6677,12 @@ __metadata: 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.4" - postcss-merge-rules: "npm:^6.1.0" - postcss-minify-font-values: "npm:^6.0.3" + 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.3" + 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" @@ -6240,10 +6696,10 @@ __metadata: 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.3" + postcss-unique-selectors: "npm:^6.0.4" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/47b7026b66b80a03f043929f825f48a13ed3a4086a6f335f25312c77fe73977a74cf718a486f91d9513b652e7d34312394380141c3bf6b8c8027ebc96710b6f6 + checksum: 10c0/dc5927c8538778f859b781dc1fb10f0082cd7b3afdba30e835e472dbf51724d4f18e5170587761150142284a371d6c9d2c3b51d29826c08d2b9dd86a929597ee languageName: node linkType: hard @@ -6257,14 +6713,14 @@ __metadata: linkType: hard "cssnano@npm:^6.0.1": - version: 6.1.0 - resolution: "cssnano@npm:6.1.0" + version: 6.1.1 + resolution: "cssnano@npm:6.1.1" dependencies: - cssnano-preset-default: "npm:^6.1.0" + cssnano-preset-default: "npm:^6.1.1" lilconfig: "npm:^3.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/ffe0d8c9110cce01692f51d21ae2fe6d319f2329989d28ef0dddb67a6fba2780c525f00682f0788bdbba380f37893d27ee870b3e99fb97c1fb8edccbd68a1d92 + checksum: 10c0/2db52c2f5e314f05efec8977de392886ef0e7e08568ac45446f2303218180e317cee64c6c0c6d2c1d70a7f339fcead75384e09e187b88ccacd7f9fd51919fdf1 languageName: node linkType: hard @@ -7731,15 +8187,15 @@ __metadata: linkType: hard "express@npm:^4.17.1, express@npm:^4.18.2": - version: 4.18.3 - resolution: "express@npm:4.18.3" + version: 4.19.1 + resolution: "express@npm:4.19.1" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" body-parser: "npm:1.20.2" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.5.0" + cookie: "npm:0.6.0" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" @@ -7765,7 +8221,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/0b9eeafbac549e3c67d92d083bf1773e358359f41ad142b92121935c6348d29079b75054555b3f62de39263fffc8ba06898b09fdd3e213e28e714c03c5d9f44c + checksum: 10c0/1cf6d3c095131f0d730105fac23a713083604d4f3ad9364df53cade50662abcfee2f6f8a955fdf164a5ee63f09f457da0b70cbed435ad302fa6f14162a9757f9 languageName: node linkType: hard @@ -12526,9 +12982,9 @@ __metadata: languageName: node linkType: hard -"pino-pretty@npm:^10.3.1": - version: 10.3.1 - resolution: "pino-pretty@npm:10.3.1" +"pino-pretty@npm:^11.0.0": + version: 11.0.0 + resolution: "pino-pretty@npm:11.0.0" dependencies: colorette: "npm:^2.0.7" dateformat: "npm:^4.6.3" @@ -12546,7 +13002,7 @@ __metadata: strip-json-comments: "npm:^3.1.1" bin: pino-pretty: bin.js - checksum: 10c0/6964fba5acc7a9f112e4c6738d602e123daf16cb5f6ddc56ab4b6bb05059f28876d51da8f72358cf1172e95fa12496b70465431a0836df693c462986d050686b + checksum: 10c0/d42213f3fdf19d92152b0a14683b2bb8443423739c81ab7c1181a5dac0e0ca7621d232c8264ece81edc01106ca2a8e165783daca0a902f0fde480027075d5540 languageName: node linkType: hard @@ -12628,6 +13084,17 @@ __metadata: languageName: node linkType: hard +"postcss-attribute-case-insensitive@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-attribute-case-insensitive@npm:6.0.3" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6161a625356db17ea23daa50797e23fa830a15629fa45e7438b5ac72a389f81ba51088503c5893a941d34d287857882867199584c5f03bf7762258c74570f456 + languageName: node + linkType: hard + "postcss-calc@npm:^9.0.1": version: 9.0.1 resolution: "postcss-calc@npm:9.0.1" @@ -12640,6 +13107,56 @@ __metadata: languageName: node linkType: hard +"postcss-clamp@npm:^4.1.0": + version: 4.1.0 + resolution: "postcss-clamp@npm:4.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.6 + checksum: 10c0/701261026b38a4c27b3c3711635fac96005f36d3270adb76dbdb1eebc950fc841db45283ee66068a7121565592e9d7967d5534e15b6e4dd266afcabf9eafa905 + languageName: node + linkType: hard + +"postcss-color-functional-notation@npm:^6.0.7": + version: 6.0.7 + resolution: "postcss-color-functional-notation@npm:6.0.7" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/bd3c1831e885f395205d503bf4b24f462dc9f4af74be11c5b0ad7b09eb150b2d3f8b2c727ab9e67c474ff05baa8e8e3c950880ffe2085ed39794d308c0297667 + languageName: node + linkType: hard + +"postcss-color-hex-alpha@npm:^9.0.4": + version: 9.0.4 + resolution: "postcss-color-hex-alpha@npm:9.0.4" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/57b5cfe17e0b659d5444f267c485462b8b25f6ab087b810c7dd44662af4828e1e8f9c4a9169b8635a4755509ca7c0f3463c2e96444764c4e6ff9f4036aad05e5 + languageName: node + linkType: hard + +"postcss-color-rebeccapurple@npm:^9.0.3": + version: 9.0.3 + resolution: "postcss-color-rebeccapurple@npm:9.0.3" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/ab36d29df23dd475a2a540101427640ef9c7936bbf941816e8582caea05feced26c65f795a849e2ad17469cee6682d1bbccd2f8ab0da07fe91efcc0649568038 + languageName: node + linkType: hard + "postcss-colormin@npm:^6.1.0": version: 6.1.0 resolution: "postcss-colormin@npm:6.1.0" @@ -12666,6 +13183,60 @@ __metadata: languageName: node linkType: hard +"postcss-custom-media@npm:^10.0.4": + version: 10.0.4 + resolution: "postcss-custom-media@npm:10.0.4" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.9" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/media-query-list-parser": "npm:^2.1.9" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/2384a40f0e38abe92fbfc707000b264e4bdfe65bd0086ab18c6aab71049198f9dd1431bc4f9bbf68f7cca86b4ff0da352bac4a6ecd04e3671b7ddf6ed6ec3d04 + languageName: node + linkType: hard + +"postcss-custom-properties@npm:^13.3.6": + version: 13.3.6 + resolution: "postcss-custom-properties@npm:13.3.6" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.9" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/faa3b692966314a6dfcba93e74d91f20f2484ea328f88c809b1d0daa8ecc0d8d5125e06d1d7c18b5455ac30cb3501c7069b6e56e5efac61523a6ed75c3d73a30 + languageName: node + linkType: hard + +"postcss-custom-selectors@npm:^7.1.8": + version: 7.1.8 + resolution: "postcss-custom-selectors@npm:7.1.8" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.9" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6a7d8248342177a222821531ea3b4008764362e4f7e8f7f2d5767e5880c37ffa39ac5adced2c686baeb9c1f4ed4c283fcc8a8d30ef3b4fc5f63d4ef9a691285e + languageName: node + linkType: hard + +"postcss-dir-pseudo-class@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-dir-pseudo-class@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8c096e096b09e4041818bd2edf5581b5172375621f5eeca013633166ea100ab98e71bf60fccd92fa20cfa7b55c57598605a1655c6bcbe54a80728a7d4e36859e + languageName: node + linkType: hard + "postcss-discard-comments@npm:^6.0.2": version: 6.0.2 resolution: "postcss-discard-comments@npm:6.0.2" @@ -12702,6 +13273,86 @@ __metadata: languageName: node linkType: hard +"postcss-double-position-gradients@npm:^5.0.5": + version: 5.0.5 + resolution: "postcss-double-position-gradients@npm:5.0.5" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/02c22ca055ceca1ecc3c6888eab5c84769c9df37f59855f0ff9e9faaedcb4acf6818e927bff18bd57df161045f775ecca4142b13f968332419976c556a769995 + languageName: node + linkType: hard + +"postcss-focus-visible@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-visible@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/b8eb14ef51df62969559a7b2b4a4b6313a802fc2de225de293ad484ed6528833fc6bb7574aad5fabe7eeb27e8cd62663c2d547b25ff058d31c06d3d066abd904 + languageName: node + linkType: hard + +"postcss-focus-within@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-focus-within@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/cb0380d89f3b9313345dbea65c78c7ad16a6e6ab2ba9e90451d5b14f05ee691a0cdf458376368061327182e031644da21eee7e6e9ae508d195f083e0a20c0502 + languageName: node + linkType: hard + +"postcss-font-variant@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-font-variant@npm:5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/ccc96460cf6a52b5439c26c9a5ea0589882e46161e3c2331d4353de7574448f5feef667d1a68f7f39b9fe3ee75d85957383ae82bbfcf87c3162c7345df4a444e + languageName: node + linkType: hard + +"postcss-gap-properties@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-gap-properties@npm:5.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/3b28c38819add37a2fc7decd7e3bdda1cab1de861af228abfb3e4310d87786eff4572a693bec6cea1c435bcd3dd0bb58bc9a58f1dde3a1c7def9feaf800762b8 + languageName: node + linkType: hard + +"postcss-image-set-function@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-image-set-function@npm:6.0.3" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/b35ce25aeca95f7abc5e5820f2398588150f5be02209054d714e870ae2fa01a8482fd10600fe1f847add898c39690275a60a5999f83f6bed6c66be9b0444b704 + languageName: node + linkType: hard + +"postcss-lab-function@npm:^6.0.12": + version: 6.0.12 + resolution: "postcss-lab-function@npm:6.0.12" + dependencies: + "@csstools/css-color-parser": "npm:^1.6.2" + "@csstools/css-parser-algorithms": "npm:^2.6.1" + "@csstools/css-tokenizer": "npm:^2.2.4" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1c96c19d0487346445749777df2af7cc828f3e3c4e8a435cac250d03c14efb0d14ee994ac58d966ed07f8f07aa297f0e3311248b78ba1e816bb18386e435a83c + languageName: node + linkType: hard + "postcss-loader@npm:^4.3.0": version: 4.3.0 resolution: "postcss-loader@npm:4.3.0" @@ -12718,6 +13369,17 @@ __metadata: languageName: node linkType: hard +"postcss-logical@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-logical@npm:7.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/66a06b5d3cb31181dd76c80286addd219205066a4a8c216076869fc54769ee0011cdaa8063e1b2c19c114cdc5ad12a2e2e8b730f6971960dc77d55f25f290223 + languageName: node + linkType: hard + "postcss-media-query-parser@npm:^0.2.3": version: 0.2.3 resolution: "postcss-media-query-parser@npm:0.2.3" @@ -12725,40 +13387,40 @@ __metadata: languageName: node linkType: hard -"postcss-merge-longhand@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-merge-longhand@npm:6.0.4" +"postcss-merge-longhand@npm:^6.0.5": + version: 6.0.5 + resolution: "postcss-merge-longhand@npm:6.0.5" dependencies: postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^6.1.0" + stylehacks: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/6c05cfe60d86cb0b6f40abe4649e1c0c21cf416fbf17aa15f04c315fcef4887827db5ef2593eca27b2b14127f5338ab179b147940c22315b5a9bcb0bdbbfa768 + checksum: 10c0/5a223a7f698c05ab42e9997108a7ff27ea1e0c33a11a353d65a04fc89c3b5b750b9e749550d76b6406329117a055adfc79dde7fee48dca5c8e167a2854ae3fea languageName: node linkType: hard -"postcss-merge-rules@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-merge-rules@npm:6.1.0" +"postcss-merge-rules@npm:^6.1.1": + version: 6.1.1 + resolution: "postcss-merge-rules@npm:6.1.1" dependencies: browserslist: "npm:^4.23.0" caniuse-api: "npm:^3.0.0" cssnano-utils: "npm:^4.0.2" - postcss-selector-parser: "npm:^6.0.15" + postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/3ce76c87e29003fe46fbeba64348ed61d50d8966cfd56ec59b70b6fbf2e2ea8866b8399eec09e036fc636c84207ba12037a1dbc1374fd313a885511947699cad + checksum: 10c0/6d8952dbb19b1e59bf5affe0871fa1be6515103466857cff5af879d6cf619659f8642ec7a931cabb7cdbd393d8c1e91748bf70bee70fa3edea010d4e25786d04 languageName: node linkType: hard -"postcss-minify-font-values@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-minify-font-values@npm:6.0.3" +"postcss-minify-font-values@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-minify-font-values@npm:6.1.0" dependencies: postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/c1ae31099e3ae79169405d3d46cd49cff35c70c63d1f36f24b16fcce43999c130db396e1fde071a375bd5b4853b14058111034a8da278a3a31f9ca12e091116e + checksum: 10c0/0d6567170c22a7db42096b5eac298f041614890fbe01759a9fa5ccda432f2bb09efd399d92c11bf6675ae13ccd259db4602fad3c358317dee421df5f7ab0a003 languageName: node linkType: hard @@ -12788,14 +13450,14 @@ __metadata: languageName: node linkType: hard -"postcss-minify-selectors@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-minify-selectors@npm:6.0.3" +"postcss-minify-selectors@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-minify-selectors@npm:6.0.4" dependencies: - postcss-selector-parser: "npm:^6.0.15" + postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/6abc83edf3fd746979ef709182fd613a764c5c2f68ae20aaa1b38940153a1078c0b270d657fe3bcfe6cda44b61f5af762fe9b31b8b62f63b897bfc2d2bc02b88 + checksum: 10c0/695ec2e1e3a7812b0cabe1105d0ed491760be3d8e9433914fb5af1fc30a84e6dc24089cd31b7e300de620b8e7adf806526c1acf8dd14077a7d1d2820c60a327c languageName: node linkType: hard @@ -12843,6 +13505,19 @@ __metadata: languageName: node linkType: hard +"postcss-nesting@npm:^12.1.0": + version: 12.1.0 + resolution: "postcss-nesting@npm:12.1.0" + dependencies: + "@csstools/selector-resolve-nested": "npm:^1.1.0" + "@csstools/selector-specificity": "npm:^3.0.2" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/87902723214ec33a81520f51cce1e52f52c02272f2b7838d3aaa795e226104bf4809ef9dad8840f43852c1f229afb5f480ab1f20c7677bd021cf57739b625871 + languageName: node + linkType: hard + "postcss-normalize-charset@npm:^6.0.2": version: 6.0.2 resolution: "postcss-normalize-charset@npm:6.0.2" @@ -12941,6 +13616,15 @@ __metadata: languageName: node linkType: hard +"postcss-opacity-percentage@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-opacity-percentage@npm:2.0.0" + peerDependencies: + postcss: ^8.2 + checksum: 10c0/f031f3281060c4c0ede8f9a5832f65a3d8c2a1896ff324c41de42016e092635f0e0abee07545b01db93dc430a9741674a1d09c377c6c01cd8c2f4be65f889161 + languageName: node + linkType: hard + "postcss-ordered-values@npm:^6.0.2": version: 6.0.2 resolution: "postcss-ordered-values@npm:6.0.2" @@ -12953,6 +13637,118 @@ __metadata: languageName: node linkType: hard +"postcss-overflow-shorthand@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-overflow-shorthand@npm:5.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/328407adffae084c096b3ea2c03037f0083a0000cae744872bb1168fdd317eef12bb049cdfef749343c3ed65b4275dc6eefe577d99cbc78e3617cb36d07e8717 + languageName: node + linkType: hard + +"postcss-page-break@npm:^3.0.4": + version: 3.0.4 + resolution: "postcss-page-break@npm:3.0.4" + peerDependencies: + postcss: ^8 + checksum: 10c0/eaaf4d8922b35f2acd637eb059f7e2510b24d65eb8f31424799dd5a98447b6ef010b41880c26e78f818e00f842295638ec75f89d5d489067f53e3dd3db74a00f + languageName: node + linkType: hard + +"postcss-place@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-place@npm:9.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d0fb5b0416fd15d5ac7da5fcc1829b9b78c5a90caba5bd045052c6ac0467910cbbeb2fff6c5257190affa656be27168c94ff339f86c0b7df54f9bea04bcadba7 + languageName: node + linkType: hard + +"postcss-preset-env@npm:^9.5.2": + version: 9.5.2 + resolution: "postcss-preset-env@npm:9.5.2" + dependencies: + "@csstools/postcss-cascade-layers": "npm:^4.0.3" + "@csstools/postcss-color-function": "npm:^3.0.12" + "@csstools/postcss-color-mix-function": "npm:^2.0.12" + "@csstools/postcss-exponential-functions": "npm:^1.0.5" + "@csstools/postcss-font-format-keywords": "npm:^3.0.2" + "@csstools/postcss-gamut-mapping": "npm:^1.0.5" + "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.13" + "@csstools/postcss-hwb-function": "npm:^3.0.11" + "@csstools/postcss-ic-unit": "npm:^3.0.5" + "@csstools/postcss-initial": "npm:^1.0.1" + "@csstools/postcss-is-pseudo-class": "npm:^4.0.5" + "@csstools/postcss-light-dark-function": "npm:^1.0.1" + "@csstools/postcss-logical-float-and-clear": "npm:^2.0.1" + "@csstools/postcss-logical-overflow": "npm:^1.0.1" + "@csstools/postcss-logical-overscroll-behavior": "npm:^1.0.1" + "@csstools/postcss-logical-resize": "npm:^2.0.1" + "@csstools/postcss-logical-viewport-units": "npm:^2.0.7" + "@csstools/postcss-media-minmax": "npm:^1.1.4" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7" + "@csstools/postcss-nested-calc": "npm:^3.0.2" + "@csstools/postcss-normalize-display-values": "npm:^3.0.2" + "@csstools/postcss-oklab-function": "npm:^3.0.12" + "@csstools/postcss-progressive-custom-properties": "npm:^3.1.1" + "@csstools/postcss-relative-color-syntax": "npm:^2.0.12" + "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1" + "@csstools/postcss-stepped-value-functions": "npm:^3.0.6" + "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.4" + "@csstools/postcss-trigonometric-functions": "npm:^3.0.6" + "@csstools/postcss-unset-value": "npm:^3.0.1" + autoprefixer: "npm:^10.4.18" + browserslist: "npm:^4.22.3" + css-blank-pseudo: "npm:^6.0.1" + css-has-pseudo: "npm:^6.0.2" + css-prefers-color-scheme: "npm:^9.0.1" + cssdb: "npm:^7.11.1" + postcss-attribute-case-insensitive: "npm:^6.0.3" + postcss-clamp: "npm:^4.1.0" + postcss-color-functional-notation: "npm:^6.0.7" + postcss-color-hex-alpha: "npm:^9.0.4" + postcss-color-rebeccapurple: "npm:^9.0.3" + postcss-custom-media: "npm:^10.0.4" + postcss-custom-properties: "npm:^13.3.6" + postcss-custom-selectors: "npm:^7.1.8" + postcss-dir-pseudo-class: "npm:^8.0.1" + postcss-double-position-gradients: "npm:^5.0.5" + postcss-focus-visible: "npm:^9.0.1" + postcss-focus-within: "npm:^8.0.1" + postcss-font-variant: "npm:^5.0.0" + postcss-gap-properties: "npm:^5.0.1" + postcss-image-set-function: "npm:^6.0.3" + postcss-lab-function: "npm:^6.0.12" + postcss-logical: "npm:^7.0.1" + postcss-nesting: "npm:^12.1.0" + postcss-opacity-percentage: "npm:^2.0.0" + postcss-overflow-shorthand: "npm:^5.0.1" + postcss-page-break: "npm:^3.0.4" + postcss-place: "npm:^9.0.1" + postcss-pseudo-class-any-link: "npm:^9.0.1" + postcss-replace-overflow-wrap: "npm:^4.0.0" + postcss-selector-not: "npm:^7.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/40f94472f2d940cbf1df9974bea29a76ada4c1285b97e7104c0cdf001fcafd0a1f5966822250df0d659ec0ea51e577a1ab78c9f5f8a5683ea9897efe043515c1 + languageName: node + linkType: hard + +"postcss-pseudo-class-any-link@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-pseudo-class-any-link@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/2d33f486af442a0ee095b7b8875701ed3f54ea3f80d2c4d1c1b35d105088b569c847e1c71fde2adf6cefb4920e8fb7d057ff1ad56e62c65892c7b68e26213b98 + languageName: node + linkType: hard + "postcss-reduce-initial@npm:^6.1.0": version: 6.1.0 resolution: "postcss-reduce-initial@npm:6.1.0" @@ -12976,6 +13772,15 @@ __metadata: languageName: node linkType: hard +"postcss-replace-overflow-wrap@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-replace-overflow-wrap@npm:4.0.0" + peerDependencies: + postcss: ^8.0.3 + checksum: 10c0/451361b714528cd3632951256ef073769cde725a46cda642a6864f666fb144921fa55e614aec1bcf5946f37d6ffdcca3b932b76f3d997c07b076e8db152b128d + languageName: node + linkType: hard + "postcss-resolve-nested-selector@npm:^0.1.1": version: 0.1.1 resolution: "postcss-resolve-nested-selector@npm:0.1.1" @@ -13001,13 +13806,24 @@ __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.15, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": - version: 6.0.15 - resolution: "postcss-selector-parser@npm:6.0.15" +"postcss-selector-not@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-selector-not@npm:7.0.2" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/624b6e516d37d43406ff1414b3413fe7a5dc34eccadd6a6082fe7df13c5c2fab3e244af33ff0916f9be0a4f7db91d1c22102f5166d7a6e6595e7c00e11e20281 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.15, 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: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10c0/48b425d6cef497bcf6b7d136f6fd95cfca43026955e07ec9290d3c15457de3a862dbf251dd36f42c07a0d5b5ab6f31e41acefeff02528995a989b955505e440b + checksum: 10c0/0e11657cb3181aaf9ff67c2e59427c4df496b4a1b6a17063fae579813f80af79d444bf38f82eeb8b15b4679653fd3089e66ef0283f9aab01874d885e6cf1d2cf languageName: node linkType: hard @@ -13023,14 +13839,14 @@ __metadata: languageName: node linkType: hard -"postcss-unique-selectors@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-unique-selectors@npm:6.0.3" +"postcss-unique-selectors@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-unique-selectors@npm:6.0.4" dependencies: - postcss-selector-parser: "npm:^6.0.15" + postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/884c5da4c3bfdacf6a61bb3bd23d212e61d2b3e99ba5099d4d646d18970d2c72d8f6bd8f2ab244ee68d7214e576dc3fd9004fc946ff872e745a965da29f7b18b + checksum: 10c0/bfb99d8a7c675c93f2e65c9d9d563477bfd46fdce9e2727d42d57982b31ccbaaf944e8034bfbefe48b3119e77fba7eb1b181c19b91cb3a5448058fa66a7c9ae9 languageName: node linkType: hard @@ -13042,13 +13858,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.33": - version: 8.4.36 - resolution: "postcss@npm:8.4.36" + version: 8.4.38 + resolution: "postcss@npm:8.4.38" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.1.0" - checksum: 10c0/e7c834e31d8f4e8dfd0a427df36fdc7bdc58a16e373551618e2c3ac172019eb816b24f1b4709311ebcade8d3ba31b2d75522d28ef45ecbbeb11eb01f265579fb + source-map-js: "npm:^1.2.0" + checksum: 10c0/955407b8f70cf0c14acf35dab3615899a2a60a26718a63c848cf3c29f2467b0533991b985a2b994430d890bd7ec2b1963e36352b0774a19143b5f591540f7c06 languageName: node linkType: hard @@ -14989,10 +15805,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.1.0": - version: 1.1.0 - resolution: "source-map-js@npm:1.1.0" - checksum: 10c0/d1f016efe4fcf67fd92e36da0670f2889b13a36cc453329758336450e811c61164376eb451b453b4dd4e89a760f841b0a014942d54f240af31a791829bc0e336 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 languageName: node linkType: hard @@ -15531,15 +16347,15 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^6.1.0": - version: 6.1.0 - resolution: "stylehacks@npm:6.1.0" +"stylehacks@npm:^6.1.1": + version: 6.1.1 + resolution: "stylehacks@npm:6.1.1" dependencies: browserslist: "npm:^4.23.0" - postcss-selector-parser: "npm:^6.0.15" + postcss-selector-parser: "npm:^6.0.16" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/0e9624d2b12d00d5593e3ef9ef8ed1f4c2029087b4862567cfab9ea3d3fc21efeb9aa00251c13defdfff4481abff8d6e0c48e3e27fac967c959acc7dcb0d5b67 + checksum: 10c0/2dd2bccfd8311ff71492e63a7b8b86c3d7b1fff55d4ba5a2357aff97743e633d351cdc2f5ae3c0057637d00dab4ef5fc5b218a1b370e4585a41df22b5a5128be languageName: node linkType: hard