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

FontSizePicker: add pickerMode #63040

Closed
wants to merge 12 commits into from
Closed

FontSizePicker: add pickerMode #63040

wants to merge 12 commits into from

Conversation

ciampo
Copy link
Contributor

@ciampo ciampo commented Jul 2, 2024

What?

Following this conversation, this PR introduces a new pickerMode prop that is meant to supersede the existing disableCustomFontSizes prop (which gets marked as deprecated).

Why?

With the disableCustomFontSizes prop, consumers of the component can choose to prevent users to enter custom font size values, forcing them to pick from the list of predefined font sizes.

But there isn't a way to achieve the opposite — ie. allow users to only pick from a list of custom values, without being able to choose from a list of predef options.

The pickerMode prop is a enum of different modes:

  • both maps to disableCustomFontSizes = false
  • predefined maps to disableCustomFontSizes = true
  • custom introduces the missing mode discussed above.

How?

I refactored the code and extracted some logic away from the render function, to bring more clarity to it.

Together with the pickerMode prop, I also introduced the idea of pickerType (see this comment).

I also refactored tests and usages in Gutenberg to already use the new pickerMode prop.

TODO:

  • unit tests
  • add documentation about the consumer being responsible for any validation to prevent weird UI states when custom values are used with pickerMode="predefined"

Testing Instructions

Note: I recommend enabling the "Hide whitespace changes" options when reviewing the code changes in this PR.

TBD

Testing Instructions for Keyboard

Screenshots or screencast

Comment on lines -51 to -57
### `disableCustomFontSizes`: `boolean`

If `true`, it will not be possible to choose a custom fontSize. The user will be forced to pick one of the pre-defined sizes passed in fontSizes.

