Sync 2026/06/01 component updates (DES-40)
Pre-release · Type: ✨ Feature
DES-40: Sync the component updates from the 2026/06/01 design changelog. Tracked under a single issue, committed in batches by component.
Select / Dropdown / Date Picker / Modal overlay corner radius changed to Radius_12
Status: Done
Background:
The 2026/06/01 design update changes the overlay corner radius of Select / Dropdown / Date Picker / (Onboarding) Modals from Radius_5 to Radius_12. As verified in Figma, the change only applies to the overlay / popover panel container; triggers (Select Trigger, MultiSelect Trigger, Date Picker Trigger), Chips, menu items, close buttons, etc. still keep Radius_5.
Figma nodes involved: Select Menu 21120:1603, Dropdown Menu 21128:11039, Date Picker panel 21885:861, Modal 21235:6773 (both Default / Emphasized are 12), Onboarding Modal 18609:2556, all with cornerRadius 12.
Changed files:
src/components/Select/styles.ts(SELECT_CONTENT_TOKEN_CLASS)src/components/DropdownMenu/styles.ts(DROPDOWN_CONTENT_TOKEN_CLASS,DROPDOWN_SUB_CONTENT_TOKEN_CLASS)src/components/DatePicker/styles.ts(RANGE_PICKER_PANEL_CLASS)src/components/Calendar/styles.ts(CALENDAR_ROOT_VISUAL_CLASS, shared by the single-select Date Picker overlay + the standalone Calendar)src/components/ui/dialog.tsx(Dialog Content panel)- Corresponding tests:
Select.test.tsx,DropdownMenu.test.tsx,Calendar.test.tsx,RangePicker.test.tsx,Dialog.test.tsx - Corresponding specs:
SelectDesignSpec.md,DropdownMenuDesignSpec.md,DatePickerDesignSpec.md
Changes:
- The above overlay panel container corner radius
rounded-(--Radius_5)→rounded-(--Radius_12) - Select's searchable / MultiSelect dropdown panels reuse
SELECT_CONTENT_TOKEN_CLASS, automatically inheriting the new radius - The single-select Date Picker overlay is the Calendar root container (
CALENDAR_ROOT_VISUAL_CLASS), updated accordingly - Each component adds a
rounded-(--Radius_12)assertion to lock in this radius change
Added Ai Button component
Status: Done
Background:
The 2026/06/01 design adds AI Button (Figma component set 23496:9462). A pill-shaped AI entry button with an AI gradient stroke + a built-in gradient sparkle icon. Axes: Size (Medium / Small) × State (Default / Hover / Clicked) × Show Stroke (True / False).
Changed files:
src/components/AiButton/AiButton.tsx,styles.ts,AiSparkleIcon.tsx,index.ts,AiButton.test.tsx,AiButtonDesignSpec.mdsrc/components/index.ts(exportsAiButton/AiButtonProps/AiButtonSize)packages/design-site/src/theme/ReactLiveScope/index.tsx(live demo scope)packages/design-site/docs/components/atomic/ai-button.mdx+ zh-CN i18n
Changes:
- A standalone
AiButtoncomponent that does not reuse the Button variant system; exposessize(medium/small, default medium) andshowStroke(default true), passing the rest of the native button attributes through - AI gradient
#8F53ED → #00D0FF → #21EF6A: Show Stroke=True uses a dual-layerpadding-box / border-boxbackground to achieve a 2px gradient stroke (white inner background); Show Stroke=False is a plain white background - A built-in
AiSparkleIcon(multi-color gradient sparkle), implemented directly per CLAUDE.md 7.2 "component-internal non-contract visuals", with the gradient id usinguseIdto avoid multi-instance conflicts - Interaction shadows: Default AI cyan glow / Hover
--Effects-Shadow-Emphasized/ active--Effects-Shadow-Default - Sizes: Medium px-24/py-12 + Body(14)/leading-5; Small px-12/py-8 + Footnote(13/18); icon unified at 20×20
Alert (Toast) adds an AI Feedback variant
Status: Done
Background:
The 2026/06/01 design adds Style=AI Feedback to Alert (Figma component set 319:30904, implemented as Toast in this repo). Unlike Info/Success/Warning/Error's "16% variant-color mask + monochrome icon", AI Feedback is white background + 1px AI gradient stroke + multi-color gradient icon (icon_multicolor_ai).
Changed files:
src/components/Toast/toast-manager.ts(ToastTypeaddsaiFeedback)src/components/Toast/Toast.tsx(toast.aiFeedbackmethod + JSDoc)src/components/Toast/styles.ts(TOAST_VARIANT_CLASS/TOAST_ICON_COLOR_CLASSadd aiFeedback; new mask gradient stroke)src/components/Toast/ToastItem.tsx(renderIconadds an aiFeedback branch)src/components/Toast/ToastAiIcon.tsx(new multi-color gradient icon)src/components/Toast/Toast.test.tsx,Feedbacks/FeedbacksDesignSpec.mdpackages/design-site/docs/components/patterns/feedbacks-toast.mdx+ zh-CN i18n
Changes:
- Added
toast.aiFeedback(message, options?), reusing the two layouts of Message / Alert (with description) - The AI gradient stroke is implemented with a
beforepseudo-element +mask(content-box / border-box exclude) for a 1px gradient border, keeping the white background unchanged; the root node is itselfabsolute, sorelativeis not added to avoid overriding positioning - A built-in
ToastAiIcon(icon_multicolor_ai, 4-stop diagonal gradient), with the gradient id usinguseId; the icon does not apply a text color - The gradient direction matches the AiButton stroke (purple → cyan → green)
Breadcrumb collapsed item gains Hover / Select interaction
Status: Done
Background:
The 2026/06/01 design adds interaction to the Breadcrumb collapsed state: ... (Figma Style=Compressed, node 23859:25240) changes from static text into an interactive trigger that, on click / select, expands a dropdown (Figma Breadcrumb Dropdown Menu 23880:11610, Radius_12) listing the collapsed intermediate items.
Changed files:
src/components/Breadcrumb/Breadcrumb.tsx(getResolvedBreadcrumbItemscollects hiddenItems; newBreadcrumbEllipsisMenu)src/components/Breadcrumb/styles.ts(BREADCRUMB_ELLIPSIS_TRIGGER_CLASS/BREADCRUMB_DROPDOWN_LINK_CLASS)src/components/Breadcrumb/Breadcrumb.test.tsx,BreadcrumbDesignSpec.mdpackages/design-site/docs/components/atomic/breadcrumb.mdx+ zh-CN i18n
Changes:
- When there are more than 4 levels, the collapsed placeholder
...becomes a DropdownMenu trigger; reuses the designDropdownMenu(Radius_12 + unified item hover), not rebuilding the overlay - Trigger has three states: Default / Hover / Selected(open); hover and
data-[state=open]show a gray background + darkened text - The dropdown lists the collapsed intermediate items (
items.slice(2, n-2)), each a link (icon + text, carrying href), with progressive per-level indentation (level 0 at 0, then starting at 8px, +16px per level, aligning with Figma Spacer 0/8/24/40) - The indentation uses inline style (dynamic Tailwind classes cannot be scanned by the compiler)
- The composable
BreadcrumbEllipsis(static...) is kept as public API, unaffected
Menu aligned to the 4.0 Main Menu master component
Status: Done
Background:
The 2026/06/01 design replaced the Main Menu master component and updated it to the 4.0 style (new master component 22535:4613, the old generic Menu 4746:125765 deleted, the old Main Menu 1449:72679 deprecated). The new Main Menu still reuses the existing _Menu Item Base component set 229:33384.
After verification, design's Menu / MenuItem base primitives already align with the 4.0 Menu Item Base in spacing (px-8/py-8/gap-8), corner radius (Radius_5), color (Labels-Secondary / Tertiary, hover bg Grays-Gray-1 #EBEBEB), and height (40px). The only style difference is the body line height: 4.0 is 14/20, the old implementation was 14/22.
Main Menu, as a business-level composition (Logo, user info, Plan info, Sections, etc.), is not included in
@plaud/design; it is assembled at the application layer (web4). This repo only maintains the Menu primitives it reuses. The Sections group heading styles (List Heading/Subheading) are a separate change, out of scope here.
Changed files:
src/components/Menu/styles.ts(MENU_ITEM_CONTENT_CLASSline heightleading-(--Line-Height-Body)→leading-5; comments updated)src/components/Menu/Menu.tsx,MenuDesignSpec.md(Figma master component node references updated to 4.0)
Changes:
- Menu Item body line height aligned to 4.0 (14/20,
leading-5, consistent with AiButton medium); since the item is constrained bymin-h-40, there is no visual regression - Updated Menu's Figma source node references: the main node points to the 4.0 Main Menu
22535:4613, annotating that the old nodes are deleted / deprecated - The spec line height and node list are synced to 4.0
Follow-up fixes (review feedback)
Status: Done
Two fixes after DevTools verification + reviewer feedback, covering the initial implementations of the AiButton / Toast AI Feedback items above:
- Gradient stroke rendering fix: the initial version used Tailwind arbitrary values to express the layered background / mask (
[background:...padding-box,linear-gradient...border-box],before:[-webkit-mask:...content-box,...]). Tailwind v4 cannot compile arbitrary values containing a top-level comma (no CSS is generated; DevTools confirmed the computed value was none / the border did not show). Switched to inline style:- AiButton:
AI_BUTTON_STROKE_STYLE(applied whenshowStroke) - Toast AI Feedback:
TOAST_AI_BORDER_STYLE(applied byToastItemwhentype==='aiFeedback', 1px border) - Commas inside parentheses (such as
rgba()shadows) are unaffected.
- AiButton:
- AI icons changed to contract injection: removed the component-internal self-drawn
AiSparkleIcon.tsx/ToastAiIcon.tsx, switching to the icon contract — added keysaskAi(icon_multicolor_ask_ai) andaiFeedback(icon_multicolor_ai), injected by the consumer like all other icons; design does not bundle any AI icon SVG.- Changed files:
src/Icons/contract.ts,src/Icons/index.tsx(AskAiIcon/AiFeedbackIconwrappers),src/test/test-icon-registry.tsx(stub),AiButton.tsx/Toast/ToastItem.tsx(switched to injected icons); reference injection implementations: design-siteplaud-icon-registry.tsx, web4designIconRegistry.tsx(reusing the existingicon_multicolor_ask_ai.svg/icon_multicolor_ai.svgassets). - Contract keys grew from 29 to 31.
- Changed files: