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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 939a00cb6d422dc749d734683f4eceedf4c1857f21ab770dae704a99e06cdf8a
4
- data.tar.gz: 60525463c5531256d9cac2139791b112c477b746a8ed2a643d29856fe548517a
3
+ metadata.gz: 2e1c2bbb97997971d3380fb5846b8720a01d50d61942a9dea5a00e5d19d2c416
4
+ data.tar.gz: 10c0adb3dfeef8488ae235b0b7d4ec9567f7011ec5bbe0707d33bff3d6cc0049
5
5
  SHA512:
6
- metadata.gz: '094affdf956f0ff06aba676408ee34d20e6af8ed5ac92afa04576bbc52b83499e491bfd74c3b27c281d20f32fcada8dbad27ec2fbedcb79cb519e9e0a318d2e7'
7
- data.tar.gz: 953db1b5c57a9202a3f87e0a3ac8e32ed226f48c85588b7d1041559fd8a0749952c76619cc85eb075717b697623bb1dc045cf0dcc9c23370c1622e67c460d993
6
+ metadata.gz: f8b800214d96624b909934dde77611d12e55aca2eeac34c499d4f905f3fd5e39ca4d56b8130e9b7ffe0240292b27a852842bce3aef47b22607ef68c00d2df675
7
+ data.tar.gz: 42a866cc6f7d50169d464b6a016c4852e37634c63003552f732d149725289580c8b031b3d3ce29c6c0f1eb93bd18b73d2cf46f1ff1588cef9a0e39ebe7892a9b
data/.rubocop.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  require:
2
2
  - rubocop-inhouse
3
3
 
4
- AllCops:
5
- TargetRubyVersion: 3.1
6
-
7
4
  inherit_gem:
8
5
  rubocop-inhouse:
9
6
  - config/default.yml
10
7
 
11
- Style/ConstantVisibility:
12
- Enabled: false
8
+ AllCops:
9
+ TargetRubyVersion: 3.2
10
+
11
+ Naming/BlockForwarding:
12
+ EnforcedStyle: anonymous
data/CHANGELOG.md CHANGED
@@ -9,3 +9,14 @@
9
9
  - Chose to move away from daisyUI dropdown defaults as they have problems
10
10
  displaying properly in too many situations
11
11
  - Opted for using a protos-stimulus controller that uses tippy.js
12
+
13
+ ## [0.3.0] - 2024-04-06
14
+
15
+ - Updates to phlex v0.10 by changing all `template` methods to `view_template`
16
+ - Improvements to README
17
+
18
+ ## [0.4.0] - ???
19
+
20
+ - Phlex discord didn't like all the calls to `render`
21
+ - Apparently `render` is called differently within ERB
22
+ - Suggested to change all calls to immediately render, would improve ergonomics
data/README.md CHANGED
@@ -25,11 +25,11 @@ Other Phlex based UI libraries worth checking out:
25
25
  A protos component follows some conventions that make them easy to work with as
26
26
  components in your app.
27
27
 
28
- Every UI component library will have a tension between being too general or
29
- narrow to be useful. Making components that look good out of the box can make
30
- them hard to customize.
28
+ Every UI component library will have a tension between being too general to fit
29
+ in your app or too narrow to be useful. Making components that look good out of
30
+ the box can make them hard to customize.
31
31
 
32
- We try and resolve this tensions by making the components have a minimal style
32
+ We try and resolve this tension by making these components have a minimal style
33
33
  that can be easily overridden using some ergonomic conventions.
34
34
 
35
35
  There are 3 core conventions:
@@ -40,11 +40,16 @@ There are 3 core conventions:
40
40
  ### Slots and themes
41
41
 
42
42
  Components are styled with `css` slots that are filled with values from
43
- a `theme`:
43
+ a `theme`.
44
+
45
+ You define a theme for your component by defining a `#theme` method that returns
46
+ a hash. This hash will be merged with any theme provided when rendering your
47
+ component. This allows you to easily override styles for your components
48
+ depending on their context.
44
49
 
