@wordpress/components 19.11.0 → 19.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +1 -1
- package/build/alignment-matrix-control/index.js +5 -2
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/autocomplete/autocompleter-ui.js +1 -1
- package/build/autocomplete/autocompleter-ui.js.map +1 -1
- package/build/autocomplete/autocompleter-ui.native.js +2 -2
- package/build/autocomplete/autocompleter-ui.native.js.map +1 -1
- package/build/autocomplete/index.js +12 -10
- package/build/autocomplete/index.js.map +1 -1
- package/build/border-box-control/border-box-control/hook.js +2 -2
- package/build/border-box-control/border-box-control/hook.js.map +1 -1
- package/build/border-box-control/border-box-control-split-controls/component.js +2 -0
- package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
- package/build/border-box-control/border-box-control-split-controls/hook.js +13 -4
- package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
- package/build/border-box-control/border-box-control-visualizer/hook.js +6 -2
- package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
- package/build/border-box-control/styles.js +21 -11
- package/build/border-box-control/styles.js.map +1 -1
- package/build/border-control/border-control/hook.js +2 -2
- package/build/border-control/border-control/hook.js.map +1 -1
- package/build/color-palette/index.js +9 -2
- package/build/color-palette/index.js.map +1 -1
- package/build/color-palette/index.native.js +4 -1
- package/build/color-palette/index.native.js.map +1 -1
- package/build/color-picker/color-copy-button.js +87 -0
- package/build/color-picker/color-copy-button.js.map +1 -0
- package/build/color-picker/component.js +5 -15
- package/build/color-picker/component.js.map +1 -1
- package/build/color-picker/hex-input.js +18 -1
- package/build/color-picker/hex-input.js.map +1 -1
- package/build/color-picker/styles.js +11 -11
- package/build/color-picker/styles.js.map +1 -1
- package/build/custom-gradient-picker/utils.js +1 -1
- package/build/custom-gradient-picker/utils.js.map +1 -1
- package/build/date-time/{date.js → date/index.js} +51 -12
- package/build/date-time/date/index.js.map +1 -0
- package/build/date-time/date/styles.js +70 -0
- package/build/date-time/date/styles.js.map +1 -0
- package/build/date-time/{utils.js → date/utils.js} +0 -0
- package/build/date-time/date/utils.js.map +1 -0
- package/build/date-time/date-time/index.js +175 -0
- package/build/date-time/date-time/index.js.map +1 -0
- package/build/date-time/date-time/styles.js +32 -0
- package/build/date-time/date-time/styles.js.map +1 -0
- package/build/date-time/index.js +2 -109
- package/build/date-time/index.js.map +1 -1
- package/build/date-time/time/index.js +322 -0
- package/build/date-time/time/index.js.map +1 -0
- package/build/date-time/time/styles.js +139 -0
- package/build/date-time/time/styles.js.map +1 -0
- package/build/date-time/{timezone.js → time/timezone.js} +4 -2
- package/build/date-time/time/timezone.js.map +1 -0
- package/build/draggable/index.native.js +10 -5
- package/build/draggable/index.native.js.map +1 -1
- package/build/dropdown/index.js +4 -1
- package/build/dropdown/index.js.map +1 -1
- package/build/input-control/index.js +9 -4
- package/build/input-control/index.js.map +1 -1
- package/build/input-control/input-field.js +1 -26
- package/build/input-control/input-field.js.map +1 -1
- package/build/input-control/reducer/reducer.js +36 -24
- package/build/input-control/reducer/reducer.js.map +1 -1
- package/build/input-control/reducer/state.js +0 -1
- package/build/input-control/reducer/state.js.map +1 -1
- package/build/input-control/utils.js +45 -0
- package/build/input-control/utils.js.map +1 -1
- package/build/popover/index.js +40 -33
- package/build/popover/index.js.map +1 -1
- package/build/search-control/index.js +4 -6
- package/build/search-control/index.js.map +1 -1
- package/build/select-control/index.js +3 -1
- package/build/select-control/index.js.map +1 -1
- package/build/spacer/hook.js +11 -3
- package/build/spacer/hook.js.map +1 -1
- package/build/surface/component.js +7 -7
- package/build/surface/component.js.map +1 -1
- package/build/surface/hook.js +8 -11
- package/build/surface/hook.js.map +1 -1
- package/build/surface/index.js.map +1 -1
- package/build/surface/styles.js +8 -48
- package/build/surface/styles.js.map +1 -1
- package/build/textarea-control/index.js +40 -6
- package/build/textarea-control/index.js.map +1 -1
- package/build/textarea-control/styles/textarea-control-styles.js +3 -3
- package/build/textarea-control/styles/textarea-control-styles.js.map +1 -1
- package/build/textarea-control/types.js +6 -0
- package/build/textarea-control/types.js.map +1 -0
- package/build/utils/hooks/index.js +0 -8
- package/build/utils/hooks/index.js.map +1 -1
- package/build-module/alignment-matrix-control/index.js +5 -2
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/autocomplete/autocompleter-ui.js +1 -1
- package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
- package/build-module/autocomplete/autocompleter-ui.native.js +2 -2
- package/build-module/autocomplete/autocompleter-ui.native.js.map +1 -1
- package/build-module/autocomplete/index.js +13 -11
- package/build-module/autocomplete/index.js.map +1 -1
- package/build-module/border-box-control/border-box-control/hook.js +2 -2
- package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
- package/build-module/border-box-control/border-box-control-split-controls/component.js +2 -0
- package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
- package/build-module/border-box-control/border-box-control-split-controls/hook.js +11 -4
- package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
- package/build-module/border-box-control/border-box-control-visualizer/hook.js +4 -2
- package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
- package/build-module/border-box-control/styles.js +13 -8
- package/build-module/border-box-control/styles.js.map +1 -1
- package/build-module/border-control/border-control/hook.js +2 -2
- package/build-module/border-control/border-control/hook.js.map +1 -1
- package/build-module/color-palette/index.js +7 -5
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-palette/index.native.js +4 -1
- package/build-module/color-palette/index.native.js.map +1 -1
- package/build-module/color-picker/color-copy-button.js +73 -0
- package/build-module/color-picker/color-copy-button.js.map +1 -0
- package/build-module/color-picker/component.js +6 -15
- package/build-module/color-picker/component.js.map +1 -1
- package/build-module/color-picker/hex-input.js +18 -1
- package/build-module/color-picker/hex-input.js.map +1 -1
- package/build-module/color-picker/styles.js +9 -9
- package/build-module/color-picker/styles.js.map +1 -1
- package/build-module/custom-gradient-picker/utils.js +1 -1
- package/build-module/custom-gradient-picker/utils.js.map +1 -1
- package/build-module/date-time/{date.js → date/index.js} +46 -14
- package/build-module/date-time/date/index.js.map +1 -0
- package/build-module/date-time/date/styles.js +61 -0
- package/build-module/date-time/date/styles.js.map +1 -0
- package/build-module/date-time/{utils.js → date/utils.js} +0 -0
- package/build-module/date-time/date/utils.js.map +1 -0
- package/build-module/date-time/date-time/index.js +144 -0
- package/build-module/date-time/date-time/index.js.map +1 -0
- package/build-module/date-time/date-time/styles.js +22 -0
- package/build-module/date-time/date-time/styles.js.map +1 -0
- package/build-module/date-time/index.js +1 -105
- package/build-module/date-time/index.js.map +1 -1
- package/build-module/date-time/time/index.js +302 -0
- package/build-module/date-time/time/index.js.map +1 -0
- package/build-module/date-time/time/styles.js +118 -0
- package/build-module/date-time/time/styles.js.map +1 -0
- package/build-module/date-time/{timezone.js → time/timezone.js} +3 -2
- package/build-module/date-time/time/timezone.js.map +1 -0
- package/build-module/draggable/index.native.js +10 -5
- package/build-module/draggable/index.native.js.map +1 -1
- package/build-module/dropdown/index.js +4 -1
- package/build-module/dropdown/index.js.map +1 -1
- package/build-module/input-control/index.js +8 -4
- package/build-module/input-control/index.js.map +1 -1
- package/build-module/input-control/input-field.js +1 -25
- package/build-module/input-control/input-field.js.map +1 -1
- package/build-module/input-control/reducer/reducer.js +38 -26
- package/build-module/input-control/reducer/reducer.js.map +1 -1
- package/build-module/input-control/reducer/state.js +0 -1
- package/build-module/input-control/reducer/state.js.map +1 -1
- package/build-module/input-control/utils.js +48 -2
- package/build-module/input-control/utils.js.map +1 -1
- package/build-module/popover/index.js +40 -33
- package/build-module/popover/index.js.map +1 -1
- package/build-module/search-control/index.js +6 -7
- package/build-module/search-control/index.js.map +1 -1
- package/build-module/select-control/index.js +3 -1
- package/build-module/select-control/index.js.map +1 -1
- package/build-module/spacer/hook.js +10 -2
- package/build-module/spacer/hook.js.map +1 -1
- package/build-module/surface/component.js +7 -7
- package/build-module/surface/component.js.map +1 -1
- package/build-module/surface/hook.js +8 -11
- package/build-module/surface/hook.js.map +1 -1
- package/build-module/surface/index.js.map +1 -1
- package/build-module/surface/styles.js +8 -48
- package/build-module/surface/styles.js.map +1 -1
- package/build-module/textarea-control/index.js +36 -5
- package/build-module/textarea-control/index.js.map +1 -1
- package/build-module/textarea-control/styles/textarea-control-styles.js +3 -3
- package/build-module/textarea-control/styles/textarea-control-styles.js.map +1 -1
- package/build-module/textarea-control/types.js +2 -0
- package/build-module/textarea-control/types.js.map +1 -0
- package/build-module/utils/hooks/index.js +0 -1
- package/build-module/utils/hooks/index.js.map +1 -1
- package/build-style/style-rtl.css +13 -188
- package/build-style/style.css +13 -191
- package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -0
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
- package/build-types/border-box-control/styles.d.ts +3 -2
- package/build-types/border-box-control/styles.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts.map +1 -1
- package/build-types/card/types.d.ts +1 -1
- package/build-types/card/types.d.ts.map +1 -1
- package/build-types/checkbox-control/test/index.d.ts +2 -0
- package/build-types/checkbox-control/test/index.d.ts.map +1 -0
- package/build-types/color-palette/index.d.ts +1 -0
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/{date-time → color-palette}/test/utils.d.ts +0 -0
- package/build-types/color-palette/test/utils.d.ts.map +1 -0
- package/build-types/color-picker/color-copy-button.d.ts +4 -0
- package/build-types/color-picker/color-copy-button.d.ts.map +1 -0
- package/build-types/color-picker/component.d.ts.map +1 -1
- package/build-types/color-picker/hex-input.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +1 -1
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/color-picker/types.d.ts +8 -0
- package/build-types/color-picker/types.d.ts.map +1 -1
- package/build-types/date-time/{date.d.ts → date/index.d.ts} +3 -2
- package/build-types/date-time/date/index.d.ts.map +1 -0
- package/build-types/date-time/date/styles.d.ts +23 -0
- package/build-types/date-time/date/styles.d.ts.map +1 -0
- package/build-types/date-time/date/test/index.d.ts +2 -0
- package/build-types/date-time/date/test/index.d.ts.map +1 -0
- package/build-types/date-time/date/test/utils.d.ts +2 -0
- package/build-types/date-time/date/test/utils.d.ts.map +1 -0
- package/build-types/date-time/{utils.d.ts → date/utils.d.ts} +0 -0
- package/build-types/date-time/date/utils.d.ts.map +1 -0
- package/build-types/date-time/date-time/index.d.ts +33 -0
- package/build-types/date-time/date-time/index.d.ts.map +1 -0
- package/build-types/date-time/date-time/styles.d.ts +6 -0
- package/build-types/date-time/date-time/styles.d.ts.map +1 -0
- package/build-types/date-time/index.d.ts +2 -28
- package/build-types/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/stories/{index.d.ts → date-time.d.ts} +2 -2
- package/build-types/date-time/stories/date-time.d.ts.map +1 -0
- package/build-types/date-time/{time.d.ts → time/index.d.ts} +2 -2
- package/build-types/date-time/time/index.d.ts.map +1 -0
- package/build-types/date-time/time/styles.d.ts +111 -0
- package/build-types/date-time/time/styles.d.ts.map +1 -0
- package/build-types/date-time/time/test/index.d.ts +2 -0
- package/build-types/date-time/time/test/index.d.ts.map +1 -0
- package/build-types/date-time/{timezone.d.ts → time/timezone.d.ts} +0 -0
- package/build-types/date-time/time/timezone.d.ts.map +1 -0
- package/build-types/date-time/types.d.ts +14 -15
- package/build-types/date-time/types.d.ts.map +1 -1
- package/build-types/dropdown/index.d.ts.map +1 -1
- package/build-types/input-control/index.d.ts.map +1 -1
- package/build-types/input-control/input-field.d.ts.map +1 -1
- package/build-types/input-control/reducer/reducer.d.ts +5 -3
- package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
- package/build-types/input-control/reducer/state.d.ts +2 -2
- package/build-types/input-control/reducer/state.d.ts.map +1 -1
- package/build-types/input-control/utils.d.ts +17 -0
- package/build-types/input-control/utils.d.ts.map +1 -1
- package/build-types/popover/index.d.ts +1 -0
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/types.d.ts +1 -1
- package/build-types/select-control/types.d.ts.map +1 -1
- package/build-types/surface/component.d.ts +3 -2
- package/build-types/surface/component.d.ts.map +1 -1
- package/build-types/surface/hook.d.ts +4 -4
- package/build-types/surface/hook.d.ts.map +1 -1
- package/build-types/surface/index.d.ts +2 -2
- package/build-types/surface/index.d.ts.map +1 -1
- package/build-types/surface/stories/index.d.ts +12 -0
- package/build-types/surface/stories/index.d.ts.map +1 -0
- package/build-types/surface/styles.d.ts +10 -21
- package/build-types/surface/styles.d.ts.map +1 -1
- package/build-types/surface/test/index.d.ts +2 -0
- package/build-types/surface/test/index.d.ts.map +1 -0
- package/build-types/surface/types.d.ts +1 -1
- package/build-types/surface/types.d.ts.map +1 -1
- package/build-types/textarea-control/index.d.ts +29 -0
- package/build-types/textarea-control/index.d.ts.map +1 -0
- package/build-types/textarea-control/stories/index.d.ts +12 -0
- package/build-types/textarea-control/stories/index.d.ts.map +1 -0
- package/build-types/textarea-control/styles/textarea-control-styles.d.ts +6 -0
- package/build-types/textarea-control/styles/textarea-control-styles.d.ts.map +1 -0
- package/build-types/textarea-control/types.d.ts +26 -0
- package/build-types/textarea-control/types.d.ts.map +1 -0
- package/build-types/utils/hooks/index.d.ts +0 -1
- package/package.json +18 -18
- package/src/alignment-matrix-control/index.js +4 -2
- package/src/autocomplete/autocompleter-ui.js +1 -1
- package/src/autocomplete/autocompleter-ui.native.js +2 -2
- package/src/autocomplete/index.js +21 -9
- package/src/border-box-control/border-box-control/hook.ts +2 -2
- package/src/border-box-control/border-box-control-split-controls/component.tsx +2 -0
- package/src/border-box-control/border-box-control-split-controls/hook.ts +18 -4
- package/src/border-box-control/border-box-control-visualizer/hook.ts +5 -2
- package/src/border-box-control/styles.ts +6 -2
- package/src/border-control/border-control/hook.ts +8 -2
- package/src/box-control/test/index.js +120 -109
- package/src/card/types.ts +1 -1
- package/src/checkbox-control/test/__snapshots__/index.tsx.snap +42 -0
- package/src/checkbox-control/test/index.tsx +109 -0
- package/src/color-palette/index.js +11 -4
- package/src/color-palette/index.native.js +3 -0
- package/src/color-palette/stories/index.js +25 -1
- package/src/color-palette/test/utils.ts +24 -0
- package/src/color-picker/color-copy-button.tsx +76 -0
- package/src/color-picker/component.tsx +18 -38
- package/src/color-picker/hex-input.tsx +16 -0
- package/src/color-picker/styles.ts +5 -1
- package/src/color-picker/types.ts +9 -0
- package/src/custom-gradient-picker/utils.js +1 -1
- package/src/date-time/README.md +16 -0
- package/src/date-time/{datepicker.scss → date/datepicker.scss} +0 -0
- package/src/date-time/{date.tsx → date/index.tsx} +38 -15
- package/src/date-time/date/style.scss +75 -0
- package/src/date-time/date/styles.ts +55 -0
- package/src/date-time/{test/date.tsx → date/test/index.tsx} +1 -1
- package/src/date-time/{test → date/test}/utils.ts +0 -0
- package/src/date-time/{utils.ts → date/utils.ts} +0 -0
- package/src/date-time/date-time/index.tsx +217 -0
- package/src/date-time/date-time/styles.ts +8 -0
- package/src/date-time/index.ts +9 -0
- package/src/date-time/stories/{index.tsx → date-time.tsx} +1 -1
- package/src/date-time/style.scss +1 -262
- package/src/date-time/time/index.tsx +356 -0
- package/src/date-time/time/styles.ts +119 -0
- package/src/date-time/{test/time.tsx → time/test/index.tsx} +85 -38
- package/src/date-time/{timezone.tsx → time/timezone.tsx} +5 -2
- package/src/date-time/types.ts +16 -18
- package/src/draggable/index.native.js +14 -3
- package/src/draggable/test/index.native.js +130 -0
- package/src/dropdown/index.js +5 -1
- package/src/input-control/index.tsx +8 -2
- package/src/input-control/input-field.tsx +10 -30
- package/src/input-control/reducer/reducer.ts +40 -26
- package/src/input-control/reducer/state.ts +2 -3
- package/src/input-control/utils.ts +55 -1
- package/src/popover/index.js +42 -27
- package/src/query-controls/README.md +1 -1
- package/src/search-control/index.js +6 -7
- package/src/select-control/README.md +11 -0
- package/src/select-control/index.tsx +6 -1
- package/src/select-control/types.ts +1 -1
- package/src/slot-fill/README.md +1 -1
- package/src/spacer/hook.ts +13 -13
- package/src/surface/README.md +15 -15
- package/src/surface/{component.js → component.tsx} +13 -7
- package/src/surface/{hook.js → hook.ts} +13 -12
- package/src/surface/{index.js → index.ts} +0 -0
- package/src/surface/stories/index.tsx +40 -0
- package/src/surface/{styles.js → styles.ts} +15 -44
- package/src/surface/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
- package/src/surface/test/{index.js → index.tsx} +2 -1
- package/src/surface/types.ts +1 -1
- package/src/textarea-control/README.md +14 -20
- package/src/textarea-control/index.tsx +86 -0
- package/src/textarea-control/stories/index.tsx +58 -0
- package/src/textarea-control/styles/{textarea-control-styles.js → textarea-control-styles.ts} +0 -0
- package/src/textarea-control/types.ts +30 -0
- package/src/utils/hooks/index.js +0 -1
- package/tsconfig.json +1 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/color-picker/color-display.js +0 -184
- package/build/color-picker/color-display.js.map +0 -1
- package/build/date-time/date.js.map +0 -1
- package/build/date-time/time.js +0 -289
- package/build/date-time/time.js.map +0 -1
- package/build/date-time/timezone.js.map +0 -1
- package/build/date-time/utils.js.map +0 -1
- package/build/utils/hooks/use-combined-ref.js +0 -32
- package/build/utils/hooks/use-combined-ref.js.map +0 -1
- package/build-module/color-picker/color-display.js +0 -170
- package/build-module/color-picker/color-display.js.map +0 -1
- package/build-module/date-time/date.js.map +0 -1
- package/build-module/date-time/time.js +0 -271
- package/build-module/date-time/time.js.map +0 -1
- package/build-module/date-time/timezone.js.map +0 -1
- package/build-module/date-time/utils.js.map +0 -1
- package/build-module/utils/hooks/use-combined-ref.js +0 -28
- package/build-module/utils/hooks/use-combined-ref.js.map +0 -1
- package/build-types/color-picker/color-display.d.ts +0 -14
- package/build-types/color-picker/color-display.d.ts.map +0 -1
- package/build-types/date-time/date.d.ts.map +0 -1
- package/build-types/date-time/stories/index.d.ts.map +0 -1
- package/build-types/date-time/test/date.d.ts +0 -2
- package/build-types/date-time/test/date.d.ts.map +0 -1
- package/build-types/date-time/test/time.d.ts +0 -2
- package/build-types/date-time/test/time.d.ts.map +0 -1
- package/build-types/date-time/test/utils.d.ts.map +0 -1
- package/build-types/date-time/time.d.ts.map +0 -1
- package/build-types/date-time/timezone.d.ts.map +0 -1
- package/build-types/date-time/utils.d.ts.map +0 -1
- package/build-types/utils/hooks/use-combined-ref.d.ts +0 -8
- package/build-types/utils/hooks/use-combined-ref.d.ts.map +0 -1
- package/src/color-picker/color-display.tsx +0 -169
- package/src/date-time/index.tsx +0 -196
- package/src/date-time/time.tsx +0 -321
- package/src/surface/stories/index.js +0 -46
- package/src/textarea-control/index.js +0 -45
- package/src/textarea-control/stories/index.js +0 -48
- package/src/utils/hooks/use-combined-ref.ts +0 -28
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { render,
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* WordPress dependencies
|
|
8
9
|
*/
|
|
9
10
|
import { useState } from '@wordpress/element';
|
|
10
|
-
import { ENTER } from '@wordpress/keycodes';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Internal dependencies
|
|
14
14
|
*/
|
|
15
15
|
import BoxControl from '../';
|
|
16
16
|
|
|
17
|
+
const setupUser = () =>
|
|
18
|
+
userEvent.setup( {
|
|
19
|
+
advanceTimers: jest.advanceTimersByTime,
|
|
20
|
+
} );
|
|
21
|
+
|
|
22
|
+
const getInput = () =>
|
|
23
|
+
screen.getByLabelText( 'Box Control', { selector: 'input' } );
|
|
24
|
+
const getSelect = () => screen.getByLabelText( 'Select unit' );
|
|
25
|
+
const getReset = () => screen.getByText( /Reset/ );
|
|
26
|
+
|
|
17
27
|
describe( 'BoxControl', () => {
|
|
18
28
|
describe( 'Basic rendering', () => {
|
|
19
29
|
it( 'should render', () => {
|
|
@@ -23,42 +33,41 @@ describe( 'BoxControl', () => {
|
|
|
23
33
|
expect( input ).toBeTruthy();
|
|
24
34
|
} );
|
|
25
35
|
|
|
26
|
-
it( 'should update values when interacting with input', () => {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
const
|
|
36
|
+
it( 'should update values when interacting with input', async () => {
|
|
37
|
+
const user = setupUser();
|
|
38
|
+
render( <BoxControl /> );
|
|
39
|
+
const input = getInput();
|
|
40
|
+
const select = getSelect();
|
|
30
41
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
42
|
+
await user.type( input, '100%' );
|
|
43
|
+
await user.keyboard( '{Enter}' );
|
|
34
44
|
|
|
35
|
-
expect( input
|
|
36
|
-
expect(
|
|
45
|
+
expect( input ).toHaveValue( '100' );
|
|
46
|
+
expect( select ).toHaveValue( '%' );
|
|
37
47
|
} );
|
|
38
48
|
} );
|
|
39
49
|
|
|
40
50
|
describe( 'Reset', () => {
|
|
41
|
-
it( 'should reset values when clicking Reset', () => {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
const
|
|
51
|
+
it( 'should reset values when clicking Reset', async () => {
|
|
52
|
+
const user = setupUser();
|
|
53
|
+
render( <BoxControl /> );
|
|
54
|
+
const input = getInput();
|
|
55
|
+
const select = getSelect();
|
|
56
|
+
const reset = getReset();
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
58
|
+
await user.type( input, '100px' );
|
|
59
|
+
await user.keyboard( '{Enter}' );
|
|
50
60
|
|
|
51
|
-
expect( input
|
|
52
|
-
expect(
|
|
61
|
+
expect( input ).toHaveValue( '100' );
|
|
62
|
+
expect( select ).toHaveValue( 'px' );
|
|
53
63
|
|
|
54
|
-
|
|
55
|
-
fireEvent.click( reset );
|
|
64
|
+
await user.click( reset );
|
|
56
65
|
|
|
57
|
-
expect( input
|
|
58
|
-
expect(
|
|
66
|
+
expect( input ).toHaveValue( '' );
|
|
67
|
+
expect( select ).toHaveValue( 'px' );
|
|
59
68
|
} );
|
|
60
69
|
|
|
61
|
-
it( 'should reset values when clicking Reset, if controlled', () => {
|
|
70
|
+
it( 'should reset values when clicking Reset, if controlled', async () => {
|
|
62
71
|
const Example = () => {
|
|
63
72
|
const [ state, setState ] = useState();
|
|
64
73
|
|
|
@@ -69,26 +78,25 @@ describe( 'BoxControl', () => {
|
|
|
69
78
|
/>
|
|
70
79
|
);
|
|
71
80
|
};
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const
|
|
81
|
+
const user = setupUser();
|
|
82
|
+
render( <Example /> );
|
|
83
|
+
const input = getInput();
|
|
84
|
+
const select = getSelect();
|
|
85
|
+
const reset = getReset();
|
|
76
86
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
87
|
+
await user.type( input, '100px' );
|
|
88
|
+
await user.keyboard( '{Enter}' );
|
|
80
89
|
|
|
81
|
-
expect( input
|
|
82
|
-
expect(
|
|
90
|
+
expect( input ).toHaveValue( '100' );
|
|
91
|
+
expect( select ).toHaveValue( 'px' );
|
|
83
92
|
|
|
84
|
-
|
|
85
|
-
fireEvent.click( reset );
|
|
93
|
+
await user.click( reset );
|
|
86
94
|
|
|
87
|
-
expect( input
|
|
88
|
-
expect(
|
|
95
|
+
expect( input ).toHaveValue( '' );
|
|
96
|
+
expect( select ).toHaveValue( 'px' );
|
|
89
97
|
} );
|
|
90
98
|
|
|
91
|
-
it( 'should reset values when clicking Reset, if controlled <-> uncontrolled state changes', () => {
|
|
99
|
+
it( 'should reset values when clicking Reset, if controlled <-> uncontrolled state changes', async () => {
|
|
92
100
|
const Example = () => {
|
|
93
101
|
const [ state, setState ] = useState();
|
|
94
102
|
|
|
@@ -106,70 +114,78 @@ describe( 'BoxControl', () => {
|
|
|
106
114
|
/>
|
|
107
115
|
);
|
|
108
116
|
};
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
const
|
|
117
|
+
const user = setupUser();
|
|
118
|
+
render( <Example /> );
|
|
119
|
+
const input = getInput();
|
|
120
|
+
const select = getSelect();
|
|
121
|
+
const reset = getReset();
|
|
113
122
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
123
|
+
await user.type( input, '100px' );
|
|
124
|
+
await user.keyboard( '{Enter}' );
|
|
117
125
|
|
|
118
|
-
expect( input
|
|
119
|
-
expect(
|
|
126
|
+
expect( input ).toHaveValue( '100' );
|
|
127
|
+
expect( select ).toHaveValue( 'px' );
|
|
120
128
|
|
|
121
|
-
|
|
122
|
-
fireEvent.click( reset );
|
|
129
|
+
await user.click( reset );
|
|
123
130
|
|
|
124
|
-
expect( input
|
|
125
|
-
expect(
|
|
131
|
+
expect( input ).toHaveValue( '' );
|
|
132
|
+
expect( select ).toHaveValue( 'px' );
|
|
126
133
|
} );
|
|
127
134
|
|
|
128
|
-
it( 'should persist cleared value when focus changes', () => {
|
|
129
|
-
|
|
135
|
+
it( 'should persist cleared value when focus changes', async () => {
|
|
136
|
+
const user = setupUser();
|
|
137
|
+
const spyChange = jest.fn();
|
|
138
|
+
render( <BoxControl onChange={ ( v ) => spyChange( v ) } /> );
|
|
130
139
|
const input = screen.getByLabelText( 'Box Control', {
|
|
131
140
|
selector: 'input',
|
|
132
141
|
} );
|
|
133
142
|
const unitSelect = screen.getByLabelText( 'Select unit' );
|
|
134
143
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
144
|
+
await user.type( input, '100%' );
|
|
145
|
+
await user.keyboard( '{Enter}' );
|
|
138
146
|
|
|
139
|
-
expect( input
|
|
140
|
-
expect( unitSelect
|
|
147
|
+
expect( input ).toHaveValue( '100' );
|
|
148
|
+
expect( unitSelect ).toHaveValue( '%' );
|
|
141
149
|
|
|
142
|
-
|
|
143
|
-
|
|
150
|
+
await user.clear( input );
|
|
151
|
+
expect( input ).toHaveValue( '' );
|
|
152
|
+
// Clicking document.body to trigger a blur event on the input.
|
|
153
|
+
await user.click( document.body );
|
|
144
154
|
|
|
145
|
-
expect( input
|
|
155
|
+
expect( input ).toHaveValue( '' );
|
|
156
|
+
expect( spyChange ).toHaveBeenLastCalledWith( {
|
|
157
|
+
top: undefined,
|
|
158
|
+
right: undefined,
|
|
159
|
+
bottom: undefined,
|
|
160
|
+
left: undefined,
|
|
161
|
+
} );
|
|
146
162
|
} );
|
|
147
163
|
} );
|
|
148
164
|
|
|
149
165
|
describe( 'Unlinked Sides', () => {
|
|
150
|
-
it( 'should update a single side value when unlinked', () => {
|
|
166
|
+
it( 'should update a single side value when unlinked', async () => {
|
|
151
167
|
let state = {};
|
|
152
168
|
const setState = ( newState ) => ( state = newState );
|
|
153
169
|
|
|
154
|
-
const {
|
|
170
|
+
const { getAllByLabelText, getByLabelText } = render(
|
|
155
171
|
<BoxControl
|
|
156
172
|
values={ state }
|
|
157
173
|
onChange={ ( next ) => setState( next ) }
|
|
158
174
|
/>
|
|
159
175
|
);
|
|
160
|
-
|
|
176
|
+
const user = setupUser();
|
|
161
177
|
const unlink = getByLabelText( /Unlink Sides/ );
|
|
162
|
-
fireEvent.click( unlink );
|
|
163
178
|
|
|
164
|
-
|
|
165
|
-
|
|
179
|
+
await user.click( unlink );
|
|
180
|
+
|
|
181
|
+
const input = getByLabelText( /Top/ );
|
|
182
|
+
const select = getAllByLabelText( /Select unit/ )[ 0 ];
|
|
166
183
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
184
|
+
await user.type( input, '100px' );
|
|
185
|
+
await user.keyboard( '{Enter}' );
|
|
170
186
|
|
|
171
|
-
expect( input
|
|
172
|
-
expect(
|
|
187
|
+
expect( input ).toHaveValue( '100' );
|
|
188
|
+
expect( select ).toHaveValue( 'px' );
|
|
173
189
|
|
|
174
190
|
expect( state ).toEqual( {
|
|
175
191
|
top: '100px',
|
|
@@ -179,30 +195,30 @@ describe( 'BoxControl', () => {
|
|
|
179
195
|
} );
|
|
180
196
|
} );
|
|
181
197
|
|
|
182
|
-
it( 'should update a whole axis when value is changed when unlinked', () => {
|
|
198
|
+
it( 'should update a whole axis when value is changed when unlinked', async () => {
|
|
183
199
|
let state = {};
|
|
184
200
|
const setState = ( newState ) => ( state = newState );
|
|
185
201
|
|
|
186
|
-
const {
|
|
202
|
+
const { getAllByLabelText, getByLabelText } = render(
|
|
187
203
|
<BoxControl
|
|
188
204
|
values={ state }
|
|
189
205
|
onChange={ ( next ) => setState( next ) }
|
|
190
206
|
splitOnAxis={ true }
|
|
191
207
|
/>
|
|
192
208
|
);
|
|
193
|
-
|
|
209
|
+
const user = setupUser();
|
|
194
210
|
const unlink = getByLabelText( /Unlink Sides/ );
|
|
195
|
-
fireEvent.click( unlink );
|
|
196
211
|
|
|
197
|
-
|
|
198
|
-
|
|
212
|
+
await user.click( unlink );
|
|
213
|
+
|
|
214
|
+
const input = getByLabelText( /Vertical/ );
|
|
215
|
+
const select = getAllByLabelText( /Select unit/ )[ 0 ];
|
|
199
216
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
217
|
+
await user.type( input, '100px' );
|
|
218
|
+
await user.keyboard( '{Enter}' );
|
|
203
219
|
|
|
204
|
-
expect( input
|
|
205
|
-
expect(
|
|
220
|
+
expect( input ).toHaveValue( '100' );
|
|
221
|
+
expect( select ).toHaveValue( 'px' );
|
|
206
222
|
|
|
207
223
|
expect( state ).toEqual( {
|
|
208
224
|
top: '100px',
|
|
@@ -214,36 +230,34 @@ describe( 'BoxControl', () => {
|
|
|
214
230
|
} );
|
|
215
231
|
|
|
216
232
|
describe( 'Unit selections', () => {
|
|
217
|
-
it( 'should update unlinked controls unit selection based on all input control', () => {
|
|
233
|
+
it( 'should update unlinked controls unit selection based on all input control', async () => {
|
|
218
234
|
// Render control.
|
|
219
235
|
render( <BoxControl /> );
|
|
236
|
+
const user = setupUser();
|
|
220
237
|
|
|
221
238
|
// Make unit selection on all input control.
|
|
222
|
-
const allUnitSelect =
|
|
223
|
-
|
|
224
|
-
fireEvent.change( allUnitSelect, { target: { value: 'em' } } );
|
|
239
|
+
const allUnitSelect = getSelect();
|
|
240
|
+
await user.selectOptions( allUnitSelect, [ 'em' ] );
|
|
225
241
|
|
|
226
242
|
// Unlink the controls.
|
|
227
|
-
|
|
228
|
-
fireEvent.click( unlink );
|
|
243
|
+
await user.click( screen.getByLabelText( /Unlink Sides/ ) );
|
|
229
244
|
|
|
230
245
|
// Confirm that each individual control has the selected unit
|
|
231
246
|
const unlinkedSelects = screen.getAllByDisplayValue( 'em' );
|
|
232
247
|
expect( unlinkedSelects.length ).toEqual( 4 );
|
|
233
248
|
} );
|
|
234
249
|
|
|
235
|
-
it( 'should use individual side attribute unit when available', () => {
|
|
250
|
+
it( 'should use individual side attribute unit when available', async () => {
|
|
236
251
|
// Render control.
|
|
237
252
|
const { rerender } = render( <BoxControl /> );
|
|
253
|
+
const user = setupUser();
|
|
238
254
|
|
|
239
255
|
// Make unit selection on all input control.
|
|
240
|
-
const allUnitSelect =
|
|
241
|
-
|
|
242
|
-
fireEvent.change( allUnitSelect, { target: { value: 'vw' } } );
|
|
256
|
+
const allUnitSelect = getSelect();
|
|
257
|
+
await user.selectOptions( allUnitSelect, [ 'vw' ] );
|
|
243
258
|
|
|
244
259
|
// Unlink the controls.
|
|
245
|
-
|
|
246
|
-
fireEvent.click( unlink );
|
|
260
|
+
await user.click( screen.getByLabelText( /Unlink Sides/ ) );
|
|
247
261
|
|
|
248
262
|
// Confirm that each individual control has the selected unit
|
|
249
263
|
const unlinkedSelects = screen.getAllByDisplayValue( 'vw' );
|
|
@@ -261,18 +275,15 @@ describe( 'BoxControl', () => {
|
|
|
261
275
|
} );
|
|
262
276
|
|
|
263
277
|
describe( 'onChange updates', () => {
|
|
264
|
-
it( 'should call onChange when values contain more than just CSS units', () => {
|
|
278
|
+
it( 'should call onChange when values contain more than just CSS units', async () => {
|
|
265
279
|
const setState = jest.fn();
|
|
266
280
|
|
|
267
281
|
render( <BoxControl onChange={ setState } /> );
|
|
282
|
+
const user = setupUser();
|
|
283
|
+
const input = getInput();
|
|
268
284
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
} );
|
|
272
|
-
|
|
273
|
-
input.focus();
|
|
274
|
-
fireEvent.change( input, { target: { value: '7.5rem' } } );
|
|
275
|
-
fireEvent.keyDown( input, { keyCode: ENTER } );
|
|
285
|
+
await user.type( input, '7.5rem' );
|
|
286
|
+
await user.keyboard( '{Enter}' );
|
|
276
287
|
|
|
277
288
|
expect( setState ).toHaveBeenCalledWith( {
|
|
278
289
|
top: '7.5rem',
|
|
@@ -282,14 +293,14 @@ describe( 'BoxControl', () => {
|
|
|
282
293
|
} );
|
|
283
294
|
} );
|
|
284
295
|
|
|
285
|
-
it( 'should not pass invalid CSS unit only values to onChange', () => {
|
|
296
|
+
it( 'should not pass invalid CSS unit only values to onChange', async () => {
|
|
286
297
|
const setState = jest.fn();
|
|
287
298
|
|
|
288
299
|
render( <BoxControl onChange={ setState } /> );
|
|
300
|
+
const user = setupUser();
|
|
289
301
|
|
|
290
|
-
const allUnitSelect =
|
|
291
|
-
|
|
292
|
-
fireEvent.change( allUnitSelect, { target: { value: 'rem' } } );
|
|
302
|
+
const allUnitSelect = getSelect();
|
|
303
|
+
await user.selectOptions( allUnitSelect, 'rem' );
|
|
293
304
|
|
|
294
305
|
expect( setState ).toHaveBeenCalledWith( {
|
|
295
306
|
top: undefined,
|
package/src/card/types.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { CSSProperties } from 'react';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import type {
|
|
9
|
+
import type { SurfaceProps } from '../surface/types';
|
|
10
10
|
|
|
11
11
|
type DeprecatedSizeOptions = 'extraSmall';
|
|
12
12
|
export type SizeOptions = 'xSmall' | 'small' | 'medium' | 'large';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`CheckboxControl Basic rendering should render the indeterminate icon when in the indeterminate state 1`] = `
|
|
4
|
+
Snapshot Diff:
|
|
5
|
+
- First value
|
|
6
|
+
+ Second value
|
|
7
|
+
|
|
8
|
+
@@ -8,17 +8,31 @@
|
|
9
|
+
<span
|
|
10
|
+
class="components-checkbox-control__input-container"
|
|
11
|
+
>
|
|
12
|
+
<input
|
|
13
|
+
class="components-checkbox-control__input"
|
|
14
|
+
- id="inspector-checkbox-control-5"
|
|
15
|
+
+ id="inspector-checkbox-control-6"
|
|
16
|
+
type="checkbox"
|
|
17
|
+
value="1"
|
|
18
|
+
+ />
|
|
19
|
+
+ <svg
|
|
20
|
+
+ aria-hidden="true"
|
|
21
|
+
+ class="components-checkbox-control__indeterminate"
|
|
22
|
+
+ focusable="false"
|
|
23
|
+
+ height="24"
|
|
24
|
+
+ role="presentation"
|
|
25
|
+
+ viewBox="0 0 24 24"
|
|
26
|
+
+ width="24"
|
|
27
|
+
+ xmlns="http://www.w3.org/2000/svg"
|
|
28
|
+
+ >
|
|
29
|
+
+ <path
|
|
30
|
+
+ d="M7 11.5h10V13H7z"
|
|
31
|
+
/>
|
|
32
|
+
+ </svg>
|
|
33
|
+
</span>
|
|
34
|
+
<label
|
|
35
|
+
class="components-checkbox-control__label"
|
|
36
|
+
- for="inspector-checkbox-control-5"
|
|
37
|
+
+ for="inspector-checkbox-control-6"
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
`;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
import { noop } from 'lodash';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* WordPress dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { useState } from '@wordpress/element';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Internal dependencies
|
|
15
|
+
*/
|
|
16
|
+
import BaseCheckboxControl from '..';
|
|
17
|
+
import type { CheckboxControlProps } from '../types';
|
|
18
|
+
|
|
19
|
+
const getInput = () => screen.getByRole( 'checkbox' ) as HTMLInputElement;
|
|
20
|
+
|
|
21
|
+
const CheckboxControl = ( props: Omit< CheckboxControlProps, 'onChange' > ) => {
|
|
22
|
+
return <BaseCheckboxControl onChange={ noop } { ...props } />;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const ControlledCheckboxControl = ( { onChange }: CheckboxControlProps ) => {
|
|
26
|
+
const [ isChecked, setChecked ] = useState( false );
|
|
27
|
+
return (
|
|
28
|
+
<BaseCheckboxControl
|
|
29
|
+
checked={ isChecked }
|
|
30
|
+
onChange={ ( value ) => {
|
|
31
|
+
setChecked( value );
|
|
32
|
+
onChange( value );
|
|
33
|
+
} }
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
describe( 'CheckboxControl', () => {
|
|
39
|
+
describe( 'Basic rendering', () => {
|
|
40
|
+
it( 'should render', () => {
|
|
41
|
+
render( <CheckboxControl /> );
|
|
42
|
+
expect( getInput() ).not.toBeNull();
|
|
43
|
+
} );
|
|
44
|
+
|
|
45
|
+
it( 'should render an unchecked `checkbox` by default', () => {
|
|
46
|
+
render( <CheckboxControl /> );
|
|
47
|
+
expect( getInput() ).toHaveProperty( 'checked', false );
|
|
48
|
+
} );
|
|
49
|
+
|
|
50
|
+
it( 'should render an checked `checkbox` when `checked={ true }`', () => {
|
|
51
|
+
render( <CheckboxControl checked /> );
|
|
52
|
+
expect( getInput() ).toHaveProperty( 'checked', true );
|
|
53
|
+
} );
|
|
54
|
+
|
|
55
|
+
it( 'should render label', () => {
|
|
56
|
+
render( <CheckboxControl label="Hello" /> );
|
|
57
|
+
|
|
58
|
+
const label = screen.getByText( 'Hello' );
|
|
59
|
+
expect( label ).toBeInTheDocument();
|
|
60
|
+
} );
|
|
61
|
+
|
|
62
|
+
it( 'should render a checkbox in an indeterminate state', () => {
|
|
63
|
+
render( <CheckboxControl indeterminate /> );
|
|
64
|
+
expect( getInput() ).toHaveProperty( 'indeterminate', true );
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
it( 'should render the indeterminate icon when in the indeterminate state', () => {
|
|
68
|
+
const { container: containerDefault } = render(
|
|
69
|
+
<CheckboxControl />
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
const { container: containerIndeterminate } = render(
|
|
73
|
+
<CheckboxControl indeterminate />
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// Expect the diff snapshot to be mostly about the indeterminate icon
|
|
77
|
+
expect( containerDefault ).toMatchDiffSnapshot(
|
|
78
|
+
containerIndeterminate
|
|
79
|
+
);
|
|
80
|
+
} );
|
|
81
|
+
} );
|
|
82
|
+
|
|
83
|
+
describe( 'Value', () => {
|
|
84
|
+
it( 'should flip the checked property when clicked', async () => {
|
|
85
|
+
const user = userEvent.setup( {
|
|
86
|
+
advanceTimers: jest.advanceTimersByTime,
|
|
87
|
+
} );
|
|
88
|
+
|
|
89
|
+
let state = false;
|
|
90
|
+
const setState = jest.fn(
|
|
91
|
+
( nextState: boolean ) => ( state = nextState )
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
render( <ControlledCheckboxControl onChange={ setState } /> );
|
|
95
|
+
|
|
96
|
+
const input = getInput();
|
|
97
|
+
|
|
98
|
+
await user.click( input );
|
|
99
|
+
expect( input ).toHaveProperty( 'checked', true );
|
|
100
|
+
expect( state ).toBe( true );
|
|
101
|
+
|
|
102
|
+
await user.click( input );
|
|
103
|
+
expect( input ).toHaveProperty( 'checked', false );
|
|
104
|
+
expect( state ).toBe( false );
|
|
105
|
+
|
|
106
|
+
expect( setState ).toHaveBeenCalledTimes( 2 );
|
|
107
|
+
} );
|
|
108
|
+
} );
|
|
109
|
+
} );
|
|
@@ -126,7 +126,7 @@ export function CustomColorPickerDropdown( { isRenderedInSidebar, ...props } ) {
|
|
|
126
126
|
);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
const extractColorNameFromCurrentValue = (
|
|
129
|
+
export const extractColorNameFromCurrentValue = (
|
|
130
130
|
currentValue,
|
|
131
131
|
colors = [],
|
|
132
132
|
showMultiplePalettes = false
|
|
@@ -135,13 +135,20 @@ const extractColorNameFromCurrentValue = (
|
|
|
135
135
|
return '';
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
const currentValueIsCssVariable = /^var\(/.test( currentValue );
|
|
139
|
+
const normalizedCurrentValue = currentValueIsCssVariable
|
|
140
|
+
? currentValue
|
|
141
|
+
: colord( currentValue ).toHex();
|
|
142
|
+
|
|
138
143
|
// Normalize format of `colors` to simplify the following loop
|
|
139
144
|
const colorPalettes = showMultiplePalettes ? colors : [ { colors } ];
|
|
140
145
|
for ( const { colors: paletteColors } of colorPalettes ) {
|
|
141
146
|
for ( const { name: colorName, color: colorValue } of paletteColors ) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
const normalizedColorValue = currentValueIsCssVariable
|
|
148
|
+
? colorValue
|
|
149
|
+
: colord( colorValue ).toHex();
|
|
150
|
+
|
|
151
|
+
if ( normalizedCurrentValue === normalizedColorValue ) {
|
|
145
152
|
return colorName;
|
|
146
153
|
}
|
|
147
154
|
}
|
|
@@ -92,6 +92,9 @@ function ColorPalette( {
|
|
|
92
92
|
scrollViewRef.current.scrollTo( { x: 0, y: 0 } );
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
+
// Temporarily disabling exhuastive-deps until the component can be refactored and updated safely.
|
|
96
|
+
// Please see https://github.com/WordPress/gutenberg/pull/41253 for discussion and details.
|
|
97
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
95
98
|
}, [ currentSegment ] );
|
|
96
99
|
|
|
97
100
|
function isSelectedCustom() {
|
|
@@ -43,7 +43,10 @@ const meta = {
|
|
|
43
43
|
export default meta;
|
|
44
44
|
|
|
45
45
|
const Template = ( args ) => {
|
|
46
|
-
const
|
|
46
|
+
const firstColor =
|
|
47
|
+
args.colors[ 0 ].color || args.colors[ 0 ].colors[ 0 ].color;
|
|
48
|
+
const [ color, setColor ] = useState( firstColor );
|
|
49
|
+
|
|
47
50
|
return (
|
|
48
51
|
<SlotFillProvider>
|
|
49
52
|
<ColorPalette { ...args } value={ color } onChange={ setColor } />
|
|
@@ -88,3 +91,24 @@ MultipleOrigins.args = {
|
|
|
88
91
|
},
|
|
89
92
|
],
|
|
90
93
|
};
|
|
94
|
+
|
|
95
|
+
export const CSSVariables = ( args ) => {
|
|
96
|
+
return (
|
|
97
|
+
<div
|
|
98
|
+
style={ {
|
|
99
|
+
'--red': '#f00',
|
|
100
|
+
'--yellow': '#ff0',
|
|
101
|
+
'--blue': '#00f',
|
|
102
|
+
} }
|
|
103
|
+
>
|
|
104
|
+
<Template { ...args } />
|
|
105
|
+
</div>
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
CSSVariables.args = {
|
|
109
|
+
colors: [
|
|
110
|
+
{ name: 'Red', color: 'var(--red)' },
|
|
111
|
+
{ name: 'Yellow', color: 'var(--yellow)' },
|
|
112
|
+
{ name: 'Blue', color: 'var(--blue)' },
|
|
113
|
+
],
|
|
114
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { extractColorNameFromCurrentValue } from '../';
|
|
5
|
+
|
|
6
|
+
describe( 'ColorPalette: Utils', () => {
|
|
7
|
+
describe( 'extractColorNameFromCurrentValue', () => {
|
|
8
|
+
test( 'should support hex values', () => {
|
|
9
|
+
const result = extractColorNameFromCurrentValue( '#00f', [
|
|
10
|
+
{ name: 'Red', color: '#f00' },
|
|
11
|
+
{ name: 'Blue', color: '#00f' },
|
|
12
|
+
] );
|
|
13
|
+
expect( result ).toBe( 'Blue' );
|
|
14
|
+
} );
|
|
15
|
+
|
|
16
|
+
test( 'should support CSS variables', () => {
|
|
17
|
+
const result = extractColorNameFromCurrentValue( 'var(--blue)', [
|
|
18
|
+
{ name: 'Red', color: 'var(--red)' },
|
|
19
|
+
{ name: 'Blue', color: 'var(--blue)' },
|
|
20
|
+
] );
|
|
21
|
+
expect( result ).toBe( 'Blue' );
|
|
22
|
+
} );
|
|
23
|
+
} );
|
|
24
|
+
} );
|