11import { SEPARATORS } from './constants'
22import { darkGrey } from '../../ui/constants'
33
4- export const generateHtmlCode = active => [ SEPARATORS . SKEWED , SEPARATORS . WAVE ] . includes ( active )
4+ export const generateHtmlCode = active => active === SEPARATORS . SKEWED
55? `<section>
66 <div class="${ active } "></div>
77</section>`
8+ : active === SEPARATORS . WAVE
9+ ? `<section class="container">
10+ <div class="${ active } "></div>
11+ </section>`
812: `<section class="${ active } "></section>`
913
1014export const generateCssCode = ( { active, options } ) => {
1115 // TODO check what to generate
12- return `.${ active } {
16+ return active === SEPARATORS . SKEWED ? `.${ active } {
1317 ${ generateSkewCss ( options ) }
14- }`
18+ }` : active === SEPARATORS . SEMI_CIRCLE ? generateSemiCircleCss ( { ...options , cssClass : active } )
19+ : active === SEPARATORS . WAVE ? generateWaveCss ( { ...options , active } )
20+ : active === SEPARATORS . SPIKES ? generateSpikesCss ( { ...options , cssClass : active } )
21+ : active === SEPARATORS . TRIANGLE ? generateTriangleCss ( { ...options , cssClass : active } )
22+ : active === SEPARATORS . CURVED ? generateCurvedCss ( { ...options , cssClass : active } )
23+ : ''
1524}
1625
26+ const generateContainerStyle = ( cssClass ) =>
27+ `${ cssClass ? `.${ cssClass } {
28+ position: relative;
29+ background: ${ darkGrey } ;
30+ height: 50vh;
31+ }` : `background: ${ darkGrey } ;` } `
32+
1733export const generateSkewCss = ( { angle, reversed } ) =>
1834`position: absolute;
1935 top: 0;
@@ -28,4 +44,121 @@ export const generateSkewCss = ({ angle, reversed }) =>
2844 ? `transform: skewY(${ angle . value } deg);
2945 transform-origin: top right;`
3046 : `transform: skewY(-${ angle . value } deg);
31- transform-origin: top left;` } `
47+ transform-origin: top left;` } `
48+
49+ export const generateSemiCircleCss = ( { cssClass, left, width, height, top, reversed } ) =>
50+ `${ generateContainerStyle ( cssClass ) }
51+
52+ ${ cssClass ? `.${ cssClass } ` : '&' } ::before {
53+ position: absolute;
54+ content: '';
55+ left: ${ left . value } %;
56+ z-index: 10;
57+ width: ${ width . value } px;
58+ height: ${ height . value } px;
59+ border-radius: 50%;
60+ background: ${ reversed ? '#fff' : 'inherit' } ;
61+ transform: ${ reversed
62+ ? `translateX(-50%) translateY(${ ( top . value * - 1 ) + 100 } %);`
63+ : `translateX(-50%) translateY(${ top . value } %);`
64+ }
65+ bottom: 0px;
66+ }`
67+
68+ export const generateWaveCss = ( { active, curve, reversed } ) => {
69+ const cssClass = active ? `.${ active } ` : '&'
70+
71+ return `${ active
72+ ? `${ generateContainerStyle ( 'container' ) }
73+
74+ .${ active } {
75+ position: absolute;
76+ height: ${ curve . value } px;
77+ width: 100%;
78+ background: ${ darkGrey } ;
79+ bottom: 0;
80+ }`
81+ : `position: absolute;
82+ height: ${ curve . value } px;
83+ width: 101%;
84+ background: ${ darkGrey } ;
85+ bottom: 0;`
86+ }
87+
88+ ${ cssClass } ::before, ${ cssClass } ::after {
89+ content: "";
90+ display: block;
91+ position: absolute;
92+ border-radius: ${ reversed ? '50% 100%' : '100% 50%' } ;
93+ }
94+
95+ ${ cssClass } ::before {
96+ width: 53.5%;
97+ height: ${ ! reversed ? '110%' : '100%' } ;
98+ background-color: ${ ! reversed ? '#fff' : darkGrey } ;
99+ right: 0;
100+ top: ${ ! reversed ? '60%' : '40%' } ;
101+ }
102+ ${ cssClass } ::after {
103+ width: 53.5%;
104+ height: ${ ! reversed ? '100%' : '110%' } ;
105+ background-color: ${ ! reversed ? darkGrey : '#fff' } ;
106+ left: 0;
107+ top: ${ ! reversed ? '40%' : '60%' } ;
108+ }` }
109+
110+ export const generateSpikesCss = ( { cssClass, size, left } ) =>
111+ `${ generateContainerStyle ( cssClass ) }
112+
113+ ${ cssClass ? `.${ cssClass } ` : '&' } ::after {
114+ content: '';
115+ position: absolute;
116+ right: 0;
117+ left: 0;
118+ top: 100%;
119+ z-index: 10;
120+ display: block;
121+ height: ${ size . value } px;
122+ background-size: ${ size . value } px 100%;
123+ background-image: linear-gradient(135deg, ${ darkGrey } 25%, transparent 25%), linear-gradient(225deg, ${ darkGrey } 25%, transparent 25%);
124+ background-position: ${ left . value } %;
125+ }`
126+
127+ export const generateTriangleCss = ( { reversed, size, left, cssClass } ) =>
128+ `${ generateContainerStyle ( cssClass ) }
129+
130+ ${ cssClass ? `.${ cssClass } ` : '&' } ::before {
131+ content: '';
132+ position: absolute;
133+ bottom: 0;
134+ z-index: 10;
135+ background: ${ reversed ? '#fff' : 'inherit' } ;
136+ left: ${ left . value } %;
137+ width: ${ size . value } px;
138+ height: ${ size . value } px;
139+ transform: translateX(-50%) translateY(50%) rotate(45deg);
140+ }`
141+
142+ export const generateCurvedCss = ( { cssClass, reversed, curve } ) =>
143+ ! reversed ? `${ cssClass ? `.${ cssClass } {
144+ position: relative;
145+ background: ${ darkGrey } ;
146+ height: 50vh;
147+ border-bottom-left-radius: 50% ${ curve . value } %;
148+ border-bottom-right-radius: 50% ${ curve . value } %;
149+ }` : `
150+ border-bottom-left-radius: 50% ${ curve . value } %;
151+ border-bottom-right-radius: 50% ${ curve . value } %;
152+ ` } `
153+ : `${ generateContainerStyle ( cssClass ) }
154+
155+ ${ cssClass ? `.${ cssClass } ` : '&' } ::after {
156+ content: '';
157+ border-top-left-radius: 50% 100%;
158+ border-top-right-radius: 50% 100%;
159+ position: absolute;
160+ bottom: 0;
161+ width: 100%;
162+ background: #fff;
163+ height: ${ curve . value } %;
164+ }`
0 commit comments