diff --git a/package.json b/package.json
index 28896179..ed35ab84 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "impro",
- "version": "0.20.104",
+ "version": "0.20.105",
"type": "module",
"scripts": {
"start": "rm -rf \"${BUILD_DIR:-build}\" && NODE_ENV=development eleventy --serve",
diff --git a/src/css/style.css b/src/css/style.css
index 6225f0f4..2b332dfd 100644
--- a/src/css/style.css
+++ b/src/css/style.css
@@ -7076,6 +7076,15 @@ sidebar-search {
top: -2px;
}
+#feed-detail-view .feed-detail-avatar-skeleton {
+ display: inline-block;
+}
+
+#feed-detail-view .feed-detail-header-skeleton-line {
+ display: inline-block;
+ vertical-align: middle;
+}
+
#feed-detail-view .pin-feed-button,
#list-detail-view .pin-feed-button {
width: 24px;
diff --git a/src/js/views/feedDetail.view.js b/src/js/views/feedDetail.view.js
index 2720a24f..e1922b1f 100644
--- a/src/js/views/feedDetail.view.js
+++ b/src/js/views/feedDetail.view.js
@@ -1,6 +1,7 @@
import { html, render } from "/js/lib/lit-html.js";
import { resolveDidFromHandleOrDid } from "/js/atproto.js";
import { classnames } from "/js/utils.js";
+import { cdnImageUrl } from "/js/dataHelpers.js";
import { postFeedTemplate } from "/js/templates/postFeed.template.js";
import "/js/components/infinite-scroll-container.js";
import { headerTemplate } from "/js/templates/header.template.js";
@@ -12,6 +13,34 @@ import "/js/components/context-menu.js";
import "/js/components/context-menu-item.js";
import "/js/components/context-menu-item-group.js";
+function feedAvatarTemplate({ feedGenerator }) {
+ return html`
`;
+}
+
+function feedAvatarSkeletonTemplate() {
+ return html``;
+}
+
+function feedHeaderTitleSkeletonTemplate() {
+ return html``;
+}
+
+function feedHeaderSubtitleSkeletonTemplate() {
+ return html``;
+}
+
export default async function feedDetailView({
root,
params,
@@ -55,8 +84,17 @@ export default async function feedDetailView({
render(
html`
${headerTemplate({
- title: feedName,
- subtitle: feedAuthorHandle ? `@${feedAuthorHandle}` : "",
+ ...(feedGenerator
+ ? {
+ title: feedName,
+ subtitle: feedAuthorHandle ? `@${feedAuthorHandle}` : "",
+ avatarTemplate: () => feedAvatarTemplate({ feedGenerator }),
+ }
+ : {
+ title: feedHeaderTitleSkeletonTemplate(),
+ subtitle: feedHeaderSubtitleSkeletonTemplate(),
+ avatarTemplate: () => feedAvatarSkeletonTemplate(),
+ }),
rightItemTemplate: () => {
const feedLink = `https://bsky.app/profile/${feedAuthorHandle || handleOrDid}/feed/${rkey}`;
return html`