1- import { classNames , stateClassNames , States } from '../misc' ;
2- import { SliderGradientVertical } from '../slider' ;
1+ import { classNames , stateClassNames , States , Size , optionClassNames } from '../misc' ;
2+ import { SliderGradientVertical , SliderGradient } from '../slider' ;
33import { ColorInput } from './color-input' ;
44import { ColorContrast } from './color-contrast' ;
55
@@ -12,9 +12,15 @@ const states = [
1212 States . disabled ,
1313] ;
1414
15- const options = { } ;
15+ const options = {
16+ size : [ Size . small , Size . medium , Size . large ]
17+ } ;
18+
19+ export type KendoColorGradientOptions = {
20+ size ?: ( typeof options . size ) [ number ] | null ;
21+ } ;
1622
17- export type KendoColorGradientProps = {
23+ export type KendoColorGradientProps = KendoColorGradientOptions & {
1824 mode ?: 'rgba' | 'rgb' | 'hsva' | 'hsv' | 'hex' ;
1925 dir ?: 'ltr' | 'rtl' ;
2026 contrast ?: boolean ;
@@ -23,18 +29,23 @@ export type KendoColorGradientProps = {
2329 gradientStyle ?: React . CSSProperties ;
2430 dragHandleStyle ?: React . CSSProperties ;
2531 alphaStyle ?: React . CSSProperties ;
32+ alphaStyleHorizontal ?: React . CSSProperties ;
33+ canvasOrientation ?: 'horizontal' | 'vertical' ;
2634} ;
2735
2836export type KendoColorGradientState = { [ K in ( typeof states ) [ number ] ] ?: boolean } ;
2937
3038const defaultOptions = {
39+ size : Size . medium ,
3140 mode : 'rgba' ,
3241 readonly : false ,
3342 disabled : false ,
3443 contrast : false ,
3544 gradientStyle : { background : "rgb(255, 0, 0 )" } ,
3645 dragHandleStyle : { top : "50px" , left : "73px" } ,
37- alphaStyle : { background : "linear-gradient(to top, transparent, rgb(255, 0, 0))" }
46+ alphaStyle : { background : "linear-gradient(to top, transparent, rgb(255, 0, 0))" } ,
47+ alphaStyleHorizontal : { background : "linear-gradient(to right, transparent, rgb(255, 0, 0))" } ,
48+ canvasOrientation : 'horizontal'
3849} ;
3950
4051export const ColorGradient = (
@@ -43,52 +54,83 @@ export const ColorGradient = (
4354 React . HTMLAttributes < HTMLDivElement >
4455) => {
4556 const {
57+ size = defaultOptions . size ,
4658 mode = defaultOptions . mode ,
4759 readonly = defaultOptions . readonly ,
4860 disabled = defaultOptions . disabled ,
4961 gradientStyle = defaultOptions . gradientStyle ,
5062 dragHandleStyle = defaultOptions . dragHandleStyle ,
5163 alphaStyle = defaultOptions . alphaStyle ,
64+ alphaStyleHorizontal = defaultOptions . alphaStyleHorizontal ,
5265 contrast = defaultOptions . contrast ,
5366 dir,
5467 hover,
5568 focus,
5669 hoverHandle,
5770 focusHandle,
71+ canvasOrientation = defaultOptions . canvasOrientation ,
5872 } = props ;
5973
6074 return (
6175 < div className = { classNames (
6276 props . className ,
6377 COLOR_GRADIENT_CLASSNAME ,
78+ optionClassNames ( COLOR_GRADIENT_CLASSNAME , { size} ) ,
6479 stateClassNames ( COLOR_GRADIENT_CLASSNAME , {
6580 hover,
6681 focus,
6782 readonly,
6883 disabled
6984 } )
7085 ) } dir = { dir } >
71- < div className = "k-colorgradient-canvas k-hstack" >
72- < div className = "k-hsv-rectangle" style = { gradientStyle } >
73- < div className = "k-hsv-gradient" >
74- < div className = { classNames (
75- 'k-hsv-draghandle' ,
76- 'k-draghandle' ,
77- {
78- 'k-hover' : hoverHandle ,
79- 'k-focus' : focusHandle
80- }
81- ) } style = { dragHandleStyle } > </ div >
86+ {
87+ ! canvasOrientation || canvasOrientation === 'horizontal' &&
88+ < div className = "k-colorgradient-canvas k-hstack" >
89+ < div className = "k-hsv-rectangle" style = { gradientStyle } >
90+ < div className = "k-hsv-gradient" >
91+ < div className = { classNames (
92+ 'k-hsv-draghandle' ,
93+ 'k-draghandle' ,
94+ {
95+ 'k-hover' : hoverHandle ,
96+ 'k-focus' : focusHandle
97+ }
98+ ) } style = { dragHandleStyle } > </ div >
99+ </ div >
100+ </ div >
101+ < div className = "k-hsv-controls k-hstack" >
102+ < SliderGradientVertical className = "k-hue-slider" hover = { hoverHandle } focus = { focusHandle } />
103+ {
104+ mode !== 'rgb' && mode !== 'hsv' && < SliderGradientVertical className = "k-alpha-slider" hover = { hoverHandle } focus = { focusHandle } trackStyle = { alphaStyle } />
105+ }
82106 </ div >
83107 </ div >
84- < div className = "k-hsv-controls k-hstack" >
85- < SliderGradientVertical className = "k-hue-slider" hover = { hoverHandle } focus = { focusHandle } />
86- {
87- mode !== 'rgb' && mode !== 'hsv' && < SliderGradientVertical className = "k-alpha-slider" hover = { hoverHandle } focus = { focusHandle } trackStyle = { alphaStyle } />
88- }
108+ }
109+ {
110+ canvasOrientation === 'vertical' &&
111+ < div className = "k-colorgradient-canvas k-vstack" >
112+ < div className = "k-hsv-rectangle" style = { gradientStyle } >
113+ < div className = "k-hsv-gradient" >
114+ < div className = { classNames (
115+ 'k-hsv-draghandle' ,
116+ 'k-draghandle' ,
117+ {
118+ 'k-hover' : hoverHandle ,
119+ 'k-focus' : focusHandle
120+ }
121+ ) } style = { dragHandleStyle } > </ div >
122+ </ div >
123+ </ div >
124+ < div className = "k-hsv-controls k-vstack" >
125+ < SliderGradient className = "k-hue-slider" hover = { hoverHandle } focus = { focusHandle } />
126+ {
127+ mode !== 'rgb' && mode !== 'hsv' && < SliderGradient className = "k-alpha-slider" hover = { hoverHandle } focus = { focusHandle } trackStyle = { alphaStyleHorizontal } />
128+ }
129+ </ div >
89130 </ div >
90- </ div >
91- < ColorInput mode = { props . mode } />
131+ }
132+
133+ < ColorInput mode = { props . mode } size = { size } />
92134 { contrast && < ColorContrast /> }
93135 </ div >
94136 ) ;
0 commit comments