daisyui 1.3.1 → 2.0.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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/LICENSE-tailwind_merge.txt +21 -0
  4. data/README.md +58 -0
  5. data/lib/daisy_ui/accordion.rb +32 -28
  6. data/lib/daisy_ui/alert.rb +97 -94
  7. data/lib/daisy_ui/aura.rb +37 -37
  8. data/lib/daisy_ui/avatar.rb +16 -14
  9. data/lib/daisy_ui/badge.rb +159 -156
  10. data/lib/daisy_ui/base.rb +38 -4
  11. data/lib/daisy_ui/button.rb +148 -142
  12. data/lib/daisy_ui/card.rb +57 -54
  13. data/lib/daisy_ui/carousel.rb +36 -32
  14. data/lib/daisy_ui/chat.rb +16 -15
  15. data/lib/daisy_ui/checkbox.rb +95 -93
  16. data/lib/daisy_ui/class_merge/cache.rb +40 -0
  17. data/lib/daisy_ui/class_merge/class_group_utils.rb +139 -0
  18. data/lib/daisy_ui/class_merge/configuration.rb +77 -0
  19. data/lib/daisy_ui/class_merge/daisy_groups.rb +83 -0
  20. data/lib/daisy_ui/class_merge/merger.rb +126 -0
  21. data/lib/daisy_ui/class_merge/parse_class_name.rb +110 -0
  22. data/lib/daisy_ui/class_merge/sort_modifiers.rb +36 -0
  23. data/lib/daisy_ui/class_merge/tailwind_config.rb +2505 -0
  24. data/lib/daisy_ui/class_merge/validators.rb +202 -0
  25. data/lib/daisy_ui/class_merge.rb +47 -0
  26. data/lib/daisy_ui/collapse.rb +32 -28
  27. data/lib/daisy_ui/configurable.rb +31 -3
  28. data/lib/daisy_ui/divider.rb +84 -78
  29. data/lib/daisy_ui/dock.rb +37 -35
  30. data/lib/daisy_ui/dropdown.rb +67 -65
  31. data/lib/daisy_ui/file_input.rb +95 -91
  32. data/lib/daisy_ui/footer.rb +16 -14
  33. data/lib/daisy_ui/indicator.rb +40 -36
  34. data/lib/daisy_ui/input.rb +95 -91
  35. data/lib/daisy_ui/join.rb +16 -14
  36. data/lib/daisy_ui/kbd.rb +37 -35
  37. data/lib/daisy_ui/link.rb +58 -58
  38. data/lib/daisy_ui/loading.rb +85 -81
  39. data/lib/daisy_ui/mask.rb +123 -119
  40. data/lib/daisy_ui/megamenu.rb +53 -50
  41. data/lib/daisy_ui/menu.rb +57 -53
  42. data/lib/daisy_ui/modal.rb +49 -47
  43. data/lib/daisy_ui/otp.rb +95 -93
  44. data/lib/daisy_ui/pagination.rb +16 -14
  45. data/lib/daisy_ui/progress.rb +58 -56
  46. data/lib/daisy_ui/radio.rb +95 -91
  47. data/lib/daisy_ui/range.rb +95 -91
  48. data/lib/daisy_ui/rating.rb +37 -35
  49. data/lib/daisy_ui/select.rb +95 -91
  50. data/lib/daisy_ui/stack.rb +24 -22
  51. data/lib/daisy_ui/stat.rb +16 -14
  52. data/lib/daisy_ui/status.rb +95 -91
  53. data/lib/daisy_ui/steps.rb +16 -14
  54. data/lib/daisy_ui/swap.rb +16 -14
  55. data/lib/daisy_ui/table.rb +41 -39
  56. data/lib/daisy_ui/tabs.rb +80 -77
  57. data/lib/daisy_ui/textarea.rb +95 -91
  58. data/lib/daisy_ui/timeline.rb +16 -14
  59. data/lib/daisy_ui/toast.rb +46 -42
  60. data/lib/daisy_ui/toggle.rb +95 -91
  61. data/lib/daisy_ui/tooltip.rb +111 -105
  62. data/lib/daisy_ui/updated_at.rb +1 -1
  63. data/lib/daisy_ui/version.rb +1 -1
  64. metadata +18 -1