45
50
  ```ruby
46
51
  class List < Protos::Component
47
- def template
52
+ def view_template
48
53
  ul(class: css[:list]) do
49
54
  li(class: css[:item]) { "Item 1" }
50
55
  li(class: css[:item]) { "Item 2" }
@@ -53,31 +58,8 @@ class List < Protos::Component
53
58
 
54
59
  def theme
55
60
  {
56
- list: tokens("space-y-4"),
57
- item: tokens("font-bold", "text-2xl")
58
- }
59
- end
60
- end
61
- ```
62
-
63
- Here we are using conditional `tokens` from Phlex but you can also use
64
- simple strings.
65
-
66
- If you want to change the method we define our default theme you can override the
67
- `theme_method` on the class:
68
-
69
- ```ruby
70
- class List < Protos::Component
71
- theme_method :custom_theme
72
-
73
- # ...
74
-
75
- private
76
-
77
- def custom_theme
78
- {
79
- list: tokens("space-y-4"),
80
- item: tokens("font-bold", "text-2xl")
61
+ list: tokens("space-y-4"), # We can use `#tokens` from phlex (recommended)
62
+ item: "font-bold text-2xl" # Or just plain old strings
81
63
  }
82
64
  end
83
65
  end
@@ -137,18 +119,40 @@ The new `css[:item]` slot would be:
137
119
  <li class="font-bold">Item 1</li>
138
120
  ```
139
121
 
122
+ If you want to change the method we define our default theme you can override the
123
+ `theme_method` on the class:
124
+
125
+ ```ruby
126
+ class List < Protos::Component
127
+ theme_method :custom_theme
128
+
129
+ # ...
130
+
131
+ private
132
+
133
+ def custom_theme
134
+ {
135
+ list: tokens("space-y-4"),
136
+ item: tokens("font-bold", "text-2xl")
137
+ }
138
+ end
139
+ end
140
+ ```
141
+
140
142
  ### Attrs and default attrs
141
143
 
142
144
  By convention, all components spread in an `attrs` hash on their outermost
143
145
  element of the component.
144
146
 
145
147
  By doing this we enable 2 main conveniences:
146
- 1. We can pass `class` when initializing the component
147
- 2. We can add default attributes that can be merged with defaults
148
+ 1. We can pass a `class` keyword when initializing the component which will be
149
+ merged safely into the `css[:container]` slot
150
+ 2. We can add default attributes that are safely merged with any provided to the
151
+ component when its being initialized
148
152
 
149
153
  ```ruby
150
154
  class List < Protos::Component
151
- def template
155
+ def view_template
152
156
  ul(**attrs) do
153
157
  # ...
154
158
  end
@@ -158,9 +162,7 @@ class List < Protos::Component
158
162
 
159
163
  def default_attrs
160
164
  {
161
- data: {
162
- controller: "list"
163
- }
165
+ data: { controller: "list" }
164
166
  }
165
167
  end
166
168
 
@@ -173,9 +175,24 @@ class List < Protos::Component
173
175
  end
174
176
  ```
175
177
 
176
- Attrs will by default merge `class` into the `css[:container]` slot so we
177
- changed that in our theme. We also added `default_attrs` and gave a controller.
178
- These could be any html options.
178
+ `#attrs` will by default merge the `class` keyword into the `css[:container]`
179
+ slot which we define in our theme.
180
+
181
+ Special html options will be safely merged. For examples, the component above
182
+ defines a list controller. If we passed our own controller into data when we
183
+ initialize, the component's data-controller attribute would be appended to:
184
+
185
+ ```ruby
186
+ render List.new(
187
+ data: { controller: "tooltip" }
188
+ )
189
+ ```
190
+
191
+ That would output both controllers to the DOM element:
192
+
193
+ ```html
194
+ <ul data-controller="list tooltip">
195
+ ```
179
196
 
180
197
  If we wanted to, just like for our theme we can change the method from
181
198
  `default_attrs` by defining the `default_attrs_method` on the class:
@@ -184,37 +201,16 @@ If we wanted to, just like for our theme we can change the method from
184
201
  class List < Protos::Component
185
202
  default_attrs_method :custom_attrs
186
203
 
187
- # ...
188
-
189
204
  private
190
205
 
191
206
  def custom_attrs
192
207
  {
193
- data: {
194
- controller: "list"
195
- }
208
+ data: { controller: "list" }
196
209
  }
197
210
  end
198
-
199
- # ...
200
211
  end
201
212
  ```
202
213
 
203
- Now we get some additional convenience:
204
-
205
- ```ruby
206
- render List.new(
207
- class: "my-lg",
208
- data: { controller: "confetti" }
209
- )
210
- ```
211
-
212
- This would merge our `data` and `class` safely into the attributes:
213
-
214
- ```html
215
- <ul data-controller="list confetti" class="space-y-4 my-lg">
216
- ```
217
-
218
214
  ### Params and options
219
215
 
220
216
  Components extend
@@ -242,7 +238,7 @@ Here is an example of a small navbar component:
242
238
  require "protos"
243
239
 
244
240
  class Navbar < Protos::Component
245
- def template
241
+ def view_template
246
242
  # **attrs will add:
247
243
  # - Any html options defined on the component initialization such as data,
248
244
  # role, for, etc..
@@ -379,11 +375,11 @@ import "protos-stimulus"
379
375
  Then you can use the components in your apps.
380
376
 
381
377
  ```ruby
