-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
Button: Introduce size
prop
#51842
Button: Introduce size
prop
#51842
Conversation
Also fixes type duplicate prop name issues in NumberControl and FontSizePicker
Size Change: +3.05 kB (0%) Total Size: 1.44 MB
ℹ️ View Unchanged
|
@@ -74,8 +65,13 @@ type BaseButtonProps = { | |||
* Renders a pressed button style. | |||
*/ | |||
isPressed?: boolean; | |||
// TODO: Deprecate officially (add console warning and move to DeprecatedButtonProps). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can only be done after all the usages in the Gutenberg app are migrated.
&&& { | ||
height: ${ ( props ) => | ||
props.size === '__unstable-large' ? '40px' : '30px' }; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure when it regressed, but these height overrides weren't currently working. The reset button was rendered as 24px no matter what.
In this PR, I went ahead and simplified it a bit so that the reset button is 40px in the __unstable-large
case, and 24px otherwise. This should be ok because we'll be phasing out the non-large variants anyway.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good. I wonder if compact
would be a better fallback than small
here, though? Although it doesn't seem to matter much, since we're phasing it out anyway, as you mentioned
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I definitely considered it, but a 2px difference between the text field and the button would irritate a designer more than a 6px difference would 😆
@@ -244,7 +244,7 @@ function UnforwardedNumberControl( | |||
onClick={ buildSpinButtonClickHandler( | |||
'up' | |||
) } | |||
size={ size } | |||
spinButtonSize={ size } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Renamed to avoid prop name collision (no visual changes).
- `'default'`: For normal text-label buttons, unless it is a toggle button. | ||
- `'compact'`: For toggle buttons and icon buttons. | ||
- `'small'`: For icon buttons associated with more advanced or auxiliary features. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jasmussen Do these guidelines look ok?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This part of the sheet visually explains the difference between 40 and 32:
Specifically, 40px is the default to use.
32px, and compact is a good word for it, is the one to use in certain situations, notably in the case of mixing toggle buttons with buttons.
So, we could tweak "compact":
'compact'
: For toggle buttons, icon buttons, and buttons when used in context of either.
What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, this seems like a good pragmatic solution. I think there's value to all three when building out an interface, even though it would be nice to have been able to settle for two sizes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Apart from unit tests failures, I left a couple of comments, but nothing blocking — LGTM 🚀
Also, should we remove the isSmall
prop from the README and Storybook, or should that be done once the prop is officially deprecated?
* - `'compact'`: For toggle buttons and icon buttons. | ||
* - `'small'`: For icon buttons associated with more advanced or auxiliary features. | ||
* | ||
* @default 'default' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should probably add a note about the size
prop having priority over the isSmall
prop, when defined. That should probably be added to the description of both props.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes! d03ba97
@@ -402,6 +402,11 @@ describe( 'Button', () => { | |||
); | |||
expect( console ).toHaveWarned(); | |||
} ); | |||
|
|||
it( 'should not break when the legacy isSmall prop is passed', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we also add a test about the interaction between isSmall
and size
, to make sure that they behave as expected in terms of which prop has priority?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea 9ec488a
&&& { | ||
height: ${ ( props ) => | ||
props.size === '__unstable-large' ? '40px' : '30px' }; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good. I wonder if compact
would be a better fallback than small
here, though? Although it doesn't seem to matter much, since we're phasing it out anyway, as you mentioned
Thank you for the reviews! ✅ I fixed the issue that was causing the unit test failures 590964c
I guess we should keep it around until the official deprecation, since it's still very widely used 👍 |
* Revert "Button: Add opt-in prop for larger `isSmall` size (#51012)" This reverts commit 19bcabf. # Conflicts: # packages/components/CHANGELOG.md * Add docs for `size` prop Also fixes type duplicate prop name issues in NumberControl and FontSizePicker * Add CSS * Fixup * Add TODO for deprecation * Add test for back compat * Fixup * Add changelog * Tweak description for "compact" * Note that the `size` prop takes precedence * Add test for prop priority * Stop leaking `spinButtonSize` prop for styling
I just cherry-picked this PR to the release/16.1 branch to get it included in the next release: a7c4b8f |
* Site Editor: Disable the revision button if there is no clickable menu (#51851) * Improve LinkControl Edit UI (#51712) * Move text above link * Change "URL" label to "Link" * Style tweaks * Add chevron based advanced settings button * Adapt logic for rendering actions and settings * Tweaks * Add proper i18n Co-authored-by: Ben Dwyer <[email protected]> * Remove commented out style Co-authored-by: Ben Dwyer <[email protected]> * Use $button-size-next-default-40px * Add showSettings, combine with new logic * Add additional translation context to advanced * Update toggle drawer name in tests * Standardise query for settings toggle * Update test to check for absence of cancel button during link creation * Fix cancellation tests * Ensure label is always “Link” but remains hidden when it’s the only visible control * Update tests to look for “Link” instead of “URL” name for input * Update empty value UI tests to only run for editing as opposed to creating links * Fix e2e test tabbing order * Use updated terms * Select settings toggle by text not aria label * Fix another tabbing order bug * Fix one more tabbing issue in e2e tests * Fix final tab ordering e2e test * Decouple conditions for showing action buttons from settings Settings may not be provided but action buttons are always needed * Tweak styling to account for action buttons when there are no settings provided * Fix test * Fix e2e test * Update name of the combobox * Fix test expecting Submit button on creation * Fix test by testing under edit rather than creation conditions * Rename URL to Link and avoid triggering command centre * move test earlier --------- Co-authored-by: Ben Dwyer <[email protected]> Co-authored-by: Dave Smith <[email protected]> * Update colors (#51856) * Library: Fix misalignment of description in custom template parts (#51868) * Backport adding the distraction free mode to the site editor (#51173) (#51932) * Fix toolbar overlap in site editor (#51810) * expand fixed toolbar to cover document title control * adds the z-index code back * Page Content Focus: Switch to Page panel when deselecting a block (#51881) * Don't show 'Back to page' notification when navigating away from page (#51880) * Add top margin to page details (#51858) * Keep framer-motion from updating minor version (#51894) * Keep framer-motion from updating minor version * Revert unnecessary package-lock changes * useBlockSync(): Reset inner blocks when component unmounts (#51783) * BlockLockModal: restore focus on fallback toolbar button when original button is not rendered (#51666) * useFocusReturn: pass focus restoration default target to the onFocusReturn callback * Modal: pass onFocusReturn callback * BlockLockModal: restore focus to first focusable item when unlocking block from toolbar button * Add comments * Revert changes to `useFocusReturn` and `Modal` component, just add logic to the BlockLockToolbar instead * Comment * Fix missing MenuGroup in header more menu (#51860) * Add `manage all custom patterns` command (#51845) * Add manage all custom patterns command * reorganise with useAdminNavigationCommands * Command center: Add another batch of commands to the site editor (#51832) Co-authored-by: Nik Tsekouras <[email protected]> * Fix delete shortcut incorrectly bound to non-user patterns (#51830) * `ConfirmDialog`: Fix affirmative action being triggered an extra time when selecting a button via keyboard (#51730) * Ensure the confirm dialog cannnot be submitted using enter when the cancel button is focused * Add test case * Add CHANGELOG entry * Add PR number to changelog * Also prevent double submission of Confirm button * Use actions in storybook example rather than outputting to a heading * Ensure there is always a Navigation available in the browse mode sidebar via fallback algorithm (#50321) * Normalize menu used in sidebar with fallback algorithm * Make fallback retrieval invalidate query cache for Navigation entities * Conditionally trigger fallback creation if no menus are found * Make code self documenting * Add image block aspect ratio control (#51545) * Simplify ImageSizeControl by using Auto as a placeholder * Rename imageWidth and imageHeight props to naturalWidth and naturalHeight * Convert NumberControl onChange values to Numbers * Simplify LatestPostsEdit to use updated ImageSizeControl * Add JSDoc types for debugging * Remove unnecessary noop * Fix possible undefined values in NumberControl onChange * Fix onChangeImage param type which may be undefined * Rename OnChange callback prop * Inline JSDoc props instead of new object * Simplify handing undefined and NaN in onChange * Revert prop name change since this isn't a private API * Add a privateApis export for experimental ImageSizeControl * Use the privateApis version of ImageSizeControl * Add deprecation notice to the original component * Revert image-size-control and create image-dimensions-control instead * Re-add deprecation notice to image-size-control * Try making a whole new component * Revert changes to image, latest-posts, and media-text blocks * Organize and update the dimensions tool panel item * Reword size help text * Reorganize into reusable components * Add stories for other individual tools * Update stories path * Remove SelectControl __next prop * Pass through isShownByDefault to ResolutionTool * Remove unused scss * Deprecate experimental ImageSizeControl * Simplify ScaleTool onChange * Add better defaults for value and onChange * Fix circular dependency * Update comment about auto and custom aspect ratios * Add JSDoc types for ScaleTool * Add JSDoc types for WidthHeightTool * Add default value and onChange for WidthHeightTool * Remove unused import * Add aspectRatio to image block attributes * Add scale to image block attributes * Update JSDoc comment * Add dimensions tool to image block * Rename naturalAspectRatio for clarity * Fix aspect-ratio-tool lint * Fix scale-tool lint * Fix width-height-tool lint * Fix dimensions-tool lint * Fix resolution-tool lint * Add @emption/styled to block-editor * Fix image block lint * Update components changelog * Fix AspectRatioTool reference * Support 'auto' in width-height-tool * Make null/undefined values mean 'auto' instead of defaultValue in aspectRatioTool * Add deprecation for image block * Fix ResizableBox interactions * Add comments for default values * Fix ResizableBox with auto w/h * Clear aspect-ratio on resize * Add TODO comment for ResolutionTool defaultValue * Move the scale hide/show into dimensions controls * Add first test * Fix scale being set after it was deleted * WIP writing tests * Update test * UI tweaks * Move alt text as ToolsPanelItem * Tweak default scale option help text * Only use contain and cover for image scale options * Update test * Test the remaining callback values * Add comment about toStrictEqual * Add test for setting custom aspect ratio and then resetting * Move custom scaleOptions to the image block * Remember last aspect ratio so it can be restored when with/height are unset then set * Remove unused import * Format code * Remove image w/h reset when a new image is added * Use UnitControl's default units instead of spacing.units * Provide the complete set of object-fit options by default * Update TODO that will be committed * Clean up evalAspectRatio and add docs * Someone can file a bug report if offsetWidth/offsetHeight causes issues * I couldn't figure out why height depended on having a custom border, but things seem to work without that * Update docs for image block * Update comment about default value * Fix redundant wording * I think the img width and height attributes can be removed if they're specified in the style attribute * Update package-lock.json with @emotion/styled dependency * Update mock calls for test example * Simplify test values * Consolidate mock calls expect * Require defaultScale and defaultAspectRatio for DimensionsTool * Add DimensionsTool tests for all custom transitions * Remove comment about matching aspect ratio options * Remove redundant check in tests * Add comments to defaultAspectRatio and defaultScale * Organize tests by which field is being updated * Fix type conversion * Add state diagram for last two tests * Refactor and fix some tests * Fix and simplify WidthHeightTool onChange * Remove default scale option in image block.json * Simplify DimensionsTool onChange logic * Update block deprecations with width and height * Revert image block width and height attributes to numbers since we only support px units for now * Revert "Update block deprecations with width and height" This reverts commit 941a81149ed4bc344ac2c0e183624069e33d75ad. * Prevent NaN width/height * Fix DimensionTool width/height units * Fix JSDoc Dimenstions width/height types * No default needed for ResolutionTool * Fix drag handle aspect ratio reset * Simplify null checks * Stop using pxWidth and pxHeight * Remove e2e tests that reference the scale button that was removed * Fix image scaling for small images * Try fixing aspectRatio only images * Update test to respect the new aspect ratio behavior --------- Co-authored-by: Alex Lende <[email protected]> Co-authored-by: Rich Tabor <[email protected]> Co-authored-by: Jerry Jones <[email protected]> * Site Editor: Make string to add Template parts & Patterns consistent and translatable (#51743) * Site Editor: Make Template Parts & Patterns Management dropdown translatable * Make strings consistent * Site Editor Sidebar: improvements to buttons (#51762) * Do not show tooltip from all "back" buttons * Avoid double button rendering in the patterns screen * Use as prop instead of classname * Add translation to strings * Fix more icons for high resolution devices (#51768) * Site tagline icon * Update align-none.js * Update position-left.js * Update position-right.js * Update position-center.js * Update button.js * Update buttons.js * Update media-and-text.js * Update spacer block icon * Update separator.js * Update stretch-full-width.js * Update stretch-wide.js * Update resize-corner-n-e.js * Update justify-center.js * Update align-left.js * Update align-center.js * Update align-right.js * Update snapshots * Hide block toolbar using CSS when it is empty (#51779) * Update the add template modal design (#51806) * Add icons * alignment * Custom descriptions * justify content * Style custom template button * Remove min-height * Don't display description when there isn't one * Reduce space between template + description * Style icon * Style custom template * increase button size * Add prompt * Update template icons * Make year dynamic * Remove short descriptions * Revert "Remove short descriptions" This reverts commit 7eb06e8ab845b9cda3975989456614df5b221c29. * re-instate descriptions but only show as a tooltip * simplify a bit --------- Co-authored-by: ntsekouras <[email protected]> * Buttons Block: Fix for orientation-based block movers (#51831) * Button: Introduce `size` prop (#51842) * Revert "Button: Add opt-in prop for larger `isSmall` size (#51012)" This reverts commit 19bcabf. # Conflicts: # packages/components/CHANGELOG.md * Add docs for `size` prop Also fixes type duplicate prop name issues in NumberControl and FontSizePicker * Add CSS * Fixup * Add TODO for deprecation * Add test for back compat * Fixup * Add changelog * Tweak description for "compact" * Note that the `size` prop takes precedence * Add test for prop priority * Stop leaking `spinButtonSize` prop for styling * Color (#51847) * Only show Page Content Focus commands when in edit mode (#51888) * Add UI commands to the post editor (#51900) Co-authored-by: ntsekouras <[email protected]> * ZStack: fix component bounding box to match children (#51836) * ZStack: rewrite using CSS grid * Use first-of-type instead of fist-child * CHANGELOG * Improve comment * Apply styles once in the parent wrapper * Avoid each child view from expanding to all available space * Remove unnecessary wrapeprs in storybook exmaple * Add view patterns plural label. (#51850) * Fix css styles in block.jsons. (#51866) * Update active item appearance in Library (#51848) * Color * Use aria-current * Fix Rename in Navigation on Browse Mode (#51791) * Ensure edits are passed to save * Ensure empty strings are invalid * Force break of long strings in menu titles * Fix ability to click through to Template Parts in Library (#51838) * ItemGroup: Update button focus styles to use `:focus-visible` (#51787) * Use focus-visible rather than focus on ItemGroup buttons * Update snapshot * Update Changelog * Update package-lock --------- Co-authored-by: Aki Hamano <[email protected]> Co-authored-by: Rich Tabor <[email protected]> Co-authored-by: Ben Dwyer <[email protected]> Co-authored-by: Dave Smith <[email protected]> Co-authored-by: James Koster <[email protected]> Co-authored-by: Héctor <[email protected]> Co-authored-by: Andrei Draganescu <[email protected]> Co-authored-by: Robert Anderson <[email protected]> Co-authored-by: Marco Ciampini <[email protected]> Co-authored-by: Nik Tsekouras <[email protected]> Co-authored-by: Riad Benguella <[email protected]> Co-authored-by: Daniel Richards <[email protected]> Co-authored-by: Alex Lende <[email protected]> Co-authored-by: Alex Lende <[email protected]> Co-authored-by: Jerry Jones <[email protected]> Co-authored-by: Lena Morita <[email protected]> Co-authored-by: Andrea Fercia <[email protected]> Co-authored-by: Jonny Harris <[email protected]> Co-authored-by: Sarah Norris <[email protected]>
* Revert "Button: Add opt-in prop for larger `isSmall` size (WordPress#51012)" This reverts commit 19bcabf. # Conflicts: # packages/components/CHANGELOG.md * Add docs for `size` prop Also fixes type duplicate prop name issues in NumberControl and FontSizePicker * Add CSS * Fixup * Add TODO for deprecation * Add test for back compat * Fixup * Add changelog * Tweak description for "compact" * Note that the `size` prop takes precedence * Add test for prop priority * Stop leaking `spinButtonSize` prop for styling
Closes #51708
Part of #46741
What?
Introduces a new
size
prop to theButton
component where:small
= 24pxcompact
= 32pxdefault
= 40px when__next40pxDefaultSize = true
, otherwise 36pxWhy?
After some investigation and discussion in #51708, it became clear that Button still needs three size variants, at least for the time being.
How?
isSmall
size #51012 (basically retracts the__next32pxSmallSize
prop that I added there)Testing Instructions
npm run storybook:dev
size
variants in theButton
story. The__next40pxDefaultSize
prop should only affect thesize = 'default'
case. TheisSmall
prop should still work.Screenshots or screencast
Default
Default with
__next40pxDefaultSize
Compact
Small