protos 0.2.3 → 0.4.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -5
  3. data/CHANGELOG.md +11 -0
  4. data/README.md +82 -67
  5. data/benchmarks/.keep +0 -0
  6. data/benchmarks/table.txt +12 -0
  7. data/examples/list.rb +3 -1
  8. data/examples/navbar.rb +1 -1
  9. data/lib/protos/accordion/item.rb +7 -8
  10. data/lib/protos/accordion.rb +6 -10
  11. data/lib/protos/alert/actions.rb +2 -2
  12. data/lib/protos/alert/icon.rb +2 -2
  13. data/lib/protos/alert.rb +4 -8
  14. data/lib/protos/attributes.rb +7 -8
  15. data/lib/protos/avatar.rb +1 -1
  16. data/lib/protos/breadcrumbs/crumb.rb +2 -2
  17. data/lib/protos/breadcrumbs.rb +2 -4
  18. data/lib/protos/card/actions.rb +2 -2
  19. data/lib/protos/card/body.rb +2 -2
  20. data/lib/protos/card/image.rb +2 -2
  21. data/lib/protos/card/title.rb +2 -2
  22. data/lib/protos/card.rb +6 -14
  23. data/lib/protos/carousel/actions.rb +2 -2
  24. data/lib/protos/carousel/item.rb +2 -2
  25. data/lib/protos/carousel.rb +4 -8
  26. data/lib/protos/chat_bubble/content.rb +2 -2
  27. data/lib/protos/chat_bubble/footer.rb +2 -2
  28. data/lib/protos/chat_bubble/header.rb +2 -2
  29. data/lib/protos/chat_bubble/image.rb +2 -2
  30. data/lib/protos/chat_bubble.rb +6 -14
  31. data/lib/protos/collapse/content.rb +2 -2
  32. data/lib/protos/collapse/title.rb +3 -3
  33. data/lib/protos/collapse.rb +4 -8
  34. data/lib/protos/combobox.rb +8 -24
  35. data/lib/protos/command/dialog.rb +1 -1
  36. data/lib/protos/command/empty.rb +2 -2
  37. data/lib/protos/command/group.rb +1 -1
  38. data/lib/protos/command/input.rb +3 -2
  39. data/lib/protos/command/item.rb +2 -2
  40. data/lib/protos/command/list.rb +2 -2
  41. data/lib/protos/command/title.rb +2 -2
  42. data/lib/protos/command/trigger.rb +2 -2
  43. data/lib/protos/command.rb +10 -26
  44. data/lib/protos/component.rb +21 -30
  45. data/lib/protos/drawer/content.rb +2 -2
  46. data/lib/protos/drawer/side.rb +1 -1
  47. data/lib/protos/drawer/trigger.rb +2 -2
  48. data/lib/protos/drawer.rb +5 -11
  49. data/lib/protos/dropdown/item.rb +2 -2
  50. data/lib/protos/dropdown/menu.rb +1 -1
  51. data/lib/protos/dropdown.rb +3 -9
  52. data/lib/protos/hero/content.rb +2 -2
  53. data/lib/protos/hero/overlay.rb +2 -2
  54. data/lib/protos/hero.rb +4 -8
  55. data/lib/protos/list/item.rb +2 -2
  56. data/lib/protos/list.rb +3 -5
  57. data/lib/protos/modal/close_button.rb +1 -1
  58. data/lib/protos/modal/dialog.rb +1 -1
  59. data/lib/protos/modal/trigger.rb +2 -2
  60. data/lib/protos/modal.rb +5 -11
  61. data/lib/protos/popover/content.rb +3 -1
  62. data/lib/protos/popover/trigger.rb +2 -2
  63. data/lib/protos/popover.rb +4 -8
  64. data/lib/protos/stats/actions.rb +2 -2
  65. data/lib/protos/stats/description.rb +2 -2
  66. data/lib/protos/stats/figure.rb +2 -2
  67. data/lib/protos/stats/stat.rb +2 -2
  68. data/lib/protos/stats/title.rb +2 -2
  69. data/lib/protos/stats/value.rb +2 -2
  70. data/lib/protos/stats.rb +8 -20
  71. data/lib/protos/swap/off.rb +2 -2
  72. data/lib/protos/swap/on.rb +2 -2
  73. data/lib/protos/swap.rb +5 -10
  74. data/lib/protos/table/body.rb +2 -2
  75. data/lib/protos/table/caption.rb +3 -3
  76. data/lib/protos/table/cell.rb +2 -2
  77. data/lib/protos/table/footer.rb +2 -2
  78. data/lib/protos/table/head.rb +2 -2
  79. data/lib/protos/table/header.rb +2 -2
  80. data/lib/protos/table/row.rb +2 -2
  81. data/lib/protos/table.rb +8 -22
  82. data/lib/protos/tabs/tab.rb +5 -4
  83. data/lib/protos/tabs.rb +3 -5
  84. data/lib/protos/theme.rb +34 -45
  85. data/lib/protos/timeline/center.rb +2 -2
  86. data/lib/protos/timeline/item.rb +2 -2
  87. data/lib/protos/timeline/left.rb +2 -2
  88. data/lib/protos/timeline/right.rb +2 -2
  89. data/lib/protos/timeline.rb +6 -14
  90. data/lib/protos/toast/close_button.rb +2 -1
  91. data/lib/protos/toast.rb +3 -5
  92. data/lib/protos/token_list.rb +18 -31
  93. data/lib/protos/typography/heading.rb +2 -2
  94. data/lib/protos/typography/inline_link.rb +3 -3
  95. data/lib/protos/typography/paragraph.rb +2 -2
  96. data/lib/protos/typography.rb +12 -12
  97. data/lib/protos/version.rb +1 -1
  98. data/protos.gemspec +15 -3
  99. metadata +8 -6
