fix(frontend): readable links and file chips on own bubbles
This commit is contained in:
@@ -69,13 +69,14 @@
|
|||||||
{:else if type === "url" || type === "text_link" || type === "email" || type === "phone_number"}
|
{:else if type === "url" || type === "text_link" || type === "email" || type === "phone_number"}
|
||||||
<a
|
<a
|
||||||
class="link"
|
class="link"
|
||||||
|
class:own
|
||||||
href={linkHref(node)}
|
href={linkHref(node)}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>{@render tree(node.children)}</a
|
>{@render tree(node.children)}</a
|
||||||
>
|
>
|
||||||
{:else if type === "mention" || type === "text_mention" || type === "hashtag" || type === "cashtag" || type === "bot_command"}
|
{:else if type === "mention" || type === "text_mention" || type === "hashtag" || type === "cashtag" || type === "bot_command"}
|
||||||
<span class="link">{@render tree(node.children)}</span>
|
<span class="link" class:own>{@render tree(node.children)}</span>
|
||||||
{:else}
|
{:else}
|
||||||
{@render tree(node.children)}
|
{@render tree(node.children)}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -108,6 +109,24 @@
|
|||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.own {
|
||||||
|
color: var(--color-own-links);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link.own {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-color: color-mix(
|
||||||
|
in srgb,
|
||||||
|
var(--color-own-links) 45%,
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration-color: currentcolor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.code,
|
.code,
|
||||||
|
|||||||
@@ -8,9 +8,10 @@
|
|||||||
chatId: number;
|
chatId: number;
|
||||||
media: MediaRef[];
|
media: MediaRef[];
|
||||||
onopen: (index: number) => void;
|
onopen: (index: number) => void;
|
||||||
|
own?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
let { media, chatId, onopen }: Props = $props();
|
let { media, chatId, onopen, own = false }: Props = $props();
|
||||||
|
|
||||||
const asFiles = $derived(
|
const asFiles = $derived(
|
||||||
media.every((item) => !isPreviewable(item.kind, item.mime))
|
media.every((item) => !isPreviewable(item.kind, item.mime))
|
||||||
@@ -31,7 +32,7 @@
|
|||||||
{#if asFiles}
|
{#if asFiles}
|
||||||
<div class="AlbumFiles">
|
<div class="AlbumFiles">
|
||||||
{#each media as item, index (item.id ?? index)}
|
{#each media as item, index (item.id ?? index)}
|
||||||
<FileChip media={item} />
|
<FileChip media={item} {own} />
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
@@ -188,6 +188,7 @@
|
|||||||
media={message.media}
|
media={message.media}
|
||||||
chatId={message.chat_id}
|
chatId={message.chat_id}
|
||||||
onopen={onmedia}
|
onopen={onmedia}
|
||||||
|
{own}
|
||||||
/>
|
/>
|
||||||
{:else if message.has_media}
|
{:else if message.has_media}
|
||||||
<MessageMedia {message} {own} onopen={() => onmedia(0)} />
|
<MessageMedia {message} {own} onopen={() => onmedia(0)} />
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
<span>Самоуничтожающееся медиа</span>
|
<span>Самоуничтожающееся медиа</span>
|
||||||
</button>
|
</button>
|
||||||
{:else if asFile && ref}
|
{:else if asFile && ref}
|
||||||
<FileChip media={ref} />
|
<FileChip media={ref} {own} />
|
||||||
{:else if !loaded}
|
{:else if !loaded}
|
||||||
<div class="media-skeleton"><Spinner /></div>
|
<div class="media-skeleton"><Spinner /></div>
|
||||||
{:else if ready && kind === "voice"}
|
{:else if ready && kind === "voice"}
|
||||||
|
|||||||
@@ -8,9 +8,10 @@
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
media: MediaRef;
|
media: MediaRef;
|
||||||
|
own?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { media }: Props = $props();
|
const { media, own = false }: Props = $props();
|
||||||
|
|
||||||
let saving = $state(false);
|
let saving = $state(false);
|
||||||
|
|
||||||
@@ -40,9 +41,9 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="FileChip">
|
<div class="FileChip" class:own>
|
||||||
<button class="file-main" type="button" title={name} onclick={save}>
|
<button class="file-main" type="button" title={name} onclick={save}>
|
||||||
<span class="file-glyph">
|
<span class="file-glyph" class:own>
|
||||||
<Icon name={saving ? "timer" : "document"} size="1.25rem" />
|
<Icon name={saving ? "timer" : "document"} size="1.25rem" />
|
||||||
</span>
|
</span>
|
||||||
<span class="file-text">
|
<span class="file-text">
|
||||||
@@ -72,6 +73,10 @@
|
|||||||
border-radius: var(--border-radius-default-small);
|
border-radius: var(--border-radius-default-small);
|
||||||
|
|
||||||
background-color: var(--color-primary-tint);
|
background-color: var(--color-primary-tint);
|
||||||
|
|
||||||
|
&.own {
|
||||||
|
background-color: var(--color-code-own-bg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.file-main {
|
.file-main {
|
||||||
@@ -104,6 +109,15 @@
|
|||||||
|
|
||||||
color: var(--color-white);
|
color: var(--color-white);
|
||||||
background-color: var(--color-primary);
|
background-color: var(--color-primary);
|
||||||
|
|
||||||
|
&.own {
|
||||||
|
color: var(--color-own-links);
|
||||||
|
background-color: color-mix(
|
||||||
|
in srgb,
|
||||||
|
var(--color-own-links) 20%,
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.file-text {
|
.file-text {
|
||||||
@@ -126,6 +140,10 @@
|
|||||||
color: var(--color-text-secondary);
|
color: var(--color-text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.own .file-sub {
|
||||||
|
color: var(--color-message-meta-own);
|
||||||
|
}
|
||||||
|
|
||||||
.file-share {
|
.file-share {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
@@ -146,4 +164,12 @@
|
|||||||
background-color: var(--color-primary-opacity);
|
background-color: var(--color-primary-opacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.own .file-share {
|
||||||
|
color: var(--color-own-links);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: color-mix(in srgb, currentcolor 18%, transparent);
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
|
|
||||||
--color-links: #{$color-links};
|
--color-links: #{$color-links};
|
||||||
|
|
||||||
--color-own-links: #{$color-white};
|
--color-own-links: #{$color-links};
|
||||||
|
|
||||||
--color-placeholders: #{$color-placeholders};
|
--color-placeholders: #{$color-placeholders};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user