protos 0.1.2 → 0.2.1

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: d640442007a4c04a5706286fb3073495ba0bcea036f543c112865d4b8f96646f
4
- data.tar.gz: 03ee33c002aee6e033ecebda12bab9db1fe74ac2d989213da013a96e79598ceb
3
+ metadata.gz: c5001f5f332c249597cb0f0c40cb8ff83429d7843db7c2f3f6cfc3b3ad6e9b50
4
+ data.tar.gz: 4e0426a89a66cd600cafe5411b02f6b3c5088dcc12bf64148d238bc542878459
5
5
  SHA512:
6
- metadata.gz: 496fc272a6606ab50281cab0cc434bd8c8e8607b6efa976ce2a671b9fdc2ed818c19d41b97c0d9831a835473d37e1846d56ffa0d85791c35d698dedd2521400b
7
- data.tar.gz: 18a8d1f2f496c47a85a41b84a54c108a889d954c9bead99b1547819b813538d9c8d124ca3e4b4f94bb8ac05ca3121cd56adaf63e79e132c59656bea31473190d
6
+ metadata.gz: eab1e457a004e0501c698f22a3c1aefb389a28a7970f864762320d4a4628e3b502d4a70080f05cdafc112d4dedd3d8a79637428ecef2194ccdf98d93111f2312
7
+ data.tar.gz: 3b1325007d6ad4c99bc478213aebf31bc03463308f591de7051d5542a95f1d9fd76d176d8e2a6d1396887b7f997e8bb19f14bde22d8544036144d2633317b98b
data/CHANGELOG.md CHANGED
@@ -3,3 +3,9 @@
3
3
  ## [0.1.0] - 2024-03-01
4
4
 
5
5
  - Initial release