@@ -3,19 +3,7 @@
3
3
  module Protos
4
4
  class TokenList
5
5
  # DOCS: A list of utility tokens that can handle parsing and merging sets of
6
- # tokens together safely. It uses TailwindMerge to merge the tokens together
7
- # while accounting for their conflicts.
8
-
9
- def self.parse(input)
10
- case input
11
- when String then new(input.split)
12
- when Array then new(input)
13
- when TokenList then input
14
- when NilClass then new
15
- else raise ArgumentError,
16
- "Invalid input for #{self.class.name}: #{input.inspect}"
17
- end
18
- end
6
+ # tokens together safely.
19
7
 
20
8
  attr_reader :tokens
21
9
 
@@ -23,34 +11,33 @@ module Protos
23
11
  @tokens = Set.new(tokens)
24
12
  end
25
13
 
14
+ def empty?
15
+ @tokens.empty?
16
+ end
17
+
26
18
  def to_s
27
19
  @tokens.join(" ")
28
20
  end
29
21
 
30
- def -(other)
31
- other = TokenList.parse(other)
32
- self.class.new(@tokens - other.tokens)
22
+ def remove(tokens)
23
+ @tokens.subtract(parse(tokens))
24
+ self
33
25
  end
34
26
 
35
- def +(other)
36
- other = TokenList.parse(other)
37
- self.class.new(@tokens + other.tokens)
27
+ def add(tokens)
28
+ @tokens.merge(parse(tokens))
29
+ self
38
30
  end
39
31
 
40
- def remove(token)
41
- tap do
42
- self.class.parse(token).tokens.each do |token|
43
- @tokens.delete(token)
44
- end
45
- end
32
+ def clear
33
+ @tokens.clear
34
+ self
46
35
  end
47
36
 
48
- def add(input)
49
- tap do
50
- self.class.parse(input).tokens.each do |token|
51
- @tokens.add(token)
52
- end
53
- end
37
+ private
38
+
39
+ def parse(tokens)
40
+ tokens.split
54
41
  end
55
42
  end
56
43
  end
@@ -12,8 +12,8 @@ module Protos
12
12
  option :size, type: SizeTypes, default: -> { "md" }, reader: false
13
13
  option :level, type: LevelTypes, default: -> { 1 }, reader: false
14
14
 
15
- def template(&block)
16
- send(element, **attrs, &block)
15
+ def view_template(&)
16
+ send(element, **attrs, &)
17
17
  end
18
18
 
19
19
  private
@@ -5,8 +5,8 @@ module Protos
5
5
  class InlineLink < Component
6
6
  # DOCS: A link that is styled to be inline with text
7
7
 
