コミットを比較

...

65 コミット

作成者 SHA1 メッセージ 日付
Nikotile 0928937f29
Merge branch 'remote' into niko 2023-03-22 02:44:47 +09:00
HJ 021fbd9b58 Merge branch 'poll-expiration-parseInt-before-posting-#1251' into 'develop'
add parseInt in poll expires_in to make sure FE sends integers in all cases

Closes #1251

See merge request pleroma/pleroma-fe!1802
2023-03-21 15:05:25 +00:00
jonossa c9072ddb0b add parseInt in poll expires_in to make sure FE sends integers in all cases 2023-03-21 16:43:16 +02:00
HJ fa532b1f00 Merge branch 'pleroma-akkoma-emoji-port' into 'develop'
Custom emoji reaction support

See merge request pleroma/pleroma-fe!1792
2023-03-20 20:31:20 +00:00
HJ 19618db192 Merge branch 'weblate' into 'develop'
Translations update from Pleroma Weblate

See merge request pleroma/pleroma-fe!1798
2023-03-20 20:26:20 +00:00
Poesty Li 624da7240e Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (984 of 987 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2023-03-20 20:19:07 +00:00
HJ 716b648014 Merge branch 'fix-user-profile-route-crash' into 'develop'
Fix user-profile route crash on pinned favorites timeline

See merge request pleroma/pleroma-fe!1801
2023-03-20 20:19:01 +00:00
Alexander Tumin 493120b545 Generalize IntegerSetting into NumberSetting, add Integer/Float wrappers 2023-03-18 21:00:50 +03:00
Alexander Tumin 3403f6a1ed Allow custom emoji reactions: add option to scale reaction buttons 2023-03-17 23:55:34 +03:00
Alexander Tumin 306e254c15 Fix user-profile route crash on pinned favorites route 2023-03-17 23:31:53 +03:00
Alexander Tumin 832019b2c2 Hide custom emoji in reaction picker when BE does not advertise pleroma_custom_emoji_reactions 2023-03-17 20:28:16 +03:00
Alexander Tumin 998aa8f732 Allow custom emoji reactions 2023-03-17 20:28:16 +03:00
HJ 8abaf8fa37 Merge branch 'tusooa/theme-checkbox' into 'develop'
Fix display of theme checkboxes

See merge request pleroma/pleroma-fe!1797
2023-03-04 13:14:01 +00:00
tusooa da46c30893
Fix display of theme checkboxes 2023-03-03 23:38:56 -05:00
HJ 0842193957 Merge branch 'tusooa/1249-suggestor' into 'develop'
Make suggestor ignore users without valid names

Closes #1249

See merge request pleroma/pleroma-fe!1794
2023-03-03 10:10:06 +00:00
HJ 2e20c2c46a Merge branch 'tusooa/tab-aria' into 'develop'
Give tab switcher a role

See merge request pleroma/pleroma-fe!1793
2023-03-03 10:09:42 +00:00
tusooa 88db557141
Make suggestor ignore users without valid names
Otherwise it might have undefined issues.
Resolves https://git.pleroma.social/pleroma/pleroma-fe/-/issues/1249
2023-03-02 23:47:55 -05:00
tusooa 1a852b96ef
Give tab switcher a role 2023-03-02 21:15:43 -05:00
tusooa 830085b3e4 Merge branch 'renovate/babel-monorepo' into 'develop'
Update babel monorepo to v7.21.0

See merge request pleroma/pleroma-fe!1743
2023-03-03 01:41:14 +00:00
tusooa a7ad7f9f17 Merge branch 'renovate/font-awesome' into 'develop'
Update Font Awesome

See merge request pleroma/pleroma-fe!1780
2023-03-03 01:29:37 +00:00
HJ 0d9054d165 Merge branch 'tusooa/1240-nomore-touchsend' into 'develop'
Remove @touchstart in post status button

Closes #1240

See merge request pleroma/pleroma-fe!1791
2023-03-01 10:28:59 +00:00
tusooa 763ae182b8
Remove @touchstart in post status button 2023-02-28 22:39:53 -05:00
HJ 602c48d1fb Merge branch 'tusooa/1250-autocomplete-select' into 'develop'
Make it possible to auto-select the first candidate in autocomplete

Closes #1250

See merge request pleroma/pleroma-fe!1789
2023-02-27 14:09:28 +00:00
Pleroma Renovate Bot 355f0fd35c Update babel monorepo to v7.21.0 2023-02-21 09:07:47 +00:00
tusooa 5468309f6a
Make it possible to auto-select the first candidate in autocomplete 2023-02-20 23:49:34 -05:00
HJ eec27700f0 Merge branch 'tusooa/fix-poll-reg' into 'develop'
Fix poll interaction

See merge request pleroma/pleroma-fe!1788
2023-02-19 17:19:15 +00:00
tusooa 2316bcc842
Fix poll interaction 2023-02-18 13:41:21 -05:00
HJ e45dff0b26 Merge branch 'tusooa/locale-reg' into 'develop'
Fix registration error with email language selected

Closes #1248

See merge request pleroma/pleroma-fe!1787
2023-02-13 02:17:45 +00:00
tusooa 65d78ced93
Fix registration error with email language selected 2023-02-12 15:38:36 -05:00
HJ 7ae61f6bd5 Merge branch 'release/2.5.1' into 'develop'
Add changelog for 2.5.1

See merge request pleroma/pleroma-fe!1786
2023-02-12 19:17:14 +00:00
tusooa 7ccbe902a2 Merge branch 'weblate' into 'develop'
Translations update from Pleroma Weblate

See merge request pleroma/pleroma-fe!1776
2023-02-11 05:03:44 +00:00
tusooa 423d1e0433
Add changelog for 2.5.1 2023-02-10 23:58:38 -05:00
Pacific Coast Highway 597c069e36 Translated using Weblate (Chinese (Traditional))
Currently translated at 72.4% (714 of 986 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2023-02-10 09:49:02 +00:00
Dmytro Poltavchenko 30f1502df6 Translated using Weblate (Ukrainian)
Currently translated at 84.9% (838 of 986 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2023-02-10 09:49:02 +00:00
nixe neko 2e9014abd7 Translated using Weblate (Japanese (ja_EASY))
Currently translated at 99.6% (983 of 986 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_EASY/
2023-02-10 09:49:02 +00:00
Poesty Li cb18497902 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (983 of 986 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2023-02-10 09:49:02 +00:00
Poesty Li 6dc683f602 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (979 of 982 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2023-02-10 09:49:02 +00:00
Ryan Chiang 79f1d79c4e Translated using Weblate (Chinese (Simplified))
Currently translated at 89.0% (824 of 925 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2023-02-10 09:49:02 +00:00
HJ 06551d447c Merge branch 'tusooa/checkbox-accessibility' into 'develop'
Make checkbox settings accessible

See merge request pleroma/pleroma-fe!1778
2023-02-10 09:48:55 +00:00
tusooa 902954b298
Use class to style screenreader-only text 2023-02-09 21:35:56 -05:00
Pleroma Renovate Bot 621242f5a1 Update Font Awesome 2023-02-08 09:07:57 +00:00
tusooa 5f8988de92 Merge branch 'renovate/nightwatch-2.x' into 'develop'
Update dependency nightwatch to v2.6.11

See merge request pleroma/pleroma-fe!1783
2023-02-01 02:27:29 +00:00
Pleroma Renovate Bot c1249ffaf3 Update dependency nightwatch to v2.6.11 2023-01-31 09:09:59 +00:00
tusooa ceebf6ac2e Merge branch 'renovate/eslint-8.x' into 'develop'
Update dependency eslint to v8.33.0

See merge request pleroma/pleroma-fe!1782
2023-01-30 19:51:31 +00:00
Pleroma Renovate Bot 8351e73bd7 Update dependency eslint to v8.33.0 2023-01-30 09:11:40 +00:00
tusooa 04f5a448e4 Merge branch 'renovate/vue-test-utils-2.x' into 'develop'
Update dependency @vue/test-utils to v2.2.8

See merge request pleroma/pleroma-fe!1781
2023-01-29 13:58:26 +00:00
Pleroma Renovate Bot d2716341cb Update dependency @vue/test-utils to v2.2.8 2023-01-29 09:07:16 +00:00
tusooa 6158b8667e
Make checkbox settings accessible 2023-01-28 22:10:06 -05:00
HJ f229c4a106 Merge branch 'from/develop/tusooa/autocomplete-accessibility' into 'develop'
Autocomplete accessibility

Closes #1219

See merge request pleroma/pleroma-fe!1771
2023-01-28 23:04:59 +00:00
HJ af22092472 Merge branch 'tusooa/anon-xact-acc' into 'develop'
Make interact buttons accessible for anonymous users

See merge request pleroma/pleroma-fe!1773
2023-01-28 23:00:07 +00:00
HJ a08378253f Merge branch 'tusooa/topbar-alttext' into 'develop'
Accessibility fixes for panel headers/top bar

See merge request pleroma/pleroma-fe!1772
2023-01-28 22:59:40 +00:00
tusooa 2635e24679 Merge branch 'renovate/babel-loader-9.x' into 'develop'
Update dependency babel-loader to v9.1.2

See merge request pleroma/pleroma-fe!1745
2023-01-28 15:01:26 +00:00
tusooa 93e01aefad Merge branch 'renovate/punycode.js-2.x' into 'develop'
Update dependency punycode.js to v2.3.0

See merge request pleroma/pleroma-fe!1775
2023-01-28 14:57:10 +00:00
Pleroma Renovate Bot ec0b239496 Update dependency punycode.js to v2.3.0 2023-01-27 09:09:34 +00:00
Pleroma Renovate Bot 31c9b6885b Update dependency babel-loader to v9.1.2 2023-01-27 09:08:38 +00:00
tusooa 5f12c3ae76
Fix unit tests 2023-01-21 22:42:53 -05:00
tusooa d159031121
Add some aria to post status form 2023-01-21 16:28:33 -05:00
Tusooa Zhu 68110ce825
Make interact buttons accessible for anonymous users 2023-01-21 15:41:12 -05:00
tusooa 1ab958ba6b
Make quick settings menus more accessible 2023-01-21 15:30:23 -05:00
tusooa 5243632678
Label buttons in top bar 2023-01-21 15:08:17 -05:00
tusooa 5478192e20
Make keys work as intended when there is no suggestions 2023-01-21 14:50:57 -05:00
tusooa 246593970b
Make autocomplete prompt more user-friendly 2023-01-21 01:30:44 -05:00
tusooa 72cb9e8bdb
Make all emoji inputs screen-reader-friendly 2023-01-21 01:28:43 -05:00
tusooa 6235af4592
Make screenreaders read out autocomplete results 2023-01-21 01:07:07 -05:00
tusooa 4db7f07421
Make autocomplete items buttons 2023-01-20 23:43:09 -05:00
61個のファイルの変更5281行の追加471行の削除

ファイルの表示

@ -3,6 +3,34 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## 2.5.1
### Fixed
- Checkboxes in settings can now work with screenreaders
- Autocomplete in edit boxes can now work with screenreaders
- Status interact buttons now have focus indicator for anonymous users
- Top bar buttons now correctly have text labels
- It is now possible to register if the site admin requires birthday to register
- User cards from search results will correctly popup
- Fix notification attachment icon overflow
- Editing mute words is less laggy
- Repeater's name will no longer mess up with the directionality of the text sitting on the same line
- Unauthenticated access will give better error messages
- It is now easier to close the media viewer with a mouse when there is only one image
- Deleting profile fields can work properly
- Clicking the react button will correctly focus the search box
- Clicking buttons on the top-bar will no longer bring you to the top of the page
- Emoji picker is much faster to load
- `blockquote`s have a better display style
- Announcements posting and editing are now available to everyone with such a privilege, not just admins
- Adding or removing list members will actually work
- Emojis without a pack are now correctly displayed in emoji picker
- Changing notification settings will actually work
### Added
- You can now set and see birthdays
- Optional confirmation dialogs when performing various actions
- You can now set fallback languages
## 2.5.0 - 23.12.2022
### Fixed
- UI no longer lags when switching between mobile and desktop mode

ファイルの表示

@ -16,12 +16,12 @@
"lint-fix": "eslint --fix --ext .js,.vue src test/unit/specs test/e2e/specs"
},
"dependencies": {
"@babel/runtime": "7.20.7",
"@babel/runtime": "7.21.0",
"@chenfengyuan/vue-qrcode": "2.0.0",
"@fortawesome/fontawesome-svg-core": "6.2.1",
"@fortawesome/free-regular-svg-icons": "6.2.1",
"@fortawesome/free-solid-svg-icons": "6.2.1",
"@fortawesome/vue-fontawesome": "3.0.2",
"@fortawesome/fontawesome-svg-core": "6.3.0",
"@fortawesome/free-regular-svg-icons": "6.3.0",
"@fortawesome/free-solid-svg-icons": "6.3.0",
"@fortawesome/vue-fontawesome": "3.0.3",
"@kazvmoe-infra/pinch-zoom-element": "1.2.0",
"@kazvmoe-infra/unicode-emoji-json": "0.4.0",
"@ruffle-rs/ruffle": "0.1.0-nightly.2022.7.12",
@ -36,7 +36,7 @@
"localforage": "1.10.0",
"parse-link-header": "2.0.0",
"phoenix": "1.6.2",
"punycode.js": "2.1.0",
"punycode.js": "2.3.0",
"qrcode": "1.5.0",
"querystring-es3": "0.2.1",
"url": "0.11.0",
@ -49,19 +49,19 @@
"vuex": "4.1.0"
},
"devDependencies": {
"@babel/core": "7.20.7",
"@babel/core": "7.21.0",
"@babel/eslint-parser": "7.19.1",
"@babel/plugin-transform-runtime": "7.19.6",
"@babel/plugin-transform-runtime": "7.21.0",
"@babel/preset-env": "7.20.2",
"@babel/register": "7.18.9",
"@babel/register": "7.21.0",
"@intlify/vue-i18n-loader": "5.0.0",
"@ungap/event-target": "0.2.3",
"@vue/babel-helper-vue-jsx-merge-props": "1.4.0",
"@vue/babel-plugin-jsx": "1.1.1",
"@vue/compiler-sfc": "3.2.45",
"@vue/test-utils": "2.2.7",
"@vue/test-utils": "2.2.8",
"autoprefixer": "10.4.13",
"babel-loader": "9.1.0",
"babel-loader": "9.1.2",
"babel-plugin-lodash": "3.3.4",
"chai": "4.3.7",
"chalk": "1.1.3",
@ -72,7 +72,7 @@
"css-loader": "6.7.3",
"css-minimizer-webpack-plugin": "4.2.2",
"custom-event-polyfill": "1.0.7",
"eslint": "8.32.0",
"eslint": "8.33.0",
"eslint-config-standard": "17.0.0",
"eslint-formatter-friendly": "7.0.0",
"eslint-plugin-import": "2.27.5",
@ -99,7 +99,7 @@
"lodash": "4.17.21",
"mini-css-extract-plugin": "2.7.2",
"mocha": "10.2.0",
"nightwatch": "2.6.10",
"nightwatch": "2.6.11",
"opn": "5.5.0",
"ora": "0.4.1",
"postcss": "8.4.20",

ファイルの表示

@ -580,8 +580,6 @@ textarea,
}
&[type="checkbox"] {
display: none;
&:checked + label::before {
color: $fallback--text;
color: var(--inputText, $fallback--text);
@ -887,3 +885,15 @@ option {
opacity: 0;
}
/* stylelint-enable no-descending-specificity */
.visible-for-screenreader-only {
display: block;
width: 1px;
height: 1px;
margin: -1px;
overflow: hidden;
visibility: visible;
clip: rect(0 0 0 0);
padding: 0;
position: absolute;
}

ファイルの表示

@ -253,6 +253,7 @@ const getNodeInfo = async ({ store }) => {
store.dispatch('setInstanceOption', { name: 'safeDM', value: features.includes('safe_dm_mentions') })
store.dispatch('setInstanceOption', { name: 'shoutAvailable', value: features.includes('chat') })
store.dispatch('setInstanceOption', { name: 'pleromaChatMessagesAvailable', value: features.includes('pleroma_chat_messages') })
store.dispatch('setInstanceOption', { name: 'pleromaCustomEmojiReactionsAvailable', value: features.includes('pleroma_custom_emoji_reactions') })
store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })
store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })
store.dispatch('setInstanceOption', { name: 'editingAvailable', value: features.includes('editing') })

ファイルの表示

@ -5,12 +5,16 @@
>
<input
type="checkbox"
class="visible-for-screenreader-only"
:disabled="disabled"
:checked="modelValue"
:indeterminate="indeterminate"
@change="$emit('update:modelValue', $event.target.checked)"
>
<i class="checkbox-indicator" />
<i
class="checkbox-indicator"
:aria-hidden="true"
/>
<span
v-if="!!$slots.default"
class="label"
@ -33,6 +37,7 @@ export default {
<style lang="scss">
@import "../../variables";
@import "../../mixins";
.checkbox {
position: relative;
@ -81,8 +86,6 @@ export default {
}
input[type="checkbox"] {
display: none;
&:checked + .checkbox-indicator::before {
color: $fallback--text;
color: var(--inputText, $fallback--text);

ファイルの表示

@ -20,6 +20,7 @@
class="logo"
:to="{ name: 'root' }"
:style="logoBgStyle"
:title="sitename"
>
<div
class="mask"
@ -38,13 +39,13 @@
/>
<button
class="button-unstyled nav-icon"
:title="$t('nav.preferences')"
@click.stop="openSettingsModal"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="cog"
:title="$t('nav.preferences')"
/>
</button>
<a
@ -52,26 +53,26 @@
href="/pleroma/admin/#/login-pleroma"
class="nav-icon"
target="_blank"
:title="$t('nav.administration')"
@click.stop
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="tachometer-alt"
:title="$t('nav.administration')"
/>
</a>
<span class="spacer" />
<button
v-if="currentUser"
class="button-unstyled nav-icon"
:title="$t('login.logout')"
@click.stop.prevent="logout"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="sign-out-alt"
:title="$t('login.logout')"
/>
</button>
</div>

ファイルの表示

@ -1,6 +1,7 @@
import Completion from '../../services/completion/completion.js'
import EmojiPicker from '../emoji_picker/emoji_picker.vue'
import Popover from 'src/components/popover/popover.vue'
import ScreenReaderNotice from 'src/components/screen_reader_notice/screen_reader_notice.vue'
import UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'
import { take } from 'lodash'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
@ -109,9 +110,10 @@ const EmojiInput = {
},
data () {
return {
randomSeed: `${Math.random()}`.replace('.', '-'),
input: undefined,
caretEl: undefined,
highlighted: 0,
highlighted: -1,
caret: 0,
focused: false,
blurTimeout: null,
@ -125,12 +127,16 @@ const EmojiInput = {
components: {
Popover,
EmojiPicker,
UnicodeDomainIndicator
UnicodeDomainIndicator,
ScreenReaderNotice
},
computed: {
padEmoji () {
return this.$store.getters.mergedConfig.padEmoji
},
defaultCandidateIndex () {
return this.$store.getters.mergedConfig.autocompleteSelect ? 0 : -1
},
preText () {
return this.modelValue.slice(0, this.caret)
},
@ -203,6 +209,12 @@ const EmojiInput = {
top: this.input.scrollTop,
left: this.input.scrollLeft
})
},
suggestionListId () {
return `suggestions-${this.randomSeed}`
},
suggestionItemId () {
return (index) => `suggestion-item-${index}-${this.randomSeed}`
}
},
mounted () {
@ -278,6 +290,11 @@ const EmojiInput = {
...rest,
img: imageUrl || ''
}))
this.highlighted = this.defaultCandidateIndex
this.$refs.screenReaderNotice.announce(
this.$tc('tool_tip.autocomplete_available',
this.suggestions.length,
{ number: this.suggestions.length }))
}
},
methods: {
@ -374,26 +391,27 @@ const EmojiInput = {
},
cycleBackward (e) {
const len = this.suggestions.length || 0
if (len > 1) {
this.highlighted -= 1
if (this.highlighted < 0) {
this.highlighted = this.suggestions.length - 1
}
this.highlighted -= 1
if (this.highlighted === -1) {
this.input.focus()
} else if (this.highlighted < -1) {
this.highlighted = len - 1
}
if (len > 0) {
e.preventDefault()
} else {
this.highlighted = 0
}
},
cycleForward (e) {
const len = this.suggestions.length || 0
if (len > 1) {
this.highlighted += 1
if (this.highlighted >= len) {
this.highlighted = 0
}
this.highlighted += 1
if (this.highlighted >= len) {
this.highlighted = -1
this.input.focus()
}
if (len > 0) {
e.preventDefault()
} else {
this.highlighted = 0
}
},
scrollIntoView () {
@ -540,6 +558,13 @@ const EmojiInput = {
})
},
resize () {
},
autoCompleteItemLabel (suggestion) {
if (suggestion.user) {
return suggestion.displayText + ' ' + suggestion.detailText
} else {
return this.maybeLocalizedEmojiName(suggestion)
}
}
}
}

ファイルの表示

@ -4,12 +4,19 @@
class="emoji-input"
:class="{ 'with-picker': !hideEmojiButton }"
>
<slot />
<slot
:id="'textbox-' + randomSeed"
:aria-owns="suggestionListId"
aria-autocomplete="both"
:aria-expanded="showSuggestions"
:aria-activedescendant="(!showSuggestions || highlighted === -1) ? '' : suggestionItemId(highlighted)"
/>
<!-- TODO: make the 'x' disappear if at the end maybe? -->
<div
ref="hiddenOverlay"
class="hidden-overlay"
:style="overlayStyle"
:aria-hidden="true"
>
<span>{{ preText }}</span>
<span
@ -18,11 +25,16 @@
>x</span>
<span>{{ postText }}</span>
</div>
<screen-reader-notice
ref="screenReaderNotice"
aria-live="assertive"
/>
<template v-if="enableEmojiPicker">
<button
v-if="!hideEmojiButton"
class="button-unstyled emoji-picker-icon"
type="button"
:title="$t('emoji.add_emoji')"
@click.prevent="togglePicker"
>
<FAIcon :icon="['far', 'smile-beam']" />
@ -43,17 +55,24 @@
ref="suggestorPopover"
class="autocomplete-panel"
placement="bottom"
:trigger-attrs="{ 'aria-hidden': true }"
>
<template #content>
<div
:id="suggestionListId"
ref="panel-body"
class="autocomplete-panel-body"
role="listbox"
>
<div
v-for="(suggestion, index) in suggestions"
:id="suggestionItemId(index)"
:key="index"
class="autocomplete-item"
role="option"
:class="{ highlighted: index === highlighted }"
:aria-label="autoCompleteItemLabel(suggestion)"
:aria-selected="index === highlighted"
@click.stop.prevent="onClick($event, suggestion)"
>
<span class="image">

ファイルの表示

@ -94,8 +94,9 @@ export const suggestUsers = ({ dispatch, state }) => {
const newSuggestions = state.users.users.filter(
user =>
user.screen_name.toLowerCase().startsWith(noPrefix) ||
user.name.toLowerCase().startsWith(noPrefix)
user.screen_name && user.name && (
user.screen_name.toLowerCase().startsWith(noPrefix) ||
user.name.toLowerCase().startsWith(noPrefix))
).slice(0, 20).sort((a, b) => {
let aScore = 0
let bScore = 0

ファイルの表示

@ -98,6 +98,11 @@ const EmojiPicker = {
required: false,
type: Boolean,
default: false
},
hideCustomEmoji: {
required: false,
type: Boolean,
default: false
}
},
data () {
@ -280,6 +285,9 @@ const EmojiPicker = {
return 0
},
allCustomGroups () {
if (this.hideCustomEmoji) {
return {}
}
const emojis = this.$store.getters.groupedCustomEmojis
if (emojis.unpacked) {
emojis.unpacked.text = this.$t('emoji.unpacked')

ファイルの表示

@ -3,6 +3,7 @@
ref="popover"
trigger="click"
popover-class="emoji-picker popover-default"
:trigger-attrs="{ 'aria-hidden': true }"
@show="onPopoverShown"
@close="onPopoverClosed"
>

ファイルの表示

@ -2,7 +2,7 @@
<div class="EmojiReactions">
<UserListPopover
v-for="(reaction) in emojiReactions"
:key="reaction.name"
:key="reaction.url || reaction.name"
:users="accountsForEmoji[reaction.name]"
>
<button
@ -11,7 +11,21 @@
@click="emojiOnClick(reaction.name, $event)"
@mouseenter="fetchEmojiReactionsByIfMissing()"
>
<span class="reaction-emoji">{{ reaction.name }}</span>
<span
class="reaction-emoji"
>
<img
v-if="reaction.url"
:src="reaction.url"
:title="reaction.name"
class="reaction-emoji-content"
width="1em"
>
<span
v-else
class="reaction-emoji reaction-emoji-content"
>{{ reaction.name }}</span>
</span>
<span>{{ reaction.count }}</span>
</button>
</UserListPopover>
@ -35,6 +49,8 @@
margin-top: 0.25em;
flex-wrap: wrap;
--emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));
.emoji-reaction {
padding: 0 0.5em;
margin-right: 0.5em;
@ -45,8 +61,24 @@
box-sizing: border-box;
.reaction-emoji {
width: 1.25em;
width: var(--emoji-size);
height: var(--emoji-size);
margin-right: 0.25em;
line-height: var(--emoji-size);
display: flex;
justify-content: center;
align-items: center;
}
.reaction-emoji-content {
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
line-height: inherit;
overflow: hidden;
font-size: calc(var(--emoji-size) * 0.8);
margin: 0;
}
&:focus {

ファイルの表示

@ -38,13 +38,20 @@
class="button-unstyled interactive"
target="_blank"
role="button"
:title="$t('tool_tip.favorite')"
:href="remoteInteractionLink"
>
<FAIcon
class="fa-scale-110 fa-old-padding"
:title="$t('tool_tip.favorite')"
:icon="['far', 'star']"
/>
<FALayers class="fa-scale-110 fa-old-padding-layer">
<FAIcon
class="fa-scale-110"
:icon="['far', 'star']"
/>
<FAIcon
class="focus-marker"
transform="shrink-6 up-9 right-12"
icon="plus"
/>
</FALayers>
</a>
<span
v-if="!mergedConfig.hidePostStats && status.fave_num > 0"

ファイルの表示

@ -4,6 +4,7 @@
:class="{ custom: isCustom }"
>
<label
:id="name + '-label'"
:for="preset === 'custom' ? name : name + '-font-switcher'"
class="label"
>
@ -12,7 +13,8 @@
<input
v-if="typeof fallback !== 'undefined'"
:id="name + '-o'"
class="opt exlcude-disabled"
:aria-labelledby="name + '-label'"
class="opt exlcude-disabled visible-for-screenreader-only"
type="checkbox"
:checked="present"
@change="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)"
@ -21,6 +23,7 @@
v-if="typeof fallback !== 'undefined'"
class="opt-l"
:for="name + '-o'"
:aria-hidden="true"
/>
{{ ' ' }}
<Select

ファイルの表示

@ -80,3 +80,21 @@ export const ROOT_ITEMS = {
criteria: ['announcements']
}
}
export function routeTo (item, currentUser) {
if (!item.route && !item.routeObject) return null
let route
if (item.routeObject) {
route = item.routeObject
} else {
route = { name: (item.anon || currentUser) ? item.route : item.anonRoute }
}
if (USERNAME_ROUTES.has(route.name)) {
route.params = { username: currentUser.screen_name, name: currentUser.screen_name }
}
return route
}

ファイルの表示

@ -1,5 +1,5 @@
import { mapState } from 'vuex'
import { USERNAME_ROUTES } from 'src/components/navigation/navigation.js'
import { routeTo } from 'src/components/navigation/navigation.js'
import OptionalRouterLink from 'src/components/optional_router_link/optional_router_link.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faThumbtack } from '@fortawesome/free-solid-svg-icons'
@ -26,17 +26,7 @@ const NavigationEntry = {
},
computed: {
routeTo () {
if (!this.item.route && !this.item.routeObject) return null
let route
if (this.item.routeObject) {
route = this.item.routeObject
} else {
route = { name: (this.item.anon || this.currentUser) ? this.item.route : this.item.anonRoute }
}
if (USERNAME_ROUTES.has(route.name)) {
route.params = { username: this.currentUser.screen_name, name: this.currentUser.screen_name }
}
return route
return routeTo(this.item, this.currentUser)
},
getters () {
return this.$store.getters

ファイルの表示

@ -1,5 +1,5 @@
import { mapState } from 'vuex'
import { TIMELINES, ROOT_ITEMS, USERNAME_ROUTES } from 'src/components/navigation/navigation.js'
import { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'
import { getListEntries, filterNavigation } from 'src/components/navigation/filter.js'
import { library } from '@fortawesome/fontawesome-svg-core'
@ -31,14 +31,7 @@ const NavPanel = {
props: ['limit'],
methods: {
getRouteTo (item) {
if (item.routeObject) {
return item.routeObject
}
const route = { name: (item.anon || this.currentUser) ? item.route : item.anonRoute }
if (USERNAME_ROUTES.has(route.name)) {
route.params = { username: this.currentUser.screen_name }
}
return route
return routeTo(item, this.currentUser)
}
},
computed: {

ファイルの表示

@ -121,7 +121,16 @@
scope="global"
keypath="notifications.reacted_with"
>
<span class="emoji-reaction-emoji">{{ notification.emoji }}</span>
<img
v-if="notification.emoji_url"
class="emoji-reaction-emoji emoji-reaction-emoji-image"
:src="notification.emoji_url"
:name="notification.emoji"
>
<span
v-else
class="emoji-reaction-emoji"
>{{ notification.emoji }}</span>
</i18n-t>
</small>
</span>
@ -153,9 +162,9 @@
</router-link>
<button
class="button-unstyled expand-icon"
@click.prevent="toggleStatusExpanded"
:title="$t('tool_tip.toggle_expand')"
:aria-expanded="statusExpanded"
:title="$t('tool_tip.toggle_expand')"
@click.prevent="toggleStatusExpanded"
>
<FAIcon
class="fa-scale-110"

ファイルの表示

@ -129,6 +129,13 @@
.emoji-reaction-emoji {
font-size: 1.3em;
max-width: 1.25em;
height: 1.25em;
width: auto;
}
.emoji-reaction-emoji-image {
vertical-align: middle;
}
.notification-details {

ファイルの表示

@ -12,7 +12,8 @@ export default {
data () {
return {
loading: false,
choices: []
choices: [],
randomSeed: `${Math.random()}`.replace('.', '-')
}
},
created () {

ファイルの表示

@ -4,53 +4,63 @@
:class="containerClass"
>
<div
v-for="(option, index) in options"
:key="index"
class="poll-option"
:role="showResults ? 'section' : (poll.multiple ? 'group' : 'radiogroup')"
>
<div
v-if="showResults"
:title="resultTitle(option)"
class="option-result"
v-for="(option, index) in options"
:key="index"
class="poll-option"
>
<div class="option-result-label">
<span class="result-percentage">
{{ percentageForOption(option.votes_count) }}%
</span>
<RichContent
:html="option.title_html"
:handle-links="false"
:emoji="emoji"
<div
v-if="showResults"
:title="resultTitle(option)"
class="option-result"
>
<div class="option-result-label">
<span class="result-percentage">
{{ percentageForOption(option.votes_count) }}%
</span>
<RichContent
:html="option.title_html"
:handle-links="false"
:emoji="emoji"
/>
</div>
<div
class="result-fill"
:style="{ 'width': `${percentageForOption(option.votes_count)}%` }"
/>
</div>
<div
class="result-fill"
:style="{ 'width': `${percentageForOption(option.votes_count)}%` }"
/>
</div>
<div
v-else
@click="activateOption(index)"
>
<input
v-if="poll.multiple"
type="checkbox"
:disabled="loading"
:value="index"
>
<input
v-else
type="radio"
:disabled="loading"
:value="index"
tabindex="0"
:role="poll.multiple ? 'checkbox' : 'radio'"
:aria-labelledby="`option-vote-${randomSeed}-${index}`"
:aria-checked="choices[index]"
@click="activateOption(index)"
>
<label class="option-vote">
<RichContent
:html="option.title_html"
:handle-links="false"
:emoji="emoji"
/>
</label>
<input
v-if="poll.multiple"
type="checkbox"
class="poll-checkbox"
:disabled="loading"
:value="index"
>
<input
v-else
type="radio"
:disabled="loading"
:value="index"
>
<label class="option-vote">
<RichContent
:id="`option-vote-${randomSeed}-${index}`"
:html="option.title_html"
:handle-links="false"
:emoji="emoji"
/>
</label>
</div>
</div>
</div>
<div class="footer faint">
@ -161,5 +171,9 @@
padding: 0 0.5em;
margin-right: 0.5em;
}
.poll-checkbox {
display: none;
}
}
</style>

ファイルの表示

@ -8,6 +8,7 @@ import Gallery from 'src/components/gallery/gallery.vue'
import StatusContent from '../status_content/status_content.vue'
import fileTypeService from '../../services/file_type/file_type.service.js'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
import { propsToNative } from '../../services/attributes_helper/attributes_helper.service.js'
import { reject, map, uniqBy, debounce } from 'lodash'
import suggestor from '../emoji_input/suggestor.js'
import { mapGetters, mapState } from 'vuex'
@ -629,6 +630,9 @@ const PostStatusForm = {
},
openProfileTab () {
this.$store.dispatch('openSettingsModalTab', 'profile')
},
propsToNative (props) {
return propsToNative(props)
}
}
}

ファイルの表示

@ -30,6 +30,9 @@
<span>{{ $t('post_status.scope_notice.public') }}</span>
<a
class="fa-scale-110 fa-old-padding dismiss"
:title="$t('post_status.scope_notice_dismiss')"
role="button"
tabindex="0"
@click.prevent="dismissScopeNotice()"
>
<FAIcon icon="times" />
@ -42,6 +45,9 @@
<span>{{ $t('post_status.scope_notice.unlisted') }}</span>
<a
class="fa-scale-110 fa-old-padding dismiss"
:title="$t('post_status.scope_notice_dismiss')"
role="button"
tabindex="0"
@click.prevent="dismissScopeNotice()"
>
<FAIcon icon="times" />
@ -54,6 +60,9 @@
<span>{{ $t('post_status.scope_notice.private') }}</span>
<a
class="fa-scale-110 fa-old-padding dismiss"
:title="$t('post_status.scope_notice_dismiss')"
role="button"
tabindex="0"
@click.prevent="dismissScopeNotice()"
>
<FAIcon icon="times" />
@ -124,14 +133,17 @@
:suggest="emojiSuggestor"
class="form-control"
>
<input
v-model="newStatus.spoilerText"
type="text"
:placeholder="$t('post_status.content_warning')"
:disabled="posting && !optimisticPosting"
size="1"
class="form-post-subject"
>
<template #default="inputProps">
<input
v-model="newStatus.spoilerText"
type="text"
:placeholder="$t('post_status.content_warning')"
:disabled="posting && !optimisticPosting"
v-bind="propsToNative(inputProps)"
size="1"
class="form-post-subject"
>
</template>
</EmojiInput>
<EmojiInput
ref="emoji-input"
@ -148,29 +160,32 @@
@sticker-upload-failed="uploadFailed"
@shown="handleEmojiInputShow"
>
<textarea
ref="textarea"
v-model="newStatus.status"
:placeholder="placeholder || $t('post_status.default')"
rows="1"
cols="1"
:disabled="posting && !optimisticPosting"
class="form-post-body"
:class="{ 'scrollable-form': !!maxHeight }"
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
@keydown.meta.enter="postStatus($event, newStatus)"
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
@input="resize"
@compositionupdate="resize"
@paste="paste"
/>
<p
v-if="hasStatusLengthLimit"
class="character-counter faint"
:class="{ error: isOverLengthLimit }"
>
{{ charactersLeft }}
</p>
<template #default="inputProps">
<textarea
ref="textarea"
v-model="newStatus.status"
:placeholder="placeholder || $t('post_status.default')"
rows="1"
cols="1"
:disabled="posting && !optimisticPosting"
class="form-post-body"
:class="{ 'scrollable-form': !!maxHeight }"
v-bind="propsToNative(inputProps)"
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
@keydown.meta.enter="postStatus($event, newStatus)"
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
@input="resize"
@compositionupdate="resize"
@paste="paste"
/>
<p
v-if="hasStatusLengthLimit"
class="character-counter faint"
:class="{ error: isOverLengthLimit }"
>
{{ charactersLeft }}
</p>
</template>
</EmojiInput>
<div
v-if="!disableScopeSelector"
@ -193,6 +208,7 @@
id="post-content-type"
v-model="newStatus.contentType"
class="form-control"
:attrs="{ 'aria-label': $t('post_status.content_type_selection') }"
>
<option
v-for="postFormat in postFormats"
@ -265,12 +281,10 @@
>
{{ $t('post_status.post') }}
</button>
<!-- touchstart is used to keep the OSK at the same position after a message send -->
<button
v-else
:disabled="uploadingFiles || disableSubmit"
class="btn button-default"
@touchstart.stop.prevent="postStatus($event, newStatus)"
@click.stop.prevent="postStatus($event, newStatus)"
>
{{ $t('post_status.post') }}

ファイルの表示

@ -6,36 +6,51 @@
:trigger-attrs="{ title: $t('timeline.quick_filter_settings') }"
>
<template #content>
<div class="dropdown-menu">
<div v-if="loggedIn">
<div
class="dropdown-menu"
role="menu"
>
<div
v-if="loggedIn"
role="group"
>
<button
v-if="!conversation"
class="button-default dropdown-item"
:aria-checked="replyVisibilityAll"
role="menuitemradio"
@click="replyVisibilityAll = true"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': replyVisibilityAll }"
:aria-hidden="true"
/>{{ $t('settings.reply_visibility_all') }}
</button>
<button
v-if="!conversation"
class="button-default dropdown-item"
:aria-checked="replyVisibilityFollowing"
role="menuitemradio"
@click="replyVisibilityFollowing = true"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': replyVisibilityFollowing }"
:aria-hidden="true"
/>{{ $t('settings.reply_visibility_following_short') }}
</button>
<button
v-if="!conversation"
class="button-default dropdown-item"
:aria-checked="replyVisibilitySelf"
role="menuitemradio"
@click="replyVisibilitySelf = true"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': replyVisibilitySelf }"
:aria-hidden="true"
/>{{ $t('settings.reply_visibility_self_short') }}
</button>
<div
@ -46,33 +61,43 @@
</div>
<button
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="muteBotStatuses"
@click="muteBotStatuses = !muteBotStatuses"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': muteBotStatuses }"
:aria-hidden="true"
/>{{ $t('settings.mute_bot_posts') }}
</button>
<button
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="hideMedia"
@click="hideMedia = !hideMedia"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hideMedia }"
:aria-hidden="true"
/>{{ $t('settings.hide_media_previews') }}
</button>
<button
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="hideMutedPosts"
@click="hideMutedPosts = !hideMutedPosts"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': hideMutedPosts }"
:aria-hidden="true"
/>{{ $t('settings.hide_all_muted_posts') }}
</button>
<button
class="button-default dropdown-item dropdown-item-icon"
role="menuitem"
@click="openTab('filtering')"
>
<FAIcon icon="font" />{{ $t('settings.word_filter_and_more') }}

ファイルの表示

@ -6,60 +6,87 @@
:trigger-attrs="{ title: $t('timeline.quick_view_settings') }"
>
<template #content>
<div class="dropdown-menu">
<button
class="button-default dropdown-item"
@click="conversationDisplay = 'tree'"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': conversationDisplay === 'tree' }"
/><FAIcon icon="folder-tree" /> {{ $t('settings.conversation_display_tree_quick') }}
</button>
<button
class="button-default dropdown-item"
@click="conversationDisplay = 'linear'"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': conversationDisplay === 'linear' }"
/><FAIcon icon="list" /> {{ $t('settings.conversation_display_linear_quick') }}
</button>
<div
class="dropdown-menu"
role="menu"
>
<div role="group">
<button
class="button-default dropdown-item"
:aria-checked="conversationDisplay === 'tree'"
role="menuitemradio"
@click="conversationDisplay = 'tree'"
>
<span
class="menu-checkbox -radio"
:aria-hidden="true"
:class="{ 'menu-checkbox-checked': conversationDisplay === 'tree' }"
/><FAIcon
icon="folder-tree"
:aria-hidden="true"
/> {{ $t('settings.conversation_display_tree_quick') }}
</button>
<button
class="button-default dropdown-item"
:aria-checked="conversationDisplay === 'linear'"
role="menuitemradio"
@click="conversationDisplay = 'linear'"
>
<span
class="menu-checkbox -radio"
:class="{ 'menu-checkbox-checked': conversationDisplay === 'linear' }"
:aria-hidden="true"
/><FAIcon
icon="list"
:aria-hidden="true"
/> {{ $t('settings.conversation_display_linear_quick') }}
</button>
</div>
<div
role="separator"
class="dropdown-divider"
/>
<button
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="showUserAvatars"
@click="showUserAvatars = !showUserAvatars"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': showUserAvatars }"
:aria-hidden="true"
/>{{ $t('settings.mention_link_show_avatar_quick') }}
</button>
<button
v-if="!conversation"
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="autoUpdate"
@click="autoUpdate = !autoUpdate"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': autoUpdate }"
:aria-hidden="true"
/>{{ $t('settings.auto_update') }}
</button>
<button
v-if="!conversation"
class="button-default dropdown-item"
role="menuitemcheckbox"
:aria-checked="collapseWithSubjects"
@click="collapseWithSubjects = !collapseWithSubjects"
>
<span
class="menu-checkbox"
:class="{ 'menu-checkbox-checked': collapseWithSubjects }"
:aria-hidden="true"
/>{{ $t('settings.collapse_subject') }}
</button>
<button
class="button-default dropdown-item dropdown-item-icon"
role="menuitem"
@click="openTab('general')"
>
<FAIcon icon="wrench" />{{ $t('settings.more_settings') }}

ファイルの表示

@ -4,6 +4,7 @@
:class="{ disabled: !present || disabled }"
>
<label
:id="name + '-label'"
:for="name"
class="label"
>
@ -12,7 +13,8 @@
<input
v-if="typeof fallback !== 'undefined'"
:id="name + '-o'"
class="opt"
:aria-labelledby="name + '-label'"
class="opt visible-for-screenreader-only"
type="checkbox"
:checked="present"
@change="$emit('update:modelValue', !present ? fallback : undefined)"
@ -21,6 +23,7 @@
v-if="typeof fallback !== 'undefined'"
class="opt-l"
:for="name + '-o'"
:aria-hidden="true"
/>
<input
:id="name"
@ -34,9 +37,10 @@
@input="$emit('update:modelValue', $event.target.value)"
>
<input
:id="name"
:id="name + '-numeric'"
class="input-number"
type="number"
:aria-labelledby="name + '-label'"
:value="modelValue || fallback"
:disabled="!present || disabled"
:max="hardMax"

ファイルの表示

@ -1,9 +1,8 @@
import Popover from '../popover/popover.vue'
import { ensureFinalFallback } from '../../i18n/languages.js'
import EmojiPicker from '../emoji_picker/emoji_picker.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faPlus, faTimes } from '@fortawesome/free-solid-svg-icons'
import { faSmileBeam } from '@fortawesome/free-regular-svg-icons'
import { trim } from 'lodash'
library.add(
faPlus,
@ -20,105 +19,34 @@ const ReactButton = {
}
},
components: {
Popover
Popover,
EmojiPicker
},
methods: {
addReaction (event, emoji, close) {
addReaction (event) {
const emoji = event.insertion
const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)
if (existingReaction && existingReaction.me) {
this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })
} else {
this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })
}
close()
},
show () {
if (!this.expanded) {
this.$refs.picker.showPicker()
}
},
onShow () {
this.expanded = true
this.focusInput()
},
onClose () {
this.expanded = false
},
focusInput () {
this.$nextTick(() => {
const input = document.querySelector('.reaction-picker-filter > input')
if (input) input.focus()
})
},
// Vaguely adjusted copypaste from emoji_input and emoji_picker!
maybeLocalizedEmojiNamesAndKeywords (emoji) {
const names = [emoji.displayText]
const keywords = []
if (emoji.displayTextI18n) {
names.push(this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args))
}
if (emoji.annotations) {
this.languages.forEach(lang => {
names.push(emoji.annotations[lang]?.name)
keywords.push(...(emoji.annotations[lang]?.keywords || []))
})
}
return {
names: names.filter(k => k),
keywords: keywords.filter(k => k)
}
},
maybeLocalizedEmojiName (emoji) {
if (!emoji.annotations) {
return emoji.displayText
}
if (emoji.displayTextI18n) {
return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)
}
for (const lang of this.languages) {
if (emoji.annotations[lang]?.name) {
return emoji.annotations[lang].name
}
}
return emoji.displayText
}
},
computed: {
commonEmojis () {
const hardcodedSet = new Set(['👍', '😠', '👀', '😂', '🔥'])
return this.$store.getters.standardEmojiList.filter(emoji => hardcodedSet.has(emoji.replacement))
},
languages () {
return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)
},
emojis () {
if (this.filterWord !== '') {
const keywordLowercase = trim(this.filterWord.toLowerCase())
const orderedEmojiList = []
for (const emoji of this.$store.getters.standardEmojiList) {
const indices = this.maybeLocalizedEmojiNamesAndKeywords(emoji)
.keywords
.map(k => k.toLowerCase().indexOf(keywordLowercase))
.filter(k => k > -1)
const indexOfKeyword = indices.length ? Math.min(...indices) : -1
if (indexOfKeyword > -1) {
if (!Array.isArray(orderedEmojiList[indexOfKeyword])) {
orderedEmojiList[indexOfKeyword] = []
}
orderedEmojiList[indexOfKeyword].push(emoji)
}
}
return orderedEmojiList.flat()
}
return this.$store.getters.standardEmojiList || []
},
mergedConfig () {
return this.$store.getters.mergedConfig
hideCustomEmoji () {
return !this.$store.state.instance.pleromaChatMessagesAvailable
}
}
}

ファイルの表示

@ -1,73 +1,39 @@
<template>
<Popover
trigger="click"
class="ReactButton"
placement="top"
:offset="{ y: 5 }"
:bound-to="{ x: 'container' }"
remove-padding
popover-class="ReactButton popover-default"
@show="onShow"
@close="onClose"
>
<template #content="{close}">
<div class="reaction-picker-filter">
<input
v-model="filterWord"
size="1"
:placeholder="$t('emoji.search_emoji')"
@input="$event.target.composing = false"
>
</div>
<div class="reaction-picker">
<span
v-for="emoji in commonEmojis"
:key="emoji.replacement"
class="emoji-button"
:title="maybeLocalizedEmojiName(emoji)"
@click="addReaction($event, emoji.replacement, close)"
>
{{ emoji.replacement }}
</span>
<div class="reaction-picker-divider" />
<span
v-for="(emoji, key) in emojis"
:key="key"
class="emoji-button"
:title="maybeLocalizedEmojiName(emoji)"
@click="addReaction($event, emoji.replacement, close)"
>
{{ emoji.replacement }}
</span>
<div class="reaction-bottom-fader" />
</div>
</template>
<template #trigger>
<span
class="button-unstyled popover-trigger"
:title="$t('tool_tip.add_reaction')"
>
<FALayers>
<FAIcon
class="fa-scale-110 fa-old-padding"
:icon="['far', 'smile-beam']"
/>
<FAIcon
v-show="!expanded"
class="focus-marker"
transform="shrink-6 up-9 right-17"
icon="plus"
/>
<FAIcon
v-show="expanded"
class="focus-marker"
transform="shrink-6 up-9 right-17"
icon="times"
/>
</FALayers>
</span>
</template>
</Popover>
<span class="ReactButton">
<EmojiPicker
ref="picker"
:enable-sticker-picker="enableStickerPicker"
:hide-custom-emoji="hideCustomEmoji"
class="emoji-picker-panel"
@emoji="addReaction"
@show="onShow"
@close="onClose"
/>
<span
class="button-unstyled popover-trigger"
:title="$t('tool_tip.add_reaction')"
@click.stop.prevent="show"
>
<FALayers>
<FAIcon
class="fa-scale-110 fa-old-padding"
:icon="['far', 'smile-beam']"
/>
<FAIcon
v-show="!expanded"
class="focus-marker"
transform="shrink-6 up-9 right-17"
icon="plus"
/>
<FAIcon
v-show="expanded"
class="focus-marker"
transform="shrink-6 up-9 right-17"
icon="times"
/>
</FALayers>
</span>
</span>
</template>
<script src="./react_button.js"></script>
@ -135,11 +101,6 @@
color: $fallback--text;
color: var(--text, $fallback--text);
}
}
.popover-trigger-button {
/* override of popover internal stuff */
width: auto;
@include unfocused-style {
.focus-marker {

ファイルの表示

@ -16,7 +16,7 @@ const registration = {
confirm: '',
birthday: '',
reason: '',
language: ''
language: ['']
},
captcha: {}
}),
@ -100,7 +100,7 @@ const registration = {
this.user.captcha_token = this.captcha.token
this.user.captcha_answer_data = this.captcha.answer_data
if (this.user.language) {
this.user.language = localeService.internalToBackendLocale(this.user.language)
this.user.language = localeService.internalToBackendLocaleMulti(this.user.language.filter(k => k))
}
this.v$.$touch()

ファイルの表示

@ -210,6 +210,7 @@
:prompt-text="$t('registration.email_language')"
:language="v$.user.language.$model"
:set-language="val => v$.user.language.$model = val"
@click.stop.prevent
/>
</div>

ファイルの表示

@ -32,12 +32,20 @@
target="_blank"
role="button"
:href="remoteInteractionLink"
:title="$t('tool_tip.reply')"
>
<FAIcon
icon="reply"
class="fa-scale-110 fa-old-padding"
:title="$t('tool_tip.reply')"
/>
<FALayers class="fa-old-padding-layer">
<FAIcon
class="fa-scale-110"
icon="reply"
/>
<FAIcon
v-if="!replying"
class="focus-marker"
transform="shrink-6 up-8 right-16"
icon="plus"
/>
</FALayers>
</a>
<span
v-if="status.replies_count > 0"

ファイルの表示

@ -45,13 +45,20 @@
class="button-unstyled interactive"
target="_blank"
role="button"
:title="$t('tool_tip.repeat')"
:href="remoteInteractionLink"
>
<FAIcon
class="fa-scale-110 fa-old-padding"
icon="retweet"
:title="$t('tool_tip.repeat')"
/>
<FALayers class="fa-old-padding-layer">
<FAIcon
class="fa-scale-110"
icon="retweet"
/>
<FAIcon
class="focus-marker"
transform="shrink-6 up-9 right-12"
icon="plus"
/>
</FALayers>
</a>
<span
v-if="!mergedConfig.hidePostStats && status.repeat_num > 0"

ファイルの表示

@ -0,0 +1,21 @@
const ScreenReaderNotice = {
props: {
ariaLive: {
type: String,
defualt: 'assertive'
}
},
data () {
return {
currentText: ''
}
},
methods: {
announce (text) {
this.currentText = text
setTimeout(() => { this.currentText = '' }, 1000)
}
}
}
export default ScreenReaderNotice

ファイルの表示

@ -0,0 +1,10 @@
<template>
<div
class="visible-for-screenreader-only"
:aria-live="ariaLive"
>
{{ currentText }}
</div>
</template>
<script src="./screen_reader_notice.js"></script>

ファイルの表示

@ -8,6 +8,7 @@
class="button-unstyled nav-icon"
:title="$t('nav.search')"
type="button"
:aria-expanded="!hidden"
@click.prevent.stop="toggleHidden"
>
<FAIcon
@ -29,6 +30,7 @@
<button
class="button-default search-button"
type="submit"
:title="$t('nav.search')"
@click="find(searchTerm)"
>
<FAIcon
@ -39,6 +41,8 @@
<button
class="button-unstyled cancel-search"
type="button"
:title="$t('nav.search_close')"
:aria-expanded="!hidden"
@click.prevent.stop="toggleHidden"
>
<FAIcon

ファイルの表示

@ -13,6 +13,7 @@ export default {
'modelValue',
'disabled',
'unstyled',
'kind'
'kind',
'attrs'
]
}

ファイルの表示

@ -6,6 +6,7 @@
<select
:disabled="disabled"
:value="modelValue"
v-bind="attrs"
@change="$emit('update:modelValue', $event.target.value)"
>
<slot />

ファイルの表示

@ -0,0 +1,16 @@
<template>
<NumberSetting
v-bind="$attrs"
>
<slot />
</NumberSetting>
</template>
<script>
import NumberSetting from './number_setting.vue'
export default {
components: {
NumberSetting
}
}
</script>

ファイルの表示

@ -1,27 +1,17 @@
<template>
<span
v-if="matchesExpertLevel"
class="IntegerSetting"
<NumberSetting
v-bind="$attrs"
truncate="1"
>
<label :for="path">
<slot />
</label>
<input
:id="path"
class="number-input"
type="number"
step="1"
:disabled="disabled"
:min="min || 0"
:value="state"
@change="update"
>
{{ ' ' }}
<ModifiedIndicator
:changed="isChanged"
:onclick="reset"
/>
</span>
<slot />
</NumberSetting>
</template>
<script src="./integer_setting.js"></script>
<script>
import NumberSetting from './number_setting.vue'
export default {
components: {
NumberSetting
}
}
</script>

ファイルの表示

@ -5,12 +5,12 @@
>
<Popover
trigger="hover"
:trigger-attrs="{ 'aria-label': $t('settings.setting_changed') }"
>
<template #trigger>
&nbsp;
<FAIcon
icon="wrench"
:aria-label="$t('settings.setting_changed')"
/>
</template>
<template #content>

ファイルの表示

@ -8,6 +8,8 @@ export default {
path: String,
disabled: Boolean,
min: Number,
step: Number,
truncate: Number,
expert: [Number, String]
},
computed: {
@ -15,8 +17,11 @@ export default {
const [firstSegment, ...rest] = this.path.split('.')
return [firstSegment + 'DefaultValue', ...rest].join('.')
},
parent () {
return this.$parent.$parent
},
state () {
const value = get(this.$parent, this.path)
const value = get(this.parent, this.path)
if (value === undefined) {
return this.defaultState
} else {
@ -24,21 +29,28 @@ export default {
}
},
defaultState () {
return get(this.$parent, this.pathDefault)
return get(this.parent, this.pathDefault)
},
isChanged () {
return this.state !== this.defaultState
},
matchesExpertLevel () {
return (this.expert || 0) <= this.$parent.expertLevel
return (this.expert || 0) <= this.parent.expertLevel
}
},
methods: {
truncateValue (value) {
if (!this.truncate) {
return value
}
return Math.trunc(value / this.truncate) * this.truncate
},
update (e) {
set(this.$parent, this.path, parseInt(e.target.value))
set(this.parent, this.path, this.truncateValue(parseFloat(e.target.value)))
},
reset () {
set(this.$parent, this.path, this.defaultState)
set(this.parent, this.path, this.defaultState)
}
}
}

ファイルの表示

@ -0,0 +1,27 @@
<template>
<span
v-if="matchesExpertLevel"
class="NumberSetting"
>
<label :for="path">
<slot />
</label>
<input
:id="path"
class="number-input"
type="number"
:step="step || 1"
:disabled="disabled"
:min="min || 0"
:value="state"
@change="update"
>
{{ ' ' }}
<ModifiedIndicator
:changed="isChanged"
:onclick="reset"
/>
</span>
</template>
<script src="./number_setting.js"></script>

ファイルの表示

@ -2,6 +2,7 @@ import BooleanSetting from '../helpers/boolean_setting.vue'
import ChoiceSetting from '../helpers/choice_setting.vue'
import ScopeSelector from 'src/components/scope_selector/scope_selector.vue'
import IntegerSetting from '../helpers/integer_setting.vue'
import FloatSetting from '../helpers/float_setting.vue'
import SizeSetting, { defaultHorizontalUnits } from '../helpers/size_setting.vue'
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
@ -62,6 +63,7 @@ const GeneralTab = {
BooleanSetting,
ChoiceSetting,
IntegerSetting,
FloatSetting,
SizeSetting,
InterfaceLanguageSwitcher,
ScopeSelector,

ファイルの表示

@ -271,6 +271,15 @@
{{ $t('settings.no_rich_text_description') }}
</BooleanSetting>
</li>
<li>
<FloatSetting
v-if="user"
path="emojiReactionsScale"
expert="1"
>
{{ $t('settings.emoji_reactions_scale') }}
</FloatSetting>
</li>
<h3>{{ $t('settings.attachments') }}</h3>
<li>
<BooleanSetting
@ -501,6 +510,14 @@
{{ $t('settings.pad_emoji') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting
path="autocompleteSelect"
expert="1"
>
{{ $t('settings.autocomplete_select_first') }}
</BooleanSetting>
</li>
</ul>
</div>
</div>

ファイルの表示

@ -12,6 +12,7 @@ import InterfaceLanguageSwitcher from 'src/components/interface_language_switche
import BooleanSetting from '../helpers/boolean_setting.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js'
import localeService from 'src/services/locale/locale.service.js'
import { propsToNative } from 'src/services/attributes_helper/attributes_helper.service.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
@ -261,6 +262,9 @@ const ProfileTab = {
messageArgs: [error.message],
level: 'error'
})
},
propsToNative (props) {
return propsToNative(props)
}
}
}

ファイルの表示

@ -8,11 +8,14 @@
enable-emoji-picker
:suggest="emojiSuggestor"
>
<input
id="username"
v-model="newName"
class="name-changer"
>
<template #default="inputProps">
<input
id="username"
v-model="newName"
class="name-changer"
v-bind="propsToNative(inputProps)"
>
</template>
</EmojiInput>
<p>{{ $t('settings.bio') }}</p>
<EmojiInput
@ -20,10 +23,13 @@
enable-emoji-picker
:suggest="emojiUserSuggestor"
>
<textarea
v-model="newBio"
class="bio resize-height"
/>
<template #default="inputProps">
<textarea
v-model="newBio"
class="bio resize-height"
v-bind="propsToNative(inputProps)"
/>
</template>
</EmojiInput>
<p v-if="role === 'admin' || role === 'moderator'">
<Checkbox v-model="showRole">
@ -60,10 +66,13 @@
hide-emoji-button
:suggest="userSuggestor"
>
<input
v-model="newFields[i].name"
:placeholder="$t('settings.profile_fields.name')"
>
<template #default="inputProps">
<input
v-model="newFields[i].name"
:placeholder="$t('settings.profile_fields.name')"
v-bind="propsToNative(inputProps)"
>
</template>
</EmojiInput>
<EmojiInput
v-model="newFields[i].value"
@ -71,10 +80,13 @@
hide-emoji-button
:suggest="userSuggestor"
>
<input
v-model="newFields[i].value"
:placeholder="$t('settings.profile_fields.value')"
>
<template #default="inputProps">
<input
v-model="newFields[i].value"
:placeholder="$t('settings.profile_fields.value')"
v-bind="propsToNative(inputProps)"
>
</template>
</EmojiInput>
<button
class="delete-field button-unstyled -hover-highlight"

ファイルの表示

@ -129,12 +129,13 @@
v-model="selected.inset"
:disabled="!present"
name="inset"
class="input-inset"
class="input-inset visible-for-screenreader-only"
type="checkbox"
>
<label
class="checkbox-label"
for="inset"
:aria-hidden="true"
/>
</div>
<div

ファイルの表示

@ -117,6 +117,7 @@ export default {
onClick={this.clickTab(index)}
class={classesTab.join(' ')}
type="button"
role="tab"
>
<img src={props.image} title={props['image-tooltip']}/>
{props.label ? '' : props.label}
@ -131,6 +132,7 @@ export default {
onClick={this.clickTab(index)}
class={classesTab.join(' ')}
type="button"
role="tab"
>
{!props.icon ? '' : (<FAIcon class="tab-icon" size="2x" fixed-width icon={props.icon}/>)}
<span class="text">
@ -167,11 +169,15 @@ export default {
return (
<div class={'tab-switcher ' + (this.sideTabBar ? 'side-tabs' : 'top-tabs')}>
<div class="tabs">
<div
class="tabs"
role="tablist"
>
{tabs}
</div>
<div
ref="contents"
role="tabpanel"
class={'contents' + (this.scrollableTabs ? ' scrollable-tabs' : '')}
v-body-scroll-lock={this.bodyScrollLock}
>

ファイルの表示

@ -176,6 +176,7 @@
"bookmarks": "Bookmarks",
"user_search": "User Search",
"search": "Search",
"search_close": "Close search bar",
"who_to_follow": "Who to follow",
"preferences": "Preferences",
"timelines": "Timelines",
@ -270,6 +271,7 @@
"text/markdown": "Markdown",
"text/bbcode": "BBCode"
},
"content_type_selection": "Post format",
"content_warning": "Subject (optional)",
"default": "Just got exiled to Nusakambangan",
"direct_warning_to_all": "This post will be visible to all the mentioned users.",
@ -287,6 +289,7 @@
"private": "This post will be visible to your followers only",
"unlisted": "This post will not be visible in Public Timeline and The Whole Known Network"
},
"scope_notice_dismiss": "Close this notice",
"scope": {
"direct": "Direct - post to mentioned users only",
"private": "Followers-only - post to followers only",
@ -462,7 +465,9 @@
"domain_mutes": "Domains",
"avatar_size_instruction": "The recommended minimum size for avatar images is 150x150 pixels.",
"pad_emoji": "Pad emoji with spaces when adding from picker",
"autocomplete_select_first": "Automatically select the first candidate when autocomplete results are available",
"emoji_reactions_on_timeline": "Show emoji reactions on timeline",
"emoji_reactions_scale": "Reactions scale factor",
"export_theme": "Save preset",
"filtering": "Filtering",
"wordfilter": "Wordfilter",
@ -1055,7 +1060,8 @@
"reject_follow_request": "Reject follow request",
"bookmark": "Bookmark",
"toggle_expand": "Expand or collapse notification to show post in full",
"toggle_mute": "Expand or collapse notification to reveal muted content"
"toggle_mute": "Expand or collapse notification to reveal muted content",
"autocomplete_available": "{number} result is available. Use up and down keys to navigate through them. | {number} results are available. Use up and down keys to navigate through them."
},
"upload": {
"error": {

1194
src/i18n/ja_easy.json ノーマルファイル

ファイル差分が大きすぎるため省略します 差分を読み込み

1030
src/i18n/uk.json ノーマルファイル

ファイル差分が大きすぎるため省略します 差分を読み込み

1199
src/i18n/zh.json ノーマルファイル

ファイル差分が大きすぎるため省略します 差分を読み込み

905
src/i18n/zh_Hant.json ノーマルファイル
ファイルの表示

@ -0,0 +1,905 @@
{
"emoji": {
"unicode": "統一碼繪文字",
"custom": "自定義繪文字",
"add_emoji": "插入繪文字",
"search_emoji": "搜索繪文字",
"keep_open": "選擇器保持打開",
"emoji": "繪文字",
"stickers": "貼紙",
"load_all": "加載所有繪文字(共 {emojiAmount} 個)",
"load_all_hint": "最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。"
},
"polls": {
"not_enough_options": "投票的選項太少",
"expired": "投票 {0} 前已結束",
"expires_in": "投票於 {0} 內結束",
"expiry": "投票期限",
"multiple_choices": "多選",
"single_choice": "單選",
"type": "問卷類型",
"vote": "投票",
"votes": "票",
"option": "選項",
"add_option": "增加選項",
"add_poll": "增加投票",
"votes_count": "{count} 票 | {count} 票",
"people_voted_count": "{count} 人已投票 | {count} 人已投票"
},
"notifications": {
"reacted_with": "作出了 {0} 的反應",
"migrated_to": "遷移到",
"no_more_notifications": "沒有更多的通知",
"repeated_you": "轉發了你的發文",
"read": "已閱!",
"notifications": "通知",
"load_older": "載入更早的通知",
"follow_request": "想要關注你",
"followed_you": "關注了你",
"favorited_you": "喜歡了你的發文",
"broken_favorite": "未知的狀態,正在搜索中…",
"error": "獲取通知錯誤:{0}"
},
"nav": {
"chats": "聊天",
"timelines": "時間線",
"preferences": "偏好設置",
"who_to_follow": "推薦關注",
"search": "搜索",
"user_search": "用戶搜索",
"bookmarks": "書籤",
"twkn": "已知網絡",
"timeline": "時間線",
"public_tl": "公共時間線",
"dms": "私信",
"interactions": "互動",
"mentions": "提及",
"friend_requests": "關注請求",
"back": "後退",
"administration": "管理員",
"about": "關於",
"home_timeline": "家時間線"
},
"media_modal": {
"next": "往後",
"previous": "往前"
},
"login": {
"heading": {
"recovery": "雙重因素恢復",
"totp": "雙重因素驗證"
},
"recovery_code": "恢復碼",
"enter_two_factor_code": "輸入一個雙重因素驗證碼",
"enter_recovery_code": "輸入一個恢復碼",
"authentication_code": "驗證碼",
"hint": "登錄後加入討論",
"username": "用戶名",
"register": "註冊",
"placeholder": "例:鈴音",
"password": "密碼",
"logout": "登出",
"description": "用 OAuth 登入",
"login": "登入"
},
"importer": {
"error": "導入此文件時出現一個錯誤。",
"success": "導入成功。",
"submit": "提交"
},
"image_cropper": {
"cancel": "取消",
"save_without_cropping": "保存不裁剪",
"save": "保存",
"crop_picture": "裁剪圖片"
},
"general": {
"peek": "窺視",
"close": "關閉",
"verify": "驗證",
"confirm": "確認",
"enable": "啟用",
"disable": "禁用",
"cancel": "取消",
"dismiss": "忽略",
"show_less": "收起",
"show_more": "展開",
"optional": "可選",
"retry": "再試",
"error_retry": "請再試",
"generic_error": "發生一個錯誤",
"loading": "載入中…",
"more": "更多",
"submit": "提交",
"apply": "應用",
"role": {
"moderator": "審查者",
"admin": "管理員"
},
"flash_content": "點擊以使用 Ruffle 顯示 Flash 內容(實驗性,可能無效)。",
"flash_security": "請注意這可能有潜在的危險因為Flash內容仍然是武斷的程式碼。",
"flash_fail": "無法加載flash內容請參閱控制台瞭解詳細資訊。",
"no": "否",
"generic_error_message": "發生了一個錯誤: {0}",
"never_show_again": "不再顯示",
"yes": "是",
"undo": "復原",
"scroll_to_top": "滾動至頂部",
"pin": "置頂",
"scope_in_timeline": {
"private": "僅關注者"
},
"unpin": "停止置頂"
},
"finder": {
"find_user": "尋找用戶",
"error_fetching_user": "獲取用戶時發生錯誤"
},
"features_panel": {
"who_to_follow": "推薦關注",
"title": "特色",
"text_limit": "文字數量限制",
"scope_options": "可見範圍設置",
"media_proxy": "媒體代理",
"pleroma_chat_messages": "Pleroma 聊天",
"chat": "聊天",
"gopher": "Gopher",
"upload_limit": "上傳限制",
"shout": "留言板"
},
"exporter": {
"processing": "正在處理,稍後會提示您下載文件",
"export": "導出"
},
"domain_mute_card": {
"unmute_progress": "取消靜音中…",
"unmute": "取消靜音",
"mute_progress": "靜音中…",
"mute": "靜音"
},
"shoutbox": {
"title": "留言板"
},
"about": {
"staff": "職員",
"mrf": {
"simple": {
"media_nsfw_desc": "這個實例強迫以下實例的帖子媒體設定為敏感:",
"media_nsfw": "媒體強制設定為敏感",
"media_removal_desc": "這個實例移除以下實例的帖子媒體:",
"media_removal": "移除媒體",
"ftl_removal_desc": "這個實例在所有已知網絡中移除下列實例:",
"ftl_removal": "從所有已知網路中移除",
"quarantine_desc": "本實例只會把公開發文發送到下列實例:",
"quarantine": "隔離",
"reject_desc": "本實例不會接收來自下列實例的消息:",
"reject": "拒絕",
"accept_desc": "本實例只接收來自下列實例的消息:",
"simple_policies": "站規",
"accept": "接受",
"instance": "實例",
"reason": "原因",
"not_applicable": "N/A"
},
"mrf_policies_desc": "MRF 策略會影響本實例的互通行為。以下策略已啟用:",
"keyword": {
"ftl_removal": "從「全部已知網絡」時間線上移除",
"replace": "取代",
"reject": "拒絕",
"is_replaced_by": "→",
"keyword_policies": "關鍵字政策"
},
"mrf_policies": "已啟用的MRF政策",
"federation": "聯邦"
}
},
"settings": {
"style": {
"common": {
"color": "顏色",
"contrast": {
"context": {
"18pt": "大字文本 (18pt+)",
"text": "文本"
},
"level": {
"aaa": "符合 AAA 等級準則(推薦)",
"aa": "符合 AA 等級準則(最低)",
"bad": "不符合任何輔助功能指南"
},
"hint": "對比度是 {ratio} 它 {level} {context}"
},
"opacity": "透明度"
},
"advanced_colors": {
"faint_text": "灰度文字",
"alert_error": "錯誤",
"badge_notification": "通知",
"alert": "提醒或警告背景色",
"_tab_label": "高级",
"alert_warning": "警告",
"alert_neutral": "中性",
"post": "帖子/用戶簡介",
"badge": "徽章背景",
"popover": "提示框,菜單,彈出框",
"panel_header": "面板標題",
"top_bar": "頂欄",
"borders": "邊框",
"buttons": "按鈕",
"inputs": "輸入框",
"underlay": "底襯",
"poll": "投票統計圖",
"icons": "圖標",
"highlight": "強調元素",
"pressed": "按下",
"selectedPost": "選中的帖子",
"selectedMenu": "選中的菜單項",
"disabled": "關閉",
"toggled": "切換",
"tabs": "標籤",
"chat": {
"incoming": "收到",
"outgoing": "發出",
"border": "邊框"
},
"wallpaper": "桌布"
},
"preview": {
"header_faint": "這很正常",
"header": "預覽",
"content": "內容",
"error": "例子錯誤",
"button": "按鈕",
"text": "有堆 {0} 和 {1}",
"mono": "內容",
"input": "剛剛抵達洛杉磯.",
"faint_link": "有用的手冊",
"fine_print": "閱讀我們的 {0} ,然而什麼有用的也學不到!",
"checkbox": "我已經瀏覽了條款及細則",
"link": "一個很好的小鏈接"
},
"shadows": {
"override": "覆寫",
"_tab_label": "陰影和燈光",
"component": "組件",
"shadow_id": "陰影 #{value}",
"blur": "模糊",
"spread": "擴散",
"inset": "插圖",
"hintV3": "對於陰影,您還可以使用{0}表示法來使用其他顏色插槽。",
"filter_hint": {
"always_drop_shadow": "警告,此陰影設置會總是使用 {0} ,如果瀏覽器支持的話。",
"drop_shadow_syntax": "{0} 不支持參數 {1} 和關鍵詞 {2} 。",
"avatar_inset": "請注意組合兩個內部和非內部的陰影到頭像上,在透明頭像上可能會有意料之外的效果。",
"spread_zero": "陰影的擴散 > 0 會同設置成零一樣",
"inset_classic": "插入內部的陰影會使用 {0}"
},
"components": {
"panel": "面板",
"panelHeader": "面板標題",
"topBar": "頂欄",
"avatar": "用戶頭像(在個人資料欄)",
"avatarStatus": "用戶頭像(在帖子顯示欄)",
"popup": "彈窗和工具提示",
"button": "按鈕",
"buttonHover": "按鈕(懸停)",
"buttonPressed": "按鈕(按下)",
"buttonPressedHover": "按鈕(按下和懸停)",
"input": "輸入框"
}
},
"switcher": {
"use_snapshot": "舊版",
"load_theme": "載入主題",
"keep_color": "保留顏色",
"keep_shadows": "保留陰影",
"keep_opacity": "保留透明度",
"keep_roundness": "保留圓角",
"help": {
"migration_napshot_gone": "不知出於何種原因,主題快照缺失了,一些地方可能與您印象中的不符。",
"snapshot_source_mismatch": "版本衝突:很有可能是 FE 版本回滾後再次升級了,如果您使用舊版本的 FE 更改了主題那麼您可能需要使用舊版本,否則請使用新版本。",
"future_version_imported": "您導入的文件來自更高版本的 FE。",
"older_version_imported": "您導入的文件來自舊版本的 FE。",
"snapshot_missing": "在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。",
"fe_upgraded": "PleromaFE 的主題引擎隨著版本更新升級了。",
"fe_downgraded": "PleromaFE 的版本回滾了。",
"upgraded_from_v2": "PleromaFE 已升級,主題會和你記憶中的不太一樣。",
"v2_imported": "您導入的文件是舊版 FE 的。我們儘可能保持兼容性,但還是可能出現不一致的情況。",
"snapshot_present": "載入快照已加載,因此所有值均被覆蓋。 您可以改為載入主題實際數據。",
"migration_snapshot_ok": "為保萬無一失,載入了主題快照。您可以試著載入主題數據。"
},
"use_source": "新版本",
"keep_as_is": "保持原狀",
"clear_opacity": "清除透明度",
"clear_all": "清除全部",
"reset": "重置",
"keep_fonts": "保留字體",
"save_load_hint": "\"保留\" 選項在選擇或載入主題時保留當前設置的選項,在導出主題時還會存儲上述選項。當所有複選框未設置時,導出主題將保存所有內容。"
},
"fonts": {
"components": {
"interface": "界面",
"input": "輸入框",
"post": "發帖文字",
"postCode": "帖子中使用等間距文字(富文本)"
},
"_tab_label": "字體",
"help": "給用戶界面的元素選擇字體。選擇 “自選”的你必須輸入確切的字體名稱。",
"family": "字體名稱",
"size": "大小 (像素)",
"weight": "字重 (粗體))",
"custom": "自選"
},
"common_colors": {
"foreground_hint": "點擊”高級“ 標籤進行細緻的控制",
"main": "常用顏色",
"_tab_label": "共同",
"rgbo": "圖標,強調,徽章"
},
"radii": {
"_tab_label": "圓角"
}
},
"notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
"user_mutes": "用户",
"hide_followers_count_description": "不顯示關注者數量",
"no_rich_text_description": "不顯示富文本格式",
"notification_visibility_moves": "用戶遷移",
"notification_visibility_repeats": "轉發",
"notification_visibility_mentions": "提及",
"notification_visibility_likes": "喜歡",
"interfaceLanguage": "界面語言",
"instance_default": "(默認:{value})",
"inputRadius": "輸入框",
"import_theme": "導入預置主題",
"import_followers_from_a_csv_file": "從 csv 文件中導入關注",
"import_blocks_from_a_csv_file": "從 csv 文件中導入封鎖黑名單名單",
"hide_filtered_statuses": "隱藏過濾的發文",
"lock_account_description": "你需要手動審核關注請求",
"loop_video": "循環視頻",
"loop_video_silent_only": "只循環沒有聲音的視頻(例如Mastodon 裡的“GIF”)",
"mutes_tab": "靜音",
"play_videos_in_modal": "在彈出框內播放視頻",
"profile_fields": {
"add_field": "添加字段",
"name": "標籤",
"value": "內容",
"label": "個人資料元數據"
},
"use_contain_fit": "生成縮略圖時不要裁剪附件",
"notification_visibility": "要顯示的通知類型",
"notification_visibility_follows": "關注",
"new_email": "新電郵",
"subject_line_mastodon": "比如mastodon: copy as is",
"reset_background_confirm": "您確定要重置個人資料背景圖嗎?",
"reset_banner_confirm": "您確定要重置橫幅圖片嗎?",
"reset_avatar_confirm": "您確定要重置頭像嗎?",
"reset_profile_banner": "重置橫幅圖片",
"reset_profile_background": "重置個人資料背景圖",
"reset_avatar": "重置頭像",
"discoverable": "允許通過搜索檢索等服務找到此賬號",
"delete_account_error": "刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。",
"composing": "寫作設置",
"chatMessageRadius": "聊天訊息",
"mfa": {
"confirm_and_enable": "確認並啟用OTP",
"setup_otp": "設置OTP",
"otp": "OTP",
"wait_pre_setup_otp": "預設OTP",
"verify": {
"desc": "要啟用雙因素驗證,請把你的雙因素驗證 app 裡的數字輸入:"
},
"scan": {
"secret_code": "密鑰",
"desc": "使用你的雙因素驗證 app掃瞄這個二維碼或者輸入這些文字密鑰",
"title": "掃瞄"
},
"authentication_methods": "身份驗證方法",
"recovery_codes_warning": "抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app也丟失了你的恢復碼你的賬號就再也無法登錄了。",
"waiting_a_recovery_codes": "正在接收備份碼…",
"recovery_codes": "恢復碼。",
"warning_of_generate_new_codes": "當你生成新的恢復碼時,你的舊恢復碼就失效了。",
"generate_new_recovery_codes": "生成新的恢復碼",
"title": "雙因素驗證"
},
"new_password": "新密碼",
"name_bio": "名字及簡介",
"name": "名字",
"domain_mutes": "域名",
"delete_account_instructions": "在下面輸入密碼,以確認刪除帳戶。",
"delete_account_description": "永久刪除你的帳號和所有數據。",
"delete_account": "刪除帳戶",
"default_vis": "默認可見性範圍",
"data_import_export_tab": "數據導入/導出",
"mutes_and_blocks": "靜音與封鎖",
"current_password": "當前密碼",
"confirm_new_password": "確認新密碼",
"collapse_subject": "摺疊帶標題的內容",
"checkboxRadius": "複選框",
"instance_default_simple": "(默認)",
"interface": "界面",
"invalid_theme_imported": "您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。",
"limited_availability": "在您的瀏覽器中無法使用",
"links": "鏈接",
"changed_password": "成功修改了密碼!",
"change_password_error": "修改密碼的時候出了點問題。",
"change_password": "修改密碼",
"changed_email": "郵箱修改成功!",
"bot": "這是一個機器人賬號",
"change_email": "修改電子郵箱",
"cRed": "紅色(取消)",
"cOrange": "橙色(收藏)",
"cGreen": "綠色(轉發)",
"cBlue": "藍色(回覆,關注)",
"btnRadius": "按鈕",
"notification_visibility_emoji_reactions": "互動",
"no_blocks": "沒有封鎖",
"no_mutes": "沒有靜音",
"hide_follows_description": "不要顯示我所關注的人",
"hide_followers_description": "不要顯示關注我的人",
"hide_follows_count_description": "不顯示關注數",
"nsfw_clickthrough": "將敏感附件和鏈接隱藏,點擊才能打開",
"valid_until": "有效期至",
"panelRadius": "面板",
"pause_on_unfocused": "在離開頁面時暫停時間線推送",
"notifications": "通知",
"notification_setting_filters": "過濾器",
"notification_setting_privacy": "隱私",
"notification_mutes": "要停止收到某個指定的用戶的通知,請使用靜音功能。",
"notification_blocks": "封鎖一個用戶會停掉所有他的通知,等同於取消關注。",
"enable_web_push_notifications": "啟用 web 推送通知",
"presets": "預置",
"profile_background": "配置文件背景圖",
"profile_banner": "橫幅圖片",
"profile_tab": "個人資料",
"radii_help": "設置界面邊緣的圓角 (單位:像素)",
"reply_visibility_all": "顯示所有回覆",
"autohide_floating_post_button": "自動隱藏新帖子的按鈕(移動設備)",
"saving_err": "保存設置時發生錯誤",
"saving_ok": "設置已保存",
"search_user_to_block": "搜索你想屏蔽的用戶",
"search_user_to_mute": "搜索你想要隱藏的用戶",
"security_tab": "安全",
"set_new_avatar": "設置新頭像",
"set_new_profile_background": "設置新的個人背景",
"set_new_profile_banner": "設置新的個人橫幅",
"settings": "設置",
"subject_input_always_show": "總是顯示主題框",
"subject_line_behavior": "回覆時複製主題",
"subject_line_email": "比如電郵: \"re: 主題\"",
"subject_line_noop": "不要複製",
"post_status_content_type": "發文內容類型",
"stop_gifs": "鼠標懸停時播放GIF",
"streaming": "開啟滾動到頂部時的自動推送",
"text": "文本",
"theme": "主題",
"theme_help": "使用十六進制代碼(#rrggbb)來設置主題顏色。",
"theme_help_v2_1": "你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。",
"theme_help_v2_2": "某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。",
"tooltipRadius": "提醒",
"upload_a_photo": "上傳照片",
"user_settings": "用戶設置",
"values": {
"false": "否",
"true": "是"
},
"avatar_size_instruction": "推薦的頭像圖片最小的尺寸是 150x150 像素。",
"emoji_reactions_on_timeline": "在時間線上顯示繪文字互動",
"export_theme": "導出預置主題",
"filtering": "過濾",
"filtering_explanation": "所有包含以下詞彙的內容都會被隱藏,一行一個",
"follow_export": "導出關注",
"follow_export_button": "將關注導出成 csv 文件",
"follow_import": "導入關注",
"follow_import_error": "導入關注時錯誤",
"follows_imported": "關注已導入!尚需要一些時間來處理。",
"hide_attachments_in_convo": "在對話中隱藏附件",
"hide_attachments_in_tl": "在時間線上隱藏附件",
"hide_muted_posts": "不顯示被靜音的用戶的帖子",
"max_thumbnails": "最多每個帖子所能顯示的縮略圖數量",
"hide_isp": "隱藏指定實例的面板",
"preload_images": "預載圖片",
"use_one_click_nsfw": "點擊一次以打開工作場所不適宜的附件",
"hide_post_stats": "隱藏帖子的統計數據(例如:收藏的次數)",
"hide_user_stats": "隱藏用戶的統計數據(例如:關注者的數量)",
"general": "通用",
"foreground": "前景",
"blocks_tab": "封鎖",
"blocks_imported": "封鎖黑名單導入成功!需要一點時間來處理。",
"block_import_error": "導入封鎖黑名單出錯",
"block_import": "封鎖黑名單導入",
"block_export_button": "導出你的封鎖黑名單到一個 csv 文件",
"block_export": "封鎖黑名單導出",
"bio": "簡介",
"background": "背景",
"avatarRadius": "頭像",
"avatarAltRadius": "頭像(通知)",
"avatar": "頭像",
"attachments": "附件",
"attachmentRadius": "附件",
"allow_following_move": "正在關注的賬號遷移時自動重新關注",
"enter_current_password_to_confirm": "輸入你當前密碼來確認你的身份",
"security": "安全",
"app_name": "App 名稱",
"change_email_error": "修改你的電子郵箱時發生錯誤。",
"type_domains_to_mute": "搜索需要隱藏的域名",
"pad_emoji": "從繪文字選擇器插入繪文字時,在繪文字兩側插入空格",
"useStreamingApi": "實時接收發佈以及通知",
"minimal_scopes_mode": "最小發文範圍",
"scope_copy": "回覆時的複製範圍(私信是總是複製的)",
"reply_visibility_self": "只顯示發送給我的回覆",
"reply_visibility_following": "只顯示發送給我的回覆/發送給我關注的用戶的回覆",
"replies_in_timeline": "時間線中的回覆",
"revoke_token": "撤消",
"show_admin_badge": "顯示管理徽章",
"accent": "強調色",
"greentext": "前文箭頭",
"show_moderator_badge": "顯示主持人徽章",
"oauth_tokens": "OAuth代幣",
"token": "代幣",
"refresh_token": "刷新token",
"useStreamingApiWarning": "(不推薦使用,實驗性的,已知跳過文章)",
"fun": "有趣",
"notification_setting_hide_notification_contents": "隱藏推送通知中的發送者與內容信息",
"version": {
"title": "版本",
"backend_version": "後端版本",
"frontend_version": "前端版本"
},
"virtual_scrolling": "優化時間線渲染",
"import_mutes_from_a_csv_file": "從CSV文件導入靜音",
"mutes_imported": "靜音導入了!處理它們將需要一段時間。",
"mute_import": "靜音導入",
"mute_import_error": "導入靜音時出錯",
"mute_export_button": "將靜音導出到csv文件",
"mute_export": "靜音導出",
"hide_wallpaper": "隱藏實例桌布",
"reply_visibility_self_short": "只顯示對我本人的回复",
"reply_visibility_following_short": "顯示對我關注的人的回复",
"hide_all_muted_posts": "不顯示已隱藏的帖子",
"hide_media_previews": "隱藏媒體預覽",
"word_filter": "詞過濾",
"setting_changed": "與默認設置不同",
"more_settings": "更多設置",
"save": "保存更改",
"file_export_import": {
"errors": {
"invalid_file": "所選文件不是受支持的Pleroma設置備份。 沒有進行任何更改。",
"file_too_new": "不兼容的主版本:{fileMajor},此 PleromaFE(設置版本 {feMajor})過舊,無法處理",
"file_too_old": "不兼容的主版本:{fileMajor},文件版本過舊,不受支持(最小設置版本 {feMajor})",
"file_slightly_new": "檔案的小版本不同,有些設置可能無法載入"
},
"restore_settings": "從文件還原設置",
"backup_settings_theme": "備份設置和主題到文件",
"backup_settings": "備份設置到文件",
"backup_restore": "設定備份"
},
"sensitive_by_default": "默認標記發文為敏感內容",
"right_sidebar": "在右側顯示側邊欄",
"hide_shoutbox": "隱藏實例留言框"
},
"chats": {
"more": "更多",
"delete_confirm": "您確實要刪除此消息嗎?",
"error_loading_chat": "加載聊天時出了點問題。",
"error_sending_message": "發送消息時出了點問題。",
"empty_chat_list_placeholder": "您還沒有任何聊天記錄。 開始新的聊天!",
"new": "新聊天",
"empty_message_error": "無法發布空消息",
"you": "你:",
"message_user": "發消息給 {nickname}",
"delete": "刪除",
"chats": "聊天"
},
"file_type": {
"audio": "音頻",
"video": "視頻",
"image": "图片",
"file": "檔案"
},
"display_date": {
"today": "今天"
},
"status": {
"mute_conversation": "靜音對話",
"replies_list": "回覆:",
"reply_to": "回覆",
"pin": "在個人資料置頂",
"unpin": "取消在個人資料置頂",
"favorites": "喜歡",
"repeats": "轉發",
"delete": "刪除發文",
"pinned": "置頂",
"bookmark": "書籤",
"unbookmark": "取消書籤",
"delete_confirm": "你真的想要刪除這條發文嗎?",
"unmute_conversation": "對話取消靜音",
"status_unavailable": "發文不可取得",
"copy_link": "複製發文鏈接",
"thread_muted": "静音線程",
"show_full_subject": "顯示完整標題",
"thread_muted_and_words": ",有这些字:",
"hide_full_subject": "隱藏完整標題",
"show_content": "顯示內容",
"hide_content": "隱藏內容",
"status_deleted": "該帖已被刪除",
"expand": "展开",
"external_source": "外部來源",
"nsfw": "工作不安全"
},
"time": {
"hours": "{0} 時",
"days_short": "{0}天",
"day_short": "{0}天",
"days": "{0} 天",
"hour": "{0} 時",
"hour_short": "{0}時",
"hours_short": "{0}時",
"years_short": "{0} y",
"now": "剛剛",
"day": "{0} 天",
"in_future": "還有 {0}",
"in_past": "{0} 之前",
"minute": "{0} 分鐘",
"minute_short": "{0} 分",
"minutes_short": "{0} 分",
"minutes": "{0} 分鐘",
"month": "{0} 月",
"months": "{0} 月",
"month_short": "{0} 月",
"months_short": "{0} 月",
"now_short": "剛剛",
"second": "{0} 秒",
"seconds": "{0} 秒",
"second_short": "{0} 秒",
"seconds_short": "{0} 秒",
"week": "{0}周",
"weeks": "{0}周",
"week_short": "{0}周",
"weeks_short": "{0}周",
"year": "{0} 年",
"years": "{0} 年",
"year_short": "{0}年"
},
"post_status": {
"media_description_error": "無法更新媒體,請重試",
"media_description": "媒體描述",
"scope": {
"unlisted": "不公開 - 不會發送到公共時間軸",
"public": "公共 - 發送到公共時間軸",
"private": "僅關注者 - 只有關注了你的人能看到",
"direct": "私信 - 只發送給被提及的用戶"
},
"scope_notice": {
"unlisted": "本條內容既不在公共時間線,也不會在所有已知網絡上可見",
"private": "關注你的人才能看到本條內容",
"public": "本條帖子可以被所有人看到"
},
"preview_empty": "空的",
"preview": "預覽",
"posting": "正在發送",
"direct_warning_to_first_only": "本條內容只有被在消息開始處提及的用戶能夠看到。",
"direct_warning_to_all": "本條內容只有被提及的用戶能夠看到。",
"account_not_locked_warning": "你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。",
"new_status": "發佈新發文",
"content_warning": "主題(可選)",
"content_type": {
"text/bbcode": "BBCode",
"text/markdown": "Markdown",
"text/html": "HTML",
"text/plain": "純文本"
},
"attachments_sensitive": "標記附件為敏感內容",
"account_not_locked_warning_link": "上鎖",
"default": "剛剛抵達洛杉磯。",
"empty_status_error": "不能發布沒有內容,沒有附件的發文",
"post": "發送"
},
"errors": {
"storage_unavailable": "Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存您可能會遇到意外問題。嘗試啟用Cookie。"
},
"timeline": {
"error_fetching": "獲取更新時發生錯誤",
"conversation": "對話",
"no_retweet_hint": "這條內容僅關注者可見,或者是私信,因此不能轉發",
"collapse": "摺疊",
"load_older": "載入更早的發文",
"repeated": "已轉發",
"show_new": "顯示新內容",
"reload": "重新載入",
"up_to_date": "已是最新",
"no_more_statuses": "没有更多發文",
"no_statuses": "没有發文",
"error": "取得時間線時發生錯誤:{0}",
"socket_reconnected": "已建立實時連接",
"socket_broke": "丟失實時連接CloseEvent代碼{0}"
},
"interactions": {
"load_older": "載入更早的互動",
"moves": "用戶遷移",
"follows": "新的關注者",
"favs_repeats": "轉發和喜歡"
},
"selectable_list": {
"select_all": "選擇全部"
},
"remote_user_resolver": {
"error": "未找到。",
"searching_for": "搜索",
"remote_user_resolver": "遠程用戶解析器"
},
"registration": {
"validations": {
"password_confirmation_match": "不能和密碼一樣",
"password_confirmation_required": "不能留空",
"password_required": "不能留空",
"email_required": "不能留空",
"fullname_required": "不能留空",
"username_required": "不能留空"
},
"fullname": "顯示名稱",
"bio_placeholder": "例如:\n你好我是玲音。\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。",
"fullname_placeholder": "例如:岩倉玲音",
"username_placeholder": "例如lain",
"new_captcha": "點擊圖片獲取新的驗證碼",
"captcha": "CAPTCHA",
"token": "邀請碼",
"registration": "註冊",
"password_confirm": "確認密碼",
"email": "電子郵箱",
"bio": "簡介",
"reason_placeholder": "此實例的註冊需要手動批准。\n請讓管理知道您為什麼想要註冊。",
"reason": "註冊理由",
"register": "註冊"
},
"user_card": {
"its_you": "就是你!!",
"media": "媒體",
"per_day": "每天",
"remote_follow": "跨站關注",
"subscribe": "訂閱",
"mute_progress": "靜音中…",
"admin_menu": {
"delete_account": "刪除賬號",
"delete_user": "刪除用戶",
"moderation": "調停",
"grant_admin": "賦予管理權限",
"revoke_admin": "撤銷管理權限",
"grant_moderator": "賦予主持人權限",
"revoke_moderator": "撤銷主持人權限",
"activate_account": "啟用賬號",
"deactivate_account": "關閉賬號",
"force_nsfw": "標記所有的帖子都是工作場合不適",
"strip_media": "從帖子裡刪除媒體文件",
"force_unlisted": "強制帖子為不公開",
"sandbox": "強制帖子為只有關注者可看",
"disable_remote_subscription": "禁止從遠程實例關注用戶",
"disable_any_subscription": "完全禁止關注用戶",
"quarantine": "從聯合實例中禁止用戶帖子"
},
"approve": "批准",
"block": "封鎖",
"blocked": "已封鎖!",
"deny": "拒絕",
"favorites": "喜歡",
"follow": "關注",
"follow_sent": "請求已發送!",
"follow_progress": "請求中…",
"follow_unfollow": "取消關注",
"followees": "正在關注",
"followers": "關注者",
"following": "正在關注!",
"follows_you": "關注了你!",
"hidden": "已隱藏",
"mention": "提及",
"message": "消息",
"mute": "靜音",
"muted": "已靜音",
"report": "報告",
"statuses": "發文",
"unsubscribe": "退訂",
"unblock": "取消封鎖",
"unblock_progress": "取消封鎖中…",
"block_progress": "封鎖中…",
"unmute": "取消靜音",
"unmute_progress": "取消靜音中…",
"hide_repeats": "隱藏轉發",
"show_repeats": "顯示轉發",
"roles": {
"moderator": "主持人",
"admin": "管理員"
},
"highlight": {
"disabled": "無突出顯示",
"solid": "單色背景",
"striped": "條紋背景",
"side": "彩條"
},
"bot": "機器人",
"edit_profile": "編輯個人資料"
},
"user_profile": {
"timeline_title": "用戶時間線",
"profile_does_not_exist": "抱歉,此個人資料不存在。",
"profile_loading_error": "抱歉,載入個人資料時出錯。"
},
"user_reporting": {
"title": "報告 {0}",
"add_comment_description": "此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:",
"forward_to": "轉發 {0}",
"submit": "提交",
"generic_error": "當處理你的請求時,發生了一個錯誤。",
"additional_comments": "其它評論",
"forward_description": "這個賬號是從另外一個服務器。同時發送一個報告到那裡?"
},
"who_to_follow": {
"more": "更多",
"who_to_follow": "推薦關注"
},
"tool_tip": {
"media_upload": "上傳多媒體",
"repeat": "轉發",
"favorite": "喜歡",
"add_reaction": "添加互動",
"reply": "回覆",
"user_settings": "用戶設置",
"accept_follow_request": "接受關注請求",
"reject_follow_request": "拒絕關注請求",
"bookmark": "書籤"
},
"upload": {
"file_size_units": {
"B": "B",
"KiB": "KiB",
"TiB": "TiB",
"MiB": "MiB",
"GiB": "GiB"
},
"error": {
"base": "上傳失敗。",
"file_too_big": "文件太大[{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
"default": "稍後再試",
"message": "上傳錯誤:{0}"
}
},
"search": {
"people": "人",
"hashtags": "標籤",
"person_talking": "{count} 人正在討論",
"people_talking": "{count} 人正在討論",
"no_results": "沒有搜索結果"
},
"password_reset": {
"forgot_password": "忘記密碼了?",
"password_reset": "重置密碼",
"instruction": "輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。",
"placeholder": "你的電郵地址或者用戶名",
"check_email": "檢查你的郵箱,會有一個鏈接用於重置密碼。",
"return_home": "回到首頁",
"too_many_requests": "你觸發了嘗試的限制,請稍後再試。",
"password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。",
"password_reset_required": "您必須重置密碼才能登陸。",
"password_reset_required_but_mailer_is_disabled": "您必須重置密碼,但是密碼重置被禁用了。請聯繫您所在實例的管理員。"
},
"announcements": {
"post_error": "錯誤: {error}",
"close_error": "關閉",
"delete_action": "刪除",
"start_time_prompt": "開始時間: ",
"end_time_prompt": "結束時間: ",
"all_day_prompt": "這是全日活動",
"start_time_display": "{time} 開始",
"end_time_display": "{time} 結束",
"published_time_display": "{time} 發布",
"edit_action": "編輯",
"submit_edit_action": "送出",
"cancel_edit_action": "取消",
"inactive_message": "此公告無效",
"page_header": "公告",
"title": "公告",
"mark_as_read_action": "標示為以閱讀",
"post_placeholder": "在此輸入您的公告內容……",
"post_form_header": "發布公告",
"post_action": "發布"
}
}

ファイルの表示

@ -97,6 +97,7 @@ export const defaultState = {
sidebarColumnWidth: '25rem',
contentColumnWidth: '45rem',
notifsColumnWidth: '25rem',
emojiReactionsScale: 1.0,
navbarColumnStretch: false,
greentext: true,
useAtIcon: undefined, // instance default
@ -115,7 +116,8 @@ export const defaultState = {
conversationTreeAdvanced: undefined, // instance default
conversationOtherRepliesButton: undefined, // instance default
conversationTreeFadeAncestors: undefined, // instance default
maxDepthInThread: undefined // instance default
maxDepthInThread: undefined, // instance default
autocompleteSelect: undefined // instance default
}
// caching the instance default properties
@ -184,6 +186,7 @@ const config = {
case 'sidebarColumnWidth':
case 'contentColumnWidth':
case 'notifsColumnWidth':
case 'emojiReactionsScale':
applyConfig(state)
break
case 'customTheme':

ファイルの表示

@ -104,6 +104,7 @@ const defaultState = {
conversationOtherRepliesButton: 'below',
conversationTreeFadeAncestors: false,
maxDepthInThread: 6,
autocompleteSelect: false,
// Nasty stuff
customEmoji: [],
@ -122,6 +123,7 @@ const defaultState = {
// Feature-set, apparently, not everything here is reported...
shoutAvailable: false,
pleromaChatMessagesAvailable: false,
pleromaCustomEmojiReactionsAvailable: false,
gopherAvailable: false,
mediaProxyAvailable: false,
suggestionsEnabled: false,

ファイルの表示

@ -840,7 +840,7 @@ const postStatus = ({
})
if (pollOptions.some(option => option !== '')) {
const normalizedPoll = {
expires_in: poll.expiresIn,
expires_in: parseInt(poll.expiresIn, 10),
multiple: poll.multiple
}
Object.keys(normalizedPoll).forEach(key => {
@ -897,7 +897,7 @@ const editStatus = ({
if (pollOptions.some(option => option !== '')) {
const normalizedPoll = {
expires_in: poll.expiresIn,
expires_in: parseInt(poll.expiresIn, 10),
multiple: poll.multiple
}
Object.keys(normalizedPoll).forEach(key => {

ファイルの表示

@ -0,0 +1,8 @@
import { kebabCase } from 'lodash'
const propsToNative = props => Object.keys(props).reduce((acc, cur) => {
acc[kebabCase(cur)] = props[cur]
return acc
}, {})
export { propsToNative }

ファイルの表示

@ -441,6 +441,7 @@ export const parseNotification = (data) => {
: parseUser(data.target)
output.from_profile = parseUser(data.account)
output.emoji = data.emoji
output.emoji_url = data.emoji_url
if (data.report) {
output.report = data.report
output.report.content = data.report.content

ファイルの表示

@ -21,8 +21,8 @@ export const applyTheme = (input) => {
body.classList.remove('hidden')
}
const configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth }) =>
({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth })
const configColumns = ({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale }) =>
({ sidebarColumnWidth, contentColumnWidth, notifsColumnWidth, emojiReactionsScale })
const defaultConfigColumns = configColumns(defaultState)

ファイルの表示

@ -14,7 +14,8 @@ const generateInput = (value, padEmoji = true) => {
padEmoji
}
}
}
},
$t: (msg) => msg
},
stubs: {
FAIcon: true

339
yarn.lock
ファイルの表示

@ -9,6 +9,14 @@
dependencies:
"@jridgewell/trace-mapping" "^0.3.0"
"@ampproject/remapping@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
dependencies:
"@jridgewell/gen-mapping" "^0.1.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
@ -45,25 +53,25 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733"
integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==
"@babel/core@7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f"
integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==
"@babel/core@7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13"
integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==
dependencies:
"@ampproject/remapping" "^2.1.0"
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.20.7"
"@babel/generator" "^7.21.0"
"@babel/helper-compilation-targets" "^7.20.7"
"@babel/helper-module-transforms" "^7.20.7"
"@babel/helpers" "^7.20.7"
"@babel/parser" "^7.20.7"
"@babel/helper-module-transforms" "^7.21.0"
"@babel/helpers" "^7.21.0"
"@babel/parser" "^7.21.0"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.1"
json5 "^2.2.2"
semver "^6.3.0"
"@babel/core@^7.12.3":
@ -150,6 +158,16 @@
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
"@babel/generator@^7.21.0":
version "7.21.1"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd"
integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==
dependencies:
"@babel/types" "^7.21.0"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/helper-annotate-as-pure@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
@ -299,6 +317,14 @@
"@babel/template" "^7.18.10"
"@babel/types" "^7.19.0"
"@babel/helper-function-name@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
dependencies:
"@babel/template" "^7.20.7"
"@babel/types" "^7.21.0"
"@babel/helper-get-function-arity@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
@ -410,6 +436,20 @@
"@babel/traverse" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/helper-module-transforms@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz#89a8f86ad748870e3d024e470b2e8405e869db67"
integrity sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==
dependencies:
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-module-imports" "^7.18.6"
"@babel/helper-simple-access" "^7.20.2"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/helper-validator-identifier" "^7.19.1"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
"@babel/helper-optimise-call-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@ -591,14 +631,14 @@
"@babel/traverse" "^7.18.9"
"@babel/types" "^7.18.9"
"@babel/helpers@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce"
integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==
"@babel/helpers@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e"
integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==
dependencies:
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
"@babel/highlight@^7.0.0":
version "7.0.0"
@ -666,6 +706,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b"
integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==
"@babel/parser@^7.21.0":
version "7.21.1"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.1.tgz#a8f81ee2fe872af23faea4b17a08fcc869de7bcc"
integrity sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@ -1138,13 +1183,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-transform-runtime@7.19.6":
version "7.19.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194"
integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==
"@babel/plugin-transform-runtime@7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz#2a884f29556d0a68cd3d152dcc9e6c71dfb6eee8"
integrity sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==
dependencies:
"@babel/helper-module-imports" "^7.18.6"
"@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-plugin-utils" "^7.20.2"
babel-plugin-polyfill-corejs2 "^0.3.3"
babel-plugin-polyfill-corejs3 "^0.6.0"
babel-plugin-polyfill-regenerator "^0.4.1"
@ -1293,10 +1338,10 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
"@babel/register@7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c"
integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==
"@babel/register@7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132"
integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==
dependencies:
clone-deep "^4.0.1"
find-cache-dir "^2.0.0"
@ -1304,10 +1349,10 @@
pirates "^4.0.5"
source-map-support "^0.5.16"
"@babel/runtime@7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
"@babel/runtime@7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
dependencies:
regenerator-runtime "^0.13.11"
@ -1450,6 +1495,22 @@
debug "^4.1.0"
globals "^11.1.0"
"@babel/traverse@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.0.tgz#0e1807abd5db98e6a19c204b80ed1e3f5bca0edc"
integrity sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.21.0"
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.21.0"
"@babel/types" "^7.21.0"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49":
version "7.2.2"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e"
@ -1509,6 +1570,15 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@babel/types@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.0.tgz#1da00d89c2f18b226c9207d96edbeb79316a1819"
integrity sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==
dependencies:
"@babel/helper-string-parser" "^7.19.4"
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@babel/types@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
@ -1548,36 +1618,36 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@fortawesome/fontawesome-common-types@6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz#411e02a820744d3f7e0d8d9df9d82b471beaa073"
integrity sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==
"@fortawesome/fontawesome-common-types@6.3.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz#51f734e64511dbc3674cd347044d02f4dd26e86b"
integrity sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==
"@fortawesome/fontawesome-svg-core@6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz#e87e905e444b5e7b715af09b64d27b53d4c8f9d9"
integrity sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==
"@fortawesome/fontawesome-svg-core@6.3.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz#b6a17d48d231ac1fad93e43fca7271676bf316cf"
integrity sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==
dependencies:
"@fortawesome/fontawesome-common-types" "6.2.1"
"@fortawesome/fontawesome-common-types" "6.3.0"
"@fortawesome/free-regular-svg-icons@6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.2.1.tgz#650e56d937755a8341f2eef258ecb6f95458820f"
integrity sha512-wiqcNDNom75x+pe88FclpKz7aOSqS2lOivZeicMV5KRwOAeypxEYWAK/0v+7r+LrEY30+qzh8r2XDaEHvoLsMA==
"@fortawesome/free-regular-svg-icons@6.3.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.3.0.tgz#286f87f777e6c96af59151e86647c81083029ee2"
integrity sha512-cZnwiVHZ51SVzWHOaNCIA+u9wevZjCuAGSvSYpNlm6A4H4Vhwh8481Bf/5rwheIC3fFKlgXxLKaw8Xeroz8Ntg==
dependencies:
"@fortawesome/fontawesome-common-types" "6.2.1"
"@fortawesome/fontawesome-common-types" "6.3.0"
"@fortawesome/free-solid-svg-icons@6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz#2290ea5adcf1537cbd0c43de6feb38af02141d27"
integrity sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==
"@fortawesome/free-solid-svg-icons@6.3.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz#d3bd33ae18bb15fdfc3ca136e2fea05f32768a65"
integrity sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==
dependencies:
"@fortawesome/fontawesome-common-types" "6.2.1"
"@fortawesome/fontawesome-common-types" "6.3.0"
"@fortawesome/vue-fontawesome@3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz#1b2ec546caab790c38d3dcb38407485a70703dd2"
integrity sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==
"@fortawesome/vue-fontawesome@3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz#633e2998d11f7d4ed41f0d5ea461a22ec9b9d034"
integrity sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==
"@humanwhocodes/config-array@^0.11.8":
version "0.11.8"
@ -1695,6 +1765,14 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
"@jridgewell/gen-mapping@^0.1.0":
version "0.1.1"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
dependencies:
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
@ -1704,12 +1782,17 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/resolve-uri@^3.0.3":
version "3.0.5"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==
"@jridgewell/set-array@^1.0.1":
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
@ -1722,6 +1805,11 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/sourcemap-codec@1.4.14":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.11"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec"
@ -1743,6 +1831,14 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping@^0.3.17":
version "0.3.17"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
dependencies:
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
"@jridgewell/trace-mapping@^0.3.9":
version "0.3.14"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
@ -2172,10 +2268,12 @@
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2"
integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==
"@vue/test-utils@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702"
integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g==
"@vue/test-utils@2.2.8":
version "2.2.8"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.8.tgz#2002a2b2c90309f66c5c175b735621438832a610"
integrity sha512-/R8DKzp41Ip/RqTt1jvOVi5gxby3EwNWiYHNYsG9FAjEvt0gzDvYN55lCKzX7IdnI5zVIOo5tHtts0SLT+JrWw==
dependencies:
js-beautify "1.14.6"
"@vuelidate/core@2.0.0":
version "2.0.0"
@ -2325,6 +2423,11 @@ abab@^2.0.5, abab@^2.0.6:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
abbrev@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
accepts@~1.3.4:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@ -2603,10 +2706,10 @@ axios@^1.1.3:
form-data "^4.0.0"
proxy-from-env "^1.1.0"
babel-loader@9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.0.tgz#839e9ae88aea930864ef9ec0f356dfca96ecf238"
integrity sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA==
babel-loader@9.1.2:
version "9.1.2"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c"
integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==
dependencies:
find-cache-dir "^3.3.2"
schema-utils "^4.0.0"
@ -3135,7 +3238,7 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
commander@^2.20.0:
commander@^2.19.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@ -3168,6 +3271,14 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
config-chain@^1.1.13:
version "1.1.13"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
dependencies:
ini "^1.3.4"
proto-list "~1.2.1"
connect-history-api-fallback@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
@ -3731,6 +3842,16 @@ dotenv@10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
editorconfig@^0.15.3:
version "0.15.3"
resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
dependencies:
commander "^2.19.0"
lru-cache "^4.1.5"
semver "^5.6.0"
sigmund "^1.0.1"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@ -4123,10 +4244,10 @@ eslint-webpack-plugin@3.2.0:
normalize-path "^3.0.0"
schema-utils "^4.0.0"
eslint@8.32.0:
version "8.32.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861"
integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==
eslint@8.33.0:
version "8.33.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.33.0.tgz#02f110f32998cb598c6461f24f4d306e41ca33d7"
integrity sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==
dependencies:
"@eslint/eslintrc" "^1.4.1"
"@humanwhocodes/config-array" "^0.11.8"
@ -4661,6 +4782,17 @@ glob@^7.2.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^8.0.3:
version "8.1.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^5.0.1"
once "^1.3.0"
global-modules@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@ -5077,6 +5209,11 @@ inherits@2.0.4, inherits@^2.0.4:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.4:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
ini@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
@ -5475,6 +5612,16 @@ jest-worker@^29.1.2:
merge-stream "^2.0.0"
supports-color "^8.0.0"
js-beautify@1.14.6:
version "1.14.6"
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507"
integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==
dependencies:
config-chain "^1.1.13"
editorconfig "^0.15.3"
glob "^8.0.3"
nopt "^6.0.0"
js-cookie@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
@ -5588,6 +5735,11 @@ json5@^2.2.0, json5@^2.2.1:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
json5@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonc-eslint-parser@^1.0.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6"
@ -6110,6 +6262,14 @@ lower-case@^2.0.2:
dependencies:
tslib "^2.0.3"
lru-cache@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
dependencies:
pseudomap "^1.0.2"
yallist "^2.1.2"
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@ -6478,10 +6638,10 @@ nightwatch-axe-verbose@^2.1.0:
dependencies:
axe-core "^4.6.1"
nightwatch@2.6.10:
version "2.6.10"
resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-2.6.10.tgz#eda82a6a0ff0002fdbeb9d160938d3c53a92dd88"
integrity sha512-nn5HVEtETLQ8qgu7APAZKg/yXTBkMflwdmzhfywP8mZUfKk0/dRQbeDqY2RawHr/sYsFmZV6eMirlJaaQoQ7Yw==
nightwatch@2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-2.6.11.tgz#ba36d13855b003b488b74f64b4ffd8d13a5d1807"
integrity sha512-HLi9gTgcxqlDWfgZ/jT1QP8g3SzjBMZlFNdiDm065dopXR95jvyIpjA0Js8MsWRYzSTkRLGZvPVk28dwGaGXcQ==
dependencies:
"@nightwatch/chai" "5.0.2"
"@nightwatch/html-reporter-template" "0.1.4"
@ -6541,6 +6701,13 @@ node-releases@^2.0.5, node-releases@^2.0.6:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
nopt@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
dependencies:
abbrev "^1.0.0"
normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@ -7293,6 +7460,11 @@ process-nextick-args@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@ -7310,6 +7482,11 @@ prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
psl@^1.1.33:
version "1.9.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
@ -7322,10 +7499,10 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
punycode.js@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.1.0.tgz#f3937f7a914152c2dc17e9c280a2cf86a26b7cda"
integrity sha512-LvGUJ9QHiESLM4yn8JuJWicstRcJKRmP46psQw1HvCZ9puLFwYMKJWvkAkP3OHBVzNzZGx/D53EYJrIaKd9gZQ==
punycode.js@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.0.tgz#6aaa35964ffecc676545995ecb65980bd8302f61"
integrity sha512-AM9kSplQQCRlRkRZzx2EcqW2AQ9HuYoUzzl/tjJDNJEUeYHFGJ/rGE0a9cE1b41iuFz94pAwcEekC137Dd9Eyw==
punycode@1.3.2:
version "1.3.2"
@ -7881,6 +8058,11 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2"
object-inspect "^1.9.0"
sigmund@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==
signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@ -9043,6 +9225,11 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"