tailwind_merge 0.6.0 → 0.7.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: b9f76007fe9bc9eb3a01775ddfbc29e400884058373a9baeb001ccfff21ef9a7
4
- data.tar.gz: 4d97ba3be89af9227c4b2aa6f38fc8e9926886b6c33225881630356d72576f3d
3
+ metadata.gz: 14ce1b50125c55e8f6d320cb0886d221ca2b91ddaf70e3c57fdb3147416d751f
4
+ data.tar.gz: dcedb7f0b798ae164669cccfd3f2c41385c5f33c36ea289d79062c8cdd806393
5
5
  SHA512:
6
- metadata.gz: 28794887eeb6e5f73ac74768cad06e52b4d5463e5ea436661e07d61a316f1e4a41b1a6607600746153f0b5464004472c1b98982d7770ca947ea03eb714e0f141
7
- data.tar.gz: 88e8f3ab1bb6f2173a1f5aceca7416d8c1c1b4d73608ed78ed97b364f67560792996dcd72e5bcca1f81327bf8fd7aaef318aaab55011772019e9e677fa03f667
6
+ metadata.gz: a02d67ea60287416a8c1a9b2076aedf1e0864dec8c2fd36ffe69492c1eac386e99eac2b84bd035a9e2d69728bd9711d256550329015d6056708a2f836260f8f4
7
+ data.tar.gz: 94bec180c77255b7d74cfc730fffbc28869150b8d0efdb3ebef019e7a0b7e36c9552887884c72c7d1104a9dc525b93a367555dd0f122ecbb9d01aa4108df03a2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.7.0](https://github.com/gjtorikian/tailwind_merge/tree/v0.7.0) (2023-04-03)
4
+
5
+ [Full Changelog](https://github.com/gjtorikian/tailwind_merge/compare/v0.6.0...v0.7.0)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - Add postfix support [\#10](https://github.com/gjtorikian/tailwind_merge/pull/10) ([gjtorikian](https://github.com/gjtorikian))
10
+
3
11
  ## [v0.6.0](https://github.com/gjtorikian/tailwind_merge/tree/v0.6.0) (2023-03-29)
4
12
 
5
13
  [Full Changelog](https://github.com/gjtorikian/tailwind_merge/compare/v0.5.2...v0.6.0)
data/README.md CHANGED
@@ -122,6 +122,12 @@ Similarly to arbitrary properties, `tailwind_merge` does not resolve conflicts b
122
122
  @merger.merge('!right-2 !-inset-x-1') # → '!-inset-x-1'
123
123
  ```
124
124
 
125
+ ## Supports postfix modifiers
126
+
127
+ ```ts
128
+ twMerge('text-sm leading-6 text-lg/7') // → 'text-lg/7'
129
+ ```
130
+
125
131
  ### Preserves non-Tailwind classes
126
132
 
127
133
  ```ruby
@@ -51,8 +51,14 @@ module TailwindMerge
51
51
  result.nil? ? result : result[:class_group_id]
52
52
  end
53
53
 
54
- def get_conflicting_class_group_ids(class_group_id)
55
- @config[:conflicting_class_groups][class_group_id] || []
54
+ def get_conflicting_class_group_ids(class_group_id, has_postfix_modifier)
55
+ conflicts = @config[:conflicting_class_groups][class_group_id] || []
56
+
57
+ if has_postfix_modifier && @config[:conflicting_class_group_modifiers][class_group_id]
58
+ return [...conflicts, ...@config[:conflicting_class_group_modifiers][class_group_id]]
59
+ end
60
+
61
+ conflicts
56
62
  end
57
63
 
58
64
  private def create_class_map(config)
@@ -1782,6 +1782,9 @@ module TailwindMerge
1782
1782
  "scroll-px" => ["scroll-pr", "scroll-pl"],
1783
1783
  "scroll-py" => ["scroll-pt", "scroll-pb"],
1784
1784
  },
1785
+ conflicting_class_group_modifiers: {
1786
+ "font-size": ["leading"],
1787
+ },
1785
1788
  }.freeze
1786
1789
 
1787
1790
  def merge_configs(extension_config)
@@ -7,22 +7,29 @@ module TailwindMerge
7
7
  def split_modifiers(class_name, separator: nil)
8
8
  separator ||= ":"
9
9
  separator_length = separator.length
10
+ seperator_is_single_char = separator_length == 1
11
+ first_seperator_char = separator[0]
10
12
 
11
13
  modifiers = []
12
14
  bracket_depth = 0
13
15
  modifier_start = 0
16
+ postfix_modifier_position = 0
14
17
 
15
18
  class_name.each_char.with_index do |char, index|
16
- if bracket_depth.zero? && char == separator[0]
17
- if separator_length == 1 || class_name[index..(index + separator_length - 1)] == separator
19
+ if bracket_depth.zero?
20
+ if char == first_seperator_char && (seperator_is_single_char || class_name[index..(index + separator_length - 1)] == separator)
18
21
  modifiers << class_name[modifier_start..index]
19
22
  modifier_start = index + separator_length
23
+ next
24
+ elsif char == "/"
25
+ postfix_modifier_position = index
26
+ next
20
27
  end
21
28
  end
22
29
 
23
- if class_name[index] == "["
30
+ if char == "["
24
31
  bracket_depth += 1
25
- elsif class_name[index] == "]"
32
+ elsif char == "]"
26
33
  bracket_depth -= 1
27
34
  end
28
35
  end
@@ -30,8 +37,9 @@ module TailwindMerge
30
37
  base_class_name_with_important_modifier = modifiers.empty? ? class_name : class_name[modifier_start..-1]
31
38
  has_important_modifier = base_class_name_with_important_modifier.start_with?(IMPORTANT_MODIFIER)
32
39
  base_class_name = has_important_modifier ? base_class_name_with_important_modifier[1..-1] : base_class_name_with_important_modifier
40
+ maybe_postfix_modifier_position = postfix_modifier_position && postfix_modifier_position > modifier_start ? postfix_modifier_position - modifier_start : false
33
41
 
34
- [modifiers, has_important_modifier, base_class_name]
42
+ [modifiers, has_important_modifier, base_class_name, maybe_postfix_modifier_position]
35
43
  end
36
44
 
37
45
  # Sorts modifiers according to following schema:
@@ -55,9 +55,9 @@ module TailwindMerge
55
55
  }