8
- def template(&block)
9
- a(**attrs, &block)
8
+ def view_template(&)
9
+ a(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -14,7 +14,7 @@ module Protos
14
14
  def theme
15
15
  {
16
16
  container: tokens(
17
- "font-medium",
17
+ "font-semibold",
18
18
  "hover:underline",
19
19
  "underline-offset-4",
20
20
  "cursor-pointer"
@@ -5,8 +5,8 @@ module Protos
5
5
  class Paragraph < Component
6
6
  # DOCS: A paragraph of text
7
7
 
8
- def template(&block)
9
- p(**attrs, &block)
8
+ def view_template(&)
9
+ p(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -5,28 +5,28 @@ module Protos
5
5
  # DOCS: The core typography module that can be mixedin to override the
6
6
  # default elements with custom elements.
7
7
 
8
- def h1(**options, &block)
9
- render(Heading.new(level: 1, size: :xl, **options), &block)
8
+ def h1(**, &)
9
+ render Heading.new(level: 1, size: :xl, **, &)
10
10
  end
11
11
 
12
- def h2(**options, &block)
13
- render(Heading.new(level: 2, size: :lg, **options), &block)
12
+ def h2(**, &)
13
+ render Heading.new(level: 2, size: :lg, **, &)
14
14
  end
15
15
 
16
- def h3(**options, &block)
17
- render(Heading.new(level: 3, size: :md, **options), &block)
16
+ def h3(**, &)
17
+ render Heading.new(level: 3, size: :md, **, &)
18
18
  end
19
19
 
20
- def h4(**options, &block)
21
- render(Heading.new(level: 4, size: :sm, **options), &block)
20
+ def h4(**, &)
21
+ render Heading.new(level: 4, size: :sm, **, &)
22
22
  end
23
23
 
24
- def p(**options, &block)
25
- render(Paragraph.new(**options), &block)
24
+ def p(**, &)
25
+ render Paragraph.new(**, &)
26
26
  end
27
27
 
28
- def inline_a(**options, &block)
29
- render(InlineLink.new(**options), &block)
28
+ def inline_a(**, &)
29
+ render InlineLink.new(**, &)
30
30
  end
31
31
  end
32
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Protos
4
- VERSION = "0.2.3"
4
+ VERSION = "0.4.0"
5
5
  end
data/protos.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "A UI component library built with phlex and daisyui"
13
13
  spec.homepage = "https://github.com/inhouse-work/protos"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 3.1"
15
+ spec.required_ruby_version = ">= 3.2"
16
16
  spec.requirements << "tailwindcss"
17
17
  spec.requirements << "daisyui"
18
18
  spec.requirements << "protos-stimulus"
@@ -26,7 +26,19 @@ Gem::Specification.new do |spec|
26
26
  spec.files = Dir.chdir(__dir__) do
27
27
  `git ls-files -z`.split("\x0").reject do |f|
28
28
  (File.expand_path(f) == __FILE__) ||
29
- f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
29
+ f.start_with?(
30
+ *%w[
31
+ bin/
32
+ test/
33
+ spec/
34
+ features/
35
+ rakelib/
36
+ benchmark/
37
+ .git
38
+ appveyor
39
+ Gemfile
40
+ ]
41
+ )
30
42
  end
31
43
  end
32
44
  spec.bindir = "exe"
@@ -37,7 +49,7 @@ Gem::Specification.new do |spec|
37
49
  spec.add_dependency "dry-core", "~> 1.0"
38
50
  spec.add_dependency "dry-initializer", "~> 3.1"
39
51
  spec.add_dependency "dry-types", "~> 1.7"
40
- spec.add_dependency "phlex", "~> 1.9"
52
+ spec.add_dependency "phlex", "~> 1.10"
41
53
  spec.add_dependency "tailwind_merge", "~> 0.10"
42
54
 
43
55
  # For more information and examples about making a new gem, check out our
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.2.3
4
+ version: 0.4.0
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-14 00:00:00.000000000 Z
11
+ date: 2024-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-core
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.9'
61
+ version: '1.10'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.9'
68
+ version: '1.10'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: tailwind_merge
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +93,8 @@ files:
93
93
  - LICENSE.txt
94
94
  - README.md
95
95
  - Rakefile
96
+ - benchmarks/.keep
97
+ - benchmarks/table.txt
96
98
  - examples/list.rb
97
99
  - examples/navbar.rb
98
100
  - lib/protos.rb
@@ -205,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
207
  requirements:
206
208
  - - ">="
207
209
  - !ruby/object:Gem::Version
208
- version: '3.1'
210
+ version: '3.2'
209
211
  required_rubygems_version: !ruby/object:Gem::Requirement
210
212
  requirements:
211
213
  - - ">="
@@ -215,7 +217,7 @@ requirements:
215
217
  - tailwindcss
216
218
  - daisyui
217
219
  - protos-stimulus
218
- rubygems_version: 3.5.3
220
+ rubygems_version: 3.5.7
219
221
  signing_key:
220
222
  specification_version: 4
221
223
  summary: A UI component library built with phlex and daisyui