Skip to content

feat: CDS 9 release#706

Merged
cb-ekuersch merged 124 commits into
masterfrom
cds-v9-master
May 21, 2026
Merged

feat: CDS 9 release#706
cb-ekuersch merged 124 commits into
masterfrom
cds-v9-master

Conversation

@cb-ekuersch
Copy link
Copy Markdown
Contributor

@cb-ekuersch cb-ekuersch commented May 20, 2026

What changed? Why?

https://cds.coinbase.com/guides/v9-upgrade-guide

Root cause (required for bugfixes)

UI changes

iOS Old iOS New
old screenshot new screenshot
Android Old Android New
old screenshot new screenshot
Web Old Web New
old screenshot new screenshot

Testing

How has it been tested?

  • Unit tests
  • Interaction tests
  • Pseudo State tests
  • Manual - Web
  • Manual - Android (Emulator / Device)
  • Manual - iOS (Emulator / Device)

Testing instructions

Illustrations/Icons Checklist

Required if this PR changes files under packages/illustrations/** or packages/icons/**

  • verified visreg changes with Terran (include link to visreg run/approval)
  • all illustration/icons names have been reviewed by Dom and/or Terran

Change management

type=routine
risk=low
impact=sev5

automerge=false

cb-ekuersch and others added 30 commits January 26, 2026 17:24
* bump react and react-dom package versions
* update unsafe ref access when merging internal and customer refs
* upgrade storybook (storybook@latest upgrade)
* upgrade react eslint plugin and disable its new rules for now
* migrate CSF2 stories to CSF3 format (https://storybook.js.org/blog/storybook-csf3-is-here/)
* upgrade react testing library and replace outdated imports
* upgrade react-native & other Expo-managed dependencies
* introduce new test-expo app for mobile testing
* remove react-native accessibility engine and replace with our own fork compatible with our react native version
* remove deprecated @testing-library/jest-native and migrate tests away from react-test-renderer
* migrate toHaveAccessibilityState to granular matchers (toBeChecked, toBeSelected, toBeDisabled)
* update formatting of yarn constraint for matching dependency versions
* create new yarn constraint for enforcing matching peer and dev dependencies
* remove odd react-dom peer dep on common package
* remove unused peer desps of cds-mobile
* remove cds-mobile useStatusBarHeight and swtich to using safe area context insets (#376)
* setup manual mocks for react-native-worklets
* update versions referenced in mobile docs component metadata
* fix layout issues in tooltip and tour for android edge to edge display
* rewrite mobile stepper animation using reanimated (#387)
* chore: fix react version resolution issue
* Add isolated prop to web ThemeProvider and update managed Portal component

* Add documentation for PortalProvider setup

* Improve documentation around ThemeProvider

---------

Co-authored-by: Cody Nova <cody.nova@coinbase.com>
* feat: consolidate border props in Cell component

* fix: lint issues

* chore: address code review feedback

* feat: refactored useResolveResponsiveProp
…or mobile title Text (#401)

* feat: deprecated individual Text components

* feat: updated internal usage of individual text components

* fix: lint issue

* feat: updated deprecation comment for title componnents in mobile to prevent a11y regression

* feat: added default accessibilityRole for header in mobile

* feat: updated web doc for Text on a11y
* feat: added inverse variant and modified tertiary variant for Button

* feat: address code reivew by adjusting doc site wording and remvoe uncessary unit tests

* feat: removed foregroundMuted variant from Button

* feat: removed foregroundMuted variant in Button and IconButton

* feat: added runtime fallback to prevent crashing by the old variant

* feat: clean up examples and revised safety net

* feat: clean up remaining foregroundMuted

* feat: remove safety fallback for Button variants
* feat: shortened Pressable CSS variables

* chore: trigger CI rerun

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: remove interactable height constant and refactor several components to use content-based sizing instead of predetermined height

* chore: remove more fixed dimensions from components

* refactor InputStack to enable simpler spacing/layout in select/combobox components
* feat: simplify carousel pagination in v9

* feat: limit title line count

* Fix title on mobile
* feat: migrate Stepper from React Spring to Framer Motion

- Replace useSprings/SpringValue with numeric progress and cascade state
- Use Framer Motion (motion, animate, transition) in default progress, label, and header components
- Rename progressSpringConfig to progressTimingConfig; use CDS timing (tween, durations.slow2, curves.global)
- Add disableAnimateOnMount support to header and label

* fix

* fixes
* fix: Prevent `<TextInput type="number">` from changing value on scroll (#413)

* Web implementation

* Add web example

* Bump changelogs

* fix: set paddingStart on Input for compact label (#423)

* fix: set paddingStart on Input for compact label

* Bump version

* feat: enhance Tag component with icon support and custom nodes (#421)

* feat: enhance Tag component with icon support and custom nodes

- Added support for start and end icons in the Tag component.
- Introduced props for custom start and end nodes.
- Updated stories to demonstrate new icon and custom node functionality.
- Added tests to verify rendering of icons and custom nodes.

* changelog versions

* format

* gap and padding props

* feat: improve link docs (#428)

* feat: chart transitions (#400)

* feat: support customizing transition on web

* Fix enter for scrubber

* Wip mobile

* Simplify animation and fix issues

* Fix bar issues

* Support scrubber beacon label transitions

* Support stagger delay

* Update documentation

* Update docs

* Fix web transition

* Ruse transition types

* Move imports

* Simplify transition

* Fix lint

* Regenerate routes

* Rename functions and routes

* Fix lint

* Fix issue

* Cleanup comments

* Simplify transition names

* Simplify types

* Continue cleaning up types

* Fix lint

* Cleanup bar transition props

* Remove unused story

* Drop ChartTransition

* Simplify scrubber

* Improve accessories

* Fix animation issues with point

* Remove extra line

* Cleanup resolved transitions

* Cleanup isIdleTransition

* Cleanup exit transition

* Simplify logic

* Reuse transition for bar

* Cleanup bar chart

* Fix formatting

* Fix lint

* Fix lint

* Mock path generation

* Re add default border radius for bar

* Bump version

* Simplify code

* Update examples

* Update bar stagger delay logic

* Simplify transition logic

* Add more tests for transitions

* Improve examples

---------

Co-authored-by: Maximo Macchi <232606069+maximo-macchi-cb@users.noreply.github.com>
Co-authored-by: Hunter Copp <huntercolecopp@gmail.com>
Co-authored-by: Stephen Vergara <stephen.vergara@coinbase.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 20, 2026

cb-ekuersch and others added 2 commits May 21, 2026 12:44
* fix: forward style prop in IconButton when flush is not set

The pressableStyle memo was returning undefined instead of the style prop
when flush was falsy, silently dropping any custom styles (e.g. paddle
styles passed from TabbedChips via paddleStyle).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: prevent Button from stretching in flex containers

Add height: fit-content to Button's base CSS class so it sizes itself
to its content rather than stretching to fill its parent flex container.
Mirrors the same fix applied to IconButton in b48ec52.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: root style prop was not being spread correctly inside InputStack component

* fix: prevent mobile Button touch target from stretching in flex rows

Add alignSelf: flex-start to a new base style applied to NativePressable
so it doesn't stretch to fill the cross-axis of any flex container (e.g.
HStack). Previously the visual button (Interactable) was correctly sized,
but the transparent touch target extended to the full container height.
Applies to both inline and block buttons since width and cross-axis
alignment are independent concerns.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@cb-heimdall
Copy link
Copy Markdown
Collaborator

Review Error for adrienzheng-cb @ 2026-05-21 20:11:22 UTC
User cannot review their own commit

@adrienzheng-cb adrienzheng-cb self-requested a review May 21, 2026 20:27
@cb-heimdall
Copy link
Copy Markdown
Collaborator

Review Error for adrienzheng-cb @ 2026-05-21 20:27:36 UTC
User cannot review their own commit

@cb-heimdall
Copy link
Copy Markdown
Collaborator

Review Error for haoruikun-cb @ 2026-05-21 20:29:36 UTC
User cannot review their own commit

@cb-ekuersch cb-ekuersch merged commit fd656d2 into master May 21, 2026
52 of 54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment