-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathcomponent.tsx
114 lines (106 loc) · 2.99 KB
/
component.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
* Internal dependencies
*/
import BorderControlDropdown from '../border-control-dropdown';
import UnitControl from '../../unit-control';
import RangeControl from '../../range-control';
import { HStack } from '../../h-stack';
import { StyledLabel } from '../../base-control/styles/base-control-styles';
import { View } from '../../view';
import { VisuallyHidden } from '../../visually-hidden';
import { contextConnect, WordPressComponentProps } from '../../ui/context';
import { useBorderControl } from './hook';
import type { BorderControlProps, LabelProps } from '../types';
const BorderLabel = ( props: LabelProps ) => {
const { label, hideLabelFromVision } = props;
if ( ! label ) {
return null;
}
return hideLabelFromVision ? (
<VisuallyHidden as="label">{ label }</VisuallyHidden>
) : (
<StyledLabel>{ label }</StyledLabel>
);
};
const BorderControl = (
props: WordPressComponentProps< BorderControlProps, 'div' >,
forwardedRef: React.ForwardedRef< any >
) => {
const {
colors,
disableCustomColors,
enableAlpha,
enableStyle = true,
hideLabelFromVision,
innerWrapperClassName,
label,
onBorderChange,
onSliderChange,
onWidthChange,
placeholder,
__unstablePopoverProps,
previousStyleSelection,
showDropdownHeader,
sliderClassName,
value: border,
widthControlClassName,
widthUnit,
widthValue,
withSlider,
__experimentalHasMultipleOrigins,
__experimentalIsRenderedInSidebar,
__next36pxDefaultSize,
...otherProps
} = useBorderControl( props );
return (
<View { ...otherProps } ref={ forwardedRef }>
<BorderLabel
label={ label }
hideLabelFromVision={ hideLabelFromVision }
/>
<HStack spacing={ 3 }>
<HStack className={ innerWrapperClassName } alignment="stretch">
<BorderControlDropdown
border={ border }
colors={ colors }
__unstablePopoverProps={ __unstablePopoverProps }
disableCustomColors={ disableCustomColors }
enableAlpha={ enableAlpha }
enableStyle={ enableStyle }
onChange={ onBorderChange }
previousStyleSelection={ previousStyleSelection }
showDropdownHeader={ showDropdownHeader }
__experimentalHasMultipleOrigins={
__experimentalHasMultipleOrigins
}
__experimentalIsRenderedInSidebar={
__experimentalIsRenderedInSidebar
}
__next36pxDefaultSize={ __next36pxDefaultSize }
/>
<UnitControl
className={ widthControlClassName }
min={ 0 }
onChange={ onWidthChange }
value={ border?.width || '' }
placeholder={ placeholder }
/>
</HStack>
{ withSlider && (
<RangeControl
className={ sliderClassName }
initialPosition={ 0 }
max={ 100 }
min={ 0 }
onChange={ onSliderChange }
step={ [ 'px', '%' ].includes( widthUnit ) ? 1 : 0.1 }
value={ widthValue || undefined }
withInputField={ false }
/>
) }
</HStack>
</View>
);
};
const ConnectedBorderControl = contextConnect( BorderControl, 'BorderControl' );
export default ConnectedBorderControl;