@wordpress/components 19.7.0 → 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 +27 -1
- package/README.md +38 -0
- 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/index.js +40 -0
- package/build/index.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/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 +7 -2
- package/build/unit-control/index.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 +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/index.js +3 -1
- package/build-module/index.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/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 +7 -2
- package/build-module/unit-control/index.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 +4 -1
- package/build-style/style.css +4 -1
- 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/item-group/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 +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 +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 +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/index.js +8 -0
- 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/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/tools-panel/test/__snapshots__/index.js.snap +8 -8
- 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 +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 -118
- package/src/base-control/stories/index.js +0 -81
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { CSSProperties } from 'react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
10
|
+
import { closeSmall } from '@wordpress/icons';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
import BorderControlStylePicker from '../border-control-style-picker';
|
|
16
|
+
import Button from '../../button';
|
|
17
|
+
import ColorIndicator from '../../color-indicator';
|
|
18
|
+
import ColorPalette from '../../color-palette';
|
|
19
|
+
import Dropdown from '../../dropdown';
|
|
20
|
+
import { HStack } from '../../h-stack';
|
|
21
|
+
import { VStack } from '../../v-stack';
|
|
22
|
+
import { contextConnect, WordPressComponentProps } from '../../ui/context';
|
|
23
|
+
import { useBorderControlDropdown } from './hook';
|
|
24
|
+
import { StyledLabel } from '../../base-control/styles/base-control-styles';
|
|
25
|
+
|
|
26
|
+
import type {
|
|
27
|
+
Color,
|
|
28
|
+
ColorOrigin,
|
|
29
|
+
Colors,
|
|
30
|
+
DropdownProps,
|
|
31
|
+
PopoverProps,
|
|
32
|
+
} from '../types';
|
|
33
|
+
|
|
34
|
+
const noop = () => undefined;
|
|
35
|
+
const getColorObject = (
|
|
36
|
+
colorValue: CSSProperties[ 'borderColor' ],
|
|
37
|
+
colors: Colors | undefined,
|
|
38
|
+
hasMultipleColorOrigins: boolean
|
|
39
|
+
) => {
|
|
40
|
+
if ( ! colorValue || ! colors ) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if ( hasMultipleColorOrigins ) {
|
|
45
|
+
let matchedColor;
|
|
46
|
+
|
|
47
|
+
( colors as ColorOrigin[] ).some( ( origin ) =>
|
|
48
|
+
origin.colors.some( ( color ) => {
|
|
49
|
+
if ( color.color === colorValue ) {
|
|
50
|
+
matchedColor = color;
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return false;
|
|
55
|
+
} )
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
return matchedColor;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return ( colors as Color[] ).find(
|
|
62
|
+
( color ) => color.color === colorValue
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const getToggleAriaLabel = (
|
|
67
|
+
colorValue: CSSProperties[ 'borderColor' ],
|
|
68
|
+
colorObject: Color | undefined,
|
|
69
|
+
style: CSSProperties[ 'borderStyle' ],
|
|
70
|
+
isStyleEnabled: boolean
|
|
71
|
+
) => {
|
|
72
|
+
if ( isStyleEnabled ) {
|
|
73
|
+
if ( colorObject ) {
|
|
74
|
+
return style
|
|
75
|
+
? sprintf(
|
|
76
|
+
// translators: %1$s: The name of the color e.g. "vivid red". %2$s: The color's hex code e.g.: "#f00:". %3$s: The current border style selection e.g. "solid".
|
|
77
|
+
'Border color and style picker. The currently selected color is called "%1$s" and has a value of "%2$s". The currently selected style is "%3$s".',
|
|
78
|
+
colorObject.name,
|
|
79
|
+
colorObject.color,
|
|
80
|
+
style
|
|
81
|
+
)
|
|
82
|
+
: sprintf(
|
|
83
|
+
// translators: %1$s: The name of the color e.g. "vivid red". %2$s: The color's hex code e.g.: "#f00:".
|
|
84
|
+
'Border color and style picker. The currently selected color is called "%1$s" and has a value of "%2$s".',
|
|
85
|
+
colorObject.name,
|
|
86
|
+
colorObject.color
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if ( colorValue ) {
|
|
91
|
+
return style
|
|
92
|
+
? sprintf(
|
|
93
|
+
// translators: %1$s: The color's hex code e.g.: "#f00:". %2$s: The current border style selection e.g. "solid".
|
|
94
|
+
'Border color and style picker. The currently selected color has a value of "%1$s". The currently selected style is "%2$s".',
|
|
95
|
+
colorValue,
|
|
96
|
+
style
|
|
97
|
+
)
|
|
98
|
+
: sprintf(
|
|
99
|
+
// translators: %1$s: The color's hex code e.g.: "#f00:".
|
|
100
|
+
'Border color and style picker. The currently selected color has a value of "%1$s".',
|
|
101
|
+
colorValue
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return __( 'Border color and style picker.' );
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if ( colorObject ) {
|
|
109
|
+
return sprintf(
|
|
110
|
+
// translators: %1$s: The name of the color e.g. "vivid red". %2$s: The color's hex code e.g.: "#f00:".
|
|
111
|
+
'Border color picker. The currently selected color is called "%1$s" and has a value of "%2$s".',
|
|
112
|
+
colorObject.name,
|
|
113
|
+
colorObject.color
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if ( colorValue ) {
|
|
118
|
+
return sprintf(
|
|
119
|
+
// translators: %1$s: The color's hex code e.g.: "#f00:".
|
|
120
|
+
'Border color picker. The currently selected color has a value of "%1$s".',
|
|
121
|
+
colorValue
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return __( 'Border color picker.' );
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const BorderControlDropdown = (
|
|
129
|
+
props: WordPressComponentProps< DropdownProps, 'div' >,
|
|
130
|
+
forwardedRef: React.ForwardedRef< any >
|
|
131
|
+
) => {
|
|
132
|
+
const {
|
|
133
|
+
__experimentalHasMultipleOrigins,
|
|
134
|
+
__experimentalIsRenderedInSidebar,
|
|
135
|
+
border,
|
|
136
|
+
colors,
|
|
137
|
+
disableCustomColors,
|
|
138
|
+
enableAlpha,
|
|
139
|
+
indicatorClassName,
|
|
140
|
+
indicatorWrapperClassName,
|
|
141
|
+
onReset,
|
|
142
|
+
onColorChange,
|
|
143
|
+
onStyleChange,
|
|
144
|
+
popoverClassName,
|
|
145
|
+
popoverContentClassName,
|
|
146
|
+
popoverControlsClassName,
|
|
147
|
+
resetButtonClassName,
|
|
148
|
+
showDropdownHeader,
|
|
149
|
+
enableStyle = true,
|
|
150
|
+
...otherProps
|
|
151
|
+
} = useBorderControlDropdown( props );
|
|
152
|
+
|
|
153
|
+
const { color, style } = border || {};
|
|
154
|
+
const colorObject = getColorObject(
|
|
155
|
+
color,
|
|
156
|
+
colors,
|
|
157
|
+
!! __experimentalHasMultipleOrigins
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
const toggleAriaLabel = getToggleAriaLabel(
|
|
161
|
+
color,
|
|
162
|
+
colorObject,
|
|
163
|
+
style,
|
|
164
|
+
enableStyle
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
const dropdownPosition = __experimentalIsRenderedInSidebar
|
|
168
|
+
? 'bottom left'
|
|
169
|
+
: undefined;
|
|
170
|
+
|
|
171
|
+
const renderToggle = ( { onToggle = noop } ) => (
|
|
172
|
+
<Button
|
|
173
|
+
onClick={ onToggle }
|
|
174
|
+
variant="tertiary"
|
|
175
|
+
aria-label={ toggleAriaLabel }
|
|
176
|
+
position={ dropdownPosition }
|
|
177
|
+
>
|
|
178
|
+
<span className={ indicatorWrapperClassName }>
|
|
179
|
+
<ColorIndicator
|
|
180
|
+
className={ indicatorClassName }
|
|
181
|
+
colorValue={ color }
|
|
182
|
+
/>
|
|
183
|
+
</span>
|
|
184
|
+
</Button>
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
const renderContent = ( { onClose }: PopoverProps ) => (
|
|
188
|
+
<>
|
|
189
|
+
<VStack className={ popoverControlsClassName } spacing={ 6 }>
|
|
190
|
+
{ showDropdownHeader ? (
|
|
191
|
+
<HStack>
|
|
192
|
+
<StyledLabel>{ __( 'Border color' ) }</StyledLabel>
|
|
193
|
+
<Button
|
|
194
|
+
isSmall
|
|
195
|
+
label={ __( 'Close border color' ) }
|
|
196
|
+
icon={ closeSmall }
|
|
197
|
+
onClick={ onClose }
|
|
198
|
+
/>
|
|
199
|
+
</HStack>
|
|
200
|
+
) : undefined }
|
|
201
|
+
<ColorPalette
|
|
202
|
+
className={ popoverContentClassName }
|
|
203
|
+
value={ color }
|
|
204
|
+
onChange={ onColorChange }
|
|
205
|
+
{ ...{ colors, disableCustomColors } }
|
|
206
|
+
__experimentalHasMultipleOrigins={
|
|
207
|
+
__experimentalHasMultipleOrigins
|
|
208
|
+
}
|
|
209
|
+
__experimentalIsRenderedInSidebar={
|
|
210
|
+
__experimentalIsRenderedInSidebar
|
|
211
|
+
}
|
|
212
|
+
clearable={ false }
|
|
213
|
+
enableAlpha={ enableAlpha }
|
|
214
|
+
/>
|
|
215
|
+
{ enableStyle && (
|
|
216
|
+
<BorderControlStylePicker
|
|
217
|
+
label={ __( 'Style' ) }
|
|
218
|
+
value={ style }
|
|
219
|
+
onChange={ onStyleChange }
|
|
220
|
+
/>
|
|
221
|
+
) }
|
|
222
|
+
</VStack>
|
|
223
|
+
<Button
|
|
224
|
+
className={ resetButtonClassName }
|
|
225
|
+
variant="tertiary"
|
|
226
|
+
onClick={ () => {
|
|
227
|
+
onReset();
|
|
228
|
+
onClose();
|
|
229
|
+
} }
|
|
230
|
+
>
|
|
231
|
+
{ __( 'Reset to default' ) }
|
|
232
|
+
</Button>
|
|
233
|
+
</>
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
<Dropdown
|
|
238
|
+
renderToggle={ renderToggle }
|
|
239
|
+
renderContent={ renderContent }
|
|
240
|
+
contentClassName={ popoverClassName }
|
|
241
|
+
{ ...otherProps }
|
|
242
|
+
ref={ forwardedRef }
|
|
243
|
+
/>
|
|
244
|
+
);
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
const ConnectedBorderControlDropdown = contextConnect(
|
|
248
|
+
BorderControlDropdown,
|
|
249
|
+
'BorderControlDropdown'
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
export default ConnectedBorderControlDropdown;
|