@wordpress/components 19.7.0 → 19.8.2
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/guide/index.js +14 -8
- package/build/guide/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/palette-edit/index.js +2 -1
- package/build/palette-edit/index.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/guide/index.js +14 -8
- package/build-module/guide/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/palette-edit/index.js +3 -2
- package/build-module/palette-edit/index.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 -4
- package/build-style/style.css +4 -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/input-control/stories/index.d.ts +17 -0
- package/build-types/input-control/stories/index.d.ts.map +1 -0
- package/build-types/item-group/styles.d.ts.map +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/styles.d.ts +4 -0
- package/build-types/toggle-group-control/toggle-group-control-option/styles.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-base/styles.d.ts +15 -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/guide/index.js +12 -13
- package/src/guide/style.scss +0 -4
- 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/palette-edit/index.js +8 -2
- 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/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/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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { ComponentMeta, ComponentStory } from '@storybook/react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import BaseControl from '..';
|
|
10
|
+
import Button from '../../button';
|
|
11
|
+
|
|
12
|
+
const meta: ComponentMeta< typeof BaseControl > = {
|
|
13
|
+
title: 'Components/BaseControl',
|
|
14
|
+
component: BaseControl,
|
|
15
|
+
argTypes: {
|
|
16
|
+
children: { control: { type: null } },
|
|
17
|
+
help: { control: { type: 'text' } },
|
|
18
|
+
label: { control: { type: 'text' } },
|
|
19
|
+
},
|
|
20
|
+
parameters: {
|
|
21
|
+
controls: { expanded: true },
|
|
22
|
+
docs: { source: { state: 'open' } },
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export default meta;
|
|
26
|
+
|
|
27
|
+
const BaseControlWithTextarea: ComponentStory< typeof BaseControl > = ( {
|
|
28
|
+
id,
|
|
29
|
+
...props
|
|
30
|
+
} ) => {
|
|
31
|
+
return (
|
|
32
|
+
<BaseControl id={ id } { ...props }>
|
|
33
|
+
<textarea style={ { display: 'block' } } id={ id } />
|
|
34
|
+
</BaseControl>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const Default: ComponentStory<
|
|
39
|
+
typeof BaseControl
|
|
40
|
+
> = BaseControlWithTextarea.bind( {} );
|
|
41
|
+
Default.args = {
|
|
42
|
+
__nextHasNoMarginBottom: true,
|
|
43
|
+
id: 'textarea-default-1',
|
|
44
|
+
label: 'Label text',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const WithHelpText = BaseControlWithTextarea.bind( {} );
|
|
48
|
+
WithHelpText.args = {
|
|
49
|
+
...Default.args,
|
|
50
|
+
id: 'textarea-with-help-text-1',
|
|
51
|
+
help: 'Help text adds more explanation.',
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* `BaseControl.VisualLabel` is used to render a purely visual label inside a `BaseControl` component.
|
|
56
|
+
*
|
|
57
|
+
* It should only be used in cases where the children being rendered inside `BaseControl` are already accessibly labeled,
|
|
58
|
+
* e.g., a button, but we want an additional visual label for that section equivalent to the labels `BaseControl` would
|
|
59
|
+
* otherwise use if the `label` prop was passed.
|
|
60
|
+
*/
|
|
61
|
+
export const WithVisualLabel: ComponentStory< typeof BaseControl > = (
|
|
62
|
+
props
|
|
63
|
+
) => {
|
|
64
|
+
BaseControl.VisualLabel.displayName = 'BaseControl.VisualLabel';
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<BaseControl { ...props }>
|
|
68
|
+
<BaseControl.VisualLabel>Visual label</BaseControl.VisualLabel>
|
|
69
|
+
<div>
|
|
70
|
+
<Button variant="secondary">Select an author</Button>
|
|
71
|
+
</div>
|
|
72
|
+
</BaseControl>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
WithVisualLabel.args = {
|
|
76
|
+
...Default.args,
|
|
77
|
+
help: 'This button is already accessibly labeled.',
|
|
78
|
+
id: undefined,
|
|
79
|
+
label: undefined,
|
|
80
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { ReactNode } from 'react';
|
|
5
|
+
|
|
6
|
+
export type BaseControlProps = {
|
|
7
|
+
/**
|
|
8
|
+
* Start opting into the new margin-free styles that will become the default in a future version.
|
|
9
|
+
*
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
__nextHasNoMarginBottom?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The HTML `id` of the element (passed in as a child to `BaseControl`) to which labels and help text are being generated.
|
|
15
|
+
* This is necessary to accessibly associate the label with that element.
|
|
16
|
+
*/
|
|
17
|
+
id?: string;
|
|
18
|
+
/**
|
|
19
|
+
* If this property is added, a help text will be generated using help property as the content.
|
|
20
|
+
*/
|
|
21
|
+
help?: ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* If this property is added, a label will be generated using label property as the content.
|
|
24
|
+
*/
|
|
25
|
+
label?: ReactNode;
|
|
26
|
+
/**
|
|
27
|
+
* If true, the label will only be visible to screen readers.
|
|
28
|
+
*
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
hideLabelFromVision?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
/**
|
|
34
|
+
* The content to be displayed within the `BaseControl`.
|
|
35
|
+
*/
|
|
36
|
+
children: ReactNode;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type BaseControlVisualLabelProps = {
|
|
40
|
+
className?: string;
|
|
41
|
+
children: ReactNode;
|
|
42
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# BorderBoxControl
|
|
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
|
+
|
|
8
|
+
This component provides users with the ability to configure a single "flat"
|
|
9
|
+
border or separate borders per side.
|
|
10
|
+
|
|
11
|
+
## Development guidelines
|
|
12
|
+
|
|
13
|
+
The `BorderBoxControl` effectively has two view states. The first, a "linked"
|
|
14
|
+
view, allows configuration of a flat border via a single `BorderControl`.
|
|
15
|
+
The second, a "split" view, contains a `BorderControl` for each side
|
|
16
|
+
as well as a visualizer for the currently selected borders. Each view also
|
|
17
|
+
contains a button to toggle between the two.
|
|
18
|
+
|
|
19
|
+
When switching from the "split" view to "linked", if the individual side
|
|
20
|
+
borders are not consistent, the "linked" view will display any border properties
|
|
21
|
+
selections that are consistent while showing a mixed state for those that
|
|
22
|
+
aren't. For example, if all borders had the same color and style but different
|
|
23
|
+
widths, then the border dropdown in the "linked" view's `BorderControl` would
|
|
24
|
+
show that consistent color and style but the "linked" view's width input would
|
|
25
|
+
show "Mixed" placeholder text.
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
```jsx
|
|
30
|
+
import { __experimentalBorderBoxControl as BorderBoxControl } from '@wordpress/components';
|
|
31
|
+
import { __ } from '@wordpress/i18n';
|
|
32
|
+
|
|
33
|
+
const colors = [
|
|
34
|
+
{ name: 'Blue 20', color: '#72aee6' },
|
|
35
|
+
// ...
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const MyBorderBoxControl = () => {
|
|
39
|
+
const defaultBorder = {
|
|
40
|
+
color: '#72aee6',
|
|
41
|
+
style: 'dashed',
|
|
42
|
+
width: '1px',
|
|
43
|
+
};
|
|
44
|
+
const [ borders, setBorders ] = useState( {
|
|
45
|
+
top: defaultBorder,
|
|
46
|
+
right: defaultBorder,
|
|
47
|
+
bottom: defaultBorder,
|
|
48
|
+
left: defaultBorder,
|
|
49
|
+
} );
|
|
50
|
+
const onChange = ( newBorders ) => setBorders( newBorders );
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<BorderBoxControl
|
|
54
|
+
colors={ colors }
|
|
55
|
+
label={ __( 'Borders' ) }
|
|
56
|
+
onChange={ onChange }
|
|
57
|
+
value={ borders }
|
|
58
|
+
/>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
If you're using this component outside the editor, you can
|
|
64
|
+
[ensure `Tooltip` positioning](/packages/components/README.md#popovers-and-tooltips)
|
|
65
|
+
for the `BorderBoxControl`'s color and style options, by rendering your
|
|
66
|
+
`BorderBoxControl` with a `Popover.Slot` further up the element tree and within
|
|
67
|
+
a `SlotFillProvider` overall.
|
|
68
|
+
|
|
69
|
+
## Props
|
|
70
|
+
|
|
71
|
+
### `colors`: `Array`
|
|
72
|
+
|
|
73
|
+
An array of color definitions. This may also be a multi-dimensional array where
|
|
74
|
+
colors are organized by multiple origins.
|
|
75
|
+
|
|
76
|
+
Each color may be an object containing a `name` and `color` value.
|
|
77
|
+
|
|
78
|
+
- Required: No
|
|
79
|
+
|
|
80
|
+
### `disableCustomColors`: `boolean`
|
|
81
|
+
|
|
82
|
+
This toggles the ability to choose custom colors.
|
|
83
|
+
|
|
84
|
+
- Required: No
|
|
85
|
+
|
|
86
|
+
### `enableAlpha`: `boolean`
|
|
87
|
+
|
|
88
|
+
This controls whether the alpha channel will be offered when selecting
|
|
89
|
+
custom colors.
|
|
90
|
+
|
|
91
|
+
- Required: No
|
|
92
|
+
|
|
93
|
+
### `enableStyle`: `boolean`
|
|
94
|
+
|
|
95
|
+
This controls whether to support border style selections.
|
|
96
|
+
|
|
97
|
+
- Required: No
|
|
98
|
+
- Default: `true`
|
|
99
|
+
|
|
100
|
+
### `hideLabelFromVision`: `boolean`
|
|
101
|
+
|
|
102
|
+
Provides control over whether the label will only be visible to screen readers.
|
|
103
|
+
|
|
104
|
+
- Required: No
|
|
105
|
+
|
|
106
|
+
### `label`: `string`
|
|
107
|
+
|
|
108
|
+
If provided, a label will be generated using this as the content.
|
|
109
|
+
|
|
110
|
+
_Whether it is visible only to screen readers is controlled via
|
|
111
|
+
`hideLabelFromVision`._
|
|
112
|
+
|
|
113
|
+
- Required: No
|
|
114
|
+
|
|
115
|
+
### `onChange`: `( value?: Object ) => void`
|
|
116
|
+
|
|
117
|
+
A callback function invoked when any border value is changed. The value received
|
|
118
|
+
may be a "flat" border object, one that has properties defining individual side
|
|
119
|
+
borders, or `undefined`.
|
|
120
|
+
|
|
121
|
+
_Note: The will be `undefined` if a user clears all borders._
|
|
122
|
+
|
|
123
|
+
- Required: Yes
|
|
124
|
+
|
|
125
|
+
### `popoverClassNames`: `Object`
|
|
126
|
+
|
|
127
|
+
An object defining CSS classnames for all the inner `BorderControl` popover
|
|
128
|
+
content.
|
|
129
|
+
|
|
130
|
+
Example:
|
|
131
|
+
```js
|
|
132
|
+
{
|
|
133
|
+
linked: 'linked-border-popover-content',
|
|
134
|
+
top: 'top-border-popover-content',
|
|
135
|
+
right: 'right-border-popover-content',
|
|
136
|
+
bottom: 'bottom-border-popover-content',
|
|
137
|
+
left: 'left-border-popover-content',
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
By default, popovers are displayed relative to the button that initiated the popover. By supplying classnames for each individual popover, it is possible to add styling rules to align the popover positions to an unrelated design element, for example, the sidebar inspector in the block editor.
|
|
142
|
+
|
|
143
|
+
- Required: No
|
|
144
|
+
|
|
145
|
+
### `value`: `Object`
|
|
146
|
+
|
|
147
|
+
An object representing the current border configuration.
|
|
148
|
+
|
|
149
|
+
This may be a "flat" border where the object has `color`, `style`, and `width`
|
|
150
|
+
properties or a "split" border which defines the previous properties but for
|
|
151
|
+
each side; `top`, `right`, `bottom`, and `left`.
|
|
152
|
+
|
|
153
|
+
Examples:
|
|
154
|
+
```js
|
|
155
|
+
const flatBorder = { color: '#72aee6', style: 'solid', width: '1px' };
|
|
156
|
+
const splitBorders = {
|
|
157
|
+
top: { color: '#72aee6', style: 'solid', width: '1px' },
|
|
158
|
+
right: { color: '#e65054', style: 'dashed', width: '2px' },
|
|
159
|
+
bottom: { color: '#68de7c', style: 'solid', width: '1px' },
|
|
160
|
+
left: { color: '#f2d675', style: 'dotted', width: '1em' },
|
|
161
|
+
};
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- Required: No
|
|
165
|
+
|
|
166
|
+
### `__experimentalHasMultipleOrigins`: `boolean`
|
|
167
|
+
|
|
168
|
+
This is passed on to the color related sub-components which need to be made
|
|
169
|
+
aware of whether the colors prop contains multiple origins.
|
|
170
|
+
|
|
171
|
+
- Required: No
|
|
172
|
+
|
|
173
|
+
### `__experimentalIsRenderedInSidebar`: `boolean`
|
|
174
|
+
|
|
175
|
+
This is passed on to the color related sub-components so they may render more
|
|
176
|
+
effectively when used within a sidebar.
|
|
177
|
+
|
|
178
|
+
- Required: No
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import BorderBoxControlLinkedButton from '../border-box-control-linked-button';
|
|
10
|
+
import BorderBoxControlSplitControls from '../border-box-control-split-controls';
|
|
11
|
+
import { BorderControl } from '../../border-control';
|
|
12
|
+
import { HStack } from '../../h-stack';
|
|
13
|
+
import { StyledLabel } from '../../base-control/styles/base-control-styles';
|
|
14
|
+
import { View } from '../../view';
|
|
15
|
+
import { VisuallyHidden } from '../../visually-hidden';
|
|
16
|
+
import { contextConnect, WordPressComponentProps } from '../../ui/context';
|
|
17
|
+
import { useBorderBoxControl } from './hook';
|
|
18
|
+
|
|
19
|
+
import type { BorderBoxControlProps } from '../types';
|
|
20
|
+
import type { LabelProps } from '../../border-control/types';
|
|
21
|
+
|
|
22
|
+
const BorderLabel = ( props: LabelProps ) => {
|
|
23
|
+
const { label, hideLabelFromVision } = props;
|
|
24
|
+
|
|
25
|
+
if ( ! label ) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return hideLabelFromVision ? (
|
|
30
|
+
<VisuallyHidden as="label">{ label }</VisuallyHidden>
|
|
31
|
+
) : (
|
|
32
|
+
<StyledLabel>{ label }</StyledLabel>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const BorderBoxControl = (
|
|
37
|
+
props: WordPressComponentProps< BorderBoxControlProps, 'div' >,
|
|
38
|
+
forwardedRef: React.ForwardedRef< any >
|
|
39
|
+
) => {
|
|
40
|
+
const {
|
|
41
|
+
className,
|
|
42
|
+
colors,
|
|
43
|
+
disableCustomColors,
|
|
44
|
+
enableAlpha,
|
|
45
|
+
enableStyle,
|
|
46
|
+
hasMixedBorders,
|
|
47
|
+
hideLabelFromVision,
|
|
48
|
+
isLinked,
|
|
49
|
+
label,
|
|
50
|
+
linkedControlClassName,
|
|
51
|
+
linkedValue,
|
|
52
|
+
onLinkedChange,
|
|
53
|
+
onSplitChange,
|
|
54
|
+
popoverClassNames,
|
|
55
|
+
splitValue,
|
|
56
|
+
toggleLinked,
|
|
57
|
+
__experimentalHasMultipleOrigins,
|
|
58
|
+
__experimentalIsRenderedInSidebar,
|
|
59
|
+
...otherProps
|
|
60
|
+
} = useBorderBoxControl( props );
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<View className={ className } { ...otherProps } ref={ forwardedRef }>
|
|
64
|
+
<BorderLabel
|
|
65
|
+
label={ label }
|
|
66
|
+
hideLabelFromVision={ hideLabelFromVision }
|
|
67
|
+
/>
|
|
68
|
+
<HStack alignment={ 'start' } expanded={ true } spacing={ 0 }>
|
|
69
|
+
{ isLinked ? (
|
|
70
|
+
<BorderControl
|
|
71
|
+
className={ linkedControlClassName }
|
|
72
|
+
colors={ colors }
|
|
73
|
+
disableCustomColors={ disableCustomColors }
|
|
74
|
+
enableAlpha={ enableAlpha }
|
|
75
|
+
enableStyle={ enableStyle }
|
|
76
|
+
onChange={ onLinkedChange }
|
|
77
|
+
placeholder={
|
|
78
|
+
hasMixedBorders ? __( 'Mixed' ) : undefined
|
|
79
|
+
}
|
|
80
|
+
popoverContentClassName={ popoverClassNames?.linked }
|
|
81
|
+
shouldSanitizeBorder={ false } // This component will handle that.
|
|
82
|
+
value={ linkedValue }
|
|
83
|
+
withSlider={ true }
|
|
84
|
+
width={ '110px' }
|
|
85
|
+
__experimentalHasMultipleOrigins={
|
|
86
|
+
__experimentalHasMultipleOrigins
|
|
87
|
+
}
|
|
88
|
+
__experimentalIsRenderedInSidebar={
|
|
89
|
+
__experimentalIsRenderedInSidebar
|
|
90
|
+
}
|
|
91
|
+
/>
|
|
92
|
+
) : (
|
|
93
|
+
<BorderBoxControlSplitControls
|
|
94
|
+
colors={ colors }
|
|
95
|
+
disableCustomColors={ disableCustomColors }
|
|
96
|
+
enableAlpha={ enableAlpha }
|
|
97
|
+
enableStyle={ enableStyle }
|
|
98
|
+
onChange={ onSplitChange }
|
|
99
|
+
popoverClassNames={ popoverClassNames }
|
|
100
|
+
value={ splitValue }
|
|
101
|
+
__experimentalHasMultipleOrigins={
|
|
102
|
+
__experimentalHasMultipleOrigins
|
|
103
|
+
}
|
|
104
|
+
__experimentalIsRenderedInSidebar={
|
|
105
|
+
__experimentalIsRenderedInSidebar
|
|
106
|
+
}
|
|
107
|
+
/>
|
|
108
|
+
) }
|
|
109
|
+
<BorderBoxControlLinkedButton
|
|
110
|
+
onClick={ toggleLinked }
|
|
111
|
+
isLinked={ isLinked }
|
|
112
|
+
/>
|
|
113
|
+
</HStack>
|
|
114
|
+
</View>
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const ConnectedBorderBoxControl = contextConnect(
|
|
119
|
+
BorderBoxControl,
|
|
120
|
+
'BorderBoxControl'
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
export default ConnectedBorderBoxControl;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useMemo, useState } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import * as styles from '../styles';
|
|
10
|
+
import {
|
|
11
|
+
getBorderDiff,
|
|
12
|
+
getCommonBorder,
|
|
13
|
+
getSplitBorders,
|
|
14
|
+
hasMixedBorders,
|
|
15
|
+
hasSplitBorders,
|
|
16
|
+
isCompleteBorder,
|
|
17
|
+
isEmptyBorder,
|
|
18
|
+
} from '../utils';
|
|
19
|
+
import { useContextSystem, WordPressComponentProps } from '../../ui/context';
|
|
20
|
+
import { useCx } from '../../utils/hooks/use-cx';
|
|
21
|
+
|
|
22
|
+
import type { Border } from '../../border-control/types';
|
|
23
|
+
import type { Borders, BorderSide, BorderBoxControlProps } from '../types';
|
|
24
|
+
|
|
25
|
+
export function useBorderBoxControl(
|
|
26
|
+
props: WordPressComponentProps< BorderBoxControlProps, 'div' >
|
|
27
|
+
) {
|
|
28
|
+
const { className, onChange, value, ...otherProps } = useContextSystem(
|
|
29
|
+
props,
|
|
30
|
+
'BorderBoxControl'
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const mixedBorders = hasMixedBorders( value );
|
|
34
|
+
const splitBorders = hasSplitBorders( value );
|
|
35
|
+
|
|
36
|
+
const linkedValue = splitBorders
|
|
37
|
+
? getCommonBorder( value as Borders | undefined )
|
|
38
|
+
: ( value as Border );
|
|
39
|
+
|
|
40
|
+
const splitValue = splitBorders
|
|
41
|
+
? ( value as Borders )
|
|
42
|
+
: getSplitBorders( value as Border | undefined );
|
|
43
|
+
|
|
44
|
+
const [ isLinked, setIsLinked ] = useState( ! mixedBorders );
|
|
45
|
+
const toggleLinked = () => setIsLinked( ! isLinked );
|
|
46
|
+
|
|
47
|
+
const onLinkedChange = ( newBorder?: Border ) => {
|
|
48
|
+
if ( ! newBorder ) {
|
|
49
|
+
return onChange( undefined );
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// If we have all props defined on the new border apply it.
|
|
53
|
+
if ( ! mixedBorders || isCompleteBorder( newBorder ) ) {
|
|
54
|
+
return onChange(
|
|
55
|
+
isEmptyBorder( newBorder ) ? undefined : newBorder
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// If we had mixed borders we might have had some shared border props
|
|
60
|
+
// that we need to maintain. For example; we could have mixed borders
|
|
61
|
+
// with all the same color but different widths. Then from the linked
|
|
62
|
+
// control we change the color. We should keep the separate widths.
|
|
63
|
+
const changes = getBorderDiff(
|
|
64
|
+
linkedValue as Border,
|
|
65
|
+
newBorder as Border
|
|
66
|
+
);
|
|
67
|
+
const updatedBorders = {
|
|
68
|
+
top: { ...( value as Borders )?.top, ...changes },
|
|
69
|
+
right: { ...( value as Borders )?.right, ...changes },
|
|
70
|
+
bottom: { ...( value as Borders )?.bottom, ...changes },
|
|
71
|
+
left: { ...( value as Borders )?.left, ...changes },
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
if ( hasMixedBorders( updatedBorders ) ) {
|
|
75
|
+
return onChange( updatedBorders );
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const filteredResult = isEmptyBorder( updatedBorders.top )
|
|
79
|
+
? undefined
|
|
80
|
+
: updatedBorders.top;
|
|
81
|
+
|
|
82
|
+
onChange( filteredResult );
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const onSplitChange = (
|
|
86
|
+
newBorder: Border | undefined,
|
|
87
|
+
side: BorderSide
|
|
88
|
+
) => {
|
|
89
|
+
const updatedBorders = { ...splitValue, [ side ]: newBorder };
|
|
90
|
+
|
|
91
|
+
if ( hasMixedBorders( updatedBorders ) ) {
|
|
92
|
+
onChange( updatedBorders );
|
|
93
|
+
} else {
|
|
94
|
+
onChange( newBorder );
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const cx = useCx();
|
|
99
|
+
const classes = useMemo( () => {
|
|
100
|
+
return cx( styles.BorderBoxControl, className );
|
|
101
|
+
}, [ className ] );
|
|
102
|
+
|
|
103
|
+
const linkedControlClassName = useMemo( () => {
|
|
104
|
+
return cx( styles.LinkedBorderControl );
|
|
105
|
+
}, [] );
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
...otherProps,
|
|
109
|
+
className: classes,
|
|
110
|
+
hasMixedBorders: mixedBorders,
|
|
111
|
+
isLinked,
|
|
112
|
+
linkedControlClassName,
|
|
113
|
+
onLinkedChange,
|
|
114
|
+
onSplitChange,
|
|
115
|
+
toggleLinked,
|
|
116
|
+
linkedValue,
|
|
117
|
+
splitValue,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { link, linkOff } from '@wordpress/icons';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import Button from '../../button';
|
|
11
|
+
import Tooltip from '../../tooltip';
|
|
12
|
+
import { View } from '../../view';
|
|
13
|
+
import { contextConnect, WordPressComponentProps } from '../../ui/context';
|
|
14
|
+
import { useBorderBoxControlLinkedButton } from './hook';
|
|
15
|
+
|
|
16
|
+
import type { LinkedButtonProps } from '../types';
|
|
17
|
+
|
|
18
|
+
const BorderBoxControlLinkedButton = (
|
|
19
|
+
props: WordPressComponentProps< LinkedButtonProps, 'div' >,
|
|
20
|
+
forwardedRef: React.ForwardedRef< any >
|
|
21
|
+
) => {
|
|
22
|
+
const {
|
|
23
|
+
className,
|
|
24
|
+
isLinked,
|
|
25
|
+
...buttonProps
|
|
26
|
+
} = useBorderBoxControlLinkedButton( props );
|
|
27
|
+
const label = isLinked ? __( 'Unlink sides' ) : __( 'Link sides' );
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<Tooltip text={ label }>
|
|
31
|
+
<View className={ className }>
|
|
32
|
+
<Button
|
|
33
|
+
{ ...buttonProps }
|
|
34
|
+
variant={ isLinked ? 'primary' : 'secondary' }
|
|
35
|
+
isSmall
|
|
36
|
+
icon={ isLinked ? link : linkOff }
|
|
37
|
+
iconSize={ 16 }
|
|
38
|
+
aria-label={ label }
|
|
39
|
+
ref={ forwardedRef }
|
|
40
|
+
/>
|
|
41
|
+
</View>
|
|
42
|
+
</Tooltip>
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const ConnectedBorderBoxControlLinkedButton = contextConnect(
|
|
47
|
+
BorderBoxControlLinkedButton,
|
|
48
|
+
'BorderBoxControlLinkedButton'
|
|
49
|
+
);
|
|
50
|
+
export default ConnectedBorderBoxControlLinkedButton;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useMemo } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import * as styles from '../styles';
|
|
10
|
+
import { useContextSystem, WordPressComponentProps } from '../../ui/context';
|
|
11
|
+
import { useCx } from '../../utils/hooks/use-cx';
|
|
12
|
+
|
|
13
|
+
import type { LinkedButtonProps } from '../types';
|
|
14
|
+
|
|
15
|
+
export function useBorderBoxControlLinkedButton(
|
|
16
|
+
props: WordPressComponentProps< LinkedButtonProps, 'div' >
|
|
17
|
+
) {
|
|
18
|
+
const { className, ...otherProps } = useContextSystem(
|
|
19
|
+
props,
|
|
20
|
+
'BorderBoxControlLinkedButton'
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
// Generate class names.
|
|
24
|
+
const cx = useCx();
|
|
25
|
+
const classes = useMemo( () => {
|
|
26
|
+
return cx( styles.BorderBoxControlLinkedButton, className );
|
|
27
|
+
}, [ className ] );
|
|
28
|
+
|
|
29
|
+
return { ...otherProps, className: classes };
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './component';
|