@@ -13,162 +13,165 @@ module DaisyUI
13
13
  end
14
14
 
15
15
  register_modifiers(
16
- # Styles
17
- # "sm:badge-outline"
18
- # "@sm:badge-outline"
19
- # "md:badge-outline"
20
- # "@md:badge-outline"
21
- # "lg:badge-outline"
22
- # "@lg:badge-outline"
23
- # "xl:badge-outline"
24
- # "@xl:badge-outline"
25
- outline: "badge-outline",
26
- # "sm:badge-dash"
27
- # "@sm:badge-dash"
28
- # "md:badge-dash"
29
- # "@md:badge-dash"
30
- # "lg:badge-dash"
31
- # "@lg:badge-dash"
32
- # "xl:badge-dash"
33
- # "@xl:badge-dash"
34
- dash: "badge-dash",
35
- # "sm:badge-soft"
36
- # "@sm:badge-soft"
37
- # "md:badge-soft"
38
- # "@md:badge-soft"
39
- # "lg:badge-soft"
40
- # "@lg:badge-soft"
41
- # "xl:badge-soft"
42
- # "@xl:badge-soft"
43
- soft: "badge-soft",
44
- # "sm:badge-ghost"
45
- # "@sm:badge-ghost"
46
- # "md:badge-ghost"
47
- # "@md:badge-ghost"
48
- # "lg:badge-ghost"
49
- # "@lg:badge-ghost"
50
- # "xl:badge-ghost"
51
- # "@xl:badge-ghost"
52
- ghost: "badge-ghost",
53
- # Colors
54
- # "sm:badge-neutral"
55
- # "@sm:badge-neutral"
56
- # "md:badge-neutral"
57
- # "@md:badge-neutral"
58
- # "lg:badge-neutral"
59
- # "@lg:badge-neutral"
60
- # "xl:badge-neutral"
61
- # "@xl:badge-neutral"
62
- neutral: "badge-neutral",
63
- # "sm:badge-primary"
64
- # "@sm:badge-primary"
65
- # "md:badge-primary"
66
- # "@md:badge-primary"
67
- # "lg:badge-primary"
68
- # "@lg:badge-primary"
69
- # "xl:badge-primary"
70
- # "@xl:badge-primary"
71
- primary: "badge-primary",
72
- # "sm:badge-secondary"
73
- # "@sm:badge-secondary"
74
- # "md:badge-secondary"
75
- # "@md:badge-secondary"
76
- # "lg:badge-secondary"
77
- # "@lg:badge-secondary"
78
- # "xl:badge-secondary"
79
- # "@xl:badge-secondary"
80
- secondary: "badge-secondary",
81
- # "sm:badge-accent"
82
- # "@sm:badge-accent"
83
- # "md:badge-accent"
84
- # "@md:badge-accent"
85
- # "lg:badge-accent"
86
- # "@lg:badge-accent"
87
- # "xl:badge-accent"
88
- # "@xl:badge-accent"
89
- accent: "badge-accent",
90
- # "sm:badge-info"
91
- # "@sm:badge-info"
92
- # "md:badge-info"
93
- # "@md:badge-info"
94
- # "lg:badge-info"
95
- # "@lg:badge-info"
96
- # "xl:badge-info"
97
- # "@xl:badge-info"
98
- info: "badge-info",
99
- # "sm:badge-success"
100
- # "@sm:badge-success"
101
- # "md:badge-success"
102
- # "@md:badge-success"
103
- # "lg:badge-success"
104
- # "@lg:badge-success"
105
- # "xl:badge-success"
106
- # "@xl:badge-success"
107
- success: "badge-success",
108
- # "sm:badge-warning"
109
- # "@sm:badge-warning"
110
- # "md:badge-warning"
111
- # "@md:badge-warning"
112
- # "lg:badge-warning"
113
- # "@lg:badge-warning"
114
- # "xl:badge-warning"
115
- # "@xl:badge-warning"
116
- warning: "badge-warning",
117
- # "sm:badge-error"
118
- # "@sm:badge-error"
119
- # "md:badge-error"
120
- # "@md:badge-error"
121
- # "lg:badge-error"
122
- # "@lg:badge-error"
123
- # "xl:badge-error"
124
- # "@xl:badge-error"
125
- error: "badge-error",
126
- # Sizes
127
- # "sm:badge-xs"
128
- # "@sm:badge-xs"
129
- # "md:badge-xs"
130
- # "@md:badge-xs"
131
- # "lg:badge-xs"
132
- # "@lg:badge-xs"
133
- # "xl:badge-xs"
134
- # "@xl:badge-xs"
135
- xs: "badge-xs",
136
- # "sm:badge-sm"
137
- # "@sm:badge-sm"
138
- # "md:badge-sm"
139
- # "@md:badge-sm"
140
- # "lg:badge-sm"
141
- # "@lg:badge-sm"
142
- # "xl:badge-sm"
143
- # "@xl:badge-sm"
144
- sm: "badge-sm",
145
- # "sm:badge-md"
146
- # "@sm:badge-md"
147
- # "md:badge-md"
148
- # "@md:badge-md"
149
- # "lg:badge-md"
150
- # "@lg:badge-md"
151
- # "xl:badge-md"
152
- # "@xl:badge-md"
153
- md: "badge-md",
154
- # "sm:badge-lg"
155
- # "@sm:badge-lg"
156
- # "md:badge-lg"
157
- # "@md:badge-lg"
158
- # "lg:badge-lg"
159
- # "@lg:badge-lg"
160
- # "xl:badge-lg"
161
- # "@xl:badge-lg"
162
- lg: "badge-lg",
163
- # "sm:badge-xl"
164
- # "@sm:badge-xl"
165
- # "md:badge-xl"
166
- # "@md:badge-xl"
167
- # "lg:badge-xl"
168
- # "@lg:badge-xl"
169
- # "xl:badge-xl"
170
- # "@xl:badge-xl"
171
- xl: "badge-xl"
16
+ style: {
17
+ # "sm:badge-outline"
18
+ # "@sm:badge-outline"
19
+ # "md:badge-outline"
20
+ # "@md:badge-outline"
21
+ # "lg:badge-outline"
22
+ # "@lg:badge-outline"
23
+ # "xl:badge-outline"
24
+ # "@xl:badge-outline"
25
+ outline: "badge-outline",
26
+ # "sm:badge-dash"
27
+ # "@sm:badge-dash"
28
+ # "md:badge-dash"
29
+ # "@md:badge-dash"
30
+ # "lg:badge-dash"
31
+ # "@lg:badge-dash"
32
+ # "xl:badge-dash"
33
+ # "@xl:badge-dash"
34
+ dash: "badge-dash",
35
+ # "sm:badge-soft"
36
+ # "@sm:badge-soft"
37
+ # "md:badge-soft"
38
+ # "@md:badge-soft"
39
+ # "lg:badge-soft"
40
+ # "@lg:badge-soft"
41
+ # "xl:badge-soft"
42
+ # "@xl:badge-soft"
43
+ soft: "badge-soft",
44
+ # "sm:badge-ghost"
45
+ # "@sm:badge-ghost"
46
+ # "md:badge-ghost"
47
+ # "@md:badge-ghost"
48
+ # "lg:badge-ghost"
49
+ # "@lg:badge-ghost"
50
+ # "xl:badge-ghost"
51
+ # "@xl:badge-ghost"
52
+ ghost: "badge-ghost"
53
+ },
54
+ color: {
55
+ # "sm:badge-neutral"
56
+ # "@sm:badge-neutral"
57
+ # "md:badge-neutral"
58
+ # "@md:badge-neutral"
59
+ # "lg:badge-neutral"
60
+ # "@lg:badge-neutral"
61
+ # "xl:badge-neutral"
62
+ # "@xl:badge-neutral"
63
+ neutral: "badge-neutral",
64
+ # "sm:badge-primary"
65
+ # "@sm:badge-primary"
66
+ # "md:badge-primary"
67
+ # "@md:badge-primary"
68
+ # "lg:badge-primary"
69
+ # "@lg:badge-primary"
70
+ # "xl:badge-primary"
71
+ # "@xl:badge-primary"
72
+ primary: "badge-primary",
73
+ # "sm:badge-secondary"
74
+ # "@sm:badge-secondary"
75
+ # "md:badge-secondary"
76
+ # "@md:badge-secondary"
77
+ # "lg:badge-secondary"
78
+ # "@lg:badge-secondary"
79
+ # "xl:badge-secondary"
80
+ # "@xl:badge-secondary"
81
+ secondary: "badge-secondary",
82
+ # "sm:badge-accent"
83
+ # "@sm:badge-accent"
84
+ # "md:badge-accent"
85
+ # "@md:badge-accent"
86
+ # "lg:badge-accent"
87
+ # "@lg:badge-accent"
88
+ # "xl:badge-accent"
89
+ # "@xl:badge-accent"
90
+ accent: "badge-accent",
91
+ # "sm:badge-info"
92
+ # "@sm:badge-info"
93
+ # "md:badge-info"
94
+ # "@md:badge-info"
95
+ # "lg:badge-info"
96
+ # "@lg:badge-info"
97
+ # "xl:badge-info"
98
+ # "@xl:badge-info"
99
+ info: "badge-info",
100
+ # "sm:badge-success"
101
+ # "@sm:badge-success"
102
+ # "md:badge-success"
103
+ # "@md:badge-success"
104
+ # "lg:badge-success"
105
+ # "@lg:badge-success"
106
+ # "xl:badge-success"
107
+ # "@xl:badge-success"
108
+ success: "badge-success",
109
+ # "sm:badge-warning"
110
+ # "@sm:badge-warning"
111
+ # "md:badge-warning"
112
+ # "@md:badge-warning"
113
+ # "lg:badge-warning"
114
+ # "@lg:badge-warning"
115
+ # "xl:badge-warning"
116
+ # "@xl:badge-warning"
117
+ warning: "badge-warning",
118
+ # "sm:badge-error"
119
+ # "@sm:badge-error"
120
+ # "md:badge-error"
121
+ # "@md:badge-error"
122
+ # "lg:badge-error"
123
+ # "@lg:badge-error"
124
+ # "xl:badge-error"
125
+ # "@xl:badge-error"
126
+ error: "badge-error"
127
+ },
128
+ size: {
129
+ # "sm:badge-xs"
130
+ # "@sm:badge-xs"
131
+ # "md:badge-xs"
132
+ # "@md:badge-xs"
133
+ # "lg:badge-xs"
134
+ # "@lg:badge-xs"
135
+ # "xl:badge-xs"
136
+ # "@xl:badge-xs"
137
+ xs: "badge-xs",
138
+ # "sm:badge-sm"
139
+ # "@sm:badge-sm"
140
+ # "md:badge-sm"
141
+ # "@md:badge-sm"
142
+ # "lg:badge-sm"
143
+ # "@lg:badge-sm"
144
+ # "xl:badge-sm"
145
+ # "@xl:badge-sm"
146
+ sm: "badge-sm",
147
+ # "sm:badge-md"
148
+ # "@sm:badge-md"
149
+ # "md:badge-md"
150
+ # "@md:badge-md"
151
+ # "lg:badge-md"
152
+ # "@lg:badge-md"
153
+ # "xl:badge-md"
154
+ # "@xl:badge-md"
155
+ md: "badge-md",
156
+ # "sm:badge-lg"
157
+ # "@sm:badge-lg"
158
+ # "md:badge-lg"
159
+ # "@md:badge-lg"
160
+ # "lg:badge-lg"
161
+ # "@lg:badge-lg"
162
+ # "xl:badge-lg"
163
+ # "@xl:badge-lg"
164
+ lg: "badge-lg",
165
+ # "sm:badge-xl"
166
+ # "@sm:badge-xl"
167
+ # "md:badge-xl"
168
+ # "@md:badge-xl"
169
+ # "lg:badge-xl"
170
+ # "@lg:badge-xl"
171
+ # "xl:badge-xl"
172
+ # "@xl:badge-xl"
173
+ xl: "badge-xl"
174
+ }
172
175
  )