- Required: no
- Default: `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.

Moved to bottom of the list of props

@@ -59,7 +59,7 @@ const FontSizePickerSelect = ( props: FontSizePickerSelectProps ) => {
__experimentalHint: hint,
};
} ),
...( disableCustomFontSizes ? [] : [ CUSTOM_OPTION ] ),
...( pickerMode === 'both' ? [ CUSTOM_OPTION ] : [] ),
Copy link
Contributor Author

@ciampo ciampo Jul 2, 2024

Choose a reason for hiding this comment

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

For now, I opted to show the "custom" option only the picker mode is both — which means that, if the mode is predefined and there is a custom value, neither the toggle group nor the select dropdown have a way to visually show that.

I thought about showing the "custom" option in the select dropdown, but then I don't really know what do if the user selects it — normally, it would switch the picker type to custom, but if the picker mode is predefined, that is not an option.

Also, in case there are less than 5 predef font sizes, the UI would show a toggle group, where there is no visual indication that the user picked a custom value. In this edge case, I thought of two solutions:

  1. add a "custom" toggle item (like we add a "custom" dropdown option to the select dropdown). The option could be "read-only", meaning that as soon as the user picks a predef value, the option would go away. This is the current behavior when showing the select dropdown.
  2. show the select dropdown even if there are fewer font size in order to enjoy the "custom" option behavior that is already there.

Copy link
Member

Choose a reason for hiding this comment

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

For now I think it's ok to maintain the current behavior of what happens with value={ /* some custom value */ } and disableCustomFontSizes={ true }.

So, as observed on trunk, that would be:

  • When predefs are a toggle group — Looks like no value is selected
  • When predefs are a dropdown — "Custom" option

We'll just be clear in the docs that the consumer is responsible for any validation to prevent this state.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That should the behavior already implemented in this PR.

One difference I could spot, though. On trunk:

  • Render the default example
  • Switch to custom UI and input a custom value
  • Using Storybook controls, set disableCustomFontSizes to true
  • No UI renders!

In this PR:

  • Render the default example
  • Switch to custom UI and input a custom value
  • Using Storybook controls, set pickerMode to predefined
  • Un-selected toggle group control renders

I think this PR's behavior is better.

In any case, if we want to move forward with this approach, I can add more unit tests to "document" the expected behavior better.

@@ -23,6 +23,7 @@ const DEFAULT_FONT_SIZE = 16;

function FontSizePicker( {
fontSizes = [],
// Can this be kept as-is?
Copy link
Contributor Author

@ciampo ciampo Jul 2, 2024

Choose a reason for hiding this comment

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

@WordPress/native-mobile @dcalhoun this is still a WIP, but I wanted to check with you about the best thing to do here in case we move forward — we're basically considering deprecating the disableCustomFontSizes prop in favor of a pickerMode prop in the web version.

Copy link
Member

@dcalhoun dcalhoun Jul 5, 2024

Choose a reason for hiding this comment

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

Thanks for your patience while I found time to respond. 🙇🏻 I'm catching up on this project after being absent for a few months.

From reviewing the UI, current implementation, and proposed changes, it seems like we could likely apply the proposed changes to the native mobile editor as well. I do not perceive a specific blocker for doing so.

I quickly tested the proposed changes on a Samsung Galaxy S20 and encountered an unexpected custom field and an editor crash when:

  1. Open a Paragraph block settings.
  2. Tap "Font size."
  3. Select a predetermined option.
  4. Place cursor in the custom field input.
  5. Press the backspace key multiple times to clear the input, then press it once more.
Font size picker crash
 ERROR  TypeError: Cannot read property 'toString' of undefined

This error is located at:
    in RangeTextInput (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(RangeTextInput) (at stepper-cell/index.native.js:239)
    in RCTView (created by View)
    in View (at stepper.android.js:38)
    in Stepper (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(Stepper) (at stepper-cell/index.native.js:223)
    in RCTView (created by View)
    in View (at stepper-cell/index.native.js:221)
    in RCTView (created by View)
    in View (at cell.native.js:438)
    in RCTView (created by View)
    in View (at cell.native.js:365)
    in RCTView (created by View)
    in View (at ripple.native.js:63)
    in TouchableNativeFeedback (at ripple.native.js:53)
    in TouchableRipple (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(TouchableRipple) (at cell.native.js:343)
    in BottomSheetCell (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(BottomSheetCell) (at stepper-cell/index.native.js:203)
    in RCTView (created by View)
    in View (at stepper-cell/index.native.js:202)
    in RCTView (created by View)
    in View (at stepper-cell/index.native.js:176)
    in BottomSheetStepperCell (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(BottomSheetStepperCell) (at unit-control/index.native.js:165)
    in UnitControl (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(UnitControl) (at font-size-picker/index.native.js:167)
    in RCTView (created by View)
    in View (at font-size-picker/index.native.js:110)
    in RCTView (created by View)
    in View (at sub-sheet/index.native.js:40)
    in SlotComponent (at slot.tsx:108)
    in Slot (at slot-fill/index.native.js:11)
    in Slot (at slot-fill/index.native.js:18)
    in BottomSheetSubSheetSlot (at container.native.js:60)
    in RCTView (created by View)
    in View (at navigation-screen.native.js:115)
    in RCTView (created by View)
    in View (created by TouchableHighlight)
    in TouchableHighlight (created by TouchableHighlight)
    in TouchableHighlight (at navigation-screen.native.js:114)
    in RCTView (created by View)
    in View (created by ScrollView)
    in RCTScrollView (created by ScrollView)
    in ScrollView (created by ScrollView)
    in ScrollView (at navigation-screen.native.js:113)
    in BottomSheetNavigationScreen (at container.native.js:57)
    in StaticContainer
    in EnsureSingleNavigator (created by SceneView)
    in SceneView (created by CardContainer)
    in RCTView (created by View)
    in View (created by CardContainer)
    in RCTView (created by View)
    in View (created by CardContainer)
    in RCTView (created by View)
    in View
    in CardSheet (created by Card)
    in RCTView (created by View)
    in View
    in Unknown (created by PanGestureHandler)
    in PanGestureHandler (created by PanGestureHandler)
    in PanGestureHandler (created by Card)
    in RCTView (created by View)
    in View
    in Unknown (created by Card)
    in RCTView (created by View)
    in View (created by Card)
    in Card (created by CardContainer)
    in CardContainer (created by CardStack)
    in RCTView (created by View)
    in View
    in Unknown (created by InnerScreen)
    in InnerScreen (created by Screen)
    in Screen (created by MaybeScreen)
    in MaybeScreen (created by CardStack)
    in RCTView (created by View)
    in View (created by ScreenContainer)
    in ScreenContainer (created by MaybeScreenContainer)
    in MaybeScreenContainer (created by CardStack)
    in RCTView (created by View)
    in View (created by Background)
    in Background (created by CardStack)
    in CardStack (created by HeaderShownContext)
    in RCTView (created by View)
    in View (created by SafeAreaInsetsContext)
    in SafeAreaProviderCompat (created by StackView)
    in RNGestureHandlerRootView (created by GestureHandlerRootView)
    in GestureHandlerRootView (created by StackView)
    in StackView (created by StackNavigator)
    in PreventRemoveProvider (created by NavigationContent)
    in NavigationContent
    in Unknown (created by StackNavigator)
    in StackNavigator (at navigation-container.native.js:163)
    in EnsureSingleNavigator
    in BaseNavigationContainer
    in ThemeProvider
    in NavigationContainerInner (at navigation-container.native.js:162)
    in RCTView (created by View)
    in View (created by AnimatedComponent(View))
    in AnimatedComponent(View)
    in Unknown (at navigation-container.native.js:154)
    in BottomSheetNavigationContainer (at container.native.js:48)
    in RCTView (created by View)
    in View (at bottom-sheet/index.native.js:574)
    in RCTView (created by View)
    in View (at keyboard-avoiding-view.native.js:113)
    in KeyboardAvoidingView (at bottom-sheet/index.native.js:547)
    in RCTView (created by View)
    in View
    in Unknown (created by withAnimatable(View))
    in withAnimatable(View) (created by ReactNativeModal)
    in RCTView (created by View)
    in View (created by AppContainer)
    in RCTView (created by View)
    in View (created by AppContainer)
    in AppContainer (created by Modal)
    in RCTView (created by View)
    in View (created by Modal)
    in VirtualizedListContextResetter (created by Modal)
    in RCTModalHostView (created by Modal)
    in Modal (created by ReactNativeModal)
    in ReactNativeModal (at bottom-sheet/index.native.js:517)
    in BottomSheet (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(BottomSheet) (at container.native.js:39)
    in BottomSheetSettings (at layout/index.native.js:182)
    in RCTView (created by View)
    in View (created by KeyboardAvoidingView)
    in KeyboardAvoidingView (at layout/index.native.js:170)
    in RCTView (created by View)
    in View (at layout/index.native.js:149)
    in RCTView (created by View)
    in View (at tooltip/index.native.js:283)
    in TooltipSlot (at layout/index.native.js:148)
    in Layout (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(Layout) (at with-select/index.js:60)
    in Unknown (at pure/index.tsx:43)
    in WithSelect(WithPreferredColorScheme(Layout)) (at editor.native.js:151)
    in ErrorBoundary (at with-preferred-color-scheme/index.native.js:30)
    in WithPreferredColorScheme(ErrorBoundary) (at editor.native.js:150)
    in RNCSafeAreaProvider (created by SafeAreaProvider)
    in SafeAreaProvider (at provider/index.native.js:404)
    in BlockRefsProvider (at provider/index.native.js:28)
    in Unknown (at with-registry-provider.js:39)
    in WithRegistryProvider(Component) (at provider/index.js:291)
    in BlockContextProvider (at provider/index.js:290)
    in EntityProvider (at provider/index.js:285)
    in EntityProvider (at provider/index.js:284)
    in Unknown (at with-registry-provider.js:45)
    in WithRegistryProvider(Component) (at provider/index.js:360)
    in EditorProvider (at provider/index.native.js:399)
    in NativeEditorProvider (at with-dispatch/index.js:100)
    in WithDispatch(NativeEditorProvider) (at with-select/index.js:60)
    in Unknown (at pure/index.tsx:43)
    in WithSelect(WithDispatch(NativeEditorProvider)) (at editor.native.js:143)
    in SlotFillProvider (at editor.native.js:142)
    in RNGestureHandlerRootView (created by GestureHandlerRootView)
    in GestureHandlerRootView (at editor.native.js:141)
    in Editor (at with-dispatch/index.js:100)
    in WithDispatch(Editor) (at with-select/index.js:60)
    in Unknown (at pure/index.tsx:43)
    in WithSelect(WithDispatch(Editor)) (at src/index.native.js:39)
    in Gutenberg
    in RCTView (created by View)
    in View (created by AppContainer)
    in RCTView (created by View)
    in View (created by AppContainer)
    in AppContainer
    in gutenberg(RootComponent), js engine: hermes

Since the pickerMode prop has not been integrated here in this file, we essentially flipped the previous default by removing disableCustomFontSizes. We now show the custom value input in areas where it was once not displayed.

Unexpected custom option Paragraph block settings includes unexpected custom option

Are you willing to replace disableCustomFontSizes with the new pickerMode prop in this file please? Happy assist with further testing as needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you @dcalhoun 🙏 Should we go ahead with the PR, I will apply your suggested changes and ping you again for review

Comment on lines -58 to -60
const units = useCustomUnits( {
availableUnits: unitsProp,
} );
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved further down the file, away from picker mode / type logic


const shouldUseSelectControl = fontSizes.length > 5;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved to a separate shouldUseSelectOverToggle util at the top of the file

@ciampo ciampo force-pushed the feat/font-size-picker-mode branch from bdf6b94 to cfb5c29 Compare July 2, 2024 07:51
const selectedFontSize = fontSizes.find(
( fontSize ) => fontSize.size === value
);
const isCustomValue = !! value && ! selectedFontSize;

const [ showCustomValueControl, setShowCustomValueControl ] = useState(
! disableCustomFontSizes && isCustomValue
const [ currentPickerType, setCurrentPickerType ] = useState(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

While the pickerMode is an indication from the component consumer, the currentPickerType is the internal value to determine what UI is currently shows to the user (toggle group, select dropdown, or custom value UI ?)

);

const headerHint = useMemo( () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved headerHint computation to an external util function to make the render function easier to read

Comment on lines -153 to -155
{ !! fontSizes.length &&
shouldUseSelectControl &&
! showCustomValueControl && (
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 logic for what UI should be shown to the user has been consolidated and moved in the getPickerType utility.

Also, the !! fontSizes.length checked seemed redundant, since shouldUseSelectControl already assumes that there are more than 5 font sizes

Copy link

github-actions bot commented Jul 2, 2024

Size Change: +1 B (0%)

Total Size: 1.75 MB

Filename Size Change
build/block-editor/index.min.js 252 kB +23 B (+0.01%)
build/block-library/index.min.js 219 kB +29 B (+0.01%)
build/components/index.min.js 223 kB +122 B (+0.05%)
build/edit-site/index.min.js 208 kB -150 B (-0.07%)
build/edit-site/posts-rtl.css 6.54 kB -6 B (-0.09%)
build/edit-site/posts.css 6.54 kB -6 B (-0.09%)
build/edit-site/style-rtl.css 11.7 kB -42 B (-0.36%)
build/edit-site/style.css 11.7 kB -42 B (-0.36%)
build/editor/index.min.js 98.2 kB +73 B (+0.07%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 951 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.31 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.31 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/content-rtl.css 4.58 kB
build/block-editor/content.css 4.58 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 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 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 310 B
build/block-library/blocks/button/editor.css 310 B
build/block-library/blocks/button/style-rtl.css 538 B
build/block-library/blocks/button/style.css 538 B
build/block-library/blocks/buttons/editor-rtl.css 336 B
build/block-library/blocks/buttons/editor.css 336 B
build/block-library/blocks/buttons/style-rtl.css 328 B
build/block-library/blocks/buttons/style.css 328 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 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 122 B
build/block-library/blocks/code/theme.css 122 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 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-content/style-rtl.css 90 B
build/block-library/blocks/comment-content/style.css 90 B
build/block-library/blocks/comment-template/style-rtl.css 200 B
build/block-library/blocks/comment-template/style.css 199 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 221 B
build/block-library/blocks/comments-pagination/editor.css 211 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 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 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 668 B
build/block-library/blocks/cover/editor.css 669 B
build/block-library/blocks/cover/style-rtl.css 1.62 kB
build/block-library/blocks/cover/style.css 1.6 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 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 314 B
build/block-library/blocks/embed/editor.css 314 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 342 B
build/block-library/blocks/form-input/style.css 342 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 958 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.71 kB
build/block-library/blocks/gallery/style.css 1.71 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 402 B
build/block-library/blocks/group/editor.css 402 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 845 B
build/block-library/blocks/image/editor.css 843 B
build/block-library/blocks/image/style-rtl.css 1.54 kB
build/block-library/blocks/image/style.css 1.54 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.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 204 B
build/block-library/blocks/latest-posts/editor.css 204 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 B
build/block-library/blocks/list/style-rtl.css 104 B
build/block-library/blocks/list/style.css 104 B
build/block-library/blocks/media-text/editor-rtl.css 304 B
build/block-library/blocks/media-text/editor.css 303 B
build/block-library/blocks/media-text/style-rtl.css 516 B
build/block-library/blocks/media-text/style.css 515 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 663 B
build/block-library/blocks/navigation-link/editor.css 664 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.2 kB
build/block-library/blocks/navigation/editor.css 2.21 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.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 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 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 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 506 B
build/block-library/blocks/post-comments-form/style.css 506 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 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 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 341 B
build/block-library/blocks/post-featured-image/style.css 341 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 399 B
build/block-library/blocks/post-template/style.css 398 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 70 B
build/block-library/blocks/post-time-to-read/style.css 70 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 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 220 B
build/block-library/blocks/query-pagination/editor.css 208 B
build/block-library/blocks/query-pagination/style-rtl.css 287 B
build/block-library/blocks/query-pagination/style.css 283 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 502 B
build/block-library/blocks/query/editor.css 502 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 221 B
build/block-library/blocks/quote/theme.css 225 B
build/block-library/blocks/read-more/style-rtl.css 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 183 B
build/block-library/blocks/search/editor.css 183 B
build/block-library/blocks/search/style-rtl.css 672 B
build/block-library/blocks/search/style.css 671 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-title/editor-rtl.css 123 B
build/block-library/blocks/site-title/editor.css 123 B
build/block-library/blocks/site-title/style-rtl.css 71 B
build/block-library/blocks/site-title/style.css 71 B
build/block-library/blocks/social-link/editor-rtl.css 338 B
build/block-library/blocks/social-link/editor.css 338 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.5 kB
build/block-library/blocks/social-links/style.css 1.5 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 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 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 108 B
build/block-library/blocks/term-description/style.css 108 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 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 553 B
build/block-library/blocks/video/editor.css 554 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.9 kB
build/block-library/editor.css 11.9 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/style-rtl.css 14.6 kB
build/block-library/style.css 14.6 kB
build/block-library/theme-rtl.css 702 B
build/block-library/theme.css 707 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.2 kB
build/commands/index.min.js 15.2 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.6 kB
build/customize-widgets/index.min.js 10.9 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.98 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 12.5 kB
build/edit-post/style-rtl.css 2.34 kB
build/edit-post/style.css 2.33 kB
build/edit-widgets/index.min.js 17.6 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/style-rtl.css 9.23 kB
build/editor/style.css 9.24 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.07 kB
build/format-library/style-rtl.css 494 B
build/format-library/style.css 493 B
build/hooks/index.min.js 1.54 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.5 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.68 kB
build/interactivity/index.min.js 13.4 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 742 B
build/interactivity/router.min.js 2.8 kB
build/interactivity/search.min.js 615 B
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.17 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.3 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.58 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.35 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 578 B
build/preferences/style.css 578 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 1.01 kB
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.01 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.85 kB
build/vendors/react-dom.min.js 42.8 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 2.65 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@ciampo ciampo changed the title FontSizePicker: add pickerMode, deprecated disableCustomFontSizes FontSizePicker: add pickerMode, deprecate disableCustomFontSizes Jul 2, 2024
@ciampo ciampo changed the title FontSizePicker: add pickerMode, deprecate disableCustomFontSizes FontSizePicker: add pickerMode Jul 2, 2024
@@ -59,7 +59,7 @@ const FontSizePickerSelect = ( props: FontSizePickerSelectProps ) => {
__experimentalHint: hint,
};
} ),
...( disableCustomFontSizes ? [] : [ CUSTOM_OPTION ] ),
...( pickerMode === 'both' ? [ CUSTOM_OPTION ] : [] ),
Copy link
Member

Choose a reason for hiding this comment

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

For now I think it's ok to maintain the current behavior of what happens with value={ /* some custom value */ } and disableCustomFontSizes={ true }.

So, as observed on trunk, that would be:

  • When predefs are a toggle group — Looks like no value is selected
  • When predefs are a dropdown — "Custom" option

We'll just be clear in the docs that the consumer is responsible for any validation to prevent this state.

packages/components/src/font-size-picker/index.tsx Outdated Show resolved Hide resolved
packages/components/src/font-size-picker/types.ts Outdated Show resolved Hide resolved
@ciampo
Copy link
Contributor Author

ciampo commented Jul 10, 2024

@mirka just wanted to check if you think that we should continue working on this PR, before I put in any further work on it

@mirka
Copy link
Member

mirka commented Jul 10, 2024

@matiasbenedetto 👋 Do you have an answer to this question? Things will be more maintainable in the long run if we can figure out a coordinated approach based on your requirements.

@matiasbenedetto
Copy link
Contributor

@matiasbenedetto 👋 Do you have an answer to #62328 (comment)? Things will be more maintainable in the long run if we can figure out a coordinated approach based on your requirements.

Hi @mirka yes, I answered in the thread: #62328 (comment)

@ciampo
Copy link
Contributor Author

ciampo commented Jul 12, 2024

As agreed with @mirka , we will not introduce a new pickerMode prop for the moment. I will still extract some of the changes applied in this PR, which should nonetheless tidyi the FontSizePicker component up a bit.

@ciampo
Copy link
Contributor Author

ciampo commented Jul 15, 2024

Closing as discussed above. Logic refactor extracted to #63553

@ciampo ciampo closed this Jul 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants