@wordpress/components 19.6.1 → 19.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/README.md +38 -0
- package/build/base-control/index.js +41 -32
- package/build/base-control/index.js.map +1 -1
- package/build/base-control/styles/base-control-styles.js +43 -22
- package/build/base-control/styles/base-control-styles.js.map +1 -1
- package/build/base-control/types.js +6 -0
- package/build/base-control/types.js.map +1 -0
- package/build/border-box-control/border-box-control/component.js +124 -0
- package/build/border-box-control/border-box-control/component.js.map +1 -0
- package/build/border-box-control/border-box-control/hook.js +113 -0
- package/build/border-box-control/border-box-control/hook.js.map +1 -0
- package/build/border-box-control/border-box-control/index.js +24 -0
- package/build/border-box-control/border-box-control/index.js.map +1 -0
- package/build/border-box-control/border-box-control-linked-button/component.js +59 -0
- package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -0
- package/build/border-box-control/border-box-control-linked-button/hook.js +41 -0
- package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
- package/build/border-box-control/border-box-control-linked-button/index.js +16 -0
- package/build/border-box-control/border-box-control-linked-button/index.js.map +1 -0
- package/build/border-box-control/border-box-control-split-controls/component.js +93 -0
- package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -0
- package/build/border-box-control/border-box-control-split-controls/hook.js +45 -0
- package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
- package/build/border-box-control/border-box-control-split-controls/index.js +16 -0
- package/build/border-box-control/border-box-control-split-controls/index.js.map +1 -0
- package/build/border-box-control/border-box-control-visualizer/component.js +40 -0
- package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -0
- package/build/border-box-control/border-box-control-visualizer/hook.js +43 -0
- package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
- package/build/border-box-control/border-box-control-visualizer/index.js +16 -0
- package/build/border-box-control/border-box-control-visualizer/index.js.map +1 -0
- package/build/border-box-control/index.js +44 -0
- package/build/border-box-control/index.js.map +1 -0
- package/build/border-box-control/styles.js +76 -0
- package/build/border-box-control/styles.js.map +1 -0
- package/build/border-box-control/types.js +6 -0
- package/build/border-box-control/types.js.map +1 -0
- package/build/border-box-control/utils.js +161 -0
- package/build/border-box-control/utils.js.map +1 -0
- package/build/border-control/border-control/component.js +119 -0
- package/build/border-control/border-control/component.js.map +1 -0
- package/build/border-control/border-control/hook.js +130 -0
- package/build/border-control/border-control/hook.js.map +1 -0
- package/build/border-control/border-control/index.js +24 -0
- package/build/border-control/border-control/index.js.map +1 -0
- package/build/border-control/border-control-dropdown/component.js +196 -0
- package/build/border-control/border-control-dropdown/component.js.map +1 -0
- package/build/border-control/border-control-dropdown/hook.js +105 -0
- package/build/border-control/border-control-dropdown/hook.js.map +1 -0
- package/build/border-control/border-control-dropdown/index.js +16 -0
- package/build/border-control/border-control-dropdown/index.js.map +1 -0
- package/build/border-control/border-control-style-picker/component.js +101 -0
- package/build/border-control/border-control-style-picker/component.js.map +1 -0
- package/build/border-control/border-control-style-picker/hook.js +45 -0
- package/build/border-control/border-control-style-picker/hook.js.map +1 -0
- package/build/border-control/border-control-style-picker/index.js +16 -0
- package/build/border-control/border-control-style-picker/index.js.map +1 -0
- package/build/border-control/index.js +24 -0
- package/build/border-control/index.js.map +1 -0
- package/build/border-control/styles.js +125 -0
- package/build/border-control/styles.js.map +1 -0
- package/build/border-control/types.js +6 -0
- package/build/border-control/types.js.map +1 -0
- package/build/box-control/all-input-control.js +3 -7
- package/build/box-control/all-input-control.js.map +1 -1
- package/build/box-control/axial-input-controls.js +20 -15
- package/build/box-control/axial-input-controls.js.map +1 -1
- package/build/box-control/input-controls.js +21 -16
- package/build/box-control/input-controls.js.map +1 -1
- package/build/box-control/utils.js +25 -11
- package/build/box-control/utils.js.map +1 -1
- package/build/card/styles.js +22 -17
- package/build/card/styles.js.map +1 -1
- package/build/checkbox-control/index.js +21 -1
- package/build/checkbox-control/index.js.map +1 -1
- package/build/color-palette/index.js +53 -4
- package/build/color-palette/index.js.map +1 -1
- package/build/custom-select-control/index.js +12 -4
- package/build/custom-select-control/index.js.map +1 -1
- package/build/divider/styles.js +28 -16
- package/build/divider/styles.js.map +1 -1
- package/build/focal-point-picker/controls.js +2 -3
- package/build/focal-point-picker/controls.js.map +1 -1
- package/build/form-file-upload/index.js +4 -1
- package/build/form-file-upload/index.js.map +1 -1
- package/build/index.js +40 -0
- package/build/index.js.map +1 -1
- package/build/input-control/input-field.js +21 -14
- package/build/input-control/input-field.js.map +1 -1
- package/build/input-control/reducer/actions.js +1 -3
- package/build/input-control/reducer/actions.js.map +1 -1
- package/build/input-control/reducer/reducer.js +1 -43
- package/build/input-control/reducer/reducer.js.map +1 -1
- package/build/item-group/styles.js +14 -14
- package/build/item-group/styles.js.map +1 -1
- package/build/mobile/picker/index.android.js +0 -3
- package/build/mobile/picker/index.android.js.map +1 -1
- package/build/number-control/index.js +15 -10
- package/build/number-control/index.js.map +1 -1
- package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
- package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
- package/build/surface/styles.js +8 -8
- package/build/surface/styles.js.map +1 -1
- package/build/toggle-group-control/index.js +8 -0
- package/build/toggle-group-control/index.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/component.js +10 -1
- package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/styles.js +14 -3
- package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +90 -0
- package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
- package/build/toggle-group-control/toggle-group-control-option/component.js +9 -87
- package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/component.js +127 -0
- package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
- package/build/toggle-group-control/toggle-group-control-option-base/index.js +16 -0
- package/build/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js +66 -0
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js +55 -0
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
- package/build/toggle-group-control/toggle-group-control-option-icon/index.js +16 -0
- package/build/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
- package/build/toolbar-dropdown-menu/index.js +1 -1
- package/build/toolbar-dropdown-menu/index.js.map +1 -1
- package/build/unit-control/index.js +56 -29
- package/build/unit-control/index.js.map +1 -1
- package/build/unit-control/unit-select-control.js +2 -4
- package/build/unit-control/unit-select-control.js.map +1 -1
- package/build/utils/colors-values.js +5 -3
- package/build/utils/colors-values.js.map +1 -1
- package/build/utils/config-values.js +9 -4
- package/build/utils/config-values.js.map +1 -1
- package/build-module/base-control/index.js +39 -35
- package/build-module/base-control/index.js.map +1 -1
- package/build-module/base-control/styles/base-control-styles.js +44 -16
- package/build-module/base-control/styles/base-control-styles.js.map +1 -1
- package/build-module/base-control/types.js +2 -0
- package/build-module/base-control/types.js.map +1 -0
- package/build-module/border-box-control/border-box-control/component.js +104 -0
- package/build-module/border-box-control/border-box-control/component.js.map +1 -0
- package/build-module/border-box-control/border-box-control/hook.js +97 -0
- package/build-module/border-box-control/border-box-control/hook.js.map +1 -0
- package/build-module/border-box-control/border-box-control/index.js +3 -0
- package/build-module/border-box-control/border-box-control/index.js.map +1 -0
- package/build-module/border-box-control/border-box-control-linked-button/component.js +42 -0
- package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -0
- package/build-module/border-box-control/border-box-control-linked-button/hook.js +26 -0
- package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
- package/build-module/border-box-control/border-box-control-linked-button/index.js +2 -0
- package/build-module/border-box-control/border-box-control-linked-button/index.js.map +1 -0
- package/build-module/border-box-control/border-box-control-split-controls/component.js +77 -0
- package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -0
- package/build-module/border-box-control/border-box-control-split-controls/hook.js +30 -0
- package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
- package/build-module/border-box-control/border-box-control-split-controls/index.js +2 -0
- package/build-module/border-box-control/border-box-control-split-controls/index.js.map +1 -0
- package/build-module/border-box-control/border-box-control-visualizer/component.js +27 -0
- package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -0
- package/build-module/border-box-control/border-box-control-visualizer/hook.js +28 -0
- package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
- package/build-module/border-box-control/border-box-control-visualizer/index.js +2 -0
- package/build-module/border-box-control/border-box-control-visualizer/index.js.map +1 -0
- package/build-module/border-box-control/index.js +4 -0
- package/build-module/border-box-control/index.js.map +1 -0
- package/build-module/border-box-control/styles.js +66 -0
- package/build-module/border-box-control/styles.js.map +1 -0
- package/build-module/border-box-control/types.js +2 -0
- package/build-module/border-box-control/types.js.map +1 -0
- package/build-module/border-box-control/utils.js +127 -0
- package/build-module/border-box-control/utils.js.map +1 -0
- package/build-module/border-control/border-control/component.js +100 -0
- package/build-module/border-control/border-control/component.js.map +1 -0
- package/build-module/border-control/border-control/hook.js +115 -0
- package/build-module/border-control/border-control/hook.js.map +1 -0
- package/build-module/border-control/border-control/index.js +3 -0
- package/build-module/border-control/border-control/index.js.map +1 -0
- package/build-module/border-control/border-control-dropdown/component.js +174 -0
- package/build-module/border-control/border-control-dropdown/component.js.map +1 -0
- package/build-module/border-control/border-control-dropdown/hook.js +89 -0
- package/build-module/border-control/border-control-dropdown/hook.js.map +1 -0
- package/build-module/border-control/border-control-dropdown/index.js +2 -0
- package/build-module/border-control/border-control-dropdown/index.js.map +1 -0
- package/build-module/border-control/border-control-style-picker/component.js +81 -0
- package/build-module/border-control/border-control-style-picker/component.js.map +1 -0
- package/build-module/border-control/border-control-style-picker/hook.js +30 -0
- package/build-module/border-control/border-control-style-picker/hook.js.map +1 -0
- package/build-module/border-control/border-control-style-picker/index.js +2 -0
- package/build-module/border-control/border-control-style-picker/index.js.map +1 -0
- package/build-module/border-control/index.js +3 -0
- package/build-module/border-control/index.js.map +1 -0
- package/build-module/border-control/styles.js +90 -0
- package/build-module/border-control/styles.js.map +1 -0
- package/build-module/border-control/types.js +2 -0
- package/build-module/border-control/types.js.map +1 -0
- package/build-module/box-control/all-input-control.js +4 -8
- package/build-module/box-control/all-input-control.js.map +1 -1
- package/build-module/box-control/axial-input-controls.js +18 -14
- package/build-module/box-control/axial-input-controls.js.map +1 -1
- package/build-module/box-control/input-controls.js +18 -14
- package/build-module/box-control/input-controls.js.map +1 -1
- package/build-module/box-control/utils.js +25 -11
- package/build-module/box-control/utils.js.map +1 -1
- package/build-module/card/styles.js +23 -18
- package/build-module/card/styles.js.map +1 -1
- package/build-module/checkbox-control/index.js +24 -3
- package/build-module/checkbox-control/index.js.map +1 -1
- package/build-module/color-palette/index.js +52 -4
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/custom-select-control/index.js +12 -4
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/divider/styles.js +29 -10
- package/build-module/divider/styles.js.map +1 -1
- package/build-module/focal-point-picker/controls.js +2 -3
- package/build-module/focal-point-picker/controls.js.map +1 -1
- package/build-module/form-file-upload/index.js +4 -1
- package/build-module/form-file-upload/index.js.map +1 -1
- package/build-module/index.js +3 -1
- package/build-module/index.js.map +1 -1
- package/build-module/input-control/input-field.js +21 -13
- package/build-module/input-control/input-field.js.map +1 -1
- package/build-module/input-control/reducer/actions.js +0 -1
- package/build-module/input-control/reducer/actions.js.map +1 -1
- package/build-module/input-control/reducer/reducer.js +2 -39
- package/build-module/input-control/reducer/reducer.js.map +1 -1
- package/build-module/item-group/styles.js +14 -14
- package/build-module/item-group/styles.js.map +1 -1
- package/build-module/mobile/picker/index.android.js +0 -3
- package/build-module/mobile/picker/index.android.js.map +1 -1
- package/build-module/number-control/index.js +15 -9
- package/build-module/number-control/index.js.map +1 -1
- package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
- package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
- package/build-module/surface/styles.js +8 -8
- package/build-module/surface/styles.js.map +1 -1
- package/build-module/toggle-group-control/index.js +1 -0
- package/build-module/toggle-group-control/index.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js +8 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/styles.js +11 -3
- package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +86 -0
- package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option/component.js +9 -76
- package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +105 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/index.js +2 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +55 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +50 -0
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js +2 -0
- package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
- package/build-module/toolbar-dropdown-menu/index.js +1 -1
- package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
- package/build-module/unit-control/index.js +54 -27
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/unit-control/unit-select-control.js +2 -3
- package/build-module/unit-control/unit-select-control.js.map +1 -1
- package/build-module/utils/colors-values.js +5 -3
- package/build-module/utils/colors-values.js.map +1 -1
- package/build-module/utils/config-values.js +8 -4
- package/build-module/utils/config-values.js.map +1 -1
- package/build-style/style-rtl.css +33 -182
- package/build-style/style.css +33 -182
- package/build-types/base-control/index.d.ts +35 -71
- package/build-types/base-control/index.d.ts.map +1 -1
- package/build-types/base-control/stories/index.d.ts +25 -0
- package/build-types/base-control/stories/index.d.ts.map +1 -0
- package/build-types/base-control/styles/base-control-styles.d.ts +10 -5
- package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
- package/build-types/base-control/types.d.ts +41 -0
- package/build-types/base-control/types.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
- package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control/hook.d.ts +282 -0
- package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control/index.d.ts +3 -0
- package/build-types/border-box-control/border-box-control/index.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -0
- package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +266 -0
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-linked-button/index.d.ts +2 -0
- package/build-types/border-box-control/border-box-control-linked-button/index.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +4 -0
- package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +274 -0
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-split-controls/index.d.ts +2 -0
- package/build-types/border-box-control/border-box-control-split-controls/index.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +4 -0
- package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +266 -0
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control-visualizer/index.d.ts +2 -0
- package/build-types/border-box-control/border-box-control-visualizer/index.d.ts.map +1 -0
- package/build-types/border-box-control/index.d.ts +4 -0
- package/build-types/border-box-control/index.d.ts.map +1 -0
- package/build-types/border-box-control/styles.d.ts +8 -0
- package/build-types/border-box-control/styles.d.ts.map +1 -0
- package/build-types/border-box-control/types.d.ts +91 -0
- package/build-types/border-box-control/types.d.ts.map +1 -0
- package/build-types/border-box-control/utils.d.ts +24 -0
- package/build-types/border-box-control/utils.d.ts.map +1 -0
- package/build-types/border-control/border-control/component.d.ts +4 -0
- package/build-types/border-control/border-control/component.d.ts.map +1 -0
- package/build-types/border-control/border-control/hook.d.ts +285 -0
- package/build-types/border-control/border-control/hook.d.ts.map +1 -0
- package/build-types/border-control/border-control/index.d.ts +3 -0
- package/build-types/border-control/border-control/index.d.ts.map +1 -0
- package/build-types/border-control/border-control-dropdown/component.d.ts +4 -0
- package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -0
- package/build-types/border-control/border-control-dropdown/hook.d.ts +280 -0
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -0
- package/build-types/border-control/border-control-dropdown/index.d.ts +2 -0
- package/build-types/border-control/border-control-dropdown/index.d.ts.map +1 -0
- package/build-types/border-control/border-control-style-picker/component.d.ts +4 -0
- package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -0
- package/build-types/border-control/border-control-style-picker/hook.d.ts +269 -0
- package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
- package/build-types/border-control/border-control-style-picker/index.d.ts +2 -0
- package/build-types/border-control/border-control-style-picker/index.d.ts.map +1 -0
- package/build-types/border-control/index.d.ts +3 -0
- package/build-types/border-control/index.d.ts.map +1 -0
- package/build-types/border-control/styles.d.ts +18 -0
- package/build-types/border-control/styles.d.ts.map +1 -0
- package/build-types/border-control/types.d.ts +163 -0
- package/build-types/border-control/types.d.ts.map +1 -0
- package/build-types/card/card-divider/hook.d.ts +1 -1
- package/build-types/card/styles.d.ts.map +1 -1
- package/build-types/color-indicator/index.d.ts +7 -0
- package/build-types/color-indicator/index.d.ts.map +1 -0
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +1 -1
- package/build-types/divider/stories/index.d.ts +1 -0
- package/build-types/divider/stories/index.d.ts.map +1 -1
- package/build-types/divider/styles.d.ts.map +1 -1
- package/build-types/divider/types.d.ts +8 -1
- package/build-types/divider/types.d.ts.map +1 -1
- package/build-types/input-control/input-field.d.ts.map +1 -1
- package/build-types/input-control/reducer/actions.d.ts +1 -3
- package/build-types/input-control/reducer/actions.d.ts.map +1 -1
- package/build-types/input-control/reducer/reducer.d.ts +3 -9
- package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
- package/build-types/input-control/types.d.ts +2 -2
- package/build-types/input-control/types.d.ts.map +1 -1
- package/build-types/item-group/styles.d.ts.map +1 -1
- package/build-types/number-control/index.d.ts +3 -3
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/index.d.ts +1 -0
- package/build-types/toggle-group-control/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -0
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +9 -0
- package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -0
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -2
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +25 -0
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -0
- package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts +2 -0
- package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts.map +1 -0
- package/build-types/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.d.ts +0 -0
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -0
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +37 -0
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -0
- package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts +2 -0
- package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts.map +1 -0
- package/build-types/toggle-group-control/types.d.ts +24 -8
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/ui/form-group/form-group.d.ts +2 -2
- package/build-types/unit-control/index.d.ts +12 -5
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/stories/index.d.ts +33 -0
- package/build-types/unit-control/stories/index.d.ts.map +1 -0
- package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
- package/build-types/unit-control/types.d.ts +28 -7
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/unit-control/unit-select-control.d.ts.map +1 -1
- package/build-types/utils/colors-values.d.ts +78 -18
- package/build-types/utils/colors-values.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +71 -71
- package/build-types/utils/config-values.d.ts.map +1 -1
- package/package.json +17 -17
- package/src/animate/README.md +1 -1
- package/src/base-control/README.md +20 -12
- package/src/base-control/index.tsx +124 -0
- package/src/base-control/stories/index.tsx +80 -0
- package/src/base-control/styles/{base-control-styles.js → base-control-styles.ts} +23 -1
- package/src/base-control/types.ts +42 -0
- package/src/border-box-control/border-box-control/README.md +178 -0
- package/src/border-box-control/border-box-control/component.tsx +123 -0
- package/src/border-box-control/border-box-control/hook.ts +119 -0
- package/src/border-box-control/border-box-control/index.ts +2 -0
- package/src/border-box-control/border-box-control-linked-button/component.tsx +50 -0
- package/src/border-box-control/border-box-control-linked-button/hook.ts +30 -0
- package/src/border-box-control/border-box-control-linked-button/index.ts +1 -0
- package/src/border-box-control/border-box-control-split-controls/component.tsx +90 -0
- package/src/border-box-control/border-box-control-split-controls/hook.ts +34 -0
- package/src/border-box-control/border-box-control-split-controls/index.ts +1 -0
- package/src/border-box-control/border-box-control-visualizer/component.tsx +28 -0
- package/src/border-box-control/border-box-control-visualizer/hook.ts +30 -0
- package/src/border-box-control/border-box-control-visualizer/index.ts +1 -0
- package/src/border-box-control/index.ts +3 -0
- package/src/border-box-control/stories/index.js +104 -0
- package/src/border-box-control/styles.ts +69 -0
- package/src/border-box-control/test/index.js +354 -0
- package/src/border-box-control/test/utils.js +305 -0
- package/src/border-box-control/types.ts +98 -0
- package/src/border-box-control/utils.ts +151 -0
- package/src/border-control/border-control/README.md +181 -0
- package/src/border-control/border-control/component.tsx +112 -0
- package/src/border-control/border-control/hook.ts +145 -0
- package/src/border-control/border-control/index.ts +2 -0
- package/src/border-control/border-control-dropdown/component.tsx +252 -0
- package/src/border-control/border-control-dropdown/hook.ts +98 -0
- package/src/border-control/border-control-dropdown/index.ts +1 -0
- package/src/border-control/border-control-style-picker/component.tsx +89 -0
- package/src/border-control/border-control-style-picker/hook.ts +34 -0
- package/src/border-control/border-control-style-picker/index.ts +1 -0
- package/src/border-control/index.ts +2 -0
- package/src/border-control/stories/index.js +118 -0
- package/src/border-control/styles.ts +190 -0
- package/src/border-control/test/index.js +436 -0
- package/src/border-control/types.ts +173 -0
- package/src/box-control/all-input-control.js +2 -10
- package/src/box-control/axial-input-controls.js +32 -21
- package/src/box-control/input-controls.js +30 -19
- package/src/box-control/utils.js +29 -12
- package/src/card/styles.js +11 -5
- package/src/card/test/__snapshots__/index.js.snap +83 -66
- package/src/card/test/index.js +7 -5
- package/src/checkbox-control/index.js +34 -3
- package/src/checkbox-control/stories/index.js +44 -0
- package/src/checkbox-control/style.scss +4 -2
- package/src/color-palette/README.md +6 -0
- package/src/color-palette/index.js +73 -8
- package/src/color-palette/stories/index.js +69 -26
- package/src/color-palette/style.scss +11 -3
- package/src/color-palette/test/__snapshots__/index.js.snap +662 -12
- package/src/color-palette/test/index.js +1 -1
- package/src/custom-select-control/index.js +15 -3
- package/src/custom-select-control/stories/index.js +77 -74
- package/src/custom-select-control/style.scss +23 -4
- package/src/disabled/README.md +7 -10
- package/src/divider/stories/index.tsx +26 -23
- package/src/divider/styles.ts +9 -0
- package/src/divider/types.ts +11 -1
- package/src/flyout/test/__snapshots__/index.js.snap +7 -7
- package/src/focal-point-picker/controls.js +2 -3
- package/src/form-file-upload/README.md +18 -0
- package/src/form-file-upload/index.js +3 -0
- package/src/form-file-upload/test/index.js +73 -11
- package/src/form-toggle/README.md +1 -1
- package/src/index.js +8 -0
- package/src/input-control/input-field.tsx +23 -12
- package/src/input-control/reducer/actions.ts +1 -7
- package/src/input-control/reducer/reducer.ts +0 -29
- package/src/input-control/types.ts +2 -1
- package/src/item-group/styles.ts +1 -0
- package/src/item-group/test/__snapshots__/index.js.snap +11 -10
- package/src/mobile/picker/index.android.js +0 -1
- package/src/number-control/README.md +14 -0
- package/src/number-control/index.js +13 -12
- package/src/number-control/stories/index.js +14 -7
- package/src/number-control/test/index.js +79 -1
- package/src/range-control/stories/index.js +91 -119
- package/src/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +1 -0
- package/src/surface/styles.js +1 -1
- package/src/surface/test/__snapshots__/index.js.snap +11 -11
- package/src/toggle-group-control/index.ts +1 -0
- package/src/toggle-group-control/stories/index.js +37 -7
- package/src/toggle-group-control/test/__snapshots__/index.js.snap +269 -5
- package/src/toggle-group-control/test/index.js +43 -10
- package/src/toggle-group-control/toggle-group-control/component.tsx +10 -0
- package/src/toggle-group-control/toggle-group-control/styles.ts +14 -0
- package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +86 -0
- package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
- package/src/toggle-group-control/toggle-group-control-option/component.tsx +18 -94
- package/src/toggle-group-control/toggle-group-control-option-base/README.md +27 -0
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +129 -0
- package/src/toggle-group-control/toggle-group-control-option-base/index.ts +1 -0
- package/src/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.ts +4 -1
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +56 -0
- package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +56 -0
- package/src/toggle-group-control/toggle-group-control-option-icon/index.ts +1 -0
- package/src/toggle-group-control/types.ts +33 -8
- package/src/toolbar-dropdown-menu/index.js +1 -1
- package/src/toolbar-group/style.scss +0 -73
- package/src/tools-panel/test/__snapshots__/index.js.snap +8 -8
- package/src/unit-control/README.md +7 -3
- package/src/unit-control/index.tsx +65 -31
- package/src/unit-control/stories/index.tsx +170 -0
- package/src/unit-control/test/index.js +263 -100
- package/src/unit-control/types.ts +65 -42
- package/src/unit-control/unit-select-control.tsx +2 -3
- package/src/utils/colors-values.js +4 -3
- package/src/utils/config-values.js +9 -4
- package/tsconfig.json +3 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/toggle-group-control/toggle-group-control-option/styles.js +0 -66
- package/build/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
- package/build-module/toggle-group-control/toggle-group-control-option/styles.js +0 -55
- package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
- package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +0 -1
- package/src/base-control/index.js +0 -111
- package/src/base-control/stories/index.js +0 -81
- package/src/unit-control/stories/index.js +0 -127
|
@@ -17,7 +17,6 @@ import type {
|
|
|
17
17
|
* WordPress dependencies
|
|
18
18
|
*/
|
|
19
19
|
import { forwardRef, useRef } from '@wordpress/element';
|
|
20
|
-
import { UP, DOWN, ENTER, ESCAPE } from '@wordpress/keycodes';
|
|
21
20
|
/**
|
|
22
21
|
* Internal dependencies
|
|
23
22
|
*/
|
|
@@ -68,7 +67,6 @@ function InputField(
|
|
|
68
67
|
pressEnter,
|
|
69
68
|
pressUp,
|
|
70
69
|
reset,
|
|
71
|
-
update,
|
|
72
70
|
} = useInputControlStateReducer( stateReducer, {
|
|
73
71
|
isDragEnabled,
|
|
74
72
|
value: valueProp,
|
|
@@ -92,10 +90,12 @@ function InputField(
|
|
|
92
90
|
return;
|
|
93
91
|
}
|
|
94
92
|
if ( ! isFocused && ! wasDirtyOnBlur.current ) {
|
|
95
|
-
|
|
93
|
+
commit( valueProp, _event as SyntheticEvent );
|
|
96
94
|
} else if ( ! isDirty ) {
|
|
97
95
|
onChange( value, {
|
|
98
|
-
event: _event as
|
|
96
|
+
event: _event as
|
|
97
|
+
| ChangeEvent< HTMLInputElement >
|
|
98
|
+
| PointerEvent< HTMLInputElement >,
|
|
99
99
|
} );
|
|
100
100
|
wasDirtyOnBlur.current = false;
|
|
101
101
|
}
|
|
@@ -109,7 +109,7 @@ function InputField(
|
|
|
109
109
|
* If isPressEnterToChange is set, this commits the value to
|
|
110
110
|
* the onChange callback.
|
|
111
111
|
*/
|
|
112
|
-
if (
|
|
112
|
+
if ( isDirty || ! event.target.validity.valid ) {
|
|
113
113
|
wasDirtyOnBlur.current = true;
|
|
114
114
|
handleOnCommit( event );
|
|
115
115
|
}
|
|
@@ -137,19 +137,19 @@ function InputField(
|
|
|
137
137
|
};
|
|
138
138
|
|
|
139
139
|
const handleOnKeyDown = ( event: KeyboardEvent< HTMLInputElement > ) => {
|
|
140
|
-
const {
|
|
140
|
+
const { key } = event;
|
|
141
141
|
onKeyDown( event );
|
|
142
142
|
|
|
143
|
-
switch (
|
|
144
|
-
case
|
|
143
|
+
switch ( key ) {
|
|
144
|
+
case 'ArrowUp':
|
|
145
145
|
pressUp( event );
|
|
146
146
|
break;
|
|
147
147
|
|
|
148
|
-
case
|
|
148
|
+
case 'ArrowDown':
|
|
149
149
|
pressDown( event );
|
|
150
150
|
break;
|
|
151
151
|
|
|
152
|
-
case
|
|
152
|
+
case 'Enter':
|
|
153
153
|
pressEnter( event );
|
|
154
154
|
|
|
155
155
|
if ( isPressEnterToChange ) {
|
|
@@ -158,7 +158,7 @@ function InputField(
|
|
|
158
158
|
}
|
|
159
159
|
break;
|
|
160
160
|
|
|
161
|
-
case
|
|
161
|
+
case 'Escape':
|
|
162
162
|
if ( isPressEnterToChange && isDirty ) {
|
|
163
163
|
event.preventDefault();
|
|
164
164
|
reset( valueProp, event );
|
|
@@ -169,7 +169,18 @@ function InputField(
|
|
|
169
169
|
|
|
170
170
|
const dragGestureProps = useDrag< PointerEvent< HTMLInputElement > >(
|
|
171
171
|
( dragProps ) => {
|
|
172
|
-
const { distance, dragging, event } = dragProps;
|
|
172
|
+
const { distance, dragging, event, target } = dragProps;
|
|
173
|
+
|
|
174
|
+
// The `target` prop always references the `input` element while, by
|
|
175
|
+
// default, the `dragProps.event.target` property would reference the real
|
|
176
|
+
// event target (i.e. any DOM element that the pointer is hovering while
|
|
177
|
+
// dragging). Ensuring that the `target` is always the `input` element
|
|
178
|
+
// allows consumers of `InputControl` (or any higher-level control) to
|
|
179
|
+
// check the input's validity by accessing `event.target.validity.valid`.
|
|
180
|
+
dragProps.event = {
|
|
181
|
+
...dragProps.event,
|
|
182
|
+
target,
|
|
183
|
+
};
|
|
173
184
|
|
|
174
185
|
if ( ! distance ) return;
|
|
175
186
|
event.stopPropagation();
|
|
@@ -18,7 +18,6 @@ export const PRESS_DOWN = 'PRESS_DOWN';
|
|
|
18
18
|
export const PRESS_ENTER = 'PRESS_ENTER';
|
|
19
19
|
export const PRESS_UP = 'PRESS_UP';
|
|
20
20
|
export const RESET = 'RESET';
|
|
21
|
-
export const UPDATE = 'UPDATE';
|
|
22
21
|
|
|
23
22
|
interface EventPayload {
|
|
24
23
|
event?: SyntheticEvent;
|
|
@@ -42,14 +41,9 @@ export type DragStartAction = Action< typeof DRAG_START, DragProps >;
|
|
|
42
41
|
export type DragEndAction = Action< typeof DRAG_END, DragProps >;
|
|
43
42
|
export type DragAction = Action< typeof DRAG, DragProps >;
|
|
44
43
|
export type ResetAction = Action< typeof RESET, Partial< ValuePayload > >;
|
|
45
|
-
export type UpdateAction = Action< typeof UPDATE, ValuePayload >;
|
|
46
44
|
export type InvalidateAction = Action< typeof INVALIDATE, { error: unknown } >;
|
|
47
45
|
|
|
48
|
-
export type ChangeEventAction =
|
|
49
|
-
| ChangeAction
|
|
50
|
-
| ResetAction
|
|
51
|
-
| CommitAction
|
|
52
|
-
| UpdateAction;
|
|
46
|
+
export type ChangeEventAction = ChangeAction | ResetAction | CommitAction;
|
|
53
47
|
|
|
54
48
|
export type DragEventAction = DragStartAction | DragEndAction | DragAction;
|
|
55
49
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { isEmpty } from 'lodash';
|
|
5
4
|
import type { SyntheticEvent } from 'react';
|
|
6
5
|
|
|
7
6
|
/**
|
|
@@ -38,27 +37,6 @@ function mergeInitialState(
|
|
|
38
37
|
} as InputState;
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
/**
|
|
42
|
-
* Composes multiple stateReducers into a single stateReducer, building
|
|
43
|
-
* the pipeline to control the flow for state and actions.
|
|
44
|
-
*
|
|
45
|
-
* @param fns State reducers.
|
|
46
|
-
* @return The single composed stateReducer.
|
|
47
|
-
*/
|
|
48
|
-
export const composeStateReducers = (
|
|
49
|
-
...fns: StateReducer[]
|
|
50
|
-
): StateReducer => {
|
|
51
|
-
return ( ...args ) => {
|
|
52
|
-
return fns.reduceRight( ( state, fn ) => {
|
|
53
|
-
// TODO: Assess whether this can be replaced with a more standard `compose` implementation
|
|
54
|
-
// like wp.data.compose() (aka lodash flowRight) or Redux compose().
|
|
55
|
-
// The current implementation only works by functions mutating the original state object.
|
|
56
|
-
const fnState = fn( ...args );
|
|
57
|
-
return isEmpty( fnState ) ? state : { ...state, ...fnState };
|
|
58
|
-
}, {} as InputState );
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
|
|
62
40
|
/**
|
|
63
41
|
* Creates a reducer that opens the channel for external state subscription
|
|
64
42
|
* and modification.
|
|
@@ -122,11 +100,6 @@ function inputControlStateReducer(
|
|
|
122
100
|
nextState.value = action.payload.value || state.initialValue;
|
|
123
101
|
break;
|
|
124
102
|
|
|
125
|
-
case actions.UPDATE:
|
|
126
|
-
nextState.value = action.payload.value;
|
|
127
|
-
nextState.isDirty = false;
|
|
128
|
-
break;
|
|
129
|
-
|
|
130
103
|
/**
|
|
131
104
|
* Validation
|
|
132
105
|
*/
|
|
@@ -219,7 +192,6 @@ export function useInputControlStateReducer(
|
|
|
219
192
|
dispatch( { type: actions.INVALIDATE, payload: { error, event } } );
|
|
220
193
|
const reset = createChangeEvent( actions.RESET );
|
|
221
194
|
const commit = createChangeEvent( actions.COMMIT );
|
|
222
|
-
const update = createChangeEvent( actions.UPDATE );
|
|
223
195
|
|
|
224
196
|
const dragStart = createDragEvent( actions.DRAG_START );
|
|
225
197
|
const drag = createDragEvent( actions.DRAG );
|
|
@@ -242,6 +214,5 @@ export function useInputControlStateReducer(
|
|
|
242
214
|
pressUp,
|
|
243
215
|
reset,
|
|
244
216
|
state,
|
|
245
|
-
update,
|
|
246
217
|
} as const;
|
|
247
218
|
}
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
ReactNode,
|
|
7
7
|
ChangeEvent,
|
|
8
8
|
SyntheticEvent,
|
|
9
|
+
PointerEvent,
|
|
9
10
|
} from 'react';
|
|
10
11
|
import type { useDrag } from '@use-gesture/react';
|
|
11
12
|
|
|
@@ -33,7 +34,7 @@ interface BaseProps {
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export type InputChangeCallback<
|
|
36
|
-
E = ChangeEvent< HTMLInputElement >,
|
|
37
|
+
E = ChangeEvent< HTMLInputElement > | PointerEvent< HTMLInputElement >,
|
|
37
38
|
P = {}
|
|
38
39
|
> = ( nextValue: string | undefined, extra: { event: E } & P ) => void;
|
|
39
40
|
|
package/src/item-group/styles.ts
CHANGED
|
@@ -11,8 +11,8 @@ Snapshot Diff:
|
|
|
11
11
|
role="listitem"
|
|
12
12
|
>
|
|
13
13
|
<div
|
|
14
|
-
- class="components-item css-
|
|
15
|
-
+ class="components-item css-
|
|
14
|
+
- class="components-item css-1uo9kmu-View-medium-item-spacedAround em57xhy0"
|
|
15
|
+
+ class="components-item css-10mizr-View-large-item-spacedAround em57xhy0"
|
|
16
16
|
data-wp-c16t="true"
|
|
17
17
|
data-wp-component="Item"
|
|
18
18
|
>
|
|
@@ -24,8 +24,8 @@ Snapshot Diff:
|
|
|
24
24
|
role="listitem"
|
|
25
25
|
>
|
|
26
26
|
<div
|
|
27
|
-
- class="components-item css-
|
|
28
|
-
+ class="components-item css-
|
|
27
|
+
- class="components-item css-1uo9kmu-View-medium-item-spacedAround em57xhy0"
|
|
28
|
+
+ class="components-item css-10mizr-View-large-item-spacedAround em57xhy0"
|
|
29
29
|
data-wp-c16t="true"
|
|
30
30
|
data-wp-component="Item"
|
|
31
31
|
>
|
|
@@ -44,8 +44,8 @@ Snapshot Diff:
|
|
|
44
44
|
role="listitem"
|
|
45
45
|
>
|
|
46
46
|
<div
|
|
47
|
-
- class="components-item css-
|
|
48
|
-
+ class="components-item css-
|
|
47
|
+
- class="components-item css-bsdqin-View-medium-item em57xhy0"
|
|
48
|
+
+ class="components-item css-1ohjtsa-View-large-item em57xhy0"
|
|
49
49
|
data-wp-c16t="true"
|
|
50
50
|
data-wp-component="Item"
|
|
51
51
|
>
|
|
@@ -78,6 +78,7 @@ exports[`ItemGroup ItemGroup component should render correctly 1`] = `
|
|
|
78
78
|
width: 100%;
|
|
79
79
|
display: block;
|
|
80
80
|
margin: 0;
|
|
81
|
+
color: inherit;
|
|
81
82
|
border-radius: 2px;
|
|
82
83
|
}
|
|
83
84
|
|
|
@@ -120,8 +121,8 @@ Snapshot Diff:
|
|
|
120
121
|
role="listitem"
|
|
121
122
|
>
|
|
122
123
|
<div
|
|
123
|
-
- class="components-item css-
|
|
124
|
-
+ class="components-item css-
|
|
124
|
+
- class="components-item css-1uo9kmu-View-medium-item-spacedAround em57xhy0"
|
|
125
|
+
+ class="components-item css-bsdqin-View-medium-item em57xhy0"
|
|
125
126
|
data-wp-c16t="true"
|
|
126
127
|
data-wp-component="Item"
|
|
127
128
|
>
|
|
@@ -147,8 +148,8 @@ Snapshot Diff:
|
|
|
147
148
|
role="listitem"
|
|
148
149
|
>
|
|
149
150
|
<div
|
|
150
|
-
- class="components-item css-
|
|
151
|
-
+ class="components-item css-
|
|
151
|
+
- class="components-item css-1uo9kmu-View-medium-item-spacedAround em57xhy0"
|
|
152
|
+
+ class="components-item css-bsdqin-View-medium-item em57xhy0"
|
|
152
153
|
data-wp-c16t="true"
|
|
153
154
|
data-wp-component="Item"
|
|
154
155
|
>
|
|
@@ -97,6 +97,20 @@ The minimum `value` allowed.
|
|
|
97
97
|
- Required: No
|
|
98
98
|
- Default: `-Infinity`
|
|
99
99
|
|
|
100
|
+
### onChange
|
|
101
|
+
|
|
102
|
+
Callback fired whenever the value of the input changes.
|
|
103
|
+
|
|
104
|
+
The callback receives two arguments:
|
|
105
|
+
|
|
106
|
+
1. `newValue`: the new value of the input
|
|
107
|
+
2. `extra`: an object containing, under the `event` key, the original browser event.
|
|
108
|
+
|
|
109
|
+
Note that the value received as the first argument of the callback is _not_ guaranteed to be a valid value (e.g. it could be outside of the range defined by the [`min`, `max`] props, or it could not match the `step`). In order to check the value's validity, check the `event.target?.validity.valid` property from the callback's second argument.
|
|
110
|
+
|
|
111
|
+
- Type: `(newValue, extra) => void`
|
|
112
|
+
- Required: No
|
|
113
|
+
|
|
100
114
|
### required
|
|
101
115
|
|
|
102
116
|
If `true` enforces a valid number within the control's min/max range. If `false` allows an empty string as a valid value.
|
|
@@ -15,13 +15,12 @@ import { isRTL } from '@wordpress/i18n';
|
|
|
15
15
|
*/
|
|
16
16
|
import { Input } from './styles/number-control-styles';
|
|
17
17
|
import * as inputControlActionTypes from '../input-control/reducer/actions';
|
|
18
|
-
import { composeStateReducers } from '../input-control/reducer/reducer';
|
|
19
18
|
import { add, subtract, roundClamp } from '../utils/math';
|
|
20
19
|
import { isValueEmpty } from '../utils/values';
|
|
21
20
|
|
|
22
21
|
export function NumberControl(
|
|
23
22
|
{
|
|
24
|
-
__unstableStateReducer:
|
|
23
|
+
__unstableStateReducer: stateReducerProp,
|
|
25
24
|
className,
|
|
26
25
|
dragDirection = 'n',
|
|
27
26
|
hideHTMLArrows = false,
|
|
@@ -62,9 +61,11 @@ export function NumberControl(
|
|
|
62
61
|
* @return {Object} The updated state to apply to InputControl
|
|
63
62
|
*/
|
|
64
63
|
const numberControlStateReducer = ( state, action ) => {
|
|
64
|
+
const nextState = { ...state };
|
|
65
|
+
|
|
65
66
|
const { type, payload } = action;
|
|
66
67
|
const event = payload?.event;
|
|
67
|
-
const currentValue =
|
|
68
|
+
const currentValue = nextState.value;
|
|
68
69
|
|
|
69
70
|
/**
|
|
70
71
|
* Handles custom UP and DOWN Keyboard events
|
|
@@ -94,7 +95,7 @@ export function NumberControl(
|
|
|
94
95
|
nextValue = subtract( nextValue, incrementalValue );
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
|
|
98
|
+
nextState.value = constrainValue(
|
|
98
99
|
nextValue,
|
|
99
100
|
enableShift ? incrementalValue : null
|
|
100
101
|
);
|
|
@@ -139,7 +140,7 @@ export function NumberControl(
|
|
|
139
140
|
delta = Math.ceil( Math.abs( delta ) ) * Math.sign( delta );
|
|
140
141
|
const distance = delta * modifier * directionModifier;
|
|
141
142
|
|
|
142
|
-
|
|
143
|
+
nextState.value = constrainValue(
|
|
143
144
|
add( currentValue, distance ),
|
|
144
145
|
enableShift ? modifier : null
|
|
145
146
|
);
|
|
@@ -147,7 +148,7 @@ export function NumberControl(
|
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
/**
|
|
150
|
-
* Handles commit (ENTER key press or
|
|
151
|
+
* Handles commit (ENTER key press or blur)
|
|
151
152
|
*/
|
|
152
153
|
if (
|
|
153
154
|
type === inputControlActionTypes.PRESS_ENTER ||
|
|
@@ -155,12 +156,12 @@ export function NumberControl(
|
|
|
155
156
|
) {
|
|
156
157
|
const applyEmptyValue = required === false && currentValue === '';
|
|
157
158
|
|
|
158
|
-
|
|
159
|
+
nextState.value = applyEmptyValue
|
|
159
160
|
? currentValue
|
|
160
161
|
: constrainValue( currentValue );
|
|
161
162
|
}
|
|
162
163
|
|
|
163
|
-
return
|
|
164
|
+
return nextState;
|
|
164
165
|
};
|
|
165
166
|
|
|
166
167
|
return (
|
|
@@ -180,10 +181,10 @@ export function NumberControl(
|
|
|
180
181
|
step={ step }
|
|
181
182
|
type={ typeProp }
|
|
182
183
|
value={ valueProp }
|
|
183
|
-
__unstableStateReducer={
|
|
184
|
-
numberControlStateReducer,
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
__unstableStateReducer={ ( state, action ) => {
|
|
185
|
+
const baseState = numberControlStateReducer( state, action );
|
|
186
|
+
return stateReducerProp?.( baseState, action ) ?? baseState;
|
|
187
|
+
} }
|
|
187
188
|
/>
|
|
188
189
|
);
|
|
189
190
|
}
|
|
@@ -23,6 +23,7 @@ export default {
|
|
|
23
23
|
|
|
24
24
|
function Example() {
|
|
25
25
|
const [ value, setValue ] = useState( '0' );
|
|
26
|
+
const [ isValidValue, setIsValidValue ] = useState( true );
|
|
26
27
|
|
|
27
28
|
const props = {
|
|
28
29
|
disabled: boolean( 'disabled', false ),
|
|
@@ -32,18 +33,24 @@ function Example() {
|
|
|
32
33
|
label: text( 'label', 'Number' ),
|
|
33
34
|
min: number( 'min', 0 ),
|
|
34
35
|
max: number( 'max', 100 ),
|
|
35
|
-
placeholder: text( 'placeholder', 0 ),
|
|
36
|
+
placeholder: text( 'placeholder', '0' ),
|
|
36
37
|
required: boolean( 'required', false ),
|
|
37
38
|
shiftStep: number( 'shiftStep', 10 ),
|
|
38
|
-
step: text( 'step', 1 ),
|
|
39
|
+
step: text( 'step', '1' ),
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
return (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
<>
|
|
44
|
+
<NumberControl
|
|
45
|
+
{ ...props }
|
|
46
|
+
value={ value }
|
|
47
|
+
onChange={ ( v, extra ) => {
|
|
48
|
+
setValue( v );
|
|
49
|
+
setIsValidValue( extra.event.target.validity.valid );
|
|
50
|
+
} }
|
|
51
|
+
/>
|
|
52
|
+
<p>Is valid? { isValidValue ? 'Yes' : 'No' }</p>
|
|
53
|
+
</>
|
|
47
54
|
);
|
|
48
55
|
}
|
|
49
56
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { render, screen, fireEvent } from '@testing-library/react';
|
|
4
|
+
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
@@ -63,6 +63,68 @@ describe( 'NumberControl', () => {
|
|
|
63
63
|
|
|
64
64
|
expect( spy ).toHaveBeenCalledWith( '10' );
|
|
65
65
|
} );
|
|
66
|
+
|
|
67
|
+
it( 'should call onChange callback when value is clamped on blur', async () => {
|
|
68
|
+
const spy = jest.fn();
|
|
69
|
+
render(
|
|
70
|
+
<NumberControl
|
|
71
|
+
value={ 5 }
|
|
72
|
+
min={ 4 }
|
|
73
|
+
max={ 10 }
|
|
74
|
+
onChange={ ( v ) => spy( v ) }
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const input = getInput();
|
|
79
|
+
input.focus();
|
|
80
|
+
fireEvent.change( input, { target: { value: 1 } } );
|
|
81
|
+
|
|
82
|
+
// Before blurring, the value is still un-clamped
|
|
83
|
+
expect( input.value ).toBe( '1' );
|
|
84
|
+
|
|
85
|
+
input.blur();
|
|
86
|
+
|
|
87
|
+
// After blur, value is clamped
|
|
88
|
+
expect( input.value ).toBe( '4' );
|
|
89
|
+
|
|
90
|
+
// After the blur, the `onChange` callback fires asynchronously.
|
|
91
|
+
await waitFor( () => {
|
|
92
|
+
expect( spy ).toHaveBeenCalledTimes( 2 );
|
|
93
|
+
expect( spy ).toHaveBeenNthCalledWith( 1, '1' );
|
|
94
|
+
expect( spy ).toHaveBeenNthCalledWith( 2, 4 );
|
|
95
|
+
} );
|
|
96
|
+
} );
|
|
97
|
+
|
|
98
|
+
it( 'should call onChange callback when value is not valid', () => {
|
|
99
|
+
const spy = jest.fn();
|
|
100
|
+
render(
|
|
101
|
+
<NumberControl
|
|
102
|
+
value={ 5 }
|
|
103
|
+
min={ 1 }
|
|
104
|
+
max={ 10 }
|
|
105
|
+
onChange={ ( v, extra ) =>
|
|
106
|
+
spy( v, extra.event.target.validity.valid )
|
|
107
|
+
}
|
|
108
|
+
/>
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
const input = getInput();
|
|
112
|
+
input.focus();
|
|
113
|
+
fireEvent.change( input, { target: { value: 14 } } );
|
|
114
|
+
|
|
115
|
+
expect( input.value ).toBe( '14' );
|
|
116
|
+
|
|
117
|
+
fireKeyDown( { keyCode: ENTER } );
|
|
118
|
+
|
|
119
|
+
expect( input.value ).toBe( '10' );
|
|
120
|
+
|
|
121
|
+
expect( spy ).toHaveBeenCalledTimes( 2 );
|
|
122
|
+
|
|
123
|
+
// First call: invalid, unclamped value
|
|
124
|
+
expect( spy ).toHaveBeenNthCalledWith( 1, '14', false );
|
|
125
|
+
// Second call: valid, clamped value
|
|
126
|
+
expect( spy ).toHaveBeenNthCalledWith( 2, 10, true );
|
|
127
|
+
} );
|
|
66
128
|
} );
|
|
67
129
|
|
|
68
130
|
describe( 'Validation', () => {
|
|
@@ -82,6 +144,22 @@ describe( 'NumberControl', () => {
|
|
|
82
144
|
expect( input.value ).toBe( '0' );
|
|
83
145
|
} );
|
|
84
146
|
|
|
147
|
+
it( 'should clamp value within range on blur', () => {
|
|
148
|
+
render( <NumberControl value={ 5 } min={ 0 } max={ 10 } /> );
|
|
149
|
+
|
|
150
|
+
const input = getInput();
|
|
151
|
+
input.focus();
|
|
152
|
+
fireEvent.change( input, { target: { value: 41 } } );
|
|
153
|
+
|
|
154
|
+
// Before blurring, the value is still un-clamped
|
|
155
|
+
expect( input.value ).toBe( '41' );
|
|
156
|
+
|
|
157
|
+
input.blur();
|
|
158
|
+
|
|
159
|
+
// After blur, value is clamped
|
|
160
|
+
expect( input.value ).toBe( '10' );
|
|
161
|
+
} );
|
|
162
|
+
|
|
85
163
|
it( 'should parse to number value on ENTER keypress when required', () => {
|
|
86
164
|
render( <NumberControl value={ 5 } required={ true } /> );
|
|
87
165
|
|