173
176
  end
174
177
  end
data/lib/daisy_ui/base.rb CHANGED
@@ -119,9 +119,15 @@ module DaisyUI
119
119
  }.freeze
120
120
 
121
121
  class << self
122
- attr_writer :component_class
122
+ attr_writer :component_class, :modifier_groups
123
123
  attr_accessor :modifiers
124
124
 
125
+ # { group => [modifier, ...] }: modifiers in one group are alternatives
126
+ # (sizes, colors, ...), so ClassMerge keeps only the last one.
127
+ def modifier_groups
128
+ @modifier_groups ||= {}
129
+ end
130
+
125
131
  def component_class
126
132
  return @component_class if instance_variable_defined?(:@component_class)
127
133
 
@@ -138,14 +144,37 @@ module DaisyUI
138
144
  def inherited(subclass)
139
145
  super
140
146
  subclass.modifiers = (modifiers || {}).dup
147
+ subclass.modifier_groups = modifier_groups.transform_values(&:dup)
141
148
  # Inherit component_class if it was explicitly set
142
149
  return unless instance_variable_defined?(:@component_class)
143
150
 
144
151
  subclass.component_class = @component_class
145
152
  end
146
153
 
154
+ # Registers modifiers. A Hash value declares a group of alternatives:
155
+ #
156
+ # register_modifiers(
157
+ # size: { sm: "btn-sm", lg: "btn-lg" }, # btn-sm btn-lg merges to btn-lg
158
+ # wide: "btn-wide" # ungrouped, never conflicts
159
+ # )
147
160
  def register_modifiers(mods)
