diff --git a/components/status/StatusBody.vue b/components/status/StatusBody.vue index 72a6c24d..35a0add5 100644 --- a/components/status/StatusBody.vue +++ b/components/status/StatusBody.vue @@ -16,7 +16,7 @@ const { translation } = useTranslation(status) :emojis="status.emojis" :lang="status.language" /> - <div v-else h-3 /> + <div v-else /> <template v-if="translation.visible"> <div my2 h-px border="b base" bg-base /> <ContentRich :content="translation.text" :emojis="status.emojis" /> diff --git a/components/status/StatusCard.vue b/components/status/StatusCard.vue index 9ebf9a5c..cfd399d2 100644 --- a/components/status/StatusCard.vue +++ b/components/status/StatusCard.vue @@ -58,19 +58,21 @@ const isFiltered = $computed(() => filterPhrase && (props.context ? filter?.cont const avatarOnAvatar = $(computedEager(() => useFeatureFlags().experimentalAvatarOnAvatar)) const showRebloggedByAvatarOnAvatar = $computed(() => rebloggedBy && avatarOnAvatar && rebloggedBy.id !== status.account.id) + +const isDM = $computed(() => status.visibility === 'direct') </script> <template> - <div v-if="filter?.filterAction !== 'hide'" :id="`status-${status.id}`" ref="el" relative flex flex-col gap-2 px-4 pt-3 pb-4 transition-100 :class="{ 'hover:bg-active': hover }" tabindex="0" focus:outline-none focus-visible:ring="2 primary" @click="onclick" @keydown.enter="onclick"> - <div flex justify-between pb1> + <div v-if="filter?.filterAction !== 'hide'" :id="`status-${status.id}`" ref="el" relative flex flex-col gap-1 px-4 pt-1 class="pb-1.5" transition-100 :class="{ 'hover:bg-active': hover }" tabindex="0" focus:outline-none focus-visible:ring="2 primary" @click="onclick" @keydown.enter="onclick"> + <div flex justify-between> <slot name="meta"> - <div v-if="rebloggedBy" text-secondary text-sm ws-nowrap flex="~" gap-1 items-center> + <div v-if="rebloggedBy" text-secondary text-sm ws-nowrap flex="~" gap-1 items-center py1> <div i-ri:repeat-fill mr-1 text-primary /> <AccountInlineInfo font-bold :account="rebloggedBy" :avatar="!avatarOnAvatar" /> </div> <div v-else /> </slot> - <StatusReplyingTo v-if="showReplyTo" :status="status" :class="faded ? 'text-secondary-light' : ''" /> + <StatusReplyingTo v-if="showReplyTo" :status="status" :class="faded ? 'text-secondary-light' : ''" py1 /> </div> <div flex gap-4 :class="faded ? 'text-secondary' : ''"> <div relative> @@ -103,9 +105,9 @@ const showRebloggedByAvatarOnAvatar = $computed(() => rebloggedBy && avatarOnAva <StatusActionsMore :status="status" mr--2 /> </div> <div - space-y-2 + space-y-3 :class="{ - 'my3 p1 px4 br2 bg-fade border-primary-light border-1 rounded-3 rounded-tl-none': status.visibility === 'direct', + 'mt2 pt1 pb0.5 px3.5 br2 bg-fade border-primary-light border-1 rounded-3 rounded-tl-none': isDM, }" > <StatusSpoiler :enabled="status.sensitive || isFiltered" :filter="isFiltered"> @@ -120,22 +122,21 @@ const showRebloggedByAvatarOnAvatar = $computed(() => rebloggedBy && avatarOnAva <StatusMedia v-if="status.mediaAttachments?.length" :status="status" - :class="status.visibility === 'direct' ? 'pb4' : ''" /> <StatusPreviewCard v-if="status.card" :card="status.card" - :class="status.visibility === 'direct' ? 'pb4' : ''" :small-picture-only="status.mediaAttachments?.length > 0" /> + <StatusCard + v-if="status.reblog" + :status="status.reblog" border="~ rounded" + :actions="false" + /> + <div v-if="isDM" /> </StatusSpoiler> - <StatusCard - v-if="status.reblog" - :status="status.reblog" border="~ rounded" - :actions="false" - /> </div> - <StatusActions v-if="(actions !== false && !isZenMode)" pt2 :status="status" /> + <StatusActions v-if="(actions !== false && !isZenMode)" :status="status" :class="isDM ? 'mt1' : 'mt2'" /> </div> </div> </div> diff --git a/components/status/StatusDetails.vue b/components/status/StatusDetails.vue index 31515af8..e1e4a0ad 100644 --- a/components/status/StatusDetails.vue +++ b/components/status/StatusDetails.vue @@ -21,10 +21,12 @@ const { t } = useI18n() useHeadFixed({ title: () => `${status.account.displayName || status.account.acct} ${t('common.in')} ${t('app_name')}: "${removeHTMLTags(status.content) || ''}"`, }) + +const isDM = $computed(() => status.visibility === 'direct') </script> <template> - <div :id="`status-${status.id}`" flex flex-col gap-2 py3 px-4 relative> + <div :id="`status-${status.id}`" flex flex-col gap-2 pt2 pb1 px-4 relative> <StatusActionsMore :status="status" absolute right-2 top-2 /> <NuxtLink :to="getAccountRoute(status.account)" rounded-full hover:bg-active transition-100 pr5 mr-a> <AccountHoverWrapper :account="status.account"> @@ -32,7 +34,10 @@ useHeadFixed({ </AccountHoverWrapper> </NuxtLink> <div - :class="status.visibility === 'direct' ? 'my2 p1 px4 br2 bg-fade border-primary-light border-1 rounded-3 rounded-tl-none' : ''" + space-y-3 + :class="{ + 'pt2 pb0.5 px3.5 br2 bg-fade border-primary-light border-1 rounded-3': isDM, + }" > <StatusSpoiler :enabled="status.sensitive"> <template #spoiler> @@ -40,7 +45,7 @@ useHeadFixed({ {{ status.spoilerText }} </p> </template> - <StatusBody :status="status" :with-action="false" text-2xl /> + <StatusBody :status="status" :with-action="false" text-xl /> <StatusPoll v-if="status.poll" :poll="status.poll" @@ -48,16 +53,15 @@ useHeadFixed({ <StatusMedia v-if="status.mediaAttachments?.length" :status="status" - :class="status.visibility === 'direct' ? 'pb4' : ''" full-size /> <StatusPreviewCard v-if="status.card" :card="status.card" - :class="status.visibility === 'direct' ? 'pb4' : ''" :small-picture-only="status.mediaAttachments?.length > 0" mt-2 /> + <div v-if="isDM" /> </StatusSpoiler> </div> <div flex="~ gap-1" items-center text-secondary text-sm> diff --git a/styles/global.css b/styles/global.css index b7416316..fba73d15 100644 --- a/styles/global.css +++ b/styles/global.css @@ -98,7 +98,7 @@ body { --at-apply: font-bold; } p { - --at-apply: my-2; + --at-apply: my-1; } code { --at-apply: bg-code text-code px1 py0.5 rounded text-0.9em leading-0.8em;