tailwind_merge 0.13.3 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/README.md +53 -55
- data/lib/tailwind_merge/config.rb +32 -56
- data/lib/tailwind_merge/version.rb +1 -1
- data/lib/tailwind_merge.rb +2 -2
- data/tailwind_merge.gemspec +11 -8
- metadata +16 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9e79ce87f36904f2dd66beecff8d32e83b97025d729f6c324f14da53aca7c8e
|
4
|
+
data.tar.gz: 6ca2a49f5f9039028a9f6677bca5ec2f8765c52887680dd41c47449fe1770f28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20b3f51eb10c68b29b5f4354570ba6cdfbcab13103d7a45f213aecdaaaa50f5c9876b676f6a217c4b0a98335cffce007f1926f0f74b2c98af0155174b48c13d2
|
7
|
+
data.tar.gz: fe5786fa019198ca80233bceec9acdd5d9bd6d8098907143600d1df1e5a7a2b6525daa329c146c6d741c1df0dd276f7a87734f718cd865b7ad734d374bc6feed
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
# [v0.15.0] - 23-01-2025
|
2
|
+
## What's Changed
|
3
|
+
* Improve gemspec by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/41
|
4
|
+
* Refactoring README.md by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/42
|
5
|
+
* Fix homepage uri by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/45
|
6
|
+
* Refactoring constants by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/43
|
7
|
+
* Fix changelog uri by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/46
|
8
|
+
* Uninstall lru_cache and install sin_lru_redux by @w-masahiro-ct in https://github.com/gjtorikian/tailwind_merge/pull/48
|
9
|
+
- Adds `ignore_empty_cache` option for saving memory
|
10
|
+
## New Contributors
|
11
|
+
* @w-masahiro-ct made their first contribution in https://github.com/gjtorikian/tailwind_merge/pull/41
|
12
|
+
|
13
|
+
**Full Changelog**: https://github.com/gjtorikian/tailwind_merge/compare/v0.14.0...v0.15.0
|
14
|
+
# [v0.14.0] - 19-12-2024
|
15
|
+
## What's Changed
|
16
|
+
* Prevent cache tampering by freezing cached value by @david-uhlig in https://github.com/gjtorikian/tailwind_merge/pull/39
|
17
|
+
|
18
|
+
The results of the `merge` class is now a frozen string. This may unexpectedly break your app if you are expecting the string of classes to be mutable.
|
19
|
+
|
20
|
+
|
21
|
+
## New Contributors
|
22
|
+
* @david-uhlig made their first contribution in https://github.com/gjtorikian/tailwind_merge/pull/39
|
23
|
+
|
24
|
+
**Full Changelog**: https://github.com/gjtorikian/tailwind_merge/compare/v0.13.3...v0.14.0
|
1
25
|
# [v0.13.3] - 25-11-2024
|
2
26
|
## What's Changed
|
3
27
|
* [skip test] Release v0.13.2 by @github-actions in https://github.com/gjtorikian/tailwind_merge/pull/37
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ To use it, pass in a single string:
|
|
20
20
|
require "tailwind_merge"
|
21
21
|
|
22
22
|
TailwindMerge::Merger.new.merge("px-2 py-1 bg-red hover:bg-dark-red p-3 bg-[#B91C1C]")
|
23
|
-
# →
|
23
|
+
# → "hover:bg-dark-red p-3 bg-[#B91C1C]"
|
24
24
|
```
|
25
25
|
|
26
26
|
Or, an array of strings:
|
@@ -29,7 +29,7 @@ Or, an array of strings:
|
|
29
29
|
require "tailwind_merge"
|
30
30
|
|
31
31
|
TailwindMerge::Merger.new.merge(["px-2 py-1", "bg-red hover:bg-dark-red", "p-3 bg-[#B91C1C]"])
|
32
|
-
# →
|
32
|
+
# → "hover:bg-dark-red p-3 bg-[#B91C1C]"
|
33
33
|
```
|
34
34
|
|
35
35
|
## What's it for?
|
@@ -50,10 +50,8 @@ When the `ConfirmEmailComponent` is rendered, an input with the className `borde
|
|
50
50
|
This is where `tailwind_merge` comes in:
|
51
51
|
|
52
52
|
```ruby
|
53
|
-
|
54
53
|
@merger = TailwindMerge::Merger.new
|
55
|
-
@merger.merge("border rounded px-2 py-1 p-5")
|
56
|
-
# → "border rounded p-5"
|
54
|
+
@merger.merge("border rounded px-2 py-1 p-5") # → "border rounded p-5"
|
57
55
|
```
|
58
56
|
|
59
57
|
tailwind-merge overrides conflicting classes and keeps everything else untouched. In the case of the implementation of `ConfirmEmailComponent`, the input now only renders the classes `border rounded p-5`.
|
@@ -67,30 +65,30 @@ tailwind-merge overrides conflicting classes and keeps everything else untouched
|
|
67
65
|
### Last conflicting class wins
|
68
66
|
|
69
67
|
```ruby
|
70
|
-
@merger.merge(
|
68
|
+
@merger.merge("p-5 p-2 p-4") # → "p-4"
|
71
69
|
```
|
72
70
|
|
73
71
|
### Supports refinements
|
74
72
|
|
75
73
|
```ruby
|
76
|
-
@merger.merge(
|
77
|
-
@merger.merge(
|
74
|
+
@merger.merge("p-3 px-5") # → "p-3 px-5"
|
75
|
+
@merger.merge("inset-x-4 right-4") # → "inset-x-4 right-4"
|
78
76
|
```
|
79
77
|
|
80
78
|
### Resolves non-trivial conflicts
|
81
79
|
|
82
80
|
```ruby
|
83
|
-
@merger.merge(
|
84
|
-
@merger.merge(
|
85
|
-
@merger.merge(
|
81
|
+
@merger.merge("inset-x-px -inset-1") # → "-inset-1"
|
82
|
+
@merger.merge("bottom-auto inset-y-6") # → "inset-y-6"
|
83
|
+
@merger.merge("inline block") # → "block"
|
86
84
|
```
|
87
85
|
|
88
86
|
### Supports modifiers and stacked modifiers
|
89
87
|
|
90
88
|
```ruby
|
91
|
-
@merger.merge(
|
92
|
-
@merger.merge(
|
93
|
-
@merger.merge(
|
89
|
+
@merger.merge("p-2 hover:p-4") # → "p-2 hover:p-4"
|
90
|
+
@merger.merge("hover:p-2 hover:p-4") # → "hover:p-4"
|
91
|
+
@merger.merge("hover:focus:p-2 focus:hover:p-4") # → "focus:hover:p-4"
|
94
92
|
```
|
95
93
|
|
96
94
|
The order of standard modifiers does not matter for tailwind-merge.
|
@@ -98,8 +96,8 @@ The order of standard modifiers does not matter for tailwind-merge.
|
|
98
96
|
### Supports arbitrary values
|
99
97
|
|
100
98
|
```ruby
|
101
|
-
@merger.merge(
|
102
|
-
@merger.merge(
|
99
|
+
@merger.merge("bg-black bg-[color:var(--mystery-var)]") # → "bg-[color:var(--mystery-var)]"
|
100
|
+
@merger.merge("grid-cols-[1fr,auto] grid-cols-2") # → "grid-cols-2"
|
103
101
|
```
|
104
102
|
|
105
103
|
> **Warning**
|
@@ -112,11 +110,11 @@ The order of standard modifiers does not matter for tailwind-merge.
|
|
112
110
|
### Supports arbitrary properties
|
113
111
|
|
114
112
|
```ruby
|
115
|
-
@merger.merge(
|
116
|
-
@merger.merge(
|
113
|
+
@merger.merge("[mask-type:luminance] [mask-type:alpha]") # → "[mask-type:alpha]"
|
114
|
+
@merger.merge("[--scroll-offset:56px] lg:[--scroll-offset:44px]") # → "[--scroll-offset:56px] lg:[--scroll-offset:44px]"
|
117
115
|
|
118
116
|
#Don't actually do this!
|
119
|
-
@merger.merge(
|
117
|
+
@merger.merge("[padding:1rem] p-8") # → "[padding:1rem] p-8"
|
120
118
|
```
|
121
119
|
|
122
120
|
> **Warning** > `tailwind_merge` does not resolve conflicts between arbitrary properties and their matching Tailwind classes to keep the bundle size small.
|
@@ -124,11 +122,11 @@ The order of standard modifiers does not matter for tailwind-merge.
|
|
124
122
|
### Supports arbitrary variants
|
125
123
|
|
126
124
|
```ruby
|
127
|
-
@merger.merge(
|
128
|
-
@merger.merge(
|
125
|
+
@merger.merge("[&:nth-child(3)]:py-0 [&:nth-child(3)]:py-4") # → "[&:nth-child(3)]:py-4"
|
126
|
+
@merger.merge("dark:hover:[&:nth-child(3)]:py-0 hover:dark:[&:nth-child(3)]:py-4") # → "hover:dark:[&:nth-child(3)]:py-4"
|
129
127
|
|
130
128
|
# Don't actually do this!
|
131
|
-
@merger.merge(
|
129
|
+
@merger.merge("[&:focus]:ring focus:ring-4") # → "[&:focus]:ring focus:ring-4"
|
132
130
|
```
|
133
131
|
|
134
132
|
> **Warning**
|
@@ -138,26 +136,26 @@ The order of standard modifiers does not matter for tailwind-merge.
|
|
138
136
|
### Supports important modifier
|
139
137
|
|
140
138
|
```ruby
|
141
|
-
@merger.merge(
|
142
|
-
@merger.merge(
|
139
|
+
@merger.merge("!p-3 !p-4 p-5") # → "!p-4 p-5"
|
140
|
+
@merger.merge("!right-2 !-inset-x-1") # → "!-inset-x-1"
|
143
141
|
```
|
144
142
|
|
145
143
|
## Supports postfix modifiers
|
146
144
|
|
147
145
|
```ts
|
148
|
-
twMerge("text-sm leading-6 text-lg/7"); // →
|
146
|
+
twMerge("text-sm leading-6 text-lg/7"); // → "text-lg/7"
|
149
147
|
```
|
150
148
|
|
151
149
|
### Preserves non-Tailwind classes
|
152
150
|
|
153
151
|
```ruby
|
154
|
-
@merger.merge(
|
152
|
+
@merger.merge("p-5 p-2 my-non-tailwind-class p-4") # → "my-non-tailwind-class p-4"
|
155
153
|
```
|
156
154
|
|
157
155
|
### Supports custom colors out of the box
|
158
156
|
|
159
157
|
```ruby
|
160
|
-
@merger.merge(
|
158
|
+
@merger.merge("text-red text-secret-sauce") # → "text-secret-sauce"
|
161
159
|
```
|
162
160
|
|
163
161
|
## Basic usage
|
@@ -189,22 +187,24 @@ The `tailwind_merge` config is an object with several keys:
|
|
189
187
|
|
190
188
|
```ruby
|
191
189
|
tailwind_merge_config = {
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
190
|
+
# ↓ *Optional* Define how many values should be stored in cache.
|
191
|
+
cache_size: 500,
|
192
|
+
# ↓ *Optional* Enable or disable caching nil values.
|
193
|
+
ignore_empty_cache: true,
|
194
|
+
# ↓ *Optional* modifier separator from Tailwind config
|
195
|
+
separator: ":",
|
196
|
+
# ↓ *Optional* prefix from Tailwind config
|
197
|
+
prefix: "tw-",
|
198
|
+
theme: {
|
199
|
+
# Theme scales are defined here
|
200
|
+
# This is not the theme object from your Tailwind config
|
201
|
+
},
|
202
|
+
class_groups: {
|
203
|
+
# Class groups are defined here
|
204
|
+
},
|
205
|
+
conflicting_class_groups: {
|
206
|
+
# Conflicts between class groups are defined here
|
207
|
+
}
|
208
208
|
}
|
209
209
|
```
|
210
210
|
|
@@ -219,13 +219,13 @@ To use the custom configuration, pass it to the `TailwindMerge::Merger` initiali
|
|
219
219
|
The library uses a concept of _class groups_ which is an array of Tailwind classes which all modify the same CSS property. For example, here is the position class group:
|
220
220
|
|
221
221
|
```ruby
|
222
|
-
position_class_group = [
|
222
|
+
position_class_group = ["static", "fixed", "absolute", "relative", "sticky"]
|
223
223
|
```
|
224
224
|
|
225
225
|
`tailwind_merge` resolves conflicts between classes in a class group and only keeps the last one passed to the merge function call:
|
226
226
|
|
227
227
|
```ruby
|
228
|
-
@merger.merge(
|
228
|
+
@merger.merge("static sticky relative") # → "relative"
|
229
229
|
```
|
230
230
|
|
231
231
|
Tailwind classes often share the beginning of the class name, so elements in a class group can also be an object with values of the same shape as a class group (the shape is recursive). In the object, each key is joined with all the elements in the corresponding array with a dash (`-`) in between.
|
@@ -233,7 +233,7 @@ Tailwind classes often share the beginning of the class name, so elements in a c
|
|
233
233
|
For example, here is the overflow class group which results in the classes `overflow-auto`, `overflow-hidden`, `overflow-visible` and `overflow-scroll`.
|
234
234
|
|
235
235
|
```ruby
|
236
|
-
overflow_class_group = [{ overflow: [
|
236
|
+
overflow_class_group = [{ overflow: ["auto", "hidden", "visible", "scroll"] }]
|
237
237
|
```
|
238
238
|
|
239
239
|
Sometimes it isn't possible to enumerate every element in a class group. Think of a Tailwind class which allows arbitrary values. In this scenario you can use a validator function which takes a _class part_ and returns a boolean indicating whether a class is part of a class group.
|
@@ -242,16 +242,16 @@ For example, here is the fill class group:
|
|
242
242
|
|
243
243
|
```ruby
|
244
244
|
is_arbitrary_value = (class_part: string) => /^\[.+\]$/.test(class_part)
|
245
|
-
fill_class_group = [{ fill: [
|
245
|
+
fill_class_group = [{ fill: ["current", IS_ARBITRARY_VALUE] }]
|
246
246
|
```
|
247
247
|
|
248
248
|
Because the function is under the `fill` key, it will only get called for classes which start with `fill-`. Also, the function only gets passed the part of the class name which comes after `fill-`, this way you can use the same function in multiple class groups. `tailwind_merge` provides its own [validators](#validators), so you don't need to recreate them.
|
249
249
|
|
250
|
-
You can use an empty string (`
|
250
|
+
You can use an empty string (`""`) as a class part if you want to indicate that the preceding part was the end. This is useful for defining elements which are marked as `DEFAULT` in the Tailwind config.
|
251
251
|
|
252
252
|
```ruby
|
253
253
|
# ↓ Resolves to filter and filter-none
|
254
|
-
filter_class_group = [{ filter: [
|
254
|
+
filter_class_group = [{ filter: ["", "none"] }]
|
255
255
|
```
|
256
256
|
|
257
257
|
Each class group is defined under its ID in the `class_groups` object in the config. This ID is only used internally, and the only thing that matters is that it is unique among all class groups.
|
@@ -271,9 +271,7 @@ To summarize, `px-3` should stand in conflict with `pr-4`, but `pr-4` should not
|
|
271
271
|
This is what the `conflicting_class_groups` object in the config is for. You define a key in it which is the ID of a class group which _creates_ a conflict and the value is an array of IDs of class group which _receive_ a conflict.
|
272
272
|
|
273
273
|
```ruby
|
274
|
-
conflicting_class_groups = {
|
275
|
-
px: ['pr', 'pl'],
|
276
|
-
}
|
274
|
+
conflicting_class_groups = { px: ["pr", "pl"] }
|
277
275
|
```
|
278
276
|
|
279
277
|
If a class group _creates_ a conflict, it means that if it appears in a class list string passed to `merge`, all preceding class groups in the string which _receive_ the conflict will be removed.
|
@@ -314,10 +312,10 @@ If you modified one of these theme scales in your Tailwind config, you can add a
|
|
314
312
|
|
315
313
|
```ruby
|
316
314
|
merger = TailwindMerge::Merger.new(config: {
|
317
|
-
|
315
|
+
theme: {
|
318
316
|
"spacing" => ["my-space"],
|
319
|
-
"margin" => ["my-margin"]
|
320
|
-
|
317
|
+
"margin" => ["my-margin"]
|
318
|
+
}
|
321
319
|
})
|
322
320
|
```
|
323
321
|
|
@@ -4,63 +4,38 @@ module TailwindMerge
|
|
4
4
|
module Config
|
5
5
|
include Validators
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
7
|
+
THEME_KEYS = [
|
8
|
+
"colors",
|
9
|
+
"spacing",
|
10
|
+
"blur",
|
11
|
+
"brightness",
|
12
|
+
"border-color",
|
13
|
+
"border-radius",
|
14
|
+
"border-spacing",
|
15
|
+
"border-width",
|
16
|
+
"contrast",
|
17
|
+
"grayscale",
|
18
|
+
"hue-rotate",
|
19
|
+
"invert",
|
20
|
+
"gap",
|
21
|
+
"gradient-color-stops",
|
22
|
+
"gradient-color-stop-positions",
|
23
|
+
"inset",
|
24
|
+
"margin",
|
25
|
+
"opacity",
|
26
|
+
"padding",
|
27
|
+
"saturate",
|
28
|
+
"scale",
|
29
|
+
"sepia",
|
30
|
+
"skew",
|
31
|
+
"space",
|
32
|
+
"translate",
|
33
|
+
]
|
34
|
+
THEME_KEYS.each do |key|
|
35
|
+
const_set(key.upcase.tr("-", "_"), ->(config) { config[:theme].fetch(key, nil) })
|
36
|
+
end
|
36
37
|
|
37
|
-
VALID_THEME_IDS = Set.new(
|
38
|
-
COLORS.object_id,
|
39
|
-
SPACING.object_id,
|
40
|
-
BLUR.object_id,
|
41
|
-
BRIGHTNESS.object_id,
|
42
|
-
BORDER_COLOR.object_id,
|
43
|
-
BORDER_RADIUS.object_id,
|
44
|
-
BORDER_SPACING.object_id,
|
45
|
-
BORDER_WIDTH.object_id,
|
46
|
-
CONTRAST.object_id,
|
47
|
-
GRAYSCALE.object_id,
|
48
|
-
HUE_ROTATE.object_id,
|
49
|
-
INVERT.object_id,
|
50
|
-
GAP.object_id,
|
51
|
-
GRADIENT_COLOR_STOPS.object_id,
|
52
|
-
GRADIENT_COLOR_STOP_POSITIONS.object_id,
|
53
|
-
INSET.object_id,
|
54
|
-
MARGIN.object_id,
|
55
|
-
OPACITY.object_id,
|
56
|
-
PADDING.object_id,
|
57
|
-
SATURATE.object_id,
|
58
|
-
SCALE.object_id,
|
59
|
-
SEPIA.object_id,
|
60
|
-
SKEW.object_id,
|
61
|
-
SPACE.object_id,
|
62
|
-
TRANSLATE.object_id,
|
63
|
-
]).freeze
|
38
|
+
VALID_THEME_IDS = Set.new(THEME_KEYS.map { |theme_key| const_get(theme_key.upcase.tr("-", "_")).object_id }).freeze
|
64
39
|
|
65
40
|
OVERSCROLL = -> { ["auto", "contain", "none"] }
|
66
41
|
OVERFLOW = -> { ["auto", "hidden", "clip", "visible", "scroll"] }
|
@@ -109,6 +84,7 @@ module TailwindMerge
|
|
109
84
|
|
110
85
|
DEFAULTS = {
|
111
86
|
cache_size: 500,
|
87
|
+
ignore_empty_cache: true,
|
112
88
|
separator: ":",
|
113
89
|
theme: {
|
114
90
|
"colors" => [IS_ANY],
|
data/lib/tailwind_merge.rb
CHANGED
@@ -26,7 +26,7 @@ module TailwindMerge
|
|
26
26
|
end
|
27
27
|
|
28
28
|
@class_utils = TailwindMerge::ClassUtils.new(@config)
|
29
|
-
@cache = LruRedux::Cache.new(@config[:cache_size])
|
29
|
+
@cache = LruRedux::Cache.new(@config[:cache_size], @config[:ignore_empty_cache])
|
30
30
|
end
|
31
31
|
|
32
32
|
def merge(classes)
|
@@ -35,7 +35,7 @@ module TailwindMerge
|
|
35
35
|
end
|
36
36
|
|
37
37
|
@cache.getset(classes) do
|
38
|
-
merge_class_list(classes)
|
38
|
+
merge_class_list(classes).freeze
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
data/tailwind_merge.gemspec
CHANGED
@@ -5,21 +5,24 @@ require_relative "lib/tailwind_merge/version"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "tailwind_merge"
|
7
7
|
spec.version = TailwindMerge::VERSION
|
8
|
+
spec.summary = "Utility function to efficiently merge Tailwind CSS classes without style conflicts."
|
8
9
|
spec.authors = ["Garen J. Torikian"]
|
9
10
|
spec.email = ["gjtorikian@gmail.com"]
|
10
|
-
|
11
|
-
spec.summary = "Utility function to efficiently merge Tailwind CSS classes without style conflicts."
|
12
|
-
spec.homepage = "https://www.github.com/gjtorikian/tailwind_merge"
|
13
11
|
spec.license = "MIT"
|
14
12
|
|
15
|
-
|
16
|
-
|
13
|
+
github_root_uri = "https://github.com/gjtorikian/tailwind_merge"
|
14
|
+
spec.homepage = "#{github_root_uri}/tree/v#{spec.version}"
|
17
15
|
spec.metadata = {
|
18
|
-
"
|
16
|
+
"homepage_uri" => spec.homepage,
|
17
|
+
"source_code_uri" => spec.homepage,
|
18
|
+
"changelog_uri" => "#{github_root_uri}/blob/v#{spec.version}/CHANGELOG.md",
|
19
|
+
"bug_tracker_uri" => "#{github_root_uri}/issues",
|
20
|
+
"documentation_uri" => "https://rubydoc.info/gems/#{spec.name}/#{spec.version}",
|
21
|
+
"funding_uri" => "https://github.com/sponsors/gjtorikian",
|
19
22
|
"rubygems_mfa_required" => "true",
|
20
23
|
}
|
21
24
|
|
22
|
-
spec.
|
25
|
+
spec.required_ruby_version = [">= 3.1", "< 4.0"]
|
23
26
|
|
24
27
|
# Specify which files should be added to the gem when it is released.
|
25
28
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -32,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
32
35
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
33
36
|
spec.require_paths = ["lib"]
|
34
37
|
|
35
|
-
spec.add_dependency("
|
38
|
+
spec.add_dependency("sin_lru_redux", "~> 2.5")
|
36
39
|
|
37
40
|
spec.add_development_dependency("minitest", "~> 5.6")
|
38
41
|
spec.add_development_dependency("minitest-focus", "~> 1.1")
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tailwind_merge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen J. Torikian
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: sin_lru_redux
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.5'
|
27
27
|
force_ruby_platform: false
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: minitest
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.1'
|
56
|
-
description:
|
56
|
+
description:
|
57
57
|
email:
|
58
58
|
- gjtorikian@gmail.com
|
59
59
|
executables: []
|
@@ -74,14 +74,18 @@ files:
|
|
74
74
|
- lib/tailwind_merge/validators.rb
|
75
75
|
- lib/tailwind_merge/version.rb
|
76
76
|
- tailwind_merge.gemspec
|
77
|
-
homepage: https://
|
77
|
+
homepage: https://github.com/gjtorikian/tailwind_merge/tree/v0.15.0
|
78
78
|
licenses:
|
79
79
|
- MIT
|
80
80
|
metadata:
|
81
|
-
|
81
|
+
homepage_uri: https://github.com/gjtorikian/tailwind_merge/tree/v0.15.0
|
82
|
+
source_code_uri: https://github.com/gjtorikian/tailwind_merge/tree/v0.15.0
|
83
|
+
changelog_uri: https://github.com/gjtorikian/tailwind_merge/blob/v0.15.0/CHANGELOG.md
|
84
|
+
bug_tracker_uri: https://github.com/gjtorikian/tailwind_merge/issues
|
85
|
+
documentation_uri: https://rubydoc.info/gems/tailwind_merge/0.15.0
|
86
|
+
funding_uri: https://github.com/sponsors/gjtorikian
|
82
87
|
rubygems_mfa_required: 'true'
|
83
|
-
|
84
|
-
post_install_message:
|
88
|
+
post_install_message:
|
85
89
|
rdoc_options: []
|
86
90
|
require_paths:
|
87
91
|
- lib
|
@@ -100,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
104
|
version: '0'
|
101
105
|
requirements: []
|
102
106
|
rubygems_version: 3.4.6
|
103
|
-
signing_key:
|
107
|
+
signing_key:
|
104
108
|
specification_version: 4
|
105
109
|
summary: Utility function to efficiently merge Tailwind CSS classes without style
|
106
110
|
conflicts.
|