···
import { type AtpClient } from '$lib/at/client';
+
} from '@atcute/bluesky';
parseCanonicalResourceUri,
···
{#if !isOnPostComposer && record.embed}
{@const embed = record.embed}
+
embed: AppBskyEmbedImages.Main | AppBskyEmbedVideo.Main | AppBskyEmbedExternal.Main
+
{#if embed.$type === 'app.bsky.embed.images'}
+
<!-- todo: improve how images are displayed, and pop out on click -->
+
{#each embed.images as image (image.image)}
+
{#if isBlob(image.image)}
+
src={img('feed_thumbnail', did, image.image.ref.$link)}
+
{:else if embed.$type === 'app.bsky.embed.video'}
+
{#if isBlob(embed.video)}
+
{#await didDoc then didDoc}
+
<!-- svelte-ignore a11y_media_has_caption -->
+
src={blob(didDoc.value.pds, did, embed.video.ref.$link)}
{#snippet embedPost(uri: ResourceUri)}
{@const parsedUri = expect(parseCanonicalResourceUri(uri))}
···
{@render embedBadge(record)}
+
{#if embed.$type === 'app.bsky.embed.images' || embed.$type === 'app.bsky.embed.video'}
+
{@render embedMedia(embed)}
{:else if embed.$type === 'app.bsky.embed.record'}
{@render embedPost(embed.record.uri)}
{:else if embed.$type === 'app.bsky.embed.recordWithMedia'}
+
<div class="space-y-1.5">
+
{@render embedPost(embed.record.record.uri)}
+
{@render embedMedia(embed.media)}
<!-- todo: implement external link embeds -->