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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9839900b581be86f928af66f7b081bfe34276c14924fa15eaffd7fccd5d8861e
4
- data.tar.gz: 122d28edd580fcc3b2ab8b3c8be7853e65828e441e541286fb2c30c78cc57c30
3
+ metadata.gz: d9e79ce87f36904f2dd66beecff8d32e83b97025d729f6c324f14da53aca7c8e
4
+ data.tar.gz: 6ca2a49f5f9039028a9f6677bca5ec2f8765c52887680dd41c47449fe1770f28
5
5
  SHA512:
6
- metadata.gz: 854d6c975bbfbf542fffbe0f40d71deef75c1a82aa7f86b9da0762f830bb1f169c7501a7d269321ec9f316e06a31ee330627845261b441c4367bff32f27e73d2
7
- data.tar.gz: 34738382fe57ed955c7f11d915cfb51567f7e6b308cecb8e0c7377e8774cfd1252eb86a2e4d484d0144aa2099ab2dbdf71a0971fc9491271d9a1cc932e411da0
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
- # → 'hover:bg-dark-red p-3 bg-[#B91C1C]'
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
- # → 'hover:bg-dark-red p-3 bg-[#B91C1C]'
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('p-5 p-2 p-4') # → 'p-4'
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('p-3 px-5') # → 'p-3 px-5'
77
- @merger.merge('inset-x-4 right-4') # → 'inset-x-4 right-4'
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('inset-x-px -inset-1') # → '-inset-1'
84
- @merger.merge('bottom-auto inset-y-6') # → 'inset-y-6'
85
- @merger.merge('inline block') # → 'block'
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('p-2 hover:p-4') # → 'p-2 hover:p-4'
92
- @merger.merge('hover:p-2 hover:p-4') # → 'hover:p-4'
93
- @merger.merge('hover:focus:p-2 focus:hover:p-4') # → 'focus:hover:p-4'
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('bg-black bg-[color:var(--mystery-var)]') # → 'bg-[color:var(--mystery-var)]'
102
- @merger.merge('grid-cols-[1fr,auto] grid-cols-2') # → 'grid-cols-2'
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('[mask-type:luminance] [mask-type:alpha]') # → '[mask-type:alpha]'
116
- @merger.merge('[--scroll-offset:56px] lg:[--scroll-offset:44px]') # → '[--scroll-offset:56px] lg:[--scroll-offset:44px]'
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('[padding:1rem] p-8') # → '[padding:1rem] p-8'
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('[&:nth-child(3)]:py-0 [&:nth-child(3)]:py-4') # → '[&:nth-child(3)]:py-4'
128
- @merger.merge('dark:hover:[&:nth-child(3)]:py-0 hover:dark:[&:nth-child(3)]:py-4') # → 'hover:dark:[&:nth-child(3)]:py-4'
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('[&:focus]:ring focus:ring-4') # → '[&:focus]:ring focus:ring-4'
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('!p-3 !p-4 p-5') # → '!p-4 p-5'
142
- @merger.merge('!right-2 !-inset-x-1') # → '!-inset-x-1'
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"); // → '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('p-5 p-2 my-non-tailwind-class p-4') # → 'my-non-tailwind-class p-4'
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('text-red text-secret-sauce') # → 'text-secret-sauce'
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
- # ↓ *Optional* Define how many values should be stored in cache.
193
- cache_size: 500,
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
- },
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 = ['static', 'fixed', 'absolute', 'relative', 'sticky']
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('static sticky relative') # → 'relative'
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: ['auto', 'hidden', 'visible', 'scroll'] }]
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: ['current', IS_ARBITRARY_VALUE] }]
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 (`''`) 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.
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: ['', 'none'] }]
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
- theme: {
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
- FROM_THEME = ->(config, key) {
8
- config[:theme].fetch(key, 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
- GRADIENT_COLOR_STOP_POSITIONS = ->(config) { FROM_THEME.call(config, "gradient-color-stop-positions") }
26
- INSET = ->(config) { FROM_THEME.call(config, "inset") }
27
- MARGIN = ->(config) { FROM_THEME.call(config, "margin") }
28
- OPACITY = ->(config) { FROM_THEME.call(config, "opacity") }
29
- PADDING = ->(config) { FROM_THEME.call(config, "padding") }
30
- SATURATE = ->(config) { FROM_THEME.call(config, "saturate") }
31
- SCALE = ->(config) { FROM_THEME.call(config, "scale") }
32
- SEPIA = ->(config) { FROM_THEME.call(config, "sepia") }
33
- SKEW = ->(config) { FROM_THEME.call(config, "skew") }
34
- SPACE = ->(config) { FROM_THEME.call(config, "space") }
35
- TRANSLATE = ->(config) { FROM_THEME.call(config, "translate") }
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],
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TailwindMerge
4
- VERSION = "0.13.3"
4
+ VERSION = "0.15.0"
5
5
  end
@@ -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
 
@@ -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
- spec.required_ruby_version = [">= 3.1", "< 4.0"]
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
- "funding_uri" => "https://github.com/sponsors/gjtorikian/",
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.metadata["homepage_uri"] = spec.homepage
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("lru_redux", "~> 1.1")
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.13.3
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: 2024-11-25 00:00:00.000000000 Z
11
+ date: 2025-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: lru_redux
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: '1.1'
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: '1.1'
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://www.github.com/gjtorikian/tailwind_merge
77
+ homepage: https://github.com/gjtorikian/tailwind_merge/tree/v0.15.0
78
78
  licenses:
79
79
  - MIT
80
80
  metadata:
81
- funding_uri: https://github.com/sponsors/gjtorikian/
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
- homepage_uri: https://www.github.com/gjtorikian/tailwind_merge
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.