diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 2cf7bec8ee..968c77cac2 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -87,6 +87,7 @@ }, { // Update devDependencies every week, with one grouped PR + matchManagers: ['npm'], matchDepTypes: 'devDependencies', matchUpdateTypes: ['patch', 'minor'], groupName: 'devDependencies (non-major)', @@ -95,8 +96,7 @@ { // Group all eslint-related packages with `eslint` in the same PR matchManagers: ['npm'], - matchPackageNames: ['eslint'], - matchPackagePrefixes: ['eslint-', '@typescript-eslint/'], + matchPackageNames: ['eslint', 'eslint-*', '@typescript-eslint/*'], matchUpdateTypes: ['patch', 'minor'], groupName: 'eslint (non-major)', }, @@ -112,7 +112,8 @@ }, { // Update @types/* packages every week, with one grouped PR - matchPackagePrefixes: '@types/', + matchManagers: ['npm'], + matchPackageNames: '@types/*', matchUpdateTypes: ['patch', 'minor'], groupName: 'DefinitelyTyped types (non-major)', extends: ['schedule:weekly'], @@ -129,23 +130,21 @@ { // Group all RuboCop packages with `rubocop` in the same PR matchManagers: ['bundler'], - matchPackageNames: ['rubocop'], - matchPackagePrefixes: ['rubocop-'], + matchPackageNames: ['rubocop', 'rubocop-*'], matchUpdateTypes: ['patch', 'minor'], groupName: 'RuboCop (non-major)', }, { // Group all RSpec packages with `rspec` in the same PR matchManagers: ['bundler'], - matchPackageNames: ['rspec'], - matchPackagePrefixes: ['rspec-'], + matchPackageNames: ['rspec', 'rspec-*'], matchUpdateTypes: ['patch', 'minor'], groupName: 'RSpec (non-major)', }, { // Group all opentelemetry-ruby packages in the same PR matchManagers: ['bundler'], - matchPackagePrefixes: ['opentelemetry-'], + matchPackageNames: ['opentelemetry-*'], matchUpdateTypes: ['patch', 'minor'], groupName: 'opentelemetry-ruby (non-major)', }, diff --git a/.github/workflows/build-container-image.yml b/.github/workflows/build-container-image.yml index dbb32af9bf..03a0f5bf37 100644 --- a/.github/workflows/build-container-image.yml +++ b/.github/workflows/build-container-image.yml @@ -85,7 +85,7 @@ jobs: tags: ${{ inputs.tags }} labels: ${{ inputs.labels }} - - uses: docker/build-push-action@v5 + - uses: docker/build-push-action@v6 with: context: . file: ${{ inputs.file_to_build }} diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml index 1212e66296..1aa01c117d 100644 --- a/.github/workflows/crowdin-download.yml +++ b/.github/workflows/crowdin-download.yml @@ -26,7 +26,7 @@ jobs: # Download the translation files from Crowdin - name: crowdin action - uses: crowdin/github-action@v1 + uses: crowdin/github-action@v2 with: config: crowdin-glitch.yml upload_sources: false diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml index 18559a62b6..5c20faf3be 100644 --- a/.github/workflows/crowdin-upload.yml +++ b/.github/workflows/crowdin-upload.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 - name: crowdin action - uses: crowdin/github-action@v1 + uses: crowdin/github-action@v2 with: config: crowdin-glitch.yml upload_sources: true diff --git a/.github/workflows/rebase-needed.yml b/.github/workflows/rebase-needed.yml index 8784397a8f..f0fc8b0db7 100644 --- a/.github/workflows/rebase-needed.yml +++ b/.github/workflows/rebase-needed.yml @@ -10,6 +10,7 @@ permissions: jobs: label-rebase-needed: runs-on: ubuntu-latest + if: github.repository == 'mastodon/mastodon' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2549202410..57622da567 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -40,7 +40,6 @@ Style/FetchEnvVar: - 'config/environments/production.rb' - 'config/initializers/2_limited_federation_mode.rb' - 'config/initializers/3_omniauth.rb' - - 'config/initializers/blacklists.rb' - 'config/initializers/cache_buster.rb' - 'config/initializers/devise.rb' - 'config/initializers/paperclip.rb' diff --git a/Dockerfile b/Dockerfile index a0af1eda6b..65440bb281 100644 --- a/Dockerfile +++ b/Dockerfile @@ -191,7 +191,7 @@ FROM build AS libvips # libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"] # renovate: datasource=github-releases depName=libvips packageName=libvips/libvips -ARG VIPS_VERSION=8.15.2 +ARG VIPS_VERSION=8.15.3 # libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"] ARG VIPS_URL=https://github.com/libvips/libvips/releases/download diff --git a/Gemfile.lock b/Gemfile.lock index e4d787eb64..2a3a2b3893 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM climate_control (1.2.0) cocoon (1.2.15) color_diff (0.1) - concurrent-ruby (1.3.3) + concurrent-ruby (1.3.4) connection_pool (2.4.1) cose (1.3.0) cbor (~> 0.5.9) @@ -460,8 +460,9 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.16.4) + oj (3.16.5) bigdecimal (>= 3.0) + ostruct (>= 0.2) omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) @@ -582,6 +583,7 @@ GEM opentelemetry-semantic_conventions (1.10.1) opentelemetry-api (~> 1.0) orm_adapter (0.5.0) + ostruct (0.6.0) ox (2.14.18) parallel (1.25.1) parser (3.3.4.0) @@ -601,7 +603,7 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - propshaft (0.9.0) + propshaft (0.9.1) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack @@ -904,7 +906,7 @@ GEM xorcist (1.1.3) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.16) + zeitwerk (2.6.17) PLATFORMS ruby diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 6210e4dbf9..a2fed644fe 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -187,4 +187,15 @@ class Auth::SessionsController < Devise::SessionsController def second_factor_attempts_key(user) "2fa_auth_attempts:#{user.id}:#{Time.now.utc.hour}" end + + def respond_to_on_destroy + respond_to do |format| + format.json do + render json: { + redirect_to: after_sign_out_path_for(resource_name), + }, status: 200 + end + format.all { super } + end + end end diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index ab62f8715c..fd6a48e9f3 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -47,7 +47,7 @@ function dispatchAssociatedRecords( fetchedAccounts.push(notification.moderation_warning.target_account); } - if ('status' in notification) { + if ('status' in notification && notification.status) { fetchedStatuses.push(notification.status); } }); @@ -119,7 +119,7 @@ export const processNewNotificationForGroups = createAppAsyncThunk( if ( (notification.type === 'mention' || notification.type === 'update') && - notification.status.filtered + notification.status?.filtered ) { const filters = notification.status.filtered.filter((result) => result.filter.context.includes('notifications'), diff --git a/app/javascript/mastodon/api_types/notifications.ts b/app/javascript/mastodon/api_types/notifications.ts index ed73ceda6b..4ab9a4c90a 100644 --- a/app/javascript/mastodon/api_types/notifications.ts +++ b/app/javascript/mastodon/api_types/notifications.ts @@ -60,12 +60,12 @@ export interface BaseNotificationGroupJSON { interface NotificationGroupWithStatusJSON extends BaseNotificationGroupJSON { type: NotificationWithStatusType; - status_id: string; + status_id: string | null; } interface NotificationWithStatusJSON extends BaseNotificationJSON { type: NotificationWithStatusType; - status: ApiStatusJSON; + status: ApiStatusJSON | null; } interface ReportNotificationGroupJSON extends BaseNotificationGroupJSON { diff --git a/app/javascript/mastodon/components/timeline_hint.tsx b/app/javascript/mastodon/components/timeline_hint.tsx index bf2a2d8bba..6faad2fbb8 100644 --- a/app/javascript/mastodon/components/timeline_hint.tsx +++ b/app/javascript/mastodon/components/timeline_hint.tsx @@ -1,12 +1,15 @@ import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; + interface Props { resource: JSX.Element; url: string; + className?: string; } -export const TimelineHint: React.FC = ({ resource, url }) => ( -
+export const TimelineHint: React.FC = ({ className, resource, url }) => ( +
- {alertsEnabled && browserSupport && browserPermission === 'denied' && ( - - )} -
+ {alertsEnabled && browserSupport && browserPermission === 'denied' && ( +
+ + + +
+ )} + {alertsEnabled && browserSupport && browserPermission === 'default' && (
diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx index b7cd995118..1929446bb2 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx @@ -37,7 +37,11 @@ export const NotificationMention: React.FC<{ unread: boolean; }> = ({ notification, unread }) => { const [isDirect, isReply] = useAppSelector((state) => { - const status = state.statuses.get(notification.statusId) as Status; + const status = state.statuses.get(notification.statusId) as + | Status + | undefined; + + if (!status) return [false, false] as const; return [ status.get('visibility') === 'direct', diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx index c7dd9f6be2..5d5cb98185 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx @@ -23,7 +23,7 @@ export const NotificationWithStatus: React.FC<{ icon: IconProp; iconId: string; accountIds: string[]; - statusId: string; + statusId: string | undefined; count: number; labelRenderer: LabelRenderer; unread: boolean; @@ -76,6 +76,8 @@ export const NotificationWithStatus: React.FC<{ [dispatch, statusId], ); + if (!statusId) return null; + return (
} />; + remoteHint = } />; } const handlers = { diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/log_out.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/log_out.tsx index 48d24182ed..ec61146877 100644 --- a/app/javascript/mastodon/features/ui/components/confirmation_modals/log_out.tsx +++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/log_out.tsx @@ -25,7 +25,7 @@ export const ConfirmLogOutModal: React.FC = ({ const intl = useIntl(); const onConfirm = useCallback(() => { - logOut(); + void logOut(); }, []); return ( diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index f60e330d1c..6687c64a6d 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -482,6 +482,8 @@ "notification.favourite": "{name} направи любима публикацията ви", "notification.follow": "{name} ви последва", "notification.follow_request": "{name} поиска да ви последва", + "notification.label.mention": "Споменаване", + "notification.mention": "Споменаване", "notification.moderation-warning.learn_more": "Научете повече", "notification.moderation_warning": "Получихте предупреждение за модериране", "notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.", @@ -503,12 +505,15 @@ "notification.update": "{name} промени публикация", "notification_requests.accept": "Приемам", "notification_requests.dismiss": "Отхвърлям", + "notification_requests.enter_selection_mode": "Изберете", + "notification_requests.exit_selection_mode": "Отказ", "notification_requests.explainer_for_limited_account": "Известията от този акаунт са прецедени, защото акаунтът е ограничен от модератор.", "notification_requests.explainer_for_limited_remote_account": "Известията от този акаунт са прецедени, защото акаунтът или сървърът му е ограничен от модератор.", "notification_requests.maximize": "Максимизиране", "notification_requests.minimize_banner": "Минимизиране на банера за филтрирани известия", "notification_requests.notifications_from": "Известия от {name}", "notification_requests.title": "Филтрирани известия", + "notification_requests.view": "Преглед на известията", "notifications.clear": "Изчистване на известията", "notifications.clear_confirmation": "Наистина ли искате да изчистите завинаги всичките си известия?", "notifications.clear_title": "Изчиствате ли известията?", @@ -545,6 +550,9 @@ "notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра", "notifications.permission_denied_alert": "Известията на работния плот не могат да се включат, тъй като разрешението на браузъра е отказвано преди", "notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.", + "notifications.policy.accept": "Приемам", + "notifications.policy.accept_hint": "Показване в известия", + "notifications.policy.filter": "Филтър", "notifications.policy.filter_limited_accounts_hint": "Ограничено от модераторите на сървъра", "notifications.policy.filter_limited_accounts_title": "Модерирани акаунти", "notifications.policy.filter_new_accounts.hint": "Сътворено през {days, plural, one {последния ден} other {последните # дена}}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 9b9d341b14..8b86b49e06 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -11,6 +11,7 @@ "about.not_available": "Nid yw'r wybodaeth hon ar gael ar y gweinydd hwn.", "about.powered_by": "Cyfrwng cymdeithasol datganoledig wedi ei yrru gan {mastodon}", "about.rules": "Rheolau'r gweinydd", + "account.account_note_header": "Nodyn personol", "account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau", "account.badges.bot": "Bot", "account.badges.group": "Grŵp", @@ -299,6 +300,7 @@ "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.title.status": "Hidlo postiad", + "filtered_notifications_banner.pending_requests": "Gan {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "firehose.all": "Popeth", "firehose.local": "Gweinydd hwn", @@ -354,6 +356,17 @@ "home.pending_critical_update.link": "Gweld y diweddariadau", "home.pending_critical_update.title": "Mae diweddariad diogelwch hanfodol ar gael!", "home.show_announcements": "Dangos cyhoeddiadau", + "ignore_notifications_modal.disclaimer": "Ni all Mastodon hysbysu defnyddwyr eich bod wedi anwybyddu eu hysbysiadau. Ni fydd anwybyddu hysbysiadau yn atal y negeseuon eu hunain rhag cael eu hanfon.", + "ignore_notifications_modal.filter_instead": "Hidlo yn lle hynny", + "ignore_notifications_modal.filter_to_act_users": "Byddwch yn dal i allu derbyn, gwrthod neu adrodd ar ddefnyddwyr", + "ignore_notifications_modal.filter_to_avoid_confusion": "Mae hidlo yn helpu i osgoi dryswch posibl", + "ignore_notifications_modal.filter_to_review_separately": "Gallwch adolygu hysbysiadau wedi'u hidlo ar wahân", + "ignore_notifications_modal.ignore": "Anwybyddu hysbysiadau", + "ignore_notifications_modal.limited_accounts_title": "Anwybyddu hysbysiadau o gyfrifon wedi'u cymedroli?", + "ignore_notifications_modal.new_accounts_title": "Anwybyddu hysbysiadau o gyfrifon newydd?", + "ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?", + "ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?", + "ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?", "interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi hoffi'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.", "interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich llif cartref.", "interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.", @@ -472,6 +485,7 @@ "navigation_bar.security": "Diogelwch", "not_signed_in_indicator.not_signed_in": "Rhaid i chi fewngofnodi i weld yr adnodd hwn.", "notification.admin.report": "Adroddwyd ar {name} {target}", + "notification.admin.report_account": "{name} reported {count, plural, one {un post} other {# postsiadau}} from {target} for {category}", "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un post} two {# bost} few {# phost} other {# post}} gan {target}", "notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}", "notification.admin.report_statuses_other": "Adroddodd {name} {target}", @@ -479,6 +493,11 @@ "notification.favourite": "Hoffodd {name} eich postiad", "notification.follow": "Dilynodd {name} chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", + "notification.label.mention": "Crybwyll", + "notification.label.private_mention": "Crybwyll preifat", + "notification.label.private_reply": "Ateb preifat", + "notification.label.reply": "Ateb", + "notification.mention": "Crybwyll", "notification.moderation-warning.learn_more": "Dysgu mwy", "notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr", "notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.", @@ -499,10 +518,26 @@ "notification.status": "{name} newydd ei bostio", "notification.update": "Golygodd {name} bostiad", "notification_requests.accept": "Derbyn", + "notification_requests.accept_all": "Derbyn y cyfan", + "notification_requests.accept_multiple": "{count, plural, one {Derbyn # cais} other {Derbyn # cais}}", + "notification_requests.confirm_accept_all.button": "Derbyn y cyfan", + "notification_requests.confirm_accept_all.message": "Rydych ar fin derbyn {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. A ydych yn siŵr eich bod am fwrw ymlaen?", + "notification_requests.confirm_accept_all.title": "Derbyn ceisiadau hysbysu?", + "notification_requests.confirm_dismiss_all.button": "Diystyru pob un", + "notification_requests.confirm_dismiss_all.message": "Rydych ar fin diystyru {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. Ni fyddwch yn gallu cyrchu {count, plural, one {it} other {them}} yn hawdd eto. A ydych yn siŵr eich bod am fwrw ymlaen?", + "notification_requests.confirm_dismiss_all.title": "Diystyru ceisiadau hysbysu?", "notification_requests.dismiss": "Cau", + "notification_requests.dismiss_all": "Diystyru pob un", + "notification_requests.dismiss_multiple": "{count, plural, one {Diystyru # cais} other {Diystyru # cais}}", + "notification_requests.enter_selection_mode": "Dewis", + "notification_requests.exit_selection_mode": "Canslo", + "notification_requests.explainer_for_limited_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif wedi'i gyfyngu gan gymedrolwr.", + "notification_requests.explainer_for_limited_remote_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif neu ei weinydd wedi'i gyfyngu gan gymedrolwr.", "notification_requests.maximize": "Mwyhau", + "notification_requests.minimize_banner": "Lleihau baner hysbysiadau wedi'u hidlo", "notification_requests.notifications_from": "Hysbysiadau gan {name}", "notification_requests.title": "Hysbysiadau wedi'u hidlo", + "notification_requests.view": "Gweld hysbysiadau", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n siŵr eich bod am glirio'ch holl hysbysiadau am byth?", "notifications.clear_title": "Clirio hysbysiadau?", @@ -539,6 +574,14 @@ "notifications.permission_denied": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd cais am ganiatâd porwr a wrthodwyd yn flaenorol", "notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen", "notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.", + "notifications.policy.accept": "Derbyn", + "notifications.policy.accept_hint": "Dangos mewn hysbysiadau", + "notifications.policy.drop": "Anwybyddu", + "notifications.policy.drop_hint": "Anfon i'r gwagle, byth i'w gweld eto", + "notifications.policy.filter": "Hidlo", + "notifications.policy.filter_hint": "Anfon i flwch derbyn hysbysiadau wedi'u hidlo", + "notifications.policy.filter_limited_accounts_hint": "Cyfyngedig gan gymedrolwyr gweinydd", + "notifications.policy.filter_limited_accounts_title": "Cyfrifon wedi'u cymedroli", "notifications.policy.filter_new_accounts.hint": "Crëwyd o fewn {days, lluosog, un {yr un diwrnod} arall {y # diwrnod}} diwethaf", "notifications.policy.filter_new_accounts_title": "Cyfrifon newydd", "notifications.policy.filter_not_followers_hint": "Gan gynnwys pobl sydd wedi bod yn eich dilyn am llai {days, plural, un {nag un diwrnod} arall {na # diwrnod}}", @@ -547,19 +590,20 @@ "notifications.policy.filter_not_following_title": "Pobl nad ydych yn eu dilyn", "notifications.policy.filter_private_mentions_hint": "Wedi'i hidlo oni bai ei fod mewn ymateb i'ch crybwylliad eich hun neu os ydych yn dilyn yr anfonwr", "notifications.policy.filter_private_mentions_title": "Crybwylliadau preifat digymell", + "notifications.policy.title": "Rheoli hysbysiadau gan…", "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.", "notifications_permission_banner.title": "Peidiwch â cholli dim", - "onboarding.action.back": "Ewch â fi yn ôl", - "onboarding.actions.back": "Ewch â fi yn ôl", - "onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd", + "onboarding.action.back": "Ewch â fi nôl", + "onboarding.actions.back": "Ewch â fi nôl", + "onboarding.actions.go_to_explore": "Gweld beth sy'n trendio", "onboarding.actions.go_to_home": "Ewch i'ch ffrwd gartref", "onboarding.compose.template": "Helo, #Mastodon!", "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.", "onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:", "onboarding.follows.title": "Yn boblogaidd ar Mastodon", "onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod", - "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a thueddiadau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.", + "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a threndiau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.", "onboarding.profile.display_name": "Enw dangos", "onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…", "onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.", @@ -787,6 +831,7 @@ "timeline_hint.remote_resource_not_displayed": "Nid yw {resource} o weinyddion eraill yn cael ei ddangos.", "timeline_hint.resources.followers": "Dilynwyr", "timeline_hint.resources.follows": "Yn dilyn", + "timeline_hint.resources.replies": "Rhai atebion", "timeline_hint.resources.statuses": "Postiadau hŷn", "trends.counter_by_accounts": "{count, plural, zero {neb} one {{counter} person} two {{counter} berson} few {{counter} pherson} other {{counter} o bobl}} yn y {days, plural, one {diwrnod diwethaf} two {ddeuddydd diwethaf} other {{days} diwrnod diwethaf}}", "trends.trending_now": "Yn trendio nawr", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 34b62d949d..b2a8fe0da3 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -11,6 +11,7 @@ "about.not_available": "Zerbitzari honek ez du informazio hau eskuragarri jarri.", "about.powered_by": "{mastodon} erabiltzen duen sare sozial deszentralizatua", "about.rules": "Zerbitzariaren arauak", + "account.account_note_header": "Ohar pertsonala", "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik", "account.badges.bot": "Bot-a", "account.badges.group": "Taldea", @@ -34,7 +35,9 @@ "account.follow_back": "Jarraitu bueltan", "account.followers": "Jarraitzaileak", "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", + "account.followers_counter": "{count, plural, one {{counter} jarraitzaile} other {{counter} jarraitzaile}}", "account.following": "Jarraitzen", + "account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.go_to_profile": "Joan profilera", "account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak", @@ -60,6 +63,7 @@ "account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du", "account.share": "Partekatu @{name} erabiltzailearen profila", "account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak", + "account.statuses_counter": "{count, plural, one {{counter} bidalketa} other {{counter} bidalketa}}", "account.unblock": "Desblokeatu @{name}", "account.unblock_domain": "Berriz erakutsi {domain}", "account.unblock_short": "Desblokeatu", @@ -175,6 +179,7 @@ "confirmations.discard_edit_media.message": "Multimediaren deskribapen edo aurrebistan gorde gabeko aldaketak daude, baztertu nahi dituzu?", "confirmations.edit.confirm": "Editatu", "confirmations.edit.message": "Orain editatzen baduzu, une honetan idazten ari zaren mezua gainidatziko da. Ziur jarraitu nahi duzula?", + "confirmations.edit.title": "Gainidatzi bidalketa?", "confirmations.logout.confirm": "Amaitu saioa", "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?", "confirmations.logout.title": "Itxi saioa?", @@ -184,8 +189,10 @@ "confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?", "confirmations.reply.confirm": "Erantzun", "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?", + "confirmations.reply.title": "Gainidatzi bidalketa?", "confirmations.unfollow.confirm": "Utzi jarraitzeari", "confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?", + "confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?", "conversation.delete": "Ezabatu elkarrizketa", "conversation.mark_as_read": "Markatu irakurrita bezala", "conversation.open": "Ikusi elkarrizketa", @@ -348,6 +355,12 @@ "home.pending_critical_update.link": "Ikusi eguneraketak", "home.pending_critical_update.title": "Segurtasun eguneraketa kritikoa eskuragarri!", "home.show_announcements": "Erakutsi iragarpenak", + "ignore_notifications_modal.filter_instead": "Iragazi ez ikusiarena egin beharrean", + "ignore_notifications_modal.ignore": "Ezikusi jakinarazpenak", + "ignore_notifications_modal.limited_accounts_title": "Moderatutako kontuen jakinarazpenei ez ikusiarena egin?", + "ignore_notifications_modal.new_accounts_title": "Kontu berrien jakinarazpenei ez ikusiarena egin?", + "ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen jakinarazpenei ez ikusiarena egin?", + "ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?", "interaction_modal.description.favourite": "Mastodon kontu batekin bidalketa hau gogoko egin dezakezu, egileari eskertzeko eta gerorako gordetzeko.", "interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.", "interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.", @@ -466,6 +479,11 @@ "notification.favourite": "{name}(e)k zure bidalketa gogoko du", "notification.follow": "{name}(e)k jarraitzen dizu", "notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du", + "notification.label.mention": "Aipamena", + "notification.label.private_mention": "Aipamen pribatua", + "notification.label.private_reply": "Erantzun pribatua", + "notification.label.reply": "Erantzuna", + "notification.mention": "Aipamena", "notification.moderation-warning.learn_more": "Informazio gehiago", "notification.moderation_warning": "Moderazio-abisu bat jaso duzu", "notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.", @@ -476,6 +494,7 @@ "notification.moderation_warning.action_silence": "Kontua murriztu egin da.", "notification.moderation_warning.action_suspend": "Kontua itxi da.", "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.relationships_severance_event": "{name} erabiltzailearekin galdutako konexioak", "notification.relationships_severance_event.account_suspension": "{from} zerbitzariko administratzaile batek {target} bertan behera utzi du, hau da, ezin izango dituzu jaso hango eguneratzerik edo hangoekin elkarreragin.", @@ -483,9 +502,19 @@ "notification.status": "{name} erabiltzaileak bidalketa egin berri du", "notification.update": "{name} erabiltzaileak bidalketa bat editatu du", "notification_requests.accept": "Onartu", + "notification_requests.accept_all": "Onartu dena", + "notification_requests.confirm_accept_all.button": "Onartu dena", + "notification_requests.confirm_accept_all.title": "Onartu jakinarazpen-eskaerak?", + "notification_requests.confirm_dismiss_all.button": "Baztertu guztiak", + "notification_requests.confirm_dismiss_all.title": "Baztertu jakinarazpen-eskaerak?", "notification_requests.dismiss": "Baztertu", + "notification_requests.dismiss_all": "Baztertu guztiak", + "notification_requests.enter_selection_mode": "Hautatu", + "notification_requests.exit_selection_mode": "Utzi", + "notification_requests.maximize": "Maximizatu", "notification_requests.notifications_from": "{name} erabiltzailearen jakinarazpenak", "notification_requests.title": "Iragazitako jakinarazpenak", + "notification_requests.view": "Ikusi jakinarazpenak", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", "notifications.clear_title": "Garbitu jakinarazpenak?", @@ -522,6 +551,14 @@ "notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako", "notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako", "notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.", + "notifications.policy.accept": "Onartu", + "notifications.policy.accept_hint": "Erakutsi jakinarazpenetan", + "notifications.policy.drop": "Ezikusi", + "notifications.policy.drop_hint": "Hutsera bidali, ez erakutsi inoiz gehiago", + "notifications.policy.filter": "Iragazi", + "notifications.policy.filter_hint": "Bidali filtratutako jakinarazpenen sarrerako ontzira", + "notifications.policy.filter_limited_accounts_hint": "Zerbitzariaren moderatzaileek mugatuta", + "notifications.policy.filter_limited_accounts_title": "Moderatutako kontuak", "notifications.policy.filter_new_accounts.hint": "Azken {days, plural, one {egunean} other {# egunetan}} sortua", "notifications.policy.filter_new_accounts_title": "Kontu berriak", "notifications.policy.filter_not_followers_hint": "{days, plural, one {Egun batez} other {# egunez}} baino gutxiago jarraitu zaituen jendea barne", @@ -530,6 +567,7 @@ "notifications.policy.filter_not_following_title": "Jarraitzen ez duzun jendea", "notifications.policy.filter_private_mentions_hint": "Iragazita, baldin eta zure aipamenaren erantzuna bada edo bidaltzailea jarraitzen baduzu", "notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak", + "notifications.policy.title": "Kudeatu honen jakinarazpaenak…", "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", @@ -656,6 +694,7 @@ "report.unfollow_explanation": "Kontu hau jarraitzen ari zara. Zure denbora-lerro nagusian bere bidalketak ez ikusteko, jarraitzeari utzi.", "report_notification.attached_statuses": "{count, plural, one {Bidalketa {count}} other {{count} bidalketa}} erantsita", "report_notification.categories.legal": "Legala", + "report_notification.categories.legal_sentence": "eduki ilegala", "report_notification.categories.other": "Bestelakoak", "report_notification.categories.other_sentence": "bestelakoak", "report_notification.categories.spam": "Spam", @@ -691,6 +730,7 @@ "server_banner.administered_by": "Administratzailea(k):", "server_banner.server_stats": "Zerbitzariaren estatistikak:", "sign_in_banner.create_account": "Sortu kontua", + "sign_in_banner.mastodon_is": "Mastodon gertatzen ari denari buruz egunean egoteko modurik onena da.", "sign_in_banner.sign_in": "Hasi saioa", "sign_in_banner.sso_redirect": "Hasi saioa edo izena eman", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", @@ -766,6 +806,7 @@ "timeline_hint.remote_resource_not_displayed": "Beste zerbitzarietako {resource} ez da bistaratzen.", "timeline_hint.resources.followers": "Jarraitzaileak", "timeline_hint.resources.follows": "Jarraitzen", + "timeline_hint.resources.replies": "Erantzun batzuk", "timeline_hint.resources.statuses": "Bidalketa zaharragoak", "trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} azken {days, plural, one {egunean} other {{days} egunetan}}", "trends.trending_now": "Joera orain", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index ec6b0e5357..36198e9e59 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -358,7 +358,7 @@ "home.show_announcements": "Vís kunngerðir", "ignore_notifications_modal.disclaimer": "Mastodon kann ikki upplýsa brúkarar um, at tú hevur latið sum um, at tú ikki hevur sæð teirra fráboðanir. At lata sum um, at tú ikki sær fráboðanir, forðar ikki, at boðini sjálv verða send.", "ignore_notifications_modal.filter_instead": "Filtrera ístaðin", - "ignore_notifications_modal.filter_to_act_users": "Tú kann framvegis góðtaka, avvísa og melda brúkarar", + "ignore_notifications_modal.filter_to_act_users": "Tú kanst framvegis góðtaka, avvísa og melda brúkarar", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrering ger tað lættari at sleppa undan møguligum misskiljingum", "ignore_notifications_modal.filter_to_review_separately": "Tú kanst kanna filtreraðar fráboðanir fyri seg", "ignore_notifications_modal.ignore": "Lat sum um tú ikki sær fráboðanir", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index b0609e3e82..1ad821ee07 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -11,6 +11,7 @@ "about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.", "about.powered_by": "Réseau social décentralisé propulsé par {mastodon}", "about.rules": "Règles du serveur", + "account.account_note_header": "Note personnelle", "account.add_or_remove_from_list": "Ajouter ou enlever de listes", "account.badges.bot": "Bot", "account.badges.group": "Groupe", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9c983dd0e2..141a856e31 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -11,6 +11,7 @@ "about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.", "about.powered_by": "Réseau social décentralisé propulsé par {mastodon}", "about.rules": "Règles du serveur", + "account.account_note_header": "Note personnelle", "account.add_or_remove_from_list": "Ajouter ou retirer des listes", "account.badges.bot": "Bot", "account.badges.group": "Groupe", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 4af37bce85..e90826ded1 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -284,15 +284,15 @@ "explore.trending_links": "חדשות", "explore.trending_statuses": "הודעות", "explore.trending_tags": "תגיות", - "filter_modal.added.context_mismatch_explanation": "קטגוריית הסנן הזאת לא חלה על ההקשר שממנו הגעת אל ההודעה הזו. אם תרצה/י שההודעה תסונן גם בהקשר זה, תצטרך/י לערוך את הסנן.", + "filter_modal.added.context_mismatch_explanation": "קטגוריית המסנן הזאת לא חלה על ההקשר שממנו הגעת אל ההודעה הזו. אם תרצה/י שההודעה תסונן גם בהקשר זה, תצטרך/י לערוך את הסנן.", "filter_modal.added.context_mismatch_title": "אין התאמה להקשר!", "filter_modal.added.expired_explanation": "פג תוקפה של קטגוריית הסינון הזו, יש צורך לשנות את תאריך התפוגה כדי שהסינון יוחל.", - "filter_modal.added.expired_title": "פג תוקף הפילטר!", + "filter_modal.added.expired_title": "פג תוקף המסנן!", "filter_modal.added.review_and_configure": "לסקירה והתאמה מתקדמת של קטגוריית הסינון הזו, לכו ל{settings_link}.", "filter_modal.added.review_and_configure_title": "אפשרויות סינון", "filter_modal.added.settings_link": "דף הגדרות", "filter_modal.added.short_explanation": "ההודעה הזו הוספה לקטגוריית הסינון הזו: {title}.", - "filter_modal.added.title": "הפילטר הוסף!", + "filter_modal.added.title": "המסנן הוסף!", "filter_modal.select_filter.context_mismatch": "לא חל בהקשר זה", "filter_modal.select_filter.expired": "פג התוקף", "filter_modal.select_filter.prompt_new": "קטגוריה חדשה {name}", @@ -356,8 +356,16 @@ "home.pending_critical_update.link": "צפיה בעדכונים", "home.pending_critical_update.title": "יצא עדכון אבטחה חשוב!", "home.show_announcements": "הצג הכרזות", + "ignore_notifications_modal.filter_instead": "לסנן במקום", "ignore_notifications_modal.filter_to_act_users": "עדיין ביכולתך לקבל, לדחות ולדווח על משתמשים אחרים", + "ignore_notifications_modal.filter_to_avoid_confusion": "סינון מסייע למניעת בלבולים אפשריים", "ignore_notifications_modal.filter_to_review_separately": "ניתן לסקור התראות מפולטרות בנפרד", + "ignore_notifications_modal.ignore": "להתעלם מהתראות", + "ignore_notifications_modal.limited_accounts_title": "להתעלם מהתראות מחשבונות תחת פיקוח?", + "ignore_notifications_modal.new_accounts_title": "להתעלם מהתראות מחשבונות חדשים?", + "ignore_notifications_modal.not_followers_title": "להתעלם מהתראות מא.נשים שאינם עוקביך?", + "ignore_notifications_modal.not_following_title": "להתעלם מהתראות מא.נשים שאינם נעקביך?", + "ignore_notifications_modal.private_mentions_title": "להתעלם מהתראות מאיזכורים פרטיים?", "interaction_modal.description.favourite": "עם חשבון מסטודון, ניתן לחבב את ההודעה כדי לומר למחבר/ת שהערכת את תוכנו או כדי לשמור אותו לקריאה בעתיד.", "interaction_modal.description.follow": "עם חשבון מסטודון, ניתן לעקוב אחרי {name} כדי לקבל את הפוסטים שלו/ה בפיד הבית.", "interaction_modal.description.reblog": "עם חשבון מסטודון, ניתן להדהד את החצרוץ ולשתף עם עוקבים.", @@ -509,13 +517,26 @@ "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו הודעה", "notification_requests.accept": "לקבל", + "notification_requests.accept_all": "לקבל את כל הבקשות", + "notification_requests.accept_multiple": "{count, plural,one {לאשר קבלת בקשה}other {לאשר קבלת # בקשות}}", + "notification_requests.confirm_accept_all.button": "לקבל את כל הבקשות", + "notification_requests.confirm_accept_all.message": "אתם עומדים לאשר {count, plural,one {בקשת התראה אחת}other {# בקשות התראה}}. להמשיך?", + "notification_requests.confirm_accept_all.title": "לקבל בקשות התראה?", + "notification_requests.confirm_dismiss_all.button": "דחיית כל הבקשות", + "notification_requests.confirm_dismiss_all.message": "אתם עומדים לדחות {count, plural,one {בקשת התראה}other {# בקשות התראה}}. לא תוכלו למצוא {count, plural,one {אותה}other {אותן}} בקלות אחר כך. להמשיך?", + "notification_requests.confirm_dismiss_all.title": "לדחות בקשות התראה?", "notification_requests.dismiss": "לבטל", + "notification_requests.dismiss_all": "דחיית כל הבקשות", + "notification_requests.dismiss_multiple": "{count, plural,one {לדחות בקשה}other {לדחות # בקשות}} לקבלת התראה", + "notification_requests.enter_selection_mode": "בחירה", + "notification_requests.exit_selection_mode": "ביטול", "notification_requests.explainer_for_limited_account": "התראות על פעולות חשבון זה סוננו כי חשבון זה הוגבל על ידי מנהלי הדיונים.", "notification_requests.explainer_for_limited_remote_account": "התראות על פעולות חשבון זה סוננו כי חשבון זה או השרת שלו הוגבלו על ידי מנהלי הדיונים.", "notification_requests.maximize": "הגדלה למקסימום", - "notification_requests.minimize_banner": "להקטין את כותרת ההודעות המפולטרות", + "notification_requests.minimize_banner": "להקטין את כותרת ההודעות המסוננות", "notification_requests.notifications_from": "התראות מ־ {name}", "notification_requests.title": "התראות מסוננות", + "notification_requests.view": "הצגת ההתראות", "notifications.clear": "הסרת התראות", "notifications.clear_confirmation": "להסיר את כל ההתראות לצמיתות ? ", "notifications.clear_title": "לנקות התראות?", @@ -552,6 +573,12 @@ "notifications.permission_denied": "לא ניתן להציג התראות מסך כיוון כיוון שהרשאות דפדפן נשללו בעבר", "notifications.permission_denied_alert": "לא ניתן לאפשר נוטיפיקציות מסך שכן הדפדפן סורב הרשאה בעבר", "notifications.permission_required": "לא ניתן לאפשר נוטיפיקציות מסך כיוון שהרשאה דרושה לא ניתנה.", + "notifications.policy.accept": "אישור", + "notifications.policy.accept_hint": "הצגה בהתראות", + "notifications.policy.drop": "להתעלם", + "notifications.policy.drop_hint": "שליחה אל מצולות הנשיה, ולא יוודעו אודותיה לעולם", + "notifications.policy.filter": "מסנן", + "notifications.policy.filter_hint": "שליחה לתיבה נכנסת מסוננת", "notifications.policy.filter_limited_accounts_hint": "הוגבל על ידי מנהלי הדיונים", "notifications.policy.filter_limited_accounts_title": "חשבון מוגבל", "notifications.policy.filter_new_accounts.hint": "נוצר {days, plural,one {ביום האחרון} two {ביומיים האחרונים} other {ב־# הימים האחרונים}}", @@ -562,6 +589,7 @@ "notifications.policy.filter_not_following_title": "משתמשים שאינך עוקב(ת) אחריהםן", "notifications.policy.filter_private_mentions_hint": "מסונן אלא אם זו תשובה למינשון שלך או אם אתם עוקבים אחרי העונה", "notifications.policy.filter_private_mentions_title": "מינשונים בפרטי שלא הוזמנו", + "notifications.policy.title": "ניהול התראות מ…", "notifications_permission_banner.enable": "לאפשר נוטיפיקציות מסך", "notifications_permission_banner.how_to_control": "כדי לקבל התראות גם כאשר מסטודון סגור יש לאפשר התראות מסך. ניתן לשלוט בדיוק איזה סוג של אינטראקציות יביא להתראות מסך דרך כפתור ה- {icon} מרגע שהן מאופשרות.", "notifications_permission_banner.title": "לעולם אל תחמיץ דבר", @@ -802,6 +830,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} משרתים אחרים לא מוצגים.", "timeline_hint.resources.followers": "עוקבים", "timeline_hint.resources.follows": "נעקבים", + "timeline_hint.resources.replies": "מספר תשובות", "timeline_hint.resources.statuses": "הודעות ישנות יותר", "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{count} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}", "trends.trending_now": "נושאים חמים", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 08a79e50c2..eb618c4666 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -358,7 +358,7 @@ "home.show_announcements": "Közlemények megjelenítése", "ignore_notifications_modal.disclaimer": "A Mastodon nem tudja értesíteni azokat a felhasználókat, akiknek figyelmen kívül hagytad az értesítéseit. Az értesítések figyelmen kívül hagyása nem állítja meg az üzenetek elküldését.", "ignore_notifications_modal.filter_instead": "Inkább szűrés", - "ignore_notifications_modal.filter_to_act_users": "Továbbra is el tudja fogadni, el tudja utasítani vagy jelenteni tudja a felhasználókat", + "ignore_notifications_modal.filter_to_act_users": "Továbbra is el tudod fogadni, el tudod utasítani vagy tudod jelenteni a felhasználókat", "ignore_notifications_modal.filter_to_avoid_confusion": "A szűrés segít elkerülni a lehetséges félreértéseket", "ignore_notifications_modal.filter_to_review_separately": "A szűrt értesítések külön tekinthetők át", "ignore_notifications_modal.ignore": "Értesítések figyelmen kívül hagyása", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index c3cbbb9cf0..20f5f0aa08 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -358,7 +358,9 @@ "home.show_announcements": "Mostra annunci", "ignore_notifications_modal.disclaimer": "Mastodon non può informare gli utenti che hai ignorato le loro notifiche. Ignorare le notifiche non impedirà l'invio dei messaggi stessi.", "ignore_notifications_modal.filter_instead": "Filtra invece", + "ignore_notifications_modal.filter_to_act_users": "Potrai comunque accettare, rifiutare o segnalare gli utenti", "ignore_notifications_modal.filter_to_avoid_confusion": "Il filtraggio aiuta a evitare potenziali confusioni", + "ignore_notifications_modal.filter_to_review_separately": "Puoi rivedere le notifiche filtrate separatamente", "ignore_notifications_modal.ignore": "Ignora le notifiche", "ignore_notifications_modal.limited_accounts_title": "Ignorare le notifiche dagli account moderati?", "ignore_notifications_modal.new_accounts_title": "Ignorare le notifiche dai nuovi account?", @@ -575,6 +577,8 @@ "notifications.policy.accept": "Accetta", "notifications.policy.accept_hint": "Mostra nelle notifiche", "notifications.policy.drop": "Ignora", + "notifications.policy.drop_hint": "Scarta definitivamente, per non essere mai più visto", + "notifications.policy.filter": "Filtrare", "notifications.policy.filter_hint": "Invia alla casella in arrivo delle notifiche filtrate", "notifications.policy.filter_limited_accounts_hint": "Limitato dai moderatori del server", "notifications.policy.filter_limited_accounts_title": "Account moderati", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 8d4f128e9a..7b7ee85066 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -486,7 +486,7 @@ "privacy.private.short": "Imeḍfaren", "privacy.public.long": "Kra n win yellan deg Masṭudun neɣ berra-s", "privacy.public.short": "Azayez", - "privacy.unlisted.long": "Kra kan n ilguritmen", + "privacy.unlisted.long": "Kra kan yiwarzimen", "privacy_policy.last_updated": "Aleqqem aneggaru {date}", "privacy_policy.title": "Tasertit tabaḍnit", "recommended": "Yettuwelleh", @@ -629,6 +629,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} seg yiqeddacen-nniḍen ur d-ttwaskanent ara.", "timeline_hint.resources.followers": "Imeḍfaṛen", "timeline_hint.resources.follows": "T·Yeṭafaṛ", + "timeline_hint.resources.replies": "Kra tririyin", "timeline_hint.resources.statuses": "Tisuffaɣ tiqdimin", "trends.counter_by_accounts": "{count, plural, one {{counter} wemdan} other {{counter} medden}} deg {days, plural, one {ass} other {{days} wussan}} iɛeddan", "trends.trending_now": "Ayen mucaɛen tura", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 6cf8f67d3e..5954edc655 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -503,6 +503,8 @@ "notification.update": "{name} 님이 게시물을 수정했습니다", "notification_requests.accept": "수락", "notification_requests.dismiss": "지우기", + "notification_requests.enter_selection_mode": "선택", + "notification_requests.exit_selection_mode": "취소", "notification_requests.maximize": "최대화", "notification_requests.minimize_banner": "걸러진 알림 배너 최소화", "notification_requests.notifications_from": "{name} 님으로부터의 알림", @@ -543,6 +545,9 @@ "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", + "notifications.policy.accept": "허용", + "notifications.policy.drop": "무시", + "notifications.policy.filter": "필터", "notifications.policy.filter_limited_accounts_hint": "서버 중재자에 의해 제한됨", "notifications.policy.filter_limited_accounts_title": "중재된 계정", "notifications.policy.filter_new_accounts.hint": "{days, plural, one {하루} other {#일}} 안에 만들어진", @@ -793,6 +798,7 @@ "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource} 표시는 할 수 없습니다.", "timeline_hint.resources.followers": "팔로워", "timeline_hint.resources.follows": "팔로우", + "timeline_hint.resources.replies": "몇몇 답글", "timeline_hint.resources.statuses": "이전 게시물", "trends.counter_by_accounts": "이전 {days}일 동안 {counter} 명의 사용자", "trends.trending_now": "지금 유행 중", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index 8a2512722e..4237f885a7 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -40,7 +40,7 @@ "compose_form.direct_message_warning_learn_more": "Discere plura", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", - "compose_form.lock_disclaimer": "Tua ratio non est {clausa}. Quisquis te sequi potest ut visum accipiat nuntios tuos tantum pro sectatoribus.", + "compose_form.lock_disclaimer": "Tua ratio non est {locked}. Quisquis te sequi potest ut visum accipiat nuntios tuos tantum pro sectatoribus.", "compose_form.lock_disclaimer.lock": "clausum", "compose_form.placeholder": "What is on your mind?", "compose_form.publish_form": "Barrire", @@ -128,6 +128,7 @@ "lightbox.next": "Secundum", "lists.account.add": "Adde ad tabellās", "lists.new.create": "Addere tabella", + "lists.subheading": "Tuae tabulae", "load_pending": "{count, plural, one {# novum item} other {# nova itema}}", "media_gallery.toggle_visible": "{number, plural, one {Cēla imaginem} other {Cēla imagines}}", "moved_to_account_banner.text": "Tua ratione {disabledAccount} interdum reposita est, quod ad {movedToAccount} migrāvisti.", @@ -146,7 +147,7 @@ "notification.moderation_warning.action_sensitive": "Tua nuntia hinc sensibiliter notabuntur.", "notification.moderation_warning.action_silence": "Ratio tua est limitata.", "notification.moderation_warning.action_suspend": "Ratio tua suspensus est.", - "notification.own_poll": "Suffragium tuum terminatum est.", + "notification.own_poll": "Suffragium tuum terminatum est", "notification.reblog": "{name} tuum nuntium amplificavit.", "notification.relationships_severance_event.account_suspension": "Admin ab {from} {target} suspendit, quod significat nōn iam posse tē novitātēs ab eīs accipere aut cum eīs interagere.", "notification.relationships_severance_event.domain_block": "Admin ab {from} {target} obsēcāvit, includēns {followersCount} ex tuīs sectātōribus et {followingCount, plural, one {# ratione} other {# rationibus}} quās sequeris.", @@ -161,7 +162,7 @@ "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.follows.lead": "Tua domus feed est principalis via Mastodon experīrī. Quō plūrēs persōnas sequeris, eō actīvior et interessantior erit. Ad tē incipiendum, ecce quaedam suāsiones:", "onboarding.follows.title": "Popular on Mastodon", - "onboarding.profile.display_name_hint": "Tuum nomen completum aut tuum nomen ludens...", + "onboarding.profile.display_name_hint": "Tuum nomen completum aut tuum nomen ludens…", "onboarding.start.lead": "Nunc pars es Mastodonis, singularis, socialis medii platformae decentralis ubi—non algorismus—tuam ipsius experientiam curas. Incipiāmus in nova hac socialis regione:", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.start.title": "Perfecisti eam!", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 45359a40a7..038ec8a7b3 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -358,7 +358,9 @@ "home.show_announcements": "Rodyti skelbimus", "ignore_notifications_modal.disclaimer": "„Mastodon“ negali informuoti naudotojų, kad ignoravai jų pranešimus. Ignoravus pranešimus, pačių pranešimų siuntimas nebus sustabdytas.", "ignore_notifications_modal.filter_instead": "Filtruoti vietoj to", + "ignore_notifications_modal.filter_to_act_users": "Vis dar galėsi priimti, atmesti arba pranešti naudotojus.", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtravimas padeda išvengti galimos painiavos.", + "ignore_notifications_modal.filter_to_review_separately": "Filtruotus pranešimus gali peržiūrėti atskirai.", "ignore_notifications_modal.ignore": "Ignoruoti pranešimus", "ignore_notifications_modal.limited_accounts_title": "Ignoruoti pranešimus iš prižiūrėmų paskyrų?", "ignore_notifications_modal.new_accounts_title": "Ignoruoti pranešimus iš naujų paskyrų?", @@ -514,13 +516,26 @@ "notification.status": "{name} ką tik paskelbė", "notification.update": "{name} redagavo įrašą", "notification_requests.accept": "Priimti", + "notification_requests.accept_all": "Priimti visus", + "notification_requests.accept_multiple": "{count, plural, one {Priimti # prašymą} few {Priimti # prašymus} many {Priimti # prašymo} other {Priimti # prašymų}}", + "notification_requests.confirm_accept_all.button": "Priimti visus", + "notification_requests.confirm_accept_all.message": "Ketini priimti {count, plural, one {# pranešimo prašymą} few {# pranešimų prašymus} many {# pranešimo prašymo} other {# pranešimų prašymų}}. Ar tikrai nori tęsti?", + "notification_requests.confirm_accept_all.title": "Priimti pranešimų prašymus?", + "notification_requests.confirm_dismiss_all.button": "Atmesti visus", + "notification_requests.confirm_dismiss_all.message": "Ketini atmesti {count, plural, one {# pranešimo prašymą} few {# pranešimų prašymus} many {# pranešimo prašymo} other {# pranešimų prašymų}}. Daugiau negalėsi lengvai pasiekti {count, plural, one {jo} few {jų} many {juos} other {jų}}. Ar tikrai nori tęsti?", + "notification_requests.confirm_dismiss_all.title": "Atmesti pranešimų prašymus?", "notification_requests.dismiss": "Atmesti", + "notification_requests.dismiss_all": "Atmesti visus", + "notification_requests.dismiss_multiple": "{count, plural, one {Atmesti # prašymą} few {Atmesti # prašymus} many {Atmesti # prašymo} other {Atmesti # prašymų}}", + "notification_requests.enter_selection_mode": "Pasirinkti", + "notification_requests.exit_selection_mode": "Atšaukti", "notification_requests.explainer_for_limited_account": "Pranešimai iš šios paskyros buvo filtruojami, nes prižiūrėtojas (-a) apribojo paskyrą.", "notification_requests.explainer_for_limited_remote_account": "Pranešimai iš šios paskyros buvo filtruojami, nes prižiūrėtojas (-a) apribojo paskyrą arba serverį.", "notification_requests.maximize": "Padidinti", "notification_requests.minimize_banner": "Mažinti filtruotų pranešimų reklamjuostę", "notification_requests.notifications_from": "Pranešimai iš {name}", "notification_requests.title": "Filtruojami pranešimai", + "notification_requests.view": "Peržiūrėti pranešimus", "notifications.clear": "Išvalyti pranešimus", "notifications.clear_confirmation": "Ar tikrai nori visam laikui išvalyti visus pranešimus?", "notifications.clear_title": "Valyti pranešimus?", @@ -810,6 +825,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} iš kitų serverių nerodomi.", "timeline_hint.resources.followers": "Sekėjai", "timeline_hint.resources.follows": "Seka", + "timeline_hint.resources.replies": "Kai kurie atsakymai", "timeline_hint.resources.statuses": "Senesni įrašai", "trends.counter_by_accounts": "{count, plural, one {{counter} žmogus} few {{counter} žmonės} many {{counter} žmogus} other {{counter} žmonių}} per {days, plural, one {dieną} few {{days} dienas} many {{days} dienas} other {{days} dienų}}", "trends.trending_now": "Tendencinga dabar", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 23d7a28772..1b0e490e60 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -358,7 +358,9 @@ "home.show_announcements": "Vis kunngjeringar", "ignore_notifications_modal.disclaimer": "Mastodon kan ikkje informera brukarane at du overser varsla deira. Å oversjå varsel vil ikkje hindra at meldingane blir sende.", "ignore_notifications_modal.filter_instead": "Filtrer i staden", + "ignore_notifications_modal.filter_to_act_users": "Du kan framleis godta, avvisa eller rapportera brukarar", "ignore_notifications_modal.filter_to_avoid_confusion": "Å filtrera hjelper til å unngå mogleg forvirring", + "ignore_notifications_modal.filter_to_review_separately": "Du kan gå gjennom filtrerte varslingar for seg", "ignore_notifications_modal.ignore": "Oversjå varsel", "ignore_notifications_modal.limited_accounts_title": "Oversjå varsel frå modererte kontoar?", "ignore_notifications_modal.new_accounts_title": "Oversjå varsel frå nye kontoar?", diff --git a/app/javascript/mastodon/models/notification_group.ts b/app/javascript/mastodon/models/notification_group.ts index 76034e644e..09d407d449 100644 --- a/app/javascript/mastodon/models/notification_group.ts +++ b/app/javascript/mastodon/models/notification_group.ts @@ -21,7 +21,7 @@ interface BaseNotificationGroup interface BaseNotificationWithStatus extends BaseNotificationGroup { type: Type; - statusId: string; + statusId: string | undefined; } interface BaseNotification @@ -126,7 +126,7 @@ export function createNotificationGroupFromJSON( case 'update': { const { status_id: statusId, ...groupWithoutStatus } = group; return { - statusId, + statusId: statusId ?? undefined, sampleAccountIds, ...groupWithoutStatus, }; @@ -183,7 +183,7 @@ export function createNotificationGroupFromNotificationJSON( case 'mention': case 'poll': case 'update': - return { ...group, statusId: notification.status.id }; + return { ...group, statusId: notification.status?.id }; case 'admin.report': return { ...group, report: createReportFromJSON(notification.report) }; case 'severed_relationships': diff --git a/app/javascript/mastodon/utils/log_out.ts b/app/javascript/mastodon/utils/log_out.ts index b08a61a6a2..f8e98f1be9 100644 --- a/app/javascript/mastodon/utils/log_out.ts +++ b/app/javascript/mastodon/utils/log_out.ts @@ -1,36 +1,20 @@ -export const logOut = () => { - const form = document.createElement('form'); +import api from 'mastodon/api'; - const methodInput = document.createElement('input'); - methodInput.setAttribute('name', '_method'); - methodInput.setAttribute('value', 'delete'); - methodInput.setAttribute('type', 'hidden'); - form.appendChild(methodInput); +export async function logOut() { + try { + const response = await api(false).delete<{ redirect_to?: string }>( + '/auth/sign_out', + { headers: { Accept: 'application/json' }, withCredentials: true }, + ); - const csrfToken = document.querySelector( - 'meta[name=csrf-token]', - ); - - const csrfParam = document.querySelector( - 'meta[name=csrf-param]', - ); - - if (csrfParam && csrfToken) { - const csrfInput = document.createElement('input'); - csrfInput.setAttribute('name', csrfParam.content); - csrfInput.setAttribute('value', csrfToken.content); - csrfInput.setAttribute('type', 'hidden'); - form.appendChild(csrfInput); + if (response.status === 200 && response.data.redirect_to) + window.location.href = response.data.redirect_to; + else + console.error( + 'Failed to log out, got an unexpected non-redirect response from the server', + response, + ); + } catch (error) { + console.error('Failed to log out, response was an error', error); } - - const submitButton = document.createElement('input'); - submitButton.setAttribute('type', 'submit'); - form.appendChild(submitButton); - - form.method = 'post'; - form.action = '/auth/sign_out'; - form.style.display = 'none'; - - document.body.appendChild(form); - submitButton.click(); -}; +} diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 00f8fcbf98..7afe069396 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -713,7 +713,7 @@ body, top: 15px; .avatar { - border-radius: 4px; + border-radius: var(--avatar-border-radius); width: 40px; height: 40px; } @@ -764,7 +764,7 @@ body, top: 15px; .avatar { - border-radius: 4px; + border-radius: var(--avatar-border-radius); width: 40px; height: 40px; } @@ -888,6 +888,7 @@ a.name-tag, .account { padding: 0; + border: none; &__avatar-wrapper { margin-inline-start: 0; @@ -1611,7 +1612,7 @@ a.sparkline { position: absolute; inset-inline-start: 15px; top: 15px; - border-radius: 4px; + border-radius: var(--avatar-border-radius); width: 40px; height: 40px; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 9061026bbd..c564c92388 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1808,6 +1808,7 @@ body > [data-popper-placement] { .account { padding: 16px; + border-bottom: 1px solid var(--background-border-color); .account__display-name { flex: 1 1 auto; @@ -1996,13 +1997,14 @@ body > [data-popper-placement] { .account__avatar { display: block; position: relative; + border-radius: var(--avatar-border-radius); img { display: block; width: 100%; height: 100%; object-fit: cover; - border-radius: 4px; + border-radius: var(--avatar-border-radius); } &-inline { @@ -2836,7 +2838,7 @@ $ui-header-logo-wordmark-width: 99px; overflow: hidden; } -@media screen and (width >= 631px) { +@media screen and (width > $mobile-breakpoint) { .columns-area { padding: 0; } @@ -4248,6 +4250,10 @@ a.status-card { } } +.timeline-hint--with-descendants { + border-top: 1px solid var(--background-border-color); +} + .regeneration-indicator { text-align: center; font-size: 16px; @@ -4498,10 +4504,19 @@ a.status-card { opacity: 1; z-index: 1; position: relative; + border-left: 1px solid var(--background-border-color); + border-right: 1px solid var(--background-border-color); + border-bottom: 1px solid var(--background-border-color); + + @media screen and (max-width: $no-gap-breakpoint) { + border-left: 0; + border-right: 0; + } &.collapsed { max-height: 0; opacity: 0.5; + border-bottom: 0; } &.animating { @@ -4518,13 +4533,7 @@ a.status-card { } .column-header__collapsible-inner { - border: 1px solid var(--background-border-color); border-top: 0; - - @media screen and (max-width: $no-gap-breakpoint) { - border-left: 0; - border-right: 0; - } } .column-header__setting-btn { @@ -5731,7 +5740,7 @@ a.status-card { user-select: text; display: flex; - @media screen and (width <= 630px) { + @media screen and (width <= $mobile-breakpoint) { margin-top: auto; } } @@ -6090,7 +6099,7 @@ a.status-card { border-radius: 0 0 16px 16px; border-top: 0; - @media screen and (max-width: $no-gap-breakpoint) { + @media screen and (max-width: $mobile-breakpoint) { border-radius: 0; border-bottom: 0; padding-bottom: 32px; @@ -7971,7 +7980,7 @@ noscript { .account__avatar { background: var(--background-color); border: 1px solid var(--background-border-color); - border-radius: 4px; + border-radius: var(--avatar-border-radius); } } } @@ -9092,8 +9101,9 @@ noscript { backdrop-filter: var(--background-filter); border: 1px solid var(--modal-border-color); padding: 24px; + box-sizing: border-box; - @media screen and (max-width: $no-gap-breakpoint) { + @media screen and (max-width: $mobile-breakpoint) { border-radius: 16px 16px 0 0; border-bottom: 0; padding-bottom: 32px; diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index 9363e428b3..ac1f862a09 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -81,7 +81,7 @@ height: 100%; display: block; margin: 0; - border-radius: 4px; + border-radius: var(--avatar-border-radius); } } diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index f3cf66237f..cf8c1327dc 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -312,7 +312,7 @@ code { margin-bottom: 10px; max-width: 100%; height: auto; - border-radius: 4px; + border-radius: var(--avatar-border-radius); background: url('images/void.png'); &[src$='missing.png'] { diff --git a/app/javascript/styles/mastodon/reset.scss b/app/javascript/styles/mastodon/reset.scss index f54ed5bc79..f8a4a08ced 100644 --- a/app/javascript/styles/mastodon/reset.scss +++ b/app/javascript/styles/mastodon/reset.scss @@ -54,40 +54,21 @@ table { } html { - scrollbar-color: lighten($ui-base-color, 4%) rgba($base-overlay-background, 0.1); + scrollbar-color: var(--background-border-color); } ::-webkit-scrollbar { - width: 12px; - height: 12px; + width: 4px; + height: 4px; } ::-webkit-scrollbar-thumb { - background: lighten($ui-base-color, 4%); - border: 0px none $base-border-color; - border-radius: 50px; -} - -::-webkit-scrollbar-thumb:hover { - background: lighten($ui-base-color, 6%); -} - -::-webkit-scrollbar-thumb:active { - background: lighten($ui-base-color, 4%); + background-color: $ui-highlight-color; + opacity: .25; } ::-webkit-scrollbar-track { - border: 0px none $base-border-color; - border-radius: 0; - background: rgba($base-overlay-background, 0.1); -} - -::-webkit-scrollbar-track:hover { - background: $ui-base-color; -} - -::-webkit-scrollbar-track:active { - background: $ui-base-color; + background-color: var(--background-border-color); } ::-webkit-scrollbar-corner { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 2848a42b3f..92b4770fe3 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -88,6 +88,7 @@ $media-modal-media-max-width: 100%; $media-modal-media-max-height: 80%; $no-gap-breakpoint: 1175px; +$mobile-breakpoint: 630px; $font-sans-serif: 'mastodon-font-sans-serif' !default; $font-display: 'mastodon-font-display' !default; @@ -108,4 +109,5 @@ $font-monospace: 'mastodon-font-monospace' !default; --surface-background-color: #{darken($ui-base-color, 4%)}; --surface-variant-background-color: #{$ui-base-color}; --surface-variant-active-background-color: #{lighten($ui-base-color, 4%)}; + --avatar-border-radius: 8px; } diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 9df1aba387..b51236a032 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -422,7 +422,7 @@ class MediaAttachment < ApplicationRecord attachment = public_send(attachment_name) styles = DEFAULT_STYLES | attachment.styles.keys styles.map { |style| attachment.path(style) } - end + end.compact rescue => e # We really don't want any error here preventing media deletion Rails.logger.warn "Error #{e.class} busting cache: #{e.message}" diff --git a/app/models/user.rb b/app/models/user.rb index 70acacf6b5..b33d7dcae0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -100,7 +100,7 @@ class User < ApplicationRecord validates :email, presence: true, email_address: true - validates_with BlacklistedEmailValidator, if: -> { ENV['EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION'] == 'true' || !confirmed? } + validates_with UserEmailValidator, if: -> { ENV['EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION'] == 'true' || !confirmed? } validates_with EmailMxValidator, if: :validate_email_dns? validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create diff --git a/app/services/accept_notification_request_service.rb b/app/services/accept_notification_request_service.rb index e49eae6fd3..ad27ae3300 100644 --- a/app/services/accept_notification_request_service.rb +++ b/app/services/accept_notification_request_service.rb @@ -3,6 +3,7 @@ class AcceptNotificationRequestService < BaseService def call(request) NotificationPermission.create!(account: request.account, from_account: request.from_account) - UnfilterNotificationsWorker.perform_async(request.id) + UnfilterNotificationsWorker.perform_async(request.account_id, request.from_account_id) + request.destroy! end end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 788381fe6b..695f4153c6 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -5,6 +5,7 @@ class NotifyService < BaseService MAXIMUM_GROUP_SPAN_HOURS = 12 + # TODO: the severed_relationships type probably warrants email notifications NON_EMAIL_TYPES = %i( admin.report admin.sign_up @@ -12,7 +13,6 @@ class NotifyService < BaseService poll status moderation_warning - # TODO: this probably warrants an email notification severed_relationships ).freeze diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb index 7943778943..f78b98d7dd 100644 --- a/app/validators/email_mx_validator.rb +++ b/app/validators/email_mx_validator.rb @@ -15,7 +15,7 @@ class EmailMxValidator < ActiveModel::Validator if resolved_ips.empty? user.errors.add(:email, :unreachable) - elsif on_blacklist?(resolved_domains, user.sign_up_ip) + elsif email_domain_blocked?(resolved_domains, user.sign_up_ip) user.errors.add(:email, :blocked) end end @@ -34,9 +34,9 @@ class EmailMxValidator < ActiveModel::Validator end def on_allowlist?(domain) - return false if Rails.configuration.x.email_domains_whitelist.blank? + return false if Rails.configuration.x.email_domains_allowlist.blank? - Rails.configuration.x.email_domains_whitelist.include?(domain) + Rails.configuration.x.email_domains_allowlist.include?(domain) end def resolve_mx(domain) @@ -58,7 +58,7 @@ class EmailMxValidator < ActiveModel::Validator [ips, records] end - def on_blacklist?(domains, attempt_ip) + def email_domain_blocked?(domains, attempt_ip) EmailDomainBlock.block?(domains, attempt_ip: attempt_ip) end end diff --git a/app/validators/blacklisted_email_validator.rb b/app/validators/user_email_validator.rb similarity index 74% rename from app/validators/blacklisted_email_validator.rb rename to app/validators/user_email_validator.rb index 9b3f2e33e5..21b22794ef 100644 --- a/app/validators/blacklisted_email_validator.rb +++ b/app/validators/user_email_validator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class BlacklistedEmailValidator < ActiveModel::Validator +class UserEmailValidator < ActiveModel::Validator def validate(user) return if user.valid_invitation? || user.email.blank? @@ -23,18 +23,18 @@ class BlacklistedEmailValidator < ActiveModel::Validator end def not_allowed_through_configuration?(email) - return false if Rails.configuration.x.email_domains_whitelist.blank? + return false if Rails.configuration.x.email_domains_allowlist.blank? - domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.') + domains = Rails.configuration.x.email_domains_allowlist.gsub('.', '\.') regexp = Regexp.new("@(.+\\.)?(#{domains})$", true) email !~ regexp end def disallowed_through_configuration?(email) - return false if Rails.configuration.x.email_domains_blacklist.blank? + return false if Rails.configuration.x.email_domains_denylist.blank? - domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.') + domains = Rails.configuration.x.email_domains_denylist.gsub('.', '\.') regexp = Regexp.new("@(.+\\.)?(#{domains})", true) regexp.match?(email) diff --git a/app/workers/scheduler/auto_close_registrations_scheduler.rb b/app/workers/scheduler/auto_close_registrations_scheduler.rb index 6874502915..6226e6ea1f 100644 --- a/app/workers/scheduler/auto_close_registrations_scheduler.rb +++ b/app/workers/scheduler/auto_close_registrations_scheduler.rb @@ -11,7 +11,7 @@ class Scheduler::AutoCloseRegistrationsScheduler OPEN_REGISTRATIONS_MODERATOR_THRESHOLD = 1.week + UserTrackingConcern::SIGN_IN_UPDATE_FREQUENCY def perform - return if Rails.configuration.x.email_domains_whitelist.present? || ENV['DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS'] == 'true' + return if Rails.configuration.x.email_domains_allowlist.present? || ENV['DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS'] == 'true' return unless Setting.registrations_mode == 'open' switch_to_approval_mode! unless active_moderators? diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb index 223654aa16..5939a691fb 100644 --- a/app/workers/unfilter_notifications_worker.rb +++ b/app/workers/unfilter_notifications_worker.rb @@ -3,8 +3,19 @@ class UnfilterNotificationsWorker include Sidekiq::Worker - def perform(notification_request_id) - @notification_request = NotificationRequest.find(notification_request_id) + # Earlier versions of the feature passed a `notification_request` ID + # If `to_account_id` is passed, the first argument is an account ID + # TODO for after 4.3.0: drop the single-argument case + def perform(notification_request_or_account_id, from_account_id = nil) + if from_account_id.present? + @notification_request = nil + @from_account = Account.find(from_account_id) + @recipient = Account.find(notification_request_or_account_id) + else + @notification_request = NotificationRequest.find(notification_request_or_account_id) + @from_account = @notification_request.from_account + @recipient = @notification_request.account + end push_to_conversations! unfilter_notifications! @@ -16,7 +27,7 @@ class UnfilterNotificationsWorker private def push_to_conversations! - notifications_with_private_mentions.find_each { |notification| AccountConversation.add_status(@notification_request.account, notification.target_status) } + notifications_with_private_mentions.reorder(nil).find_each(order: :desc) { |notification| AccountConversation.add_status(@recipient, notification.target_status) } end def unfilter_notifications! @@ -24,11 +35,11 @@ class UnfilterNotificationsWorker end def remove_request! - @notification_request.destroy! + @notification_request&.destroy! end def filtered_notifications - Notification.where(account: @notification_request.account, from_account: @notification_request.from_account, filtered: true) + Notification.where(account: @recipient, from_account: @from_account, filtered: true) end def notifications_with_private_mentions diff --git a/config/initializers/blacklists.rb b/config/initializers/blacklists.rb deleted file mode 100644 index 0e3339c98e..0000000000 --- a/config/initializers/blacklists.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -Rails.application.configure do - config.x.email_domains_blacklist = (ENV['EMAIL_DOMAIN_DENYLIST'] || ENV['EMAIL_DOMAIN_BLACKLIST']) || '' - config.x.email_domains_whitelist = (ENV['EMAIL_DOMAIN_ALLOWLIST'] || ENV['EMAIL_DOMAIN_WHITELIST']) || '' -end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index 83100b1cf5..86fde3cacf 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -147,7 +147,7 @@ Doorkeeper.configure do force_ssl_in_redirect_uri false # Specify what redirect URI's you want to block during Application creation. - # Any redirect URI is whitelisted by default. + # Any redirect URI is allowed by default. # # You can use this option in order to forbid URI's with 'javascript' scheme # for example. diff --git a/config/initializers/email_domains_lists.rb b/config/initializers/email_domains_lists.rb new file mode 100644 index 0000000000..1361b1935a --- /dev/null +++ b/config/initializers/email_domains_lists.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Rails.application.configure do + config.x.email_domains_denylist = ENV.fetch('EMAIL_DOMAIN_DENYLIST', nil) || ENV.fetch('EMAIL_DOMAIN_BLACKLIST', '') + config.x.email_domains_allowlist = ENV.fetch('EMAIL_DOMAIN_ALLOWLIST', nil) || ENV.fetch('EMAIL_DOMAIN_WHITELIST', '') +end diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 2fa312969d..73b35bf8bf 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -21,7 +21,7 @@ cy: link_verified_on: Gwiriwyd perchnogaeth y ddolen yma ar %{date} nothing_here: Does dim byd yma! pin_errors: - following: Rhaid i chi fod yn dilyn y person rydych am ei gymeradwyo, yn barod. + following: Rhaid i chi fod yn dilyn y person rydych am ei gymeradwyo, yn barod posts: few: Postiadau many: Postiadau @@ -39,6 +39,7 @@ cy: created_msg: Crëwyd nodyn cymedroli'n llwyddiannus! destroyed_msg: Dinistriwyd nodyn cymedroli yn llwyddiannus! accounts: + add_email_domain_block: Rhwystro parth e-bost approve: Cymeradwyo approved_msg: Wedi llwyddo i gymeradwyo cais cofrestru %{username} are_you_sure: Ydych chi'n siŵr? @@ -65,6 +66,7 @@ cy: demote: Diraddio destroyed_msg: Mae data %{username} bellach mewn ciw i gael ei ddileu yn fuan disable: Rhewi + disable_sign_in_token_auth: Analluogi dilysu tocyn e-bost disable_two_factor_authentication: Diffodd 2FA disabled: Wedi rhewi display_name: Enw sgrin @@ -73,6 +75,7 @@ cy: email: E-bost email_status: Statws e-bost enable: Dadrewi + enable_sign_in_token_auth: Galluogi dilysu tocyn e-bost enabled: Wedi ei alluogi enabled_msg: Wedi dadrewi cyfrif %{username} yn llwyddiannus followers: Dilynwyr @@ -141,6 +144,7 @@ cy: resubscribe: Ail danysgrifio role: Rôl search: Chwilio + search_same_email_domain: Defnyddwyr eraill gyda'r un parth e-bost search_same_ip: Defnyddwyr eraill gyda'r un IP security: Diogelwch security_measures: @@ -181,21 +185,26 @@ cy: approve_appeal: Cymeradwyo'r Apêl approve_user: Cymeradwyo Defnyddiwr assigned_to_self_report: Neilltuo Adroddiad + change_email_user: Newid E-bost ar gyfer Defnyddiwr change_role_user: Newid Rôl y Defnyddiwr confirm_user: Cadarnhau Defnyddiwr create_account_warning: Creu Rhybydd create_announcement: Creu Cyhoeddiad + create_canonical_email_block: Creu Rhwystr E-bost create_custom_emoji: Creu Emoji Addasedig create_domain_allow: Creu Caniatáu Parth create_domain_block: Creu Gwaharddiad Parth + create_email_domain_block: Creu Rhwystr Parth E-bost create_ip_block: Creu rheol IP create_unavailable_domain: Creu Parth Ddim ar Gael create_user_role: Creu Rôl demote_user: Diraddio Defnyddiwr destroy_announcement: Dileu Cyhoeddiad + destroy_canonical_email_block: Dileu Rhwystr E-bost destroy_custom_emoji: Dileu Emoji Addasedig destroy_domain_allow: Dileu Caniatáu Parth destroy_domain_block: Dileu Gwaharddiad Parth + destroy_email_domain_block: Dileu Rhwystr Parth E-bost destroy_instance: Clirio Parth destroy_ip_block: Dileu rheol IP destroy_status: Dileu Postiad @@ -203,8 +212,10 @@ cy: destroy_user_role: Dileu Rôl disable_2fa_user: Diffodd 2FA disable_custom_emoji: Analluogi Emoji Addasedig + disable_sign_in_token_auth_user: Analluogi Dilysu Tocyn E-bost Defnyddiwr disable_user: Analluogi Defnyddiwr enable_custom_emoji: Galluogi Emoji Addasedig + enable_sign_in_token_auth_user: Galluogi Dilysu Tocyn E-bost Defnyddiwr enable_user: Galluogi Defnyddiwr memorialize_account: Cofadeilio Cyfrif promote_user: Dyrchafu Defnyddiwr @@ -234,20 +245,26 @@ cy: approve_appeal_html: Mae %{name} wedi cymeradwyo penderfyniad cymedroli gan %{target} approve_user_html: Mae %{name} wedi cymeradwyo cofrestru gan %{target} assigned_to_self_report_html: Mae %{name} wedi neilltuo adroddiad %{target} iddyn nhw eu hunain + change_email_user_html: Mae %{name} wedi newid cyfeiriad e-bost defnyddiwr %{target} change_role_user_html: Mae %{name} wedi newid rôl %{target} + confirm_user_html: Mae %{name} wedi cadarnhau cyfeiriad e-bost defnyddiwr %{target} create_account_warning_html: Mae %{name} wedi anfon rhybudd at %{target} create_announcement_html: Mae %{name} wedi creu cyhoeddiad newydd %{target} + create_canonical_email_block_html: Mae %{name} wedi'i rwystro e-bost gyda'r hash %{target} create_custom_emoji_html: Mae %{name} wedi llwytho emoji newydd %{target} create_domain_allow_html: Mae %{name} wedi caniatáu ffedereiddio â pharth %{target} create_domain_block_html: Mae %{name} wedi rhwystro parth %{target} + create_email_domain_block_html: Mae %{name} wedi rhwystro parth e-bost %{target} create_ip_block_html: Mae %{name} wedi creu rheol ar gyfer IP %{target} create_unavailable_domain_html: Mae %{name} wedi stopio danfon i barth %{target} create_user_role_html: Mae %{name} wedi creu rôl %{target} demote_user_html: Mae %{name} wedi israddio defnyddiwr %{target} destroy_announcement_html: Mae %{name} wedi dileu cyhoeddiad %{target} + destroy_canonical_email_block_html: Mae %{name} wedi dad-rwystro parth e-bost %{target} destroy_custom_emoji_html: Mae %{name} wedi dileu emoji %{target} destroy_domain_allow_html: Mae %{name} wedi gwrthod ffederasiwn gyda pharth %{target} destroy_domain_block_html: Mae %{name} wedi dad rwystro parth %{target} + destroy_email_domain_block_html: Mae %{name} wedi dad-rwystro parth e-bost %{target} destroy_instance_html: Mae %{name} wedi dileu parth %{target} destroy_ip_block_html: Mae %{name} dileu rheol ar gyfer IP %{target} destroy_status_html: Mae %{name} wedi tynnu postiad gan %{target} @@ -255,8 +272,10 @@ cy: destroy_user_role_html: Mae %{name} wedi dileu rôl %{target} disable_2fa_user_html: Mae %{name} wedi analluogi gofyniad dau ffactor ar gyfer defnyddiwr %{target} disable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target} + disable_sign_in_token_auth_user_html: Mae %{name} wedi analluogi dilysiad tocyn e-bost %{target} disable_user_html: Mae %{name} wedi analluogi mewngofnodi defnyddiwr %{target} enable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target} + enable_sign_in_token_auth_user_html: Mae %{name} wedi galluogi dilysiad tocyn e-bost %{target} enable_user_html: Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target} memorialize_account_html: Newidiodd %{name} gyfrif %{target} i dudalen memoriam promote_user_html: Mae %{name} wedi hyrwyddo defnyddiwr %{target} @@ -264,6 +283,7 @@ cy: reject_user_html: Mae %{name} wedi gwrthod cofrestriad gan %{target} remove_avatar_user_html: Mae %{name} wedi tynnu afatar %{target} reopen_report_html: Mae %{name} wedi ailagor adroddiad %{target} + resend_user_html: Mae %{name} wedi ail anfon e-bost cadarnhau i%{target} reset_password_user_html: Mae %{name} wedi ailosod cyfrinair defnyddiwr %{target} resolve_report_html: Mae %{name} wedi datrys adroddiad %{target} sensitive_account_html: Mae %{name} wedi marcio cyfrwng %{target} fel un sensitif @@ -444,6 +464,7 @@ cy: other: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" two: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" zero: "%{count} o ymgeisiadau i gofrestru dros yr wythnos ddiwethaf" + created_msg: Parth e-bost wedi'i rwystro'n llwyddiannus delete: Dileu dns: types: @@ -452,8 +473,12 @@ cy: new: create: Ychwanegu parth resolve: Datrys parth + title: Rhwystro parth e-bost newydd + no_email_domain_block_selected: Ni newidiwyd unrhyw rwystro parth e-bost gan na ddewiswyd yr un ohonyn nhw not_permitted: Dim caniatâd + resolved_dns_records_hint_html: Mae'r enw parth yn cyd-fynd â'r parthau MX canlynol, sy'n gyfrifol yn y pen draw am dderbyn e-bost. Bydd rhwystro parth MX yn rhwystro cofrestriadau o unrhyw gyfeiriad e-bost sy'n defnyddio'r un parth MX, hyd yn oed os yw'r enw parth gweladwy yn wahanol. Byddwch yn ofalus i beidio â rhwystro'r prif ddarparwyr e-bost. resolved_through_html: Wedi'i ddatrys trwy %{domain} + title: Parthau e-bost wedi'u rhwystro export_domain_allows: new: title: Mewnforio parth yn caniatáu @@ -623,6 +648,7 @@ cy: resolve_description_html: Ni fydd unrhyw gamau yn cael eu cymryd yn erbyn y cyfrif a adroddwyd, ni chofnodwyd rhybudd, a bydd yr adroddiad yn cael ei gau. silence_description_html: Bydd y cyfrif yn weladwy i'r rhai sydd eisoes yn ei ddilyn neu'n edrych arno â llaw, gan gyfyngu'n ddifrifol ar ei gyrhaeddiad. Mae modd ei ddychwelyd bob amser. Yn cau pob adroddiad yn erbyn y cyfrif hwn. suspend_description_html: Bydd y cyfrif a'i holl gynnwys yn anhygyrch ac yn cael ei ddileu yn y pen draw, a bydd rhyngweithio ag ef yn amhosibl. Yn gildroadwy o fewn 30 diwrnod. Yn cau pob adroddiad yn erbyn y cyfrif hwn. + actions_description_html: Penderfynwch pa gamau i'w cymryd i delio gyda'r adroddiad hwn. Os cymerwch gamau cosbi yn erbyn y cyfrif a adroddwyd, bydd hysbysiad e-bost yn cael ei anfon atyn nhw, ac eithrio pan fydd y categori Sbam yn cael ei ddewis. actions_description_remote_html: Penderfynwch pa gamau i'w cymryd i ddatrys yr adroddiad hwn. Bydd hyn ond yn effeithio ar sut mae'ch gweinydd yn cyfathrebu â'r cyfrif hwn o bell ac yn trin ei gynnwys. add_to_report: Ychwanegu rhagor i adroddiad already_suspended_badges: @@ -687,6 +713,7 @@ cy: delete_data_html: Dileu proffil a chynnwys @%{acct} 30 diwrnod o nawr oni bai ei b/fod heb ei h/atal yn y cyfamser preview_preamble_html: 'Bydd @%{acct} yn derbyn rhybudd gyda''r cynnwys canlynol:' record_strike_html: Recordio rhybudd yn erbyn @%{acct} i'ch helpu i ddwysáu ar achosion o dorri rheolau yn y dyfodol o'r cyfrif hwn + send_email_html: Anfon e-bost rhybuddio at @%{acct} warning_placeholder: Rhesymeg ychwanegol dewisol ar gyfer y cam cymedroli. target_origin: Tarddiad y cyfrif a adroddwyd title: Adroddiadau @@ -734,6 +761,7 @@ cy: manage_appeals: Rheoli Apeliadau manage_appeals_description: Yn caniatáu i ddefnyddwyr adolygu apeliadau yn erbyn camau cymedroli manage_blocks: Rheoli Blociau + manage_blocks_description: Yn caniatáu i ddefnyddwyr rwystro darparwyr e-bost a chyfeiriadau IP manage_custom_emojis: Rheoli Emojis Cyfaddas manage_custom_emojis_description: Yn caniatáu i ddefnyddwyr reoli emojis cyfaddas ar y gweinydd manage_federation: Rheoli Ffederasiwn @@ -751,6 +779,7 @@ cy: manage_taxonomies: Rheoli Tacsonomeg manage_taxonomies_description: Yn caniatáu i ddefnyddwyr adolygu cynnwys sy'n trendio a diweddaru gosodiadau hashnodau manage_user_access: Rheoli Mynediad Defnyddwyr + manage_user_access_description: Yn caniatáu i ddefnyddwyr analluogi dilysiad dau ffactor defnyddwyr eraill, newid eu cyfeiriad e-bost, ac ailosod eu cyfrinair manage_users: Rheoli Defnyddwyr manage_users_description: Yn caniatáu i ddefnyddwyr weld manylion defnyddwyr eraill a chyflawni camau cymedroli yn eu herbyn manage_webhooks: Rheoli Bachau Gwe @@ -825,6 +854,7 @@ cy: destroyed_msg: Llwytho i fyny i'r wefan wedi'i dileu yn llwyddiannus! software_updates: critical_update: Hanfodol - diweddarwch yn fuan + description: Argymhellir cadw'ch gosodiad Mastodon yn gyfredol i elwa o'r atgyweiriadau a'r nodweddion diweddaraf. Hefyd, weithiau mae'n hanfodol diweddaru Mastodon mewn modd amserol er mwyn osgoi materion diogelwch. Am y rhesymau hyn, mae Mastodon yn gwirio am ddiweddariadau bob 30 munud, a bydd yn eich hysbysu yn unol â'ch dewisiadau hysbysu e-bost. documentation_link: Dysgu rhagor release_notes: Nodiadau ryddhau title: Diweddariadau ar gael @@ -912,13 +942,13 @@ cy: message_html: "Mae eich storfa gwrthrychau wedi'i cham ffurfweddu. Mae preifatrwydd eich defnyddwyr mewn perygl." tags: moderation: - not_trendable: Ddim yn dueddol + not_trendable: Ddim yn trendio not_usable: Ddim yn ddefnyddiadwy pending_review: O dan ystyriaeth review_requested: Gofynnwyd am adolygiad reviewed: Adolygwyd title: Statws - trendable: Tueddadwy + trendable: Trendadwy unreviewed: Heb ei adolygu usable: Defnyddiadwy name: Enw @@ -933,10 +963,16 @@ cy: trends: allow: Caniatáu approved: Cymeradwywyd + confirm_allow: Ydych chi'n siŵr eich bod am ganiatáu'r tagiau a ddewiswyd? + confirm_disallow: Ydych chi'n siŵr eich bod am wrthod y tagiau hyn? disallow: Gwrthod links: allow: Caniatáu dolen allow_provider: Caniatáu cyhoeddwr + confirm_allow: Ydych chi'n siŵr eich bod am ganiatáu'r dolenni hyn? + confirm_allow_provider: Ydych chi'n siŵr eich bod am ganiatáu'r darparwyr hyn? + confirm_disallow: Ydych chi'n siŵr eich bod am wrthod y dolenni hyn? + confirm_disallow_provider: A ydych yn siŵr eich bod am wrthod y darparwyr hyn? description_html: Mae'r rhain yn ddolenni sy'n cael eu rhannu llawer ar hyn o bryd gan gyfrifon y mae eich gweinydd yn gweld postiadau ohonyn nhw. Gall helpu eich defnyddwyr i ddarganfod beth sy'n digwydd yn y byd. Ni chaiff unrhyw ddolenni eu dangos yn gyhoeddus nes i chi gymeradwyo'r cyhoeddwr. Gallwch hefyd ganiatáu neu wrthod dolenni unigol. disallow: Gwrthod dolen disallow_provider: Gwrthod y cyhoeddwr @@ -952,18 +988,22 @@ cy: zero: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf title: Dolenni sy'n trendio usage_comparison: Wedi'i rannu %{today} gwaith heddiw, o'i gymharu â %{yesterday} ddoe - not_allowed_to_trend: Dim caniatâd i dueddu + not_allowed_to_trend: Dim caniatâd i trendio only_allowed: Derbyniwyd yn unig pending_review: Yn aros am adolygiad preview_card_providers: - allowed: Gall dolenni gan y cyhoeddwr hwn greu tuedd + allowed: Gall dolenni gan y cyhoeddwr hwn greu trend description_html: Mae'r rhain yn barthau lle mae dolenni'n cael eu rhannu'n aml ar eich gweinydd. Ni fydd dolenni'n trendio'n gyhoeddus oni bai bod parth y ddolen yn cael ei gymeradwyo. Mae eich cymeradwyaeth (neu eich gwrthodiad) yn ymestyn i is-barthau. - rejected: Ni fydd dolenni gan y cyhoeddwr hwn yn creu tuedd + rejected: Ni fydd dolenni gan y cyhoeddwr hwn yn creu trend title: Cyhoeddwyr rejected: Gwrthodwyd statuses: allow: Caniatáu postiad allow_account: Caniatáu awdur + confirm_allow: Ydych chi'n siŵr eich bod am ganiatáu'r statws hyn? + confirm_allow_account: Ydych chi'n siŵr eich bod am ganiatáu'r cyfrifon hyn? + confirm_disallow: A ydych yn siŵr eich bod am wrthod y statws hyn? + confirm_disallow_account: A ydych yn siŵr eich bod am wrthod y cyfrifon hyn? description_html: Mae'r rhain yn bostiadau y mae eich gweinydd yn gwybod amdanyn nhw sy'n cael eu rhannu a'u ffafrio llawer ar hyn o bryd. Gall helpu eich defnyddwyr newydd a'ch defnyddwyr sy'n dychwelyd i ddod o hyd i fwy o bobl i'w dilyn. Ni chaiff unrhyw bostiadau eu dangos yn gyhoeddus nes i chi gymeradwyo'r awdur, ac mae'r awdur yn caniatáu i'w cyfrif gael ei awgrymu i eraill. Gallwch hefyd ganiatáu neu wrthod postiadau unigol. disallow: Gwrthod postiad disallow_account: Gwrthod awdur @@ -1004,6 +1044,7 @@ cy: other: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf two: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf zero: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf + title: Argymhellion a Threndiau trending: Trendio warning_presets: add_new: Ychwanegu newydd @@ -1092,7 +1133,9 @@ cy: guide_link_text: Gall pawb gyfrannu. sensitive_content: Cynnwys sensitif application_mailer: + notification_preferences: Newid dewisiadau e-bost salutation: "%{name}," + settings: 'Newid dewisiadau e-bost: %{link}' unsubscribe: Dad-danysgrifio view: 'Gweld:' view_profile: Gweld proffil @@ -1112,6 +1155,7 @@ cy: hint_html: Un peth arall! Mae angen i ni gadarnhau eich bod yn ddynol (mae hyn er mwyn i ni allu cadw'r sbam allan!). Datryswch y CAPTCHA isod a chliciwch "Parhau". title: Gwiriad diogelwch confirmations: + awaiting_review: Mae eich cyfeiriad e-bost wedi'i gadarnhau! Mae aelod o staff %{domain} bellach yn adolygu'ch cofrestriad. Byddwch yn derbyn e-bost os ydyn nhw'n cymeradwyo eich cyfrif! awaiting_review_title: Mae eich cofrestriad yn cael ei adolygu clicking_this_link: clicio ar y ddolen hon login_link: mewngofnodi @@ -1119,6 +1163,7 @@ cy: redirect_to_app_html: Dylech fod wedi cael eich ailgyfeirio i ap %{app_name}. Os na ddigwyddodd hynny, rhowch gynnig ar %{clicking_this_link} neu ewch eich hun i'r ap. registration_complete: Mae eich cofrestriad ar %{domain} bellach wedi'i gwblhau! welcome_title: Croeso, %{name}! + wrong_email_hint: Os nad yw'r cyfeiriad e-bost hwnnw'n gywir, gallwch ei newid yng ngosodiadau'r cyfrif. delete_account: Dileu cyfrif delete_account_html: Os hoffech chi ddileu eich cyfrif, mae modd parhau yma. Bydd gofyn i chi gadarnhau. description: @@ -1139,6 +1184,7 @@ cy: or_log_in_with: Neu mewngofnodwch gyda privacy_policy_agreement_html: Rwyf wedi darllen ac yn cytuno i'r polisi preifatrwydd progress: + confirm: Cadarnhau'r e-bost details: Eich manylion review: Ein hadolygiad rules: Derbyn rheolau @@ -1160,8 +1206,10 @@ cy: security: Diogelwch set_new_password: Gosod cyfrinair newydd setup: + email_below_hint_html: Gwiriwch eich ffolder sbam, neu gofynnwch am un arall. Gallwch gywiro eich cyfeiriad e-bost os yw'n anghywir. email_settings_hint_html: Cliciwch ar y ddolen a anfonwyd atoch i wirio %{email}. Byddwn yn aros yma amdanoch. link_not_received: Heb gael dolen? + new_confirmation_instructions_sent: Byddwch yn derbyn e-bost newydd gyda'r ddolen gadarnhau ymhen ychydig funudau! title: Gwiriwch eich blwch derbyn sign_in: preamble_html: Mewngofnodwch gyda'ch manylion %{domain}. Os yw eich cyfrif yn cael ei gynnal ar weinydd gwahanol, ni fydd modd i chi fewngofnodi yma. @@ -1172,7 +1220,9 @@ cy: title: Gadewch i ni eich gosod ar %{domain}. status: account_status: Statws cyfrif + confirming: Wrthi'n aros i gadarnhad e-bost gael ei gwblhau. functional: Mae eich cyfrif nawr yn weithredol. + pending: Mae eich cais yn aros i gael ei adolygu gan ein staff. Gall hyn gymryd peth amser. Byddwch yn derbyn e-bost os caiff eich cais ei gymeradwyo. redirecting_to: Mae eich cyfrif yn anweithredol oherwydd ei fod ar hyn o bryd yn ailgyfeirio i %{acct}. self_destruct: Gab fod parth %{domain} yn cau, dim ond mynediad cyfyngedig fyddwch yn ei gael i'ch cyfrif. view_strikes: Gweld rybuddion y gorffennol yn erbyn eich cyfrif @@ -1215,6 +1265,9 @@ cy: before: 'Cyn bwrw ymlaen, darllenwch y nodiadau hyn yn ofalus:' caches: Efallai bydd cynnwys sydd wedi'i storio dros dro gan weinyddion eraill yn parhau data_removal: Bydd eich postiadau a data arall yn cael eu dileu'n barhaol + email_change_html: Gallwch newid eich cyfeiriad e-bost heb ddileu eich cyfrif + email_contact_html: Os nad yw byth wedi cyrraedd, gallwch anfon e-bost at %{email} am help + email_reconfirmation_html: Os nad ydych yn derbyn yr e-bost cadarnhau, gallwch ofyn amdano eto irreversible: Fyddwch chi ddim yn gallu adfer nac ail-greu eich cyfrif more_details_html: Am fwy o fanylion, darllenwch y polisi preifatrwydd. username_available: Bydd eich enw defnyddiwr ar gael eto @@ -1479,6 +1532,7 @@ cy: authentication_methods: otp: ap dilysu dau ffactor password: cyfrinair + sign_in_token: cod diogelwch e-bost webauthn: allweddi diogelwch description_html: Os ydych yn gweld gweithgaredd nad ydych yn ei adnabod, ystyriwch newid eich cyfrinair a galluogi dilysu dau ffactor. empty: Dim hanes dilysu ar gael @@ -1489,6 +1543,16 @@ cy: unsubscribe: action: Iawn, dad-danysgrifio complete: Dad-danysgrifiwyd + confirmation_html: Ydych chi'n siŵr eich bod am ddad-danysgrifio rhag derbyn %{type} Mastodon ar %{domain} i'ch e-bost yn %{email}? Gallwch ail-danysgrifio o'ch gosodiadau hysbysu e-bost rhywbryd eto . + emails: + notification_emails: + favourite: e-bost hysbysu hoffi + follow: e-byst hysbysu dilyn + follow_request: e-byst ceisiadau dilyn + mention: e-byst hysbysu crybwylliadau + reblog: e-byst hysbysiadau hybu + resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost . + success_html: Ni fyddwch bellach yn derbyn %{type} ar gyfer Mastodon ar %{domain} i'ch e-bost am %{email}. title: Dad-danysgrifio media_attachments: validations: @@ -1569,6 +1633,8 @@ cy: update: subject: Golygodd %{name} bostiad notifications: + administration_emails: E-byst hysbysiadau gweinyddol + email_events: Digwyddiadau ar gyfer hysbysiadau e-bost email_events_hint: 'Dewiswch ddigwyddiadau yr ydych am dderbyn hysbysiadau ar eu cyfer:' number: human: @@ -1727,6 +1793,7 @@ cy: import: Mewnforio import_and_export: Mewnforio ac allforio migrate: Mudo cyfrif + notifications: Hysbysiadau e-bost preferences: Dewisiadau profile: Proffil cyhoeddus relationships: Yn dilyn a dilynwyr @@ -1983,9 +2050,9 @@ cy: other: "%{people} o bobl yn y 2 ddiwrnod diwethaf" two: "%{people} o bobl yn y 2 ddiwrnod diwethaf" zero: "%{people} o bobl yn y 2 ddiwrnod diwethaf" - hashtags_subtitle: Gweld beth sy'n tueddu dros y 2 ddiwrnod diwethaf - hashtags_title: Hashnodau tuedd - hashtags_view_more: Gweld mwy o hashnodau tuedd + hashtags_subtitle: Gweld beth sy'n trendio dros y 2 ddiwrnod diwethaf + hashtags_title: Hashnodau trendio + hashtags_view_more: Gweld mwy o hashnodau trendio post_action: Creu post_step: Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn. post_title: Creu'ch postiad cyntaf @@ -2001,6 +2068,7 @@ cy: invalid_otp_token: Côd dau-ffactor annilys otp_lost_help_html: Os colloch chi fynediad i'r ddau, mae modd i chi gysylltu a %{email} rate_limited: Gormod o geisiadau dilysu, ceisiwch eto yn nes ymlaen. + seamless_external_login: Rydych chi wedi mewngofnodi trwy wasanaeth allanol, felly nid yw gosodiadau cyfrinair ac e-bost ar gael. signed_in_as: 'Wedi mewngofnodi fel:' verification: extra_instructions_html: Awgrym: Gall y ddolen ar eich gwefan fod yn anweledig. Y rhan bwysig yw rel="me" sy'n atal dynwarediad ar wefannau gyda chynnwys sy'n cael ei gynyrchu gan ddefnyddwyr. Gallwch hyd yn oed ddefnyddio tag link ym mhennyn y dudalen yn lle a, ond rhaid i'r HTML fod yn hygyrch heb weithredu JavaScript. diff --git a/config/locales/da.yml b/config/locales/da.yml index 5b5d6cb184..416618ec99 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -686,7 +686,7 @@ da: moderation: Moderering special: Speciel delete: Slet - description_html: Med brugerrollerkan man tilpasse sine brugeres adgang til Mastodon-funktioner og -områder. + description_html: Med brugerroller kan man tilpasse sine brugeres adgang til Mastodon-funktioner og -områder. edit: Redigér rolle for '%{name} everyone: Standardtilladelser everyone_full_description_html: Dette er basisrollen med indvirkning på alle brugere, selv dem uden rolletildeling. Alle øvrige rolletilladelser nedarves herfra. diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 3d7221deb7..7b1e11c264 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -31,6 +31,7 @@ fo: created_msg: Umsjónarviðmerking stovnað! destroyed_msg: Umsjónarviðmerking strikað! accounts: + add_email_domain_block: Forða t-post økisnavni approve: Vátta approved_msg: Góðkent tilmeldingarumbøn hjá %{username} are_you_sure: Ert tú vís/ur? @@ -129,6 +130,7 @@ fo: resubscribe: Tegna teg umaftur role: Leiklutur search: Leita + search_same_email_domain: Aðrir brúkarar við sama t-post-økisnavni search_same_ip: Aðrir brúkarar við somu IP security: Trygd security_measures: @@ -169,21 +171,26 @@ fo: approve_appeal: Góðkenn kæru approve_user: Góðkenn brúkara assigned_to_self_report: Tilluta melding + change_email_user: Broyt t-post hjá brúkara change_role_user: Broyt leiklut hjá brúkara confirm_user: Vátta brúkara create_account_warning: Stovna ávaring create_announcement: Stovna kunngerð + create_canonical_email_block: Stovna t-post-blokk create_custom_emoji: Stovna serligt kenslutekn create_domain_allow: Stovna navnaøkjaloyvi create_domain_block: Stovna navnaøkjablokering + create_email_domain_block: Stovna t-post-økisnavnablokk create_ip_block: Stovna IP reglu create_unavailable_domain: Stovna navnaøki, sum ikki er tøkt create_user_role: Stovna leiklut demote_user: Lækka brúkara í tign destroy_announcement: Strika kunngerð + destroy_canonical_email_block: Strika t-postablokk destroy_custom_emoji: Strika serligt kenslutekn destroy_domain_allow: Strika navnaøkjaloyvi destroy_domain_block: Strika navnaøkjablokering + destroy_email_domain_block: Strika t-posta-økisnavnablokk destroy_instance: Reinsa navnaøki destroy_ip_block: Strika IP reglu destroy_status: Strika post @@ -222,7 +229,9 @@ fo: approve_appeal_html: "%{name} góðkendi umsjónaráheitan frá %{target}" approve_user_html: "%{name} góðtók umsókn frá %{target}" assigned_to_self_report_html: "%{name} tillutaði frágreiðing %{target} til sín sjálvs" + change_email_user_html: "%{name} broytti t-postin hjá brúkara %{target}" change_role_user_html: "%{name} broytti leiklutin hjá %{target}" + confirm_user_html: "%{name} váttaði t-post hjá brúkara %{target}" create_account_warning_html: "%{name} sendi eina ávaring til %{target}" create_announcement_html: "%{name} stovnaði eina fráboðan %{target}" create_custom_emoji_html: "%{name} legði upp nýtt kenslutekn %{target}" diff --git a/config/locales/he.yml b/config/locales/he.yml index 85632c7c53..6c02e12b95 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -35,6 +35,7 @@ he: created_msg: הודעת מנחה נוצרה בהצלחה! destroyed_msg: הודעת מנחה נמחקה בהצלחה! accounts: + add_email_domain_block: חסימת מתחם דוא"ל approve: אשר approved_msg: בקשת %{username} להירשם אושרה בהצלחה are_you_sure: בטוח? @@ -905,10 +906,16 @@ he: trends: allow: לאפשר approved: אישור + confirm_allow: 'וידוא: האם לאשר את התגיות שנבחרו?' + confirm_disallow: 'וידוא: האם לאסור את התגיות שנבחרו?' disallow: לא לאשר links: allow: אישור קישורית allow_provider: אישור מפרסם + confirm_allow: 'וידוא: האם לאשר את הקישורים שנבחרו?' + confirm_allow_provider: 'וידוא: האם לאשר את הספקים שנבחרו?' + confirm_disallow: 'וידוא: האם לאסור את הקישורים שנבחרו?' + confirm_disallow_provider: 'וידוא: האם לאסור את הספקים שנבחרו?' description_html: בקישוריות אלה נעשה כרגע שימוש על ידי חשבונות רבים שהשרת שלך רואה הודעות מהם. זה עשוי לסייע למשתמשיך לברר מה קורה בעולם. שום קישוריות לא יוצגו עד שתאשרו את המפרסם. ניתן גם לאפשר או לדחות קישוריות ספציפיות. disallow: לא לאשר קישורית disallow_provider: לא לאשר מפרסם @@ -934,6 +941,10 @@ he: statuses: allow: הרשאת הודעה allow_account: הרשאת מחבר/ת + confirm_allow: 'וידוא: האם לאשר את הסטטוסים שנבחרו?' + confirm_allow_account: 'וידוא: האם לאשר את החשבונות שנבחרו?' + confirm_disallow: 'וידוא: האם לאסור את הסטטוסים שנבחרו?' + confirm_disallow_account: 'וידוא: האם לאסור את החשבונות שנבחרו?' description_html: אלו הן הודעות שהשרת שלך מכיר וזוכות להדהודים וחיבובים רבים כרגע. זה עשוי למשתמשיך החדשים והחוזרים למצוא עוד נעקבים. ההודעות לא מוצגות עד שיאושר המחבר/ת, והמחבר/ת יאשרו שחשבונים יומלץ לאחרים. ניתן לאשר או לדחות הודעות ספציפיות. disallow: לדחות הודעה disallow_account: לא לאשר מחבר/ת @@ -1301,7 +1312,7 @@ he: statuses: back_to_filter: חזרה לפילטר batch: - remove: הסרה מפילטר + remove: הסרה ממסנן index: hint: סנן זה חל באופן של בחירת הודעות בודדות ללא תלות בקריטריונים אחרים. תוכלו להוסיף עוד הודעות לסנן זה ממנשק הווב. title: הודעות שסוננו diff --git a/config/locales/it.yml b/config/locales/it.yml index 52fca95c39..1664100101 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -907,16 +907,16 @@ it: trends: allow: Consenti approved: Approvato - confirm_allow: Si è sicuri di voler consentire i tag selezionati? - confirm_disallow: Si è sicuri di non voler consentire i tag selezionati? + confirm_allow: Sei sicuro di voler consentire i tag selezionati? + confirm_disallow: Sei sicuro di non voler consentire i tag selezionati? disallow: Non consentire links: allow: Consenti link allow_provider: Consenti editore - confirm_allow: Si è sicuri di voler consentire i link selezionati? - confirm_allow_provider: Si è sicuri di voler consentire i provider selezionati? - confirm_disallow: Si è sicuri di non voler consentire i link selezionati? - confirm_disallow_provider: Si è sicuri di non voler consentire i provider selezionati? + confirm_allow: Sei sicuro di voler consentire i link selezionati? + confirm_allow_provider: Sei sicuro di voler consentire i provider selezionati? + confirm_disallow: Sei sicuro di non voler consentire i link selezionati? + confirm_disallow_provider: Sei sicuro di non voler consentire i provider selezionati? description_html: Questi sono collegamenti che attualmente vengono molto condivisi dagli account di cui il server vede i post. Può aiutare i tuoi utenti a scoprire cosa sta succedendo nel mondo. Nessun link viene visualizzato pubblicamente finché non si approva chi lo pubblica. È anche possibile permettere o rifiutare i singoli collegamenti. disallow: Non consentire link disallow_provider: Non consentire editore @@ -940,10 +940,10 @@ it: statuses: allow: Consenti post allow_account: Consenti autore - confirm_allow: Si è sicuri di voler consentire gli stati selezionati? - confirm_allow_account: Si è sicuri di voler consentire gli account selezionati? - confirm_disallow: Si è sicuri di non voler consentire gli stati selezionati? - confirm_disallow_account: Si è sicuri di non voler consentire gli account selezionati? + confirm_allow: Sei sicuro di voler consentire gli stati selezionati? + confirm_allow_account: Sei sicuro di voler consentire gli account selezionati? + confirm_disallow: Sei sicuro di non voler consentire gli stati selezionati? + confirm_disallow_account: Sei sicuro di non voler consentire gli account selezionati? description_html: Questi sono post noti al tuo server che sono attualmente molto condivisi e preferiti. Può aiutare i tuoi utenti (nuovi e non) a trovare più persone da seguire. Nessun post viene visualizzato pubblicamente fino a quando si approva l'autore, e l'autore permette che il suo account sia suggerito ad altri. È anche possibile permettere o rifiutare singoli post. disallow: Non consentire post disallow_account: Non consentire autore @@ -976,7 +976,7 @@ it: used_by_over_week: one: Usato da una persona nell'ultima settimana other: Usato da %{count} persone nell'ultima settimana - title: Raccomandazioni e Tendenze + title: Raccomandazioni & Tendenze trending: Di tendenza warning_presets: add_new: Aggiungi nuovo diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 1cfcdcc0e6..03bfa646ba 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -414,8 +414,10 @@ ko: new: create: 도메인 추가하기 resolve: 도메인 검사 + title: 새 이메일 도메인 차단 not_permitted: 허용하지 않음 resolved_through_html: "%{domain}을 통해 리졸빙됨" + title: 차단된 이메일 도메인 export_domain_allows: new: title: 도메인 허용 목록 불러오기 @@ -1004,7 +1006,9 @@ ko: guide_link_text: 누구나 기여할 수 있습니다. sensitive_content: 민감한 내용 application_mailer: + notification_preferences: 이메일 설정 변경 salutation: "%{name} 님," + settings: '이메일 설정 변경: %{link}' unsubscribe: 구독 해제 view: '보기:' view_profile: 프로필 보기 @@ -1024,6 +1028,7 @@ ko: hint_html: 하나만 더! 당신이 사람인지 확인이 필요합니다 (스팸 계정을 거르기 위해서 필요한 과정입니다). 아래에 있는 CAPTCHA를 풀고 "계속"을 누르세요 title: 보안 체크 confirmations: + awaiting_review: 이메일 주소가 확인되었습니다! 이제 %{domain} 스태프가 가입을 검토할 것입니다. 계정이 승인되면 이메일을 받게 됩니다! awaiting_review_title: 가입 신청을 검토 중입니다 clicking_this_link: 이 링크를 클릭 login_link: 로그인 @@ -1051,6 +1056,7 @@ ko: or_log_in_with: 다른 방법으로 로그인 하려면 privacy_policy_agreement_html: 개인정보처리방침을 읽고 동의합니다 progress: + confirm: 이메일 확인 details: 세부사항 review: 심사 결과 rules: 규정을 수락합니다. @@ -1072,6 +1078,7 @@ ko: security: 보안 set_new_password: 새 암호 설정 setup: + email_below_hint_html: 스팸 폴더를 체크해보거나, 새로 요청할 수 있습니다. 이메일을 잘못 입력한 경우 수정할 수 있습니다. email_settings_hint_html: "%{email}을 인증하기 위해 우리가 보낸 링크를 누르세요. 여기서 기다리겠습니다." link_not_received: 링크를 못 받으셨나요? title: 수신함 확인하기 @@ -1351,6 +1358,7 @@ ko: authentication_methods: otp: 2단계 인증 앱 password: 암호 + sign_in_token: 이메일 보안 코드 webauthn: 보안 키 description_html: 확인되지 않은 활동이 보인다면, 암호를 바꾸거나 2단계 인증을 활성화 하는 것을 고려해 보세요. empty: 인증 이력이 존재하지 않습니다 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 44f7c7ddfc..dfcfcf1271 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -669,6 +669,7 @@ lt: title: Tendencingos saitažodžiai trendable: Gali pasirodyti tendencijose trending_rank: 'Tendencinga #%{rank}' + title: Rekomendacijos ir tendencijos trending: Tendencinga warning_presets: add_new: Pridėti naują @@ -887,7 +888,7 @@ lt: errors: too_large: Failas per didelis. modes: - merge: Sulieti + merge: Sujungti merge_long: Išsaugoti esančius įrašus ir pridėti naujus overwrite: Perrašyti overwrite_long: Pakeisti senus įrašus naujais @@ -931,6 +932,9 @@ lt: description_html: Jei pastebėjei neatpažįstamą veiklą, apsvarstyk galimybę pakeisti slaptažodį ir įjungti dvigubą tapatybės nustatymą. empty: Tapatybės nustatymas istorijos nėra title: Tapatybės nustatymo istorija + mail_subscriptions: + unsubscribe: + success_html: Daugiau negausi %{type} „Mastodon“ domene %{domain} į savo el. paštą %{email}. media_attachments: validations: images_and_video: Negalima pridėti video prie statuso, kuris jau turi nuotrauką @@ -964,6 +968,8 @@ lt: subject: "%{name} pakėlė tavo įrašą" title: Naujas pakėlimas notifications: + administration_emails: Administratoriaus el. laiško pranešimai + email_events: Įvykiai, skirti el. laiško pranešimams email_events_hint: 'Pasirink įvykius, apie kuriuos nori gauti pranešimus:' number: human: @@ -1061,6 +1067,7 @@ lt: featured_tags: Rodomi saitažodžiai import: Importuoti migrate: Paskyros migracija + notifications: El. laiško pranešimai preferences: Nuostatos profile: Viešas profilis relationships: Sekimai ir sekėjai @@ -1205,6 +1212,7 @@ lt: invalid_otp_token: Netinkamas dviejų veiksnių kodas otp_lost_help_html: Jei praradai prieigą prie abiejų, gali susisiek su %{email} rate_limited: Per daug tapatybės nustatymo bandymų. Bandyk dar kartą vėliau. + seamless_external_login: Esi prisijungęs (-usi) per išorinę paslaugą, todėl slaptažodžio ir el. pašto nustatymai nepasiekiami. signed_in_as: 'Prisijungta kaip:' verification: extra_instructions_html: Patarimas: nuoroda tavo svetainėje gali būti nematoma. Svarbi dalis – tai, kad rel="me" neleidžia apsimesti interneto svetainėse, kuriose yra naudotojų sukurto turinio. Vietoj to gali naudoti net nuorodą puslapio antraštėje esančią žymę a, tačiau HTML turi būti pasiekiamas nevykdant JavaScript. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index e5af5c1c64..a845c1fbb6 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1448,6 +1448,7 @@ nn: mention: e-postar om omtaler reblog: e-postar om framhevingar resubscribe_html: Om du har avslutta abonnementet ved ein feil, kan du abonnera på nytt i innstillingar for e-postvarsling. + success_html: Du vil ikkje lenger få %{type} frå Mastodon på %{domain} til e-posten på %{email}. title: Meld av media_attachments: validations: @@ -1528,6 +1529,8 @@ nn: update: subject: "%{name} redigerte et innlegg" notifications: + administration_emails: Epostvarsel for administrator + email_events: Hendingar for epostvarsel email_events_hint: 'Velg hendelser som du vil motta varslinger for:' number: human: @@ -1686,6 +1689,7 @@ nn: import: Hent inn import_and_export: Importer og eksporter migrate: Kontoflytting + notifications: Epostvarsel preferences: Innstillingar profile: Profil relationships: Fylgjar og fylgjarar @@ -1932,6 +1936,7 @@ nn: invalid_otp_token: Ugyldig tostegskode otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email} rate_limited: For mange autentiseringsforsøk, prøv igjen seinare. + seamless_external_login: Du er logga inn gjennom ei ekstern tenest, så passord- og epostinnstillingar er ikkje tilgjengelege. signed_in_as: 'Logga inn som:' verification: extra_instructions_html: Tips: Linken på nettsida di kan vera usynleg. Den viktige delen er rel="me", som på nettstader med brukargenerert innhald vil hindra at andre kan låst som dei er deg. Du kan til og med bruka link i staden for a i toppteksten til sida, men HTML-koden må vera tilgjengeleg utan å måtte køyra JavaScript. diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 95a334bb3a..9e2becc52f 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -73,8 +73,8 @@ he: filters: action: בחרו איזו פעולה לבצע כאשר הודעה מתאימה למסנן actions: - hide: הסתר את התוכן המסונן, כאילו לא היה קיים - warn: הסתר את התוכן המסונן מאחורי אזהרה עם כותרת המסנן + hide: הסתרת התוכן המסונן, כאילו לא היה קיים + warn: הסתרת התוכן המסונן מאחורי אזהרה עם כותרת המסנן form_admin_settings: activity_api_enabled: מספר ההודעות שפורסמו מקומית, משתמשים פעילים, והרשמות חדשות בדליים שבועיים app_icon: WEBP, PNG, GIF או JPG. גובר על אייקון ברירת המחדל ביישומון על מכשירים ניידים ומחליף אותו באייקון נבחר. diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 6782551f13..52d81df60c 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -31,6 +31,7 @@ tr: created_msg: Denetim notu başarıyla oluşturuldu! destroyed_msg: Denetim notu başarıyla yok edildi! accounts: + add_email_domain_block: E-posta alan adını engelle approve: Onayla approved_msg: "%{username} adlı kullanıcının kayıt başvurusu başarıyla onaylandı" are_you_sure: Emin misin? @@ -57,6 +58,7 @@ tr: demote: Düşür destroyed_msg: "%{username} adlı kullanıcının verilerinin silinmesi sıraya alındı" disable: Dondur + disable_sign_in_token_auth: E-posta token doğrulamayı devre dışı bırak disable_two_factor_authentication: 2 aşamalı doğrulamayı kapat disabled: Kapalı display_name: Görünen isim @@ -65,6 +67,7 @@ tr: email: E-posta email_status: E-posta durumu enable: Etkinleştir + enable_sign_in_token_auth: E-posta token doğrulamayı etkinleştir enabled: Etkin enabled_msg: "%{username} hesabı başarıyla çözüldü" followers: Takipçi @@ -129,6 +132,7 @@ tr: resubscribe: Yeniden abone ol role: Rol search: Ara + search_same_email_domain: Aynı e-posta alan adına sahip diğer kullanıcılar search_same_ip: Aynı IP adresine sahip diğer kullanıcılar security: Güvenlik security_measures: @@ -169,21 +173,26 @@ tr: approve_appeal: İtirazı Onayla approve_user: Kullanıcıyı Onayla assigned_to_self_report: Raporu Ata + change_email_user: Kullanıcı E-postasını Değiştir change_role_user: Kullanıcının Rolünü Değiştir confirm_user: Kullanıcıyı Onayla create_account_warning: Uyarı Oluştur create_announcement: Duyuru Oluştur + create_canonical_email_block: E-posta Engeli Oluştur create_custom_emoji: Özel İfade Oluştur create_domain_allow: İzin Verilen Alan Adı Oluştur create_domain_block: Engellenen Alan Adı Oluştur + create_email_domain_block: E-Posta Alan Adı Engeli Oluştur create_ip_block: IP kuralı oluştur create_unavailable_domain: Mevcut Olmayan Alan Adı Oluştur create_user_role: Rol Oluştur demote_user: Kullanıcıyı Düşür destroy_announcement: Duyuru Sil + destroy_canonical_email_block: E-Posta Engelini Sil destroy_custom_emoji: Özel İfadeyi Sil destroy_domain_allow: İzin Verilen Alan Adını Sil destroy_domain_block: Engellenen Alan Adını Sil + destroy_email_domain_block: E-posta Alan Adı Engelini Sil destroy_instance: Alan adını temizle destroy_ip_block: IP kuralını sil destroy_status: Durumu Sil @@ -191,8 +200,10 @@ tr: destroy_user_role: Rolü Kaldır disable_2fa_user: 2AD Kapat disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak + disable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı Devre Dışı Bırak disable_user: Kullanıcıyı Devre Dışı Bırak enable_custom_emoji: Özel İfadeyi Etkinleştir + enable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı Etkinleştir enable_user: Kullanıcıyı Etkinleştir memorialize_account: Hesabı Anıtlaştır promote_user: Kullanıcıyı Yükselt @@ -222,20 +233,26 @@ tr: approve_appeal_html: "%{name}, %{target} kullanıcısının yönetim kararına itirazını kabul etti" approve_user_html: "%{name}, %{target} konumundan kaydı onayladı" assigned_to_self_report_html: "%{name} kendilerine %{target} adlı raporu verdi" + change_email_user_html: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi" change_role_user_html: "%{name}, %{target} kişisinin rolünü değiştirdi" + confirm_user_html: "%{name} %{target} kullanıcısının e-posta adresini onayladı" create_account_warning_html: "%{name} %{target} 'a bir uyarı gönderdi" create_announcement_html: "%{name}, yeni %{target} duyurusunu oluşturdu" + create_canonical_email_block_html: "%{name}, %{target} karmasıyla e-posta engelledi" create_custom_emoji_html: "%{name} yeni %{target} ifadesini yükledi" create_domain_allow_html: "%{name}, %{target} alan adıyla birliğe izin verdi" create_domain_block_html: "%{name}, %{target} alan adını engelledi" + create_email_domain_block_html: "%{name}, %{target} e-posta alan adını engelledi" create_ip_block_html: "%{name}, %{target} IP adresi için kural oluşturdu" create_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı durdurdu" create_user_role_html: "%{name}, %{target} rolünü oluşturdu" demote_user_html: "%{name}, %{target} kullanıcısını düşürdü" destroy_announcement_html: "%{name}, %{target} duyurusunu sildi" + destroy_canonical_email_block_html: "%{name}, %{target} karmasıyla e-posta engelini kaldırdı" destroy_custom_emoji_html: "%{name}, %{target} ifadesini sildi" destroy_domain_allow_html: "%{name}, %{target} alan adıyla birlik iznini kaldırdı" destroy_domain_block_html: "%{name}, %{target} alan adı engelini kaldırdı" + destroy_email_domain_block_html: "%{name}, %{target} e-posta alan adı engelini kaldırdı" destroy_instance_html: "%{name}, %{target} alan adını temizledi" destroy_ip_block_html: "%{name}, %{target} IP adresi kuralını sildi" destroy_status_html: "%{name}, %{target} kullanıcısının gönderisini kaldırdı" @@ -243,8 +260,10 @@ tr: destroy_user_role_html: "%{name}, %{target} rolünü sildi" disable_2fa_user_html: "%{name}, %{target} kullanıcısının iki aşamalı doğrulama gereksinimini kapattı" disable_custom_emoji_html: "%{name}, %{target} emojisini devre dışı bıraktı" + disable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı devre dışı bıraktı" disable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı devre dışı bıraktı" enable_custom_emoji_html: "%{name}, %{target} emojisini etkinleştirdi" + enable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı etkinleştirdi" enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi" memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü" promote_user_html: "%{name}, %{target} kullanıcısını yükseltti" @@ -252,6 +271,7 @@ tr: reject_user_html: "%{name}, %{target} konumundan kaydı reddetti" remove_avatar_user_html: "%{name}, %{target} kullanıcısının avatarını kaldırdı" reopen_report_html: "%{name}, %{target} şikayetini yeniden açtı" + resend_user_html: "%{name}, %{target} için doğrulama e-postasını tekrar gönderdi" reset_password_user_html: "%{name}, %{target} kullanıcısının parolasını sıfırladı" resolve_report_html: "%{name}, %{target} şikayetini çözdü" sensitive_account_html: "%{name}, %{target} kullanıcısının medyasını hassas olarak işaretledi" @@ -412,6 +432,7 @@ tr: attempts_over_week: one: Son haftada %{count} deneme other: Son haftada %{count} kayıt denemesi + created_msg: E-posta alan adı kara listeye başarıyla eklendi delete: Sil dns: types: @@ -420,8 +441,12 @@ tr: new: create: Alan adı ekle resolve: Alan adı çözümleme + title: Yeni e-posta kara liste girişi + no_email_domain_block_selected: Seçim yapılmadığından hiç bir e-posta alan adı engeli değiştirilmedi not_permitted: İzin verilmedi + resolved_dns_records_hint_html: Alan adı aşağıdaki MX alan adlarına çözümleniyor, ancak hiç biri nihayetinde e-posta kabulünden sorum değil. Bir MX alan adını engellemek, görünen alan adı farklı osa bile aynı MX alan adını kullanan e-posta adreslerinden gelen kayıtları engelleyecektir. Başlıca e-posta sağlayıcıları engellememek için dikkatli olun. resolved_through_html: "%{domain} aracılığıyla çözümlendi" + title: Engelli e-posta alan adları export_domain_allows: new: title: Alan adı engellerini içe aktar @@ -575,6 +600,7 @@ tr: resolve_description_html: Bildirilen hesap için bir şey yapılmayacak, eylem kaydedilmeyecek ve bildirim kapatılacak. silence_description_html: Bu hesap sadece halihazırda takip edenler ve elle bakanlarca görünecek, böylece erişimi ciddi bir şekilde kısıtlanacak. Her zaman geri alınabilir. Bu hesaba yönelik tüm bildirimleri kapatır. suspend_description_html: Bu hesap ve tüm içeriği erişilmez olacak ve nihayetinde silinecek ve bu hesapla etkileşim mümkün olmayacaktır. 30 gün içinde geri alınabilir. Bu hesaba yönelik tüm bildiriimleri kapatır. + 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: @@ -639,6 +665,7 @@ tr: delete_data_html: İlgili sürede askıdan alınması kaldırılmazsa @%{acct} hesabının profilini ve içeriğini şu andan itibaren 30 gün içinde sil preview_preamble_html: "@%{acct} aşağıdaki içerikle bir uyarı alacaktır:" record_strike_html: "@%{acct} hesabına karşı bir eylem kaydet, böylece bu hesabın gelecekteki ihlallerini üst makama taşımanıza yardımcı olacaktır" + send_email_html: "@%{acct} adlı kullanıcıya uyarı e-maili gönder" warning_placeholder: İsteğe bağlı ek nedenden denetim eylemi. target_origin: Şikayet edilen hesabın kökeni title: Şikayetler @@ -678,6 +705,7 @@ tr: manage_appeals: İtirazları Yönetme manage_appeals_description: Kullanıcıların denetleme eylemlerine itirazları gözden geçirmesine izin verir manage_blocks: Engelleri Yönetme + manage_blocks_description: Kullanıcıların e-posta sağlayıcıları ve IP adreslerini engellemesine izin verir manage_custom_emojis: Özel İfadeleri Yönetme manage_custom_emojis_description: Kullanıcıların sunucudaki özel ifadeleri yönetmesine izin verir manage_federation: Birleştirme Yönetme @@ -695,6 +723,7 @@ tr: manage_taxonomies: Kategorileri Yönetme manage_taxonomies_description: Kullanıcıların öne çıkan içeriği incelemesine ve etiket ayarlarını güncellemesine izin verir manage_user_access: Kullanıcı Erişimini Yönetme + manage_user_access_description: Kullanıcıların, diğer kullanıcıların iki aşamalı yetkilendirme, e-posta adreslerini değiştirme ve parolalarını sıfırlama eylemlerini etkisizleştirmesine izin verir manage_users: Kullanıcıları Yönetme manage_users_description: Kullanıcıların, diğer kullanıcıların ayrıntılarını görüntülemesine ve onlara karşı denetim eylemleri gerçekleştirmesine izin verir manage_webhooks: Webhookları Yönetme @@ -769,6 +798,7 @@ tr: destroyed_msg: Site yüklemesi başarıyla silindi! software_updates: critical_update: Kritik — lütfen hemen güncelleyin + description: Son düzeltme ve özelliklerden yararlanmak için Mastodon kurulumunu güncel tutmanızı öneriyoruz. Üstelik güvenlik sorunlarından kaçınmak için Mastodon'u zamanında güncellemek kritiktir. Bu nedenlerle Mastodon her 30 dakikada bir güncellemeleri denetler ve e-posta bildirim seçeneğinize göre size haber verir. documentation_link: Daha fazlası release_notes: Sürüm notları title: Mevcut güncellemeler @@ -1031,7 +1061,9 @@ tr: guide_link_text: Herkes katkıda bulunabilir. sensitive_content: Hassas içerik application_mailer: + notification_preferences: E-posta tercihlerini değiştir salutation: "%{name}," + settings: 'E-posta tercihlerini değiştir: %{link}' unsubscribe: Abonelikten çık view: 'Görüntüle:' view_profile: Profili görüntüle @@ -1051,6 +1083,7 @@ tr: hint_html: Sadece bir şey daha! Sizin bir insan olduğunuzu doğrulamamız gerekiyor (bu, spam'i dışarıda tutabilmemiz içindir!). Aşağıdaki CAPTCHA'yı çözün ve "Devam Et" düğmesini tıklayın. title: Güvenlik denetimi confirmations: + awaiting_review: E-posta adresiniz doğrulandı! %{domain} çalışanları şimdi kaydınızı inceliyorlar. Hesabınızı onayladıklarında bir e-posta alacaksınız! awaiting_review_title: Kaydınız inceleniyor clicking_this_link: bu bağlantıyı tıklamayı login_link: oturum aç @@ -1058,6 +1091,7 @@ tr: redirect_to_app_html: "%{app_name} uygulamasına yönlendirileceksiniz. Eğer yönlendirme olmazsa, %{clicking_this_link} veya uygulamaya geri dönmeyi deneyin." registration_complete: "%{domain} sunucusunda kaydınız şimdi tamamlandı!" welcome_title: Hoşgeldin %{name}! + wrong_email_hint: Eğer bu e-posta adresi doğru değilse, hesap ayarlarında değiştirebilirsiniz. delete_account: Hesabı sil delete_account_html: Hesabını silmek istersen, buradan devam edebilirsin. Onay istenir. description: @@ -1078,6 +1112,7 @@ tr: or_log_in_with: 'Veya şununla oturum açın:' privacy_policy_agreement_html: Gizlilik politikasını okudum ve kabul ettim progress: + confirm: E-postanızı onaylayın details: Ayrıntılarınız review: İncelememiz rules: Kabul kuralları @@ -1099,8 +1134,10 @@ tr: security: Güvenlik set_new_password: Yeni parola belirle setup: + email_below_hint_html: İstenmeyenler dizininize bakın veya başka bir onay bağlantısı isteyin. Eğer yanlışsa e-posta adresinizi de düzeltebilirsiniz. email_settings_hint_html: "%{email} adresinizi doğrulamak için size gönderdiğimiz bağlantıya tıklayın. Biz burada bekliyoruz." link_not_received: Bağlantı gelmedi mi? + new_confirmation_instructions_sent: Birkaç dakika içerisinde onaylama bağlantısını içeren yeni bir e-posta alacaksınız! title: Gelen kutunuzu kontrol edin sign_in: preamble_html: "%{domain} kimlik bilgilerinizi kullanarak giriş yapın. Eğer hesabınız başka bir sunucuda barındırılıyorsa, burada giriş yapamazsınız." @@ -1111,7 +1148,9 @@ tr: title: "%{domain} için kurulumunuzu yapalım." status: account_status: Hesap durumu + confirming: E-posta onaylamanın tamamlanması bekleniyor. functional: Hesabınız tamamen kullanıma hazır. + pending: Başvurunuz personelimiz tarafından gözden geçirilmeyi beklemektedir. Bu biraz zaman alabilir. Başvurunuz onaylanırsa bir e-posta alacaksınız. redirecting_to: Hesabınız aktif değil çünkü şu anda %{acct} adresine yönlendirilmektedir. self_destruct: "%{domain} kapandığı için, hesabınıza sadece kısıtlı erişiminiz olacak." view_strikes: Hesabınıza yönelik eski eylemleri görüntüleyin @@ -1154,6 +1193,9 @@ tr: before: 'Devam etmeden önce, lütfen bu notları dikkatlice okuyun:' caches: Diğer sunucular tarafından ön belleğe alınan içerik kalabilir data_removal: Gönderileriniz ve diğer verileriniz kalıcı olarak silinecektir + email_change_html: Hesabınızı silmeden e-posta adresinizi değiştirebilirsiniz + email_contact_html: Eğer hala ulaşmazsa, yardım almak için %{email} adresine e-posta gönderebilirsiniz + email_reconfirmation_html: Eğer onaylama e-postası ulaşmıyorsa, tekrar talep edebilirsiniz irreversible: Hesabınızı geri yükleyemeyecek ya da yeniden etkinleştiremeyeceksiniz more_details_html: Daha fazla ayrıntı için, gizlilik politikasına göz atın. username_available: Kullanıcı adınız tekrar kullanılabilir olacaktır @@ -1386,6 +1428,7 @@ tr: authentication_methods: otp: iki aşamalı kimlik doğrulama uygulaması password: parola + sign_in_token: e-posta güvenlik kodu webauthn: güvenlik anahtarları description_html: Eğer tanımadığınız bir faaliyet görüyorsanız, parolanızı değiştirmeyi ve iki aşamalı kimlik doğrulamayı etkinleştirmeyi düşünün. empty: Kimlik doğrulama geçmişi yok @@ -1396,6 +1439,16 @@ tr: unsubscribe: action: Evet, abonelikten çık complete: Abonelikten çık + confirmation_html: '%{domain} üzerindeki Mastodon için %{type} almayı durdurarak %{email} adresinize aboneliğinizi iptal etmek istediğinizden emin misiniz? e-posta bildirim ayarlarınızdan her zaman yeniden abone olabilirsiniz.' + emails: + notification_emails: + favourite: favori bildirim e-postaları + follow: takip bildirim e-postaları + follow_request: takip isteği bildirim e-postaları + mention: bahsetme bildirim e-postaları + reblog: öne çıkanlar bildirim e-postaları + resubscribe_html: Abonelikten yanlışlıkla çıktıysanız, e-posta bildirim ayarlarınızdan yeniden abone olabilirsiniz. + success_html: Artık %{email} adresindeki e-postanıza %{domain} üzerindeki Mastodon için %{type} almayacaksınız. title: Abonelikten çık media_attachments: validations: @@ -1476,6 +1529,8 @@ tr: update: subject: "%{name} bir gönderiyi düzenledi" notifications: + administration_emails: Yönetici e-posta bildirimleri + email_events: E-posta bildirimi etkinlikleri email_events_hint: 'Bildirim almak istediğiniz olayları seçin:' number: human: @@ -1634,6 +1689,7 @@ tr: import: İçe aktar import_and_export: İçe ve dışa aktar migrate: Hesap taşıma + notifications: E-posta bildirimleri preferences: Tercihler profile: Profil relationships: Takip edilenler ve takipçiler @@ -1880,6 +1936,7 @@ tr: invalid_otp_token: Geçersiz iki adımlı doğrulama kodu otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz rate_limited: Çok fazla kimlik doğrulama denemesi. Daha sonra tekrar deneyin. + seamless_external_login: Harici bir servis aracılığıyla oturum açtınız, bu nedenle parola ve e-posta ayarları mevcut değildir. signed_in_as: 'Oturum açtı:' verification: extra_instructions_html: İpucu: Web sitenizdeki bağlantı görünmez olabilir. Önemli olan, kullanıcı tarafından oluşturulan içeriğe sahip web sitelerinde kimliğe bürünmeyi önleyen rel="me"'dir. Sayfa başlığında a yerine bir bağlantı etiketi de kullanabilirsiniz, ancak HTML'ye JavaScript çalıştırılmadan erişilebilir olmalıdır. diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 3297387ff7..50f8d00a54 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -302,12 +302,10 @@ RSpec.describe MediaAttachment, :attachment_processing do it 'queues CacheBusterWorker jobs' do original_path = media.file.path(:original) small_path = media.file.path(:small) - thumbnail_path = media.thumbnail.path(:original) expect { media.destroy } .to enqueue_sidekiq_job(CacheBusterWorker).with(original_path) .and enqueue_sidekiq_job(CacheBusterWorker).with(small_path) - .and enqueue_sidekiq_job(CacheBusterWorker).with(thumbnail_path) end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 4755500fc4..0f3e25576e 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -182,30 +182,30 @@ RSpec.describe User do end end - describe 'blacklist' do + describe 'email domains denylist integration' do around do |example| - old_blacklist = Rails.configuration.x.email_blacklist + original = Rails.configuration.x.email_domains_denylist - Rails.configuration.x.email_domains_blacklist = 'mvrht.com' + Rails.configuration.x.email_domains_denylist = 'mvrht.com' example.run - Rails.configuration.x.email_domains_blacklist = old_blacklist + Rails.configuration.x.email_domains_denylist = original end - it 'allows a non-blacklisted user to be created' do + it 'allows a user with an email domain that is not on the denylist to be created' do user = described_class.new(email: 'foo@example.com', account: account, password: password, agreement: true) expect(user).to be_valid end - it 'does not allow a blacklisted user to be created' do + it 'does not allow a user with an email domain on the deylist to be created' do user = described_class.new(email: 'foo@mvrht.com', account: account, password: password, agreement: true) expect(user).to_not be_valid end - it 'does not allow a subdomain blacklisted user to be created' do + it 'does not allow a user with an email where the subdomain is on the denylist to be created' do user = described_class.new(email: 'foo@mvrht.com.topdomain.tld', account: account, password: password, agreement: true) expect(user).to_not be_valid @@ -374,43 +374,43 @@ RSpec.describe User do end end - describe 'whitelist' do + describe 'allowlist integration' do around do |example| - old_whitelist = Rails.configuration.x.email_domains_whitelist + original = Rails.configuration.x.email_domains_allowlist - Rails.configuration.x.email_domains_whitelist = 'mastodon.space' + Rails.configuration.x.email_domains_allowlist = 'mastodon.space' example.run - Rails.configuration.x.email_domains_whitelist = old_whitelist + Rails.configuration.x.email_domains_allowlist = original end - it 'does not allow a user to be created unless they are whitelisted' do + it 'does not allow a user to be created when their email is not on the allowlist' do user = described_class.new(email: 'foo@example.com', account: account, password: password, agreement: true) expect(user).to_not be_valid end - it 'allows a user to be created if they are whitelisted' do + it 'allows a user to be created when their email is on the allowlist' do user = described_class.new(email: 'foo@mastodon.space', account: account, password: password, agreement: true) expect(user).to be_valid end - it 'does not allow a user with a whitelisted top domain as subdomain in their email address to be created' do + it 'does not allow a user with an email subdomain included on the top level domain allowlist to be created' do user = described_class.new(email: 'foo@mastodon.space.userdomain.com', account: account, password: password, agreement: true) expect(user).to_not be_valid end - context 'with a blacklisted subdomain' do + context 'with a subdomain on the denylist' do around do |example| - old_blacklist = Rails.configuration.x.email_blacklist + original = Rails.configuration.x.email_domains_denylist example.run - Rails.configuration.x.email_domains_blacklist = old_blacklist + Rails.configuration.x.email_domains_denylist = original end - it 'does not allow a user to be created with a specific blacklisted subdomain even if the top domain is whitelisted' do - Rails.configuration.x.email_domains_blacklist = 'blacklisted.mastodon.space' + it 'does not allow a user to be created with an email subdomain on the denylist even if the top domain is on the allowlist' do + Rails.configuration.x.email_domains_denylist = 'denylisted.mastodon.space' - user = described_class.new(email: 'foo@blacklisted.mastodon.space', account: account, password: password) + user = described_class.new(email: 'foo@denylisted.mastodon.space', account: account, password: password) expect(user).to_not be_valid end end diff --git a/spec/requests/log_out_spec.rb b/spec/requests/log_out_spec.rb new file mode 100644 index 0000000000..62ca1ac547 --- /dev/null +++ b/spec/requests/log_out_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Log Out' do + include RoutingHelper + + describe 'DELETE /auth/sign_out' do + let(:user) { Fabricate(:user) } + + before do + sign_in user + end + + it 'Logs out the user and redirect' do + delete '/auth/sign_out' + + expect(response).to redirect_to('/auth/sign_in') + end + + it 'Logs out the user and return a page to redirect to with a JSON request' do + delete '/auth/sign_out', headers: { 'HTTP_ACCEPT' => 'application/json' } + + expect(response).to have_http_status(200) + expect(response.media_type).to eq 'application/json' + + expect(body_as_json[:redirect_to]).to eq '/auth/sign_in' + end + end +end diff --git a/spec/services/accept_notification_request_service_spec.rb b/spec/services/accept_notification_request_service_spec.rb new file mode 100644 index 0000000000..bf67a52225 --- /dev/null +++ b/spec/services/accept_notification_request_service_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AcceptNotificationRequestService do + subject { described_class.new } + + let(:notification_request) { Fabricate(:notification_request) } + + describe '#call' do + it 'destroys the notification request, creates a permission, and queues a worker' do + expect { subject.call(notification_request) } + .to change { NotificationRequest.exists?(notification_request.id) }.to(false) + .and change { NotificationPermission.exists?(account_id: notification_request.account_id, from_account_id: notification_request.from_account_id) }.to(true) + + expect(UnfilterNotificationsWorker).to have_enqueued_sidekiq_job(notification_request.account_id, notification_request.from_account_id) + end + end +end diff --git a/spec/system/log_out_spec.rb b/spec/system/log_out_spec.rb new file mode 100644 index 0000000000..376f19712e --- /dev/null +++ b/spec/system/log_out_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Log out' do + include ProfileStories + + before do + as_a_logged_in_user + end + + describe 'Logging out from the preferences' do + it 'logs the user out' do + visit settings_path + + within '.sidebar' do + click_on 'Logout' + end + + expect(page).to have_title(I18n.t('auth.login')) + expect(page).to have_current_path('/auth/sign_in') + end + end + + describe 'Logging out from the JS app', :js, :streaming do + it 'logs the user out' do + visit root_path + + within '.navigation-bar' do + click_on 'Menu' + end + + within '.dropdown-menu' do + click_on 'Logout' + end + + click_on 'Log out' + + expect(page).to have_title(I18n.t('auth.login')) + expect(page).to have_current_path('/auth/sign_in') + end + end +end diff --git a/spec/validators/email_mx_validator_spec.rb b/spec/validators/email_mx_validator_spec.rb index bc26be8729..23a5f768ef 100644 --- a/spec/validators/email_mx_validator_spec.rb +++ b/spec/validators/email_mx_validator_spec.rb @@ -9,10 +9,10 @@ describe EmailMxValidator do context 'with an e-mail domain that is explicitly allowed' do around do |block| - tmp = Rails.configuration.x.email_domains_whitelist - Rails.configuration.x.email_domains_whitelist = 'example.com' + tmp = Rails.configuration.x.email_domains_allowlist + Rails.configuration.x.email_domains_allowlist = 'example.com' block.call - Rails.configuration.x.email_domains_whitelist = tmp + Rails.configuration.x.email_domains_allowlist = tmp end it 'does not add errors if there are no DNS records' do @@ -69,7 +69,7 @@ describe EmailMxValidator do expect(user.errors).to have_received(:add) end - it 'adds an error if the MX record is blacklisted' do + it 'adds an error if the MX record has an email domain block' do EmailDomainBlock.create!(domain: 'mail.example.com') configure_resolver( diff --git a/spec/validators/blacklisted_email_validator_spec.rb b/spec/validators/user_email_validator_spec.rb similarity index 96% rename from spec/validators/blacklisted_email_validator_spec.rb rename to spec/validators/user_email_validator_spec.rb index 86760df2e7..92da04ea39 100644 --- a/spec/validators/blacklisted_email_validator_spec.rb +++ b/spec/validators/user_email_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BlacklistedEmailValidator do +RSpec.describe UserEmailValidator do describe '#validate' do subject { described_class.new.validate(user) } diff --git a/spec/workers/unfilter_notifications_worker_spec.rb b/spec/workers/unfilter_notifications_worker_spec.rb new file mode 100644 index 0000000000..3f43b298a5 --- /dev/null +++ b/spec/workers/unfilter_notifications_worker_spec.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe UnfilterNotificationsWorker do + let(:recipient) { Fabricate(:account) } + let(:sender) { Fabricate(:account) } + + before do + # Populate multiple kinds of filtered notifications + private_message = Fabricate(:status, account: sender, visibility: :direct) + mention = Fabricate(:mention, account: recipient, status: private_message) + Fabricate(:notification, filtered: true, from_account: sender, account: recipient, type: :mention, activity: mention) + follow_request = sender.request_follow!(recipient) + Fabricate(:notification, filtered: true, from_account: sender, account: recipient, type: :follow_request, activity: follow_request) + end + + shared_examples 'shared behavior' do + it 'unfilters notifications and adds private messages to conversations' do + expect { subject } + .to change { recipient.notifications.where(from_account_id: sender.id).pluck(:filtered) }.from([true, true]).to([false, false]) + .and change { recipient.conversations.exists?(last_status_id: sender.statuses.first.id) }.to(true) + end + end + + describe '#perform' do + context 'with single argument (prerelease behavior)' do + subject { described_class.new.perform(notification_request.id) } + + let(:notification_request) { Fabricate(:notification_request, from_account: sender, account: recipient) } + + it_behaves_like 'shared behavior' + + it 'destroys the notification request' do + expect { subject } + .to change { NotificationRequest.exists?(notification_request.id) }.to(false) + end + end + + context 'with two arguments' do + subject { described_class.new.perform(recipient.id, sender.id) } + + it_behaves_like 'shared behavior' + end + end +end diff --git a/yarn.lock b/yarn.lock index 969e91c172..4e9d011598 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1579,10 +1579,10 @@ __metadata: languageName: node linkType: hard -"@csstools/color-helpers@npm:^4.2.1": - version: 4.2.1 - resolution: "@csstools/color-helpers@npm:4.2.1" - checksum: 10c0/72e11b186ad0f6019a9b4b3752e620fa798c2a40cf47e8cad565dff46e572c9342eb8cf804542d7886344a1e540555d77f20119ace6b2d8a45b6e5ef8a41685c +"@csstools/color-helpers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/color-helpers@npm:5.0.1" + checksum: 10c0/77fa3b7236eaa3f36dea24708ac0d5e53168903624ac5aed54615752a0730cd20773fda50e742ce868012eca8c000cc39688e05869e79f34714230ab6968d1e6 languageName: node linkType: hard @@ -1596,16 +1596,16 @@ __metadata: languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/css-color-parser@npm:3.0.0" +"@csstools/css-color-parser@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/css-color-parser@npm:3.0.1" dependencies: - "@csstools/color-helpers": "npm:^4.2.1" + "@csstools/color-helpers": "npm:^5.0.1" "@csstools/css-calc": "npm:^2.0.0" peerDependencies: "@csstools/css-parser-algorithms": ^3.0.0 "@csstools/css-tokenizer": ^3.0.0 - checksum: 10c0/9b56ba3b56691d2133f1d9b881131bfd9745024a79f825284109adac05578e15ae3eed0e99c98db162932d69770fc970b5b005996c32cdf7167af3418da263c3 + checksum: 10c0/8890a621f916cbbf49e749d4e85e934ce55c9f9c339abcc5f4a64bc165605a6e8dd3cad9d3bbc994d2419a3b38981dca84b93ae50aa91d492fb5f0f4c9d95969 languageName: node linkType: hard @@ -1673,33 +1673,33 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-color-function@npm:4.0.0" +"@csstools/postcss-color-function@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-color-function@npm:4.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ff0c0c44f5d17bc5e7ea287eff9c10ca334a84d086998a6b243a209f1795d32ba872357935f4176e5206b88dc8d2a204f452c13bc940540b7122e9e807511ac6 + checksum: 10c0/f0d3dd0677d381df54987d13ea63a59e911816d98a22eda7a5e55ca2908f52afc42fbffb73a8d25a18632b936dc38f6ada9f3e2dd7911cf775ce3718657420f4 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.0" +"@csstools/postcss-color-mix-function@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/120e96581834b2363df1fb653959dc243d93c01bcd70bf2e34418c20cd418a75f8b4e2e81da6955345619dcbb246e7d023f395521522bacb455583c15f61c677 + checksum: 10c0/ff76400d132c42d70f58b0908ab602b550b43720320288eb4ca1f185e7340c6f232b2a789ac94be255fc7bedc3c6125314d564297d23606fb2c91a1e2d79c40b languageName: node linkType: hard @@ -1742,46 +1742,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.0" +"@csstools/postcss-gamut-mapping@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/be1d7f4c96f3bbcb69ed4ccc2ff406a884ae7129e6542ab6800782fbfe4e077159352409961f2da8054ec9fabbf6ed211288f1004c96632a1f6b10bef332d880 + checksum: 10c0/3415c420463dd481a3ddf5b104f15661492d9aa3613c109f9b7354b2664965a92036045e157945348cf2c06e075b89a0c0c4f49c8a00d41c827c5b61de297cd0 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.0": - version: 5.0.0 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.0" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/04e29fd877a499b9570665aea5b23cd70635b538dd903b9f9706ddd85a2d9c93445aea4b6b7dbcf8986ab58b45bb502ec5060044d945096d0af2eb6cebadb88e + checksum: 10c0/a1c5d6bf308ff9e1972cb39030859cd135246f8f697e5d1278ddd8ed27ce53eb76b3e628acc64145290006f45140d0a4a65e5df71f131d3e6447f0e5d3301088 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-hwb-function@npm:4.0.0" +"@csstools/postcss-hwb-function@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-hwb-function@npm:4.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1aff69ca364417ac2b7ef1c737f88567f441bfd54d93d7b635e0ad605c61edcc2282bc0e2df73c83d1c6a24487e0acec34a4585d27d5f6027402aaea71696190 + checksum: 10c0/3247c3ab75d3cdb0ca80f7bb63d944ce933694ee9d7ee68aea11e727e883e0d35936b4a29e28700bda5eea2be26917a6c95c22a6b244e945cc558669f88b8a6e languageName: node linkType: hard @@ -1819,9 +1819,9 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.0" +"@csstools/postcss-light-dark-function@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.1" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" @@ -1829,7 +1829,7 @@ __metadata: "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/d0eb1e04854c4ae425c6aff51ce9d0db90e9457aea3307d3ed916f500d2b5a3314a25d3487ea893e7b006a34c0d155462566d6066c8c54baec33eb104891c6db + checksum: 10c0/4caf23781daa72f036a830b7fc2c07cde1122afd7bc7c6a291992b5264ea92c1fb22ec2ed684c5ce50e6e848f6d0ea39ef34a5679ea37a546b8db6eb555e3f80 languageName: node linkType: hard @@ -1933,18 +1933,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-oklab-function@npm:4.0.0" +"@csstools/postcss-oklab-function@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-oklab-function@npm:4.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/9e228049645e6a6baa77d6e7e35b3862f3e2e4836fbf2de43fa246d91f0efa36e7f18eae3f2b224c61e72628aaf14d4bff86c555fb06378d5e05e71dca92f9ec + checksum: 10c0/b4450fb792c505936e1f9290e8df5420e98ccba78fa1badc9261ff99bebff8cc3b1f050e518728de791acadba08b5e8c213d97b479f551b72b4f8a5793625998 languageName: node linkType: hard @@ -1959,18 +1959,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.0" +"@csstools/postcss-relative-color-syntax@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/d7ae180d746bd9778d8b9f74f8d644f4c6a98b29659423d4ee2b48f461e90a3e30b44dcf44a181ade083b6c6d1b0346b7b3e62fe67fdeaba59a13f050a19c7d1 + checksum: 10c0/95a0001549b0fcae6add7db6264d16183734a9dd94e54e9b606b0dcefbd96540d8917707eef2525a5024e4078ef039acfa05c2c1b309fe444a7fc1f1c05d6594 languageName: node linkType: hard @@ -1998,15 +1998,15 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-text-decoration-shorthand@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.0" +"@csstools/postcss-text-decoration-shorthand@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.1" dependencies: - "@csstools/color-helpers": "npm:^4.2.1" + "@csstools/color-helpers": "npm:^5.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/dedc98134648d5306e795e4176b2c39a578a237669562e7d934d0b0ac7411d37bab4065c8b0adfc075b57250daba62f045b86c79286b5f9be55502acef0d88c6 + checksum: 10c0/81950e248d6019c0066353895e0fa2a5c684b754c9af349218cb919534f5ebf79e5e9c7a10b3af1e9c56de2f246968de3b87a00d8c4102e5f88e0f05c04f9889 languageName: node linkType: hard @@ -4132,8 +4132,8 @@ __metadata: linkType: hard "@types/webpack@npm:^4.41.33": - version: 4.41.38 - resolution: "@types/webpack@npm:4.41.38" + version: 4.41.39 + resolution: "@types/webpack@npm:4.41.39" dependencies: "@types/node": "npm:*" "@types/tapable": "npm:^1" @@ -4141,7 +4141,7 @@ __metadata: "@types/webpack-sources": "npm:*" anymatch: "npm:^3.0.0" source-map: "npm:^0.6.0" - checksum: 10c0/5a0a7465d45a0e7701a8c863e88c6cba7660b37e4aeab851c71baf505dbab2e178be1cac82488c2e7d0ea11fb703ceddb53476daec3ec9a004e2fc1554233483 + checksum: 10c0/740420d092abb80b70263b02609bde209801b060d8e6f3a399a129945cb09182c2ce63dc816908bfbcdb123b35dc4c4fb51367aac2b5974537694cac2631db21 languageName: node linkType: hard @@ -5198,13 +5198,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.7.3 - resolution: "axios@npm:1.7.3" + version: 1.7.4 + resolution: "axios@npm:1.7.4" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 10c0/a18cbe559203efa05fb1fec2d1898e23bf6329bd2575784ee32aa11b5bbe1d54b9f472c49a261294125519cf62aa4fe5ef6e647bb7482eafc15bffe15ab314ce + checksum: 10c0/5ea1a93140ca1d49db25ef8e1bd8cfc59da6f9220159a944168860ad15a2743ea21c5df2967795acb15cbe81362f5b157fdebbea39d53117ca27658bab9f7f17 languageName: node linkType: hard @@ -5701,17 +5701,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1": - version: 4.23.1 - resolution: "browserslist@npm:4.23.1" +"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" dependencies: - caniuse-lite: "npm:^1.0.30001629" - electron-to-chromium: "npm:^1.4.796" - node-releases: "npm:^2.0.14" - update-browserslist-db: "npm:^1.0.16" + caniuse-lite: "npm:^1.0.30001646" + electron-to-chromium: "npm:^1.5.4" + node-releases: "npm:^2.0.18" + update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10c0/eb47c7ab9d60db25ce2faca70efeb278faa7282a2f62b7f2fa2f92e5f5251cf65144244566c86559419ff4f6d78f59ea50e39911321ad91f3b27788901f1f5e9 + checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 languageName: node linkType: hard @@ -5913,10 +5913,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001629": - version: 1.0.30001636 - resolution: "caniuse-lite@npm:1.0.30001636" - checksum: 10c0/e5f965b4da7bae1531fd9f93477d015729ff9e3fa12670ead39a9e6cdc4c43e62c272d47857c5cc332e7b02d697cb3f2f965a1030870ac7476da60c2fc81ee94 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001651 + resolution: "caniuse-lite@npm:1.0.30001651" + checksum: 10c0/7821278952a6dbd17358e5d08083d258f092e2a530f5bc1840657cb140fbbc5ec44293bc888258c44a18a9570cde149ed05819ac8320b9710cf22f699891e6ad languageName: node linkType: hard @@ -6781,43 +6781,43 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^7.0.4": - version: 7.0.4 - resolution: "cssnano-preset-default@npm:7.0.4" +"cssnano-preset-default@npm:^7.0.5": + version: 7.0.5 + resolution: "cssnano-preset-default@npm:7.0.5" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" css-declaration-sorter: "npm:^7.2.0" cssnano-utils: "npm:^5.0.0" - postcss-calc: "npm:^10.0.0" - postcss-colormin: "npm:^7.0.1" - postcss-convert-values: "npm:^7.0.2" - postcss-discard-comments: "npm:^7.0.1" - postcss-discard-duplicates: "npm:^7.0.0" + postcss-calc: "npm:^10.0.1" + postcss-colormin: "npm:^7.0.2" + postcss-convert-values: "npm:^7.0.3" + postcss-discard-comments: "npm:^7.0.2" + postcss-discard-duplicates: "npm:^7.0.1" postcss-discard-empty: "npm:^7.0.0" postcss-discard-overridden: "npm:^7.0.0" - postcss-merge-longhand: "npm:^7.0.2" - postcss-merge-rules: "npm:^7.0.2" + postcss-merge-longhand: "npm:^7.0.3" + postcss-merge-rules: "npm:^7.0.3" postcss-minify-font-values: "npm:^7.0.0" postcss-minify-gradients: "npm:^7.0.0" - postcss-minify-params: "npm:^7.0.1" - postcss-minify-selectors: "npm:^7.0.2" + postcss-minify-params: "npm:^7.0.2" + postcss-minify-selectors: "npm:^7.0.3" postcss-normalize-charset: "npm:^7.0.0" postcss-normalize-display-values: "npm:^7.0.0" postcss-normalize-positions: "npm:^7.0.0" postcss-normalize-repeat-style: "npm:^7.0.0" postcss-normalize-string: "npm:^7.0.0" postcss-normalize-timing-functions: "npm:^7.0.0" - postcss-normalize-unicode: "npm:^7.0.1" + postcss-normalize-unicode: "npm:^7.0.2" postcss-normalize-url: "npm:^7.0.0" postcss-normalize-whitespace: "npm:^7.0.0" postcss-ordered-values: "npm:^7.0.1" - postcss-reduce-initial: "npm:^7.0.1" + postcss-reduce-initial: "npm:^7.0.2" postcss-reduce-transforms: "npm:^7.0.0" postcss-svgo: "npm:^7.0.1" - postcss-unique-selectors: "npm:^7.0.1" + postcss-unique-selectors: "npm:^7.0.2" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/0083821e778bdf7b8aa9589408a01a717be730f73584e7b81756a6fcf87af05b8f17342025e666572a8d573cc30783f2d817b0f7ad63670398bc3135b017ccad + checksum: 10c0/ffa7c6fa16c6ad98b7732fc563de74d492e6ad6d243a9f00431c0cbdbc576bcd49226d2695d881465d32dea0a2916add40ac10e7560dd7b5de9fd0fa25ee081b languageName: node linkType: hard @@ -6831,14 +6831,14 @@ __metadata: linkType: hard "cssnano@npm:^7.0.0": - version: 7.0.4 - resolution: "cssnano@npm:7.0.4" + version: 7.0.5 + resolution: "cssnano@npm:7.0.5" dependencies: - cssnano-preset-default: "npm:^7.0.4" + cssnano-preset-default: "npm:^7.0.5" lilconfig: "npm:^3.1.2" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/3939a0b37b11cb4bae92f7916517c7ba21257551f92517b49a640d5df32e855fb7e73321f4be44d2c2de578309c05d711cdcb1976e95607b1b7f92bd4cbd1350 + checksum: 10c0/cb43ed964787dca33efb44d8f4fea8a49c495db44d1d12940493f0dd5d63db78e01c5b140fe42b480b332733602a25f4c85186d00977eb3070b29f7422761985 languageName: node linkType: hard @@ -7479,10 +7479,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.796": - version: 1.4.806 - resolution: "electron-to-chromium@npm:1.4.806" - checksum: 10c0/44f925ba64bb623d0482cd2f14fcfb27017cec1f11ee642e0d49cb128cd714ba5e074c2cd8756dfc18010aa66d3c64039cdea891905f7c17160a8963db574fab +"electron-to-chromium@npm:^1.5.4": + version: 1.5.7 + resolution: "electron-to-chromium@npm:1.5.7" + checksum: 10c0/be4460bbe3d2186a16d53a03da67fde6fd06ad41943553ce517a45d52e03424732a982f75528e8a2d5fb042d6afde64186aa482caec0fb925daa5a74cf5ef060 languageName: node linkType: hard @@ -12402,10 +12402,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 languageName: node linkType: hard @@ -13347,15 +13347,15 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-calc@npm:10.0.0" +"postcss-calc@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-calc@npm:10.0.1" dependencies: - postcss-selector-parser: "npm:^6.0.16" + postcss-selector-parser: "npm:^6.1.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.38 - checksum: 10c0/d4d529f2f71b49f17441eed74a7564ccd2779c72ed8648d4bb2530261a27c0ca01fe6a07260e7bf57e55f46dd68dea07e52fd1a6b538db7bc13015124be258a5 + checksum: 10c0/5e38cc6f082f87e82067497b41684410784223ecd3701bf52242ea9f2f467f1fad6b5a561f8aa3be307d89435b4060f58aeb27c4064003586daf653cc4d91fef languageName: node linkType: hard @@ -13370,18 +13370,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-color-functional-notation@npm:7.0.0" +"postcss-color-functional-notation@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-color-functional-notation@npm:7.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/6afe7b681a16783a27fa9600db348f995dfdbc9c945f6cdcec94ee2419e09cfd1c6e533264b830207f130e19ae18ff689ad9b48bced338f27f898eaecd61f844 + checksum: 10c0/0cdfae4d85cb34425c8363b699b5da6f0c8cc43e7ce3b7fdd1fd39429ee81a4af75f973cd5c8293b1072688064da17a0a633827f23667e8cc0ff16217f0004eb languageName: node linkType: hard @@ -13409,29 +13409,29 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-colormin@npm:7.0.1" +"postcss-colormin@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-colormin@npm:7.0.2" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" caniuse-api: "npm:^3.0.0" colord: "npm:^2.9.3" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/e01e9e129ce39320cf10bb09ee2a3ab5b44b77805d3f7827eea07297644838b85c33b78996eeae0a1aba327ffd72a6ab1d24949ebc831523e310e916d5500371 + checksum: 10c0/76d09fb7e0218698e622a7c2cfc9087985f48f3a7e44f2655d5eefac4ae9c04198ae9d408dc7ace15d3aa5bde80e7031e462b0cb9b5bd50cfa76bbb1503c755b languageName: node linkType: hard -"postcss-convert-values@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-convert-values@npm:7.0.2" +"postcss-convert-values@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-convert-values@npm:7.0.3" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/beb59faf6aae97e6d3c233c5e6ed06cc60d65c49eec576036e3d0da1a831a1e827e3d41f5e81d016440b4f0bdf1406268ae069c4d5b38a6667b310c3da079d22 + checksum: 10c0/dbb6278bd8d8b11e448933d823426c883bff3f6abeaa23c7530cc4668b9da6f714e073840f280273f8a14022c3a99eb461ec732f7539e062b32f5281e1be6526 languageName: node linkType: hard @@ -13489,23 +13489,23 @@ __metadata: languageName: node linkType: hard -"postcss-discard-comments@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-discard-comments@npm:7.0.1" +"postcss-discard-comments@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-discard-comments@npm:7.0.2" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/64de3fced7e0e49dfea6aede8a5ca495b81dcd01c3c47734a5fbc86a3cb2b1ae39e1958e34e9bea64ecabd5fb4d8c287ec1d6189cf175c2434c6b6582da79948 + checksum: 10c0/c01632e643b6ec1f61ad59efe06a9e8dfc7fcedeb1551ae48fc33fa801353f6222e31954286cd97171c694f34c2b4c7f7a2213fd0f913e37c34d0353258ed234 languageName: node linkType: hard -"postcss-discard-duplicates@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-discard-duplicates@npm:7.0.0" +"postcss-discard-duplicates@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-discard-duplicates@npm:7.0.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/37d568dc18d47b8b9f0fd6d5115b1faf96c2bf429fc4586508a773533479e18627d6260cad6a3ca7d3bfc2f220fd9448410aee40e07f2ec6c6f96bbe3595dbc8 + checksum: 10c0/5cc2cac249f68004864865ea2ec38b7d5e28184f33e904e531ff57b533aacb73ec49e4a7d83219184001b8d167e5bcabc1673248134468d7ebaa0bfb9ff78f0a languageName: node linkType: hard @@ -13592,18 +13592,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-lab-function@npm:7.0.0" +"postcss-lab-function@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-lab-function@npm:7.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.0" + "@csstools/css-color-parser": "npm:^3.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.0" "@csstools/css-tokenizer": "npm:^3.0.0" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f3647bcdd8d6140631b97276ecf51f40df2c7564610262a20c608c37c8ab79bf6e02888419dc657afc4720a7378e3ad19f4fdf811a69363424160d548ac68daf + checksum: 10c0/8a6f3f465911c5c608650e3ebec01097d274109eea0fceb925f1ca52213c67a6496570ff2ba9af0a6c2153e208ef1d10cc43ad81f38405f5d39639680f7150a9 languageName: node linkType: hard @@ -13641,29 +13641,29 @@ __metadata: languageName: node linkType: hard -"postcss-merge-longhand@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-merge-longhand@npm:7.0.2" +"postcss-merge-longhand@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-merge-longhand@npm:7.0.3" dependencies: postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^7.0.2" + stylehacks: "npm:^7.0.3" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/71d22418e5850e134bfcf2038acb1c91eeb48d9b6f9e4c0252fee757e11dc4ae351097a855c327fbc38dc7658fa6edc7cc7f458c08bb4044b82c6005dc565fcb + checksum: 10c0/b968c3d16f3edc6075b20219a1165c089dc454a6a42951dcdfc94adb932fb96ef7bcd465c6cd21b0e5b55ac08921355ddbbbc7cdcf87a345e4bef8b3cdd2e7e9 languageName: node linkType: hard -"postcss-merge-rules@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-merge-rules@npm:7.0.2" +"postcss-merge-rules@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-merge-rules@npm:7.0.3" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" caniuse-api: "npm:^3.0.0" cssnano-utils: "npm:^5.0.0" - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/fbad20382ca45f1b3b5ff704c075f899cc9ba8418ae6effbdeb9e7c1f9b5c24996d1941ad36cd0936d60cbf127a72f235b2cbb0c44d9239a8a61042406d95b4a + checksum: 10c0/3cd20484ab6d15c62eded408248d5eeaba52a573935943f933865680e070a0e75b3a7447802c575bc86e1fae667cf51d9d5766537835d9b8c090337b5adf928e languageName: node linkType: hard @@ -13691,28 +13691,28 @@ __metadata: languageName: node linkType: hard -"postcss-minify-params@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-minify-params@npm:7.0.1" +"postcss-minify-params@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-minify-params@npm:7.0.2" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" cssnano-utils: "npm:^5.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/84e1c4de5af47178c1f48e10ce16341560f32bb2becf5ec9b014103f6c706174bc70885e2e13ced4de9b4f1959fb970193261cbd4751c8b87d5159e859e8c5ec + checksum: 10c0/0e041f70554bae9d4a66c8ab2f2f3ed8bf73862c9d5ff9972ac7f1a596badd1544f093fa2362dd33e96c038af9e10287cdbfec9f480c49bffdcbaca9fdcb1e4e languageName: node linkType: hard -"postcss-minify-selectors@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-minify-selectors@npm:7.0.2" +"postcss-minify-selectors@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-minify-selectors@npm:7.0.3" dependencies: cssesc: "npm:^3.0.0" - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/87e0c21a0135b6c61b58d62c4c1e0cbd3cfb516ff8105db714c6a33a5edc477846ae220399d368e4ef6518529c711aa2dee9ff49e9befd93e83d5c939f3084a1 + checksum: 10c0/5211f63a1672f646a1bab57bd8eac0816d42adacb5e286ad5e6e342a795bb0d086bd6044a1b338311ca28f33f2c1833165ee611eaa671287379821ba3c5d68ad languageName: node linkType: hard @@ -13837,15 +13837,15 @@ __metadata: languageName: node linkType: hard -"postcss-normalize-unicode@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-normalize-unicode@npm:7.0.1" +"postcss-normalize-unicode@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-normalize-unicode@npm:7.0.2" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/fcabac738765f608cb211ac01a19f9a7d784f99d223ef6f31352f37b9bcf008e0ca7849414c9e77116be8660d78b01dba6fc4a87cee7c9a977d3c2741d6a222d + checksum: 10c0/0df1aac932cc2340715178fd024e0f6d872ea5a4bee1bc8357317a75a7b2c904d885f754cc162af001aa2a9ded7c54fac7cbcd701e21e995c1ace92dc08f2b9d languageName: node linkType: hard @@ -13924,22 +13924,22 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-preset-env@npm:10.0.0" + version: 10.0.1 + resolution: "postcss-preset-env@npm:10.0.1" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.0" - "@csstools/postcss-color-mix-function": "npm:^3.0.0" + "@csstools/postcss-color-function": "npm:^4.0.1" + "@csstools/postcss-color-mix-function": "npm:^3.0.1" "@csstools/postcss-content-alt-text": "npm:^2.0.0" "@csstools/postcss-exponential-functions": "npm:^2.0.0" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.0" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.0" - "@csstools/postcss-hwb-function": "npm:^4.0.0" + "@csstools/postcss-gamut-mapping": "npm:^2.0.1" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.1" + "@csstools/postcss-hwb-function": "npm:^4.0.1" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.0" + "@csstools/postcss-light-dark-function": "npm:^2.0.1" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" @@ -13949,12 +13949,12 @@ __metadata: "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.0" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.0" + "@csstools/postcss-oklab-function": "npm:^4.0.1" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.0" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.1" "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" "@csstools/postcss-stepped-value-functions": "npm:^4.0.0" - "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.0" + "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" "@csstools/postcss-trigonometric-functions": "npm:^4.0.0" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" @@ -13965,7 +13965,7 @@ __metadata: cssdb: "npm:^8.1.0" postcss-attribute-case-insensitive: "npm:^7.0.0" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.0" + postcss-color-functional-notation: "npm:^7.0.1" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" postcss-custom-media: "npm:^11.0.0" @@ -13978,7 +13978,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.0" + postcss-lab-function: "npm:^7.0.1" postcss-logical: "npm:^8.0.0" postcss-nesting: "npm:^13.0.0" postcss-opacity-percentage: "npm:^2.0.0" @@ -13990,7 +13990,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0b61c44233ee7fd17e32912ce028edc19998f30183f1ff2186523c4f9eac4a2a36513af31670e13ceb05f2146c4549a0b870ba0de0e3a08e77a9d57d8de72654 + checksum: 10c0/5849915d040413f68ab71b3489daaa5b6687b4d4710da47a0d1420df0890858f0b53c9ec6755d872dbe38a2695ab12584be654456e3d6ce311b88927209c02b2 languageName: node linkType: hard @@ -14005,15 +14005,15 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-initial@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-reduce-initial@npm:7.0.1" +"postcss-reduce-initial@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-reduce-initial@npm:7.0.2" dependencies: - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.23.3" caniuse-api: "npm:^3.0.0" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/3e7c6c1d0cc4ace38f44971f02d0dd98131af678cf114aa05cfa0c066420019d5329c221ef8507644b8a79d0e76534303f747c97860ac777fe17f57110edefe1 + checksum: 10c0/1e6fafaf5fac52b351c8de156ed62e4e1f48da7eb07f9ce90da54b45dca61da9af1e954b8a343271cb3e4ec99e0c5f18d7f9f96da0ca144511fca04498fac78c languageName: node linkType: hard @@ -14073,7 +14073,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1": +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1": version: 6.1.1 resolution: "postcss-selector-parser@npm:6.1.1" dependencies: @@ -14095,14 +14095,14 @@ __metadata: languageName: node linkType: hard -"postcss-unique-selectors@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-unique-selectors@npm:7.0.1" +"postcss-unique-selectors@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-unique-selectors@npm:7.0.2" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/6352d71ce2f65265f545831c2ce3686bd71961d08a2247c545d717d93d23b1eb08bb986efc11194d31970eea4cb42207b9aa9a3f4666d75492a6cbf1493cf466 + checksum: 10c0/cc54c57cd1c5a6e3e166ec63cc036d9e2df80b05e508d9ce754ca4193bf8c1bfcc16b3c6f0d81b8352a3282201d249b90bb87abacfcfb9065c9e3705ea5d110e languageName: node linkType: hard @@ -14114,13 +14114,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.40": - version: 8.4.40 - resolution: "postcss@npm:8.4.40" + version: 8.4.41 + resolution: "postcss@npm:8.4.41" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.1" source-map-js: "npm:^1.2.0" - checksum: 10c0/65ed67573e5443beaeb582282ff27a6be7c7fe3b4d9fa15761157616f2b97510cb1c335023c26220b005909f007337026d6e3ff092f25010b484ad484e80ea7f + checksum: 10c0/c1828fc59e7ec1a3bf52b3a42f615dba53c67960ed82a81df6441b485fe43c20aba7f4e7c55425762fd99c594ecabbaaba8cf5b30fd79dfec5b52a9f63a2d690 languageName: node linkType: hard @@ -16627,15 +16627,15 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^7.0.2": - version: 7.0.2 - resolution: "stylehacks@npm:7.0.2" +"stylehacks@npm:^7.0.3": + version: 7.0.3 + resolution: "stylehacks@npm:7.0.3" dependencies: - browserslist: "npm:^4.23.1" - postcss-selector-parser: "npm:^6.1.0" + browserslist: "npm:^4.23.3" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/552299e869ac430e1076c025ace6c80bdfd5b672632435625eb1bd45ff5611aad7f3ee810e72edc04dc0fc3761e08dec40d27b72c50b95690eea2de43238b8d8 + checksum: 10c0/5030334b06ef705b5700444dab120b540b09159e935e75b60f25bd56db1d85f0d11755f0b0f64ce3f12c5a72ff1b6f57fea49c26d18eb0de2334d6a143b94f8d languageName: node linkType: hard @@ -17576,9 +17576,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.16": - version: 1.0.16 - resolution: "update-browserslist-db@npm:1.0.16" +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" dependencies: escalade: "npm:^3.1.2" picocolors: "npm:^1.0.1" @@ -17586,7 +17586,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/5995399fc202adbb51567e4810e146cdf7af630a92cc969365a099150cb00597e425cc14987ca7080b09a4d0cfd2a3de53fbe72eebff171aed7f9bb81f9bf405 + checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 languageName: node linkType: hard @@ -18293,9 +18293,9 @@ __metadata: linkType: hard "wicg-inert@npm:^3.1.2": - version: 3.1.2 - resolution: "wicg-inert@npm:3.1.2" - checksum: 10c0/5b20eaedcb30f1093fb6afd0480a059e40814da56c6052469c6fe95dd2d288b89c55ed1bdbfae4db70fd5ec8148dda8dd3b671a27a26870c8f77626b13cedd1b + version: 3.1.3 + resolution: "wicg-inert@npm:3.1.3" + checksum: 10c0/160b981584e40d3a568af16a93b70dca847d9fce6d6704b40c60a9a1435f77406cc1abc56aa1bb5a63669c6cb819f09d51d7f27c16f3829cb86052e3fd27f2b0 languageName: node linkType: hard