+ {state !== 'blocked' && (
+
+ )}
+ {isCurrent && state === 'following' && (
+
+ )}
+ {/* Blocked keeps Unblock in the row in both layouts — it is the only way
+ back, so it never goes behind the "…" menu. In the proposed layout it
+ takes the Follow slot, which is empty while blocked. */}
+ {(state === 'blocked' || (isCurrent && state !== 'following')) && (
+
+ )}
+ {showShare && (
+
+ )}
+ {!isCurrent && state === 'following' && (
+ : }
+ label={
+ notificationsOn ? 'Disable notifications' : 'Enable notifications'
+ }
+ />
+ )}
+
+
+
+);
+
+const Case = ({
+ label,
+ note,
+ wide = false,
+ children,
+}: {
+ label: string;
+ note?: string;
+ /** Cases whose content is wider than a single action row. */
+ wide?: boolean;
+ children: ReactNode;
+}): ReactElement => (
+
+
+ {label}
+
+
+ {children}
+
+ {note && (
+
+ {note}
+
+ )}
+
+);
+
+const INTERACTION_CHECKS = [
+ 'Click the “Copy link” label — it copies straight away and the copy glyph cross-fades into a green check for a second.',
+ 'Click the chevron — the DS dropdown opens with the social tiles and the chevron rotates to point back at it.',
+ 'Hover the two halves — one seam, not two borders meeting, and the whole control keeps a standard button’s height and radius.',
+ 'Hover the three secondary controls (copy link, bell, “…”) — same Float surface, same size, same hover.',
+ 'Open the “…” menu — Block lives there, under “Add to custom feed” (additionalOptions append; say the word if it should sit first).',
+ 'Block a tag or source — Unblock comes back out into the row and leaves the menu, so the way back is never buried.',
+ 'Switch the toolbar viewport to a mobile size — the chevron and the dropdown drop; a single tap opens the native share sheet.',
+ 'Toggle the toolbar theme — the row and the dropdown have to hold contrast in dark mode.',
+];
+
+// Every state the promoted share control can be seen in, on one page.
+const Overview = (): ReactElement => (
+