@wordpress/components 19.7.0 → 19.9.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 +39 -1
- package/README.md +38 -0
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build/base-control/index.js +35 -31
- package/build/base-control/index.js.map +1 -1
- package/build/base-control/styles/base-control-styles.js +18 -18
- 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/card/styles.js +22 -17
- package/build/card/styles.js.map +1 -1
- package/build/custom-select-control/index.js +4 -1
- package/build/custom-select-control/index.js.map +1 -1
- package/build/guide/index.js +14 -8
- package/build/guide/index.js.map +1 -1
- package/build/heading/hook.js +1 -1
- package/build/heading/hook.js.map +1 -1
- package/build/index.js +40 -0
- package/build/index.js.map +1 -1
- package/build/input-control/index.js +26 -4
- package/build/input-control/index.js.map +1 -1
- package/build/input-control/styles/input-control-styles.js +25 -25
- package/build/input-control/styles/input-control-styles.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/navigation/styles/navigation-styles.js +12 -12
- package/build/navigation/styles/navigation-styles.js.map +1 -1
- package/build/notice/index.native.js +44 -40
- package/build/notice/index.native.js.map +1 -1
- package/build/notice/list.native.js +27 -45
- package/build/notice/list.native.js.map +1 -1
- package/build/palette-edit/index.js +2 -1
- package/build/palette-edit/index.js.map +1 -1
- package/build/sandbox/index.js +2 -2
- package/build/sandbox/index.js.map +1 -1
- package/build/select-control/styles/select-control-styles.js +5 -5
- package/build/select-control/styles/select-control-styles.js.map +1 -1
- package/build/surface/styles.js +8 -8
- package/build/surface/styles.js.map +1 -1
- package/build/text/hook.js +5 -5
- package/build/text/hook.js.map +1 -1
- package/build/text/styles/text-mixins.native.js +1 -1
- package/build/text/styles/text-mixins.native.js.map +1 -1
- package/build/text/styles.js +7 -7
- package/build/text/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/ui/spinner/component.js +1 -1
- package/build/ui/spinner/component.js.map +1 -1
- package/build/unit-control/index.js +7 -2
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/colors-values.js +14 -27
- 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/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build-module/base-control/index.js +33 -34
- package/build-module/base-control/index.js.map +1 -1
- package/build-module/base-control/styles/base-control-styles.js +18 -18
- 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/card/styles.js +23 -18
- package/build-module/card/styles.js.map +1 -1
- package/build-module/custom-select-control/index.js +4 -1
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/guide/index.js +14 -8
- package/build-module/guide/index.js.map +1 -1
- package/build-module/heading/hook.js +1 -1
- package/build-module/heading/hook.js.map +1 -1
- package/build-module/index.js +3 -1
- package/build-module/index.js.map +1 -1
- package/build-module/input-control/index.js +23 -3
- package/build-module/input-control/index.js.map +1 -1
- package/build-module/input-control/styles/input-control-styles.js +25 -25
- package/build-module/input-control/styles/input-control-styles.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/navigation/styles/navigation-styles.js +13 -13
- package/build-module/navigation/styles/navigation-styles.js.map +1 -1
- package/build-module/notice/index.native.js +45 -41
- package/build-module/notice/index.native.js.map +1 -1
- package/build-module/notice/list.native.js +28 -46
- package/build-module/notice/list.native.js.map +1 -1
- package/build-module/palette-edit/index.js +3 -2
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/sandbox/index.js +2 -2
- package/build-module/sandbox/index.js.map +1 -1
- package/build-module/select-control/styles/select-control-styles.js +5 -5
- package/build-module/select-control/styles/select-control-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/text/hook.js +5 -5
- package/build-module/text/hook.js.map +1 -1
- package/build-module/text/styles/text-mixins.native.js +2 -2
- package/build-module/text/styles/text-mixins.native.js.map +1 -1
- package/build-module/text/styles.js +7 -7
- package/build-module/text/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/ui/spinner/component.js +1 -1
- package/build-module/ui/spinner/component.js.map +1 -1
- package/build-module/unit-control/index.js +7 -2
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/colors-values.js +24 -26
- 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 +21 -4
- package/build-style/style.css +21 -4
- package/build-types/base-control/index.d.ts +35 -76
- 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 +6 -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/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-picker/styles.d.ts +1 -1
- package/build-types/input-control/index.d.ts +22 -3
- package/build-types/input-control/index.d.ts.map +1 -1
- package/build-types/input-control/input-field.d.ts +1 -1
- package/build-types/input-control/input-field.d.ts.map +1 -1
- package/build-types/input-control/stories/index.d.ts +17 -0
- package/build-types/input-control/stories/index.d.ts.map +1 -0
- package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
- package/build-types/input-control/types.d.ts +73 -3
- 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/styles/number-control-styles.d.ts +1 -1
- package/build-types/text/test/index.d.ts +2 -0
- package/build-types/text/test/index.d.ts.map +1 -0
- 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 +6 -2
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/types.d.ts +5 -1
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/utils/colors-values.d.ts +68 -148
- 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/alignment-matrix-control/styles/alignment-matrix-control-styles.js +5 -3
- package/src/animate/README.md +1 -1
- package/src/base-control/README.md +11 -11
- 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} +0 -0
- 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/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/color-palette/README.md +6 -0
- package/src/color-palette/stories/index.js +8 -1
- package/src/custom-select-control/index.js +7 -1
- package/src/custom-select-control/style.scss +5 -1
- package/src/disabled/README.md +7 -10
- package/src/flyout/test/__snapshots__/index.js.snap +7 -7
- package/src/form-toggle/README.md +1 -1
- package/src/guide/index.js +12 -13
- package/src/guide/style.scss +0 -4
- package/src/heading/hook.ts +1 -1
- package/src/heading/test/__snapshots__/index.js.snap +3 -3
- package/src/index.js +8 -0
- package/src/input-control/README.md +2 -2
- package/src/input-control/index.tsx +22 -3
- package/src/input-control/stories/index.tsx +63 -0
- package/src/input-control/styles/input-control-styles.tsx +1 -2
- package/src/input-control/types.ts +73 -2
- 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/navigation/styles/navigation-styles.js +5 -5
- package/src/notice/index.native.js +44 -54
- package/src/notice/list.native.js +27 -51
- package/src/notice/style.native.scss +1 -0
- package/src/palette-edit/index.js +8 -2
- package/src/query-controls/README.md +2 -2
- package/src/sandbox/index.js +2 -2
- package/src/select-control/styles/select-control-styles.ts +1 -1
- package/src/surface/styles.js +1 -1
- package/src/surface/test/__snapshots__/index.js.snap +11 -11
- package/src/text/hook.js +1 -1
- package/src/text/styles/text-mixins.native.js +2 -2
- package/src/text/styles.js +1 -1
- package/src/text/test/__snapshots__/{index.js.snap → index.tsx.snap} +16 -0
- package/src/text/test/{index.js → index.tsx} +12 -6
- 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 +20 -0
- package/src/tools-panel/test/__snapshots__/index.js.snap +9 -9
- package/src/ui/spinner/component.js +1 -1
- package/src/ui/spinner/test/__snapshots__/index.js.snap +3 -3
- package/src/unit-control/README.md +6 -0
- package/src/unit-control/index.tsx +6 -1
- package/src/unit-control/test/index.js +120 -0
- package/src/unit-control/types.ts +5 -1
- package/src/utils/colors-values.js +22 -25
- package/src/utils/config-values.js +9 -4
- package/tsconfig.json +11 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/build/guide/finish-button.js +0 -44
- package/build/guide/finish-button.js.map +0 -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/guide/finish-button.js +0 -34
- package/build-module/guide/finish-button.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 -118
- package/src/base-control/stories/index.js +0 -81
- package/src/guide/finish-button.js +0 -26
- package/src/guide/test/finish-button.js +0 -49
- package/src/input-control/stories/index.js +0 -71
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { Border, ColorProps, LabelProps } from '../border-control/types';
|
|
5
|
+
|
|
6
|
+
export type Borders = {
|
|
7
|
+
top?: Border;
|
|
8
|
+
right?: Border;
|
|
9
|
+
bottom?: Border;
|
|
10
|
+
left?: Border;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type AnyBorder = Border | Borders | undefined;
|
|
14
|
+
export type BorderProp = keyof Border;
|
|
15
|
+
export type BorderSide = keyof Borders;
|
|
16
|
+
|
|
17
|
+
export type PopoverClassNames = {
|
|
18
|
+
linked?: string;
|
|
19
|
+
top?: string;
|
|
20
|
+
right?: string;
|
|
21
|
+
bottom?: string;
|
|
22
|
+
left?: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type BorderBoxControlProps = ColorProps &
|
|
26
|
+
LabelProps & {
|
|
27
|
+
/**
|
|
28
|
+
* This controls whether to support border style selections.
|
|
29
|
+
*/
|
|
30
|
+
enableStyle?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* A callback function invoked when any border value is changed. The value
|
|
33
|
+
* received may be a "flat" border object, one that has properties defining
|
|
34
|
+
* individual side borders, or `undefined`.
|
|
35
|
+
*/
|
|
36
|
+
onChange: ( value: AnyBorder ) => void;
|
|
37
|
+
/**
|
|
38
|
+
* An object defining CSS classnames for all the inner `BorderControl`
|
|
39
|
+
* popover content.
|
|
40
|
+
*/
|
|
41
|
+
popoverClassNames?: PopoverClassNames;
|
|
42
|
+
/**
|
|
43
|
+
* An object representing the current border configuration.
|
|
44
|
+
*
|
|
45
|
+
* This may be a "flat" border where the object has `color`, `style`, and
|
|
46
|
+
* `width` properties or a "split" border which defines the previous
|
|
47
|
+
* properties but for each side; `top`, `right`, `bottom`, and `left`.
|
|
48
|
+
*/
|
|
49
|
+
value: AnyBorder;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export type LinkedButtonProps = {
|
|
53
|
+
/**
|
|
54
|
+
* This prop allows the `LinkedButton` to reflect whether the parent
|
|
55
|
+
* `BorderBoxControl` is currently displaying "linked" or "unlinked"
|
|
56
|
+
* border controls.
|
|
57
|
+
*/
|
|
58
|
+
isLinked: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* A callback invoked when this `LinkedButton` is clicked. It is used to
|
|
61
|
+
* toggle display between linked or split border controls within the parent
|
|
62
|
+
* `BorderBoxControl`.
|
|
63
|
+
*/
|
|
64
|
+
onClick: () => void;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type VisualizerProps = {
|
|
68
|
+
/**
|
|
69
|
+
* An object representing the current border configuration. It contains
|
|
70
|
+
* properties for each side, with each side an object reflecting the border
|
|
71
|
+
* color, style, and width.
|
|
72
|
+
*/
|
|
73
|
+
value?: Borders;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export type SplitControlsProps = ColorProps & {
|
|
77
|
+
/**
|
|
78
|
+
* This controls whether to include border style options within the
|
|
79
|
+
* individual `BorderControl` components.
|
|
80
|
+
*/
|
|
81
|
+
enableStyle?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* A callback that is invoked whenever an individual side's border has
|
|
84
|
+
* changed.
|
|
85
|
+
*/
|
|
86
|
+
onChange: ( value: Border | undefined, side: BorderSide ) => void;
|
|
87
|
+
/**
|
|
88
|
+
* An object defining CSS classnames for the split side `BorderControl`s'
|
|
89
|
+
* popover content.
|
|
90
|
+
*/
|
|
91
|
+
popoverClassNames?: PopoverClassNames;
|
|
92
|
+
/**
|
|
93
|
+
* An object representing the current border configuration. It contains
|
|
94
|
+
* properties for each side, with each side an object reflecting the border
|
|
95
|
+
* color, style, and width.
|
|
96
|
+
*/
|
|
97
|
+
value?: Borders;
|
|
98
|
+
};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { CSSProperties } from 'react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import type { Border } from '../border-control/types';
|
|
10
|
+
import type { AnyBorder, Borders, BorderProp, BorderSide } from './types';
|
|
11
|
+
|
|
12
|
+
const sides: BorderSide[] = [ 'top', 'right', 'bottom', 'left' ];
|
|
13
|
+
const borderProps: BorderProp[] = [ 'color', 'style', 'width' ];
|
|
14
|
+
|
|
15
|
+
export const isEmptyBorder = ( border?: Border ) => {
|
|
16
|
+
if ( ! border ) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return ! borderProps.some( ( prop ) => border[ prop ] !== undefined );
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const isDefinedBorder = ( border: AnyBorder ) => {
|
|
23
|
+
// No border, no worries :)
|
|
24
|
+
if ( ! border ) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// If we have individual borders per side within the border object we
|
|
29
|
+
// need to check whether any of those side borders have been set.
|
|
30
|
+
if ( hasSplitBorders( border ) ) {
|
|
31
|
+
const allSidesEmpty = sides.every( ( side ) =>
|
|
32
|
+
isEmptyBorder( ( border as Borders )[ side ] )
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
return ! allSidesEmpty;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// If we have a top-level border only, check if that is empty. e.g.
|
|
39
|
+
// { color: undefined, style: undefined, width: undefined }
|
|
40
|
+
// Border radius can still be set within the border object as it is
|
|
41
|
+
// handled separately.
|
|
42
|
+
return ! isEmptyBorder( border as Border );
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const isCompleteBorder = ( border?: Border ) => {
|
|
46
|
+
if ( ! border ) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return borderProps.every( ( prop ) => border[ prop ] !== undefined );
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const hasSplitBorders = ( border: AnyBorder = {} ) => {
|
|
54
|
+
return Object.keys( border ).some(
|
|
55
|
+
( side ) => sides.indexOf( side as BorderSide ) !== -1
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const hasMixedBorders = ( borders: AnyBorder ) => {
|
|
60
|
+
if ( ! hasSplitBorders( borders ) ) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const shorthandBorders = sides.map( ( side: BorderSide ) =>
|
|
65
|
+
getShorthandBorderStyle( ( borders as Borders )?.[ side ] )
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
return ! shorthandBorders.every(
|
|
69
|
+
( border ) => border === shorthandBorders[ 0 ]
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const getSplitBorders = ( border?: Border ) => {
|
|
74
|
+
if ( ! border || isEmptyBorder( border ) ) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
top: border,
|
|
80
|
+
right: border,
|
|
81
|
+
bottom: border,
|
|
82
|
+
left: border,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const getBorderDiff = ( original: Border, updated: Border ) => {
|
|
87
|
+
const diff: Border = {};
|
|
88
|
+
|
|
89
|
+
if ( original.color !== updated.color ) {
|
|
90
|
+
diff.color = updated.color;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if ( original.style !== updated.style ) {
|
|
94
|
+
diff.style = updated.style;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( original.width !== updated.width ) {
|
|
98
|
+
diff.width = updated.width;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return diff;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const getCommonBorder = ( borders?: Borders ) => {
|
|
105
|
+
if ( ! borders ) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const colors: ( CSSProperties[ 'borderColor' ] | undefined )[] = [];
|
|
110
|
+
const styles: ( CSSProperties[ 'borderStyle' ] | undefined )[] = [];
|
|
111
|
+
const widths: ( CSSProperties[ 'borderWidth' ] | undefined )[] = [];
|
|
112
|
+
|
|
113
|
+
sides.forEach( ( side ) => {
|
|
114
|
+
colors.push( borders[ side ]?.color );
|
|
115
|
+
styles.push( borders[ side ]?.style );
|
|
116
|
+
widths.push( borders[ side ]?.width );
|
|
117
|
+
} );
|
|
118
|
+
|
|
119
|
+
const allColorsMatch = colors.every( ( value ) => value === colors[ 0 ] );
|
|
120
|
+
const allStylesMatch = styles.every( ( value ) => value === styles[ 0 ] );
|
|
121
|
+
const allWidthsMatch = widths.every( ( value ) => value === widths[ 0 ] );
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
color: allColorsMatch ? colors[ 0 ] : undefined,
|
|
125
|
+
style: allStylesMatch ? styles[ 0 ] : undefined,
|
|
126
|
+
width: allWidthsMatch ? widths[ 0 ] : undefined,
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const getShorthandBorderStyle = (
|
|
131
|
+
border?: Border,
|
|
132
|
+
fallbackBorder?: Border
|
|
133
|
+
) => {
|
|
134
|
+
if ( isEmptyBorder( border ) ) {
|
|
135
|
+
return fallbackBorder;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const { color: fallbackColor, style: fallbackStyle, width: fallbackWidth } =
|
|
139
|
+
fallbackBorder || {};
|
|
140
|
+
|
|
141
|
+
const {
|
|
142
|
+
color = fallbackColor,
|
|
143
|
+
style = fallbackStyle,
|
|
144
|
+
width = fallbackWidth,
|
|
145
|
+
} = border as Border;
|
|
146
|
+
|
|
147
|
+
const hasVisibleBorder = ( !! width && width !== '0' ) || !! color;
|
|
148
|
+
const borderStyle = hasVisibleBorder ? style || 'solid' : style;
|
|
149
|
+
|
|
150
|
+
return [ width, borderStyle, color ].filter( Boolean ).join( ' ' );
|
|
151
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# BorderControl
|
|
2
|
+
|
|
3
|
+
<div class="callout callout-alert">
|
|
4
|
+
This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
|
|
5
|
+
</div>
|
|
6
|
+
<br />
|
|
7
|
+
This component provides control over a border's color, style, and width.
|
|
8
|
+
|
|
9
|
+
## Development guidelines
|
|
10
|
+
|
|
11
|
+
The `BorderControl` brings together internal sub-components which allow users to
|
|
12
|
+
set the various properties of a border. The first sub-component, a
|
|
13
|
+
`BorderDropdown` contains options representing border color and style. The
|
|
14
|
+
border width is controlled via a `UnitControl` and an optional `RangeControl`.
|
|
15
|
+
|
|
16
|
+
Border radius is not covered by this control as it may be desired separate to
|
|
17
|
+
color, style, and width. For example, the border radius may be absorbed under
|
|
18
|
+
a "shape" abstraction.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```jsx
|
|
23
|
+
import { __experimentalBorderControl as BorderControl } from '@wordpress/components';
|
|
24
|
+
import { __ } from '@wordpress/i18n';
|
|
25
|
+
|
|
26
|
+
const colors = [
|
|
27
|
+
{ name: 'Blue 20', color: '#72aee6' },
|
|
28
|
+
// ...
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const MyBorderControl = () => {
|
|
32
|
+
const [ border, setBorder ] = useState();
|
|
33
|
+
const onChange = ( newBorder ) => setBorder( newBorder );
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<BorderControl
|
|
37
|
+
colors={ colors }
|
|
38
|
+
label={ __( 'Border' ) }
|
|
39
|
+
onChange={ onChange }
|
|
40
|
+
value={ border }
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If you're using this component outside the editor, you can
|
|
47
|
+
[ensure `Tooltip` positioning](/packages/components/README.md#popovers-and-tooltips)
|
|
48
|
+
for the `BorderControl`'s color and style options, by rendering your
|
|
49
|
+
`BorderControl` with a `Popover.Slot` further up the element tree and within a
|
|
50
|
+
`SlotFillProvider` overall.
|
|
51
|
+
|
|
52
|
+
## Props
|
|
53
|
+
|
|
54
|
+
### `colors`: `Array`
|
|
55
|
+
|
|
56
|
+
An array of color definitions. This may also be a multi-dimensional array where
|
|
57
|
+
colors are organized by multiple origins.
|
|
58
|
+
|
|
59
|
+
Each color may be an object containing a `name` and `color` value.
|
|
60
|
+
|
|
61
|
+
- Required: No
|
|
62
|
+
|
|
63
|
+
### `disableCustomColors`: `boolean`
|
|
64
|
+
|
|
65
|
+
This toggles the ability to choose custom colors.
|
|
66
|
+
|
|
67
|
+
- Required: No
|
|
68
|
+
|
|
69
|
+
### `enableAlpha`: `boolean`
|
|
70
|
+
|
|
71
|
+
This controls whether the alpha channel will be offered when selecting
|
|
72
|
+
custom colors.
|
|
73
|
+
|
|
74
|
+
- Required: No
|
|
75
|
+
|
|
76
|
+
### `enableStyle`: `boolean`
|
|
77
|
+
|
|
78
|
+
This controls whether to include border style options within the
|
|
79
|
+
`BorderDropdown` sub-component.
|
|
80
|
+
|
|
81
|
+
- Required: No
|
|
82
|
+
- Default: `true`
|
|
83
|
+
|
|
84
|
+
### `hideLabelFromVision`: `boolean`
|
|
85
|
+
|
|
86
|
+
Provides control over whether the label will only be visible to screen readers.
|
|
87
|
+
|
|
88
|
+
- Required: No
|
|
89
|
+
|
|
90
|
+
### `isCompact`: `boolean`
|
|
91
|
+
|
|
92
|
+
This flags the `BorderControl` to render with a more compact appearance. It
|
|
93
|
+
restricts the width of the control and prevents it from expanding to take up
|
|
94
|
+
additional space.
|
|
95
|
+
|
|
96
|
+
- Required: No
|
|
97
|
+
|
|
98
|
+
### `label`: `string`
|
|
99
|
+
|
|
100
|
+
If provided, a label will be generated using this as the content.
|
|
101
|
+
|
|
102
|
+
_Whether it is visible only to screen readers is controlled via
|
|
103
|
+
`hideLabelFromVision`._
|
|
104
|
+
|
|
105
|
+
- Required: No
|
|
106
|
+
|
|
107
|
+
### `onChange`: `( value?: Object ) => void`
|
|
108
|
+
|
|
109
|
+
A callback function invoked when the border value is changed via an interaction
|
|
110
|
+
that selects or clears, border color, style, or width.
|
|
111
|
+
|
|
112
|
+
_Note: the value may be `undefined` if a user clears all border properties._
|
|
113
|
+
|
|
114
|
+
- Required: Yes
|
|
115
|
+
|
|
116
|
+
### `popoverContentClassName`: `string`
|
|
117
|
+
|
|
118
|
+
A custom CSS class name to be assigned to the `BorderControl`'s dropdown
|
|
119
|
+
popover content.
|
|
120
|
+
|
|
121
|
+
- Required: No
|
|
122
|
+
|
|
123
|
+
### `shouldSanitizeBorder`: `boolean`
|
|
124
|
+
|
|
125
|
+
If opted into, sanitizing the border means that if no width or color have been
|
|
126
|
+
selected, the border style is also cleared and `undefined` is returned as the
|
|
127
|
+
new border value.
|
|
128
|
+
|
|
129
|
+
- Required: No
|
|
130
|
+
- Default: true
|
|
131
|
+
|
|
132
|
+
### `showDropdownHeader`: `boolean`
|
|
133
|
+
|
|
134
|
+
Whether or not to render a header for the border color and style picker
|
|
135
|
+
dropdown. The header includes a label for the color picker and a close button.
|
|
136
|
+
|
|
137
|
+
- Required: No
|
|
138
|
+
|
|
139
|
+
### `value`: `Object`
|
|
140
|
+
|
|
141
|
+
An object representing a border or `undefined`. Used to set the current border
|
|
142
|
+
configuration for this component.
|
|
143
|
+
|
|
144
|
+
Example:
|
|
145
|
+
```js
|
|
146
|
+
{
|
|
147
|
+
color: '#72aee6',
|
|
148
|
+
style: 'solid',
|
|
149
|
+
width: '2px,
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- Required: No
|
|
154
|
+
|
|
155
|
+
### `width`: `CSSProperties[ 'width' ]`
|
|
156
|
+
|
|
157
|
+
Controls the visual width of the `BorderControl`. It has no effect if the
|
|
158
|
+
`isCompact` prop is set to `true`.
|
|
159
|
+
|
|
160
|
+
- Required: No
|
|
161
|
+
|
|
162
|
+
### `withSlider`: `boolean`
|
|
163
|
+
|
|
164
|
+
Flags whether this `BorderControl` should also render a `RangeControl` for
|
|
165
|
+
additional control over a border's width.
|
|
166
|
+
|
|
167
|
+
- Required: No
|
|
168
|
+
|
|
169
|
+
### `__experimentalHasMultipleOrigins`: `boolean`
|
|
170
|
+
|
|
171
|
+
This is passed on to the color related sub-components which need to be made
|
|
172
|
+
aware of whether the colors prop contains multiple origins.
|
|
173
|
+
|
|
174
|
+
- Required: No
|
|
175
|
+
|
|
176
|
+
### `__experimentalIsRenderedInSidebar`: `boolean`
|
|
177
|
+
|
|
178
|
+
This is passed on to the color related sub-components so they may render more
|
|
179
|
+
effectively when used within a sidebar.
|
|
180
|
+
|
|
181
|
+
- Required: No
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import BorderControlDropdown from '../border-control-dropdown';
|
|
5
|
+
import UnitControl from '../../unit-control';
|
|
6
|
+
import RangeControl from '../../range-control';
|
|
7
|
+
import { HStack } from '../../h-stack';
|
|
8
|
+
import { StyledLabel } from '../../base-control/styles/base-control-styles';
|
|
9
|
+
import { View } from '../../view';
|
|
10
|
+
import { VisuallyHidden } from '../../visually-hidden';
|
|
11
|
+
import { contextConnect, WordPressComponentProps } from '../../ui/context';
|
|
12
|
+
import { useBorderControl } from './hook';
|
|
13
|
+
|
|
14
|
+
import type { BorderControlProps, LabelProps } from '../types';
|
|
15
|
+
|
|
16
|
+
const BorderLabel = ( props: LabelProps ) => {
|
|
17
|
+
const { label, hideLabelFromVision } = props;
|
|
18
|
+
|
|
19
|
+
if ( ! label ) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return hideLabelFromVision ? (
|
|
24
|
+
<VisuallyHidden as="label">{ label }</VisuallyHidden>
|
|
25
|
+
) : (
|
|
26
|
+
<StyledLabel>{ label }</StyledLabel>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const BorderControl = (
|
|
31
|
+
props: WordPressComponentProps< BorderControlProps, 'div' >,
|
|
32
|
+
forwardedRef: React.ForwardedRef< any >
|
|
33
|
+
) => {
|
|
34
|
+
const {
|
|
35
|
+
colors,
|
|
36
|
+
disableCustomColors,
|
|
37
|
+
enableAlpha,
|
|
38
|
+
enableStyle = true,
|
|
39
|
+
hideLabelFromVision,
|
|
40
|
+
innerWrapperClassName,
|
|
41
|
+
label,
|
|
42
|
+
onBorderChange,
|
|
43
|
+
onSliderChange,
|
|
44
|
+
onWidthChange,
|
|
45
|
+
placeholder,
|
|
46
|
+
popoverContentClassName,
|
|
47
|
+
previousStyleSelection,
|
|
48
|
+
showDropdownHeader,
|
|
49
|
+
sliderClassName,
|
|
50
|
+
value: border,
|
|
51
|
+
widthControlClassName,
|
|
52
|
+
widthUnit,
|
|
53
|
+
widthValue,
|
|
54
|
+
withSlider,
|
|
55
|
+
__experimentalHasMultipleOrigins,
|
|
56
|
+
__experimentalIsRenderedInSidebar,
|
|
57
|
+
...otherProps
|
|
58
|
+
} = useBorderControl( props );
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<View { ...otherProps } ref={ forwardedRef }>
|
|
62
|
+
<BorderLabel
|
|
63
|
+
label={ label }
|
|
64
|
+
hideLabelFromVision={ hideLabelFromVision }
|
|
65
|
+
/>
|
|
66
|
+
<HStack spacing={ 3 }>
|
|
67
|
+
<HStack className={ innerWrapperClassName } alignment="stretch">
|
|
68
|
+
<BorderControlDropdown
|
|
69
|
+
border={ border }
|
|
70
|
+
colors={ colors }
|
|
71
|
+
contentClassName={ popoverContentClassName }
|
|
72
|
+
disableCustomColors={ disableCustomColors }
|
|
73
|
+
enableAlpha={ enableAlpha }
|
|
74
|
+
enableStyle={ enableStyle }
|
|
75
|
+
onChange={ onBorderChange }
|
|
76
|
+
previousStyleSelection={ previousStyleSelection }
|
|
77
|
+
showDropdownHeader={ showDropdownHeader }
|
|
78
|
+
__experimentalHasMultipleOrigins={
|
|
79
|
+
__experimentalHasMultipleOrigins
|
|
80
|
+
}
|
|
81
|
+
__experimentalIsRenderedInSidebar={
|
|
82
|
+
__experimentalIsRenderedInSidebar
|
|
83
|
+
}
|
|
84
|
+
/>
|
|
85
|
+
<UnitControl
|
|
86
|
+
className={ widthControlClassName }
|
|
87
|
+
min={ 0 }
|
|
88
|
+
onChange={ onWidthChange }
|
|
89
|
+
value={ border?.width || '' }
|
|
90
|
+
placeholder={ placeholder }
|
|
91
|
+
/>
|
|
92
|
+
</HStack>
|
|
93
|
+
{ withSlider && (
|
|
94
|
+
<RangeControl
|
|
95
|
+
className={ sliderClassName }
|
|
96
|
+
initialPosition={ 0 }
|
|
97
|
+
max={ 100 }
|
|
98
|
+
min={ 0 }
|
|
99
|
+
onChange={ onSliderChange }
|
|
100
|
+
step={ [ 'px', '%' ].includes( widthUnit ) ? 1 : 0.1 }
|
|
101
|
+
value={ widthValue || undefined }
|
|
102
|
+
withInputField={ false }
|
|
103
|
+
/>
|
|
104
|
+
) }
|
|
105
|
+
</HStack>
|
|
106
|
+
</View>
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const ConnectedBorderControl = contextConnect( BorderControl, 'BorderControl' );
|
|
111
|
+
|
|
112
|
+
export default ConnectedBorderControl;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useCallback, useMemo, useState } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import * as styles from '../styles';
|
|
10
|
+
import { parseQuantityAndUnitFromRawValue } from '../../unit-control/utils';
|
|
11
|
+
import { useContextSystem, WordPressComponentProps } from '../../ui/context';
|
|
12
|
+
import { useCx } from '../../utils/hooks/use-cx';
|
|
13
|
+
|
|
14
|
+
import type { Border, BorderControlProps } from '../types';
|
|
15
|
+
|
|
16
|
+
const sanitizeBorder = ( border?: Border ) => {
|
|
17
|
+
const hasNoWidth = border?.width === undefined || border.width === '';
|
|
18
|
+
const hasNoColor = border?.color === undefined;
|
|
19
|
+
|
|
20
|
+
// If width and color are undefined, unset any style selection as well.
|
|
21
|
+
if ( hasNoWidth && hasNoColor ) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return border;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export function useBorderControl(
|
|
29
|
+
props: WordPressComponentProps< BorderControlProps, 'div' >
|
|
30
|
+
) {
|
|
31
|
+
const {
|
|
32
|
+
className,
|
|
33
|
+
isCompact,
|
|
34
|
+
onChange,
|
|
35
|
+
shouldSanitizeBorder = true,
|
|
36
|
+
value: border,
|
|
37
|
+
width,
|
|
38
|
+
...otherProps
|
|
39
|
+
} = useContextSystem( props, 'BorderControl' );
|
|
40
|
+
|
|
41
|
+
const [ widthValue, originalWidthUnit ] = parseQuantityAndUnitFromRawValue(
|
|
42
|
+
border?.width
|
|
43
|
+
);
|
|
44
|
+
const widthUnit = originalWidthUnit || 'px';
|
|
45
|
+
const hadPreviousZeroWidth = widthValue === 0;
|
|
46
|
+
|
|
47
|
+
const [ colorSelection, setColorSelection ] = useState< string >();
|
|
48
|
+
const [ styleSelection, setStyleSelection ] = useState< string >();
|
|
49
|
+
|
|
50
|
+
const onBorderChange = useCallback(
|
|
51
|
+
( newBorder?: Border ) => {
|
|
52
|
+
if ( shouldSanitizeBorder ) {
|
|
53
|
+
return onChange( sanitizeBorder( newBorder ) );
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
onChange( newBorder );
|
|
57
|
+
},
|
|
58
|
+
[ onChange, shouldSanitizeBorder, sanitizeBorder ]
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const onWidthChange = useCallback(
|
|
62
|
+
( newWidth?: string ) => {
|
|
63
|
+
const newWidthValue = newWidth === '' ? undefined : newWidth;
|
|
64
|
+
const [ parsedValue ] = parseQuantityAndUnitFromRawValue(
|
|
65
|
+
newWidth
|
|
66
|
+
);
|
|
67
|
+
const hasZeroWidth = parsedValue === 0;
|
|
68
|
+
|
|
69
|
+
const updatedBorder = { ...border, width: newWidthValue };
|
|
70
|
+
|
|
71
|
+
// Setting the border width explicitly to zero will also set the
|
|
72
|
+
// border style to `none` and clear the border color.
|
|
73
|
+
if ( hasZeroWidth && ! hadPreviousZeroWidth ) {
|
|
74
|
+
// Before clearing the color and style selections, keep track of
|
|
75
|
+
// the current selections so they can be restored when the width
|
|
76
|
+
// changes to a non-zero value.
|
|
77
|
+
setColorSelection( border?.color );
|
|
78
|
+
setStyleSelection( border?.style );
|
|
79
|
+
|
|
80
|
+
// Clear the color and style border properties.
|
|
81
|
+
updatedBorder.color = undefined;
|
|
82
|
+
updatedBorder.style = 'none';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Selection has changed from zero border width to non-zero width.
|
|
86
|
+
if ( ! hasZeroWidth && hadPreviousZeroWidth ) {
|
|
87
|
+
// Restore previous border color and style selections if width
|
|
88
|
+
// is now not zero.
|
|
89
|
+
if ( updatedBorder.color === undefined ) {
|
|
90
|
+
updatedBorder.color = colorSelection;
|
|
91
|
+
}
|
|
92
|
+
if ( updatedBorder.style === 'none' ) {
|
|
93
|
+
updatedBorder.style = styleSelection;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
onBorderChange( updatedBorder );
|
|
98
|
+
},
|
|
99
|
+
[ border, hadPreviousZeroWidth, onBorderChange ]
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
const onSliderChange = useCallback(
|
|
103
|
+
( value: string ) => {
|
|
104
|
+
onWidthChange( `${ value }${ widthUnit }` );
|
|
105
|
+
},
|
|
106
|
+
[ onWidthChange, widthUnit ]
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
// Generate class names.
|
|
110
|
+
const cx = useCx();
|
|
111
|
+
const classes = useMemo( () => {
|
|
112
|
+
return cx( styles.borderControl, className );
|
|
113
|
+
}, [ className, cx ] );
|
|
114
|
+
|
|
115
|
+
const innerWrapperClassName = useMemo( () => {
|
|
116
|
+
const wrapperWidth = isCompact ? '90px' : width;
|
|
117
|
+
const widthStyle =
|
|
118
|
+
!! wrapperWidth && styles.wrapperWidth( wrapperWidth );
|
|
119
|
+
|
|
120
|
+
return cx( styles.innerWrapper(), widthStyle );
|
|
121
|
+
}, [ isCompact, width, cx ] );
|
|
122
|
+
|
|
123
|
+
const widthControlClassName = useMemo( () => {
|
|
124
|
+
return cx( styles.borderWidthControl() );
|
|
125
|
+
}, [ cx ] );
|
|
126
|
+
|
|
127
|
+
const sliderClassName = useMemo( () => {
|
|
128
|
+
return cx( styles.borderSlider() );
|
|
129
|
+
}, [ cx ] );
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
...otherProps,
|
|
133
|
+
className: classes,
|
|
134
|
+
innerWrapperClassName,
|
|
135
|
+
onBorderChange,
|
|
136
|
+
onSliderChange,
|
|
137
|
+
onWidthChange,
|
|
138
|
+
previousStyleSelection: styleSelection,
|
|
139
|
+
sliderClassName,
|
|
140
|
+
value: border,
|
|
141
|
+
widthControlClassName,
|
|
142
|
+
widthUnit,
|
|
143
|
+
widthValue,
|
|
144
|
+
};
|
|
145
|
+
}
|