382
- render Protos::Card.new(class: "bg-base-100") do |card|
383
- render card.body(class: "gap-sm") do
384
- render card.title(class: "font-bold") { "Hello world" }
378
+ Protos::Card.new(class: "bg-base-100") do |card|
379
+ card.body(class: "gap-sm") do
380
+ card.title(class: "font-bold") { "Hello world" }
385
381
  span { "This is some more content" }
386
- render card.actions do
382
+ card.actions do
387
383
  button(class: "btn btn-primary") { "Action 1" }
388
384
  end
389
385
  end
@@ -661,6 +657,25 @@ git commits and the created tag, and push the `.gem` file to
661
657
  Bug reports and pull requests are welcome on GitHub at
662
658
  https://github.com/inhouse-work/protos.
663
659
 
660
+ ## Benchmarks
661
+
662
+ You can run the benchmarks using the raketasks, e.g:
663
+
664
+ - `bin/rake benchmark:ips:table`
665
+ - `bin/rake benchmark:memory:table`
666
+ - `bin/rake benchmark:ips:theme`
667
+ - `bin/rake benchmark:ips:attributes`
668
+
669
+ There are also tasks for profiling and exploring memory consumption.
670
+
671
+ You can find the latest benchmarks in `benchmarks/`.
672
+
673
+ Currently this library is 30x slower than plain Phlex components. This is due to
674
+ the overhead of themes, attributes and other quality of life improvements.
675
+
676
+ This may seem like a lot but Phlex is so fast that rendering a large table can
677
+ still be done 4000 times per second with this lib.
678
+
664
679
  ## License
665
680
 
666
681
  The gem is available as open source under the terms of the
data/benchmarks/.keep ADDED
File without changes
@@ -0,0 +1,12 @@
1
+ ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
2
+ Warming up --------------------------------------
3
+ Protos::Table 41.000 i/100ms
4
+ Phlex::Table 1.239k i/100ms
5
+ Calculating -------------------------------------
6
+ Protos::Table 417.028 (± 0.2%) i/s - 2.091k in 5.014103s
7
+ Phlex::Table 12.785k (± 0.6%) i/s - 64.428k in 5.039702s
8
+
9
+ Comparison:
10
+ Phlex::Table: 12784.6 i/s
11
+ Protos::Table: 417.0 i/s - 30.66x slower
12
+
data/examples/list.rb CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "protos"
2
4
 
3
5
  class List < Protos::Component
4
- def template
6
+ def view_template
5
7
  ul(**attrs) do
6
8
  li(class: css[:item]) { "Item 1" }
7
9
  li(class: css[:item]) { "Item 2" }
data/examples/navbar.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require_relative "../lib/protos"
4
4
 
5
5
  class Navbar < Protos::Component
6
- def template
6
+ def view_template
7
7
  header(**attrs) do
8
8
  h1(class: css[:heading]) { "Hello world" }
9
9
  h2(class: css[:subtitle]) { "With a subtitle" }
@@ -7,12 +7,12 @@ module Protos
7
7
 
8
8
  option :id, type: Types::Coercible::String
9
9
 
10
- def template(&block)
10
+ def view_template(&block)
11
11
  li(**attrs) do
12
- render collapse_component do
12
+ render Collapse.new(theme: collapse_theme) do
13
13
  # form: "" prevents the radio button from being submitted if its
14
14
  # within a form
15
- input(type: :radio, name: id, form: "")
15
+ input(type: :radio, name: id, form: "", autocomplete: :off)
16
16
  yield if block
17
17
  end
18
18
  end
@@ -20,11 +20,10 @@ module Protos
20
20
 
21
21
  private
22
22
 
23
- def collapse_component
24
- collapse_theme = { "!container": tokens("bg-base-100") }
25
- collapse_theme[:container!] = css[:collapse] if css[:collapse]
26
-
27
- Collapse.new(theme: collapse_theme)
23
+ def collapse_theme
24
+ { "!container": tokens("bg-base-100") }.tap do |theme|
25
+ theme[:container!] = css[:collapse] if css[:collapse]
26
+ end
28
27
  end
