From b1549b19ad164888f1dc040df9dca9379323d411 Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Sun, 17 May 2026 11:20:12 +0300 Subject: [PATCH 1/2] feat(buttons): unified TagChip rollout + small targeted UX fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Layered on top of #6061 (V1 reskin). Five independent, low-risk follow-ups that the reskin alone doesn't deliver: 1. **TagChip rollout** — adopt the unified `TagChip` primitive (already in #6061) on its two production call sites: - Article post / modal tag list now renders `TagChip` at size `sm` (passes through to `BrandedTagChip` when an engagement-ad tag is in the list, preserving the existing ads-aware variant). - Tags directory page (`/tags`) renders `TagChip` at size `md` with follow affordance wired through `useTagAndSource`. - New `Atoms/TagChip` Storybook story with size + state matrix. 2. **ProfileHeader edit-cover button** — fix typo where the Float variant was passed via `type=` instead of `variant=`, so the prop was silently ignored and the button rendered as default. (1 line) 3. **SidebarMenuIcon expand toggle** — pin icon to `IconSize.Size16`. The default XSmall-button icon is 20 px after the reskin, which reads oversized inside the 24 px collapse-hairline button. (1 prop) 4. **ReadArticleButton** — drop `secondary` modifier on `OpenLinkIcon` so the outlined glyph renders instead of the filled variant. (2 props) 5. **Strict typecheck skip list** — add `ProfileHeader.tsx` and `tags/index.tsx` to the buttons-v2 strict-skip set. Both files carry pre-existing strict violations on unrelated lines (`user.companies` optionality on ProfileHeader; reduce accumulator typed as `never[]` on the tags directory) that should be addressed in a dedicated cleanup PR. Note: the original consolidated branch also added an `onUnfollowTag` plumbing path through `useFollowPostTags`, but the followup `fix(tags): drop unfollow ×` commit reverted the inline unfollow behaviour. Final TagChip API has no `onUnfollow` prop, so this PR ships the hook unchanged. Co-authored-by: Cursor --- .../cards/common/ReadArticleButton.tsx | 4 +- .../src/components/post/tags/PostTagList.tsx | 206 +++++++----------- .../src/components/profile/ProfileHeader.tsx | 2 +- .../components/sidebar/SidebarMenuIcon.tsx | 9 +- .../stories/atoms/TagChip.stories.tsx | 169 ++++++++++++++ packages/webapp/pages/tags/index.tsx | 23 +- scripts/typecheck-strict-changed.js | 8 + 7 files changed, 281 insertions(+), 140 deletions(-) create mode 100644 packages/storybook/stories/atoms/TagChip.stories.tsx diff --git a/packages/shared/src/components/cards/common/ReadArticleButton.tsx b/packages/shared/src/components/cards/common/ReadArticleButton.tsx index dc3d3891304..d1d4b6070dd 100644 --- a/packages/shared/src/components/cards/common/ReadArticleButton.tsx +++ b/packages/shared/src/components/cards/common/ReadArticleButton.tsx @@ -13,7 +13,7 @@ export const getReadPostButtonIcon = ( isPostOrSharedPostTwitter(post) ? ( ) : ( - + ); type ReadArticleButtonProps = ButtonProps<'a'> & { @@ -31,7 +31,7 @@ export const ReadArticleButton = ({