148
- self.modifiers = (modifiers || {}).merge(mods)
161
+ flat = {}
162
+ mods.each do |key, value|
163
+ if value.is_a?(Hash)
164
+ flat.merge!(value)
165
+ else
166
+ flat[key] = value
167
+ end
168
+ end
169
+
170
+ modifier_groups.each_value { |members| members.delete_if { |member| flat.key?(member) } }
171
+ mods.each do |group, value|
172
+ (modifier_groups[group] ||= []).concat(value.keys) if value.is_a?(Hash)
173
+ end
174
+ modifier_groups.delete_if { |_group, members| members.empty? }
175
+
176
+ self.modifiers = (modifiers || {}).merge(flat)
177
+ ClassMerge.reset!
149
178
  end
150
179
  end
151
180
 
@@ -196,9 +225,14 @@ module DaisyUI
196
225
  options.dup.merge(id: id).compact
197
226
  end
198
227
 
199
- # Simple defaults - easy to override
228
+ # Later classes win over earlier conflicting ones (see DaisyUI::ClassMerge),
229
+ # unless `DaisyUI.configure { |c| c.class_merge.enabled = false }`.
200
230
  def merge_classes(*parts)
201
- result = parts.compact.join(" ")
231
+ result = if DaisyUI.configuration.class_merge.enabled
232
+ ClassMerge.merge(*parts)
233
+ else
234
+ parts.compact.join(" ")
235
+ end
202
236
  result.empty? ? nil : result
203
237
  end
204
238