@wordpress/components 36.1.0 → 37.0.1-next.v.202607070741.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 +60 -3
- package/CONTRIBUTING.md +6 -4
- package/build/border-box-control/border-box-control/component.cjs +4 -9
- package/build/border-box-control/border-box-control/component.cjs.map +2 -2
- package/build/border-box-control/border-box-control/hook.cjs +3 -10
- package/build/border-box-control/border-box-control/hook.cjs.map +2 -2
- package/build/border-box-control/border-box-control-linked-button/hook.cjs +2 -3
- package/build/border-box-control/border-box-control-linked-button/hook.cjs.map +2 -2
- package/build/border-box-control/border-box-control-split-controls/component.cjs +2 -6
- package/build/border-box-control/border-box-control-split-controls/component.cjs.map +2 -2
- package/build/border-box-control/border-box-control-split-controls/hook.cjs +2 -4
- package/build/border-box-control/border-box-control-split-controls/hook.cjs.map +2 -2
- package/build/border-box-control/border-box-control-visualizer/hook.cjs +2 -3
- package/build/border-box-control/border-box-control-visualizer/hook.cjs.map +2 -2
- package/build/border-box-control/styles.cjs +20 -17
- package/build/border-box-control/styles.cjs.map +2 -2
- package/build/border-control/border-control/component.cjs +3 -11
- package/build/border-control/border-control/component.cjs.map +2 -2
- package/build/border-control/border-control/hook.cjs +11 -21
- package/build/border-control/border-control/hook.cjs.map +3 -3
- package/build/border-control/border-control-dropdown/component.cjs +1 -2
- package/build/border-control/border-control-dropdown/component.cjs.map +2 -2
- package/build/border-control/border-control-dropdown/hook.cjs +2 -4
- package/build/border-control/border-control-dropdown/hook.cjs.map +2 -2
- package/build/border-control/border-control-style-picker/component.cjs +0 -1
- package/build/border-control/border-control-style-picker/component.cjs.map +2 -2
- package/build/border-control/styles.cjs +27 -15
- package/build/border-control/styles.cjs.map +2 -2
- package/build/box-control/box-input-control.cjs +0 -5
- package/build/box-control/box-input-control.cjs.map +2 -2
- package/build/card/card/hook.cjs +4 -1
- package/build/card/card/hook.cjs.map +2 -2
- package/build/card/card-footer/hook.cjs +12 -12
- package/build/card/card-footer/hook.cjs.map +2 -2
- package/build/card/card-header/hook.cjs +12 -12
- package/build/card/card-header/hook.cjs.map +2 -2
- package/build/card/styles.cjs +43 -13
- package/build/card/styles.cjs.map +2 -2
- package/build/color-picker/component.cjs.map +2 -2
- package/build/color-picker/input-with-slider.cjs +0 -1
- package/build/color-picker/input-with-slider.cjs.map +2 -2
- package/build/combobox-control/index.cjs +1 -10
- package/build/combobox-control/index.cjs.map +2 -2
- package/build/combobox-control/styles.cjs +1 -5
- package/build/combobox-control/styles.cjs.map +2 -2
- package/build/custom-gradient-picker/index.cjs +0 -1
- package/build/custom-gradient-picker/index.cjs.map +2 -2
- package/build/custom-select-control/index.cjs +4 -19
- package/build/custom-select-control/index.cjs.map +2 -2
- package/build/date-time/time-picker/index.cjs +0 -1
- package/build/date-time/time-picker/index.cjs.map +2 -2
- package/build/date-time/time-picker/time-input/index.cjs +0 -1
- package/build/date-time/time-picker/time-input/index.cjs.map +2 -2
- package/build/divider/component.cjs +1 -1
- package/build/divider/component.cjs.map +2 -2
- package/build/elevation/hook.cjs +6 -5
- package/build/elevation/hook.cjs.map +2 -2
- package/build/external-link/index.cjs +0 -3
- package/build/external-link/index.cjs.map +2 -2
- package/build/flex/flex/hook.cjs +97 -18
- package/build/flex/flex/hook.cjs.map +4 -4
- package/build/flex/flex-item/hook.cjs +94 -10
- package/build/flex/flex-item/hook.cjs.map +4 -4
- package/build/focal-point-picker/controls.cjs +0 -1
- package/build/focal-point-picker/controls.cjs.map +2 -2
- package/build/focal-point-picker/index.cjs +1 -0
- package/build/focal-point-picker/index.cjs.map +2 -2
- package/build/font-size-picker/font-size-picker-select.cjs +1 -6
- package/build/font-size-picker/font-size-picker-select.cjs.map +2 -2
- package/build/font-size-picker/font-size-picker-toggle-group.cjs +0 -5
- package/build/font-size-picker/font-size-picker-toggle-group.cjs.map +2 -2
- package/build/font-size-picker/index.cjs +1 -18
- package/build/font-size-picker/index.cjs.map +2 -2
- package/build/form-file-upload/index.cjs +7 -18
- package/build/form-file-upload/index.cjs.map +2 -2
- package/build/form-token-field/index.cjs +1 -11
- package/build/form-token-field/index.cjs.map +2 -2
- package/build/form-token-field/styles.cjs +1 -7
- package/build/form-token-field/styles.cjs.map +2 -2
- package/build/number-control/index.cjs.map +2 -2
- package/build/query-controls/author-select.cjs +1 -3
- package/build/query-controls/author-select.cjs.map +2 -2
- package/build/query-controls/category-select.cjs +1 -3
- package/build/query-controls/category-select.cjs.map +2 -2
- package/build/query-controls/index.cjs +0 -5
- package/build/query-controls/index.cjs.map +2 -2
- package/build/radio-group/radio.cjs +6 -14
- package/build/radio-group/radio.cjs.map +2 -2
- package/build/range-control/index.cjs +6 -15
- package/build/range-control/index.cjs.map +2 -2
- package/build/range-control/styles/range-control-styles.cjs +32 -30
- package/build/range-control/styles/range-control-styles.cjs.map +2 -2
- package/build/resizable-box/index.cjs.map +2 -2
- package/build/search-control/index.cjs +2 -1
- package/build/search-control/index.cjs.map +2 -2
- package/build/select-control/index.cjs +7 -15
- package/build/select-control/index.cjs.map +2 -2
- package/build/select-control/styles/select-control-styles.cjs +8 -16
- package/build/select-control/styles/select-control-styles.cjs.map +2 -2
- package/build/slot-fill/index.cjs.map +2 -2
- package/build/spacer/hook.cjs +4 -3
- package/build/spacer/hook.cjs.map +2 -2
- package/build/surface/hook.cjs +103 -16
- package/build/surface/hook.cjs.map +4 -4
- package/build/text/hook.cjs +11 -11
- package/build/text/hook.cjs.map +2 -2
- package/build/theme/index.cjs +119 -7
- package/build/theme/index.cjs.map +4 -4
- package/build/toggle-group-control/toggle-group-control/as-button-group.cjs +1 -3
- package/build/toggle-group-control/toggle-group-control/as-button-group.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs +1 -3
- package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/component.cjs +6 -16
- package/build/toggle-group-control/toggle-group-control/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/styles.cjs +11 -37
- package/build/toggle-group-control/toggle-group-control/styles.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option-base/component.cjs +3 -5
- package/build/toggle-group-control/toggle-group-control-option-base/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs +14 -18
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option-icon/component.cjs.map +1 -1
- package/build/tools-panel/styles.cjs +24 -15
- package/build/tools-panel/styles.cjs.map +2 -2
- package/build/tools-panel/tools-panel/component.cjs.map +2 -2
- package/build/tools-panel/tools-panel/hook.cjs +5 -3
- package/build/tools-panel/tools-panel/hook.cjs.map +2 -2
- package/build/tree-select/index.cjs +9 -20
- package/build/tree-select/index.cjs.map +2 -2
- package/build/truncate/hook.cjs +95 -9
- package/build/truncate/hook.cjs.map +4 -4
- package/build/unit-control/index.cjs +3 -12
- package/build/unit-control/index.cjs.map +2 -2
- package/build/utils/config-values.cjs +0 -6
- package/build/utils/config-values.cjs.map +2 -2
- package/build/utils/hooks/use-cx.cjs.map +2 -2
- package/build/utils/polymorphic-element.cjs +123 -0
- package/build/utils/polymorphic-element.cjs.map +7 -0
- package/build/validated-form-controls/components/combobox-control.cjs +0 -1
- package/build/validated-form-controls/components/combobox-control.cjs.map +2 -2
- package/build/validated-form-controls/components/custom-select-control.cjs +0 -1
- package/build/validated-form-controls/components/custom-select-control.cjs.map +2 -2
- package/build/validated-form-controls/components/form-token-field.cjs +0 -1
- package/build/validated-form-controls/components/form-token-field.cjs.map +2 -2
- package/build/validated-form-controls/components/range-control.cjs +0 -1
- package/build/validated-form-controls/components/range-control.cjs.map +2 -2
- package/build/validated-form-controls/components/select-control.cjs +0 -1
- package/build/validated-form-controls/components/select-control.cjs.map +2 -2
- package/build/validated-form-controls/components/toggle-group-control.cjs +0 -1
- package/build/validated-form-controls/components/toggle-group-control.cjs.map +2 -2
- package/build/view/component.cjs +4 -20
- package/build/view/component.cjs.map +3 -3
- package/build-module/border-box-control/border-box-control/component.mjs +4 -9
- package/build-module/border-box-control/border-box-control/component.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control/hook.mjs +3 -10
- package/build-module/border-box-control/border-box-control/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-linked-button/hook.mjs +2 -3
- package/build-module/border-box-control/border-box-control-linked-button/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-split-controls/component.mjs +2 -6
- package/build-module/border-box-control/border-box-control-split-controls/component.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-split-controls/hook.mjs +2 -4
- package/build-module/border-box-control/border-box-control-split-controls/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-visualizer/hook.mjs +2 -3
- package/build-module/border-box-control/border-box-control-visualizer/hook.mjs.map +2 -2
- package/build-module/border-box-control/styles.mjs +20 -17
- package/build-module/border-box-control/styles.mjs.map +2 -2
- package/build-module/border-control/border-control/component.mjs +3 -11
- package/build-module/border-control/border-control/component.mjs.map +2 -2
- package/build-module/border-control/border-control/hook.mjs +11 -21
- package/build-module/border-control/border-control/hook.mjs.map +3 -3
- package/build-module/border-control/border-control-dropdown/component.mjs +1 -2
- package/build-module/border-control/border-control-dropdown/component.mjs.map +2 -2
- package/build-module/border-control/border-control-dropdown/hook.mjs +2 -4
- package/build-module/border-control/border-control-dropdown/hook.mjs.map +2 -2
- package/build-module/border-control/border-control-style-picker/component.mjs +0 -1
- package/build-module/border-control/border-control-style-picker/component.mjs.map +2 -2
- package/build-module/border-control/styles.mjs +26 -15
- package/build-module/border-control/styles.mjs.map +2 -2
- package/build-module/box-control/box-input-control.mjs +0 -5
- package/build-module/box-control/box-input-control.mjs.map +2 -2
- package/build-module/card/card/hook.mjs +4 -1
- package/build-module/card/card/hook.mjs.map +2 -2
- package/build-module/card/card-footer/hook.mjs +12 -12
- package/build-module/card/card-footer/hook.mjs.map +2 -2
- package/build-module/card/card-header/hook.mjs +12 -12
- package/build-module/card/card-header/hook.mjs.map +2 -2
- package/build-module/card/styles.mjs +40 -13
- package/build-module/card/styles.mjs.map +2 -2
- package/build-module/color-picker/component.mjs.map +2 -2
- package/build-module/color-picker/input-with-slider.mjs +0 -1
- package/build-module/color-picker/input-with-slider.mjs.map +2 -2
- package/build-module/combobox-control/index.mjs +1 -10
- package/build-module/combobox-control/index.mjs.map +2 -2
- package/build-module/combobox-control/styles.mjs +1 -5
- package/build-module/combobox-control/styles.mjs.map +2 -2
- package/build-module/custom-gradient-picker/index.mjs +0 -1
- package/build-module/custom-gradient-picker/index.mjs.map +2 -2
- package/build-module/custom-select-control/index.mjs +4 -19
- package/build-module/custom-select-control/index.mjs.map +2 -2
- package/build-module/date-time/time-picker/index.mjs +0 -1
- package/build-module/date-time/time-picker/index.mjs.map +2 -2
- package/build-module/date-time/time-picker/time-input/index.mjs +0 -1
- package/build-module/date-time/time-picker/time-input/index.mjs.map +2 -2
- package/build-module/divider/component.mjs +1 -1
- package/build-module/divider/component.mjs.map +2 -2
- package/build-module/elevation/hook.mjs +6 -5
- package/build-module/elevation/hook.mjs.map +2 -2
- package/build-module/external-link/index.mjs +0 -3
- package/build-module/external-link/index.mjs.map +2 -2
- package/build-module/flex/flex/hook.mjs +97 -18
- package/build-module/flex/flex/hook.mjs.map +3 -3
- package/build-module/flex/flex-item/hook.mjs +94 -10
- package/build-module/flex/flex-item/hook.mjs.map +3 -3
- package/build-module/focal-point-picker/controls.mjs +0 -1
- package/build-module/focal-point-picker/controls.mjs.map +2 -2
- package/build-module/focal-point-picker/index.mjs +1 -0
- package/build-module/focal-point-picker/index.mjs.map +2 -2
- package/build-module/font-size-picker/font-size-picker-select.mjs +1 -6
- package/build-module/font-size-picker/font-size-picker-select.mjs.map +2 -2
- package/build-module/font-size-picker/font-size-picker-toggle-group.mjs +0 -5
- package/build-module/font-size-picker/font-size-picker-toggle-group.mjs.map +2 -2
- package/build-module/font-size-picker/index.mjs +1 -18
- package/build-module/font-size-picker/index.mjs.map +2 -2
- package/build-module/form-file-upload/index.mjs +7 -18
- package/build-module/form-file-upload/index.mjs.map +2 -2
- package/build-module/form-token-field/index.mjs +1 -11
- package/build-module/form-token-field/index.mjs.map +2 -2
- package/build-module/form-token-field/styles.mjs +1 -7
- package/build-module/form-token-field/styles.mjs.map +2 -2
- package/build-module/number-control/index.mjs.map +2 -2
- package/build-module/query-controls/author-select.mjs +1 -3
- package/build-module/query-controls/author-select.mjs.map +2 -2
- package/build-module/query-controls/category-select.mjs +1 -3
- package/build-module/query-controls/category-select.mjs.map +2 -2
- package/build-module/query-controls/index.mjs +0 -5
- package/build-module/query-controls/index.mjs.map +2 -2
- package/build-module/radio-group/radio.mjs +6 -14
- package/build-module/radio-group/radio.mjs.map +2 -2
- package/build-module/range-control/index.mjs +6 -15
- package/build-module/range-control/index.mjs.map +2 -2
- package/build-module/range-control/styles/range-control-styles.mjs +32 -30
- package/build-module/range-control/styles/range-control-styles.mjs.map +2 -2
- package/build-module/resizable-box/index.mjs.map +2 -2
- package/build-module/search-control/index.mjs +2 -1
- package/build-module/search-control/index.mjs.map +2 -2
- package/build-module/select-control/index.mjs +7 -15
- package/build-module/select-control/index.mjs.map +2 -2
- package/build-module/select-control/styles/select-control-styles.mjs +8 -16
- package/build-module/select-control/styles/select-control-styles.mjs.map +2 -2
- package/build-module/slot-fill/index.mjs.map +2 -2
- package/build-module/spacer/hook.mjs +4 -3
- package/build-module/spacer/hook.mjs.map +2 -2
- package/build-module/surface/hook.mjs +103 -16
- package/build-module/surface/hook.mjs.map +3 -3
- package/build-module/text/hook.mjs +11 -11
- package/build-module/text/hook.mjs.map +2 -2
- package/build-module/theme/index.mjs +109 -7
- package/build-module/theme/index.mjs.map +3 -3
- package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs +1 -3
- package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs +1 -3
- package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/component.mjs +6 -16
- package/build-module/toggle-group-control/toggle-group-control/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/styles.mjs +10 -35
- package/build-module/toggle-group-control/toggle-group-control/styles.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs +3 -5
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs +14 -18
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.mjs.map +1 -1
- package/build-module/tools-panel/styles.mjs +22 -14
- package/build-module/tools-panel/styles.mjs.map +2 -2
- package/build-module/tools-panel/tools-panel/component.mjs.map +2 -2
- package/build-module/tools-panel/tools-panel/hook.mjs +5 -3
- package/build-module/tools-panel/tools-panel/hook.mjs.map +2 -2
- package/build-module/tree-select/index.mjs +9 -20
- package/build-module/tree-select/index.mjs.map +2 -2
- package/build-module/truncate/hook.mjs +95 -9
- package/build-module/truncate/hook.mjs.map +3 -3
- package/build-module/unit-control/index.mjs +3 -12
- package/build-module/unit-control/index.mjs.map +2 -2
- package/build-module/utils/config-values.mjs +0 -6
- package/build-module/utils/config-values.mjs.map +2 -2
- package/build-module/utils/hooks/use-cx.mjs.map +2 -2
- package/build-module/utils/polymorphic-element.mjs +98 -0
- package/build-module/utils/polymorphic-element.mjs.map +7 -0
- package/build-module/validated-form-controls/components/combobox-control.mjs +0 -1
- package/build-module/validated-form-controls/components/combobox-control.mjs.map +2 -2
- package/build-module/validated-form-controls/components/custom-select-control.mjs +0 -1
- package/build-module/validated-form-controls/components/custom-select-control.mjs.map +2 -2
- package/build-module/validated-form-controls/components/form-token-field.mjs +0 -1
- package/build-module/validated-form-controls/components/form-token-field.mjs.map +2 -2
- package/build-module/validated-form-controls/components/range-control.mjs +0 -1
- package/build-module/validated-form-controls/components/range-control.mjs.map +2 -2
- package/build-module/validated-form-controls/components/select-control.mjs +0 -1
- package/build-module/validated-form-controls/components/select-control.mjs.map +2 -2
- package/build-module/validated-form-controls/components/toggle-group-control.mjs +0 -1
- package/build-module/validated-form-controls/components/toggle-group-control.mjs.map +2 -2
- package/build-module/view/component.mjs +4 -10
- package/build-module/view/component.mjs.map +2 -2
- package/build-style/style-rtl.css +31 -48
- package/build-style/style.css +31 -48
- package/build-types/border-box-control/border-box-control/component.d.ts +2 -2
- package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +0 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +2 -4
- package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
- 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 +0 -1
- 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/component.d.ts +2 -3
- package/build-types/border-box-control/border-box-control-visualizer/component.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/stories/index.story.d.ts +2 -1
- package/build-types/border-box-control/stories/index.story.d.ts.map +1 -1
- package/build-types/border-box-control/styles.d.ts +3 -3
- package/build-types/border-box-control/styles.d.ts.map +1 -1
- package/build-types/border-box-control/types.d.ts +13 -5
- package/build-types/border-box-control/types.d.ts.map +1 -1
- package/build-types/border-control/border-control/component.d.ts +0 -2
- package/build-types/border-control/border-control/component.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts +0 -2
- package/build-types/border-control/border-control/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/component.d.ts +1 -1
- package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -1
- package/build-types/border-control/stories/index.story.d.ts +5 -10
- package/build-types/border-control/stories/index.story.d.ts.map +1 -1
- package/build-types/border-control/styles.d.ts +5 -2
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/border-control/types.d.ts +5 -10
- package/build-types/border-control/types.d.ts.map +1 -1
- package/build-types/box-control/box-input-control.d.ts.map +1 -1
- package/build-types/box-control/styles/box-control-styles.d.ts +2 -1
- package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
- package/build-types/card/card/hook.d.ts +1 -1
- package/build-types/card/card/hook.d.ts.map +1 -1
- package/build-types/card/card-footer/hook.d.ts.map +1 -1
- package/build-types/card/card-header/hook.d.ts.map +1 -1
- package/build-types/card/styles.d.ts +4 -0
- package/build-types/card/styles.d.ts.map +1 -1
- package/build-types/color-picker/component.d.ts +4 -0
- package/build-types/color-picker/component.d.ts.map +1 -1
- package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
- package/build-types/color-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/combobox-control/index.d.ts +0 -1
- package/build-types/combobox-control/index.d.ts.map +1 -1
- package/build-types/combobox-control/stories/index.story.d.ts.map +1 -1
- package/build-types/combobox-control/styles.d.ts +1 -2
- package/build-types/combobox-control/styles.d.ts.map +1 -1
- package/build-types/combobox-control/types.d.ts +2 -1
- package/build-types/combobox-control/types.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/index.d.ts.map +1 -1
- package/build-types/custom-select-control/index.d.ts +5 -0
- package/build-types/custom-select-control/index.d.ts.map +1 -1
- package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
- package/build-types/custom-select-control/types.d.ts +2 -1
- package/build-types/custom-select-control/types.d.ts.map +1 -1
- package/build-types/date-time/time-picker/index.d.ts.map +1 -1
- package/build-types/date-time/time-picker/time-input/index.d.ts.map +1 -1
- package/build-types/disabled/stories/index.story.d.ts.map +1 -1
- package/build-types/elevation/hook.d.ts.map +1 -1
- package/build-types/external-link/index.d.ts.map +1 -1
- package/build-types/flex/flex/hook.d.ts +864 -4
- package/build-types/flex/flex/hook.d.ts.map +1 -1
- package/build-types/flex/flex-block/hook.d.ts +860 -1
- package/build-types/flex/flex-block/hook.d.ts.map +1 -1
- package/build-types/flex/flex-item/hook.d.ts +860 -4
- package/build-types/flex/flex-item/hook.d.ts.map +1 -1
- package/build-types/focal-point-picker/index.d.ts +1 -1
- package/build-types/focal-point-picker/index.d.ts.map +1 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +252 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -1
- package/build-types/font-size-picker/index.d.ts.map +1 -1
- package/build-types/font-size-picker/stories/e2e/index.story.d.ts.map +1 -1
- package/build-types/font-size-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/font-size-picker/types.d.ts +6 -5
- package/build-types/font-size-picker/types.d.ts.map +1 -1
- package/build-types/form-file-upload/index.d.ts +1 -2
- package/build-types/form-file-upload/index.d.ts.map +1 -1
- package/build-types/form-file-upload/stories/index.story.d.ts.map +1 -1
- package/build-types/form-file-upload/types.d.ts +2 -2
- package/build-types/form-file-upload/types.d.ts.map +1 -1
- package/build-types/form-token-field/index.d.ts.map +1 -1
- package/build-types/form-token-field/stories/index.story.d.ts.map +1 -1
- package/build-types/form-token-field/styles.d.ts +1 -6
- package/build-types/form-token-field/styles.d.ts.map +1 -1
- package/build-types/form-token-field/types.d.ts +2 -1
- package/build-types/form-token-field/types.d.ts.map +1 -1
- package/build-types/h-stack/hook.d.ts +864 -1
- package/build-types/h-stack/hook.d.ts.map +1 -1
- package/build-types/heading/hook.d.ts +1 -1
- package/build-types/navigator/stories/index.story.d.ts.map +1 -1
- package/build-types/number-control/index.d.ts +4 -0
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/palette-edit/styles.d.ts +750 -0
- package/build-types/palette-edit/styles.d.ts.map +1 -1
- package/build-types/query-controls/author-select.d.ts +1 -1
- package/build-types/query-controls/author-select.d.ts.map +1 -1
- package/build-types/query-controls/category-select.d.ts +1 -1
- package/build-types/query-controls/category-select.d.ts.map +1 -1
- package/build-types/query-controls/index.d.ts.map +1 -1
- package/build-types/query-controls/types.d.ts +0 -2
- package/build-types/query-controls/types.d.ts.map +1 -1
- package/build-types/radio-group/radio.d.ts +2 -4
- package/build-types/radio-group/radio.d.ts.map +1 -1
- package/build-types/radio-group/stories/index.story.d.ts.map +1 -1
- package/build-types/radio-group/types.d.ts +8 -5
- package/build-types/radio-group/types.d.ts.map +1 -1
- package/build-types/range-control/index.d.ts +0 -1
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/stories/index.story.d.ts.map +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +2 -4
- package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
- package/build-types/range-control/types.d.ts +3 -1
- package/build-types/range-control/types.d.ts.map +1 -1
- package/build-types/resizable-box/index.d.ts +4 -0
- package/build-types/resizable-box/index.d.ts.map +1 -1
- package/build-types/search-control/index.d.ts.map +1 -1
- package/build-types/select-control/index.d.ts +0 -1
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/stories/index.story.d.ts.map +1 -1
- package/build-types/select-control/styles/select-control-styles.d.ts +1 -1
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/select-control/types.d.ts +8 -1
- package/build-types/select-control/types.d.ts.map +1 -1
- package/build-types/slot-fill/index.d.ts +5 -0
- package/build-types/slot-fill/index.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts.map +1 -1
- package/build-types/surface/hook.d.ts +1 -1
- package/build-types/surface/hook.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +2 -2
- package/build-types/text/hook.d.ts.map +1 -1
- package/build-types/theme/index.d.ts +1 -4
- package/build-types/theme/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/stories/index.story.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts +0 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -4
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +0 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
- package/build-types/toggle-group-control/types.d.ts +5 -4
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/tools-panel/stories/index.story.d.ts.map +1 -1
- package/build-types/tools-panel/styles.d.ts +5 -0
- package/build-types/tools-panel/styles.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/component.d.ts +0 -2
- package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/tree-select/index.d.ts +0 -1
- package/build-types/tree-select/index.d.ts.map +1 -1
- package/build-types/tree-select/stories/index.story.d.ts.map +1 -1
- package/build-types/tree-select/types.d.ts +8 -1
- package/build-types/tree-select/types.d.ts.map +1 -1
- package/build-types/truncate/hook.d.ts +1 -1
- package/build-types/truncate/hook.d.ts.map +1 -1
- package/build-types/unit-control/index.d.ts +3 -2
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/stories/index.story.d.ts.map +1 -1
- package/build-types/unit-control/types.d.ts +8 -1
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +0 -6
- package/build-types/utils/hooks/use-cx.d.ts +4 -0
- package/build-types/utils/hooks/use-cx.d.ts.map +1 -1
- package/build-types/utils/polymorphic-element.d.ts +17 -0
- package/build-types/utils/polymorphic-element.d.ts.map +1 -0
- package/build-types/utils/test/polymorphic-element.d.ts +2 -0
- package/build-types/utils/test/polymorphic-element.d.ts.map +1 -0
- package/build-types/v-stack/hook.d.ts +864 -1
- package/build-types/v-stack/hook.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/combobox-control.d.ts +1 -1
- package/build-types/validated-form-controls/components/custom-select-control.d.ts +1 -1
- package/build-types/validated-form-controls/components/custom-select-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/form-token-field.d.ts +1 -1
- package/build-types/validated-form-controls/components/form-token-field.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/range-control.d.ts +2 -2
- package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/select-control.d.ts +1 -1
- package/build-types/validated-form-controls/components/select-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/toggle-group-control.d.ts +2 -2
- package/build-types/validated-form-controls/components/toggle-group-control.d.ts.map +1 -1
- package/build-types/view/component.d.ts +1125 -0
- package/build-types/view/component.d.ts.map +1 -1
- package/package.json +24 -24
- package/src/border-box-control/border-box-control/README.md +0 -16
- package/src/border-box-control/border-box-control/component.tsx +1 -9
- package/src/border-box-control/border-box-control/hook.ts +3 -13
- package/src/border-box-control/border-box-control-linked-button/hook.ts +6 -7
- package/src/border-box-control/border-box-control-split-controls/component.tsx +1 -12
- package/src/border-box-control/border-box-control-split-controls/hook.ts +2 -4
- package/src/border-box-control/border-box-control-visualizer/hook.ts +6 -11
- package/src/border-box-control/stories/index.story.tsx +0 -2
- package/src/border-box-control/styles.ts +22 -34
- package/src/border-box-control/test/index.tsx +1 -3
- package/src/border-box-control/types.ts +13 -5
- package/src/border-control/border-control/README.md +0 -15
- package/src/border-control/border-control/component.tsx +0 -9
- package/src/border-control/border-control/hook.ts +10 -22
- package/src/border-control/border-control-dropdown/component.tsx +1 -2
- package/src/border-control/border-control-dropdown/hook.ts +2 -4
- package/src/border-control/border-control-style-picker/component.tsx +0 -1
- package/src/border-control/stories/index.story.tsx +0 -2
- package/src/border-control/styles.ts +11 -12
- package/src/border-control/test/index.js +32 -1
- package/src/border-control/types.ts +5 -10
- package/src/box-control/box-input-control.tsx +0 -5
- package/src/button/style.scss +25 -71
- package/src/card/card/hook.ts +4 -3
- package/src/card/card-footer/hook.ts +12 -16
- package/src/card/card-header/hook.ts +12 -16
- package/src/card/styles.ts +49 -0
- package/src/card/test/__snapshots__/index.tsx.snap +94 -139
- package/src/card/test/index.tsx +97 -0
- package/src/checkbox-control/test/__snapshots__/index.tsx.snap +1 -1
- package/src/circular-option-picker/style.scss +0 -1
- package/src/color-picker/component.tsx +4 -0
- package/src/color-picker/input-with-slider.tsx +0 -1
- package/src/color-picker/stories/index.story.tsx +5 -0
- package/src/combobox-control/README.md +0 -9
- package/src/combobox-control/index.tsx +2 -14
- package/src/combobox-control/stories/index.story.tsx +0 -2
- package/src/combobox-control/styles.ts +0 -21
- package/src/combobox-control/test/index.tsx +1 -1
- package/src/combobox-control/types.ts +2 -1
- package/src/context/stories/ComponentsProvider.stories.jsx +3 -3
- package/src/custom-gradient-picker/index.tsx +0 -1
- package/src/custom-select-control/README.md +0 -9
- package/src/custom-select-control/index.tsx +9 -24
- package/src/custom-select-control/stories/index.story.tsx +0 -2
- package/src/custom-select-control/test/index.tsx +1 -1
- package/src/custom-select-control/types.ts +2 -1
- package/src/date-time/time-picker/index.tsx +0 -1
- package/src/date-time/time-picker/time-input/index.tsx +0 -1
- package/src/disabled/stories/index.story.tsx +0 -1
- package/src/divider/style.module.scss +4 -2
- package/src/elevation/hook.ts +4 -3
- package/src/elevation/test/__snapshots__/index.tsx.snap +6 -6
- package/src/elevation/test/index.tsx +21 -0
- package/src/external-link/index.tsx +1 -7
- package/src/flex/flex/hook.ts +24 -43
- package/src/flex/flex-item/hook.ts +10 -27
- package/src/flex/style.module.scss +40 -0
- package/src/flex/test/__snapshots__/index.tsx.snap +6 -156
- package/src/flex/test/index.tsx +80 -49
- package/src/focal-point-picker/controls.tsx +0 -1
- package/src/focal-point-picker/index.tsx +1 -0
- package/src/font-size-picker/README.md +0 -15
- package/src/font-size-picker/font-size-picker-select.tsx +1 -11
- package/src/font-size-picker/font-size-picker-toggle-group.tsx +1 -11
- package/src/font-size-picker/index.tsx +1 -26
- package/src/font-size-picker/stories/e2e/index.story.tsx +0 -2
- package/src/font-size-picker/stories/index.story.tsx +0 -2
- package/src/font-size-picker/test/font-size-picker-select.tsx +0 -16
- package/src/font-size-picker/test/font-size-picker-toggle-group.tsx +0 -22
- package/src/font-size-picker/test/index.tsx +2 -16
- package/src/font-size-picker/types.ts +6 -5
- package/src/form-file-upload/README.md +0 -10
- package/src/form-file-upload/index.tsx +2 -14
- package/src/form-file-upload/stories/index.story.tsx +1 -2
- package/src/form-file-upload/test/index.tsx +1 -16
- package/src/form-file-upload/types.ts +2 -2
- package/src/form-token-field/README.md +0 -2
- package/src/form-token-field/index.tsx +1 -12
- package/src/form-token-field/stories/index.story.tsx +0 -4
- package/src/form-token-field/styles.ts +0 -19
- package/src/form-token-field/test/index.tsx +1 -5
- package/src/form-token-field/types.ts +2 -1
- package/src/h-stack/test/__snapshots__/index.tsx.snap +12 -91
- package/src/heading/test/__snapshots__/index.tsx.snap +1 -1
- package/src/item-group/test/__snapshots__/index.js.snap +27 -21
- package/src/navigator/stories/index.story.tsx +5 -0
- package/src/notice/test/__snapshots__/index.tsx.snap +1 -1
- package/src/number-control/index.tsx +4 -0
- package/src/query-controls/README.md +0 -7
- package/src/query-controls/author-select.tsx +0 -2
- package/src/query-controls/category-select.tsx +0 -2
- package/src/query-controls/index.tsx +0 -5
- package/src/query-controls/types.ts +0 -2
- package/src/radio-group/README.md +8 -8
- package/src/radio-group/radio.tsx +2 -9
- package/src/radio-group/stories/index.story.tsx +3 -9
- package/src/radio-group/types.ts +8 -6
- package/src/range-control/README.md +0 -8
- package/src/range-control/index.tsx +7 -26
- package/src/range-control/stories/index.story.tsx +0 -11
- package/src/range-control/styles/range-control-styles.ts +1 -10
- package/src/range-control/test/index.tsx +1 -14
- package/src/range-control/types.ts +3 -1
- package/src/resizable-box/index.tsx +4 -0
- package/src/scrollable/test/__snapshots__/index.tsx.snap +16 -11
- package/src/search-control/index.tsx +3 -1
- package/src/select-control/README.md +0 -11
- package/src/select-control/index.tsx +7 -16
- package/src/select-control/stories/index.story.tsx +0 -4
- package/src/select-control/styles/select-control-styles.ts +3 -22
- package/src/select-control/test/select-control.tsx +6 -12
- package/src/select-control/types.ts +7 -1
- package/src/slot-fill/index.tsx +5 -0
- package/src/slot-fill/test/__snapshots__/slot.js.snap +4 -12
- package/src/spacer/hook.ts +4 -3
- package/src/spacer/test/__snapshots__/index.tsx.snap +1 -1
- package/src/spacer/test/index.tsx +28 -0
- package/src/surface/hook.ts +30 -36
- package/src/surface/style.module.scss +53 -0
- package/src/surface/test/index.tsx +22 -29
- package/src/text/README.md +1 -1
- package/src/text/hook.ts +11 -12
- package/src/text/test/__snapshots__/index.tsx.snap +2 -2
- package/src/text/test/index.tsx +19 -4
- package/src/theme/index.tsx +43 -18
- package/src/theme/style.module.scss +4 -0
- package/src/theme/test/index.tsx +23 -6
- package/src/toggle-group-control/stories/index.story.tsx +0 -1
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +76 -76
- package/src/toggle-group-control/test/index.tsx +20 -4
- package/src/toggle-group-control/toggle-group-control/README.md +0 -8
- package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +0 -3
- package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +0 -3
- package/src/toggle-group-control/toggle-group-control/component.tsx +6 -20
- package/src/toggle-group-control/toggle-group-control/styles.ts +8 -25
- package/src/toggle-group-control/toggle-group-control-option/README.md +0 -1
- package/src/toggle-group-control/toggle-group-control-option/component.tsx +0 -1
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +3 -7
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +8 -18
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +1 -1
- package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +1 -1
- package/src/toggle-group-control/types.ts +5 -4
- package/src/tools-panel/stories/index.story.tsx +0 -15
- package/src/tools-panel/styles.ts +16 -0
- package/src/tools-panel/test/index.tsx +39 -0
- package/src/tools-panel/tools-panel/component.tsx +0 -2
- package/src/tools-panel/tools-panel/hook.ts +5 -9
- package/src/tree-select/README.md +0 -9
- package/src/tree-select/index.tsx +4 -14
- package/src/tree-select/stories/index.story.tsx +0 -2
- package/src/tree-select/types.ts +8 -1
- package/src/truncate/hook.ts +23 -28
- package/src/truncate/style.module.scss +21 -0
- package/src/unit-control/README.md +3 -9
- package/src/unit-control/index.tsx +4 -17
- package/src/unit-control/stories/index.story.tsx +0 -3
- package/src/unit-control/test/index.tsx +1 -5
- package/src/unit-control/types.ts +11 -1
- package/src/utils/config-values.js +0 -6
- package/src/utils/hooks/use-cx.ts +4 -0
- package/src/utils/polymorphic-element.tsx +152 -0
- package/src/utils/test/polymorphic-element.tsx +231 -0
- package/src/v-stack/test/__snapshots__/index.tsx.snap +12 -90
- package/src/validated-form-controls/components/combobox-control.tsx +1 -1
- package/src/validated-form-controls/components/custom-select-control.tsx +1 -5
- package/src/validated-form-controls/components/form-token-field.tsx +2 -6
- package/src/validated-form-controls/components/range-control.tsx +2 -10
- package/src/validated-form-controls/components/select-control.tsx +2 -6
- package/src/validated-form-controls/components/toggle-group-control.tsx +2 -9
- package/src/view/README.md +0 -6
- package/src/view/component.tsx +17 -8
- package/src/view/test/__snapshots__/index.js.snap +24 -16
- package/src/view/test/index.js +60 -4
- package/build/flex/styles.cjs +0 -82
- package/build/flex/styles.cjs.map +0 -7
- package/build/surface/styles.cjs +0 -97
- package/build/surface/styles.cjs.map +0 -7
- package/build/theme/styles.cjs +0 -66
- package/build/theme/styles.cjs.map +0 -7
- package/build/truncate/styles.cjs +0 -42
- package/build/truncate/styles.cjs.map +0 -7
- package/build-module/flex/styles.mjs +0 -53
- package/build-module/flex/styles.mjs.map +0 -7
- package/build-module/surface/styles.mjs +0 -64
- package/build-module/surface/styles.mjs.map +0 -7
- package/build-module/theme/styles.mjs +0 -30
- package/build-module/theme/styles.mjs.map +0 -7
- package/build-module/truncate/styles.mjs +0 -17
- package/build-module/truncate/styles.mjs.map +0 -7
- package/build-types/flex/styles.d.ts +0 -17
- package/build-types/flex/styles.d.ts.map +0 -1
- package/build-types/surface/styles.d.ts +0 -11
- package/build-types/surface/styles.d.ts.map +0 -1
- package/build-types/theme/styles.d.ts +0 -10
- package/build-types/theme/styles.d.ts.map +0 -1
- package/build-types/truncate/styles.d.ts +0 -2
- package/build-types/truncate/styles.d.ts.map +0 -1
- package/src/flex/styles.ts +0 -44
- package/src/focal-point-picker/style.scss +0 -58
- package/src/surface/styles.ts +0 -139
- package/src/surface/test/__snapshots__/index.tsx.snap +0 -104
- package/src/theme/styles.ts +0 -35
- package/src/truncate/styles.ts +0 -11
package/src/truncate/hook.ts
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* WordPress dependencies
|
|
8
|
-
*/
|
|
9
|
-
import { useMemo } from '@wordpress/element';
|
|
4
|
+
import clsx from 'clsx';
|
|
10
5
|
|
|
11
6
|
/**
|
|
12
7
|
* Internal dependencies
|
|
13
8
|
*/
|
|
14
9
|
import type { WordPressComponentProps } from '../context';
|
|
15
10
|
import { useContextSystem } from '../context';
|
|
16
|
-
import * as styles from './styles';
|
|
17
11
|
import { TRUNCATE_ELLIPSIS, TRUNCATE_TYPE, truncateContent } from './utils';
|
|
18
|
-
import { useCx } from '../utils/hooks/use-cx';
|
|
19
12
|
import type { TruncateProps } from './types';
|
|
13
|
+
import styles from './style.module.scss';
|
|
20
14
|
|
|
21
15
|
export default function useTruncate(
|
|
22
16
|
props: WordPressComponentProps< TruncateProps, 'span' >
|
|
@@ -28,11 +22,10 @@ export default function useTruncate(
|
|
|
28
22
|
ellipsizeMode = TRUNCATE_TYPE.auto,
|
|
29
23
|
limit = 0,
|
|
30
24
|
numberOfLines = 0,
|
|
25
|
+
style,
|
|
31
26
|
...otherProps
|
|
32
27
|
} = useContextSystem( props, 'Truncate' );
|
|
33
28
|
|
|
34
|
-
const cx = useCx();
|
|
35
|
-
|
|
36
29
|
let childrenAsText;
|
|
37
30
|
if ( typeof children === 'string' ) {
|
|
38
31
|
childrenAsText = children;
|
|
@@ -51,25 +44,27 @@ export default function useTruncate(
|
|
|
51
44
|
|
|
52
45
|
const shouldTruncate =
|
|
53
46
|
!! childrenAsText && ellipsizeMode === TRUNCATE_TYPE.auto;
|
|
47
|
+
const shouldClampLines = shouldTruncate && !! numberOfLines;
|
|
48
|
+
const shouldClampSingleLine = shouldClampLines && numberOfLines === 1;
|
|
54
49
|
|
|
55
|
-
const classes =
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-webkit-box-orient: vertical;
|
|
62
|
-
-webkit-line-clamp: ${ numberOfLines };
|
|
63
|
-
display: -webkit-box;
|
|
64
|
-
overflow: hidden;
|
|
65
|
-
`;
|
|
50
|
+
const classes = clsx(
|
|
51
|
+
shouldTruncate && ! numberOfLines && styles.truncate,
|
|
52
|
+
shouldClampLines && styles[ 'is-line-clamp' ],
|
|
53
|
+
shouldClampSingleLine && styles[ 'is-single-line' ],
|
|
54
|
+
className
|
|
55
|
+
);
|
|
66
56
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
57
|
+
const truncateStyle = shouldClampLines
|
|
58
|
+
? {
|
|
59
|
+
...style,
|
|
60
|
+
'--wp-components-truncate-lines': numberOfLines,
|
|
61
|
+
}
|
|
62
|
+
: style;
|
|
73
63
|
|
|
74
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
...otherProps,
|
|
66
|
+
className: classes,
|
|
67
|
+
style: truncateStyle,
|
|
68
|
+
children: truncatedContent,
|
|
69
|
+
};
|
|
75
70
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.truncate {
|
|
2
|
+
display: block;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
text-overflow: ellipsis;
|
|
5
|
+
white-space: nowrap;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.is-line-clamp {
|
|
9
|
+
/* stylelint-disable-next-line plugin/use-logical-properties-and-values -- -webkit-line-clamp requires this legacy physical value. */
|
|
10
|
+
-webkit-box-orient: vertical;
|
|
11
|
+
-webkit-line-clamp: var(--wp-components-truncate-lines);
|
|
12
|
+
display: -webkit-box;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
|
|
15
|
+
// The `word-break: break-all` property first makes sure a text line
|
|
16
|
+
// breaks even when it contains 'unbreakable' content such as long URLs.
|
|
17
|
+
// See https://github.com/WordPress/gutenberg/issues/60860.
|
|
18
|
+
&.is-single-line {
|
|
19
|
+
word-break: break-all;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -15,7 +15,7 @@ import { __experimentalUnitControl as UnitControl } from '@wordpress/components'
|
|
|
15
15
|
const Example = () => {
|
|
16
16
|
const [ value, setValue ] = useState( '10px' );
|
|
17
17
|
|
|
18
|
-
return <UnitControl
|
|
18
|
+
return <UnitControl onChange={ setValue } value={ value } />;
|
|
19
19
|
};
|
|
20
20
|
```
|
|
21
21
|
|
|
@@ -128,7 +128,7 @@ const Example = () => {
|
|
|
128
128
|
];
|
|
129
129
|
|
|
130
130
|
return (
|
|
131
|
-
<UnitControl
|
|
131
|
+
<UnitControl onChange={ setValue } value={ value } units={ units } />
|
|
132
132
|
);
|
|
133
133
|
};
|
|
134
134
|
```
|
|
@@ -143,14 +143,8 @@ For example, a `value` of `50%` will set the current unit to `%`.
|
|
|
143
143
|
Example:
|
|
144
144
|
|
|
145
145
|
```jsx
|
|
146
|
-
<UnitControl
|
|
146
|
+
<UnitControl value="50%" />
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
- Required: No
|
|
150
150
|
|
|
151
|
-
### `__next40pxDefaultSize`: `boolean`
|
|
152
|
-
|
|
153
|
-
Start opting into the larger default height that will become the default size in a future version.
|
|
154
|
-
|
|
155
|
-
- Required: No
|
|
156
|
-
- Default: `false`
|
|
@@ -26,8 +26,6 @@ import {
|
|
|
26
26
|
import { useControlledState } from '../utils/hooks';
|
|
27
27
|
import { escapeRegExp } from '../utils/strings';
|
|
28
28
|
import type { UnitControlProps, UnitControlOnChangeCallback } from './types';
|
|
29
|
-
import { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props';
|
|
30
|
-
import { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';
|
|
31
29
|
|
|
32
30
|
function UnforwardedUnitControl(
|
|
33
31
|
unitControlProps: WordPressComponentProps<
|
|
@@ -56,16 +54,8 @@ function UnforwardedUnitControl(
|
|
|
56
54
|
units: unitsProp = CSS_UNITS,
|
|
57
55
|
value: valueProp,
|
|
58
56
|
onFocus: onFocusProp,
|
|
59
|
-
__shouldNotWarnDeprecated36pxSize,
|
|
60
57
|
...props
|
|
61
|
-
} =
|
|
62
|
-
|
|
63
|
-
maybeWarnDeprecated36pxSize( {
|
|
64
|
-
componentName: 'UnitControl',
|
|
65
|
-
__next40pxDefaultSize: props.__next40pxDefaultSize,
|
|
66
|
-
size,
|
|
67
|
-
__shouldNotWarnDeprecated36pxSize,
|
|
68
|
-
} );
|
|
58
|
+
} = unitControlProps;
|
|
69
59
|
|
|
70
60
|
if ( 'unit' in unitControlProps ) {
|
|
71
61
|
deprecated( 'UnitControl unit prop', {
|
|
@@ -198,10 +188,7 @@ function UnforwardedUnitControl(
|
|
|
198
188
|
isUnitSelectTabbable={ isUnitSelectTabbable }
|
|
199
189
|
onChange={ handleOnUnitChange }
|
|
200
190
|
size={
|
|
201
|
-
[ 'small', 'compact' ].includes( size )
|
|
202
|
-
( size === 'default' && ! props.__next40pxDefaultSize )
|
|
203
|
-
? 'small'
|
|
204
|
-
: 'default'
|
|
191
|
+
[ 'small', 'compact' ].includes( size ) ? 'small' : 'default'
|
|
205
192
|
}
|
|
206
193
|
unit={ unit }
|
|
207
194
|
units={ units }
|
|
@@ -224,7 +211,7 @@ function UnforwardedUnitControl(
|
|
|
224
211
|
return (
|
|
225
212
|
<ValueInput
|
|
226
213
|
{ ...props }
|
|
227
|
-
|
|
214
|
+
__next40pxDefaultSize
|
|
228
215
|
autoComplete={ autoComplete }
|
|
229
216
|
className={ classes }
|
|
230
217
|
disabled={ disabled }
|
|
@@ -256,7 +243,7 @@ function UnforwardedUnitControl(
|
|
|
256
243
|
* const Example = () => {
|
|
257
244
|
* const [ value, setValue ] = useState( '10px' );
|
|
258
245
|
*
|
|
259
|
-
* return <UnitControl
|
|
246
|
+
* return <UnitControl onChange={ setValue } value={ value } />;
|
|
260
247
|
* };
|
|
261
248
|
* ```
|
|
262
249
|
*/
|
|
@@ -55,7 +55,6 @@ const DefaultTemplate: StoryFn< typeof UnitControl > = ( {
|
|
|
55
55
|
|
|
56
56
|
return (
|
|
57
57
|
<UnitControl
|
|
58
|
-
__next40pxDefaultSize
|
|
59
58
|
{ ...args }
|
|
60
59
|
value={ value }
|
|
61
60
|
onChange={ ( v, extra ) => {
|
|
@@ -71,7 +70,6 @@ export const Default: StoryFn< typeof UnitControl > = DefaultTemplate.bind(
|
|
|
71
70
|
);
|
|
72
71
|
Default.args = {
|
|
73
72
|
label: 'Label',
|
|
74
|
-
__next40pxDefaultSize: true,
|
|
75
73
|
};
|
|
76
74
|
|
|
77
75
|
/**
|
|
@@ -123,7 +121,6 @@ export const WithCustomUnits: StoryFn< typeof UnitControl > = ( {
|
|
|
123
121
|
|
|
124
122
|
return (
|
|
125
123
|
<UnitControl
|
|
126
|
-
__next40pxDefaultSize
|
|
127
124
|
{ ...args }
|
|
128
125
|
value={ value }
|
|
129
126
|
onChange={ ( v, extra ) => {
|
|
@@ -12,13 +12,9 @@ import { useState } from '@wordpress/element';
|
|
|
12
12
|
/**
|
|
13
13
|
* Internal dependencies
|
|
14
14
|
*/
|
|
15
|
-
import
|
|
15
|
+
import UnitControl from '..';
|
|
16
16
|
import { CSS_UNITS, parseQuantityAndUnitFromRawValue } from '../utils';
|
|
17
17
|
|
|
18
|
-
const UnitControl = ( props: React.ComponentProps< typeof _UnitControl > ) => (
|
|
19
|
-
<_UnitControl __next40pxDefaultSize { ...props } />
|
|
20
|
-
);
|
|
21
|
-
|
|
22
18
|
const getInput = ( {
|
|
23
19
|
isInputTypeText = false,
|
|
24
20
|
}: {
|
|
@@ -70,7 +70,10 @@ export type UnitSelectControlProps = {
|
|
|
70
70
|
|
|
71
71
|
export type UnitControlProps = Pick< InputControlProps, 'size' > &
|
|
72
72
|
Omit< UnitSelectControlProps, 'size' | 'unit' > &
|
|
73
|
-
Omit<
|
|
73
|
+
Omit<
|
|
74
|
+
NumberControlProps,
|
|
75
|
+
'spinControls' | 'suffix' | 'type' | '__next40pxDefaultSize'
|
|
76
|
+
> & {
|
|
74
77
|
/**
|
|
75
78
|
* If `true`, the unit `<select>` is hidden.
|
|
76
79
|
*
|
|
@@ -114,4 +117,11 @@ export type UnitControlProps = Pick< InputControlProps, 'size' > &
|
|
|
114
117
|
* @ignore
|
|
115
118
|
*/
|
|
116
119
|
__shouldNotWarnDeprecated36pxSize?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Start opting into the larger default height that will become the default size in a future version.
|
|
122
|
+
*
|
|
123
|
+
* @deprecated Default behavior since WordPress 7.1. Prop can be safely removed.
|
|
124
|
+
* @ignore
|
|
125
|
+
*/
|
|
126
|
+
__next40pxDefaultSize?: boolean;
|
|
117
127
|
};
|
|
@@ -57,13 +57,7 @@ export default Object.assign( {}, CONTROL_PROPS, {
|
|
|
57
57
|
elevationSmall: `0 1px 2px rgba(0, 0, 0, 0.05), 0 2px 3px rgba(0, 0, 0, 0.04), 0 6px 6px rgba(0, 0, 0, 0.03), 0 8px 8px rgba(0, 0, 0, 0.02)`,
|
|
58
58
|
elevationMedium: `0 2px 3px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.04), 0 12px 12px rgba(0, 0, 0, 0.03), 0 16px 16px rgba(0, 0, 0, 0.02)`,
|
|
59
59
|
elevationLarge: `0 5px 15px rgba(0, 0, 0, 0.08), 0 15px 27px rgba(0, 0, 0, 0.07), 0 30px 36px rgba(0, 0, 0, 0.04), 0 50px 43px rgba(0, 0, 0, 0.02)`,
|
|
60
|
-
surfaceBackgroundColor: COLORS.white,
|
|
61
|
-
surfaceBackgroundSubtleColor: '#F3F3F3',
|
|
62
|
-
surfaceBackgroundTintColor: '#F5F5F5',
|
|
63
60
|
surfaceBorderColor: 'rgba(0, 0, 0, 0.1)',
|
|
64
|
-
surfaceBorderBoldColor: 'rgba(0, 0, 0, 0.15)',
|
|
65
|
-
surfaceBorderSubtleColor: 'rgba(0, 0, 0, 0.05)',
|
|
66
|
-
surfaceBackgroundTertiaryColor: COLORS.white,
|
|
67
61
|
surfaceColor: COLORS.white,
|
|
68
62
|
// Modal exit animation: `use-modal-exit-animation` parses this for the
|
|
69
63
|
// `animationend` timeout race; keep the numeric duration equal to the WPDS
|
|
@@ -24,6 +24,10 @@ const isSerializedStyles = ( o: any ): o is SerializedStyles =>
|
|
|
24
24
|
* `cx` normally knows how to handle. It also hooks into the Emotion
|
|
25
25
|
* Cache, allowing `css` calls to work inside iframes.
|
|
26
26
|
*
|
|
27
|
+
* Passing multiple `SerializedStyles` arguments emits multiple classes. When
|
|
28
|
+
* fragments rely on source-order overrides, compose them in a single `css()`
|
|
29
|
+
* call before passing them to `cx`.
|
|
30
|
+
*
|
|
27
31
|
* ```jsx
|
|
28
32
|
* import { css } from '@emotion/react';
|
|
29
33
|
*
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type * as React from 'react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { forwardRef } from '@wordpress/element';
|
|
10
|
+
|
|
11
|
+
type PolymorphicElementProps< T extends React.ElementType > = Omit<
|
|
12
|
+
React.ComponentPropsWithoutRef< T >,
|
|
13
|
+
'as'
|
|
14
|
+
> & {
|
|
15
|
+
as?: T;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
type PolymorphicElementRef< T extends React.ElementType > =
|
|
19
|
+
React.ComponentPropsWithRef< T >[ 'ref' ];
|
|
20
|
+
|
|
21
|
+
const customAttributeRegExp = /^(data|aria|x)-/i;
|
|
22
|
+
const eventHandlerRegExp = /^on[A-Z]/;
|
|
23
|
+
|
|
24
|
+
// Derived from @emotion/is-prop-valid's React prop allowlist, but split by
|
|
25
|
+
// element type so SVG-only props are intentionally filtered from HTML elements.
|
|
26
|
+
// The event-handler check is also deliberately stricter than Emotion's
|
|
27
|
+
// charCode-based `on*` fallback.
|
|
28
|
+
const svgElementNames = new Set(
|
|
29
|
+
`animate animateMotion animateTransform circle clipPath defs desc ellipse
|
|
30
|
+
feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix
|
|
31
|
+
feDiffuseLighting feDisplacementMap feDistantLight feDropShadow feFlood
|
|
32
|
+
feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode
|
|
33
|
+
feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile
|
|
34
|
+
feTurbulence filter foreignObject g image line linearGradient marker mask
|
|
35
|
+
metadata mpath path pattern polygon polyline radialGradient rect set stop svg
|
|
36
|
+
switch symbol text textPath tspan use view`.split( /\s+/ )
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const baseElementProps = new Set(
|
|
40
|
+
`children dangerouslySetInnerHTML key autoFocus defaultValue defaultChecked
|
|
41
|
+
innerHTML suppressContentEditableWarning suppressHydrationWarning valueLink
|
|
42
|
+
abbr accept acceptCharset accessKey action allow allowUserMedia
|
|
43
|
+
allowPaymentRequest allowFullScreen allowTransparency alt async autoComplete
|
|
44
|
+
autoPlay capture cellPadding cellSpacing challenge charSet checked cite classID
|
|
45
|
+
className cols colSpan content contentEditable contextMenu controls controlsList
|
|
46
|
+
coords crossOrigin data dateTime decoding default defer dir disabled
|
|
47
|
+
disablePictureInPicture disableRemotePlayback download draggable encType
|
|
48
|
+
enterKeyHint fetchpriority fetchPriority form formAction formEncType formMethod
|
|
49
|
+
formNoValidate formTarget frameBorder headers height hidden high href hrefLang
|
|
50
|
+
htmlFor httpEquiv id inputMode integrity is keyParams keyType kind label lang
|
|
51
|
+
list loading loop low marginHeight marginWidth max maxLength media mediaGroup
|
|
52
|
+
method min minLength multiple muted name nonce noValidate open optimum pattern
|
|
53
|
+
placeholder playsInline popover popoverTarget popoverTargetAction poster
|
|
54
|
+
preload profile radioGroup readOnly referrerPolicy rel required reversed role
|
|
55
|
+
rows rowSpan sandbox scope scoped scrolling seamless selected shape size sizes
|
|
56
|
+
slot span spellCheck src srcDoc srcLang srcSet start step style summary
|
|
57
|
+
tabIndex target title translate type useMap value width wmode wrap about
|
|
58
|
+
datatype inlist prefix property resource typeof vocab autoCapitalize
|
|
59
|
+
autoCorrect autoSave color incremental fallback inert itemProp itemScope
|
|
60
|
+
itemType itemID itemRef on option results security unselectable`.split( /\s+/ )
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const svgElementProps = new Set(
|
|
64
|
+
`accentHeight accumulate additive alignmentBaseline allowReorder alphabetic
|
|
65
|
+
amplitude arabicForm ascent attributeName attributeType autoReverse azimuth
|
|
66
|
+
baseFrequency baselineShift baseProfile bbox begin bias by calcMode capHeight
|
|
67
|
+
clip clipPathUnits clipPath clipRule colorInterpolation
|
|
68
|
+
colorInterpolationFilters colorProfile colorRendering contentScriptType
|
|
69
|
+
contentStyleType cursor cx cy d decelerate descent diffuseConstant direction
|
|
70
|
+
display divisor dominantBaseline dur dx dy edgeMode elevation enableBackground
|
|
71
|
+
end exponent externalResourcesRequired fill fillOpacity fillRule filter
|
|
72
|
+
filterRes filterUnits floodColor floodOpacity focusable fontFamily fontSize
|
|
73
|
+
fontSizeAdjust fontStretch fontStyle fontVariant fontWeight format from fr fx
|
|
74
|
+
fy g1 g2 glyphName glyphOrientationHorizontal glyphOrientationVertical
|
|
75
|
+
glyphRef gradientTransform gradientUnits hanging horizAdvX horizOriginX
|
|
76
|
+
ideographic imageRendering in in2 intercept k k1 k2 k3 k4 kernelMatrix
|
|
77
|
+
kernelUnitLength kerning keyPoints keySplines keyTimes lengthAdjust
|
|
78
|
+
letterSpacing lightingColor limitingConeAngle local markerEnd markerMid
|
|
79
|
+
markerStart markerHeight markerUnits markerWidth mask maskContentUnits
|
|
80
|
+
maskUnits mathematical mode numOctaves offset opacity operator order orient
|
|
81
|
+
orientation origin overflow overlinePosition overlineThickness panose1
|
|
82
|
+
paintOrder pathLength patternContentUnits patternTransform patternUnits
|
|
83
|
+
pointerEvents points pointsAtX pointsAtY pointsAtZ preserveAlpha
|
|
84
|
+
preserveAspectRatio primitiveUnits r radius refX refY renderingIntent
|
|
85
|
+
repeatCount repeatDur requiredExtensions requiredFeatures restart result rotate
|
|
86
|
+
rx ry scale seed shapeRendering slope spacing specularConstant
|
|
87
|
+
specularExponent speed spreadMethod startOffset stdDeviation stemh stemv
|
|
88
|
+
stitchTiles stopColor stopOpacity strikethroughPosition strikethroughThickness
|
|
89
|
+
string stroke strokeDasharray strokeDashoffset strokeLinecap strokeLinejoin
|
|
90
|
+
strokeMiterlimit strokeOpacity strokeWidth surfaceScale systemLanguage
|
|
91
|
+
tableValues targetX targetY textAnchor textDecoration textRendering textLength
|
|
92
|
+
to transform u1 u2 underlinePosition underlineThickness unicode unicodeBidi
|
|
93
|
+
unicodeRange unitsPerEm vAlphabetic vHanging vIdeographic vMathematical values
|
|
94
|
+
vectorEffect version vertAdvY vertOriginX vertOriginY viewBox viewTarget
|
|
95
|
+
visibility widths wordSpacing writingMode x xHeight x1 x2 xChannelSelector
|
|
96
|
+
xlinkActuate xlinkArcrole xlinkHref xlinkRole xlinkShow xlinkTitle xlinkType
|
|
97
|
+
xmlBase xmlns xmlnsXlink xmlLang xmlSpace y y1 y2 yChannelSelector z
|
|
98
|
+
zoomAndPan`.split( /\s+/ )
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const compatElementProps = new Set( [ 'autofocus', 'class', 'for' ] );
|
|
102
|
+
|
|
103
|
+
function isValidIntrinsicElementProp( prop: string, element: string ) {
|
|
104
|
+
if (
|
|
105
|
+
customAttributeRegExp.test( prop ) ||
|
|
106
|
+
eventHandlerRegExp.test( prop )
|
|
107
|
+
) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if ( baseElementProps.has( prop ) || compatElementProps.has( prop ) ) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return svgElementNames.has( element ) && svgElementProps.has( prop );
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function filterIntrinsicElementProps(
|
|
119
|
+
props: PolymorphicElementProps< React.ElementType >,
|
|
120
|
+
element: string
|
|
121
|
+
) {
|
|
122
|
+
return Object.fromEntries(
|
|
123
|
+
Object.entries( props ).filter( ( [ prop ] ) =>
|
|
124
|
+
isValidIntrinsicElementProp( prop, element )
|
|
125
|
+
)
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function UnforwardedPolymorphicElement(
|
|
130
|
+
{ as, ...props }: PolymorphicElementProps< React.ElementType >,
|
|
131
|
+
ref: React.ForwardedRef< unknown >
|
|
132
|
+
) {
|
|
133
|
+
const Element = as || 'div';
|
|
134
|
+
const forwardedProps =
|
|
135
|
+
typeof Element === 'string'
|
|
136
|
+
? filterIntrinsicElementProps( props, Element )
|
|
137
|
+
: props;
|
|
138
|
+
|
|
139
|
+
return <Element ref={ ref } { ...forwardedProps } />;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Internal utility for components that need Emotion-compatible `as` behavior
|
|
144
|
+
* while rendering with plain React elements.
|
|
145
|
+
*/
|
|
146
|
+
export const PolymorphicElement = forwardRef(
|
|
147
|
+
UnforwardedPolymorphicElement
|
|
148
|
+
) as < T extends React.ElementType = 'div' >(
|
|
149
|
+
props: PolymorphicElementProps< T > & {
|
|
150
|
+
ref?: PolymorphicElementRef< T >;
|
|
151
|
+
}
|
|
152
|
+
) => React.ReactElement | null;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import styled from '@emotion/styled';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import { renderToString } from 'react-dom/server';
|
|
4
|
+
|
|
5
|
+
import { createElement, createRef } from '@wordpress/element';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { PolymorphicElement } from '../polymorphic-element';
|
|
11
|
+
|
|
12
|
+
const StyledDiv = styled.div``;
|
|
13
|
+
|
|
14
|
+
const components = [
|
|
15
|
+
{
|
|
16
|
+
name: 'PolymorphicElement',
|
|
17
|
+
Component: PolymorphicElement,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'styled.div',
|
|
21
|
+
Component: StyledDiv,
|
|
22
|
+
},
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
describe.each( components )( '$name', ( { Component: RawComponent } ) => {
|
|
26
|
+
const Component = RawComponent as typeof PolymorphicElement;
|
|
27
|
+
|
|
28
|
+
it( 'filters invalid props from intrinsic elements', () => {
|
|
29
|
+
render(
|
|
30
|
+
createElement( Component, {
|
|
31
|
+
as: 'label',
|
|
32
|
+
'data-testid': 'label',
|
|
33
|
+
htmlFor: 'field',
|
|
34
|
+
labelPosition: 'top',
|
|
35
|
+
} as Parameters< typeof Component >[ 0 ] & {
|
|
36
|
+
labelPosition: string;
|
|
37
|
+
} )
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const label = screen.getByTestId( 'label' );
|
|
41
|
+
|
|
42
|
+
expect( label ).toHaveAttribute( 'for', 'field' );
|
|
43
|
+
expect( label ).not.toHaveAttribute( 'labelPosition' );
|
|
44
|
+
expect( label ).not.toHaveAttribute( 'labelposition' );
|
|
45
|
+
} );
|
|
46
|
+
|
|
47
|
+
it( 'preserves standard props for intrinsic elements', () => {
|
|
48
|
+
render(
|
|
49
|
+
<Component
|
|
50
|
+
aria-label="Notice"
|
|
51
|
+
className="custom-class"
|
|
52
|
+
data-testid="notice"
|
|
53
|
+
style={ { color: 'red' } }
|
|
54
|
+
title="Notice title"
|
|
55
|
+
/>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const element = screen.getByTestId( 'notice' );
|
|
59
|
+
|
|
60
|
+
expect( element ).toHaveAttribute( 'aria-label', 'Notice' );
|
|
61
|
+
expect( element ).toHaveAttribute( 'title', 'Notice title' );
|
|
62
|
+
expect( element ).toHaveClass( 'custom-class' );
|
|
63
|
+
expect( element ).toHaveStyle( { color: 'rgb(255, 0, 0)' } );
|
|
64
|
+
} );
|
|
65
|
+
|
|
66
|
+
it( 'preserves standard props without relying on the DOM', () => {
|
|
67
|
+
const view = renderToString(
|
|
68
|
+
createElement( Component, {
|
|
69
|
+
as: 'form',
|
|
70
|
+
acceptCharset: 'utf-8',
|
|
71
|
+
} as Parameters< typeof Component >[ 0 ] & {
|
|
72
|
+
acceptCharset: string;
|
|
73
|
+
} )
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
expect( view ).toContain( 'accept-charset="utf-8"' );
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
it( 'preserves SVG props for SVG intrinsic elements', () => {
|
|
80
|
+
render(
|
|
81
|
+
<Component
|
|
82
|
+
as="svg"
|
|
83
|
+
data-testid="svg"
|
|
84
|
+
fill="currentColor"
|
|
85
|
+
preserveAspectRatio="xMidYMid meet"
|
|
86
|
+
stroke="none"
|
|
87
|
+
strokeWidth={ 2 }
|
|
88
|
+
viewBox="0 0 24 24"
|
|
89
|
+
/>
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const svg = screen.getByTestId( 'svg' );
|
|
93
|
+
|
|
94
|
+
expect( svg ).toHaveAttribute( 'fill', 'currentColor' );
|
|
95
|
+
expect( svg ).toHaveAttribute( 'preserveAspectRatio', 'xMidYMid meet' );
|
|
96
|
+
expect( svg ).toHaveAttribute( 'stroke', 'none' );
|
|
97
|
+
expect( svg ).toHaveAttribute( 'stroke-width', '2' );
|
|
98
|
+
expect( svg ).toHaveAttribute( 'viewBox', '0 0 24 24' );
|
|
99
|
+
} );
|
|
100
|
+
|
|
101
|
+
it( 'preserves SVG props without relying on the DOM', () => {
|
|
102
|
+
const view = renderToString(
|
|
103
|
+
<Component
|
|
104
|
+
as="svg"
|
|
105
|
+
fill="currentColor"
|
|
106
|
+
strokeWidth={ 2 }
|
|
107
|
+
viewBox="0 0 24 24"
|
|
108
|
+
/>
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
expect( view ).toContain( 'fill="currentColor"' );
|
|
112
|
+
expect( view ).toContain( 'stroke-width="2"' );
|
|
113
|
+
expect( view ).toContain( 'viewBox="0 0 24 24"' );
|
|
114
|
+
} );
|
|
115
|
+
|
|
116
|
+
it( 'preserves SVG props for non-SVG-root intrinsic elements', () => {
|
|
117
|
+
render(
|
|
118
|
+
<svg>
|
|
119
|
+
<Component
|
|
120
|
+
as="path"
|
|
121
|
+
d="M0 0h24v24H0z"
|
|
122
|
+
data-testid="path"
|
|
123
|
+
fillRule="evenodd"
|
|
124
|
+
clipPath="url(#clip)"
|
|
125
|
+
/>
|
|
126
|
+
</svg>
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const path = screen.getByTestId( 'path' );
|
|
130
|
+
|
|
131
|
+
expect( path ).toHaveAttribute( 'clip-path', 'url(#clip)' );
|
|
132
|
+
expect( path ).toHaveAttribute( 'd', 'M0 0h24v24H0z' );
|
|
133
|
+
expect( path ).toHaveAttribute( 'fill-rule', 'evenodd' );
|
|
134
|
+
} );
|
|
135
|
+
|
|
136
|
+
it( 'filters invalid props from SVG intrinsic elements', () => {
|
|
137
|
+
render(
|
|
138
|
+
createElement( Component, {
|
|
139
|
+
as: 'svg',
|
|
140
|
+
'data-testid': 'svg',
|
|
141
|
+
labelPosition: 'top',
|
|
142
|
+
viewBox: '0 0 24 24',
|
|
143
|
+
} as Parameters< typeof Component >[ 0 ] & {
|
|
144
|
+
labelPosition: string;
|
|
145
|
+
} )
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const svg = screen.getByTestId( 'svg' );
|
|
149
|
+
|
|
150
|
+
expect( svg ).toHaveAttribute( 'viewBox', '0 0 24 24' );
|
|
151
|
+
expect( svg ).not.toHaveAttribute( 'labelPosition' );
|
|
152
|
+
expect( svg ).not.toHaveAttribute( 'labelposition' );
|
|
153
|
+
} );
|
|
154
|
+
|
|
155
|
+
it( 'passes custom props through to custom components', () => {
|
|
156
|
+
function CustomComponent( {
|
|
157
|
+
variant,
|
|
158
|
+
...props
|
|
159
|
+
}: JSX.IntrinsicElements[ 'section' ] & {
|
|
160
|
+
variant: string;
|
|
161
|
+
} ) {
|
|
162
|
+
return <section data-variant={ variant } { ...props } />;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
render(
|
|
166
|
+
<Component
|
|
167
|
+
as={ CustomComponent }
|
|
168
|
+
data-testid="custom"
|
|
169
|
+
variant="primary"
|
|
170
|
+
/>
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
expect( screen.getByTestId( 'custom' ) ).toHaveAttribute(
|
|
174
|
+
'data-variant',
|
|
175
|
+
'primary'
|
|
176
|
+
);
|
|
177
|
+
} );
|
|
178
|
+
|
|
179
|
+
it( 'forwards refs to the rendered element', () => {
|
|
180
|
+
const ref = createRef< HTMLButtonElement >();
|
|
181
|
+
|
|
182
|
+
render(
|
|
183
|
+
<Component
|
|
184
|
+
as="button"
|
|
185
|
+
data-testid="button"
|
|
186
|
+
ref={ ref }
|
|
187
|
+
type="button"
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
expect( ref.current ).toBe( screen.getByTestId( 'button' ) );
|
|
192
|
+
} );
|
|
193
|
+
} );
|
|
194
|
+
|
|
195
|
+
describe( 'PolymorphicElement prop filtering', () => {
|
|
196
|
+
it( 'filters invalid on-prefixed props from intrinsic elements', () => {
|
|
197
|
+
render(
|
|
198
|
+
createElement( PolymorphicElement, {
|
|
199
|
+
'data-testid': 'element',
|
|
200
|
+
on1: 'invalid',
|
|
201
|
+
'on-foo': 'invalid',
|
|
202
|
+
} as Parameters< typeof PolymorphicElement >[ 0 ] & {
|
|
203
|
+
on1: string;
|
|
204
|
+
'on-foo': string;
|
|
205
|
+
} )
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
const element = screen.getByTestId( 'element' );
|
|
209
|
+
|
|
210
|
+
expect( element ).not.toHaveAttribute( 'on1' );
|
|
211
|
+
expect( element ).not.toHaveAttribute( 'on-foo' );
|
|
212
|
+
} );
|
|
213
|
+
|
|
214
|
+
it( 'filters SVG-only props from HTML intrinsic elements', () => {
|
|
215
|
+
render(
|
|
216
|
+
createElement( PolymorphicElement, {
|
|
217
|
+
'data-testid': 'element',
|
|
218
|
+
fill: 'currentColor',
|
|
219
|
+
strokeWidth: 2,
|
|
220
|
+
} as Parameters< typeof PolymorphicElement >[ 0 ] & {
|
|
221
|
+
fill: string;
|
|
222
|
+
strokeWidth: number;
|
|
223
|
+
} )
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
const element = screen.getByTestId( 'element' );
|
|
227
|
+
|
|
228
|
+
expect( element ).not.toHaveAttribute( 'fill' );
|
|
229
|
+
expect( element ).not.toHaveAttribute( 'stroke-width' );
|
|
230
|
+
} );
|
|
231
|
+
} );
|