daisyui 1.3.0 → 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 +45 -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 +113 -106
  62. data/lib/daisy_ui/updated_at.rb +1 -1
  63. data/lib/daisy_ui/version.rb +1 -1
  64. metadata +18 -1
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ported from tailwind_merge 1.5.6 (https://github.com/gjtorikian/tailwind_merge)
4
+ # Copyright (c) 2022 Garen J. Torikian. MIT License, see LICENSE-tailwind_merge.txt.
5
+
6
+ module DaisyUI
7
+ module ClassMerge
8
+ module ParseClassName
9
+ TailwindClass = Struct.new(:is_external, :modifiers, :has_important_modifier, :base_class_name, :maybe_postfix_modifier_position)
10
+
11
+ IMPORTANT_MODIFIER = "!"
12
+ EMPTY_MODIFIERS = [].freeze
13
+ MODIFIER_SEPARATOR = ":"
14
+ MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length
15
+
16
+ MODIFIER_SEPARATOR_BYTE = MODIFIER_SEPARATOR.ord
17
+ POSTFIX_SEPARATOR_BYTE = "/".ord
18
+ OPEN_BRACKET_BYTE = "[".ord
19
+ CLOSE_BRACKET_BYTE = "]".ord
20
+ OPEN_PAREN_BYTE = "(".ord
21
+ CLOSE_PAREN_BYTE = ")".ord
22
+
23
+ ##
24
+ # Parse class name into parts.
25
+ #
26
+ # Inspired by `splitAtTopLevelOnly` used in Tailwind CSS
27
+ # @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
28
+ def parse_class_name(class_name, prefix: nil)
29
+ unless prefix.nil?
30
+ full_prefix = "#{prefix}#{MODIFIER_SEPARATOR}"
31
+ return parse_class_name(class_name[full_prefix.length..]) if class_name.start_with?(full_prefix)
32
+
33
+ return TailwindClass.new(
34
+ is_external: true,
35
+ modifiers: EMPTY_MODIFIERS,
36
+ has_important_modifier: false,
37
+ base_class_name: class_name,
38
+ maybe_postfix_modifier_position: nil
39
+ )
40
+
41
+ end
42
+
43
+ # Stays nil until the first modifier separator, so the common no-modifier
44
+ # class (`px-2`, `block`) never allocates an array.
45
+ modifiers = nil
46
+
47
+ bracket_depth = 0
48
+ paren_depth = 0
49
+ modifier_start = 0
50
+ postfix_modifier_position = nil
51
+
52
+ # Byte-wise scan: all separators are ASCII, so byte positions are safe
53
+ # for multibyte class names (UTF-8 continuation bytes never match ASCII).
54
+ # Positions produced here (including maybe_postfix_modifier_position)
55
+ # are byte offsets and must be consumed with String#byteslice.
56
+ index = 0
57
+ size = class_name.bytesize
58
+ while index < size
59
+ byte = class_name.getbyte(index)
60
+
61
+ if bracket_depth.zero? && paren_depth.zero?
62
+ if byte == MODIFIER_SEPARATOR_BYTE
63
+ (modifiers ||= []) << class_name.byteslice(modifier_start, index - modifier_start)
64
+ modifier_start = index + MODIFIER_SEPARATOR_LENGTH
65
+ index += 1
66
+ next
67
+ elsif byte == POSTFIX_SEPARATOR_BYTE
68
+ postfix_modifier_position = index
69
+ index += 1
70
+ next
71
+ end
72
+ end
73
+
74
+ case byte
75
+ when OPEN_BRACKET_BYTE then bracket_depth += 1
76
+ when CLOSE_BRACKET_BYTE then bracket_depth -= 1
77
+ when OPEN_PAREN_BYTE then paren_depth += 1
78
+ when CLOSE_PAREN_BYTE then paren_depth -= 1
79
+ end
80
+
81
+ index += 1
82
+ end
83
+
84
+ base_class_name_with_important_modifier = modifiers ? class_name.byteslice(modifier_start, size - modifier_start) : class_name
85
+
86
+ base_class_name, has_important_modifier = strip_important_modifier(base_class_name_with_important_modifier)
87
+
88
+ maybe_postfix_modifier_position = (postfix_modifier_position - modifier_start if postfix_modifier_position && postfix_modifier_position > modifier_start)
89
+
90
+ TailwindClass.new(
91
+ is_external: false,
92
+ modifiers: modifiers || EMPTY_MODIFIERS,
93
+ has_important_modifier:,
94
+ base_class_name: base_class_name,
95
+ maybe_postfix_modifier_position:
96
+ )
97
+ end
98
+
99
+ def strip_important_modifier(base_class_name)
100
+ return [base_class_name[0...-IMPORTANT_MODIFIER.length], true] if base_class_name.end_with?(IMPORTANT_MODIFIER)
101
+
102
+ # In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
103
+ # @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
104
+ return [base_class_name[1..], true] if base_class_name.start_with?(IMPORTANT_MODIFIER)
105
+
106
+ [base_class_name, false]
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ported from tailwind_merge 1.5.6 (https://github.com/gjtorikian/tailwind_merge)
4
+ # Copyright (c) 2022 Garen J. Torikian. MIT License, see LICENSE-tailwind_merge.txt.
5
+
6
+ module DaisyUI
7
+ module ClassMerge
8
+ module SortModifiers
9
+ # Sorts modifiers according to following schema:
10
+ # - Predefined modifiers are sorted alphabetically
11
+ # - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
12
+ def sort_modifiers(modifiers, order_sensitive_modifiers)
13
+ return modifiers if modifiers.size <= 1
14
+
15
+ sorted_modifiers = []
16
+ unsorted_modifiers = []
17
+
18
+ modifiers.each do |modifier|
19
+ is_position_sensitive = modifier.start_with?("[") || order_sensitive_modifiers.include?(modifier)
20
+
21
+ if is_position_sensitive
22
+ sorted_modifiers.concat(unsorted_modifiers.sort)
23
+ sorted_modifiers << modifier
24
+ unsorted_modifiers.clear
25
+ else
26
+ unsorted_modifiers << modifier
27
+ end
28
+ end
29
+
30
+ sorted_modifiers.concat(unsorted_modifiers.sort)
31
+
32
+ sorted_modifiers
33
+ end
34
+ end
35
+ end
36
+ end