56
56
 
57
57
  IS_LENGTH = ->(value) {
58
- numeric?(value) || \
59
- STRING_LENGTHS.include?(value) || \
60
- FRACTION_REGEX.match?(value) || \
58
+ numeric?(value) ||
59
+ STRING_LENGTHS.include?(value) ||
60
+ FRACTION_REGEX.match?(value) ||
61
61
  IS_ARBITRARY_LENGTH.call(value)
62
62
  }
63
63
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TailwindMerge
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.0"
5
5
  end
@@ -49,11 +49,31 @@ module TailwindMerge
49
49
  class_groups_in_conflict = Set.new
50
50
 
51
51
  classes.strip.split(SPLIT_CLASSES_REGEX).map do |original_class_name|
52
- modifiers, has_important_modifier, base_class_name = split_modifiers(original_class_name, separator: @config[:separator])
52
+ modifiers, has_important_modifier, base_class_name, maybe_postfix_modifier_position = split_modifiers(original_class_name, separator: @config[:separator])
53
53
 
54
- class_group_id = @class_utils.class_group_id(base_class_name)
54
+ actual_base_class_name = maybe_postfix_modifier_position ? base_class_name[0...maybe_postfix_modifier_position] : base_class_name
55
+ class_group_id = @class_utils.class_group_id(actual_base_class_name)
55
56
 
56
57
  unless class_group_id
58
+ unless maybe_postfix_modifier_position
59
+ next {
60
+ is_tailwind_class: false,
61
+ original_class_name: original_class_name,
62
+ }
63
+ end
64
+
65
+ class_group_id = @class_utils.class_group_id(base_class_name)
66
+
67
+ unless class_group_id
68
+ next {
69
+ isTailwindClass: false,
70
+ original_class_name: original_class_name,
71
+ }
72
+
73
+ end
74
+
75
+ has_postfix_modifier = false
76
+
57
77
  next {
58
78
  is_tailwind_class: false,
59
79
  original_class_name: original_class_name,
@@ -69,6 +89,7 @@ module TailwindMerge
69
89
  modifier_id: modifier_id,
70
90
  class_group_id: class_group_id,
71
91
  original_class_name: original_class_name,
92
+ has_postfix_modifier: has_postfix_modifier,
72
93
  }
73
94
  end.reverse # Last class in conflict wins, so filter conflicting classes in reverse order.
74
95
  .select do |parsed|
@@ -76,6 +97,7 @@ module TailwindMerge
76
97
 
77
98
  modifier_id = parsed[:modifier_id]
78
99
  class_group_id = parsed[:class_group_id]
100
+ has_postfix_modifier = parsed[:has_postfix_modifier]
79
101
 
80
102
  class_id = "#{modifier_id}#{class_group_id}"
81
103
 
@@ -83,7 +105,7 @@ module TailwindMerge
83
105
 
84
106
  class_groups_in_conflict.add(class_id)
85
107
 
86
- @class_utils.get_conflicting_class_group_ids(class_group_id).each do |group|
108
+ @class_utils.get_conflicting_class_group_ids(class_group_id, has_postfix_modifier).each do |group|
87
109
  class_groups_in_conflict.add("#{modifier_id}#{group}")
88
110
  end
89
111
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tailwind_merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen J. Torikian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-29 00:00:00.000000000 Z
11
+ date: 2023-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lru_redux