Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecating isPressed in Button component #54740

Merged

Conversation

andrewhayward
Copy link
Contributor

@andrewhayward andrewhayward commented Sep 22, 2023

What?

This PR starts the deprecation of isPressed on the Button component, deferring to the native aria-pressed attribute instead. While it does not externally change the API, internally it converts isPressed into aria-pressed, such that using the latter is equivalent to the former. As such, aria-pressed can be used instead of isPressed should a consumer so desire.

Why?

When the isPressed prop is used on Button, aria-pressed is explicitly set accordingly. But sometimes Button is used for roles other than button, such as option and checkbox, where aria-pressed is not appropriate. Instead consumers should be able to decide for themselves the appropriate semantics.

How?

The isPressed prop is marked as deprecated, and transformed into aria-pressed. The value of aria-pressed is then used instead to determine how the component should be styled.

Testing Instructions

Unit tests have been added to confirm that the legacy isPressed behaviour continues, and that using aria-pressed directly behaves in the same way.

The only potential scope for issues is where a consumer has already set aria-pressed on a Button, but not isPressed, as this could affect the visual appearance due to the added is-pressed class.

@andrewhayward andrewhayward self-assigned this Sep 22, 2023
@andrewhayward andrewhayward added [Type] Enhancement A suggestion for improvement. [Package] Components /packages/components labels Sep 22, 2023
@andrewhayward andrewhayward added this to In progress (owned) ⏳ in WordPress Components via automation Sep 22, 2023
@andrewhayward
Copy link
Contributor Author

This change causes a big pile of tests to fail because of the new deprecation warning. Curious as to peoples thoughts about whether it's better to update the tests to expect the warning, or to just update the code to no longer use isPressed.

@github-actions
Copy link

github-actions bot commented Sep 22, 2023

Size Change: +586 B (0%)

Total Size: 1.62 MB

Filename Size Change
build/block-library/blocks/search/style-rtl.css 613 B +9 B (+1%)
build/block-library/blocks/search/style.css 613 B +9 B (+1%)
build/block-library/index.min.js 207 kB +199 B (0%)
build/block-library/style-rtl.css 14 kB +1 B (0%)
build/block-library/style.css 14 kB +1 B (0%)
build/components/index.min.js 248 kB +58 B (0%)
build/components/style-rtl.css 11.8 kB +28 B (0%)
build/components/style.css 11.8 kB +28 B (0%)
build/core-commands/index.min.js 2.71 kB +90 B (+3%)
build/edit-site/index.min.js 185 kB +158 B (0%)
build/keyboard-shortcuts/index.min.js 1.74 kB +5 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 461 B
build/block-directory/index.min.js 7.05 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.28 kB
build/block-editor/content.css 4.27 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/index.min.js 218 kB
build/block-editor/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 311 B
build/block-library/blocks/file/style.css 312 B
build/block-library/blocks/file/view.min.js 321 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.42 kB
build/block-library/blocks/image/style.css 1.41 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 1.83 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.01 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 314 B
build/block-library/blocks/post-template/style.css 314 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 375 B
build/block-library/blocks/query/style.css 372 B
build/block-library/blocks/query/view.min.js 609 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 471 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.45 kB
build/block-library/blocks/social-links/style.css 1.45 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 432 B
build/block-library/blocks/table/editor.css 432 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.2 kB
build/block-library/editor.css 12.2 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.5 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/compose/index.min.js 12.7 kB
build/core-data/index.min.js 70.5 kB
build/customize-widgets/index.min.js 12 kB
build/customize-widgets/style-rtl.css 1.51 kB
build/customize-widgets/style.css 1.5 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.87 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35.6 kB
build/edit-post/style-rtl.css 7.92 kB
build/edit-post/style.css 7.91 kB
build/edit-site/style-rtl.css 14 kB
build/edit-site/style.css 14 kB
build/edit-widgets/index.min.js 17 kB
build/edit-widgets/style-rtl.css 4.84 kB
build/edit-widgets/style.css 4.84 kB
build/editor/index.min.js 45.9 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.75 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/index.min.js 11.4 kB
build/is-shallow-equal/index.min.js 535 B
build/keycodes/index.min.js 1.9 kB
build/list-reusable-blocks/index.min.js 2.2 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 3.56 kB
build/patterns/style-rtl.css 325 B
build/patterns/style.css 325 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.25 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 972 B
build/react-i18n/index.min.js 624 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.72 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.2 kB
build/router/index.min.js 1.78 kB
build/server-side-render/index.min.js 1.95 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.84 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 968 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.17 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@github-actions
Copy link

Flaky tests detected in 704770c.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/6276716510
📝 Reported issues:

@tyxla
Copy link
Member

tyxla commented Sep 25, 2023

This change causes a big pile of tests to fail because of the new deprecation warning. Curious as to peoples thoughts about whether it's better to update the tests to expect the warning, or to just update the code to no longer use isPressed.

Ideally, we should update the code to no longer use the deprecated prop, otherwise, folks will see the warning in their consoles. If it's too much work for a single PR, sometimes we migrate the props to the recommended alternative and only then deprecate the legacy prop.

Copy link
Contributor

@chad1008 chad1008 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good and tests well for me. I see your point on the bug scope of consumers who've already added aria-pressed but not isPressed. After a quick search I don't see any cases of that in Gutenberg, so we're probably clear on that front at least internally, and can hope it's a minimal occurrence among third party consumers.