6
+
7
+ ## [0.2.0] - 2024-03-06
8
+
9
+ - Chose to move away from daisyUI dropdown defaults as they have problems
10
+ displaying properly in too many situations
11
+ - Opted for using a protos-stimulus controller that uses tippy.js
data/README.md CHANGED
@@ -4,6 +4,19 @@ A UI component library for [Phlex](https://www.phlex.fun/) using
4
4
  [tailwindcss](https://tailwindcss.com/) and
5
5
  [daisyUI](https://daisyui.com/).
6
6
 
7
+ You can see a full list of the components at
8
+ [https://protos.inhouse.work/](https://protos.inhouse.work/).
9
+
10
+ - Tailwindcss classes are merged using
11
+ [tailwind\_merge](https://github.com/gjtorikian/tailwind_merge).
12
+ - Uses [tippy.js](https://atomiks.github.io/tippyjs/v6/getting-started/) for
13
+ dropdowns, combobox, and popovers
14
+
15
+ Other Phlex based UI libraries worth checking out:
16
+
17
+ - [PhlexUI](https://phlexui.com/)
18
+ - [ZestUI](https://zestui.com/)
19
+
7
20
  This library avoids re-making Protos components for extremely simple daisyui
8
21
  components such as:
9
22
 
@@ -11,7 +11,7 @@ module Protos
11
11
 
12
12
  def theme
13
13
  {
14
- container: tokens("flex", "gap-xs")
14
+ container: tokens("flex", "gap-xs", "items-center")
15
15
  }
16
16
  end
17
17
  end
@@ -14,20 +14,20 @@ module Protos
14
14
  div(**attrs, &block)
15
15
  end
16
16
 
17
- def image(...)
18
- Image.new(...)
19
- end
20
-
21
- def header(...)
22
- Header.new(...)
17
+ def content(...)
18
+ Content.new(...)
23
19
  end
24
20
 
25
21
  def footer(...)
26
22
  Footer.new(...)
27
23
  end
28
24
 
29
- def content(...)
30
- Content.new(...)
25
+ def header(...)
26
+ Header.new(...)
27
+ end
28
+
29
+ def image(...)
30
+ Image.new(...)
31
31
  end
32
32
 
33
33
  private
@@ -1,14 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Protos
4
- class Combobox < Component
5
- def template
6
- div(**attrs) do
7
- render Popover.new do
8
- yield if block_given?
9
- end
10
- end
11
- end
4
+ class Combobox < Popover
5
+ option :trigger,
6
+ default: -> { :click },
7
+ reader: false,
8
+ type: TriggerTypes | Types::Array.of(TriggerTypes)
12
9
 
13
10
  def trigger(...)
14
11
  Popover::Trigger.new(...)
@@ -46,7 +43,10 @@ module Protos
46
43
 
47
44
  def default_attrs
48
45
  {
49
- data: { controller: "protos--command" }
46
+ data: {
47
+ controller: "protos--popover",
48
+ "protos--popover-options-value": JSON.generate(options)
49
+ }
50
50
  }
51
51
  end
52
52
  end
@@ -9,6 +9,12 @@ module Protos
9
9
 
10
10
  private
11
11
 
12
+ def default_attrs
13
+ {
14
+ data: { controller: "protos--command" }
15
+ }
16
+ end
17
+
12
18
  def theme
13
19
  {
14
20
  container: tokens("menu")
@@ -42,7 +42,7 @@ module Protos
42
42
 
43
43
  def default_attrs
44
44
  {
45
- data: { controller: "protos--command protos--modal" }
45
+ data: { controller: "protos--modal" }
46
46
  }
47
47
  end
48
48
  end
@@ -2,9 +2,11 @@
2
2
 
3
3
  module Protos
4
4
  class Dropdown
5
- class Menu < Component
5
+ class Menu < Popover::Content
6
6
  def template(&block)
7
- ul(**attrs, &block)
7
+ template_tag(**template_attrs) do
8
+ ul(**attrs, &block)
9
+ end
8
10
  end
9
11
 
10
12
  private
@@ -2,10 +2,7 @@
2
2
 
3
3
  module Protos
4
4
  class Dropdown
5
- class Trigger < Component
6
- def template(&block)
7
- summary(**attrs, &block)
8
- end
5
+ class Trigger < Popover::Trigger
9
6
  end
10
7
  end
11
8
  end
@@ -1,25 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Protos
4
- class Dropdown < Component
5
- PositionTypes = Types::Coercible::Symbol.enum(
6
- :top,
7
- :bottom,
8
- :left,
9
- :right,
10
- :start,
11
- :end
12
- )
13
-
4
+ class Dropdown < Popover
14
5
  option :position,
15
6
  type: PositionTypes,
16
7
  default: -> { :bottom },
17
8
  reader: false
18
- option :hover, type: Types::Bool, default: -> { false }
19
-
20
- def template(&block)
21
- details(**attrs, &block)
22
- end
9
+ option :trigger,
10
+ default: -> { :click },
11
+ reader: false,
12
+ type: TriggerTypes | Types::Array.of(TriggerTypes)
23
13
 
24
14
  def item(...)
25
15
  Item.new(...)
@@ -32,28 +22,5 @@ module Protos
32
22
  def trigger(...)
33
23
  Trigger.new(...)
34
24
  end
35
-
36
- private
37
-
38
- def position
39
- {
40
- bottom: "dropdown-bottom",
41
- top: "dropdown-top",
42
- left: "dropdown-left",
43
- right: "dropdown-right",
44
- end: "dropdown-end",
45
- start: "dropdown-start"
46
- }.fetch(@position)
47
- end
48
-
49
- def theme
50
- {
51
- container: tokens(
52
- "dropdown",
53
- position,
54
- hover: "dropdown-hover"
55
- )
56
- }
57
- end
58
25
  end
59
26
  end
@@ -4,14 +4,18 @@ module Protos
4
4
  class Popover
5
5
  class Content < Component
6
6
  def template(&block)
7
- div(**attrs, &block)
7
+ template_tag(**template_attrs) do
8
+ div(**attrs, &block)
9
+ end
8
10
  end
9
11
 
10
12
  private
11
13
 
12
- def theme
14
+ def template_attrs
13
15
  {
14
- container: tokens("dropdown-content", "z-10")
16
+ data: {
17
+ "protos--popover-target": "template"
18
+ }
15
19
  }
16
20
  end
17
21
  end
@@ -4,7 +4,16 @@ module Protos
4
4
  class Popover
5
5
  class Trigger < Component
6
6
  def template(&block)
7
- summary(**attrs, &block)
7
+ div(**attrs, &block)
8
+ end
9
+
10
+ private
11
+
12
+ def default_attrs
13
+ {
14
+ data: { "protos--popover-target": "trigger" },
15
+ tabindex: 0
16
+ }
8
17
  end
9
18
  end
10
19
  end
@@ -7,21 +7,74 @@ module Protos
7
7
 
8
8
  PositionTypes = Types::Coercible::Symbol.enum(
9
9
  :top,
10
+ :top_start,
11
+ :top_end,
12
+ :right,
13
+ :right_start,
14
+ :right_end,
10
15
  :bottom,
16
+ :bottom_start,
17
+ :bottom_end,
11
18
  :left,
12
- :right,
13
- :start,
14
- :end
19
+ :left_start,
20
+ :left_end
21
+ )
22
+
23
+ AnimationTypes = Types::Coercible::Symbol.enum(
24
+ :fade,
25
+ :shift_away,
26
+ :shift_away_subtle,
27
+ :shift_away_extreme,
28
+ :shift_towards,
29
+ :shift_towards_subtle,
30
+ :shift_towards_extreme,
31
+ :scale,
32
+ :scale_subtle,
33
+ :scale_extreme,
34
+ :perspective,
35
+ :perspective_subtle,
36
+ :perspective_extreme
37
+ )
38
+
39
+ TriggerTypes = Types::Coercible::Symbol.enum(
40
+ :focus,
41
+ :mouseenter,
42
+ :click,
43
+ :focusin,
44
+ :manual
15
45
  )
16
46
 
17
47
  option :position,
18
48
  type: PositionTypes,
19
- default: -> { :bottom },
49
+ default: -> { :top },
50
+ reader: false
51
+ option :animation,
52
+ type: AnimationTypes,
53
+ default: -> { :fade },
20
54
  reader: false
21
- option :hover, type: Types::Bool, default: -> { false }
55
+ option :duration,
56
+ type: Types::Integer | Types::Array.of(Types::Integer),
57
+ default: -> { [300, 250] },
58
+ reader: false
59
+ option :hide_on_click,
60
+ type: Types::Bool | Types.Value(:toggle),
61
+ default: -> { true },
62
+ reader: false
63
+ option :z_index,
64
+ type: Types::Integer,
65
+ default: -> { 9999 },
66
+ reader: false
67
+ option :options,
68
+ default: -> { {} },
69
+ reader: false,
70
+ type: Types::Hash
71
+ option :trigger,
72
+ default: -> { %i[mouseenter focus] },
73
+ reader: false,
74
+ type: TriggerTypes | Types::Array.of(TriggerTypes)
22
75
 
23
76
  def template(&block)
24
- details(**attrs, &block)
77
+ div(**attrs, &block)
25
78
  end
26
79
 
27
80
  def content(...)
@@ -34,20 +87,27 @@ module Protos
34
87
 
35
88
  private
36
89
 
37
- def position
38
- {
39
- bottom: "dropdown-bottom",
40
- top: "dropdown-top",
41
- left: "dropdown-left",
42
- right: "dropdown-right",
43
- end: "dropdown-end",
44
- start: "dropdown-start"
45
- }.fetch(@position)
90
+ def dasherize(string)
91
+ string.to_s.tr("_", "-")
92
+ end
93
+
94
+ def options
95
+ opts = {}
96
+ opts[:animation] = dasherize(@animation)
97
+ opts[:placement] = dasherize(@position)
98
+ opts[:duration] = @duration
99
+ opts[:hideOnClick] = @hide_on_click
100
+ opts[:zIndex] = @z_index
101
+ opts[:trigger] = Array(@trigger).flatten.map(&:to_s).join(" ")
102
+ opts.merge(@options)
46
103
  end
47
104
 
48
- def theme
105
+ def default_attrs
49
106
  {
50
- container: tokens("dropdown", position)
107
+ data: {
108
+ controller: "protos--popover",
109
+ "protos--popover-options-value": JSON.generate(options)
110
+ }
51
111
  }
52
112
  end
53
113
  end
data/lib/protos/stats.rb CHANGED
@@ -6,6 +6,30 @@ module Protos
6
6
  div(**attrs, &block)
7
7
  end
8
8
 
9
+ def actions(...)
10
+ Actions.new(...)
11
+ end
12
+
13
+ def description(...)
14
+ Description.new(...)
15
+ end
16
+
17
+ def figure(...)
18
+ Figure.new(...)
19
+ end
20
+
21
+ def stat(...)
22
+ Stat.new(...)
23
+ end
24
+
25
+ def title(...)
26
+ Title.new(...)
27
+ end
28
+
29
+ def value(...)
30
+ Value.new(...)
31
+ end
32
+
9
33
  private
10
34
 
11
35
  def theme
data/lib/protos/swap.rb CHANGED
@@ -4,7 +4,7 @@ module Protos
4
4
  class Swap < Component
5
5
  def template
6
6
  label(**attrs) do
7
- input(type: :checkbox)
7
+ input(type: :checkbox, class: css[:input])
8
8
  yield if block_given?
9
9
  end
10
10
  end
@@ -21,7 +21,8 @@ module Protos
21
21
 
22
22
  def theme
23
23
  {
24
- container: tokens("swap")
24
+ container: tokens("swap"),
25
+ input: tokens("hidden")
25
26
  }
26
27
  end
27
28
  end
data/lib/protos/table.rb CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  module Protos
4
4
  class Table < Component
5
+ option :pin_rows, default: -> { false }, type: Types::Bool
6
+ option :pin_columns, default: -> { false }, type: Types::Bool
7
+ option :striped, default: -> { false }, type: Types::Bool
8
+ option :size,
9
+ default: -> { :md },
10
+ reader: false,
11
+ type: Types::Coercible::Symbol.enum(
12
+ :xs,
13
+ :sm,
14
+ :md,
15
+ :lg
16
+ )
17
+
5
18
  def template(&block)
6
19
  div(**attrs) do
7
20
  table(class: css[:table], &block)
@@ -38,10 +51,25 @@ module Protos
38
51
 
39
52
  private
40
53
 
54
+ def size
55
+ {
56
+ xs: "table-xs",
57
+ sm: "table-sm",
58
+ md: "table-md",
59
+ lg: "table-lg"
60
+ }.fetch(@size)
61
+ end
62
+
41
63
  def theme
42
64
  {
43
65
  container: tokens("w-full", "overflow-x-auto"),
44
- table: tokens("table")
66
+ table: tokens(
67
+ "table",
68
+ size,
69
+ pin_rows: "table-pin-rows",
70
+ pin_columns: "table-pin-columns",
71
+ striped: "table-striped"
72
+ )
45
73
  }
46
74
  end
47
75
  end
@@ -5,8 +5,8 @@ module Protos
5
5
  class Tab < Component
6
6
  param :id
7
7
  option :label
8
- option :active, default: false
9
- option :disabled, default: false
8
+ option :active, default: -> { false }
9
+ option :disabled, default: -> { false }
10
10
 
11
11
  def template(&block)
12
12
  input(
data/lib/protos/tabs.rb CHANGED
@@ -3,23 +3,23 @@
3
3
  module Protos
4
4
  class Tabs < Component
5
5
  option :type,
6
+ default: -> { :default },
7
+ reader: false,
6
8
  type: Types::Coercible::Symbol.enum(
7
9
  :default,
8
10
  :boxed,
9
11
  :bordered,
10
12
  :lifted
11
- ),
12
- default: -> { :default },
13
- reader: false
13
+ )
14
14
  option :size,
15
+ default: -> { :md },
16
+ reader: false,
15
17
  type: Types::Coercible::Symbol.enum(
16
18
  :xs,
17
19
  :sm,
18
20
  :md,
19
21
  :lg
20
- ),
21
- default: -> { :md },
22
- reader: false
22
+ )
23
23
 
24
24
  def template(&block)
25
25
  div(**attrs, &block)
data/lib/protos/theme.rb CHANGED
@@ -15,27 +15,35 @@ module Protos
15
15
  end
16
16
 
17
17
  def add(key, value)
18
- current_tokens = parse(@theme.fetch(key, ""))
19
- new_tokens = parse(value)
20
- tokens = current_tokens + new_tokens
21
-
22
- @theme[key] = tokens.to_s
18
+ TokenList.new
19
+ .add(@theme.fetch(key, ""))
20
+ .add(value)
21
+ .to_s
22
+ .tap do |tokens|
23
+ @theme[key] = tokens
24
+ end
23
25
  end
24
26
 
25
27
  def remove(key, value)
26
- current_tokens = parse(@theme.fetch(key, ""))
27
- removable_tokens = parse(value)
28
- tokens = current_tokens - removable_tokens
29
-
30
- @theme[key] = tokens.to_s
28
+ TokenList.new
29
+ .add(@theme.fetch(key, ""))
30
+ .remove(value)
31
+ .to_s
32
+ .tap do |tokens|
33
+ @theme[key] = tokens
34
+ end
31
35
  end
32
36
 
33
37
  def set(key, value)
34
38
  if value.is_a?(Hash)
35
39
  @theme[key] = value
36
40
  else
37
- tokens = parse(value)
38
- @theme[key] = tokens.to_s
41
+ TokenList
42
+ .parse(value)
43
+ .to_s
44
+ .tap do |tokens|
45
+ @theme[key] = tokens
46
+ end
39
47
  end
40
48
  end
41
49
 
@@ -61,10 +69,6 @@ module Protos
61
69
 
62
70
  private
63
71
 
64
- def parse(value)
65
- TokenList.parse(value)
66
- end
67
-
68
72
  def negation?(key)
69
73
  key.to_s.start_with?("!")
70
74
  end
@@ -13,6 +13,16 @@ module Protos
13
13
  )
14
14
  end
15
15
  end
16
+
17
+ private
18
+
19
+ def theme
20
+ {
21
+ # NOTE: Added this because I'm noticing the form having a margin
22
+ # with a default setup. Not sure if this is really needed.
23
+ form: tokens("m-0")
24
+ }
25
+ end
16
26
  end
17
27
  end
18
28
  end
data/lib/protos/toast.rb CHANGED
@@ -3,15 +3,21 @@
3
3
  module Protos
4
4
  class Toast < Component
5
5
  Positions = Types::Symbol.enum(
6
- :start,
7
- :center,
8
- :end,
9
- :top,
10
- :middle,
11
- :bottom
6
+ :top_start,
7
+ :top_center,
8
+ :top_end,
9
+ :middle_start,
10
+ :middle_center,
11
+ :middle_end,
12
+ :bottom_start,
13
+ :bottom_center,
14
+ :bottom_end
12
15
  )
13
16
 
14
- option :position, type: Positions, default: -> { :end }
17
+ option :position,
18
+ type: Positions,
19
+ default: -> { :bottom_end },
20
+ reader: false
15
21
 
16
22
  def template(&block)
17
23
  dialog(**attrs, &block)
@@ -29,12 +35,27 @@ module Protos
29
35
  }
30
36
  end
31
37
 
38
+ def position
39
+ {
40
+ top_start: "toast-start toast-top",
41
+ top_center: "toast-center toast-top",
42
+ top_end: "toast-end toast-top",
43
+ middle_start: "toast-start toast-middle",
44
+ middle_center: "toast-center toast-middle",
45
+ middle_end: "toast-end toast-middle",
46
+ bottom_start: "toast-start toast-bottom",
47
+ bottom_center: "toast-center toast-bottom",
48
+ bottom_end: "toast-end toast-bottom"
49
+ }.fetch(@position)
50
+ end
51
+
32
52
  def theme
33
53
  {
34
54
  container: tokens(
35
55
  "toast",
36
- "toast-end",
37
- "[&:not([open])]:hidden"
56
+ position,
57
+ "[&:not([open])]:hidden",
58
+ "bg-transparent"
38
59
  )
39
60
  }
40
61
  end
@@ -6,36 +6,61 @@ module Protos
6
6
  case input
7
7
  when String then new(input.split)
8
8
  when Array then new(input)
9
+ when TokenList then input
9
10
  else raise ArgumentError, "Invalid input: #{input.inspect}"
10
11
  end
11
12
  end
12
13
 
13
14
  attr_reader :tokens
14
15
 
15
- def initialize(tokens)
16
+ def initialize(tokens = [])
16
17
  @tokens = Set.new(tokens)
17
18
  end
18
19
 
19
20
  def to_s
20
- @tokens.to_a.join(" ")
21
+ merge(@tokens.to_a.join(" "))
21
22
  end
22
23
 
23
24
  def -(other)
24
- other = TokenList.parse(other) unless other.is_a?(TokenList)
25
+ other = TokenList.parse(other)
25
26
  self.class.new(@tokens - other.tokens)
26
27
  end
27
28
 
28
29
  def +(other)
29
- other = TokenList.parse(other) unless other.is_a?(TokenList)
30
+ other = TokenList.parse(other)
30
31
  self.class.new(@tokens + other.tokens)
31
32
  end
32
33
 
33
34
  def remove(token)
34
- @tokens.delete(token)
35
+ tap do
36
+ self.class.parse(token).tokens.each do |token|
37
+ @tokens.delete(token)
38
+ end
39
+ end
35
40
  end
36
41
 
37
- def add(token)
38
- @tokens.add(token)
42
+ def add(input)
43
+ tap do
44
+ self.class.parse(input).tokens.each do |token|
45
+ @tokens.add(token)
46
+ end
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def merge(tokens)
53
+ TailwindMerge::Merger.new(
54
+ config: {
55
+ theme: {
56
+ # Not currently working in the gem.
57
+ # "spacing" => %w[xs sm md lg xl],
58
+ # "padding" => %w[xs sm md lg xl],
59
+ # "margin" => %w[xs sm md lg xl]
60
+ }
61
+ }
62
+ )
63
+ .merge(tokens)
39
64
  end
40
65
  end
41
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Protos
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.1"
5
5
  end
data/lib/protos.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "json"
3
4
  require "dry-types"
4
5
  require "dry-initializer"
5
6
  require "phlex"
7
+ require "tailwind_merge"
6
8
 
7
9
  module Protos
8
10
  class Error < StandardError; end
@@ -50,8 +52,6 @@ module Protos
50
52
  require_relative "protos/collapse/title"
51
53
  require_relative "protos/collapse/content"
52
54
 
53
- require_relative "protos/combobox"
54
-
55
55
  require_relative "protos/command"
56
56
  require_relative "protos/command/input"
57
57
  require_relative "protos/command/dialog"
@@ -67,11 +67,6 @@ module Protos
67
67
  require_relative "protos/drawer/trigger"
68
68
  require_relative "protos/drawer/content"
69
69
 
70
- require_relative "protos/dropdown"
71
- require_relative "protos/dropdown/item"
72
- require_relative "protos/dropdown/menu"
73
- require_relative "protos/dropdown/trigger"
74
-
75
70
  require_relative "protos/hero"
76
71
  require_relative "protos/hero/content"
77
72
  require_relative "protos/hero/overlay"
@@ -125,5 +120,13 @@ module Protos
125
120
  require_relative "protos/typography/heading"
126
121
  require_relative "protos/typography/paragraph"
127
122
  require_relative "protos/typography/inline_link"
123
+
124
+ # Dependent
125
+ require_relative "protos/dropdown"
126
+ require_relative "protos/dropdown/item"
127
+ require_relative "protos/dropdown/menu"
128
+ require_relative "protos/dropdown/trigger"
129
+
130
+ require_relative "protos/combobox"
128
131
  end
129
132
  end
data/protos.gemspec CHANGED
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency "dry-initializer", "~> 3.1"
39
39
  spec.add_dependency "dry-types", "~> 1.7"
40
40
  spec.add_dependency "phlex", "~> 1.9"
41
+ spec.add_dependency "tailwind_merge", "~> 0.10"
41
42
 
42
43
  # For more information and examples about making a new gem, check out our
43
44
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nolan J Tait
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
11
+ date: 2024-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-core
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: tailwind_merge
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
69
83
  description: A UI component library built with phlex and daisyui
70
84
  email:
71
85
  - nolanjtait@gmail.com