1
1
/* eslint-disable no-fallthrough */
2
2
/* eslint-disable eqeqeq */
3
- import {
4
- charat ,
5
- combine ,
6
- copy ,
7
- DECLARATION ,
8
- hash ,
9
- indexof ,
10
- KEYFRAMES ,
11
- match ,
12
- MOZ ,
13
- MS ,
14
- replace ,
15
- RULESET ,
16
- serialize ,
17
- strlen ,
18
- WEBKIT ,
19
- Element ,
20
- Middleware
21
- } from 'stylis'
3
+ import { DECLARATION , Element , hash , WEBKIT } from 'stylis'
22
4
23
- // this is a copy of [email protected] prefixer, the latter version introduced grid prefixing which we don't want
5
+ // this is a slice of [email protected] prefixer, the latter version introduced grid prefixing which we don't want
6
+ // this version only includes css properties that are not widely available according to https://web-platform-dx.github.io/web-features/
24
7
25
8
function prefix ( value : string , length : number ) : string {
26
9
switch ( hash ( value , length ) ) {
27
10
// color-adjust
28
11
case 5103 :
29
12
return WEBKIT + 'print-' + value + value
30
- // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)
31
- case 5737 :
32
- case 4201 :
33
- case 3177 :
34
- case 3433 :
35
- case 1641 :
36
- case 4457 :
37
- case 2921 :
38
- // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break
39
- case 5572 :
40
- case 6356 :
41
- case 5844 :
42
- case 3191 :
43
- case 6645 :
13
+ // box-decoration-break
44
14
case 3005 :
45
15
// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,
46
16
case 6391 :
@@ -49,299 +19,18 @@ function prefix(value: string, length: number): string {
49
19
case 6135 :
50
20
case 4599 :
51
21
case 4855 :
52
- // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)
53
- case 4215 :
54
- case 6389 :
55
- case 5109 :
56
- case 5365 :
57
- case 5621 :
58
- case 3829 :
59
- return WEBKIT + value + value
60
- // appearance, user-select, transform, hyphens, text-size-adjust
61
- case 5349 :
22
+ // user-select, hyphens, text-size-adjust
62
23
case 4246 :
63
- case 4810 :
64
24
case 6968 :
65
25
case 2756 :
66
- return WEBKIT + value + MOZ + value + MS + value + value
67
- // flex, flex-direction
68
- case 6828 :
69
- case 4268 :
70
- return WEBKIT + value + MS + value + value
71
- // order
72
- case 6165 :
73
- return WEBKIT + value + MS + 'flex-' + value + value
74
- // align-items
75
- case 5187 :
76
- return (
77
- WEBKIT +
78
- value +
79
- replace (
80
- value ,
81
- / ( \w + ) .+ ( : [ ^ ] + ) / ,
82
- WEBKIT + 'box-$1$2' + MS + 'flex-$1$2'
83
- ) +
84
- value
85
- )
86
- // align-self
87
- case 5443 :
88
- return (
89
- WEBKIT +
90
- value +
91
- MS +
92
- 'flex-item-' +
93
- replace ( value , / f l e x - | - s e l f / , '' ) +
94
- value
95
- )
96
- // align-content
97
- case 4675 :
98
- return (
99
- WEBKIT +
100
- value +
101
- MS +
102
- 'flex-line-pack' +
103
- replace ( value , / a l i g n - c o n t e n t | f l e x - | - s e l f / , '' ) +
104
- value
105
- )
106
- // flex-shrink
107
- case 5548 :
108
- return WEBKIT + value + MS + replace ( value , 'shrink' , 'negative' ) + value
109
- // flex-basis
110
- case 5292 :
111
- return (
112
- WEBKIT + value + MS + replace ( value , 'basis' , 'preferred-size' ) + value
113
- )
114
- // flex-grow
115
- case 6060 :
116
- return (
117
- WEBKIT +
118
- 'box-' +
119
- replace ( value , '-grow' , '' ) +
120
- WEBKIT +
121
- value +
122
- MS +
123
- replace ( value , 'grow' , 'positive' ) +
124
- value
125
- )
126
- // transition
127
- case 4554 :
128
- return (
129
- WEBKIT +
130
- replace ( value , / ( [ ^ - ] ) ( t r a n s f o r m ) / g, '$1' + WEBKIT + '$2' ) +
131
- value
132
- )
133
- // cursor
134
- case 6187 :
135
- return (
136
- replace (
137
- replace (
138
- replace ( value , / ( z o o m - | g r a b ) / , WEBKIT + '$1' ) ,
139
- / ( i m a g e - s e t ) / ,
140
- WEBKIT + '$1'
141
- ) ,
142
- value ,
143
- ''
144
- ) + value
145
- )
146
- // background, background-image
147
- case 5495 :
148
- case 3959 :
149
- return replace ( value , / ( i m a g e - s e t \( [ ^ ] * ) / , WEBKIT + '$1' + '$`$1' )
150
- // justify-content
151
- case 4968 :
152
- return (
153
- replace (
154
- replace (
155
- value ,
156
- / ( .+ : ) ( f l e x - ) ? ( .* ) / ,
157
- WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'
158
- ) ,
159
- / s .+ - b [ ^ ; ] + / ,
160
- 'justify'
161
- ) +
162
- WEBKIT +
163
- value +
164
- value
165
- )
166
- // (margin|padding)-inline-(start|end)
167
- case 4095 :
168
- case 3583 :
169
- case 4068 :
170
- case 2532 :
171
- return replace ( value , / ( .+ ) - i n l i n e ( .+ ) / , WEBKIT + '$1$2' ) + value
172
- // (min|max)?(width|height|inline-size|block-size)
173
- case 8116 :
174
- case 7059 :
175
- case 5753 :
176
- case 5535 :
177
- case 5445 :
178
- case 5701 :
179
- case 4933 :
180
- case 4677 :
181
- case 5533 :
182
- case 5789 :
183
- case 5021 :
184
- case 4765 :
185
- // stretch, max-content, min-content, fill-available
186
- if ( strlen ( value ) - 1 - length > 6 )
187
- switch ( charat ( value , length + 1 ) ) {
188
- // (m)ax-content, (m)in-content
189
- case 109 :
190
- // -
191
- if ( charat ( value , length + 4 ) !== 45 ) break
192
- // (f)ill-available, (f)it-content
193
- case 102 :
194
- return (
195
- replace (
196
- value ,
197
- / ( .+ : ) ( .+ ) - ( [ ^ ] + ) / ,
198
- '$1' +
199
- WEBKIT +
200
- '$2-$3' +
201
- '$1' +
202
- MOZ +
203
- ( charat ( value , length + 3 ) == 108 ? '$3' : '$2-$3' )
204
- ) + value
205
- )
206
- // (s)tretch
207
- case 115 :
208
- return ~ indexof ( value , 'stretch' )
209
- ? prefix ( replace ( value , 'stretch' , 'fill-available' ) , length ) +
210
- value
211
- : value
212
- }
213
- break
214
- // position: sticky
215
- case 4949 :
216
- // (s)ticky?
217
- if ( charat ( value , length + 1 ) !== 115 ) break
218
- // display: (flex|inline-flex)
219
- case 6444 :
220
- switch (
221
- charat ( value , strlen ( value ) - 3 - ( ~ indexof ( value , '!important' ) && 10 ) )
222
- ) {
223
- // stic(k)y
224
- case 107 :
225
- return replace ( value , ':' , ':' + WEBKIT ) + value
226
- // (inline-)?fl(e)x
227
- case 101 :
228
- return (
229
- replace (
230
- value ,
231
- / ( .+ : ) ( [ ^ ; ! ] + ) ( ; | ! .+ ) ? / ,
232
- '$1' +
233
- WEBKIT +
234
- ( charat ( value , 14 ) === 45 ? 'inline-' : '' ) +
235
- 'box$3' +
236
- '$1' +
237
- WEBKIT +
238
- '$2$3' +
239
- '$1' +
240
- MS +
241
- '$2box$3'
242
- ) + value
243
- )
244
- }
245
- break
246
- // writing-mode
247
- case 5936 :
248
- switch ( charat ( value , length + 11 ) ) {
249
- // vertical-l(r)
250
- case 114 :
251
- return (
252
- WEBKIT +
253
- value +
254
- MS +
255
- replace ( value , / [ s v h ] \w + - [ t b l r ] { 2 } / , 'tb' ) +
256
- value
257
- )
258
- // vertical-r(l)
259
- case 108 :
260
- return (
261
- WEBKIT +
262
- value +
263
- MS +
264
- replace ( value , / [ s v h ] \w + - [ t b l r ] { 2 } / , 'tb-rl' ) +
265
- value
266
- )
267
- // horizontal(-)tb
268
- case 45 :
269
- return (
270
- WEBKIT +
271
- value +
272
- MS +
273
- replace ( value , / [ s v h ] \w + - [ t b l r ] { 2 } / , 'lr' ) +
274
- value
275
- )
276
- }
277
-
278
- return WEBKIT + value + MS + value + value
26
+ return WEBKIT + value + value
279
27
}
280
28
281
29
return value
282
30
}
283
31
284
- export let prefixer = (
285
- element : Element ,
286
- index : number ,
287
- children : Element [ ] ,
288
- callback : Middleware
289
- ) => {
290
- if ( element . length > - 1 )
291
- if ( ! element . return )
292
- switch ( element . type ) {
293
- case DECLARATION :
294
- element . return = prefix ( element . value , element . length )
295
- break
296
- case KEYFRAMES :
297
- return serialize (
298
- [
299
- copy ( element , {
300
- value : replace ( element . value , '@' , '@' + WEBKIT )
301
- } )
302
- ] ,
303
- callback
304
- )
305
- case RULESET :
306
- if ( element . length )
307
- return combine ( element . props as string [ ] , function ( value ) {
308
- switch ( match ( value , / ( : : p l a c \w + | : r e a d - \w + ) / ) ) {
309
- // :read-(only|write)
310
- case ':read-only' :
311
- case ':read-write' :
312
- return serialize (
313
- [
314
- copy ( element , {
315
- props : [ replace ( value , / : ( r e a d - \w + ) / , ':' + MOZ + '$1' ) ]
316
- } )
317
- ] ,
318
- callback
319
- )
320
- // :placeholder
321
- case '::placeholder' :
322
- return serialize (
323
- [
324
- copy ( element , {
325
- props : [
326
- replace (
327
- value ,
328
- / : ( p l a c \w + ) / ,
329
- ':' + WEBKIT + 'input-$1'
330
- )
331
- ]
332
- } ) ,
333
- copy ( element , {
334
- props : [ replace ( value , / : ( p l a c \w + ) / , ':' + MOZ + '$1' ) ]
335
- } ) ,
336
- copy ( element , {
337
- props : [ replace ( value , / : ( p l a c \w + ) / , MS + 'input-$1' ) ]
338
- } )
339
- ] ,
340
- callback
341
- )
342
- }
343
-
344
- return ''
345
- } )
346
- }
32
+ export let prefixer = ( element : Element ) => {
33
+ if ( element . length > - 1 && ! element . return && element . type === DECLARATION ) {
34
+ element . return = prefix ( element . value , element . length )
35
+ }
347
36
}
0 commit comments