forked from mirrors/akkoma-fe
Compare commits
48 commits
37b419a9f6
...
c766aafcf3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c766aafcf3 | ||
|
|
23f7b33eb4 | ||
|
|
0eb6f65dcb | ||
|
|
8e39d4fad6 | ||
|
|
6186bf462c | ||
|
|
32f7ce0059 | ||
|
|
d12c4d5a4e | ||
|
|
afbba1276f | ||
|
|
c4e3887ad8 | ||
|
|
212efaff38 | ||
|
|
cfc13b767b | ||
| 2c8b20f700 | |||
| 8036adeeff | |||
| e0fb4bdaf0 | |||
| 99c4192177 | |||
| 2d3eb96b4f | |||
| 06ec8121ee | |||
| fb1223c5f4 | |||
|
|
e6e089b4d8 | ||
|
|
faba421568 | ||
|
|
e90ac896f5 | ||
|
|
9106b61801 | ||
|
|
2977876324 | ||
|
|
28bacfb9df | ||
|
|
13015122f1 | ||
|
|
1f77d442a9 | ||
|
|
57c789db24 | ||
|
|
c35c26d3ee | ||
|
|
ed05abc403 | ||
|
|
6bc445fe21 | ||
|
|
26218e7d41 | ||
|
|
d224386601 | ||
|
|
9d8733f131 | ||
|
|
5384f5254f | ||
|
|
7337bd2213 | ||
|
|
2658ca88eb | ||
|
|
6b4360ac2a | ||
|
|
145fe42642 | ||
|
|
cdf1f6a464 | ||
|
|
91d82c2984 | ||
|
|
47bbd2740e | ||
|
|
353ede13d7 | ||
|
|
1d0d2730b6 | ||
|
|
60484b54e5 | ||
|
|
0766c9cd15 | ||
| 87b1172823 | |||
|
|
0e25b94186 | ||
|
|
8fcd9c756d |
36 changed files with 377 additions and 187 deletions
|
|
@ -32,6 +32,7 @@
|
||||||
"cropperjs": "^1.6.2",
|
"cropperjs": "^1.6.2",
|
||||||
"diff": "^5.2.0",
|
"diff": "^5.2.0",
|
||||||
"escape-html": "^1.0.3",
|
"escape-html": "^1.0.3",
|
||||||
|
"fzy.js": "^0.4.1",
|
||||||
"iso-639-1": "^2.1.15",
|
"iso-639-1": "^2.1.15",
|
||||||
"js-cookie": "^3.0.1",
|
"js-cookie": "^3.0.1",
|
||||||
"localforage": "^1.10.0",
|
"localforage": "^1.10.0",
|
||||||
|
|
|
||||||
10
src/App.js
10
src/App.js
|
|
@ -61,9 +61,17 @@ export default {
|
||||||
'-no-sticky-headers': this.noSticky,
|
'-no-sticky-headers': this.noSticky,
|
||||||
'-has-new-post-button': this.newPostButtonShown
|
'-has-new-post-button': this.newPostButtonShown
|
||||||
},
|
},
|
||||||
'-' + this.layoutType
|
'-' + this.layoutType,
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
columnWidth() {
|
||||||
|
let type = this.$store.getters.mergedConfig.widenTimeline
|
||||||
|
console.log(type);
|
||||||
|
if (type && type !== 'off') {
|
||||||
|
return `minmax(var(--miniColumn), ${type})`
|
||||||
|
}
|
||||||
|
return 'minmax(var(--miniColumn), 45rem)'
|
||||||
|
},
|
||||||
pageBackground () {
|
pageBackground () {
|
||||||
return this.mergedConfig.displayPageBackgrounds
|
return this.mergedConfig.displayPageBackgrounds
|
||||||
? this.$store.state.users.displayBackground
|
? this.$store.state.users.displayBackground
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,10 @@ nav {
|
||||||
background-color: rgba(0, 0, 0, 0.15);
|
background-color: rgba(0, 0, 0, 0.15);
|
||||||
background-color: var(--underlay, rgba(0, 0, 0, 0.15));
|
background-color: var(--underlay, rgba(0, 0, 0, 0.15));
|
||||||
z-index: -1000;
|
z-index: -1000;
|
||||||
|
|
||||||
|
.-wide-timeline & {
|
||||||
|
margin:0 calc(var(--columnGap) / -2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-layout {
|
.app-layout {
|
||||||
|
|
@ -187,6 +191,7 @@ nav {
|
||||||
grid-template-rows: 1fr;
|
grid-template-rows: 1fr;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
padding: 0 calc(var(--columnGap) / 2);
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
id="content"
|
id="content"
|
||||||
class="app-layout container"
|
class="app-layout container"
|
||||||
:class="classes"
|
:class="classes"
|
||||||
|
:style="{'--maxiColumn': this.columnWidth}"
|
||||||
>
|
>
|
||||||
<div class="underlay" />
|
<div class="underlay" />
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -345,7 +345,7 @@ const setConfig = async ({ store }) => {
|
||||||
const apiConfig = configInfos[0]
|
const apiConfig = configInfos[0]
|
||||||
const staticConfig = configInfos[1]
|
const staticConfig = configInfos[1]
|
||||||
|
|
||||||
await setSettings({ store, apiConfig, staticConfig }).then(getAppSecret({ store }))
|
await setSettings({ store, apiConfig, staticConfig })
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkOAuthToken = async ({ store }) => {
|
const checkOAuthToken = async ({ store }) => {
|
||||||
|
|
|
||||||
|
|
@ -267,11 +267,11 @@ const conversation = {
|
||||||
},
|
},
|
||||||
replies () {
|
replies () {
|
||||||
let i = 1
|
let i = 1
|
||||||
|
|
||||||
return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {
|
return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {
|
||||||
|
|
||||||
const irid = in_reply_to_status_id
|
const irid = in_reply_to_status_id
|
||||||
|
|
||||||
if (irid) {
|
if (irid) {
|
||||||
result[irid] = result[irid] || []
|
result[irid] = result[irid] || []
|
||||||
result[irid].push({
|
result[irid].push({
|
||||||
|
|
@ -414,6 +414,11 @@ const conversation = {
|
||||||
},
|
},
|
||||||
toggleExpanded () {
|
toggleExpanded () {
|
||||||
this.expanded = !this.expanded
|
this.expanded = !this.expanded
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (!this.expanded) {
|
||||||
|
this.$el.scrollIntoView({ block: 'nearest' })
|
||||||
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
getConversationId (statusId) {
|
getConversationId (statusId) {
|
||||||
const status = this.$store.state.statuses.allStatusesObject[statusId]
|
const status = this.$store.state.statuses.allStatusesObject[statusId]
|
||||||
|
|
|
||||||
|
|
@ -278,5 +278,8 @@
|
||||||
&.-expanded.status-fadein {
|
&.-expanded.status-fadein {
|
||||||
margin: calc(var(--status-margin, $status-margin) / 2);
|
margin: calc(var(--status-margin, $status-margin) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* HACK: this value was picked arbitrarily and this is likely not even the right place */
|
||||||
|
scroll-margin-block-start: calc(var(--navbar-height) * 2);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ const EmojiInput = {
|
||||||
// Async: cancel if textAtCaret has changed during wait
|
// Async: cancel if textAtCaret has changed during wait
|
||||||
if (this.textAtCaret !== newWord) return
|
if (this.textAtCaret !== newWord) return
|
||||||
if (matchedSuggestions.length <= 0) return
|
if (matchedSuggestions.length <= 0) return
|
||||||
this.suggestions = take(matchedSuggestions, 5)
|
this.suggestions = take(matchedSuggestions, 25)
|
||||||
.map(({ imageUrl, ...rest }) => ({
|
.map(({ imageUrl, ...rest }) => ({
|
||||||
...rest,
|
...rest,
|
||||||
img: imageUrl || ''
|
img: imageUrl || ''
|
||||||
|
|
@ -300,6 +300,9 @@ const EmojiInput = {
|
||||||
if (this.highlighted < 0) {
|
if (this.highlighted < 0) {
|
||||||
this.highlighted = this.suggestions.length - 1
|
this.highlighted = this.suggestions.length - 1
|
||||||
}
|
}
|
||||||
|
const panelBody = this.$refs['panel-body']
|
||||||
|
const highlighted = panelBody.children[this.highlighted]
|
||||||
|
highlighted.scrollIntoView({ block: 'nearest' })
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
} else {
|
} else {
|
||||||
this.highlighted = 0
|
this.highlighted = 0
|
||||||
|
|
@ -312,6 +315,9 @@ const EmojiInput = {
|
||||||
if (this.highlighted >= len) {
|
if (this.highlighted >= len) {
|
||||||
this.highlighted = 0
|
this.highlighted = 0
|
||||||
}
|
}
|
||||||
|
const panelBody = this.$refs['panel-body']
|
||||||
|
const highlighted = panelBody.children[this.highlighted]
|
||||||
|
highlighted.scrollIntoView({ block: 'nearest' })
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
} else {
|
} else {
|
||||||
this.highlighted = 0
|
this.highlighted = 0
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,12 @@
|
||||||
--postLink: var(--popoverPostLink, $fallback--link);
|
--postLink: var(--popoverPostLink, $fallback--link);
|
||||||
--postFaintLink: var(--popoverPostFaintLink, $fallback--link);
|
--postFaintLink: var(--popoverPostFaintLink, $fallback--link);
|
||||||
--icon: var(--popoverIcon, $fallback--icon);
|
--icon: var(--popoverIcon, $fallback--icon);
|
||||||
|
|
||||||
|
overflow-y: scroll;
|
||||||
|
scrollbar-gutter: stable;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
max-height: calc((0.2em * 2 + 1px + 32px) * 5);
|
||||||
|
scroll-padding-block: calc((0.2em * 2 + 1px + 32px) * 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
import * as fzy from 'fzy.js'
|
||||||
|
import { sortBy } from 'lodash'
|
||||||
|
|
||||||
const MFM_TAGS = ['blur', 'bounce', 'flip', 'font', 'jelly', 'jump', 'rainbow', 'rotate', 'shake', 'sparkle', 'spin', 'tada', 'twitch', 'x2', 'x3', 'x4']
|
const MFM_TAGS = ['blur', 'bounce', 'flip', 'font', 'jelly', 'jump', 'rainbow', 'rotate', 'shake', 'sparkle', 'spin', 'tada', 'twitch', 'x2', 'x3', 'x4']
|
||||||
.map(tag => ({ displayText: tag, detailText: '$[' + tag + ' ]', replacement: '$[' + tag + ' ]', mfm: true }))
|
.map(tag => ({ displayText: tag, detailText: '$[' + tag + ' ]', replacement: '$[' + tag + ' ]', mfm: true }))
|
||||||
|
|
||||||
|
|
@ -34,6 +37,20 @@ export default data => {
|
||||||
|
|
||||||
export const suggestEmoji = emojis => input => {
|
export const suggestEmoji = emojis => input => {
|
||||||
const noPrefix = input.toLowerCase().substr(1)
|
const noPrefix = input.toLowerCase().substr(1)
|
||||||
|
|
||||||
|
if (true) { // TODO check option setting
|
||||||
|
const matches = emojis.filter(({ displayText }) => fzy.hasMatch(noPrefix, displayText))
|
||||||
|
return sortBy(matches, m => {
|
||||||
|
let score = fzy.score(noPrefix, m.displayText)
|
||||||
|
|
||||||
|
// Prioritize custom emoji a lot
|
||||||
|
score += m.imageUrl ? 100 : 0
|
||||||
|
|
||||||
|
// Sort in descending order
|
||||||
|
return -score
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return emojis
|
return emojis
|
||||||
.filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))
|
.filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
|
|
@ -122,14 +139,14 @@ export const suggestUsers = ({ dispatch, state }) => {
|
||||||
const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1
|
const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1
|
||||||
|
|
||||||
return diff + nameAlphabetically + screenNameAlphabetically
|
return diff + nameAlphabetically + screenNameAlphabetically
|
||||||
|
|
||||||
}).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({
|
}).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({
|
||||||
displayText: screen_name_ui,
|
displayText: screen_name_ui,
|
||||||
detailText: name,
|
detailText: name,
|
||||||
imageUrl: profile_image_url_original,
|
imageUrl: profile_image_url_original,
|
||||||
replacement: '@' + screen_name + ' '
|
replacement: '@' + screen_name + ' '
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
suggestions = newSuggestions || []
|
suggestions = newSuggestions || []
|
||||||
return suggestions
|
return suggestions
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ const EmojiPicker = {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
keyword: '',
|
keyword: '',
|
||||||
activeGroup: 'standard',
|
activeGroup: 'recent',
|
||||||
showingStickers: false,
|
showingStickers: false,
|
||||||
keepOpen: false
|
keepOpen: false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,10 +88,8 @@ const Gallery = {
|
||||||
set(this.sizes, id, { width, height })
|
set(this.sizes, id, { width, height })
|
||||||
},
|
},
|
||||||
rowStyle (row) {
|
rowStyle (row) {
|
||||||
if (row.audio) {
|
if (!row.audio && !row.minimal && !row.grid) {
|
||||||
return { 'padding-bottom': '25%' } // fixed reduced height for audio
|
return { 'aspect-ratio': `1/${(1 / (row.items.length + 0.6))}` }
|
||||||
} else if (!row.minimal && !row.grid) {
|
|
||||||
return { 'padding-bottom': `${(100 / (row.items.length + 0.6))}%` }
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
itemStyle (id, row) {
|
itemStyle (id, row) {
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,15 @@
|
||||||
|
|
||||||
.gallery-row {
|
.gallery-row {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 0;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
.Status & {
|
||||||
|
max-height: 30em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.-audio {
|
||||||
|
aspect-ratio: 4/1; // this is terrible, but it's how it was before so I'm not changing it >:(
|
||||||
|
}
|
||||||
|
|
||||||
&:not(:first-child) {
|
&:not(:first-child) {
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ const LoginForm = {
|
||||||
}
|
}
|
||||||
|
|
||||||
oauthApi.getOrCreateApp(data)
|
oauthApi.getOrCreateApp(data)
|
||||||
.then((app) => { oauthApi.login({ ...app, ...data }) })
|
.then((app) => { oauthApi.login({ ...data, ...app }) })
|
||||||
},
|
},
|
||||||
submitPassword () {
|
submitPassword () {
|
||||||
const { clientId } = this.oauth
|
const { clientId } = this.oauth
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
<button
|
<button
|
||||||
v-if="options.length > 2"
|
v-if="options.length > 2"
|
||||||
class="delete-option button-unstyled -hover-highlight"
|
class="delete-option button-unstyled -hover-highlight"
|
||||||
|
type="button"
|
||||||
@click="deleteOption(index)"
|
@click="deleteOption(index)"
|
||||||
>
|
>
|
||||||
<FAIcon icon="times" />
|
<FAIcon icon="times" />
|
||||||
|
|
@ -32,6 +33,7 @@
|
||||||
<button
|
<button
|
||||||
v-if="options.length < maxOptions"
|
v-if="options.length < maxOptions"
|
||||||
class="add-option faint button-unstyled -hover-highlight"
|
class="add-option faint button-unstyled -hover-highlight"
|
||||||
|
type="button"
|
||||||
@click="addOption"
|
@click="addOption"
|
||||||
>
|
>
|
||||||
<FAIcon
|
<FAIcon
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ const PostStatusForm = {
|
||||||
'quoteId',
|
'quoteId',
|
||||||
'repliedUser',
|
'repliedUser',
|
||||||
'attentions',
|
'attentions',
|
||||||
|
'copyMessageLanguage',
|
||||||
'copyMessageScope',
|
'copyMessageScope',
|
||||||
'subject',
|
'subject',
|
||||||
'disableSubject',
|
'disableSubject',
|
||||||
|
|
@ -153,8 +154,7 @@ const PostStatusForm = {
|
||||||
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
|
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { postContentType: contentType, postLanguage: defaultPostLanguage, sensitiveByDefault, sensitiveIfSubject, interfaceLanguage, alwaysShowSubjectInput } = this.$store.getters.mergedConfig
|
const { postContentType: contentType, sensitiveByDefault, sensitiveIfSubject, alwaysShowSubjectInput } = this.$store.getters.mergedConfig
|
||||||
const postLanguage = defaultPostLanguage || interfaceToISOLanguage(interfaceLanguage)
|
|
||||||
|
|
||||||
let statusParams = {
|
let statusParams = {
|
||||||
spoilerText: this.subject || '',
|
spoilerText: this.subject || '',
|
||||||
|
|
@ -165,7 +165,7 @@ const PostStatusForm = {
|
||||||
poll: {},
|
poll: {},
|
||||||
mediaDescriptions: {},
|
mediaDescriptions: {},
|
||||||
visibility: this.suggestedVisibility(),
|
visibility: this.suggestedVisibility(),
|
||||||
language: postLanguage,
|
language: this.suggestedLanguage(),
|
||||||
contentType
|
contentType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,7 +180,7 @@ const PostStatusForm = {
|
||||||
poll: this.statusPoll || {},
|
poll: this.statusPoll || {},
|
||||||
mediaDescriptions: this.statusMediaDescriptions || {},
|
mediaDescriptions: this.statusMediaDescriptions || {},
|
||||||
visibility: this.statusScope || this.suggestedVisibility(),
|
visibility: this.statusScope || this.suggestedVisibility(),
|
||||||
language: this.statusLanguage || postLanguage,
|
language: this.statusLanguage || this.suggestedLanguage(),
|
||||||
contentType: statusContentType
|
contentType: statusContentType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -329,6 +329,7 @@ const PostStatusForm = {
|
||||||
watch: {
|
watch: {
|
||||||
'newStatus': {
|
'newStatus': {
|
||||||
deep: true,
|
deep: true,
|
||||||
|
flush: 'sync',
|
||||||
handler () {
|
handler () {
|
||||||
this.statusChanged()
|
this.statusChanged()
|
||||||
}
|
}
|
||||||
|
|
@ -341,17 +342,22 @@ const PostStatusForm = {
|
||||||
this.saveDraft()
|
this.saveDraft()
|
||||||
},
|
},
|
||||||
clearStatus () {
|
clearStatus () {
|
||||||
const newStatus = this.newStatus
|
const config = this.$store.getters.mergedConfig
|
||||||
this.newStatus = {
|
this.newStatus = {
|
||||||
status: '',
|
status: '',
|
||||||
spoilerText: '',
|
spoilerText: '',
|
||||||
files: [],
|
files: [],
|
||||||
visibility: newStatus.visibility,
|
nsfw: !!config.sensitiveByDefault,
|
||||||
contentType: newStatus.contentType,
|
visibility: this.suggestedVisibility(),
|
||||||
language: newStatus.language,
|
contentType: config.postContentType,
|
||||||
|
language: this.suggestedLanguage(),
|
||||||
poll: {},
|
poll: {},
|
||||||
mediaDescriptions: {}
|
mediaDescriptions: {}
|
||||||
}
|
}
|
||||||
|
const scopeselector = this.$refs.scopeselector
|
||||||
|
if (scopeselector) {
|
||||||
|
scopeselector.currentScope = this.newStatus.visibility
|
||||||
|
}
|
||||||
this.pollFormVisible = false
|
this.pollFormVisible = false
|
||||||
this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()
|
this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()
|
||||||
this.clearPollForm()
|
this.clearPollForm()
|
||||||
|
|
@ -760,6 +766,15 @@ const PostStatusForm = {
|
||||||
openProfileTab () {
|
openProfileTab () {
|
||||||
this.$store.dispatch('openSettingsModalTab', 'profile')
|
this.$store.dispatch('openSettingsModalTab', 'profile')
|
||||||
},
|
},
|
||||||
|
suggestedLanguage () {
|
||||||
|
// Make sure the inherited language is actually valid
|
||||||
|
if (this.postLanguageOptions.find(o => o.value === this.copyMessageLanguage)) {
|
||||||
|
return this.copyMessageLanguage
|
||||||
|
}
|
||||||
|
const { postLanguage: defaultPostLanguage, interfaceLanguage } = this.$store.getters.mergedConfig
|
||||||
|
const postLanguage = defaultPostLanguage || interfaceToISOLanguage(interfaceLanguage)
|
||||||
|
return postLanguage
|
||||||
|
},
|
||||||
suggestedVisibility () {
|
suggestedVisibility () {
|
||||||
if (this.copyMessageScope) {
|
if (this.copyMessageScope) {
|
||||||
if (this.copyMessageScope === 'direct') {
|
if (this.copyMessageScope === 'direct') {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="button-unstyled -link"
|
class="button-unstyled -link"
|
||||||
|
type="button"
|
||||||
@click="openProfileTab"
|
@click="openProfileTab"
|
||||||
>
|
>
|
||||||
{{ $t('post_status.account_not_locked_warning_link') }}
|
{{ $t('post_status.account_not_locked_warning_link') }}
|
||||||
|
|
@ -136,6 +137,7 @@
|
||||||
class="form-post-subject"
|
class="form-post-subject"
|
||||||
@input="onSubjectInput"
|
@input="onSubjectInput"
|
||||||
@focus="focusSubjectInput()"
|
@focus="focusSubjectInput()"
|
||||||
|
@keydown.exact.enter.prevent
|
||||||
>
|
>
|
||||||
</EmojiInput>
|
</EmojiInput>
|
||||||
<i18n-t
|
<i18n-t
|
||||||
|
|
@ -193,6 +195,7 @@
|
||||||
:class="{ 'visibility-tray-edit': isEdit }"
|
:class="{ 'visibility-tray-edit': isEdit }"
|
||||||
>
|
>
|
||||||
<scope-selector
|
<scope-selector
|
||||||
|
ref="scopeselector"
|
||||||
v-if="!disableVisibilitySelector"
|
v-if="!disableVisibilitySelector"
|
||||||
:user-default="userDefaultScope"
|
:user-default="userDefaultScope"
|
||||||
:original-scope="copyMessageScope"
|
:original-scope="copyMessageScope"
|
||||||
|
|
@ -272,6 +275,7 @@
|
||||||
<button
|
<button
|
||||||
class="emoji-icon button-unstyled"
|
class="emoji-icon button-unstyled"
|
||||||
:title="$t('emoji.add_emoji')"
|
:title="$t('emoji.add_emoji')"
|
||||||
|
type="button"
|
||||||
@click="showEmojiPicker"
|
@click="showEmojiPicker"
|
||||||
>
|
>
|
||||||
<FAIcon icon="smile-beam" />
|
<FAIcon icon="smile-beam" />
|
||||||
|
|
@ -281,6 +285,7 @@
|
||||||
class="poll-icon button-unstyled"
|
class="poll-icon button-unstyled"
|
||||||
:class="{ selected: pollFormVisible }"
|
:class="{ selected: pollFormVisible }"
|
||||||
:title="$t('polls.add_poll')"
|
:title="$t('polls.add_poll')"
|
||||||
|
type="button"
|
||||||
@click="togglePollForm"
|
@click="togglePollForm"
|
||||||
>
|
>
|
||||||
<FAIcon icon="poll-h" />
|
<FAIcon icon="poll-h" />
|
||||||
|
|
@ -290,6 +295,7 @@
|
||||||
class="spoiler-icon button-unstyled"
|
class="spoiler-icon button-unstyled"
|
||||||
:class="{ selected: subjectVisible }"
|
:class="{ selected: subjectVisible }"
|
||||||
:title="$t('post_status.toggle_content_warning')"
|
:title="$t('post_status.toggle_content_warning')"
|
||||||
|
type="button"
|
||||||
@click="toggleSubjectVisible"
|
@click="toggleSubjectVisible"
|
||||||
>
|
>
|
||||||
<FAIcon icon="eye-slash" />
|
<FAIcon icon="eye-slash" />
|
||||||
|
|
@ -606,6 +612,16 @@
|
||||||
border-top-right-radius: 0;
|
border-top-right-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.-has-subject {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.-has-subject {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
&.scrollable-form {
|
&.scrollable-form {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,11 @@ const GeneralTab = {
|
||||||
value: tab,
|
value: tab,
|
||||||
label: this.$t(`user_card.${tab}`)
|
label: this.$t(`user_card.${tab}`)
|
||||||
})),
|
})),
|
||||||
|
widenTimelineOptions : ['1fr', '75%', '50%', 'off'].map(width => ({
|
||||||
|
key: width,
|
||||||
|
value: width,
|
||||||
|
label: this.$t(`settings.widen_timeline_option.${width}`)
|
||||||
|
})),
|
||||||
profilesExpanded: false,
|
profilesExpanded: false,
|
||||||
newProfileName: '',
|
newProfileName: '',
|
||||||
loopSilentAvailable:
|
loopSilentAvailable:
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,16 @@
|
||||||
{{ $t('settings.show_page_backgrounds') }}
|
{{ $t('settings.show_page_backgrounds') }}
|
||||||
</BooleanSetting>
|
</BooleanSetting>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<BooleanSetting path="centerAlignBio">
|
||||||
|
{{ $t('settings.center_align_bio') }}
|
||||||
|
</BooleanSetting>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<BooleanSetting path="compactUserInfo">
|
||||||
|
{{ $t('settings.compact_user_info') }}
|
||||||
|
</BooleanSetting>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<BooleanSetting path="stopGifs">
|
<BooleanSetting path="stopGifs">
|
||||||
{{ $t('settings.stop_gifs') }}
|
{{ $t('settings.stop_gifs') }}
|
||||||
|
|
@ -269,6 +279,14 @@
|
||||||
{{ $t('settings.right_sidebar') }}
|
{{ $t('settings.right_sidebar') }}
|
||||||
</BooleanSetting>
|
</BooleanSetting>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<ChoiceSetting
|
||||||
|
path="widenTimeline"
|
||||||
|
:options="widenTimelineOptions"
|
||||||
|
>
|
||||||
|
{{ $t('settings.widen_timeline') }}
|
||||||
|
</ChoiceSetting>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<ChoiceSetting
|
<ChoiceSetting
|
||||||
v-if="user"
|
v-if="user"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { extractCommit } from 'src/services/version/version.service'
|
import { extractCommit } from 'src/services/version/version.service'
|
||||||
|
|
||||||
const pleromaFeCommitUrl = 'https://akkoma.dev/AkkomaGang/pleroma-fe/commit/'
|
const pleromaFeCommitUrl = 'https://git.jeder.pl/jeder/akkoma-fe/commit/'
|
||||||
const pleromaBeCommitUrl = 'https://akkoma.dev/AkkomaGang/akkoma/commit/'
|
const pleromaBeCommitUrl = 'https://iceshrimp.dev/iceshrimp/Iceshrimp.NET'
|
||||||
|
|
||||||
const VersionTab = {
|
const VersionTab = {
|
||||||
data () {
|
data () {
|
||||||
|
|
@ -16,7 +16,7 @@ const VersionTab = {
|
||||||
return pleromaFeCommitUrl + this.frontendVersion
|
return pleromaFeCommitUrl + this.frontendVersion
|
||||||
},
|
},
|
||||||
backendVersionLink () {
|
backendVersionLink () {
|
||||||
return pleromaBeCommitUrl + extractCommit(this.backendVersion)
|
return pleromaBeCommitUrl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -322,6 +322,7 @@
|
||||||
|
|
||||||
> * {
|
> * {
|
||||||
min-width: fit-content;
|
min-width: fit-content;
|
||||||
|
max-width: 3em;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -460,12 +460,6 @@
|
||||||
:status="status"
|
:status="status"
|
||||||
@toggle="toggleReplying"
|
@toggle="toggleReplying"
|
||||||
/>
|
/>
|
||||||
<quote-button
|
|
||||||
:visibility="status.visibility"
|
|
||||||
:quoting="quoting"
|
|
||||||
:status="status"
|
|
||||||
@toggle="toggleQuoting"
|
|
||||||
/>
|
|
||||||
<retweet-button
|
<retweet-button
|
||||||
:visibility="status.visibility"
|
:visibility="status.visibility"
|
||||||
:logged-in="loggedIn"
|
:logged-in="loggedIn"
|
||||||
|
|
@ -479,6 +473,12 @@
|
||||||
v-if="loggedIn"
|
v-if="loggedIn"
|
||||||
:status="status"
|
:status="status"
|
||||||
/>
|
/>
|
||||||
|
<quote-button
|
||||||
|
:visibility="status.visibility"
|
||||||
|
:quoting="quoting"
|
||||||
|
:status="status"
|
||||||
|
@toggle="toggleQuoting"
|
||||||
|
/>
|
||||||
<extra-buttons
|
<extra-buttons
|
||||||
:status="status"
|
:status="status"
|
||||||
@on-error="showError"
|
@on-error="showError"
|
||||||
|
|
@ -519,6 +519,7 @@
|
||||||
:reply-to="status.id"
|
:reply-to="status.id"
|
||||||
:attentions="status.attentions"
|
:attentions="status.attentions"
|
||||||
:replied-user="status.user"
|
:replied-user="status.user"
|
||||||
|
:copy-message-language="status.language"
|
||||||
:copy-message-scope="status.visibility"
|
:copy-message-scope="status.visibility"
|
||||||
:subject="replySubject"
|
:subject="replySubject"
|
||||||
@posted="toggleReplying"
|
@posted="toggleReplying"
|
||||||
|
|
@ -533,6 +534,7 @@
|
||||||
:quote-id="status.id"
|
:quote-id="status.id"
|
||||||
:attentions="[status.user]"
|
:attentions="[status.user]"
|
||||||
:replied-user="status.user"
|
:replied-user="status.user"
|
||||||
|
:copy-message-language="status.language"
|
||||||
:copy-message-scope="status.visibility"
|
:copy-message-scope="status.visibility"
|
||||||
:subject="replySubject"
|
:subject="replySubject"
|
||||||
@posted="toggleQuoting"
|
@posted="toggleQuoting"
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,11 @@ export default {
|
||||||
shouldConfirmMute () {
|
shouldConfirmMute () {
|
||||||
return this.mergedConfig.modalOnMute
|
return this.mergedConfig.modalOnMute
|
||||||
},
|
},
|
||||||
|
compactUserInfo () {
|
||||||
|
return this.$store.getters.mergedConfig.compactUserInfo
|
||||||
|
&& (this.$store.state.interface.layoutType !== 'mobile')
|
||||||
|
&& this.switcher
|
||||||
|
},
|
||||||
...mapGetters(['mergedConfig'])
|
...mapGetters(['mergedConfig'])
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,13 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-buttons {
|
||||||
|
grid-area: edit;
|
||||||
|
display: flex;
|
||||||
|
padding: .5em 0 .5em 0;
|
||||||
|
justify-self: end;
|
||||||
|
}
|
||||||
|
|
||||||
.panel-body {
|
.panel-body {
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
border-bottom-right-radius: inherit;
|
border-bottom-right-radius: inherit;
|
||||||
|
|
@ -53,7 +60,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&-bio {
|
&-bio {
|
||||||
text-align: center;
|
|
||||||
display: block;
|
display: block;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
|
|
@ -100,15 +106,14 @@
|
||||||
padding: 0 26px;
|
padding: 0 26px;
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
min-width: 0;
|
|
||||||
padding: 16px 0 6px;
|
padding: 16px 0 6px;
|
||||||
display: flex;
|
display: grid;
|
||||||
align-items: flex-start;
|
grid-template-areas:
|
||||||
max-height: 56px;
|
"pfp name edit"
|
||||||
|
"pfp summary summary"
|
||||||
> * {
|
"stats stats stats";
|
||||||
min-width: 0;
|
grid-template-columns: auto 1fr auto;
|
||||||
}
|
align-items: start;
|
||||||
|
|
||||||
.Avatar {
|
.Avatar {
|
||||||
--_avatarShadowBox: var(--avatarShadow);
|
--_avatarShadowBox: var(--avatarShadow);
|
||||||
|
|
@ -123,6 +128,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&-avatar-link {
|
&-avatar-link {
|
||||||
|
grid-area: pfp;
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
|
@ -153,8 +159,8 @@
|
||||||
|
|
||||||
.external-link-button, .edit-profile-button {
|
.external-link-button, .edit-profile-button {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 2.5em;
|
width: 2.3em;
|
||||||
text-align: center;
|
text-align: right;
|
||||||
margin: -0.5em 0;
|
margin: -0.5em 0;
|
||||||
padding: 0.5em 0;
|
padding: 0.5em 0;
|
||||||
|
|
||||||
|
|
@ -165,12 +171,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-summary {
|
.user-summary {
|
||||||
display: block;
|
grid-area: summary;
|
||||||
|
display: grid;
|
||||||
|
grid-template-areas:
|
||||||
|
"name name name name name"
|
||||||
|
"hand role lock avg _";
|
||||||
|
grid-template-columns:
|
||||||
|
auto auto auto auto 1fr;
|
||||||
|
justify-items: start;
|
||||||
margin-left: 0.6em;
|
margin-left: 0.6em;
|
||||||
text-align: left;
|
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
|
||||||
flex: 1 1 0;
|
|
||||||
// This is so that text doesn't get overlapped by avatar's shadow if it has
|
// This is so that text doesn't get overlapped by avatar's shadow if it has
|
||||||
// big one
|
// big one
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
|
@ -178,56 +188,82 @@
|
||||||
|
|
||||||
--emoji-size: 1.7em;
|
--emoji-size: 1.7em;
|
||||||
|
|
||||||
.top-line,
|
.user-locked {
|
||||||
.bottom-line {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-name {
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
flex: 1 1 auto;
|
|
||||||
margin-right: 1em;
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-line {
|
|
||||||
font-weight: light;
|
|
||||||
font-size: 1.1em;
|
|
||||||
align-items: baseline;
|
|
||||||
|
|
||||||
.lock-icon {
|
|
||||||
margin-left: 0.5em;
|
margin-left: 0.5em;
|
||||||
|
grid-area: lock;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-screen-name {
|
.user-screen-name {
|
||||||
min-width: 1px;
|
min-width: 1px;
|
||||||
flex: 0 1 auto;
|
max-width: 100%;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: $fallback--lightText;
|
color: $fallback--lightText;
|
||||||
color: var(--lightText, $fallback--lightText);
|
color: var(--lightText, $fallback--lightText);
|
||||||
|
grid-area: hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dailyAvg {
|
.dailyAvg {
|
||||||
min-width: 1px;
|
min-width: 1px;
|
||||||
flex: 0 0 auto;
|
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
color: $fallback--text;
|
color: $fallback--text;
|
||||||
color: var(--text, $fallback--text);
|
color: var(--text, $fallback--text);
|
||||||
|
grid-area: avg;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-role {
|
.user-roles {
|
||||||
flex: none;
|
display: flex;
|
||||||
color: $fallback--text;
|
grid-area: role;
|
||||||
color: var(--alertNeutralText, $fallback--text);
|
|
||||||
background-color: $fallback--fg;
|
.user-role {
|
||||||
background-color: var(--alertNeutral, $fallback--fg);
|
color: $fallback--text;
|
||||||
|
color: var(--alertNeutralText, $fallback--text);
|
||||||
|
background-color: $fallback--fg;
|
||||||
|
background-color: var(--alertNeutral, $fallback--fg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-counts {
|
||||||
|
grid-area: stats;
|
||||||
|
display: flex;
|
||||||
|
line-height:16px;
|
||||||
|
padding-top: 0.5em;
|
||||||
|
text-align: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
color: $fallback--lightText;
|
||||||
|
color: var(--lightText, $fallback--lightText);
|
||||||
|
align-self: center;
|
||||||
|
|
||||||
|
.user-count {
|
||||||
|
padding: .5em 0 .5em 0;
|
||||||
|
margin: 0 .5em;
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size:1em;
|
||||||
|
font-weight: bolder;
|
||||||
|
margin: 0 0 0.25em;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-name {
|
||||||
|
text-align: start;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-left: 0.6em;
|
||||||
|
font-size: 1.1em;
|
||||||
|
grid-area: name;
|
||||||
|
align-self: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
max-width: 100%;
|
||||||
|
z-index: 1; // so shadow from user avatar doesn't overlap it
|
||||||
|
}
|
||||||
|
|
||||||
.user-meta {
|
.user-meta {
|
||||||
margin-bottom: .15em;
|
margin-bottom: .15em;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -290,34 +326,21 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.-compact {
|
||||||
|
.container {
|
||||||
|
grid-template-areas:
|
||||||
|
"pfp name stats edit"
|
||||||
|
"pfp summary stats edit";
|
||||||
|
grid-template-columns: auto auto 1fr auto;
|
||||||
|
}
|
||||||
|
.user-counts {
|
||||||
|
padding-top: 0;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar .edit-profile-button {
|
.sidebar .edit-profile-button {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-counts {
|
|
||||||
display: flex;
|
|
||||||
line-height:16px;
|
|
||||||
padding: .5em 1.5em 0em 1.5em;
|
|
||||||
text-align: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
color: $fallback--lightText;
|
|
||||||
color: var(--lightText, $fallback--lightText);
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-count {
|
|
||||||
flex: 1 0 auto;
|
|
||||||
padding: .5em 0 .5em 0;
|
|
||||||
margin: 0 .5em;
|
|
||||||
|
|
||||||
h5 {
|
|
||||||
font-size:1em;
|
|
||||||
font-weight: bolder;
|
|
||||||
margin: 0 0 0.25em;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,10 @@
|
||||||
class="background-image"
|
class="background-image"
|
||||||
/>
|
/>
|
||||||
<div class="panel-heading -flexible-height">
|
<div class="panel-heading -flexible-height">
|
||||||
<div class="user-info">
|
<div
|
||||||
|
class="user-info"
|
||||||
|
:class="{ '-compact': this.compactUserInfo }"
|
||||||
|
>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a
|
<a
|
||||||
v-if="allowZoomingAvatar"
|
v-if="allowZoomingAvatar"
|
||||||
|
|
@ -29,6 +32,7 @@
|
||||||
</a>
|
</a>
|
||||||
<router-link
|
<router-link
|
||||||
v-else
|
v-else
|
||||||
|
class="user-info-avatar-link"
|
||||||
:to="userProfileLink(user)"
|
:to="userProfileLink(user)"
|
||||||
>
|
>
|
||||||
<UserAvatar
|
<UserAvatar
|
||||||
|
|
@ -36,15 +40,80 @@
|
||||||
:user="user"
|
:user="user"
|
||||||
/>
|
/>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
<RichContent
|
||||||
|
:title="user.name"
|
||||||
|
class="user-name"
|
||||||
|
:html="user.name"
|
||||||
|
:emoji="user.emoji"
|
||||||
|
/>
|
||||||
<div class="user-summary">
|
<div class="user-summary">
|
||||||
<div class="top-line">
|
<router-link
|
||||||
<RichContent
|
class="user-screen-name"
|
||||||
:title="user.name"
|
:title="user.screen_name_ui"
|
||||||
class="user-name"
|
:to="userProfileLink(user)"
|
||||||
:html="user.name"
|
>
|
||||||
:emoji="user.emoji"
|
@{{ user.screen_name_ui }}
|
||||||
|
</router-link>
|
||||||
|
<span class="user-roles" v-if="!hideBio && (user.deactivated || !!visibleRole || user.bot)">
|
||||||
|
<span
|
||||||
|
v-if="user.deactivated"
|
||||||
|
class="alert user-role"
|
||||||
|
>
|
||||||
|
{{ $t('user_card.deactivated') }}
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="!!visibleRole"
|
||||||
|
class="alert user-role"
|
||||||
|
>
|
||||||
|
{{ $t(`general.role.${visibleRole}`) }}
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="user.bot"
|
||||||
|
class="alert user-role"
|
||||||
|
>
|
||||||
|
{{ $t('user_card.bot') }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span class="user-locked" v-if="user.locked">
|
||||||
|
<FAIcon
|
||||||
|
class="lock-icon"
|
||||||
|
icon="lock"
|
||||||
|
size="sm"
|
||||||
/>
|
/>
|
||||||
<button
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="!mergedConfig.hideUserStats && !hideBio"
|
||||||
|
class="dailyAvg"
|
||||||
|
>{{ dailyAvg }} {{ $t('user_card.per_day') }}</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="!mergedConfig.hideUserStats && switcher"
|
||||||
|
class="user-counts"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="user-count"
|
||||||
|
@click.prevent="setProfileView('statuses')"
|
||||||
|
>
|
||||||
|
<h5>{{ $t('user_card.statuses') }}</h5>
|
||||||
|
<span>{{ user.statuses_count }} <br></span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="user-count"
|
||||||
|
@click.prevent="setProfileView('friends')"
|
||||||
|
>
|
||||||
|
<h5>{{ $t('user_card.followees') }}</h5>
|
||||||
|
<span>{{ hideFollowsCount ? $t('user_card.hidden') : user.friends_count }}</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="user-count"
|
||||||
|
@click.prevent="setProfileView('followers')"
|
||||||
|
>
|
||||||
|
<h5>{{ $t('user_card.followers') }}</h5>
|
||||||
|
<span>{{ hideFollowersCount ? $t('user_card.hidden') : user.followers_count }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="user-buttons">
|
||||||
|
<button
|
||||||
v-if="!isOtherUser && user.is_local"
|
v-if="!isOtherUser && user.is_local"
|
||||||
class="button-unstyled edit-profile-button"
|
class="button-unstyled edit-profile-button"
|
||||||
@click.stop="openProfileTab"
|
@click.stop="openProfileTab"
|
||||||
|
|
@ -83,47 +152,6 @@
|
||||||
:user="user"
|
:user="user"
|
||||||
:relationship="relationship"
|
:relationship="relationship"
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
<div class="bottom-line">
|
|
||||||
<router-link
|
|
||||||
class="user-screen-name"
|
|
||||||
:title="user.screen_name_ui"
|
|
||||||
:to="userProfileLink(user)"
|
|
||||||
>
|
|
||||||
@{{ user.screen_name_ui }}
|
|
||||||
</router-link>
|
|
||||||
<template v-if="!hideBio">
|
|
||||||
<span
|
|
||||||
v-if="user.deactivated"
|
|
||||||
class="alert user-role"
|
|
||||||
>
|
|
||||||
{{ $t('user_card.deactivated') }}
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-if="!!visibleRole"
|
|
||||||
class="alert user-role"
|
|
||||||
>
|
|
||||||
{{ $t(`general.role.${visibleRole}`) }}
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-if="user.bot"
|
|
||||||
class="alert user-role"
|
|
||||||
>
|
|
||||||
{{ $t('user_card.bot') }}
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<span v-if="user.locked">
|
|
||||||
<FAIcon
|
|
||||||
class="lock-icon"
|
|
||||||
icon="lock"
|
|
||||||
size="sm"
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-if="!mergedConfig.hideUserStats && !hideBio"
|
|
||||||
class="dailyAvg"
|
|
||||||
>{{ dailyAvg }} {{ $t('user_card.per_day') }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="user-meta">
|
<div class="user-meta">
|
||||||
|
|
@ -269,38 +297,13 @@
|
||||||
v-if="!hideBio"
|
v-if="!hideBio"
|
||||||
class="panel-body"
|
class="panel-body"
|
||||||
>
|
>
|
||||||
<div
|
|
||||||
v-if="!mergedConfig.hideUserStats && switcher"
|
|
||||||
class="user-counts"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="user-count"
|
|
||||||
@click.prevent="setProfileView('statuses')"
|
|
||||||
>
|
|
||||||
<h5>{{ $t('user_card.statuses') }}</h5>
|
|
||||||
<span>{{ user.statuses_count }} <br></span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="user-count"
|
|
||||||
@click.prevent="setProfileView('friends')"
|
|
||||||
>
|
|
||||||
<h5>{{ $t('user_card.followees') }}</h5>
|
|
||||||
<span>{{ hideFollowsCount ? $t('user_card.hidden') : user.friends_count }}</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="user-count"
|
|
||||||
@click.prevent="setProfileView('followers')"
|
|
||||||
>
|
|
||||||
<h5>{{ $t('user_card.followers') }}</h5>
|
|
||||||
<span>{{ hideFollowersCount ? $t('user_card.hidden') : user.followers_count }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<RichContent
|
<RichContent
|
||||||
v-if="!hideBio"
|
v-if="!hideBio"
|
||||||
class="user-card-bio"
|
class="user-card-bio"
|
||||||
:html="user.description_html"
|
:html="user.description_html"
|
||||||
:emoji="user.emoji"
|
:emoji="user.emoji"
|
||||||
:handle-links="true"
|
:handle-links="true"
|
||||||
|
:style='{"text-align": this.$store.getters.mergedConfig.centerAlignBio ? "center" : "start"}'
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<teleport to="#modal">
|
<teleport to="#modal">
|
||||||
|
|
|
||||||
|
|
@ -482,6 +482,7 @@
|
||||||
"blocks_tab": "Blocks",
|
"blocks_tab": "Blocks",
|
||||||
"bot": "Dies ist ein Bot Account",
|
"bot": "Dies ist ein Bot Account",
|
||||||
"btnRadius": "Knöpfe",
|
"btnRadius": "Knöpfe",
|
||||||
|
"center_align_bio": "Zentrale Textausrichtung in der Bio",
|
||||||
"cBlue": "Blau (Antworten, folgt dir)",
|
"cBlue": "Blau (Antworten, folgt dir)",
|
||||||
"cGreen": "Grün (Retweet)",
|
"cGreen": "Grün (Retweet)",
|
||||||
"cOrange": "Orange (Favorisieren)",
|
"cOrange": "Orange (Favorisieren)",
|
||||||
|
|
@ -496,6 +497,7 @@
|
||||||
"checkboxRadius": "Auswahlfelder",
|
"checkboxRadius": "Auswahlfelder",
|
||||||
"collapse_subject": "Beiträge mit Inhaltswarnungen einklappen",
|
"collapse_subject": "Beiträge mit Inhaltswarnungen einklappen",
|
||||||
"columns": "Spalten",
|
"columns": "Spalten",
|
||||||
|
"compact_user_info": "Kompakte Benutzerinfos wenn genug Platz",
|
||||||
"composing": "Verfassen",
|
"composing": "Verfassen",
|
||||||
"confirm_dialogs": "Bestätigung erforderlich für:",
|
"confirm_dialogs": "Bestätigung erforderlich für:",
|
||||||
"confirm_dialogs_approve_follow": "Annehmen einer Followanfrage",
|
"confirm_dialogs_approve_follow": "Annehmen einer Followanfrage",
|
||||||
|
|
@ -934,6 +936,7 @@
|
||||||
"title": "Version"
|
"title": "Version"
|
||||||
},
|
},
|
||||||
"virtual_scrolling": "Anzeige der Zeitleiste optimieren",
|
"virtual_scrolling": "Anzeige der Zeitleiste optimieren",
|
||||||
|
"widen_timeline": "Zeitleiste verbreitern, um horizontalen Platz zu füllen",
|
||||||
"word_filter": "Wortfilter",
|
"word_filter": "Wortfilter",
|
||||||
"wordfilter": "Wortfilter"
|
"wordfilter": "Wortfilter"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -488,6 +488,7 @@
|
||||||
"blocks_tab": "Blocks",
|
"blocks_tab": "Blocks",
|
||||||
"bot": "This is a bot account",
|
"bot": "This is a bot account",
|
||||||
"btnRadius": "Buttons",
|
"btnRadius": "Buttons",
|
||||||
|
"center_align_bio": "Center text in user bio",
|
||||||
"cBlue": "Blue (Reply, follow)",
|
"cBlue": "Blue (Reply, follow)",
|
||||||
"cGreen": "Green (Retweet)",
|
"cGreen": "Green (Retweet)",
|
||||||
"cOrange": "Orange (Favorite)",
|
"cOrange": "Orange (Favorite)",
|
||||||
|
|
@ -502,6 +503,7 @@
|
||||||
"checkboxRadius": "Checkboxes",
|
"checkboxRadius": "Checkboxes",
|
||||||
"collapse_subject": "Collapse posts with content warnings",
|
"collapse_subject": "Collapse posts with content warnings",
|
||||||
"columns": "Columns",
|
"columns": "Columns",
|
||||||
|
"compact_user_info": "Compact user info when enough space",
|
||||||
"composing": "Composing",
|
"composing": "Composing",
|
||||||
"confirm_dialogs": "Require confirmation for:",
|
"confirm_dialogs": "Require confirmation for:",
|
||||||
"confirm_dialogs_approve_follow": "Accepting a follow request",
|
"confirm_dialogs_approve_follow": "Accepting a follow request",
|
||||||
|
|
@ -948,6 +950,13 @@
|
||||||
},
|
},
|
||||||
"virtual_scrolling": "Optimize timeline rendering",
|
"virtual_scrolling": "Optimize timeline rendering",
|
||||||
"use_blurhash": "Use blurhashes for NSFW thumbnails",
|
"use_blurhash": "Use blurhashes for NSFW thumbnails",
|
||||||
|
"widen_timeline": "Widen the Timeline to fill horizontal space",
|
||||||
|
"widen_timeline_option": {
|
||||||
|
"1fr": "Full",
|
||||||
|
"75%": "75%",
|
||||||
|
"50%": "50%",
|
||||||
|
"off": "Off"
|
||||||
|
},
|
||||||
"word_filter": "Word filter",
|
"word_filter": "Word filter",
|
||||||
"wordfilter": "Wordfilter"
|
"wordfilter": "Wordfilter"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ export const defaultState = {
|
||||||
autohideFloatingPostButton: false,
|
autohideFloatingPostButton: false,
|
||||||
pauseOnUnfocused: true,
|
pauseOnUnfocused: true,
|
||||||
displayPageBackgrounds: true,
|
displayPageBackgrounds: true,
|
||||||
|
centerAlignBio: false,
|
||||||
|
compactUserInfo: true,
|
||||||
stopGifs: undefined,
|
stopGifs: undefined,
|
||||||
replyVisibility: 'all',
|
replyVisibility: 'all',
|
||||||
thirdColumnMode: 'notifications',
|
thirdColumnMode: 'notifications',
|
||||||
|
|
@ -77,6 +79,7 @@ export const defaultState = {
|
||||||
hideScopeNotice: false,
|
hideScopeNotice: false,
|
||||||
useStreamingApi: false,
|
useStreamingApi: false,
|
||||||
sidebarRight: undefined, // instance default
|
sidebarRight: undefined, // instance default
|
||||||
|
widenTimeline: undefined, // instance default
|
||||||
subjectLineBehavior: undefined, // instance default
|
subjectLineBehavior: undefined, // instance default
|
||||||
alwaysShowSubjectInput: undefined, // instance default
|
alwaysShowSubjectInput: undefined, // instance default
|
||||||
postContentType: undefined, // instance default
|
postContentType: undefined, // instance default
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ const defaultState = {
|
||||||
showNavShortcuts: true,
|
showNavShortcuts: true,
|
||||||
showWiderShortcuts: true,
|
showWiderShortcuts: true,
|
||||||
sidebarRight: false,
|
sidebarRight: false,
|
||||||
|
widenTimeline: true,
|
||||||
subjectLineBehavior: 'email',
|
subjectLineBehavior: 'email',
|
||||||
theme: 'pleroma-dark',
|
theme: 'pleroma-dark',
|
||||||
virtualScrolling: true,
|
virtualScrolling: true,
|
||||||
|
|
|
||||||
|
|
@ -326,6 +326,7 @@ export const parseStatus = (data) => {
|
||||||
}
|
}
|
||||||
output.pinned = data.pinned
|
output.pinned = data.pinned
|
||||||
output.muted = data.muted
|
output.muted = data.muted
|
||||||
|
output.language = data.language
|
||||||
} else {
|
} else {
|
||||||
output.favorited = data.favorited
|
output.favorited = data.favorited
|
||||||
output.fave_num = data.fave_num
|
output.fave_num = data.fave_num
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 628 KiB |
BIN
static/background.jpg
Normal file
BIN
static/background.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 718 KiB |
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"alwaysShowSubjectInput": true,
|
"alwaysShowSubjectInput": true,
|
||||||
"background": "/static/aurora_borealis.jpg",
|
"background": "/static/background.jpg",
|
||||||
"collapseMessageWithSubject": false,
|
"collapseMessageWithSubject": true,
|
||||||
"greentext": false,
|
"greentext": false,
|
||||||
"hideFilteredStatuses": false,
|
"hideFilteredStatuses": false,
|
||||||
"hideMutedPosts": false,
|
"hideMutedPosts": false,
|
||||||
|
|
@ -22,5 +22,5 @@
|
||||||
"sidebarRight": false,
|
"sidebarRight": false,
|
||||||
"subjectLineBehavior": "email",
|
"subjectLineBehavior": "email",
|
||||||
"theme": "ihatebeingalive",
|
"theme": "ihatebeingalive",
|
||||||
"webPushNotifications": false
|
"webPushNotifications": true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
static/favicon.png
Normal file
BIN
static/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
|
|
@ -1,5 +1,3 @@
|
||||||
<h4>Terms of Service</h4>
|
<h3>Hello.</h3>
|
||||||
|
|
||||||
<p>This is a placeholder, overwrite this by putting a file at <pre>$STATIC_DIR/static/terms-of-service.html</pre><p>
|
<p>This is an <a href="https://iceshrimp.dev/iceshrimp/akkoma-fe">akkoma-fe</a> instance running for users of miau.jeder.pl which itself is running on <a href="https://iceshrimp.dev/iceshrimp/Iceshrimp.NET">Iceshrimp.NET</a>, and should be showing contents of the instance.</p>
|
||||||
|
|
||||||
<p>See the <a href="https://docs.akkoma.dev/main/backend/configuration/static_dir/">Static Directory</a> docs for more info.</p>
|
|
||||||
|
|
|
||||||
37
yarn.lock
37
yarn.lock
|
|
@ -4283,6 +4283,11 @@ functions-have-names@^1.2.3:
|
||||||
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
|
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
|
||||||
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
|
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
|
||||||
|
|
||||||
|
fzy.js@^0.4.1:
|
||||||
|
version "0.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fzy.js/-/fzy.js-0.4.1.tgz#695bf87cc0bbdda9cbcf22bc318a74c4aca6b758"
|
||||||
|
integrity sha512-4sPVXf+9oGhzg2tYzgWe4hgAY0wEbkqeuKVEgdnqX8S8VcLosQsDjb0jV+f5uoQlf8INWId1w0IGoufAoik1TA==
|
||||||
|
|
||||||
gensync@^1.0.0-beta.2:
|
gensync@^1.0.0-beta.2:
|
||||||
version "1.0.0-beta.2"
|
version "1.0.0-beta.2"
|
||||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||||
|
|
@ -7390,7 +7395,16 @@ streamroller@^3.1.5:
|
||||||
debug "^4.3.4"
|
debug "^4.3.4"
|
||||||
fs-extra "^8.1.0"
|
fs-extra "^8.1.0"
|
||||||
|
|
||||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
|
"string-width-cjs@npm:string-width@^4.2.0":
|
||||||
|
version "4.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
|
dependencies:
|
||||||
|
emoji-regex "^8.0.0"
|
||||||
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
|
string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
|
||||||
version "4.2.3"
|
version "4.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
|
|
@ -7477,7 +7491,14 @@ stringify-object@^3.3.0:
|
||||||
is-obj "^1.0.1"
|
is-obj "^1.0.1"
|
||||||
is-regexp "^1.0.0"
|
is-regexp "^1.0.0"
|
||||||
|
|
||||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^5.0.1"
|
||||||
|
|
||||||
|
strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
|
@ -8577,8 +8598,7 @@ workerpool@6.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
|
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
|
||||||
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
|
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
|
||||||
|
|
||||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||||
name wrap-ansi-cjs
|
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
|
@ -8596,6 +8616,15 @@ wrap-ansi@^6.2.0:
|
||||||
string-width "^4.1.0"
|
string-width "^4.1.0"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrap-ansi@^8.1.0:
|
wrap-ansi@^8.1.0:
|
||||||
version "8.1.0"
|
version "8.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue