From 7f371ffb8baa6fde1afdf619606bf82ddfdfb4b3 Mon Sep 17 00:00:00 2001 From: Sodbileg Gansukh Date: Wed, 2 Sep 2026 09:32:38 +0800 Subject: [PATCH] Added a Bluesky share button to the published post modal (#30356) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref https://linear.app/ghost/issue/DES-1367/add-bluesky-share-button-to-published-post-popup Bluesky is already offered in Portal's native share, so this brings the admin modal in line — same intent URL and payload, placed last so the existing buttons keep their order. Also fixes the social buttons leaving a gap on the right when the footer stacks on mobile — they now fill the row at that width. --- .../src/shared/analytics/post-share-modal.tsx | 5 +++++ .../app/components/modal-post-success.hbs | 3 +++ apps/ember-admin/app/styles/app-dark.css | 4 ++-- .../app/styles/components/publishmenu.css | 16 +++++++--------- .../public/assets/icons/social-bluesky.svg | 4 ++++ .../components/patterns/share-modal.stories.tsx | 5 +++++ .../src/components/patterns/share-modal.tsx | 15 +++++++++++++-- 7 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 apps/ember-admin/public/assets/icons/social-bluesky.svg diff --git a/apps/admin/src/shared/analytics/post-share-modal.tsx b/apps/admin/src/shared/analytics/post-share-modal.tsx index 5ba56fbd45b..9eb422245cf 100644 --- a/apps/admin/src/shared/analytics/post-share-modal.tsx +++ b/apps/admin/src/shared/analytics/post-share-modal.tsx @@ -67,6 +67,11 @@ const PostShareModal: React.FC = ({ label: 'Share on LinkedIn', service: 'linkedin', }, + { + href: `https://bsky.app/intent/compose?text=${encodedPostURLTitle}`, + label: 'Share on Bluesky', + service: 'bluesky', + }, ]; return ( diff --git a/apps/ember-admin/app/components/modal-post-success.hbs b/apps/ember-admin/app/components/modal-post-success.hbs index 91b5c17a290..82be2e1e6cd 100644 --- a/apps/ember-admin/app/components/modal-post-success.hbs +++ b/apps/ember-admin/app/components/modal-post-success.hbs @@ -161,6 +161,9 @@ {{svg-jar "social-linkedin"}} + + {{svg-jar "social-bluesky"}} + +social-bluesky + + diff --git a/apps/shade/src/components/patterns/share-modal.stories.tsx b/apps/shade/src/components/patterns/share-modal.stories.tsx index 016d2c0e158..13eb2c90835 100644 --- a/apps/shade/src/components/patterns/share-modal.stories.tsx +++ b/apps/shade/src/components/patterns/share-modal.stories.tsx @@ -45,6 +45,11 @@ const postSocialLinks: ShareModalSocialLink[] = [ label: 'Share on LinkedIn', service: 'linkedin', }, + { + href: `https://bsky.app/intent/compose?text=${encodedPostTitleAndUrl}`, + label: 'Share on Bluesky', + service: 'bluesky', + }, ]; const publicationSocialLinks: ShareModalSocialLink[] = [ diff --git a/apps/shade/src/components/patterns/share-modal.tsx b/apps/shade/src/components/patterns/share-modal.tsx index 46e4aafb59e..bed7f140242 100644 --- a/apps/shade/src/components/patterns/share-modal.tsx +++ b/apps/shade/src/components/patterns/share-modal.tsx @@ -13,7 +13,7 @@ import { } from '@/components/ui/dialog'; import { cn } from '@/lib/utils'; -type ShareService = 'x' | 'threads' | 'facebook' | 'linkedin'; +type ShareService = 'x' | 'threads' | 'facebook' | 'linkedin' | 'bluesky'; export type ShareModalSocialLink = { href: string; @@ -198,6 +198,17 @@ function SocialIcon({ service }: { service: ShareService }) { ); } + if (service === 'bluesky') { + return ( + + + + ); + } + return (