tailwind_merge 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1649 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TailwindMerge
4
+ module Config
5
+ include Validators
6
+
7
+ FROM_THEME = ->(config, theme) {
8
+ config.fetch(:theme, {}).fetch(theme, nil)
9
+ }
10
+
11
+ COLORS = ->(config) { FROM_THEME.call(config, "colors") }
12
+ SPACING = ->(config) { FROM_THEME.call(config, "spacing") }
13
+ BLUR = ->(config) { FROM_THEME.call(config, "blur") }
14
+ BRIGHTNESS = ->(config) { FROM_THEME.call(config, "brightness") }
15
+ BORDER_COLOR = ->(config) { FROM_THEME.call(config, "border-color") }
16
+ BORDER_RADIUS = ->(config) { FROM_THEME.call(config, "border-radius") }
17
+ BORDER_SPACING = ->(config) { FROM_THEME.call(config, "border-spacing") }
18
+ BORDER_WIDTH = ->(config) { FROM_THEME.call(config, "border-width") }
19
+ CONTRAST = ->(config) { FROM_THEME.call(config, "contrast") }
20
+ GRAYSCALE = ->(config) { FROM_THEME.call(config, "grayscale") }
21
+ HUE_ROTATE = ->(config) { FROM_THEME.call(config, "hue-rotate") }
22
+ INVERT = ->(config) { FROM_THEME.call(config, "invert") }
23
+ GAP = ->(config) { FROM_THEME.call(config, "gap") }
24
+ GRADIENT_COLOR_STOPS = ->(config) { FROM_THEME.call(config, "gradient-color-stops") }
25
+ INSET = ->(config) { FROM_THEME.call(config, "inset") }
26
+ MARGIN = ->(config) { FROM_THEME.call(config, "margin") }
27
+ OPACITY = ->(config) { FROM_THEME.call(config, "opacity") }
28
+ PADDING = ->(config) { FROM_THEME.call(config, "padding") }
29
+ SATURATE = ->(config) { FROM_THEME.call(config, "saturate") }
30
+ SCALE = ->(config) { FROM_THEME.call(config, "scale") }
31
+ SEPIA = ->(config) { FROM_THEME.call(config, "sepia") }
32
+ SKEW = ->(config) { FROM_THEME.call(config, "skew") }
33
+ SPACE = ->(config) { FROM_THEME.call(config, "space") }
34
+ TRANSLATE = ->(config) { FROM_THEME.call(config, "translate") }
35
+
36
+ VALID_THEME_IDS = Set.new([
37
+ COLORS.object_id,
38
+ SPACING.object_id,
39
+ BLUR.object_id,
40
+ BRIGHTNESS.object_id,
41
+ BORDER_COLOR.object_id,
42
+ BORDER_RADIUS.object_id,
43
+ BORDER_SPACING.object_id,
44
+ BORDER_WIDTH.object_id,
45
+ CONTRAST.object_id,
46
+ GRAYSCALE.object_id,
47
+ HUE_ROTATE.object_id,
48
+ INVERT.object_id,
49
+ GAP.object_id,
50
+ GRADIENT_COLOR_STOPS.object_id,
51
+ INSET.object_id,
52
+ MARGIN.object_id,
53
+ OPACITY.object_id,
54
+ PADDING.object_id,
55
+ SATURATE.object_id,
56
+ SCALE.object_id,
57
+ SEPIA.object_id,
58
+ SKEW.object_id,
59
+ SPACE.object_id,
60
+ TRANSLATE.object_id,
61
+ ]).freeze
62
+
63
+ OVERSCROLL = -> { ["auto", "contain", "none"] }
64
+ OVERFLOW = -> { ["auto", "hidden", "clip", "visible", "scroll"] }
65
+ SPACING_WITH_AUTO = -> { ["auto", SPACING] }
66
+ LENGTH_WITH_EMPTY = -> { ["", IS_LENGTH] }
67
+ INTEGER_WITH_AUTO = -> { ["auto", IS_INTEGER] }
68
+ POSITIONS = -> {
69
+ [
70
+ "bottom",
71
+ "center",
72
+ "left",
73
+ "left-bottom",
74
+ "left-top",
75
+ "right",
76
+ "right-bottom",
77
+ "right-top",
78
+ "top",
79
+ ]
80
+ }
81
+ LINE_STYLES = -> { ["solid", "dashed", "dotted", "double", "none"] }
82
+ BLEND_MODES = -> {
83
+ [
84
+ "normal",
85
+ "multiply",
86
+ "screen",
87
+ "overlay",
88
+ "darken",
89
+ "lighten",
90
+ "color-dodge",
91
+ "color-burn",
92
+ "hard-light",
93
+ "soft-light",
94
+ "difference",
95
+ "exclusion",
96
+ "hue",
97
+ "saturation",
98
+ "color",
99
+ "luminosity",
100
+ "plus-lighter",
101
+ ]
102
+ }
103
+ ALIGN = -> { ["start", "end", "center", "between", "around", "evenly"] }
104
+ ZERO_AND_EMPTY = -> { ["", "0", IS_ARBITRARY_VALUE] }
105
+ BREAKS = -> { ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"] }
106
+
107
+ DEFAULTS = {
108
+ cache_size: 500,
109
+ theme: {
110
+ "colors" => [IS_ANY],
111
+ "spacing" => [IS_LENGTH],
112
+ "blur" => ["none", "", IS_TSHIRT_SIZE, IS_ARBITRARY_LENGTH],
113
+ "brightness" => [IS_INTEGER],
114
+ "border-color" => [COLORS],
115
+ "border-radius" => ["none", "", "full", IS_TSHIRT_SIZE, IS_ARBITRARY_LENGTH],
116
+ "border-spacing" => [SPACING],
117
+ "border-width" => LENGTH_WITH_EMPTY.call,
118
+ "contrast" => [IS_INTEGER],
119
+ "grayscale" => ZERO_AND_EMPTY.call,
120
+ "hue-rotate" => [IS_INTEGER],
121
+ "invert" => ZERO_AND_EMPTY.call,
122
+ "gap" => [SPACING],
123
+ "gradient-color-stops" => [COLORS],
124
+ "inset" => SPACING_WITH_AUTO.call,
125
+ "margin" => SPACING_WITH_AUTO.call,
126
+ "opacity" => [IS_INTEGER],
127
+ "padding" => [SPACING],
128
+ "saturate" => [IS_INTEGER],
129
+ "scale" => [IS_INTEGER],
130
+ "sepia" => ZERO_AND_EMPTY.call,
131
+ "skew" => [IS_INTEGER, IS_ARBITRARY_VALUE],
132
+ "space" => [SPACING],
133
+ "translate" => [SPACING],
134
+ },
135
+ class_groups: {
136
+ # Layout
137
+ ##
138
+ # Aspect Ratio
139
+ # @see https://tailwindcss.com/docs/aspect-ratio
140
+ ##
141
+ "aspect" => [{ "aspect" => ["auto", "square", "video", IS_ARBITRARY_VALUE] }],
142
+ ##
143
+ # Container
144
+ # @see https://tailwindcss.com/docs/container
145
+ ##
146
+ "container" => ["container"],
147
+ ##
148
+ # Columns
149
+ # @see https://tailwindcss.com/docs/columns
150
+ ##
151
+ "columns" => [{ "columns" => [IS_TSHIRT_SIZE] }],
152
+ ##
153
+ # Break After
154
+ # @see https://tailwindcss.com/docs/break-after
155
+ ##
156
+ "break-after" => [{ "break-after" => BREAKS.call }],
157
+ ##
158
+ # Break Before
159
+ # @see https://tailwindcss.com/docs/break-before
160
+ ##
161
+ "break-before" => [{ "break-before" => BREAKS.call }],
162
+ ##
163
+ # Break Inside
164
+ # @see https://tailwindcss.com/docs/break-inside
165
+ ##
166
+ "break-inside" => [{ "break-inside" => ["auto", "avoid", "avoid-page", "avoid-column"] }],
167
+ ##
168
+ # Box Decoration Break
169
+ # @see https://tailwindcss.com/docs/box-decoration-break
170
+ ##
171
+ "box-decoration" => [{ "box-decoration" => ["slice", "clone"] }],
172
+ ##
173
+ # Box Sizing
174
+ # @see https://tailwindcss.com/docs/box-sizing
175
+ ##
176
+ "box" => [{ "box" => ["border", "content"] }],
177
+ ##
178
+ # Display
179
+ # @see https://tailwindcss.com/docs/display
180
+ ##
181
+ "display" => [
182
+ "block",
183
+ "inline-block",
184
+ "inline",
185
+ "flex",
186
+ "inline-flex",
187
+ "table",
188
+ "inline-table",
189
+ "table-caption",
190
+ "table-cell",
191
+ "table-column",
192
+ "table-column-group",
193
+ "table-footer-group",
194
+ "table-header-group",
195
+ "table-row-group",
196
+ "table-row",
197
+ "flow-root",
198
+ "grid",
199
+ "inline-grid",
200
+ "contents",
201
+ "list-item",
202
+ "hidden",
203
+ ],
204
+ ##
205
+ # Floats
206
+ # @see https://tailwindcss.com/docs/float
207
+ ##
208
+ "float" => [{ "float" => ["right", "left", "none"] }],
209
+ ##
210
+ # Clear
211
+ # @see https://tailwindcss.com/docs/clear
212
+ ##
213
+ "clear" => [{ "clear" => ["left", "right", "both", "none"] }],
214
+ ##
215
+ # Isolation
216
+ # @see https://tailwindcss.com/docs/isolation
217
+ ##
218
+ "isolation" => ["isolate", "isolation-auto"],
219
+ ##
220
+ # Object Fit
221
+ # @see https://tailwindcss.com/docs/object-fit
222
+ ##
223
+ "object-fit" => [{ "object" => ["contain", "cover", "fill", "none", "scale-down"] }],
224
+ ##
225
+ # Object Position
226
+ # @see https://tailwindcss.com/docs/object-position
227
+ ##
228
+ "object-position" => [{ "object" => [*POSITIONS.call, IS_ARBITRARY_VALUE] }],
229
+ ##
230
+ # Overflow
231
+ # @see https://tailwindcss.com/docs/overflow
232
+ ##
233
+ "overflow" => [{ "overflow" => OVERFLOW.call }],
234
+ ##
235
+ # Overflow X
236
+ # @see https://tailwindcss.com/docs/overflow
237
+ ##
238
+ "overflow-x" => [{ "overflow-x" => OVERFLOW.call }],
239
+ ##
240
+ # Overflow Y
241
+ # @see https://tailwindcss.com/docs/overflow
242
+ ##
243
+ "overflow-y" => [{ "overflow-y" => OVERFLOW.call }],
244
+ ##
245
+ # Overscroll Behavior
246
+ # @see https://tailwindcss.com/docs/overscroll-behavior
247
+ ##
248
+ "overscroll" => [{ "overscroll" => OVERSCROLL.call }],
249
+ ##
250
+ # Overscroll Behavior X
251
+ # @see https://tailwindcss.com/docs/overscroll-behavior
252
+ ##
253
+ "overscroll-x" => [{ "overscroll-x" => OVERSCROLL.call }],
254
+ ##
255
+ # Overscroll Behavior Y
256
+ # @see https://tailwindcss.com/docs/overscroll-behavior
257
+ ##
258
+ "overscroll-y" => [{ "overscroll-y" => OVERSCROLL.call }],
259
+ ##
260
+ # Position
261
+ # @see https://tailwindcss.com/docs/position
262
+ ##
263
+ "position" => ["static", "fixed", "absolute", "relative", "sticky"],
264
+ ##
265
+ # Top / Right / Bottom / Left
266
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
267
+ ##
268
+ "inset" => [{ "inset" => [INSET] }],
269
+ ##
270
+ # Right / Left
271
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
272
+ ##
273
+ "inset-x" => [{ "inset-x" => [INSET] }],
274
+ ##
275
+ # Top / Bottom
276
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
277
+ ##
278
+ "inset-y" => [{ "inset-y" => [INSET] }],
279
+ ##
280
+ # Top
281
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
282
+ ##
283
+ "top" => [{ "top" => [INSET] }],
284
+ ##
285
+ # Right
286
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
287
+ ##
288
+ "right" => [{ "right" => [INSET] }],
289
+ ##
290
+ # Bottom
291
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
292
+ ##
293
+ "bottom" => [{ "bottom" => [INSET] }],
294
+ ##
295
+ # Left
296
+ # @see https://tailwindcss.com/docs/top-right-bottom-left
297
+ ##
298
+ "left" => [{ "left" => [INSET] }],
299
+ ##
300
+ # Visibility
301
+ # @see https://tailwindcss.com/docs/visibility
302
+ ##
303
+ "visibility" => ["visible", "invisible"],
304
+ ##
305
+ # Z-Index
306
+ # @see https://tailwindcss.com/docs/z-index
307
+ ##
308
+ "z" => [{ "z" => [IS_INTEGER] }],
309
+ # Flexbox and Grid
310
+ ##
311
+ # Flex Basis
312
+ # @see https://tailwindcss.com/docs/flex-basis
313
+ ##
314
+ "basis" => [{ "basis" => [SPACING] }],
315
+ ##
316
+ # Flex Direction
317
+ # @see https://tailwindcss.com/docs/flex-direction
318
+ ##
319
+ "flex-direction" => [{ "flex" => ["row", "row-reverse", "col", "col-reverse"] }],
320
+ ##
321
+ # Flex Wrap
322
+ # @see https://tailwindcss.com/docs/flex-wrap
323
+ ##
324
+ "flex-wrap" => [{ "flex" => ["wrap", "wrap-reverse", "nowrap"] }],
325
+ ##
326
+ # Flex
327
+ # @see https://tailwindcss.com/docs/flex
328
+ ##
329
+ "flex" => [{ "flex" => ["1", "auto", "initial", "none", IS_ARBITRARY_VALUE] }],
330
+ ##
331
+ # Flex Grow
332
+ # @see https://tailwindcss.com/docs/flex-grow
333
+ ##
334
+ "grow" => [{ "grow" => ZERO_AND_EMPTY.call }],
335
+ ##
336
+ # Flex Shrink
337
+ # @see https://tailwindcss.com/docs/flex-shrink
338
+ ##
339
+ "shrink" => [{ "shrink" => ZERO_AND_EMPTY.call }],
340
+ ##
341
+ # Order
342
+ # @see https://tailwindcss.com/docs/order
343
+ ##
344
+ "order" => [{ "order" => ["first", "last", "none", IS_INTEGER] }],
345
+ ##
346
+ # Grid Template Columns
347
+ # @see https://tailwindcss.com/docs/grid-template-columns
348
+ ##
349
+ "grid-cols" => [{ "grid-cols" => [IS_ANY] }],
350
+ ##
351
+ # Grid Column Start / End
352
+ # @see https://tailwindcss.com/docs/grid-column
353
+ ##
354
+ "col-start-end" => [{ "col" => ["auto", { "span" => [IS_INTEGER] }] }],
355
+ ##
356
+ # Grid Column Start
357
+ # @see https://tailwindcss.com/docs/grid-column
358
+ ##
359
+ "col-start" => [{ "col-start" => INTEGER_WITH_AUTO.call }],
360
+ ##
361
+ # Grid Column End
362
+ # @see https://tailwindcss.com/docs/grid-column
363
+ ##
364
+ "col-end" => [{ "col-end" => INTEGER_WITH_AUTO.call }],
365
+ ##
366
+ # Grid Template Rows
367
+ # @see https://tailwindcss.com/docs/grid-template-rows
368
+ ##
369
+ "grid-rows" => [{ "grid-rows" => [IS_ANY] }],
370
+ ##
371
+ # Grid Row Start / End
372
+ # @see https://tailwindcss.com/docs/grid-row
373
+ ##
374
+ "row-start-end" => [{ "row" => ["auto", { "span" => [IS_INTEGER] }] }],
375
+ ##
376
+ # Grid Row Start
377
+ # @see https://tailwindcss.com/docs/grid-row
378
+ ##
379
+ "row-start" => [{ "row-start" => INTEGER_WITH_AUTO.call }],
380
+ ##
381
+ # Grid Row End
382
+ # @see https://tailwindcss.com/docs/grid-row
383
+ ##
384
+ "row-end" => [{ "row-end" => INTEGER_WITH_AUTO.call }],
385
+ ##
386
+ # Grid Auto Flow
387
+ # @see https://tailwindcss.com/docs/grid-auto-flow
388
+ ##
389
+ "grid-flow" => [{ "grid-flow" => ["row", "col", "dense", "row-dense", "col-dense"] }],
390
+ ##
391
+ # Grid Auto Columns
392
+ # @see https://tailwindcss.com/docs/grid-auto-columns
393
+ ##
394
+ "auto-cols" => [{ "auto-cols" => ["auto", "min", "max", "fr", IS_ARBITRARY_VALUE] }],
395
+ ##
396
+ # Grid Auto Rows
397
+ # @see https://tailwindcss.com/docs/grid-auto-rows
398
+ ##
399
+ "auto-rows" => [{ "auto-rows" => ["auto", "min", "max", "fr", IS_ARBITRARY_VALUE] }],
400
+ ##
401
+ # Gap
402
+ # @see https://tailwindcss.com/docs/gap
403
+ ##
404
+ "gap" => [{ "gap" => [GAP] }],
405
+ ##
406
+ # Gap X
407
+ # @see https://tailwindcss.com/docs/gap
408
+ ##
409
+ "gap-x" => [{ "gap-x" => [GAP] }],
410
+ ##
411
+ # Gap Y
412
+ # @see https://tailwindcss.com/docs/gap
413
+ ##
414
+ "gap-y" => [{ "gap-y" => [GAP] }],
415
+ ##
416
+ # Justify Content
417
+ # @see https://tailwindcss.com/docs/justify-content
418
+ ##
419
+ "justify-content" => [{ "justify" => ALIGN.call }],
420
+ ##
421
+ # Justify Items
422
+ # @see https://tailwindcss.com/docs/justify-items
423
+ ##
424
+ "justify-items" => [{ "justify-items" => ["start", "end", "center", "stretch"] }],
425
+ ##
426
+ # Justify Self
427
+ # @see https://tailwindcss.com/docs/justify-self
428
+ ##
429
+ "justify-self" => [{ "justify-self" => ["auto", "start", "end", "center", "stretch"] }],
430
+ ##
431
+ # Align Content
432
+ # @see https://tailwindcss.com/docs/align-content
433
+ ##
434
+ "align-content" => [{ "content" => ALIGN.call }],
435
+ ##
436
+ # Align Items
437
+ # @see https://tailwindcss.com/docs/align-items
438
+ ##
439
+ "align-items" => [{ "items" => ["start", "end", "center", "baseline", "stretch"] }],
440
+ ##
441
+ # Align Self
442
+ # @see https://tailwindcss.com/docs/align-self
443
+ ##
444
+ "align-self" => [{ "self" => ["auto", "start", "end", "center", "stretch", "baseline"] }],
445
+ ##
446
+ # Place Content
447
+ # @see https://tailwindcss.com/docs/place-content
448
+ ##
449
+ "place-content" => [{ "place-content" => [*ALIGN.call, "stretch"] }],
450
+ ##
451
+ # Place Items
452
+ # @see https://tailwindcss.com/docs/place-items
453
+ ##
454
+ "place-items" => [{ "place-items" => ["start", "end", "center", "stretch"] }],
455
+ ##
456
+ # Place Self
457
+ # @see https://tailwindcss.com/docs/place-self
458
+ ##
459
+ "place-self" => [{ "place-self" => ["auto", "start", "end", "center", "stretch"] }],
460
+ # Spacing
461
+ ##
462
+ # Padding
463
+ # @see https://tailwindcss.com/docs/padding
464
+ ##
465
+ "p" => [{ "p" => [PADDING] }],
466
+ ##
467
+ # Padding X
468
+ # @see https://tailwindcss.com/docs/padding
469
+ ##
470
+ "px" => [{ "px" => [PADDING] }],
471
+ ##
472
+ # Padding Y
473
+ # @see https://tailwindcss.com/docs/padding
474
+ ##
475
+ "py" => [{ "py" => [PADDING] }],
476
+ ##
477
+ # Padding Top
478
+ # @see https://tailwindcss.com/docs/padding
479
+ ##
480
+ "pt" => [{ "pt" => [PADDING] }],
481
+ ##
482
+ # Padding Right
483
+ # @see https://tailwindcss.com/docs/padding
484
+ ##
485
+ "pr" => [{ "pr" => [PADDING] }],
486
+ ##
487
+ # Padding Bottom
488
+ # @see https://tailwindcss.com/docs/padding
489
+ ##
490
+ "pb" => [{ "pb" => [PADDING] }],
491
+ ##
492
+ # Padding Left
493
+ # @see https://tailwindcss.com/docs/padding
494
+ ##
495
+ "pl" => [{ "pl" => [PADDING] }],
496
+ ##
497
+ # Margin
498
+ # @see https://tailwindcss.com/docs/margin
499
+ ##
500
+ "m" => [{ "m" => [MARGIN] }],
501
+ ##
502
+ # Margin X
503
+ # @see https://tailwindcss.com/docs/margin
504
+ ##
505
+ "mx" => [{ "mx" => [MARGIN] }],
506
+ ##
507
+ # Margin Y
508
+ # @see https://tailwindcss.com/docs/margin
509
+ ##
510
+ "my" => [{ "my" => [MARGIN] }],
511
+ ##
512
+ # Margin Top
513
+ # @see https://tailwindcss.com/docs/margin
514
+ ##
515
+ "mt" => [{ "mt" => [MARGIN] }],
516
+ ##
517
+ # Margin Right
518
+ # @see https://tailwindcss.com/docs/margin
519
+ ##
520
+ "mr" => [{ "mr" => [MARGIN] }],
521
+ ##
522
+ # Margin Bottom
523
+ # @see https://tailwindcss.com/docs/margin
524
+ ##
525
+ "mb" => [{ "mb" => [MARGIN] }],
526
+ ##
527
+ # Margin Left
528
+ # @see https://tailwindcss.com/docs/margin
529
+ ##
530
+ "ml" => [{ "ml" => [MARGIN] }],
531
+ ##
532
+ # Space Between X
533
+ # @see https://tailwindcss.com/docs/space
534
+ ##
535
+ "space-x" => [{ "space-x" => [SPACE] }],
536
+ ##
537
+ # Space Between X Reverse
538
+ # @see https://tailwindcss.com/docs/space
539
+ ##
540
+ "space-x-reverse" => ["space-x-reverse"],
541
+ ##
542
+ # Space Between Y
543
+ # @see https://tailwindcss.com/docs/space
544
+ ##
545
+ "space-y" => [{ "space-y" => [SPACE] }],
546
+ ##
547
+ # Space Between Y Reverse
548
+ # @see https://tailwindcss.com/docs/space
549
+ ##
550
+ "space-y-reverse" => ["space-y-reverse"],
551
+ # Sizing
552
+ ##
553
+ # Width
554
+ # @see https://tailwindcss.com/docs/width
555
+ ##
556
+ "w" => [{ "w" => ["auto", "min", "max", "fit", SPACING] }],
557
+ ##
558
+ # Min-Width
559
+ # @see https://tailwindcss.com/docs/min-width
560
+ ##
561
+ "min-w" => [{ "min-w" => ["min", "max", "fit", IS_LENGTH] }],
562
+ ##
563
+ # Max-Width
564
+ # @see https://tailwindcss.com/docs/max-width
565
+ ##
566
+ "max-w" => [
567
+ {
568
+ "max-w" => [
569
+ "0",
570
+ "none",
571
+ "full",
572
+ "min",
573
+ "max",
574
+ "fit",
575
+ "prose",
576
+ { "screen" => [IS_TSHIRT_SIZE] },
577
+ IS_TSHIRT_SIZE,
578
+ IS_ARBITRARY_LENGTH,
579
+ ],
580
+ },
581
+ ],
582
+ ##
583
+ # Height
584
+ # @see https://tailwindcss.com/docs/height
585
+ ##
586
+ "h" => [{ "h" => SPACING_WITH_AUTO.call }],
587
+ ##
588
+ # Min-Height
589
+ # @see https://tailwindcss.com/docs/min-height
590
+ ##
591
+ "min-h" => [{ "min-h" => ["min", "max", "fit", IS_LENGTH] }],
592
+ ##
593
+ # Max-Height
594
+ # @see https://tailwindcss.com/docs/max-height
595
+ ##
596
+ "max-h" => [{ "max-h" => [SPACING, "min", "max", "fit"] }],
597
+ # Typography
598
+ ##
599
+ # Font Size
600
+ # @see https://tailwindcss.com/docs/font-size
601
+ ##
602
+ "font-size" => [{ "text" => ["base", IS_TSHIRT_SIZE, IS_ARBITRARY_LENGTH] }],
603
+ ##
604
+ # Font Smoothing
605
+ # @see https://tailwindcss.com/docs/font-smoothing
606
+ ##
607
+ "font-smoothing" => ["antialiased", "subpixel-antialiased"],
608
+ ##
609
+ # Font Style
610
+ # @see https://tailwindcss.com/docs/font-style
611
+ ##
612
+ "font-style" => ["italic", "not-italic"],
613
+ ##
614
+ # Font Weight
615
+ # @see https://tailwindcss.com/docs/font-weight
616
+ ##
617
+ "font-weight" => [
618
+ {
619
+ "font" => [
620
+ "thin",
621
+ "extralight",
622
+ "light",
623
+ "normal",
624
+ "medium",
625
+ "semibold",
626
+ "bold",
627
+ "extrabold",
628
+ "black",
629
+ IS_ARBITRARY_WEIGHT,
630
+ ],
631
+ },
632
+ ],
633
+ ##
634
+ # Font Family
635
+ # @see https://tailwindcss.com/docs/font-family
636
+ ##
637
+ "font-family" => [{ "font" => [IS_ANY] }],
638
+ ##
639
+ # Font Variant Numeric
640
+ # @see https://tailwindcss.com/docs/font-variant-numeric
641
+ ##
642
+ "fvn-normal" => ["normal-nums"],
643
+ ##
644
+ # Font Variant Numeric
645
+ # @see https://tailwindcss.com/docs/font-variant-numeric
646
+ ##
647
+ "fvn-ordinal" => ["ordinal"],
648
+ ##
649
+ # Font Variant Numeric
650
+ # @see https://tailwindcss.com/docs/font-variant-numeric
651
+ ##
652
+ "fvn-slashed-zero" => ["slashed-zero"],
653
+ ##
654
+ # Font Variant Numeric
655
+ # @see https://tailwindcss.com/docs/font-variant-numeric
656
+ ##
657
+ "fvn-figure" => ["lining-nums", "oldstyle-nums"],
658
+ ##
659
+ # Font Variant Numeric
660
+ # @see https://tailwindcss.com/docs/font-variant-numeric
661
+ ##
662
+ "fvn-spacing" => ["proportional-nums", "tabular-nums"],
663
+ ##
664
+ # Font Variant Numeric
665
+ # @see https://tailwindcss.com/docs/font-variant-numeric
666
+ ##
667
+ "fvn-fraction" => ["diagonal-fractions", "stacked-fractons"],
668
+ ##
669
+ # Letter Spacing
670
+ # @see https://tailwindcss.com/docs/letter-spacing
671
+ ##
672
+ "tracking" => [
673
+ {
674
+ "tracking" => [
675
+ "tighter",
676
+ "tight",
677
+ "normal",
678
+ "wide",
679
+ "wider",
680
+ "widest",
681
+ IS_ARBITRARY_LENGTH,
682
+ ],
683
+ },
684
+ ],
685
+ ##
686
+ # Line Height
687
+ # @see https://tailwindcss.com/docs/line-height
688
+ ##
689
+ "leading" => [
690
+ { "leading" => ["none", "tight", "snug", "normal", "relaxed", "loose", IS_LENGTH] },
691
+ ],
692
+ ##
693
+ # List Style Type
694
+ # @see https://tailwindcss.com/docs/list-style-type
695
+ ##
696
+ "list-style-type" => [{ "list" => ["none", "disc", "decimal", IS_ARBITRARY_VALUE] }],
697
+ ##
698
+ # List Style Position
699
+ # @see https://tailwindcss.com/docs/list-style-position
700
+ ##
701
+ "list-style-position" => [{ "list" => ["inside", "outside"] }],
702
+ ##
703
+ # Placeholder Color
704
+ # @deprecated since Tailwind CSS v3.0.0
705
+ # @see https://tailwindcss.com/docs/placeholder-color
706
+ ##
707
+ "placeholder-color" => [{ "placeholder" => [COLORS] }],
708
+ ##
709
+ # Placeholder Opacity
710
+ # @see https://tailwindcss.com/docs/placeholder-opacity
711
+ ##
712
+ "placeholder-opacity" => [{ "placeholder-opacity" => [OPACITY] }],
713
+ ##
714
+ # Text Alignment
715
+ # @see https://tailwindcss.com/docs/text-align
716
+ ##
717
+ "text-alignment" => [{ "text" => ["left", "center", "right", "justify", "start", "end"] }],
718
+ ##
719
+ # Text Color
720
+ # @see https://tailwindcss.com/docs/text-color
721
+ ##
722
+ "text-color" => [{ "text" => [COLORS] }],
723
+ ##
724
+ # Text Opacity
725
+ # @see https://tailwindcss.com/docs/text-opacity
726
+ ##
727
+ "text-opacity" => [{ "text-opacity" => [OPACITY] }],
728
+ ##
729
+ # Text Decoration
730
+ # @see https://tailwindcss.com/docs/text-decoration
731
+ ##
732
+ "text-decoration" => ["underline", "overline", "line-through", "no-underline"],
733
+ ##
734
+ # Text Decoration Style
735
+ # @see https://tailwindcss.com/docs/text-decoration-style
736
+ ##
737
+ "text-decoration-style" => [{ "decoration" => [*LINE_STYLES.call, "wavy"] }],
738
+ ##
739
+ # Text Decoration Thickness
740
+ # @see https://tailwindcss.com/docs/text-decoration-thickness
741
+ ##
742
+ "text-decoration-thickness" => [{ "decoration" => ["auto", "from-font", IS_LENGTH] }],
743
+ ##
744
+ # Text Underline Offset
745
+ # @see https://tailwindcss.com/docs/text-underline-offset
746
+ ##
747
+ "underline-offset" => [{ "underline-offset" => ["auto", IS_LENGTH] }],
748
+ ##
749
+ # Text Decoration Color
750
+ # @see https://tailwindcss.com/docs/text-decoration-color
751
+ ##
752
+ "text-decoration-color" => [{ "decoration" => [COLORS] }],
753
+ ##
754
+ # Text Transform
755
+ # @see https://tailwindcss.com/docs/text-transform
756
+ ##
757
+ "text-transform" => ["uppercase", "lowercase", "capitalize", "normal-case"],
758
+ ##
759
+ # Text Overflow
760
+ # @see https://tailwindcss.com/docs/text-overflow
761
+ ##
762
+ "text-overflow" => ["truncate", "text-ellipsis", "text-clip"],
763
+ ##
764
+ # Text Indent
765
+ # @see https://tailwindcss.com/docs/text-indent
766
+ ##
767
+ "indent" => [{ "indent" => [SPACING] }],
768
+ ##
769
+ # Vertical Alignment
770
+ # @see https://tailwindcss.com/docs/vertical-align
771
+ ##
772
+ "vertical-align" => [
773
+ {
774
+ "align" => [
775
+ "baseline",
776
+ "top",
777
+ "middle",
778
+ "bottom",
779
+ "text-top",
780
+ "text-bottom",
781
+ "sub",
782
+ "super",
783
+ IS_ARBITRARY_LENGTH,
784
+ ],
785
+ },
786
+ ],
787
+ ##
788
+ # Whitespace
789
+ # @see https://tailwindcss.com/docs/whitespace
790
+ ##
791
+ "whitespace" => [{ "whitespace" => ["normal", "nowrap", "pre", "pre-line", "pre-wrap"] }],
792
+ ##
793
+ # Word Break
794
+ # @see https://tailwindcss.com/docs/word-break
795
+ ##
796
+ "break" => [{ "break" => ["normal", "words", "all"] }],
797
+ ##
798
+ # Content
799
+ # @see https://tailwindcss.com/docs/content
800
+ ##
801
+ "content" => [{ "content" => ["none", IS_ARBITRARY_VALUE] }],
802
+ # Backgrounds
803
+ ##
804
+ # Background Attachment
805
+ # @see https://tailwindcss.com/docs/background-attachment
806
+ ##
807
+ "bg-attachment" => [{ "bg" => ["fixed", "local", "scroll"] }],
808
+ ##
809
+ # Background Clip
810
+ # @see https://tailwindcss.com/docs/background-clip
811
+ ##
812
+ "bg-clip" => [{ "bg-clip" => ["border", "padding", "content", "text"] }],
813
+ ##
814
+ # Background Opacity
815
+ # @deprecated since Tailwind CSS v3.0.0
816
+ # @see https://tailwindcss.com/docs/background-opacity
817
+ ##
818
+ "bg-opacity" => [{ "bg-opacity" => [OPACITY] }],
819
+ ##
820
+ # Background Origin
821
+ # @see https://tailwindcss.com/docs/background-origin
822
+ ##
823
+ "bg-origin" => [{ "bg-origin" => ["border", "padding", "content"] }],
824
+ ##
825
+ # Background Position
826
+ # @see https://tailwindcss.com/docs/background-position
827
+ ##
828
+ "bg-position" => [{ "bg" => [*POSITIONS.call, IS_ARBITRARY_POSITION] }],
829
+ ##
830
+ # Background Repeat
831
+ # @see https://tailwindcss.com/docs/background-repeat
832
+ ##
833
+ "bg-repeat" => [{ "bg" => ["no-repeat", { "repeat" => ["", "x", "y", "round", "space"] }] }],
834
+ ##
835
+ # Background Size
836
+ # @see https://tailwindcss.com/docs/background-size
837
+ ##
838
+ "bg-size" => [{ "bg" => ["auto", "cover", "contain", IS_ARBITRARY_SIZE] }],
839
+ ##
840
+ # Background Image
841
+ # @see https://tailwindcss.com/docs/background-image
842
+ ##
843
+ "bg-image" => [
844
+ {
845
+ "bg" => [
846
+ "none",
847
+ { "gradient-to" => ["t", "tr", "r", "br", "b", "bl", "l", "tl"] },
848
+ IS_ARBITRARY_URL,
849
+ ],
850
+ },
851
+ ],
852
+ ##
853
+ # Background Color
854
+ # @see https://tailwindcss.com/docs/background-color
855
+ ##
856
+ "bg-color" => [{ "bg" => [COLORS] }],
857
+ ##
858
+ # Gradient Color Stops From
859
+ # @see https://tailwindcss.com/docs/gradient-color-stops
860
+ ##
861
+ "gradient-from" => [{ "from" => [GRADIENT_COLOR_STOPS] }],
862
+ ##
863
+ # Gradient Color Stops Via
864
+ # @see https://tailwindcss.com/docs/gradient-color-stops
865
+ ##
866
+ "gradient-via" => [{ "via" => [GRADIENT_COLOR_STOPS] }],
867
+ ##
868
+ # Gradient Color Stops To
869
+ # @see https://tailwindcss.com/docs/gradient-color-stops
870
+ ##
871
+ "gradient-to" => [{ "to" => [GRADIENT_COLOR_STOPS] }],
872
+ # Borders
873
+ ##
874
+ # Border Radius
875
+ # @see https://tailwindcss.com/docs/border-radius
876
+ ##
877
+ "rounded" => [{ "rounded" => [BORDER_RADIUS] }],
878
+ ##
879
+ # Border Radius Top
880
+ # @see https://tailwindcss.com/docs/border-radius
881
+ ##
882
+ "rounded-t" => [{ "rounded-t" => [BORDER_RADIUS] }],
883
+ ##
884
+ # Border Radius Right
885
+ # @see https://tailwindcss.com/docs/border-radius
886
+ ##
887
+ "rounded-r" => [{ "rounded-r" => [BORDER_RADIUS] }],
888
+ ##
889
+ # Border Radius Bottom
890
+ # @see https://tailwindcss.com/docs/border-radius
891
+ ##
892
+ "rounded-b" => [{ "rounded-b" => [BORDER_RADIUS] }],
893
+ ##
894
+ # Border Radius Left
895
+ # @see https://tailwindcss.com/docs/border-radius
896
+ ##
897
+ "rounded-l" => [{ "rounded-l" => [BORDER_RADIUS] }],
898
+ ##
899
+ # Border Radius Top Left
900
+ # @see https://tailwindcss.com/docs/border-radius
901
+ ##
902
+ "rounded-tl" => [{ "rounded-tl" => [BORDER_RADIUS] }],
903
+ ##
904
+ # Border Radius Top Right
905
+ # @see https://tailwindcss.com/docs/border-radius
906
+ ##
907
+ "rounded-tr" => [{ "rounded-tr" => [BORDER_RADIUS] }],
908
+ ##
909
+ # Border Radius Bottom Right
910
+ # @see https://tailwindcss.com/docs/border-radius
911
+ ##
912
+ "rounded-br" => [{ "rounded-br" => [BORDER_RADIUS] }],
913
+ ##
914
+ # Border Radius Bottom Left
915
+ # @see https://tailwindcss.com/docs/border-radius
916
+ ##
917
+ "rounded-bl" => [{ "rounded-bl" => [BORDER_RADIUS] }],
918
+ ##
919
+ # Border Width
920
+ # @see https://tailwindcss.com/docs/border-width
921
+ ##
922
+ "border-w" => [{ "border" => [BORDER_WIDTH] }],
923
+ ##
924
+ # Border Width X
925
+ # @see https://tailwindcss.com/docs/border-width
926
+ ##
927
+ "border-w-x" => [{ "border-x" => [BORDER_WIDTH] }],
928
+ ##
929
+ # Border Width Y
930
+ # @see https://tailwindcss.com/docs/border-width
931
+ ##
932
+ "border-w-y" => [{ "border-y" => [BORDER_WIDTH] }],
933
+ ##
934
+ # Border Width Top
935
+ # @see https://tailwindcss.com/docs/border-width
936
+ ##
937
+ "border-w-t" => [{ "border-t" => [BORDER_WIDTH] }],
938
+ ##
939
+ # Border Width Right
940
+ # @see https://tailwindcss.com/docs/border-width
941
+ ##
942
+ "border-w-r" => [{ "border-r" => [BORDER_WIDTH] }],
943
+ ##
944
+ # Border Width Bottom
945
+ # @see https://tailwindcss.com/docs/border-width
946
+ ##
947
+ "border-w-b" => [{ "border-b" => [BORDER_WIDTH] }],
948
+ ##
949
+ # Border Width Left
950
+ # @see https://tailwindcss.com/docs/border-width
951
+ ##
952
+ "border-w-l" => [{ "border-l" => [BORDER_WIDTH] }],
953
+ ##
954
+ # Border Opacity
955
+ # @see https://tailwindcss.com/docs/border-opacity
956
+ ##
957
+ "border-opacity" => [{ "border-opacity" => [OPACITY] }],
958
+ ##
959
+ # Border Style
960
+ # @see https://tailwindcss.com/docs/border-style
961
+ ##
962
+ "border-style" => [{ "border" => [*LINE_STYLES.call, "hidden"] }],
963
+ ##
964
+ # Divide Width X
965
+ # @see https://tailwindcss.com/docs/divide-width
966
+ ##
967
+ "divide-x" => [{ "divide-x" => [BORDER_WIDTH] }],
968
+ ##
969
+ # Divide Width X Reverse
970
+ # @see https://tailwindcss.com/docs/divide-width
971
+ ##
972
+ "divide-x-reverse" => ["divide-x-reverse"],
973
+ ##
974
+ # Divide Width Y
975
+ # @see https://tailwindcss.com/docs/divide-width
976
+ ##
977
+ "divide-y" => [{ "divide-y" => [BORDER_WIDTH] }],
978
+ ##
979
+ # Divide Width Y Reverse
980
+ # @see https://tailwindcss.com/docs/divide-width
981
+ ##
982
+ "divide-y-reverse" => ["divide-y-reverse"],
983
+ ##
984
+ # Divide Opacity
985
+ # @see https://tailwindcss.com/docs/divide-opacity
986
+ ##
987
+ "divide-opacity" => [{ "divide-opacity" => [OPACITY] }],
988
+ ##
989
+ # Divide Style
990
+ # @see https://tailwindcss.com/docs/divide-style
991
+ ##
992
+ "divide-style" => [{ "divide" => LINE_STYLES.call }],
993
+ ##
994
+ # Border Color
995
+ # @see https://tailwindcss.com/docs/border-color
996
+ ##
997
+ "border-color" => [{ "border" => [BORDER_COLOR] }],
998
+ ##
999
+ # Border Color X
1000
+ # @see https://tailwindcss.com/docs/border-color
1001
+ ##
1002
+ "border-color-x" => [{ "border-x" => [BORDER_COLOR] }],
1003
+ ##
1004
+ # Border Color Y
1005
+ # @see https://tailwindcss.com/docs/border-color
1006
+ ##
1007
+ "border-color-y" => [{ "border-y" => [BORDER_COLOR] }],
1008
+ ##
1009
+ # Border Color Top
1010
+ # @see https://tailwindcss.com/docs/border-color
1011
+ ##
1012
+ "border-color-t" => [{ "border-t" => [BORDER_COLOR] }],
1013
+ ##
1014
+ # Border Color Right
1015
+ # @see https://tailwindcss.com/docs/border-color
1016
+ ##
1017
+ "border-color-r" => [{ "border-r" => [BORDER_COLOR] }],
1018
+ ##
1019
+ # Border Color Bottom
1020
+ # @see https://tailwindcss.com/docs/border-color
1021
+ ##
1022
+ "border-color-b" => [{ "border-b" => [BORDER_COLOR] }],
1023
+ ##
1024
+ # Border Color Left
1025
+ # @see https://tailwindcss.com/docs/border-color
1026
+ ##
1027
+ "border-color-l" => [{ "border-l" => [BORDER_COLOR] }],
1028
+ ##
1029
+ # Divide Color
1030
+ # @see https://tailwindcss.com/docs/divide-color
1031
+ ##
1032
+ "divide-color" => [{ "divide" => [BORDER_COLOR] }],
1033
+ ##
1034
+ # Outline Style
1035
+ # @see https://tailwindcss.com/docs/outline-style
1036
+ ##
1037
+ "outline-style" => [{ "outline" => ["", *LINE_STYLES.call, "hidden"] }],
1038
+ ##
1039
+ # Outline Offset
1040
+ # @see https://tailwindcss.com/docs/outline-offset
1041
+ ##
1042
+ "outline-offset" => [{ "outline-offset" => [IS_LENGTH] }],
1043
+ ##
1044
+ # Outline Width
1045
+ # @see https://tailwindcss.com/docs/outline-width
1046
+ ##
1047
+ "outline-w" => [{ "outline" => [IS_LENGTH] }],
1048
+ ##
1049
+ # Outline Color
1050
+ # @see https://tailwindcss.com/docs/outline-color
1051
+ ##
1052
+ "outline-color" => [{ "outline" => [COLORS] }],
1053
+ ##
1054
+ # Ring Width
1055
+ # @see https://tailwindcss.com/docs/ring-width
1056
+ ##
1057
+ "ring-w" => [{ "ring" => LENGTH_WITH_EMPTY.call }],
1058
+ ##
1059
+ # Ring Width Inset
1060
+ # @see https://tailwindcss.com/docs/ring-width
1061
+ ##
1062
+ "ring-w-inset" => ["ring-inset"],
1063
+ ##
1064
+ # Ring Color
1065
+ # @see https://tailwindcss.com/docs/ring-color
1066
+ ##
1067
+ "ring-color" => [{ "ring" => [COLORS] }],
1068
+ ##
1069
+ # Ring Opacity
1070
+ # @see https://tailwindcss.com/docs/ring-opacity
1071
+ ##
1072
+ "ring-opacity" => [{ "ring-opacity" => [OPACITY] }],
1073
+ ##
1074
+ # Ring Offset Width
1075
+ # @see https://tailwindcss.com/docs/ring-offset-width
1076
+ ##
1077
+ "ring-offset-w" => [{ "ring-offset" => [IS_LENGTH] }],
1078
+ ##
1079
+ # Ring Offset Color
1080
+ # @see https://tailwindcss.com/docs/ring-offset-color
1081
+ ##
1082
+ "ring-offset-color" => [{ "ring-offset" => [COLORS] }],
1083
+ # Effects
1084
+ ##
1085
+ # Box Shadow
1086
+ # @see https://tailwindcss.com/docs/box-shadow
1087
+ ##
1088
+ "shadow" => [{ "shadow" => ["", "inner", "none", IS_TSHIRT_SIZE, IS_ARBITRARY_SHADOW] }],
1089
+ ##
1090
+ # Box Shadow Color
1091
+ # @see https://tailwindcss.com/docs/box-shadow-color
1092
+ ##
1093
+ "shadow-color" => [{ "shadow" => [IS_ANY] }],
1094
+ ##
1095
+ # Opacity
1096
+ # @see https://tailwindcss.com/docs/opacity
1097
+ ##
1098
+ "opacity" => [{ "opacity" => [OPACITY] }],
1099
+ ##
1100
+ # Mix Blend Mode
1101
+ # @see https://tailwindcss.com/docs/mix-blend-mode
1102
+ ##
1103
+ "mix-blend" => [{ "mix-blend" => BLEND_MODES.call }],
1104
+ ##
1105
+ # Background Blend Mode
1106
+ # @see https://tailwindcss.com/docs/background-blend-mode
1107
+ ##
1108
+ "bg-blend" => [{ "bg-blend" => BLEND_MODES.call }],
1109
+ # Filters
1110
+ ##
1111
+ # Filter
1112
+ # @deprecated since Tailwind CSS v3.0.0
1113
+ # @see https://tailwindcss.com/docs/filter
1114
+ ##
1115
+ "filter" => [{ "filter" => ["", "none"] }],
1116
+ ##
1117
+ # Blur
1118
+ # @see https://tailwindcss.com/docs/blur
1119
+ ##
1120
+ "blur" => [{ "blur" => [BLUR] }],
1121
+ ##
1122
+ # Brightness
1123
+ # @see https://tailwindcss.com/docs/brightness
1124
+ ##
1125
+ "brightness" => [{ "brightness" => [BRIGHTNESS] }],
1126
+ ##
1127
+ # Contrast
1128
+ # @see https://tailwindcss.com/docs/contrast
1129
+ ##
1130
+ "contrast" => [{ "contrast" => [CONTRAST] }],
1131
+ ##
1132
+ # Drop Shadow
1133
+ # @see https://tailwindcss.com/docs/drop-shadow
1134
+ ##
1135
+ "drop-shadow" => [{ "drop-shadow" => ["", "none", IS_TSHIRT_SIZE, IS_ARBITRARY_VALUE] }],
1136
+ ##
1137
+ # Grayscale
1138
+ # @see https://tailwindcss.com/docs/grayscale
1139
+ ##
1140
+ "grayscale" => [{ "grayscale" => [GRAYSCALE] }],
1141
+ ##
1142
+ # Hue Rotate
1143
+ # @see https://tailwindcss.com/docs/hue-rotate
1144
+ ##
1145
+ "hue-rotate" => [{ "hue-rotate" => [HUE_ROTATE] }],
1146
+ ##
1147
+ # Invert
1148
+ # @see https://tailwindcss.com/docs/invert
1149
+ ##
1150
+ "invert" => [{ "invert" => [INVERT] }],
1151
+ ##
1152
+ # Saturate
1153
+ # @see https://tailwindcss.com/docs/saturate
1154
+ ##
1155
+ "saturate" => [{ "saturate" => [SATURATE] }],
1156
+ ##
1157
+ # Sepia
1158
+ # @see https://tailwindcss.com/docs/sepia
1159
+ ##
1160
+ "sepia" => [{ "sepia" => [SEPIA] }],
1161
+ ##
1162
+ # Backdrop Filter
1163
+ # @deprecated since Tailwind CSS v3.0.0
1164
+ # @see https://tailwindcss.com/docs/backdrop-filter
1165
+ ##
1166
+ "backdrop-filter" => [{ "backdrop-filter" => ["", "none"] }],
1167
+ ##
1168
+ # Backdrop Blur
1169
+ # @see https://tailwindcss.com/docs/backdrop-blur
1170
+ ##
1171
+ "backdrop-blur" => [{ "backdrop-blur" => [BLUR] }],
1172
+ ##
1173
+ # Backdrop Brightness
1174
+ # @see https://tailwindcss.com/docs/backdrop-brightness
1175
+ ##
1176
+ "backdrop-brightness" => [{ "backdrop-brightness" => [BRIGHTNESS] }],
1177
+ ##
1178
+ # Backdrop Contrast
1179
+ # @see https://tailwindcss.com/docs/backdrop-contrast
1180
+ ##
1181
+ "backdrop-contrast" => [{ "backdrop-contrast" => [CONTRAST] }],
1182
+ ##
1183
+ # Backdrop Grayscale
1184
+ # @see https://tailwindcss.com/docs/backdrop-grayscale
1185
+ ##
1186
+ "backdrop-grayscale" => [{ "backdrop-grayscale" => [GRAYSCALE] }],
1187
+ ##
1188
+ # Backdrop Hue Rotate
1189
+ # @see https://tailwindcss.com/docs/backdrop-hue-rotate
1190
+ ##
1191
+ "backdrop-hue-rotate" => [{ "backdrop-hue-rotate" => [HUE_ROTATE] }],
1192
+ ##
1193
+ # Backdrop Invert
1194
+ # @see https://tailwindcss.com/docs/backdrop-invert
1195
+ ##
1196
+ "backdrop-invert" => [{ "backdrop-invert" => [INVERT] }],
1197
+ ##
1198
+ # Backdrop Opacity
1199
+ # @see https://tailwindcss.com/docs/backdrop-opacity
1200
+ ##
1201
+ "backdrop-opacity" => [{ "backdrop-opacity" => [OPACITY] }],
1202
+ ##
1203
+ # Backdrop Saturate
1204
+ # @see https://tailwindcss.com/docs/backdrop-saturate
1205
+ ##
1206
+ "backdrop-saturate" => [{ "backdrop-saturate" => [SATURATE] }],
1207
+ ##
1208
+ # Backdrop Sepia
1209
+ # @see https://tailwindcss.com/docs/backdrop-sepia
1210
+ ##
1211
+ "backdrop-sepia" => [{ "backdrop-sepia" => [SEPIA] }],
1212
+ # Tables
1213
+ ##
1214
+ # Border Collapse
1215
+ # @see https://tailwindcss.com/docs/border-collapse
1216
+ ##
1217
+ "border-collapse" => [{ "border" => ["collapse", "separate"] }],
1218
+ ##
1219
+ # Border Spacing
1220
+ # @see https://tailwindcss.com/docs/border-spacing
1221
+ ##
1222
+ "border-spacing" => [{ "border-spacing" => [BORDER_SPACING] }],
1223
+ ##
1224
+ # Border Spacing X
1225
+ # @see https://tailwindcss.com/docs/border-spacing
1226
+ ##
1227
+ "border-spacing-x" => [{ "border-spacing-x" => [BORDER_SPACING] }],
1228
+ ##
1229
+ # Border Spacing Y
1230
+ # @see https://tailwindcss.com/docs/border-spacing
1231
+ ##
1232
+ "border-spacing-y" => [{ "border-spacing-y" => [BORDER_SPACING] }],
1233
+ ##
1234
+ # Table Layout
1235
+ # @see https://tailwindcss.com/docs/table-layout
1236
+ ##
1237
+ "table-layout" => [{ "table" => ["auto", "fixed"] }],
1238
+ # Transitions and Animation
1239
+ ##
1240
+ # Tranisition Property
1241
+ # @see https://tailwindcss.com/docs/transition-property
1242
+ ##
1243
+ "transition" => [
1244
+ {
1245
+ "transition" => [
1246
+ "none",
1247
+ "all",
1248
+ "",
1249
+ "colors",
1250
+ "opacity",
1251
+ "shadow",
1252
+ "transform",
1253
+ IS_ARBITRARY_VALUE,
1254
+ ],
1255
+ },
1256
+ ],
1257
+ ##
1258
+ # Transition Duration
1259
+ # @see https://tailwindcss.com/docs/transition-duration
1260
+ ##
1261
+ "duration" => [{ "duration" => [IS_INTEGER] }],
1262
+ ##
1263
+ # Transition Timing Function
1264
+ # @see https://tailwindcss.com/docs/transition-timing-function
1265
+ ##
1266
+ "ease" => [{ "ease" => ["linear", "in", "out", "in-out", IS_ARBITRARY_VALUE] }],
1267
+ ##
1268
+ # Transition Delay
1269
+ # @see https://tailwindcss.com/docs/transition-delay
1270
+ ##
1271
+ "delay" => [{ "delay" => [IS_INTEGER] }],
1272
+ ##
1273
+ # Animation
1274
+ # @see https://tailwindcss.com/docs/animation
1275
+ ##
1276
+ "animate" => [{ "animate" => ["none", "spin", "ping", "pulse", "bounce", IS_ARBITRARY_VALUE] }],
1277
+ # Transforms
1278
+ ##
1279
+ # Transform
1280
+ # @see https://tailwindcss.com/docs/transform
1281
+ ##
1282
+ "transform" => [{ "transform" => ["", "gpu", "none"] }],
1283
+ ##
1284
+ # Scale
1285
+ # @see https://tailwindcss.com/docs/scale
1286
+ ##
1287
+ "scale" => [{ "scale" => [SCALE] }],
1288
+ ##
1289
+ # Scale X
1290
+ # @see https://tailwindcss.com/docs/scale
1291
+ ##
1292
+ "scale-x" => [{ "scale-x" => [SCALE] }],
1293
+ ##
1294
+ # Scale Y
1295
+ # @see https://tailwindcss.com/docs/scale
1296
+ ##
1297
+ "scale-y" => [{ "scale-y" => [SCALE] }],
1298
+ ##
1299
+ # Rotate
1300
+ # @see https://tailwindcss.com/docs/rotate
1301
+ ##
1302
+ "rotate" => [{ "rotate" => [IS_INTEGER, IS_ARBITRARY_VALUE] }],
1303
+ ##
1304
+ # Translate X
1305
+ # @see https://tailwindcss.com/docs/translate
1306
+ ##
1307
+ "translate-x" => [{ "translate-x" => [TRANSLATE] }],
1308
+ ##
1309
+ # Translate Y
1310
+ # @see https://tailwindcss.com/docs/translate
1311
+ ##
1312
+ "translate-y" => [{ "translate-y" => [TRANSLATE] }],
1313
+ ##
1314
+ # Skew X
1315
+ # @see https://tailwindcss.com/docs/skew
1316
+ ##
1317
+ "skew-x" => [{ "skew-x" => [SKEW] }],
1318
+ ##
1319
+ # Skew Y
1320
+ # @see https://tailwindcss.com/docs/skew
1321
+ ##
1322
+ "skew-y" => [{ "skew-y" => [SKEW] }],
1323
+ ##
1324
+ # Transform Origin
1325
+ # @see https://tailwindcss.com/docs/transform-origin
1326
+ ##
1327
+ "transform-origin" => [
1328
+ {
1329
+ "origin" => [
1330
+ "center",
1331
+ "top",
1332
+ "top-right",
1333
+ "right",
1334
+ "bottom-right",
1335
+ "bottom",
1336
+ "bottom-left",
1337
+ "left",
1338
+ "top-left",
1339
+ IS_ARBITRARY_VALUE,
1340
+ ],
1341
+ },
1342
+ ],
1343
+ # Interactivity
1344
+ ##
1345
+ # Accent Color
1346
+ # @see https://tailwindcss.com/docs/accent-color
1347
+ ##
1348
+ "accent" => [{ "accent" => ["auto", COLORS] }],
1349
+ ##
1350
+ # Appearance
1351
+ # @see https://tailwindcss.com/docs/appearance
1352
+ ##
1353
+ "appearance" => ["appearance-none"],
1354
+ ##
1355
+ # Cursor
1356
+ # @see https://tailwindcss.com/docs/cursor
1357
+ ##
1358
+ "cursor" => [
1359
+ {
1360
+ "cursor" => [
1361
+ "auto",
1362
+ "default",
1363
+ "pointer",
1364
+ "wait",
1365
+ "text",
1366
+ "move",
1367
+ "help",
1368
+ "not-allowed",
1369
+ "none",
1370
+ "context-menu",
1371
+ "progress",
1372
+ "cell",
1373
+ "crosshair",
1374
+ "vertical-text",
1375
+ "alias",
1376
+ "copy",
1377
+ "no-drop",
1378
+ "grab",
1379
+ "grabbing",
1380
+ "all-scroll",
1381
+ "col-resize",
1382
+ "row-resize",
1383
+ "n-resize",
1384
+ "e-resize",
1385
+ "s-resize",
1386
+ "w-resize",
1387
+ "ne-resize",
1388
+ "nw-resize",
1389
+ "se-resize",
1390
+ "sw-resize",
1391
+ "ew-resize",
1392
+ "ns-resize",
1393
+ "nesw-resize",
1394
+ "nwse-resize",
1395
+ "zoom-in",
1396
+ "zoom-out",
1397
+ IS_ARBITRARY_VALUE,
1398
+ ],
1399
+ },
1400
+ ],
1401
+ ##
1402
+ # Caret Color
1403
+ # @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
1404
+ ##
1405
+ "caret-color" => [{ "caret" => [COLORS] }],
1406
+ ##
1407
+ # Pointer Events
1408
+ # @see https://tailwindcss.com/docs/pointer-events
1409
+ ##
1410
+ "pointer-events" => [{ "pointer-events" => ["none", "auto"] }],
1411
+ ##
1412
+ # Resize
1413
+ # @see https://tailwindcss.com/docs/resize
1414
+ ##
1415
+ "resize" => [{ "resize" => ["none", "y", "x", ""] }],
1416
+ ##
1417
+ # Scroll Behavior
1418
+ # @see https://tailwindcss.com/docs/scroll-behavior
1419
+ ##
1420
+ "scroll-behavior" => [{ "scroll" => ["auto", "smooth"] }],
1421
+ ##
1422
+ # Scroll Margin
1423
+ # @see https://tailwindcss.com/docs/scroll-margin
1424
+ ##
1425
+ "scroll-m" => [{ "scroll-m" => [SPACING] }],
1426
+ ##
1427
+ # Scroll Margin X
1428
+ # @see https://tailwindcss.com/docs/scroll-margin
1429
+ ##
1430
+ "scroll-mx" => [{ "scroll-mx" => [SPACING] }],
1431
+ ##
1432
+ # Scroll Margin Y
1433
+ # @see https://tailwindcss.com/docs/scroll-margin
1434
+ ##
1435
+ "scroll-my" => [{ "scroll-my" => [SPACING] }],
1436
+ ##
1437
+ # Scroll Margin Top
1438
+ # @see https://tailwindcss.com/docs/scroll-margin
1439
+ ##
1440
+ "scroll-mt" => [{ "scroll-mt" => [SPACING] }],
1441
+ ##
1442
+ # Scroll Margin Right
1443
+ # @see https://tailwindcss.com/docs/scroll-margin
1444
+ ##
1445
+ "scroll-mr" => [{ "scroll-mr" => [SPACING] }],
1446
+ ##
1447
+ # Scroll Margin Bottom
1448
+ # @see https://tailwindcss.com/docs/scroll-margin
1449
+ ##
1450
+ "scroll-mb" => [{ "scroll-mb" => [SPACING] }],
1451
+ ##
1452
+ # Scroll Margin Left
1453
+ # @see https://tailwindcss.com/docs/scroll-margin
1454
+ ##
1455
+ "scroll-ml" => [{ "scroll-ml" => [SPACING] }],
1456
+ ##
1457
+ # Scroll Padding
1458
+ # @see https://tailwindcss.com/docs/scroll-padding
1459
+ ##
1460
+ "scroll-p" => [{ "scroll-p" => [SPACING] }],
1461
+ ##
1462
+ # Scroll Padding X
1463
+ # @see https://tailwindcss.com/docs/scroll-padding
1464
+ ##
1465
+ "scroll-px" => [{ "scroll-px" => [SPACING] }],
1466
+ ##
1467
+ # Scroll Padding Y
1468
+ # @see https://tailwindcss.com/docs/scroll-padding
1469
+ ##
1470
+ "scroll-py" => [{ "scroll-py" => [SPACING] }],
1471
+ ##
1472
+ # Scroll Padding Top
1473
+ # @see https://tailwindcss.com/docs/scroll-padding
1474
+ ##
1475
+ "scroll-pt" => [{ "scroll-pt" => [SPACING] }],
1476
+ ##
1477
+ # Scroll Padding Right
1478
+ # @see https://tailwindcss.com/docs/scroll-padding
1479
+ ##
1480
+ "scroll-pr" => [{ "scroll-pr" => [SPACING] }],
1481
+ ##
1482
+ # Scroll Padding Bottom
1483
+ # @see https://tailwindcss.com/docs/scroll-padding
1484
+ ##
1485
+ "scroll-pb" => [{ "scroll-pb" => [SPACING] }],
1486
+ ##
1487
+ # Scroll Padding Left
1488
+ # @see https://tailwindcss.com/docs/scroll-padding
1489
+ ##
1490
+ "scroll-pl" => [{ "scroll-pl" => [SPACING] }],
1491
+ ##
1492
+ # Scroll Snap Align
1493
+ # @see https://tailwindcss.com/docs/scroll-snap-align
1494
+ ##
1495
+ "snap-align" => [{ "snap" => ["start", "end", "center", "align-none"] }],
1496
+ ##
1497
+ # Scroll Snap Stop
1498
+ # @see https://tailwindcss.com/docs/scroll-snap-stop
1499
+ ##
1500
+ "snap-stop" => [{ "snap" => ["normal", "always"] }],
1501
+ ##
1502
+ # Scroll Snap Type
1503
+ # @see https://tailwindcss.com/docs/scroll-snap-type
1504
+ ##
1505
+ "snap-type" => [{ "snap" => ["none", "x", "y", "both"] }],
1506
+ ##
1507
+ # Scroll Snap Type Strictness
1508
+ # @see https://tailwindcss.com/docs/scroll-snap-type
1509
+ ##
1510
+ "snap-strictness" => [{ "snap" => ["mandatory", "proximity"] }],
1511
+ ##
1512
+ # Touch Action
1513
+ # @see https://tailwindcss.com/docs/touch-action
1514
+ ##
1515
+ "touch" => [
1516
+ {
1517
+ "touch" => [
1518
+ "auto",
1519
+ "none",
1520
+ "pinch-zoom",
1521
+ "manipulation",
1522
+ { "pan" => ["x", "left", "right", "y", "up", "down"] },
1523
+ ],
1524
+ },
1525
+ ],
1526
+ ##
1527
+ # User Select
1528
+ # @see https://tailwindcss.com/docs/user-select
1529
+ ##
1530
+ "select" => [{ "select" => ["none", "text", "all", "auto"] }],
1531
+ ##
1532
+ # Will Change
1533
+ # @see https://tailwindcss.com/docs/will-change
1534
+ ##
1535
+ "will-change" => [
1536
+ { "will-change" => ["auto", "scroll", "contents", "transform", IS_ARBITRARY_VALUE] },
1537
+ ],
1538
+ # SVG
1539
+ ##
1540
+ # Fill
1541
+ # @see https://tailwindcss.com/docs/fill
1542
+ ##
1543
+ "fill" => [{ "fill" => [COLORS] }],
1544
+ ##
1545
+ # Stroke Width
1546
+ # @see https://tailwindcss.com/docs/stroke-width
1547
+ ##
1548
+ "stroke-w" => [{ "stroke" => [IS_LENGTH] }],
1549
+ ##
1550
+ # Stroke
1551
+ # @see https://tailwindcss.com/docs/stroke
1552
+ ##
1553
+ "stroke" => [{ "stroke" => [COLORS] }],
1554
+ # Accessibility
1555
+ ##
1556
+ # Screen Readers
1557
+ # @see https://tailwindcss.com/docs/screen-readers
1558
+ ##
1559
+ "sr" => ["sr-only", "not-sr-only"],
1560
+ },
1561
+ conflicting_class_groups: {
1562
+ "overflow" => ["overflow-x", "overflow-y"],
1563
+ "overscroll" => ["overscroll-x", "overscroll-y"],
1564
+ "inset" => ["inset-x", "inset-y", "top", "right", "bottom", "left"],
1565
+ "inset-x" => ["right", "left"],
1566
+ "inset-y" => ["top", "bottom"],
1567
+ "flex" => ["basis", "grow", "shrink"],
1568
+ "col-start-end" => ["col-start", "col-end"],
1569
+ "row-start-end" => ["row-start", "row-end"],
1570
+ "gap" => ["gap-x", "gap-y"],
1571
+ "p" => ["px", "py", "pt", "pr", "pb", "pl"],
1572
+ "px" => ["pr", "pl"],
1573
+ "py" => ["pt", "pb"],
1574
+ "m" => ["mx", "my", "mt", "mr", "mb", "ml"],
1575
+ "mx" => ["mr", "ml"],
1576
+ "my" => ["mt", "mb"],
1577
+ "font-size" => ["leading"],
1578
+ "fvn-normal" => [
1579
+ "fvn-ordinal",
1580
+ "fvn-slashed-zero",
1581
+ "fvn-figure",
1582
+ "fvn-spacing",
1583
+ "fvn-fraction",
1584
+ ],
1585
+ "fvn-ordinal" => ["fvn-normal"],
1586
+ "fvn-slashed-zero" => ["fvn-normal"],
1587
+ "fvn-figure" => ["fvn-normal"],
1588
+ "fvn-spacing" => ["fvn-normal"],
1589
+ "fvn-fraction" => ["fvn-normal"],
1590
+ "rounded" => [
1591
+ "rounded-t",
1592
+ "rounded-r",
1593
+ "rounded-b",
1594
+ "rounded-l",
1595
+ "rounded-tl",
1596
+ "rounded-tr",
1597
+ "rounded-br",
1598
+ "rounded-bl",
1599
+ ],
1600
+ "rounded-t" => ["rounded-tl", "rounded-tr"],
1601
+ "rounded-r" => ["rounded-tr", "rounded-br"],
1602
+ "rounded-b" => ["rounded-br", "rounded-bl"],
1603
+ "rounded-l" => ["rounded-tl", "rounded-bl"],
1604
+ "border-spacing" => ["border-spacing-x", "border-spacing-y"],
1605
+ "border-w" => ["border-w-t", "border-w-r", "border-w-b", "border-w-l"],
1606
+ "border-w-x" => ["border-w-r", "border-w-l"],
1607
+ "border-w-y" => ["border-w-t", "border-w-b"],
1608
+ "border-color" => [
1609
+ "border-color-t",
1610
+ "border-color-r",
1611
+ "border-color-b",
1612
+ "border-color-l",
1613
+ ],
1614
+ "border-color-x" => ["border-color-r", "border-color-l"],
1615
+ "border-color-y" => ["border-color-t", "border-color-b"],
1616
+ "scroll-m" => [
1617
+ "scroll-mx",
1618
+ "scroll-my",
1619
+ "scroll-mt",
1620
+ "scroll-mr",
1621
+ "scroll-mb",
1622
+ "scroll-ml",
1623
+ ],
1624
+ "scroll-mx" => ["scroll-mr", "scroll-ml"],
1625
+ "scroll-my" => ["scroll-mt", "scroll-mb"],
1626
+ "scroll-p" => [
1627
+ "scroll-px",
1628
+ "scroll-py",
1629
+ "scroll-pt",
1630
+ "scroll-pr",
1631
+ "scroll-pb",
1632
+ "scroll-pl",
1633
+ ],
1634
+ "scroll-px" => ["scroll-pr", "scroll-pl"],
1635
+ "scroll-py" => ["scroll-pt", "scroll-pb"],
1636
+ },
1637
+ }.freeze
1638
+
1639
+ def merge_configs(extension_config)
1640
+ config = TailwindMerge::Config::DEFAULTS
1641
+ [:theme].each do |type|
1642
+ extension_config.fetch(type, {}).each_pair do |key, value|
1643
+ config[type][value] = ->(config) { FROM_THEME.call(config, key) }
1644
+ end
1645
+ end
1646
+ config
1647
+ end
1648
+ end
1649
+ end