@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,354 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { BorderBoxControl } from '../';
|
|
10
|
+
|
|
11
|
+
const colors = [
|
|
12
|
+
{ name: 'Gray', color: '#f6f7f7' },
|
|
13
|
+
{ name: 'Blue', color: '#72aee6' },
|
|
14
|
+
{ name: 'Red', color: '#e65054' },
|
|
15
|
+
{ name: 'Green', color: '#00a32a' },
|
|
16
|
+
{ name: 'Yellow', color: '#bd8600' },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const defaultBorder = {
|
|
20
|
+
color: '#72aee6',
|
|
21
|
+
style: 'solid',
|
|
22
|
+
width: '1px',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const defaultBorders = {
|
|
26
|
+
top: defaultBorder,
|
|
27
|
+
right: defaultBorder,
|
|
28
|
+
bottom: defaultBorder,
|
|
29
|
+
left: defaultBorder,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const mixedBorders = {
|
|
33
|
+
top: { color: '#f6f7f7', style: 'solid', width: '1px' },
|
|
34
|
+
right: { color: '#e65054', style: 'dashed', width: undefined },
|
|
35
|
+
bottom: { color: undefined, style: 'dotted', width: '2rem' },
|
|
36
|
+
left: { color: '#bd8600', style: undefined, width: '0.75em' },
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const props = {
|
|
40
|
+
colors,
|
|
41
|
+
label: 'Border Box',
|
|
42
|
+
onChange: jest.fn().mockImplementation( ( newValue ) => {
|
|
43
|
+
props.value = newValue;
|
|
44
|
+
} ),
|
|
45
|
+
value: undefined,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const toggleLabelRegex = /Border color( and style)* picker/;
|
|
49
|
+
const colorPickerRegex = /Border color picker/;
|
|
50
|
+
|
|
51
|
+
const renderBorderBoxControl = ( customProps ) => {
|
|
52
|
+
return render( <BorderBoxControl { ...{ ...props, ...customProps } } /> );
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const clickButton = ( name ) => {
|
|
56
|
+
fireEvent.click( screen.getByRole( 'button', { name } ) );
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const queryButton = ( name ) => {
|
|
60
|
+
return screen.queryByRole( 'button', { name } );
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const updateLinkedWidthInput = ( value ) => {
|
|
64
|
+
const widthInput = screen.getByRole( 'spinbutton' );
|
|
65
|
+
widthInput.focus();
|
|
66
|
+
fireEvent.change( widthInput, { target: { value } } );
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const updateSplitWidthInput = ( value, index = 0 ) => {
|
|
70
|
+
const splitInputs = screen.getAllByRole( 'spinbutton' );
|
|
71
|
+
splitInputs[ index ].focus();
|
|
72
|
+
fireEvent.change( splitInputs[ index ], { target: { value } } );
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
describe( 'BorderBoxControl', () => {
|
|
76
|
+
describe( 'Linked view rendering', () => {
|
|
77
|
+
it( 'should render correctly when no value provided', () => {
|
|
78
|
+
renderBorderBoxControl();
|
|
79
|
+
|
|
80
|
+
const label = screen.getByText( props.label );
|
|
81
|
+
const colorButton = screen.getByLabelText( toggleLabelRegex );
|
|
82
|
+
const widthInput = screen.getByRole( 'spinbutton' );
|
|
83
|
+
const unitSelect = screen.getByRole( 'combobox' );
|
|
84
|
+
const slider = screen.getByRole( 'slider' );
|
|
85
|
+
const linkedButton = screen.getByLabelText( 'Unlink sides' );
|
|
86
|
+
|
|
87
|
+
expect( label ).toBeInTheDocument();
|
|
88
|
+
expect( colorButton ).toBeInTheDocument();
|
|
89
|
+
expect( widthInput ).toBeInTheDocument();
|
|
90
|
+
expect( widthInput ).not.toHaveAttribute( 'placeholder' );
|
|
91
|
+
expect( unitSelect ).toBeInTheDocument();
|
|
92
|
+
expect( slider ).toBeInTheDocument();
|
|
93
|
+
expect( linkedButton ).toBeInTheDocument();
|
|
94
|
+
} );
|
|
95
|
+
|
|
96
|
+
it( 'should hide label', () => {
|
|
97
|
+
renderBorderBoxControl( { hideLabelFromVision: true } );
|
|
98
|
+
const label = screen.getByText( props.label );
|
|
99
|
+
|
|
100
|
+
// As visually hidden labels are still included in the document
|
|
101
|
+
// and do not have `display: none` styling, we can't rely on
|
|
102
|
+
// `.toBeInTheDocument()` or `.toBeVisible()` assertions.
|
|
103
|
+
expect( label ).toHaveAttribute(
|
|
104
|
+
'data-wp-component',
|
|
105
|
+
'VisuallyHidden'
|
|
106
|
+
);
|
|
107
|
+
} );
|
|
108
|
+
|
|
109
|
+
it( 'should show correct width value when flat border value provided', () => {
|
|
110
|
+
renderBorderBoxControl( { value: defaultBorder } );
|
|
111
|
+
const widthInput = screen.getByRole( 'spinbutton' );
|
|
112
|
+
|
|
113
|
+
expect( widthInput.value ).toBe( '1' );
|
|
114
|
+
} );
|
|
115
|
+
|
|
116
|
+
it( 'should show correct width value when consistent split borders provided', () => {
|
|
117
|
+
renderBorderBoxControl( { value: defaultBorders } );
|
|
118
|
+
const widthInput = screen.getByRole( 'spinbutton' );
|
|
119
|
+
|
|
120
|
+
expect( widthInput.value ).toBe( '1' );
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
it( 'should render placeholder when border values are mixed', () => {
|
|
124
|
+
renderBorderBoxControl( { value: mixedBorders } );
|
|
125
|
+
|
|
126
|
+
// First render of control with mixed values should show split view.
|
|
127
|
+
clickButton( 'Link sides' );
|
|
128
|
+
|
|
129
|
+
const widthInput = screen.getByRole( 'spinbutton' );
|
|
130
|
+
expect( widthInput ).toHaveAttribute( 'placeholder', 'Mixed' );
|
|
131
|
+
} );
|
|
132
|
+
|
|
133
|
+
it( 'should render shared border width when switching to linked view', async () => {
|
|
134
|
+
// Render control with mixed border values but consistent widths.
|
|
135
|
+
renderBorderBoxControl( {
|
|
136
|
+
value: {
|
|
137
|
+
top: { color: 'red', width: '5px', style: 'solid' },
|
|
138
|
+
right: { color: 'blue', width: '5px', style: 'dashed' },
|
|
139
|
+
bottom: { color: 'green', width: '5px', style: 'solid' },
|
|
140
|
+
left: { color: 'yellow', width: '5px', style: 'dotted' },
|
|
141
|
+
},
|
|
142
|
+
} );
|
|
143
|
+
|
|
144
|
+
// First render of control with mixed values should show split view.
|
|
145
|
+
clickButton( 'Link sides' );
|
|
146
|
+
const linkedInput = screen.getByRole( 'spinbutton' );
|
|
147
|
+
|
|
148
|
+
expect( linkedInput.value ).toBe( '5' );
|
|
149
|
+
} );
|
|
150
|
+
|
|
151
|
+
it( 'should omit style options when requested', () => {
|
|
152
|
+
renderBorderBoxControl( { enableStyle: false } );
|
|
153
|
+
|
|
154
|
+
const colorButton = screen.getByLabelText( colorPickerRegex );
|
|
155
|
+
fireEvent.click( colorButton );
|
|
156
|
+
|
|
157
|
+
const styleLabel = screen.queryByText( 'Style' );
|
|
158
|
+
const solidButton = queryButton( 'Solid' );
|
|
159
|
+
const dashedButton = queryButton( 'Dashed' );
|
|
160
|
+
const dottedButton = queryButton( 'Dotted' );
|
|
161
|
+
|
|
162
|
+
expect( styleLabel ).not.toBeInTheDocument();
|
|
163
|
+
expect( solidButton ).not.toBeInTheDocument();
|
|
164
|
+
expect( dashedButton ).not.toBeInTheDocument();
|
|
165
|
+
expect( dottedButton ).not.toBeInTheDocument();
|
|
166
|
+
} );
|
|
167
|
+
} );
|
|
168
|
+
|
|
169
|
+
describe( 'Split view rendering', () => {
|
|
170
|
+
it( 'should render split view by default when mixed values provided', () => {
|
|
171
|
+
renderBorderBoxControl( { value: mixedBorders } );
|
|
172
|
+
|
|
173
|
+
const colorButtons = screen.getAllByLabelText( toggleLabelRegex );
|
|
174
|
+
const widthInputs = screen.getAllByRole( 'spinbutton' );
|
|
175
|
+
const unitSelects = screen.getAllByRole( 'combobox' );
|
|
176
|
+
const sliders = screen.queryAllByRole( 'slider' );
|
|
177
|
+
const linkedButton = screen.getByLabelText( 'Link sides' );
|
|
178
|
+
|
|
179
|
+
expect( colorButtons.length ).toBe( 4 );
|
|
180
|
+
expect( widthInputs.length ).toBe( 4 );
|
|
181
|
+
expect( unitSelects.length ).toBe( 4 );
|
|
182
|
+
expect( sliders.length ).toBe( 0 );
|
|
183
|
+
expect( linkedButton ).toBeInTheDocument();
|
|
184
|
+
} );
|
|
185
|
+
|
|
186
|
+
it( 'should render correct width values in appropriate inputs', () => {
|
|
187
|
+
renderBorderBoxControl( { value: mixedBorders } );
|
|
188
|
+
|
|
189
|
+
const widthInputs = screen.getAllByRole( 'spinbutton' );
|
|
190
|
+
|
|
191
|
+
expect( widthInputs[ 0 ].value ).toBe( '1' ); // Top.
|
|
192
|
+
expect( widthInputs[ 1 ].value ).toBe( '0.75' ); // Left.
|
|
193
|
+
expect( widthInputs[ 2 ].value ).toBe( '' ); // Right.
|
|
194
|
+
expect( widthInputs[ 3 ].value ).toBe( '2' ); // Bottom.
|
|
195
|
+
} );
|
|
196
|
+
|
|
197
|
+
it( 'should render split view correctly when starting with flat border', () => {
|
|
198
|
+
renderBorderBoxControl( { value: defaultBorders } );
|
|
199
|
+
clickButton( 'Unlink sides' );
|
|
200
|
+
|
|
201
|
+
const widthInputs = screen.getAllByRole( 'spinbutton' );
|
|
202
|
+
expect( widthInputs[ 0 ].value ).toBe( '1' ); // Top.
|
|
203
|
+
expect( widthInputs[ 1 ].value ).toBe( '1' ); // Left.
|
|
204
|
+
expect( widthInputs[ 2 ].value ).toBe( '1' ); // Right.
|
|
205
|
+
expect( widthInputs[ 3 ].value ).toBe( '1' ); // Bottom.
|
|
206
|
+
} );
|
|
207
|
+
|
|
208
|
+
it( 'should omit style options when requested', () => {
|
|
209
|
+
renderBorderBoxControl( { enableStyle: false } );
|
|
210
|
+
clickButton( 'Unlink sides' );
|
|
211
|
+
|
|
212
|
+
const colorButtons = screen.getAllByLabelText( colorPickerRegex );
|
|
213
|
+
|
|
214
|
+
colorButtons.forEach( ( button ) => {
|
|
215
|
+
fireEvent.click( button );
|
|
216
|
+
|
|
217
|
+
const styleLabel = screen.queryByText( 'Style' );
|
|
218
|
+
const solidButton = queryButton( 'Solid' );
|
|
219
|
+
const dashedButton = queryButton( 'Dashed' );
|
|
220
|
+
const dottedButton = queryButton( 'Dotted' );
|
|
221
|
+
|
|
222
|
+
expect( styleLabel ).not.toBeInTheDocument();
|
|
223
|
+
expect( solidButton ).not.toBeInTheDocument();
|
|
224
|
+
expect( dashedButton ).not.toBeInTheDocument();
|
|
225
|
+
expect( dottedButton ).not.toBeInTheDocument();
|
|
226
|
+
|
|
227
|
+
fireEvent.click( button );
|
|
228
|
+
} );
|
|
229
|
+
} );
|
|
230
|
+
} );
|
|
231
|
+
|
|
232
|
+
describe( 'onChange handling', () => {
|
|
233
|
+
beforeEach( () => {
|
|
234
|
+
jest.clearAllMocks();
|
|
235
|
+
props.value = undefined;
|
|
236
|
+
} );
|
|
237
|
+
|
|
238
|
+
describe( 'Linked value change handling', () => {
|
|
239
|
+
it( 'should set undefined when new border is empty', () => {
|
|
240
|
+
renderBorderBoxControl( { value: { width: '1px' } } );
|
|
241
|
+
updateLinkedWidthInput( '' );
|
|
242
|
+
|
|
243
|
+
expect( props.onChange ).toHaveBeenCalledWith( undefined );
|
|
244
|
+
} );
|
|
245
|
+
|
|
246
|
+
it( 'should update with complete flat border', () => {
|
|
247
|
+
renderBorderBoxControl( { value: defaultBorder } );
|
|
248
|
+
updateLinkedWidthInput( '3' );
|
|
249
|
+
|
|
250
|
+
expect( props.onChange ).toHaveBeenCalledWith( {
|
|
251
|
+
...defaultBorder,
|
|
252
|
+
width: '3px',
|
|
253
|
+
} );
|
|
254
|
+
} );
|
|
255
|
+
|
|
256
|
+
it( 'should maintain mixed values if not explicitly set via linked control', () => {
|
|
257
|
+
renderBorderBoxControl( {
|
|
258
|
+
value: {
|
|
259
|
+
top: { color: '#72aee6' },
|
|
260
|
+
right: { color: '#f6f7f7', style: 'dashed' },
|
|
261
|
+
bottom: { color: '#e65054', style: 'dotted' },
|
|
262
|
+
left: { color: undefined },
|
|
263
|
+
},
|
|
264
|
+
} );
|
|
265
|
+
|
|
266
|
+
clickButton( 'Link sides' );
|
|
267
|
+
updateLinkedWidthInput( '4' );
|
|
268
|
+
|
|
269
|
+
expect( props.onChange ).toHaveBeenCalledWith( {
|
|
270
|
+
top: { color: '#72aee6', width: '4px' },
|
|
271
|
+
right: { color: '#f6f7f7', style: 'dashed', width: '4px' },
|
|
272
|
+
bottom: { color: '#e65054', style: 'dotted', width: '4px' },
|
|
273
|
+
left: { color: undefined, width: '4px' },
|
|
274
|
+
} );
|
|
275
|
+
} );
|
|
276
|
+
|
|
277
|
+
it( 'should update with consistent split borders', () => {
|
|
278
|
+
renderBorderBoxControl( { value: defaultBorders } );
|
|
279
|
+
updateLinkedWidthInput( '10' );
|
|
280
|
+
|
|
281
|
+
expect( props.onChange ).toHaveBeenCalledWith( {
|
|
282
|
+
...defaultBorder,
|
|
283
|
+
width: '10px',
|
|
284
|
+
} );
|
|
285
|
+
} );
|
|
286
|
+
|
|
287
|
+
it( 'should set undefined borders when change results in empty borders', () => {
|
|
288
|
+
renderBorderBoxControl( {
|
|
289
|
+
value: {
|
|
290
|
+
top: { width: '1px' },
|
|
291
|
+
right: { width: '1px' },
|
|
292
|
+
bottom: { width: '1px' },
|
|
293
|
+
left: { width: '1px' },
|
|
294
|
+
},
|
|
295
|
+
} );
|
|
296
|
+
updateLinkedWidthInput( '' );
|
|
297
|
+
|
|
298
|
+
expect( props.onChange ).toHaveBeenCalledWith( undefined );
|
|
299
|
+
} );
|
|
300
|
+
|
|
301
|
+
it( 'should set flat border when change results in consistent split borders', () => {
|
|
302
|
+
renderBorderBoxControl( {
|
|
303
|
+
value: {
|
|
304
|
+
top: { ...defaultBorder, width: '1px' },
|
|
305
|
+
right: { ...defaultBorder, width: '2px' },
|
|
306
|
+
bottom: { ...defaultBorder, width: '3px' },
|
|
307
|
+
left: { ...defaultBorder, width: '4px' },
|
|
308
|
+
},
|
|
309
|
+
} );
|
|
310
|
+
|
|
311
|
+
clickButton( 'Link sides' );
|
|
312
|
+
updateLinkedWidthInput( '10' );
|
|
313
|
+
|
|
314
|
+
expect( props.onChange ).toHaveBeenCalledWith( {
|
|
315
|
+
...defaultBorder,
|
|
316
|
+
width: '10px',
|
|
317
|
+
} );
|
|
318
|
+
} );
|
|
319
|
+
} );
|
|
320
|
+
|
|
321
|
+
describe( 'Split value change handling', () => {
|
|
322
|
+
it( 'should set split borders when the updated borders are mixed', () => {
|
|
323
|
+
const borders = {
|
|
324
|
+
top: { ...defaultBorder, width: '1px' },
|
|
325
|
+
right: { ...defaultBorder, width: '2px' },
|
|
326
|
+
bottom: { ...defaultBorder, width: '3px' },
|
|
327
|
+
left: { ...defaultBorder, width: '4px' },
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
renderBorderBoxControl( { value: borders } );
|
|
331
|
+
updateSplitWidthInput( '5' );
|
|
332
|
+
|
|
333
|
+
expect( props.onChange ).toHaveBeenCalledWith( {
|
|
334
|
+
...borders,
|
|
335
|
+
top: { ...defaultBorder, width: '5px' },
|
|
336
|
+
} );
|
|
337
|
+
} );
|
|
338
|
+
|
|
339
|
+
it( 'should set flat border when updated borders are consistent', () => {
|
|
340
|
+
const borders = {
|
|
341
|
+
top: { ...defaultBorder, width: '4px' },
|
|
342
|
+
right: { ...defaultBorder, width: '1px' },
|
|
343
|
+
bottom: { ...defaultBorder, width: '1px' },
|
|
344
|
+
left: { ...defaultBorder, width: '1px' },
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
renderBorderBoxControl( { value: borders } );
|
|
348
|
+
updateSplitWidthInput( '1' );
|
|
349
|
+
|
|
350
|
+
expect( props.onChange ).toHaveBeenCalledWith( defaultBorder );
|
|
351
|
+
} );
|
|
352
|
+
} );
|
|
353
|
+
} );
|
|
354
|
+
} );
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
getBorderDiff,
|
|
6
|
+
getCommonBorder,
|
|
7
|
+
getShorthandBorderStyle,
|
|
8
|
+
getSplitBorders,
|
|
9
|
+
hasMixedBorders,
|
|
10
|
+
hasSplitBorders,
|
|
11
|
+
isCompleteBorder,
|
|
12
|
+
isDefinedBorder,
|
|
13
|
+
isEmptyBorder,
|
|
14
|
+
} from '../utils';
|
|
15
|
+
|
|
16
|
+
const completeBorder = { color: '#000', style: 'solid', width: '1px' };
|
|
17
|
+
const partialBorder = { color: undefined, style: undefined, width: '2px' };
|
|
18
|
+
const partialWithExtraProp = { color: '#fff', unrelated: true };
|
|
19
|
+
const nonBorder = { unrelatedProperty: true };
|
|
20
|
+
|
|
21
|
+
const splitBorders = {
|
|
22
|
+
top: completeBorder,
|
|
23
|
+
right: completeBorder,
|
|
24
|
+
bottom: completeBorder,
|
|
25
|
+
left: completeBorder,
|
|
26
|
+
};
|
|
27
|
+
const undefinedSplitBorders = {
|
|
28
|
+
top: undefined,
|
|
29
|
+
right: undefined,
|
|
30
|
+
bottom: undefined,
|
|
31
|
+
left: undefined,
|
|
32
|
+
};
|
|
33
|
+
const mixedBorders = {
|
|
34
|
+
top: completeBorder,
|
|
35
|
+
right: completeBorder,
|
|
36
|
+
bottom: completeBorder,
|
|
37
|
+
left: { color: '#fff', style: 'dashed', width: '10px' },
|
|
38
|
+
};
|
|
39
|
+
const mixedBordersWithUndefined = {
|
|
40
|
+
top: undefined,
|
|
41
|
+
right: undefined,
|
|
42
|
+
bottom: completeBorder,
|
|
43
|
+
left: partialBorder,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
describe( 'BorderBoxControl Utils', () => {
|
|
47
|
+
describe( 'isEmptyBorder', () => {
|
|
48
|
+
it( 'should determine a undefined, null, and {} to be empty', () => {
|
|
49
|
+
expect( isEmptyBorder( undefined ) ).toBe( true );
|
|
50
|
+
expect( isEmptyBorder( null ) ).toBe( true );
|
|
51
|
+
expect( isEmptyBorder( {} ) ).toBe( true );
|
|
52
|
+
} );
|
|
53
|
+
|
|
54
|
+
it( 'should determine object missing all border props to be empty', () => {
|
|
55
|
+
expect( isEmptyBorder( nonBorder ) ).toBe( true );
|
|
56
|
+
} );
|
|
57
|
+
|
|
58
|
+
it( 'should determine that a border object with all properties is not empty', () => {
|
|
59
|
+
expect( isEmptyBorder( completeBorder ) ).toBe( false );
|
|
60
|
+
} );
|
|
61
|
+
|
|
62
|
+
it( 'should determine object with at least one border property as non-empty', () => {
|
|
63
|
+
expect( isEmptyBorder( partialWithExtraProp ) ).toBe( false );
|
|
64
|
+
} );
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
describe( 'isDefinedBorder', () => {
|
|
68
|
+
it( 'should determine undefined is not a defined border', () => {
|
|
69
|
+
expect( isDefinedBorder( undefined ) ).toBe( false );
|
|
70
|
+
} );
|
|
71
|
+
|
|
72
|
+
it( 'should determine an empty object to be an undefined border', () => {
|
|
73
|
+
expect( isDefinedBorder( {} ) ).toBe( false );
|
|
74
|
+
} );
|
|
75
|
+
|
|
76
|
+
it( 'should determine an border object with undefined properties to be an undefined border', () => {
|
|
77
|
+
const emptyBorder = {
|
|
78
|
+
color: undefined,
|
|
79
|
+
style: undefined,
|
|
80
|
+
width: undefined,
|
|
81
|
+
};
|
|
82
|
+
expect( isDefinedBorder( emptyBorder ) ).toBe( false );
|
|
83
|
+
} );
|
|
84
|
+
|
|
85
|
+
it( 'should class an object with at least one side border as defined', () => {
|
|
86
|
+
expect( isDefinedBorder( mixedBordersWithUndefined ) ).toBe( true );
|
|
87
|
+
} );
|
|
88
|
+
|
|
89
|
+
it( 'should determine complete split borders object is defined border', () => {
|
|
90
|
+
expect( isDefinedBorder( splitBorders ) ).toBe( true );
|
|
91
|
+
} );
|
|
92
|
+
|
|
93
|
+
it( 'should determine border is not defined when all sides are empty', () => {
|
|
94
|
+
const mixedUndefinedBorders = {
|
|
95
|
+
top: undefined,
|
|
96
|
+
right: undefined,
|
|
97
|
+
bottom: {},
|
|
98
|
+
left: {
|
|
99
|
+
color: undefined,
|
|
100
|
+
style: undefined,
|
|
101
|
+
width: undefined,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
expect( isDefinedBorder( undefinedSplitBorders ) ).toBe( false );
|
|
106
|
+
expect( isDefinedBorder( mixedUndefinedBorders ) ).toBe( false );
|
|
107
|
+
} );
|
|
108
|
+
} );
|
|
109
|
+
|
|
110
|
+
describe( 'isCompleteBorder', () => {
|
|
111
|
+
it( 'should determine a undefined, null, and {} to be incomplete', () => {
|
|
112
|
+
expect( isCompleteBorder( undefined ) ).toBe( false );
|
|
113
|
+
expect( isCompleteBorder( null ) ).toBe( false );
|
|
114
|
+
expect( isCompleteBorder( {} ) ).toBe( false );
|
|
115
|
+
} );
|
|
116
|
+
|
|
117
|
+
it( 'should determine objects missing border props to be incomplete', () => {
|
|
118
|
+
expect( isCompleteBorder( nonBorder ) ).toBe( false );
|
|
119
|
+
expect( isCompleteBorder( partialBorder ) ).toBe( false );
|
|
120
|
+
expect( isCompleteBorder( partialWithExtraProp ) ).toBe( false );
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
it( 'should determine that a border object with all properties is complete', () => {
|
|
124
|
+
expect( isCompleteBorder( completeBorder ) ).toBe( true );
|
|
125
|
+
} );
|
|
126
|
+
} );
|
|
127
|
+
|
|
128
|
+
describe( 'hasSplitBorders', () => {
|
|
129
|
+
it( 'should determine empty or undefined borders as not being split', () => {
|
|
130
|
+
expect( hasSplitBorders( undefined ) ).toBe( false );
|
|
131
|
+
expect( hasSplitBorders( {} ) ).toBe( false );
|
|
132
|
+
} );
|
|
133
|
+
|
|
134
|
+
it( 'should determine flat border object as not being split', () => {
|
|
135
|
+
expect( hasSplitBorders( completeBorder ) ).toBe( false );
|
|
136
|
+
} );
|
|
137
|
+
|
|
138
|
+
it( 'should determine object with at least one side property as split', () => {
|
|
139
|
+
expect( hasSplitBorders( splitBorders ) ).toBe( true );
|
|
140
|
+
expect( hasSplitBorders( { top: completeBorder } ) ).toBe( true );
|
|
141
|
+
} );
|
|
142
|
+
|
|
143
|
+
it( 'should determine object with undefined sides but containing properties as split', () => {
|
|
144
|
+
expect( hasSplitBorders( undefinedSplitBorders ) ).toBe( true );
|
|
145
|
+
} );
|
|
146
|
+
} );
|
|
147
|
+
|
|
148
|
+
describe( 'hasMixedBorders', () => {
|
|
149
|
+
it( 'should determine undefined, non-border or empty object as not being mixed', () => {
|
|
150
|
+
expect( hasMixedBorders( undefined ) ).toBe( false );
|
|
151
|
+
expect( hasMixedBorders( {} ) ).toBe( false );
|
|
152
|
+
expect( hasMixedBorders( nonBorder ) ).toBe( false );
|
|
153
|
+
} );
|
|
154
|
+
|
|
155
|
+
it( 'should determine flat border object as not being mixed', () => {
|
|
156
|
+
expect( hasMixedBorders( completeBorder ) ).toBe( false );
|
|
157
|
+
} );
|
|
158
|
+
|
|
159
|
+
it( 'should determine split border object with some undefined side borders as mixed', () => {
|
|
160
|
+
expect( hasMixedBorders( mixedBordersWithUndefined ) ).toBe( true );
|
|
161
|
+
} );
|
|
162
|
+
|
|
163
|
+
it( 'should determine split border object with different side borders as mixed', () => {
|
|
164
|
+
expect( hasMixedBorders( mixedBorders ) ).toBe( true );
|
|
165
|
+
} );
|
|
166
|
+
} );
|
|
167
|
+
|
|
168
|
+
describe( 'getSplitBorders', () => {
|
|
169
|
+
it( 'should return undefined when no border provided', () => {
|
|
170
|
+
expect( getSplitBorders( undefined ) ).toEqual( undefined );
|
|
171
|
+
expect( getSplitBorders( null ) ).toEqual( undefined );
|
|
172
|
+
} );
|
|
173
|
+
|
|
174
|
+
it( 'should return undefined when supplied border is empty', () => {
|
|
175
|
+
expect( getSplitBorders( {} ) ).toEqual( undefined );
|
|
176
|
+
expect( getSplitBorders( nonBorder ) ).toEqual( undefined );
|
|
177
|
+
} );
|
|
178
|
+
|
|
179
|
+
it( 'should return object with all sides populated when given valid border', () => {
|
|
180
|
+
expect( getSplitBorders( completeBorder ) ).toEqual( {
|
|
181
|
+
top: completeBorder,
|
|
182
|
+
right: completeBorder,
|
|
183
|
+
bottom: completeBorder,
|
|
184
|
+
left: completeBorder,
|
|
185
|
+
} );
|
|
186
|
+
} );
|
|
187
|
+
} );
|
|
188
|
+
|
|
189
|
+
describe( 'getBorderDiff', () => {
|
|
190
|
+
it( 'should return empty object when there are no differences', () => {
|
|
191
|
+
const diff = getBorderDiff( completeBorder, completeBorder );
|
|
192
|
+
expect( diff ).toEqual( {} );
|
|
193
|
+
} );
|
|
194
|
+
|
|
195
|
+
it( 'should only return differences for border related properties', () => {
|
|
196
|
+
const diff = getBorderDiff( nonBorder, { caffeine: 'coffee' } );
|
|
197
|
+
expect( diff ).toEqual( {} );
|
|
198
|
+
} );
|
|
199
|
+
|
|
200
|
+
it( 'should return object with only border properties that have changed', () => {
|
|
201
|
+
const diff = getBorderDiff( completeBorder, {
|
|
202
|
+
...completeBorder,
|
|
203
|
+
color: '#21759b',
|
|
204
|
+
caffeine: 'cola',
|
|
205
|
+
} );
|
|
206
|
+
expect( diff ).toEqual( { color: '#21759b' } );
|
|
207
|
+
} );
|
|
208
|
+
} );
|
|
209
|
+
|
|
210
|
+
describe( 'getCommonBorder', () => {
|
|
211
|
+
it( 'should return undefined when no borders supplied', () => {
|
|
212
|
+
expect( getCommonBorder( undefined ) ).toEqual( undefined );
|
|
213
|
+
} );
|
|
214
|
+
|
|
215
|
+
it( 'should return border object with undefined properties when undefined borders given', () => {
|
|
216
|
+
const undefinedBorder = {
|
|
217
|
+
color: undefined,
|
|
218
|
+
style: undefined,
|
|
219
|
+
width: undefined,
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
expect( getCommonBorder( {} ) ).toEqual( undefinedBorder );
|
|
223
|
+
expect( getCommonBorder( undefinedSplitBorders ) ).toEqual(
|
|
224
|
+
undefinedBorder
|
|
225
|
+
);
|
|
226
|
+
} );
|
|
227
|
+
|
|
228
|
+
it( 'should return flat border object when split borders are the same', () => {
|
|
229
|
+
expect( getCommonBorder( splitBorders ) ).toEqual( completeBorder );
|
|
230
|
+
} );
|
|
231
|
+
|
|
232
|
+
it( 'should only set properties where every side border shares the same value', () => {
|
|
233
|
+
const sideBorders = {
|
|
234
|
+
top: { color: '#fff', style: 'solid', width: '1px' },
|
|
235
|
+
right: { color: '#000', style: 'solid', width: '1px' },
|
|
236
|
+
bottom: { color: '#000', style: 'solid', width: '1px' },
|
|
237
|
+
left: { color: '#000', style: undefined, width: '1px' },
|
|
238
|
+
};
|
|
239
|
+
const commonBorder = {
|
|
240
|
+
color: undefined,
|
|
241
|
+
style: undefined,
|
|
242
|
+
width: '1px',
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
expect( getCommonBorder( sideBorders ) ).toEqual( commonBorder );
|
|
246
|
+
} );
|
|
247
|
+
} );
|
|
248
|
+
|
|
249
|
+
describe( 'getShorthandBorderStyle', () => {
|
|
250
|
+
it( 'should return undefined when no border provided', () => {
|
|
251
|
+
expect( getShorthandBorderStyle( undefined ) ).toEqual( undefined );
|
|
252
|
+
expect( getShorthandBorderStyle( {} ) ).toEqual( undefined );
|
|
253
|
+
expect( getShorthandBorderStyle( nonBorder ) ).toEqual( undefined );
|
|
254
|
+
} );
|
|
255
|
+
|
|
256
|
+
it( 'should generate correct shorthand style from valid border', () => {
|
|
257
|
+
const style = getShorthandBorderStyle( completeBorder );
|
|
258
|
+
expect( style ).toEqual( '1px solid #000' );
|
|
259
|
+
} );
|
|
260
|
+
|
|
261
|
+
it( 'should generate correct style from partial border', () => {
|
|
262
|
+
const style = getShorthandBorderStyle( {
|
|
263
|
+
style: 'dashed',
|
|
264
|
+
width: '2px',
|
|
265
|
+
} );
|
|
266
|
+
expect( style ).toEqual( '2px dashed' );
|
|
267
|
+
} );
|
|
268
|
+
|
|
269
|
+
it( 'should default borders with either color or width to solid style', () => {
|
|
270
|
+
const widthOnlyStyle = getShorthandBorderStyle( { width: '5px' } );
|
|
271
|
+
const colorOnlyStyle = getShorthandBorderStyle( { color: '#000' } );
|
|
272
|
+
|
|
273
|
+
expect( widthOnlyStyle ).toEqual( '5px solid' );
|
|
274
|
+
expect( colorOnlyStyle ).toEqual( 'solid #000' );
|
|
275
|
+
} );
|
|
276
|
+
|
|
277
|
+
it( 'should not default border style to solid for zero width border', () => {
|
|
278
|
+
const zeroWidthStyle = getShorthandBorderStyle( { width: '0' } );
|
|
279
|
+
expect( zeroWidthStyle ).toEqual( '0' );
|
|
280
|
+
} );
|
|
281
|
+
|
|
282
|
+
it( 'should return undefined when no border or fallback supplied', () => {
|
|
283
|
+
expect( getShorthandBorderStyle() ).toBe( undefined );
|
|
284
|
+
} );
|
|
285
|
+
|
|
286
|
+
it( 'should return fallback border when border is undefined', () => {
|
|
287
|
+
const result = getShorthandBorderStyle( undefined, completeBorder );
|
|
288
|
+
expect( result ).toEqual( completeBorder );
|
|
289
|
+
} );
|
|
290
|
+
|
|
291
|
+
it( 'should return fallback border when empty border supplied', () => {
|
|
292
|
+
const result = getShorthandBorderStyle( {}, completeBorder );
|
|
293
|
+
expect( result ).toEqual( completeBorder );
|
|
294
|
+
} );
|
|
295
|
+
|
|
296
|
+
it( 'should use fallback border properties if missing from border', () => {
|
|
297
|
+
const result = getShorthandBorderStyle(
|
|
298
|
+
{ width: '1em' },
|
|
299
|
+
{ width: '5px', style: 'dashed', color: '#72aee6' }
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
expect( result ).toEqual( `1em dashed #72aee6` );
|
|
303
|
+
} );
|
|
304
|
+
} );
|
|
305
|
+
} );
|