tailwind_merge 0.13.3 → 0.15.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.
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.