@wordpress/components 22.1.0 → 23.0.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 +57 -0
- package/build/alignment-matrix-control/cell.js.map +1 -1
- package/build/alignment-matrix-control/icon.js +4 -2
- package/build/alignment-matrix-control/icon.js.map +1 -1
- package/build/alignment-matrix-control/index.js +25 -1
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
- package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build/alignment-matrix-control/types.js +6 -0
- package/build/alignment-matrix-control/types.js.map +1 -0
- package/build/alignment-matrix-control/utils.js +9 -8
- package/build/alignment-matrix-control/utils.js.map +1 -1
- package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
- package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build/autocomplete/index.js +38 -9
- package/build/autocomplete/index.js.map +1 -1
- package/build/base-control/hooks.js +52 -0
- package/build/base-control/hooks.js.map +1 -0
- package/build/base-control/index.js +24 -7
- package/build/base-control/index.js.map +1 -1
- package/build/base-field/hook.js +0 -14
- package/build/base-field/hook.js.map +1 -1
- package/build/base-field/index.js.map +1 -1
- package/build/base-field/styles.js +5 -5
- package/build/base-field/styles.js.map +1 -1
- package/build/base-field/types.js +6 -0
- package/build/base-field/types.js.map +1 -0
- package/build/border-control/border-control/component.js +1 -0
- package/build/border-control/border-control/component.js.map +1 -1
- package/build/border-control/styles.js +16 -16
- package/build/border-control/styles.js.map +1 -1
- package/build/box-control/linked-button.js +3 -4
- package/build/box-control/linked-button.js.map +1 -1
- package/build/color-palette/index.js +2 -7
- package/build/color-palette/index.js.map +1 -1
- package/build/color-picker/input-with-slider.js +1 -0
- package/build/color-picker/input-with-slider.js.map +1 -1
- package/build/color-picker/styles.js +8 -8
- package/build/color-picker/styles.js.map +1 -1
- package/build/custom-select-control/index.js +14 -2
- package/build/custom-select-control/index.js.map +1 -1
- package/build/dashicon/index.js +1 -4
- package/build/dashicon/index.js.map +1 -1
- package/build/date-time/date-time/index.js +4 -4
- package/build/date-time/date-time/index.js.map +1 -1
- package/build/duotone-picker/duotone-picker.js +2 -2
- package/build/duotone-picker/duotone-picker.js.map +1 -1
- package/build/gradient-picker/index.js +3 -9
- package/build/gradient-picker/index.js.map +1 -1
- package/build/higher-order/with-fallback-styles/index.js +2 -2
- package/build/higher-order/with-fallback-styles/index.js.map +1 -1
- package/build/index.js +13 -1
- package/build/index.js.map +1 -1
- package/build/input-control/index.js +17 -5
- package/build/input-control/index.js.map +1 -1
- package/build/input-control/input-base.js +2 -0
- package/build/input-control/input-base.js.map +1 -1
- package/build/mobile/bottom-sheet/cell.native.js +1 -1
- package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
- package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
- package/build/mobile/global-styles-context/index.native.js +8 -8
- package/build/mobile/global-styles-context/index.native.js.map +1 -1
- package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
- package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build/modal/index.js +8 -0
- package/build/modal/index.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +12 -8
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/number-control/styles/number-control-styles.js +8 -8
- package/build/number-control/styles/number-control-styles.js.map +1 -1
- package/build/palette-edit/index.js +72 -33
- package/build/palette-edit/index.js.map +1 -1
- package/build/popover/index.js +10 -2
- package/build/popover/index.js.map +1 -1
- package/build/query-controls/index.js +1 -0
- package/build/query-controls/index.js.map +1 -1
- package/build/snackbar/index.js +35 -24
- package/build/snackbar/index.js.map +1 -1
- package/build/snackbar/list.js +14 -19
- package/build/snackbar/list.js.map +1 -1
- package/build/snackbar/types.js +6 -0
- package/build/snackbar/types.js.map +1 -0
- package/build/tab-panel/index.js +10 -5
- package/build/tab-panel/index.js.map +1 -1
- package/build/theme/color-algorithms.js +118 -0
- package/build/theme/color-algorithms.js.map +1 -0
- package/build/theme/index.js +21 -18
- package/build/theme/index.js.map +1 -1
- package/build/theme/styles.js +10 -7
- package/build/theme/styles.js.map +1 -1
- package/build/toggle-control/index.js +5 -2
- package/build/toggle-control/index.js.map +1 -1
- package/build/ui/context/context-system-provider.js +3 -1
- package/build/ui/context/context-system-provider.js.map +1 -1
- package/build/unit-control/index.js +5 -2
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/colors-values.js +1 -1
- package/build/utils/colors-values.js.map +1 -1
- package/build/utils/config-values.js +0 -2
- package/build/utils/config-values.js.map +1 -1
- package/build/utils/hooks/use-controlled-value.js.map +1 -1
- package/build-module/alignment-matrix-control/cell.js.map +1 -1
- package/build-module/alignment-matrix-control/icon.js +4 -2
- package/build-module/alignment-matrix-control/icon.js.map +1 -1
- package/build-module/alignment-matrix-control/index.js +23 -1
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build-module/alignment-matrix-control/types.js +2 -0
- package/build-module/alignment-matrix-control/types.js.map +1 -0
- package/build-module/alignment-matrix-control/utils.js +13 -8
- package/build-module/alignment-matrix-control/utils.js.map +1 -1
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build-module/autocomplete/index.js +38 -9
- package/build-module/autocomplete/index.js.map +1 -1
- package/build-module/base-control/hooks.js +41 -0
- package/build-module/base-control/hooks.js.map +1 -0
- package/build-module/base-control/index.js +18 -8
- package/build-module/base-control/index.js.map +1 -1
- package/build-module/base-field/hook.js +0 -14
- package/build-module/base-field/hook.js.map +1 -1
- package/build-module/base-field/index.js.map +1 -1
- package/build-module/base-field/styles.js +5 -5
- package/build-module/base-field/styles.js.map +1 -1
- package/build-module/base-field/types.js +2 -0
- package/build-module/base-field/types.js.map +1 -0
- package/build-module/border-control/border-control/component.js +1 -0
- package/build-module/border-control/border-control/component.js.map +1 -1
- package/build-module/border-control/styles.js +17 -17
- package/build-module/border-control/styles.js.map +1 -1
- package/build-module/box-control/linked-button.js +3 -4
- package/build-module/box-control/linked-button.js.map +1 -1
- package/build-module/color-palette/index.js +2 -7
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-picker/input-with-slider.js +1 -0
- package/build-module/color-picker/input-with-slider.js.map +1 -1
- package/build-module/color-picker/styles.js +8 -8
- package/build-module/color-picker/styles.js.map +1 -1
- package/build-module/custom-select-control/index.js +14 -2
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/dashicon/index.js +1 -4
- package/build-module/dashicon/index.js.map +1 -1
- package/build-module/date-time/date-time/index.js +4 -4
- package/build-module/date-time/date-time/index.js.map +1 -1
- package/build-module/duotone-picker/duotone-picker.js +2 -2
- package/build-module/duotone-picker/duotone-picker.js.map +1 -1
- package/build-module/gradient-picker/index.js +3 -8
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/higher-order/with-fallback-styles/index.js +2 -2
- package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
- package/build-module/index.js +2 -2
- package/build-module/index.js.map +1 -1
- package/build-module/input-control/index.js +16 -5
- package/build-module/input-control/index.js.map +1 -1
- package/build-module/input-control/input-base.js +2 -0
- package/build-module/input-control/input-base.js.map +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
- package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/index.native.js +8 -7
- package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build-module/modal/index.js +8 -0
- package/build-module/modal/index.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +12 -8
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/number-control/styles/number-control-styles.js +8 -10
- package/build-module/number-control/styles/number-control-styles.js.map +1 -1
- package/build-module/palette-edit/index.js +73 -34
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/popover/index.js +10 -2
- package/build-module/popover/index.js.map +1 -1
- package/build-module/query-controls/index.js +1 -0
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/snackbar/index.js +33 -23
- package/build-module/snackbar/index.js.map +1 -1
- package/build-module/snackbar/list.js +14 -22
- package/build-module/snackbar/list.js.map +1 -1
- package/build-module/snackbar/types.js +2 -0
- package/build-module/snackbar/types.js.map +1 -0
- package/build-module/tab-panel/index.js +10 -5
- package/build-module/tab-panel/index.js.map +1 -1
- package/build-module/theme/color-algorithms.js +105 -0
- package/build-module/theme/color-algorithms.js.map +1 -0
- package/build-module/theme/index.js +21 -17
- package/build-module/theme/index.js.map +1 -1
- package/build-module/theme/styles.js +8 -6
- package/build-module/theme/styles.js.map +1 -1
- package/build-module/toggle-control/index.js +4 -2
- package/build-module/toggle-control/index.js.map +1 -1
- package/build-module/ui/context/context-system-provider.js +3 -2
- package/build-module/ui/context/context-system-provider.js.map +1 -1
- package/build-module/unit-control/index.js +5 -2
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/colors-values.js +1 -1
- package/build-module/utils/colors-values.js.map +1 -1
- package/build-module/utils/config-values.js +0 -2
- package/build-module/utils/config-values.js.map +1 -1
- package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
- package/build-style/style-rtl.css +92 -75
- package/build-style/style.css +92 -75
- package/build-types/alignment-matrix-control/cell.d.ts +5 -0
- package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/icon.d.ts +6 -0
- package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/index.d.ts +30 -0
- package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
- package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
- package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/types.d.ts +39 -0
- package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/utils.d.ts +33 -0
- package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
- package/build-types/base-control/hooks.d.ts +23 -0
- package/build-types/base-control/hooks.d.ts.map +1 -0
- package/build-types/base-control/index.d.ts +17 -7
- package/build-types/base-control/index.d.ts.map +1 -1
- package/build-types/base-control/stories/index.d.ts.map +1 -1
- package/build-types/base-control/test/index.d.ts +2 -0
- package/build-types/base-control/test/index.d.ts.map +1 -0
- package/build-types/base-control/types.d.ts +8 -2
- package/build-types/base-control/types.d.ts.map +1 -1
- package/build-types/base-field/hook.d.ts +7 -31
- package/build-types/base-field/hook.d.ts.map +1 -1
- package/build-types/base-field/index.d.ts +1 -1
- package/build-types/base-field/index.d.ts.map +1 -1
- package/build-types/base-field/styles.d.ts +5 -5
- package/build-types/base-field/styles.d.ts.map +1 -1
- package/build-types/base-field/test/index.d.ts +2 -0
- package/build-types/base-field/test/index.d.ts.map +1 -0
- package/build-types/base-field/types.d.ts +29 -0
- package/build-types/base-field/types.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
- package/build-types/border-control/border-control/component.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts +2 -2
- package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
- package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/card/card/hook.d.ts +2 -2
- package/build-types/card/card-body/hook.d.ts +2 -2
- package/build-types/card/card-divider/hook.d.ts +2 -2
- package/build-types/card/card-footer/hook.d.ts +2 -2
- package/build-types/card/card-header/hook.d.ts +2 -2
- package/build-types/card/card-media/hook.d.ts +2 -2
- package/build-types/color-palette/index.d.ts +2 -2
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-palette/stories/index.d.ts +6 -7
- package/build-types/color-palette/stories/index.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +1 -1
- package/build-types/color-palette/types.d.ts +1 -1
- package/build-types/color-palette/types.d.ts.map +1 -1
- package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +5 -5
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/custom-select-control/index.d.ts.map +1 -1
- package/build-types/dashicon/index.d.ts +6 -20
- package/build-types/dashicon/index.d.ts.map +1 -1
- package/build-types/dashicon/types.d.ts +14 -0
- package/build-types/dashicon/types.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +3 -3
- package/build-types/date-time/date-time/styles.d.ts +3 -3
- package/build-types/date-time/time/styles.d.ts +8 -8
- package/build-types/elevation/hook.d.ts +2 -2
- package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
- package/build-types/flex/flex/hook.d.ts +2 -2
- package/build-types/flex/flex-block/hook.d.ts +2 -2
- package/build-types/flex/flex-item/hook.d.ts +2 -2
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +2 -2
- package/build-types/h-stack/component.d.ts +1 -1
- package/build-types/h-stack/hook.d.ts +2 -2
- package/build-types/heading/hook.d.ts +2 -2
- package/build-types/input-control/index.d.ts +1 -1
- package/build-types/input-control/index.d.ts.map +1 -1
- package/build-types/input-control/input-base.d.ts.map +1 -1
- package/build-types/input-control/stories/index.d.ts +1 -0
- package/build-types/input-control/stories/index.d.ts.map +1 -1
- package/build-types/input-control/types.d.ts +2 -1
- package/build-types/input-control/types.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts +2 -2
- package/build-types/item-group/item-group/hook.d.ts +2 -2
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/modal/stories/index.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
- package/build-types/navigator/navigator-button/hook.d.ts +3 -3
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/number-control/index.d.ts +2 -2
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/number-control/stories/index.d.ts +25 -0
- package/build-types/number-control/stories/index.d.ts.map +1 -0
- package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
- package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
- package/build-types/number-control/test/index.d.ts +2 -0
- package/build-types/number-control/test/index.d.ts.map +1 -0
- package/build-types/popover/index.d.ts +1 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/popover/stories/e2e/index.d.ts +1 -1
- package/build-types/range-control/index.d.ts +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
- package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
- package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
- package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
- package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
- package/build-types/scrollable/hook.d.ts +2 -2
- package/build-types/search-control/index.d.ts +1 -1
- package/build-types/search-control/stories/index.d.ts +2 -2
- package/build-types/snackbar/index.d.ts +19 -0
- package/build-types/snackbar/index.d.ts.map +1 -0
- package/build-types/snackbar/list.d.ts +18 -0
- package/build-types/snackbar/list.d.ts.map +1 -0
- package/build-types/snackbar/stories/index.d.ts +16 -0
- package/build-types/snackbar/stories/index.d.ts.map +1 -0
- package/build-types/snackbar/stories/list.d.ts +12 -0
- package/build-types/snackbar/stories/list.d.ts.map +1 -0
- package/build-types/snackbar/types.d.ts +111 -0
- package/build-types/snackbar/types.d.ts.map +1 -0
- package/build-types/spacer/hook.d.ts +2 -2
- package/build-types/spinner/index.d.ts +1 -1
- package/build-types/surface/hook.d.ts +2 -2
- package/build-types/tab-panel/index.d.ts +1 -1
- package/build-types/tab-panel/index.d.ts.map +1 -1
- package/build-types/tab-panel/types.d.ts +19 -1
- package/build-types/tab-panel/types.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +2 -2
- package/build-types/text-control/index.d.ts +2 -2
- package/build-types/text-control/stories/index.d.ts.map +1 -1
- package/build-types/text-control/types.d.ts +1 -5
- package/build-types/text-control/types.d.ts.map +1 -1
- package/build-types/theme/color-algorithms.d.ts +20 -0
- package/build-types/theme/color-algorithms.d.ts.map +1 -0
- package/build-types/theme/index.d.ts +1 -1
- package/build-types/theme/index.d.ts.map +1 -1
- package/build-types/theme/stories/index.d.ts +4 -0
- package/build-types/theme/stories/index.d.ts.map +1 -1
- package/build-types/theme/styles.d.ts +3 -2
- package/build-types/theme/styles.d.ts.map +1 -1
- package/build-types/theme/test/color-algorithms.d.ts +2 -0
- package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
- package/build-types/theme/types.d.ts +41 -3
- package/build-types/theme/types.d.ts.map +1 -1
- package/build-types/toggle-control/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
- package/build-types/truncate/hook.d.ts +2 -2
- package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
- package/build-types/ui/control-group/hook.d.ts +2 -2
- package/build-types/ui/control-label/hook.d.ts +2 -2
- package/build-types/ui/form-group/form-group.d.ts +2 -2
- package/build-types/ui/form-group/use-form-group.d.ts +5 -5
- package/build-types/unit-control/index.d.ts +2 -1
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
- package/build-types/unit-control/types.d.ts +4 -0
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +0 -2
- package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
- package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
- package/build-types/v-stack/component.d.ts +2 -2
- package/build-types/v-stack/hook.d.ts +2 -2
- package/build-types/v-stack/stories/index.d.ts +2 -2
- package/package.json +21 -20
- package/src/alignment-matrix-control/README.md +7 -7
- package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
- package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
- package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
- package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
- package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
- package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
- package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
- package/src/alignment-matrix-control/types.ts +54 -0
- package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
- package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
- package/src/autocomplete/index.js +43 -12
- package/src/base-control/README.md +21 -12
- package/src/base-control/hooks.ts +45 -0
- package/src/base-control/index.tsx +18 -7
- package/src/base-control/stories/index.tsx +8 -10
- package/src/base-control/test/index.tsx +52 -0
- package/src/base-control/types.ts +8 -2
- package/src/base-field/README.md +21 -22
- package/src/base-field/{hook.js → hook.ts} +5 -15
- package/src/base-field/{index.js → index.ts} +0 -0
- package/src/base-field/{styles.js → styles.ts} +2 -2
- package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
- package/src/base-field/test/{index.js → index.tsx} +10 -5
- package/src/base-field/types.ts +29 -0
- package/src/border-box-control/border-box-control/README.md +1 -0
- package/src/border-box-control/test/index.js +3 -1
- package/src/border-control/border-control/component.tsx +1 -0
- package/src/border-control/styles.ts +1 -10
- package/src/box-control/linked-button.js +8 -11
- package/src/box-control/test/index.js +206 -135
- package/src/button/stories/index.js +30 -0
- package/src/button/style.scss +17 -14
- package/src/button/test/index.js +32 -15
- package/src/card/test/index.tsx +32 -20
- package/src/circular-option-picker/style.scss +1 -0
- package/src/color-palette/index.tsx +4 -6
- package/src/color-palette/stories/index.tsx +1 -5
- package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
- package/src/color-palette/test/index.tsx +84 -36
- package/src/color-palette/types.ts +1 -1
- package/src/color-picker/README.md +1 -0
- package/src/color-picker/input-with-slider.tsx +1 -0
- package/src/color-picker/styles.ts +0 -4
- package/src/confirm-dialog/README.md +3 -2
- package/src/custom-select-control/README.md +14 -0
- package/src/custom-select-control/index.js +14 -2
- package/src/dashicon/{index.js → index.tsx} +10 -4
- package/src/dashicon/types.ts +17 -0
- package/src/date-time/date-time/index.tsx +2 -2
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
- package/src/disabled/test/index.tsx +21 -11
- package/src/dropdown/test/index.js +39 -49
- package/src/dropdown-menu/test/index.js +18 -12
- package/src/duotone-picker/duotone-picker.js +2 -2
- package/src/focal-point-picker/test/media.js +26 -21
- package/src/form-token-field/style.scss +1 -1
- package/src/gradient-picker/index.js +5 -8
- package/src/grid/test/grid.tsx +31 -31
- package/src/higher-order/navigate-regions/style.scss +2 -22
- package/src/higher-order/with-fallback-styles/index.js +4 -2
- package/src/higher-order/with-filters/test/index.js +94 -101
- package/src/higher-order/with-focus-return/test/index.js +1 -4
- package/src/index.js +2 -2
- package/src/input-control/index.tsx +42 -28
- package/src/input-control/input-base.tsx +8 -1
- package/src/input-control/stories/index.tsx +6 -0
- package/src/input-control/test/index.js +18 -0
- package/src/input-control/types.ts +2 -0
- package/src/mobile/bottom-sheet/cell.native.js +1 -1
- package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
- package/src/mobile/global-styles-context/index.native.js +9 -11
- package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
- package/src/mobile/link-settings/test/edit.native.js +68 -124
- package/src/modal/index.tsx +11 -0
- package/src/modal/stories/index.tsx +3 -0
- package/src/modal/test/index.tsx +15 -0
- package/src/navigation/stories/index.js +6 -6
- package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
- package/src/navigation/stories/{default.js → utils/default.js} +3 -3
- package/src/navigation/stories/{group.js → utils/group.js} +4 -4
- package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
- package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
- package/src/navigation/stories/{search.js → utils/search.js} +5 -5
- package/src/navigator/navigator-provider/component.tsx +13 -10
- package/src/notice/test/list.js +8 -5
- package/src/number-control/stories/{index.js → index.tsx} +24 -7
- package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
- package/src/number-control/test/index.tsx +600 -0
- package/src/palette-edit/index.js +88 -39
- package/src/palette-edit/test/index.js +25 -1
- package/src/popover/index.tsx +10 -2
- package/src/popover/style.scss +12 -11
- package/src/popover/test/index.tsx +25 -15
- package/src/query-controls/index.js +1 -0
- package/src/range-control/test/index.tsx +57 -60
- package/src/resizable-box/style.scss +1 -0
- package/src/sandbox/test/index.js +13 -11
- package/src/search-control/style.scss +4 -0
- package/src/snackbar/README.md +63 -8
- package/src/snackbar/{index.js → index.tsx} +46 -28
- package/src/snackbar/{list.js → list.tsx} +20 -21
- package/src/snackbar/stories/index.tsx +96 -0
- package/src/snackbar/stories/list.tsx +98 -0
- package/src/snackbar/types.ts +116 -0
- package/src/tab-panel/README.md +9 -0
- package/src/tab-panel/index.tsx +14 -3
- package/src/tab-panel/style.scss +46 -34
- package/src/tab-panel/test/index.tsx +111 -0
- package/src/tab-panel/types.ts +20 -1
- package/src/text/test/__snapshots__/index.tsx.snap +1 -0
- package/src/text/test/index.tsx +98 -46
- package/src/text-control/stories/index.tsx +0 -1
- package/src/text-control/types.ts +1 -6
- package/src/theme/README.md +32 -2
- package/src/theme/color-algorithms.ts +138 -0
- package/src/theme/index.tsx +23 -16
- package/src/theme/stories/index.tsx +67 -0
- package/src/theme/styles.ts +22 -17
- package/src/theme/test/color-algorithms.ts +100 -0
- package/src/theme/test/index.tsx +68 -35
- package/src/theme/types.ts +43 -3
- package/src/toggle-control/index.tsx +4 -2
- package/src/toggle-group-control/test/index.tsx +13 -2
- package/src/toolbar-group/test/index.js +8 -6
- package/src/tools-panel/stories/index.js +1 -1
- package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
- package/src/tools-panel/test/index.js +20 -14
- package/src/tooltip/README.md +7 -0
- package/src/tooltip/style.scss +2 -2
- package/src/tooltip/test/index.js +109 -18
- package/src/ui/context/context-system-provider.js +3 -2
- package/src/ui/context/test/context-system-provider.js +5 -4
- package/src/ui/control-label/test/index.js +3 -5
- package/src/unit-control/README.md +9 -1
- package/src/unit-control/index.tsx +3 -0
- package/src/unit-control/test/index.tsx +1 -0
- package/src/unit-control/types.ts +4 -0
- package/src/utils/colors-values.js +1 -1
- package/src/utils/config-values.js +0 -2
- package/src/utils/hooks/use-controlled-value.ts +2 -2
- package/src/utils/theme-variables.scss +20 -0
- package/tsconfig.json +2 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/src/number-control/test/index.js +0 -478
- package/src/snackbar/stories/index.js +0 -89
package/src/text/test/index.tsx
CHANGED
|
@@ -19,133 +19,185 @@ describe( 'Text', () => {
|
|
|
19
19
|
} );
|
|
20
20
|
|
|
21
21
|
test( 'should render optimizeReadabilityFor', () => {
|
|
22
|
-
|
|
23
|
-
<Text optimizeReadabilityFor="blue">
|
|
22
|
+
render(
|
|
23
|
+
<Text role="heading" optimizeReadabilityFor="blue">
|
|
24
|
+
Lorem ipsum.
|
|
25
|
+
</Text>
|
|
24
26
|
);
|
|
25
|
-
expect(
|
|
27
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
26
28
|
color: COLORS.white,
|
|
27
29
|
} );
|
|
28
30
|
} );
|
|
29
31
|
|
|
30
32
|
test( 'should render truncate', () => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
render(
|
|
34
|
+
<Text role="heading" truncate>
|
|
35
|
+
Lorem ipsum.
|
|
36
|
+
</Text>
|
|
37
|
+
);
|
|
38
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
33
39
|
textOverflow: 'ellipsis',
|
|
34
40
|
} );
|
|
35
41
|
} );
|
|
36
42
|
|
|
37
43
|
test( 'should render size', () => {
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
render(
|
|
45
|
+
<Text role="heading" size="title">
|
|
46
|
+
Lorem ipsum.
|
|
47
|
+
</Text>
|
|
48
|
+
);
|
|
49
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
40
50
|
fontSize: getFontSize( 'title' ),
|
|
41
51
|
} );
|
|
42
52
|
} );
|
|
43
53
|
|
|
44
54
|
test( 'should render custom size', () => {
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
render(
|
|
56
|
+
<Text role="heading" size={ 15 }>
|
|
57
|
+
Lorem ipsum.
|
|
58
|
+
</Text>
|
|
59
|
+
);
|
|
60
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
47
61
|
fontSize: getFontSize( 15 ),
|
|
48
62
|
} );
|
|
49
63
|
} );
|
|
50
64
|
|
|
51
65
|
test( 'should render variant', () => {
|
|
52
|
-
|
|
53
|
-
<Text variant="muted">
|
|
66
|
+
render(
|
|
67
|
+
<Text role="heading" variant="muted">
|
|
68
|
+
Lorem ipsum.
|
|
69
|
+
</Text>
|
|
54
70
|
);
|
|
55
|
-
expect(
|
|
71
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
56
72
|
color: COLORS.gray[ 700 ],
|
|
57
73
|
} );
|
|
58
74
|
} );
|
|
59
75
|
|
|
60
76
|
test( 'should render as another element', () => {
|
|
61
|
-
|
|
62
|
-
|
|
77
|
+
render(
|
|
78
|
+
<Text role="heading" as="div">
|
|
79
|
+
Lorem ipsum.
|
|
80
|
+
</Text>
|
|
81
|
+
);
|
|
82
|
+
expect( screen.getByRole( 'heading' )?.nodeName ).toBe( 'DIV' );
|
|
63
83
|
} );
|
|
64
84
|
|
|
65
85
|
test( 'should render align', () => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
render(
|
|
87
|
+
<>
|
|
88
|
+
<Text role="heading" align="center">
|
|
89
|
+
Lorem ipsum.
|
|
90
|
+
</Text>
|
|
91
|
+
<Text role="note">Lorem ipsum.</Text>
|
|
92
|
+
</>
|
|
71
93
|
);
|
|
72
94
|
|
|
73
|
-
expect(
|
|
74
|
-
|
|
75
|
-
)
|
|
95
|
+
expect( screen.getByRole( 'note' ) ).toMatchStyleDiffSnapshot(
|
|
96
|
+
screen.getByRole( 'heading' )
|
|
97
|
+
);
|
|
76
98
|
} );
|
|
77
99
|
|
|
78
100
|
test( 'should render color', () => {
|
|
79
|
-
|
|
80
|
-
<Text color="orange">
|
|
101
|
+
render(
|
|
102
|
+
<Text role="heading" color="orange">
|
|
103
|
+
Lorem ipsum.
|
|
104
|
+
</Text>
|
|
81
105
|
);
|
|
82
|
-
expect(
|
|
106
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
107
|
+
color: 'orange',
|
|
108
|
+
} );
|
|
83
109
|
} );
|
|
84
110
|
|
|
85
111
|
test( 'should render display', () => {
|
|
86
|
-
|
|
87
|
-
<Text display="inline-flex">
|
|
112
|
+
render(
|
|
113
|
+
<Text role="heading" display="inline-flex">
|
|
114
|
+
Lorem ipsum.
|
|
115
|
+
</Text>
|
|
88
116
|
);
|
|
89
|
-
expect(
|
|
117
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
90
118
|
display: 'inline-flex',
|
|
91
119
|
} );
|
|
92
120
|
} );
|
|
93
121
|
|
|
94
122
|
test( 'should render highlighted words', async () => {
|
|
95
|
-
|
|
96
|
-
<Text highlightWords={ [ 'm' ] }>
|
|
123
|
+
render(
|
|
124
|
+
<Text role="heading" highlightWords={ [ 'm' ] }>
|
|
125
|
+
Lorem ipsum.
|
|
126
|
+
</Text>
|
|
97
127
|
);
|
|
98
|
-
expect(
|
|
128
|
+
expect( screen.getByRole( 'heading' )?.childNodes ).toHaveLength( 5 );
|
|
99
129
|
const words = await screen.findAllByText( 'm' );
|
|
100
130
|
expect( words ).toHaveLength( 2 );
|
|
101
131
|
words.forEach( ( word ) => expect( word.tagName ).toEqual( 'MARK' ) );
|
|
102
132
|
} );
|
|
103
133
|
|
|
104
134
|
test( 'should render highlighted words with undefined passed', () => {
|
|
105
|
-
|
|
106
|
-
<Text highlightWords={ undefined }>
|
|
135
|
+
render(
|
|
136
|
+
<Text role="heading" highlightWords={ undefined }>
|
|
137
|
+
Lorem ipsum.
|
|
138
|
+
</Text>
|
|
107
139
|
);
|
|
108
140
|
// It'll have a length of 1 because there shouldn't be anything but the single span being rendered.
|
|
109
|
-
expect(
|
|
141
|
+
expect( screen.getByRole( 'heading' )?.childNodes ).toHaveLength( 1 );
|
|
110
142
|
} );
|
|
111
143
|
|
|
112
144
|
test( 'should render highlighted words with highlightCaseSensitive', () => {
|
|
113
145
|
const { container } = render(
|
|
114
|
-
<Text
|
|
146
|
+
<Text
|
|
147
|
+
role="heading"
|
|
148
|
+
highlightCaseSensitive
|
|
149
|
+
highlightWords={ [ 'IPSUM' ] }
|
|
150
|
+
>
|
|
115
151
|
Lorem ipsum.
|
|
116
152
|
</Text>
|
|
117
153
|
);
|
|
118
154
|
|
|
119
155
|
expect( container ).toMatchSnapshot();
|
|
120
156
|
// It'll have a length of 1 because there shouldn't be anything but the single span being rendered.
|
|
121
|
-
expect(
|
|
157
|
+
expect( screen.getByRole( 'heading' )?.childNodes ).toHaveLength( 1 );
|
|
122
158
|
} );
|
|
123
159
|
|
|
124
160
|
test( 'should render isBlock', () => {
|
|
125
|
-
|
|
126
|
-
|
|
161
|
+
render(
|
|
162
|
+
<Text role="heading" isBlock>
|
|
163
|
+
Lorem ipsum.
|
|
164
|
+
</Text>
|
|
165
|
+
);
|
|
166
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
127
167
|
display: 'block',
|
|
128
168
|
} );
|
|
129
169
|
} );
|
|
130
170
|
|
|
131
171
|
test( 'should render lineHeight', () => {
|
|
132
|
-
|
|
133
|
-
<Text lineHeight={ 1.5 }>
|
|
172
|
+
render(
|
|
173
|
+
<Text role="heading" lineHeight={ 1.5 }>
|
|
174
|
+
Lorem ipsum.
|
|
175
|
+
</Text>
|
|
134
176
|
);
|
|
135
|
-
expect(
|
|
177
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
178
|
+
lineHeight: '1.5',
|
|
179
|
+
} );
|
|
136
180
|
} );
|
|
137
181
|
|
|
138
182
|
test( 'should render upperCase', () => {
|
|
139
|
-
|
|
140
|
-
|
|
183
|
+
render(
|
|
184
|
+
<Text role="heading" upperCase>
|
|
185
|
+
Lorem ipsum.
|
|
186
|
+
</Text>
|
|
187
|
+
);
|
|
188
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
141
189
|
textTransform: 'uppercase',
|
|
142
190
|
} );
|
|
143
191
|
} );
|
|
144
192
|
|
|
145
193
|
test( 'should render weight', () => {
|
|
146
|
-
|
|
147
|
-
<Text weight={ 700 }>
|
|
194
|
+
render(
|
|
195
|
+
<Text role="heading" weight={ 700 }>
|
|
196
|
+
Lorem ipsum.
|
|
197
|
+
</Text>
|
|
148
198
|
);
|
|
149
|
-
expect(
|
|
199
|
+
expect( screen.getByRole( 'heading' ) ).toHaveStyle( {
|
|
200
|
+
fontWeight: '700',
|
|
201
|
+
} );
|
|
150
202
|
} );
|
|
151
203
|
} );
|
|
@@ -19,7 +19,6 @@ const meta: ComponentMeta< typeof TextControl > = {
|
|
|
19
19
|
argTypes: {
|
|
20
20
|
help: { control: { type: 'text' } },
|
|
21
21
|
label: { control: { type: 'text' } },
|
|
22
|
-
type: { control: { type: 'text' } },
|
|
23
22
|
onChange: { action: 'onChange' },
|
|
24
23
|
value: { control: { type: null } },
|
|
25
24
|
},
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import type { HTMLInputTypeAttribute } from 'react';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* Internal dependencies
|
|
8
3
|
*/
|
|
@@ -29,5 +24,5 @@ export type TextControlProps = Pick<
|
|
|
29
24
|
*
|
|
30
25
|
* @default 'text'
|
|
31
26
|
*/
|
|
32
|
-
type?:
|
|
27
|
+
type?: 'email' | 'number' | 'password' | 'tel' | 'text' | 'search' | 'url';
|
|
33
28
|
};
|
package/src/theme/README.md
CHANGED
|
@@ -17,7 +17,7 @@ const Example = () => {
|
|
|
17
17
|
return (
|
|
18
18
|
<Theme accent="red">
|
|
19
19
|
<Button variant="primary">I'm red</Button>
|
|
20
|
-
<Theme accent="blue">
|
|
20
|
+
<Theme accent="blue" background="black">
|
|
21
21
|
<Button variant="primary">I'm blue</Button>
|
|
22
22
|
</Theme>
|
|
23
23
|
</Theme>
|
|
@@ -29,6 +29,36 @@ const Example = () => {
|
|
|
29
29
|
|
|
30
30
|
### `accent`: `string`
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
The accent color (used by components as the primary color). If an accent color is not defined, the default fallback value is the original WP Admin main theme color.
|
|
33
|
+
|
|
34
|
+
Not all valid CSS color syntaxes are supported — in particular, keywords (like `'currentcolor'`, `'inherit'`, `'initial'`, `'revert'`, `'unset'`...) and CSS custom properties (e.g. `var(--my-custom-property)`) are _not_ supported values for this property.
|
|
33
35
|
|
|
34
36
|
- Required: No
|
|
37
|
+
|
|
38
|
+
### `background`: `string`
|
|
39
|
+
|
|
40
|
+
The background color. If a component explicitly has a background, it will be this color. Otherwise, this color will simply be used to determine what the foreground colors should be. The actual background color will need to be set on the component's container element. If a background color is not defined, the default fallback value is #fff.
|
|
41
|
+
|
|
42
|
+
Not all valid CSS color syntaxes are supported — in particular, keywords (like `'currentcolor'`, `'inherit'`, `'initial'`, `'revert'`, `'unset'`...) and CSS custom properties (e.g. `var(--my-custom-property)`) are _not_ supported values for this property.
|
|
43
|
+
|
|
44
|
+
- Required: No
|
|
45
|
+
|
|
46
|
+
## Writing themeable components
|
|
47
|
+
|
|
48
|
+
If you would like your custom component to be themeable as a child of the `Theme` component, it should use these color variables. (This is a work in progress, and this list of variables may change. We do not recommend using these variables in production at this time.)
|
|
49
|
+
|
|
50
|
+
- `--wp-components-color-accent`: The accent color.
|
|
51
|
+
- `--wp-components-color-accent-darker-10`: A slightly darker version of the accent color.
|
|
52
|
+
- `--wp-components-color-accent-darker-20`: An even darker version of the accent color.
|
|
53
|
+
- `--wp-components-color-accent-inverted`: The foreground color when the accent color is the background, for example when placing text on the accent color.
|
|
54
|
+
- `--wp-components-color-background`: The background color.
|
|
55
|
+
- `--wp-components-color-foreground`: The foreground color, for example text.
|
|
56
|
+
- `--wp-components-color-foreground-inverted`: The foreground color when the foreground color is the background, for example when placing text on the foreground color.
|
|
57
|
+
- Grayscale:
|
|
58
|
+
- `--wp-components-color-gray-100`: Used for light gray backgrounds.
|
|
59
|
+
- `--wp-components-color-gray-200`: Used sparingly for light borders.
|
|
60
|
+
- `--wp-components-color-gray-300`: Used for most borders.
|
|
61
|
+
- `--wp-components-color-gray-400`
|
|
62
|
+
- `--wp-components-color-gray-600`: Meets 3:1 UI or large text contrast against white.
|
|
63
|
+
- `--wp-components-color-gray-700`: Meets 4.6:1 text contrast against white.
|
|
64
|
+
- `--wp-components-color-gray-800`
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { colord, extend } from 'colord';
|
|
5
|
+
import a11yPlugin from 'colord/plugins/a11y';
|
|
6
|
+
import namesPlugin from 'colord/plugins/names';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* WordPress dependencies
|
|
10
|
+
*/
|
|
11
|
+
import warning from '@wordpress/warning';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Internal dependencies
|
|
15
|
+
*/
|
|
16
|
+
import type { ThemeInputValues, ThemeOutputValues } from './types';
|
|
17
|
+
import { COLORS } from '../utils';
|
|
18
|
+
|
|
19
|
+
extend( [ namesPlugin, a11yPlugin ] );
|
|
20
|
+
|
|
21
|
+
export function generateThemeVariables(
|
|
22
|
+
inputs: ThemeInputValues
|
|
23
|
+
): ThemeOutputValues {
|
|
24
|
+
validateInputs( inputs );
|
|
25
|
+
|
|
26
|
+
const generatedColors = {
|
|
27
|
+
...generateAccentDependentColors( inputs.accent ),
|
|
28
|
+
...generateBackgroundDependentColors( inputs.background ),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
warnContrastIssues( checkContrasts( inputs, generatedColors ) );
|
|
32
|
+
|
|
33
|
+
return { colors: generatedColors };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function validateInputs( inputs: ThemeInputValues ) {
|
|
37
|
+
for ( const [ key, value ] of Object.entries( inputs ) ) {
|
|
38
|
+
if ( typeof value !== 'undefined' && ! colord( value ).isValid() ) {
|
|
39
|
+
warning(
|
|
40
|
+
`wp.components.Theme: "${ value }" is not a valid color value for the '${ key }' prop.`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function checkContrasts(
|
|
47
|
+
inputs: ThemeInputValues,
|
|
48
|
+
outputs: ThemeOutputValues[ 'colors' ]
|
|
49
|
+
) {
|
|
50
|
+
const background = inputs.background || COLORS.white;
|
|
51
|
+
const accent = inputs.accent || '#007cba';
|
|
52
|
+
const foreground = outputs.foreground || COLORS.gray[ 900 ];
|
|
53
|
+
const gray = outputs.gray || COLORS.gray;
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
accent: colord( background ).isReadable( accent )
|
|
57
|
+
? undefined
|
|
58
|
+
: `The background color ("${ background }") does not have sufficient contrast against the accent color ("${ accent }").`,
|
|
59
|
+
foreground: colord( background ).isReadable( foreground )
|
|
60
|
+
? undefined
|
|
61
|
+
: `The background color provided ("${ background }") does not have sufficient contrast against the standard foreground colors.`,
|
|
62
|
+
grays:
|
|
63
|
+
colord( background ).contrast( gray[ 600 ] ) >= 3 &&
|
|
64
|
+
colord( background ).contrast( gray[ 700 ] ) >= 4.5
|
|
65
|
+
? undefined
|
|
66
|
+
: `The background color provided ("${ background }") cannot generate a set of grayscale foreground colors with sufficient contrast. Try adjusting the color to be lighter or darker.`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function warnContrastIssues( issues: ReturnType< typeof checkContrasts > ) {
|
|
71
|
+
for ( const error of Object.values( issues ) ) {
|
|
72
|
+
if ( error ) {
|
|
73
|
+
warning( 'wp.components.Theme: ' + error );
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function generateAccentDependentColors( accent?: string ) {
|
|
79
|
+
if ( ! accent ) return {};
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
accent,
|
|
83
|
+
accentDarker10: colord( accent ).darken( 0.1 ).toHex(),
|
|
84
|
+
accentDarker20: colord( accent ).darken( 0.2 ).toHex(),
|
|
85
|
+
accentInverted: getForegroundForColor( accent ),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function generateBackgroundDependentColors( background?: string ) {
|
|
90
|
+
if ( ! background ) return {};
|
|
91
|
+
|
|
92
|
+
const foreground = getForegroundForColor( background );
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
background,
|
|
96
|
+
foreground,
|
|
97
|
+
foregroundInverted: getForegroundForColor( foreground ),
|
|
98
|
+
gray: generateShades( background, foreground ),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function getForegroundForColor( color: string ) {
|
|
103
|
+
return colord( color ).isDark() ? COLORS.white : COLORS.gray[ 900 ];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function generateShades( background: string, foreground: string ) {
|
|
107
|
+
// How much darkness you need to add to #fff to get the COLORS.gray[n] color
|
|
108
|
+
const SHADES = {
|
|
109
|
+
100: 0.06,
|
|
110
|
+
200: 0.121,
|
|
111
|
+
300: 0.132,
|
|
112
|
+
400: 0.2,
|
|
113
|
+
600: 0.42,
|
|
114
|
+
700: 0.543,
|
|
115
|
+
800: 0.821,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// Darkness of COLORS.gray[ 900 ], relative to #fff
|
|
119
|
+
const limit = 0.884;
|
|
120
|
+
|
|
121
|
+
const direction = colord( background ).isDark() ? 'lighten' : 'darken';
|
|
122
|
+
|
|
123
|
+
// Lightness delta between the background and foreground colors
|
|
124
|
+
const range =
|
|
125
|
+
Math.abs(
|
|
126
|
+
colord( background ).toHsl().l - colord( foreground ).toHsl().l
|
|
127
|
+
) / 100;
|
|
128
|
+
|
|
129
|
+
const result: Record< number, string > = {};
|
|
130
|
+
|
|
131
|
+
Object.entries( SHADES ).forEach( ( [ key, value ] ) => {
|
|
132
|
+
result[ parseInt( key ) ] = colord( background )
|
|
133
|
+
[ direction ]( ( value / limit ) * range )
|
|
134
|
+
.toHex();
|
|
135
|
+
} );
|
|
136
|
+
|
|
137
|
+
return result as NonNullable< ThemeOutputValues[ 'colors' ][ 'gray' ] >;
|
|
138
|
+
}
|
package/src/theme/index.tsx
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import a11yPlugin from 'colord/plugins/a11y';
|
|
6
|
-
import namesPlugin from 'colord/plugins/names';
|
|
4
|
+
import { useMemo } from '@wordpress/element';
|
|
7
5
|
|
|
8
6
|
/**
|
|
9
7
|
* Internal dependencies
|
|
10
8
|
*/
|
|
11
9
|
import type { ThemeProps } from './types';
|
|
12
10
|
import type { WordPressComponentProps } from '../ui/context';
|
|
13
|
-
import { Wrapper } from './styles';
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
import { colorVariables, Wrapper } from './styles';
|
|
12
|
+
import { generateThemeVariables } from './color-algorithms';
|
|
13
|
+
import { useCx } from '../utils';
|
|
16
14
|
|
|
17
15
|
/**
|
|
18
16
|
* `Theme` allows defining theme variables for components in the `@wordpress/components` package.
|
|
@@ -36,16 +34,25 @@ extend( [ namesPlugin, a11yPlugin ] );
|
|
|
36
34
|
* };
|
|
37
35
|
* ```
|
|
38
36
|
*/
|
|
39
|
-
function Theme(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
function Theme( {
|
|
38
|
+
accent,
|
|
39
|
+
background,
|
|
40
|
+
className,
|
|
41
|
+
...props
|
|
42
|
+
}: WordPressComponentProps< ThemeProps, 'div', true > ) {
|
|
43
|
+
const cx = useCx();
|
|
44
|
+
const classes = useMemo(
|
|
45
|
+
() =>
|
|
46
|
+
cx(
|
|
47
|
+
...colorVariables(
|
|
48
|
+
generateThemeVariables( { accent, background } )
|
|
49
|
+
),
|
|
50
|
+
className
|
|
51
|
+
),
|
|
52
|
+
[ accent, background, className, cx ]
|
|
53
|
+
);
|
|
47
54
|
|
|
48
|
-
return <Wrapper { ...props } />;
|
|
55
|
+
return <Wrapper className={ classes } { ...props } />;
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
export default Theme;
|
|
@@ -8,12 +8,15 @@ import type { ComponentMeta, ComponentStory } from '@storybook/react';
|
|
|
8
8
|
*/
|
|
9
9
|
import Theme from '../index';
|
|
10
10
|
import Button from '../../button';
|
|
11
|
+
import { generateThemeVariables, checkContrasts } from '../color-algorithms';
|
|
12
|
+
import { HStack } from '../../h-stack';
|
|
11
13
|
|
|
12
14
|
const meta: ComponentMeta< typeof Theme > = {
|
|
13
15
|
component: Theme,
|
|
14
16
|
title: 'Components (Experimental)/Theme',
|
|
15
17
|
argTypes: {
|
|
16
18
|
accent: { control: { type: 'color' } },
|
|
19
|
+
background: { control: { type: 'color' } },
|
|
17
20
|
},
|
|
18
21
|
parameters: {
|
|
19
22
|
controls: { expanded: true },
|
|
@@ -45,3 +48,67 @@ export const Nested: ComponentStory< typeof Theme > = ( args ) => (
|
|
|
45
48
|
Nested.args = {
|
|
46
49
|
accent: 'blue',
|
|
47
50
|
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The rest of the required colors are generated based on the given accent and background colors.
|
|
54
|
+
*/
|
|
55
|
+
export const ColorScheme: ComponentStory< typeof Theme > = ( {
|
|
56
|
+
accent,
|
|
57
|
+
background,
|
|
58
|
+
} ) => {
|
|
59
|
+
const { colors } = generateThemeVariables( { accent, background } );
|
|
60
|
+
const { gray, ...otherColors } = colors;
|
|
61
|
+
const contrastIssues = Object.entries(
|
|
62
|
+
checkContrasts( { accent, background }, colors )
|
|
63
|
+
).filter( ( [ _, error ] ) => !! error );
|
|
64
|
+
|
|
65
|
+
const Chip = ( { color, name }: { color: string; name: string } ) => (
|
|
66
|
+
<HStack justify="flex-start">
|
|
67
|
+
<div
|
|
68
|
+
style={ {
|
|
69
|
+
backgroundColor: color,
|
|
70
|
+
height: '1.25em',
|
|
71
|
+
width: 40,
|
|
72
|
+
} }
|
|
73
|
+
/>
|
|
74
|
+
<div style={ { fontSize: 14 } }>{ name }</div>
|
|
75
|
+
</HStack>
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<>
|
|
80
|
+
{ Object.entries( otherColors ).map( ( [ key, value ] ) => (
|
|
81
|
+
<Chip color={ value } name={ key } key={ key } />
|
|
82
|
+
) ) }
|
|
83
|
+
{ Object.entries( gray as NonNullable< typeof gray > ).map(
|
|
84
|
+
( [ key, value ] ) => (
|
|
85
|
+
<Chip
|
|
86
|
+
color={ value }
|
|
87
|
+
name={ `gray ${ key }` }
|
|
88
|
+
key={ key }
|
|
89
|
+
/>
|
|
90
|
+
)
|
|
91
|
+
) }
|
|
92
|
+
{ !! contrastIssues.length && (
|
|
93
|
+
<>
|
|
94
|
+
<h2>Contrast issues</h2>
|
|
95
|
+
<ul>
|
|
96
|
+
{ contrastIssues.map( ( [ key, error ] ) => (
|
|
97
|
+
<li key={ key }>{ error }</li>
|
|
98
|
+
) ) }
|
|
99
|
+
</ul>
|
|
100
|
+
</>
|
|
101
|
+
) }
|
|
102
|
+
</>
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
ColorScheme.args = {
|
|
106
|
+
accent: '#007cba',
|
|
107
|
+
background: '#fff',
|
|
108
|
+
};
|
|
109
|
+
ColorScheme.argTypes = {
|
|
110
|
+
children: { table: { disable: true } },
|
|
111
|
+
};
|
|
112
|
+
ColorScheme.parameters = {
|
|
113
|
+
docs: { source: { state: 'closed' } },
|
|
114
|
+
};
|
package/src/theme/styles.ts
CHANGED
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { colord } from 'colord';
|
|
5
4
|
import styled from '@emotion/styled';
|
|
6
5
|
import { css } from '@emotion/react';
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* Internal dependencies
|
|
10
9
|
*/
|
|
11
|
-
import type {
|
|
10
|
+
import type { ThemeOutputValues } from './types';
|
|
12
11
|
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
--wp-components-color-accent-darker-10: ${ colord( accent )
|
|
18
|
-
.darken( 0.1 )
|
|
19
|
-
.toHex() };
|
|
20
|
-
--wp-components-color-accent-darker-20: ${ colord( accent )
|
|
21
|
-
.darken( 0.2 )
|
|
22
|
-
.toHex() };
|
|
23
|
-
`
|
|
24
|
-
: undefined;
|
|
12
|
+
export const colorVariables = ( { colors }: ThemeOutputValues ) => {
|
|
13
|
+
const shades = Object.entries( colors.gray || {} )
|
|
14
|
+
.map( ( [ k, v ] ) => `--wp-components-color-gray-${ k }: ${ v };` )
|
|
15
|
+
.join( '' );
|
|
25
16
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
return [
|
|
18
|
+
css`
|
|
19
|
+
--wp-components-color-accent: ${ colors.accent };
|
|
20
|
+
--wp-components-color-accent-darker-10: ${ colors.accentDarker10 };
|
|
21
|
+
--wp-components-color-accent-darker-20: ${ colors.accentDarker20 };
|
|
22
|
+
--wp-components-color-accent-inverted: ${ colors.accentInverted };
|
|
23
|
+
|
|
24
|
+
--wp-components-color-background: ${ colors.background };
|
|
25
|
+
--wp-components-color-foreground: ${ colors.foreground };
|
|
26
|
+
--wp-components-color-foreground-inverted: ${ colors.foregroundInverted };
|
|
27
|
+
|
|
28
|
+
${ shades }
|
|
29
|
+
`,
|
|
30
|
+
];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const Wrapper = styled.div``;
|