I think addressing the existing usages of isPressed as @tyxla suggested is the only real thing between this and a merge 👏 It looks like theres 30 ish of them to address, but they're not huge individual changes, so maybe a good fit for this PR? I'll defer to others if they disagree 😄

Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good!

I think that refactoring other components can happen in one (or more) follow-up PRs.

I would also add the `aria-pressed` control to Storybook for completeness
diff --git a/packages/components/src/button/stories/index.story.tsx b/packages/components/src/button/stories/index.story.tsx
index a1dadab081..61b4c32438 100644
--- a/packages/components/src/button/stories/index.story.tsx
+++ b/packages/components/src/button/stories/index.story.tsx
@@ -26,6 +26,10 @@ const meta: Meta< typeof Button > = {
 	component: Button,
 	argTypes: {
 		// Overrides a limitation of the docgen interpreting our TS types for this as required.
+		'aria-pressed': {
+			control: { type: 'select' },
+			options: [ undefined, 'true', 'false', 'mixed' ],
+		},
 		href: { type: { name: 'string', required: false } },
 		icon: {
 			control: { type: 'select' },

@@ -131,7 +143,10 @@ export function UnforwardedButton(
'is-small': size === 'small',
'is-compact': size === 'compact',
'is-tertiary': variant === 'tertiary',
'is-pressed': isPressed,

'is-pressed': ariaPressed && ariaPressed !== 'false',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we simplify this check?

Suggested change
'is-pressed': ariaPressed && ariaPressed !== 'false',
'is-pressed': ariaPressed !== 'false',

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem here is that ariaPressed has a boolean-ish value; it can either be true/"true", false/"false", "mixed" or undefined. So we can't just test for "false", because that would give false positives for false and undefined.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we wanted to be a bit more explicit, an alternative might be...

[true, "true", "mixed"].contains(ariaPressed)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That variety of value possibilities is a good case for adding some unit tests, by the way.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the explanation, @andrewhayward ! For which specific implementation to use, I'll leave it up to you to decide which one you think is the clearest to understand for other developers coming across this component.

That variety of value possibilities is a good case for adding some unit tests, by the way.

I guess we could add a bunch of extra tests checking for false, 'true' and 'false' values too

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a few extra tests, and altered the logic around this to be a bit more explicit about what is expected.

Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

Feel free to merge once remaining feedback is addressed. Thank you!

@@ -131,7 +143,10 @@ export function UnforwardedButton(
'is-small': size === 'small',
'is-compact': size === 'compact',
'is-tertiary': variant === 'tertiary',
'is-pressed': isPressed,

'is-pressed': ariaPressed && ariaPressed !== 'false',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the explanation, @andrewhayward ! For which specific implementation to use, I'll leave it up to you to decide which one you think is the clearest to understand for other developers coming across this component.

That variety of value possibilities is a good case for adding some unit tests, by the way.

I guess we could add a bunch of extra tests checking for false, 'true' and 'false' values too

@andrewhayward andrewhayward merged commit aa7cc4d into trunk Sep 27, 2023
51 checks passed
WordPress Components automation moved this from In progress (owned) ⏳ to Done 🎉 Sep 27, 2023
@andrewhayward andrewhayward deleted the enhancement/update-button-component-deprecate-ispressed branch September 27, 2023 11:55
@github-actions github-actions bot added this to the Gutenberg 16.8 milestone Sep 27, 2023
Comment on lines +311 to +312
&[aria-pressed="true"],
&[aria-pressed="mixed"] {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After seeing #55004, now I think about it, we could keep using the is-pressed class to assign those styles. Afterall, now the is-pressed class is assigned when truthyAriaPressedValues.includes( ariaPressed )

@ciampo ciampo added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Oct 12, 2023
@andrewhayward
Copy link
Contributor Author

andrewhayward commented Mar 4, 2024

Dev note

The isPressed prop on the Button component implicitly sets aria-pressed, with no way to override it. But sometimes Button is used for roles other than button, such as option and checkbox, where aria-pressed is not appropriate, and workarounds are required to add the correct semantics.

In an effort to move away from custom props that have native HTML equivalents, and to allow greater flexibility in component usage, aria-pressed is now supported as a first-class prop, taking precedence over isPressed.

jeherve added a commit to Automattic/jetpack that referenced this pull request Mar 11, 2024
The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740
jeherve added a commit to Automattic/jetpack that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version
matticbot pushed a commit to Automattic/jetpack-videopress that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-storybook that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-backup-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-videopress-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-starter-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/wpcom-migration that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-protect-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-boost-production that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-social-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-search-plugin that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
matticbot pushed a commit to Automattic/jetpack-production that referenced this pull request Apr 26, 2024
* Editor: remove deprecated isPressed prop in WP 6.5.

The isPressed prop is deprecated in WP 6.5, and replaced by the native aria-pressed attribute.

WordPress/gutenberg#54740

* Update version

* Bump version

Committed via a GitHub action: https://github.com/Automattic/jetpack/actions/runs/8847567798

Upstream-Ref: Automattic/jetpack@adace6c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Dev Note Requires a developer note for a major WordPress release cycle [Package] Components /packages/components [Type] Enhancement A suggestion for improvement.
Projects
Development

Successfully merging this pull request may close these issues.

None yet

4 participants