29
28
 
30
29
  def theme
@@ -10,20 +10,16 @@ module Protos
10
10
  option :id,
11
11
  default: -> { "collapse-#{SecureRandom.hex(4)}" }
12
12
 
13
- def template(&block)
14
- ul(**attrs, &block)
13
+ def view_template(&)
14
+ ul(**attrs, &)
15
15
  end
16
16
 
17
- def item(**kwargs)
18
- Item.new(id:, **kwargs)
19
- end
17
+ def item(*, **, &) = render Item.new(*, id:, **, &)
20
18
 
21
- def title(*args, **kwargs, &block)
22
- Collapse::Title.new(*args, id:, **kwargs, &block)
23
- end
19
+ def content(...) = render Collapse::Content.new(...)
24
20
 
25
- def content(...)
26
- Collapse::Content.new(...)
21
+ def title(*, **, &)
22
+ render Collapse::Title.new(*, id:, **, &)
27
23
  end
28
24
 
29
25
  private
@@ -5,8 +5,8 @@ module Protos
5
5
  class Actions < Component
6
6
  # DOCS: Area for actions (e.g buttons) within an alert
7
7
 
8
- def template(&block)
9
- nav(**attrs, &block)
8
+ def view_template(&)
9
+ nav(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -6,8 +6,8 @@ module Protos
6
6
  # DOCS: Icon for the alert, usually showing at the top left corner aligned
7
7
  # to the text
8
8
 
9
- def template(&block)
10
- div(**attrs, &block)
9
+ def view_template(&)
10
+ div(**attrs, &)
11
11
  end
12
12
 
13
13
  private
data/lib/protos/alert.rb CHANGED
@@ -15,17 +15,13 @@ module Protos
15
15
 
16
16
  option :type, type: AlertTypes, default: -> { :info }, reader: :private
17
17
 
18
- def template(&block)
19
- div(**attrs, &block)
18
+ def view_template(&)
19
+ div(**attrs, &)
20
20
  end
21
21
 
22
- def icon(...)
23
- Icon.new(...)
24
- end
22
+ def icon(...) = render Icon.new(...)
25
23
 
26
- def actions(...)
27
- Actions.new(...)
28
- end
24
+ def actions(...) = render Actions.new(...)
29
25
 
30
26
  private
31
27
 
@@ -11,7 +11,7 @@ module Protos
11
11
  # controllers do not get overridden.
12
12
 
13
13
  def initialize(attrs = {}, **kwargs)
14
- @attrs = attrs.merge(kwargs)
14
+ @attrs = attrs.merge!(kwargs)
15
15
  end
16
16
 
17
17
  def [](key)
@@ -19,9 +19,10 @@ module Protos
19
19
  end
20
20
 
21
21
  def merge(hash)
22
- tap do
23
- @attrs = mix(@attrs, hash)
24
- end
22
+ return self unless hash
23
+
24
+ @attrs = mix(@attrs, hash)
25
+ self
25
26
  end
26
27
 
27
28
  # Allows for the use of the `**` operator to pass the attributes to
@@ -32,10 +33,8 @@ module Protos
32
33
 
33
34
  private
34
35
 
35
- def mix(*hashes)
36
- hashes.each_with_object({}).each do |hash, result|
37
- hash ||= {}
38
-
36
+ def mix(hash, *hashes)
37
+ hashes.each_with_object(hash) do |hash, result|
39
38
  result.merge!(hash) do |_key, a, b| # rubocop:disable Metrics/ParameterLists
40
39
  case [a, b]
41
40
  in String, String then "#{a} #{b}"
data/lib/protos/avatar.rb CHANGED
@@ -17,7 +17,7 @@ module Protos
17
17
  default: -> { :none },
18
18
  reader: false
19
19
 
20
- def template(&block)
20
+ def view_template(&block)
21
21
  div(**attrs) do
22
22
  div(class: css[:figure], &block)
23
23
  end
@@ -5,8 +5,8 @@ module Protos
5
5
  class Crumb < Component
6
6
  # DOCS: A crumb is a single item within a breadcrumb
7
7
 
8
- def template(&block)
9
- li(**attrs, &block)
8
+ def view_template(&)
9
+ li(**attrs, &)
10
10
  end
11
11
  end
12
12
  end
@@ -5,15 +5,13 @@ module Protos
5
5
  # DOCS: A list of breadcrumbs (e.g links) for navigation
6
6
  # https://daisyui.com/components/breadcrumbs/
7
7
 
8
- def template(&block)
8
+ def view_template(&block)
9
9
  nav(**attrs) do
10
10
  ul(class: css[:list], &block)
11
11
  end
12
12
  end
13
13
 
14
- def crumb(...)
15
- Crumb.new(...)
16
- end
14
+ def crumb(...) = render Crumb.new(...)
17
15
 
18
16
  private
19
17
 
@@ -5,8 +5,8 @@ module Protos
5
5
  class Actions < Component
6
6
  # DOCS: Area for actions (e.g buttons) within a card
7
7
 
8
- def template(&block)
9
- nav(**attrs, &block)
8
+ def view_template(&)
9
+ nav(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -5,8 +5,8 @@ module Protos
5
5
  class Body < Component
6
6
  # DOCS: The main content area of a card
7
7
 
8
- def template(&block)
9
- div(**attrs, &block)
8
+ def view_template(&)
9
+ div(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -7,8 +7,8 @@ module Protos
7
7
  # on daisyui which will style the <figure> tag depending on whether
8
8
  # image-overlay is present on the card.
9
9
 
10
- def template(&block)
11
- figure(**attrs, &block)
10
+ def view_template(&)
11
+ figure(**attrs, &)
12
12
  end
13
13
  end
14
14
  end
@@ -5,8 +5,8 @@ module Protos
5
5
  class Title < Component
6
6
  # DOCS: The title of a card
7
7
 
8
- def template(&block)
9
- div(**attrs, &block)
8
+ def view_template(&)
9
+ div(**attrs, &)
10
10
  end
11
11
 
12
12
  private
data/lib/protos/card.rb CHANGED
@@ -14,25 +14,17 @@ module Protos
14
14
  default: -> { :default },
15
15
  reader: false
16
16
 
17
- def template(&block)
18
- article(**attrs, &block)
17
+ def view_template(&)
18
+ article(**attrs, &)
19
19
  end
20
20
 
21
- def body(...)
22
- Body.new(...)
23
- end
21
+ def body(...) = render Body.new(...)
24
22
 
25
- def image(...)
26
- Image.new(...)
27
- end
23
+ def image(...) = render Image.new(...)
28
24
 
29
- def title(...)
30
- Title.new(...)
31
- end
25
+ def title(...) = render Title.new(...)
32
26
 
33
- def actions(...)
34
- Actions.new(...)
35
- end
27
+ def actions(...) = render Actions.new(...)
36
28
 
37
29
  private
38
30
 
@@ -5,8 +5,8 @@ module Protos
5
5
  class Actions < Component
6
6
  # DOCS: Area for actions (e.g buttons) within a carousel
7
7
 
8
- def template(&block)
9
- div(**attrs, &block)
8
+ def view_template(&)
9
+ div(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -5,8 +5,8 @@ module Protos
5
5
  class Item < Component
6
6
  # DOCS: A single item within a carousel
7
7
 
8
- def template(&block)
9
- div(**attrs, &block)
8
+ def view_template(&)
9
+ div(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -16,17 +16,13 @@ module Protos
16
16
  :end
17
17
  )
18
18
 
19
- def template(&block)
20
- div(**attrs, &block)
19
+ def view_template(&)
20
+ div(**attrs, &)
21
21
  end
22
22
 
23
- def item(...)
24
- Item.new(...)
25
- end
23
+ def item(...) = render Item.new(...)
26
24
 
27
- def actions(...)
28
- Actions.new(...)
29
- end
25
+ def actions(...) = render Actions.new(...)
30
26
 
31
27
  private
32
28
 
@@ -20,8 +20,8 @@ module Protos
20
20
  :error
21
21
  )
22
22
 
23
- def template(&block)
24
- div(**attrs, &block)
23
+ def view_template(&)
24
+ div(**attrs, &)
25
25
  end
26
26
 
27
27
  private
@@ -5,8 +5,8 @@ module Protos
5
5
  class Footer < Component
6
6
  # DOCS: The footer of a chat bubble
7
7
 
8
- def template(&block)
9
- div(**attrs, &block)
8
+ def view_template(&)
9
+ div(**attrs, &)
10
10
  end
11
11
 
12
12
  private
@@ -6,8 +6,8 @@ module Protos
6
6
  # DOCS: The header of a chat bubble. This is typically used to display the
7
7
  # name of the user who sent the message.
8
8
 
9
- def template(&block)
10
- div(**attrs, &block)
9
+ def view_template(&)
10
+ div(**attrs, &)
11
11
  end
12
12
 
13
13
  private