8
8
import React from 'react' ;
9
9
import { StoryFn } from '@storybook/react' ;
10
10
import styled , { useTheme } from 'styled-components' ;
11
- import { IGardenTheme , getCheckeredBackground , getColor } from '@zendeskgarden/react-theming' ;
11
+ import { opacify } from 'color2k' ;
12
+ import {
13
+ ColorParameters ,
14
+ IGardenTheme ,
15
+ getCheckeredBackground ,
16
+ getColor
17
+ } from '@zendeskgarden/react-theming' ;
18
+ import { LG , SM } from '@zendeskgarden/react-typography' ;
19
+ import { Grid } from '@zendeskgarden/react-grid' ;
12
20
import { Tag } from '@zendeskgarden/react-tags' ;
13
21
14
- const StyledDiv = styled . div . attrs < { background : string } > ( p => ( {
15
- style : { background : p . background }
16
- } ) ) < { background : string } > `
22
+ const StyledDiv = styled . div . attrs < { $ background : string } > ( p => ( {
23
+ style : { background : p . $ background }
24
+ } ) ) `
17
25
display: flex;
18
26
align-items: center;
19
27
justify-content: center;
28
+ min-width: 32px;
20
29
height: 208px;
21
30
` ;
22
31
23
- interface IColorProps {
24
- dark ?: object ;
25
- hue ?: string ;
26
- light ?: object ;
27
- offset ?: number ;
28
- shade ?: number ;
29
- theme : IGardenTheme ;
30
- transparency ?: number ;
31
- variable ?: string ;
32
- }
33
-
34
- const Color = ( { dark, hue, light, offset, shade, theme, transparency, variable } : IColorProps ) => {
32
+ const Color = ( {
33
+ dark,
34
+ hue,
35
+ light,
36
+ offset,
37
+ shade,
38
+ theme,
39
+ transparency,
40
+ variable
41
+ } : ColorParameters ) => {
35
42
let background ;
36
43
let tag ;
44
+ let generatedHue ;
37
45
38
46
try {
39
47
const backgroundColor = getColor ( {
@@ -57,19 +65,65 @@ const Color = ({ dark, hue, light, offset, shade, theme, transparency, variable
57
65
{ backgroundColor }
58
66
</ Tag >
59
67
) ;
68
+
69
+ if ( ! variable ) {
70
+ const hues = [ ...Object . keys ( theme . colors ) , ...Object . keys ( theme . palette ) ] . filter (
71
+ _hue => _hue !== 'base' && _hue !== 'variables'
72
+ ) ;
73
+ const selectedHue = ( theme . colors . base === 'dark' ? dark ?. hue : light ?. hue ) || hue || '' ;
74
+
75
+ if ( ! hues . includes ( selectedHue ) ) {
76
+ generatedHue = [ ...Array ( 12 ) . keys ( ) ] . reduce < Record < number , string > > ( ( retVal , index ) => {
77
+ const _shade = ( index + 1 ) * 100 ;
78
+
79
+ retVal [ _shade ] = getColor ( { theme, hue : opacify ( backgroundColor , 1 ) , shade : _shade } ) ;
80
+
81
+ return retVal ;
82
+ } , { } ) ;
83
+
84
+ /* eslint-disable-next-line no-console */
85
+ console . log ( generatedHue ) ;
86
+ }
87
+ }
60
88
} catch ( error ) {
61
89
background = 'transparent' ;
62
90
tag = (
63
- < Tag hue = "red " size = "large" >
91
+ < Tag hue = "dangerHue " size = "large" >
64
92
{ error instanceof Error ? error . message : String ( error ) }
65
93
</ Tag >
66
94
) ;
67
95
}
68
96
69
- return < StyledDiv background = { background } > { tag } </ StyledDiv > ;
97
+ return (
98
+ < >
99
+ < StyledDiv $background = { background } > { tag } </ StyledDiv >
100
+ { ! ! generatedHue && (
101
+ < >
102
+ < LG style = { { margin : '20px 0 12px' } } > Generated hue</ LG >
103
+ < Grid gutters = { false } >
104
+ < Grid . Row wrap = "nowrap" >
105
+ { Object . entries ( generatedHue ) . map ( ( [ _shade , backgroundColor ] , index ) => (
106
+ < Grid . Col key = { index } textAlign = "center" >
107
+ < StyledDiv $background = { backgroundColor } >
108
+ < Tag
109
+ hue = { getColor ( { theme, variable : 'background.default' } ) }
110
+ style = { { position : 'absolute' , transform : 'rotate(-90deg)' } }
111
+ >
112
+ { backgroundColor }
113
+ </ Tag >
114
+ </ StyledDiv >
115
+ < SM > { _shade } </ SM >
116
+ </ Grid . Col >
117
+ ) ) }
118
+ </ Grid . Row >
119
+ </ Grid >
120
+ </ >
121
+ ) }
122
+ </ >
123
+ ) ;
70
124
} ;
71
125
72
- interface IArgs extends Omit < IColorProps , 'theme' > {
126
+ interface IArgs extends Omit < ColorParameters , 'theme' > {
73
127
theme : {
74
128
colors : Omit < IGardenTheme [ 'colors' ] , 'base' > ;
75
129
opacity : IGardenTheme [ 'opacity' ] ;
0 commit comments