tailwind_merge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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