protos 0.3.0 → 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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -5
- data/CHANGELOG.md +11 -0
- data/README.md +26 -7
- data/benchmarks/.keep +0 -0
- data/benchmarks/table.txt +12 -0
- data/examples/list.rb +2 -0
- data/lib/protos/accordion/item.rb +5 -6
- data/lib/protos/accordion.rb +6 -10
- data/lib/protos/alert/actions.rb +2 -2
- data/lib/protos/alert/icon.rb +2 -2
- data/lib/protos/alert.rb +4 -8
- data/lib/protos/attributes.rb +7 -8
- data/lib/protos/breadcrumbs/crumb.rb +2 -2
- data/lib/protos/breadcrumbs.rb +1 -3
- data/lib/protos/card/actions.rb +2 -2
- data/lib/protos/card/body.rb +2 -2
- data/lib/protos/card/image.rb +2 -2
- data/lib/protos/card/title.rb +2 -2
- data/lib/protos/card.rb +6 -14
- data/lib/protos/carousel/actions.rb +2 -2
- data/lib/protos/carousel/item.rb +2 -2
- data/lib/protos/carousel.rb +4 -8
- data/lib/protos/chat_bubble/content.rb +2 -2
- data/lib/protos/chat_bubble/footer.rb +2 -2
- data/lib/protos/chat_bubble/header.rb +2 -2
- data/lib/protos/chat_bubble/image.rb +2 -2
- data/lib/protos/chat_bubble.rb +6 -14
- data/lib/protos/collapse/content.rb +2 -2
- data/lib/protos/collapse/title.rb +3 -3
- data/lib/protos/collapse.rb +2 -6
- data/lib/protos/combobox.rb +8 -24
- data/lib/protos/command/empty.rb +2 -2
- data/lib/protos/command/item.rb +2 -2
- data/lib/protos/command/list.rb +2 -2
- data/lib/protos/command/title.rb +2 -2
- data/lib/protos/command/trigger.rb +2 -2
- data/lib/protos/command.rb +10 -26
- data/lib/protos/component.rb +21 -30
- data/lib/protos/drawer/content.rb +2 -2
- data/lib/protos/drawer/trigger.rb +2 -2
- data/lib/protos/drawer.rb +3 -9
- data/lib/protos/dropdown/item.rb +2 -2
- data/lib/protos/dropdown.rb +3 -9
- data/lib/protos/hero/content.rb +2 -2
- data/lib/protos/hero/overlay.rb +2 -2
- data/lib/protos/hero.rb +4 -8
- data/lib/protos/list/item.rb +2 -2
- data/lib/protos/list.rb +3 -5
- data/lib/protos/modal/trigger.rb +2 -2
- data/lib/protos/modal.rb +5 -11
- data/lib/protos/popover/content.rb +2 -0
- data/lib/protos/popover/trigger.rb +2 -2
- data/lib/protos/popover.rb +4 -8
- data/lib/protos/stats/actions.rb +2 -2
- data/lib/protos/stats/description.rb +2 -2
- data/lib/protos/stats/figure.rb +2 -2
- data/lib/protos/stats/stat.rb +2 -2
- data/lib/protos/stats/title.rb +2 -2
- data/lib/protos/stats/value.rb +2 -2
- data/lib/protos/stats.rb +8 -20
- data/lib/protos/swap/off.rb +2 -2
- data/lib/protos/swap/on.rb +2 -2
- data/lib/protos/swap.rb +2 -6
- data/lib/protos/table/body.rb +2 -2
- data/lib/protos/table/caption.rb +3 -3
- data/lib/protos/table/cell.rb +2 -2
- data/lib/protos/table/footer.rb +2 -2
- data/lib/protos/table/head.rb +2 -2
- data/lib/protos/table/header.rb +2 -2
- data/lib/protos/table/row.rb +2 -2
- data/lib/protos/table.rb +7 -21
- data/lib/protos/tabs/tab.rb +3 -3
- data/lib/protos/tabs.rb +3 -5
- data/lib/protos/theme.rb +34 -45
- data/lib/protos/timeline/center.rb +2 -2
- data/lib/protos/timeline/item.rb +2 -2
- data/lib/protos/timeline/left.rb +2 -2
- data/lib/protos/timeline/right.rb +2 -2
- data/lib/protos/timeline.rb +6 -14
- data/lib/protos/toast/close_button.rb +1 -0
- data/lib/protos/toast.rb +3 -5
- data/lib/protos/token_list.rb +18 -31
- data/lib/protos/typography/heading.rb +2 -2
- data/lib/protos/typography/inline_link.rb +3 -3
- data/lib/protos/typography/paragraph.rb +2 -2
- data/lib/protos/typography.rb +12 -12
- data/lib/protos/version.rb +1 -1
- data/protos.gemspec +14 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e1c2bbb97997971d3380fb5846b8720a01d50d61942a9dea5a00e5d19d2c416
|
4
|
+
data.tar.gz: 10c0adb3dfeef8488ae235b0b7d4ec9567f7011ec5bbe0707d33bff3d6cc0049
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
12
|
-
|
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
@@ -49,7 +49,7 @@ depending on their context.
|
|
49
49
|
|
50
50
|
```ruby
|
51
51
|
class List < Protos::Component
|
52
|
-
def
|
52
|
+
def view_template
|
53
53
|
ul(class: css[:list]) do
|
54
54
|
li(class: css[:item]) { "Item 1" }
|
55
55
|
li(class: css[:item]) { "Item 2" }
|
@@ -152,7 +152,7 @@ By doing this we enable 2 main conveniences:
|
|
152
152
|
|
153
153
|
```ruby
|
154
154
|
class List < Protos::Component
|
155
|
-
def
|
155
|
+
def view_template
|
156
156
|
ul(**attrs) do
|
157
157
|
# ...
|
158
158
|
end
|
@@ -238,7 +238,7 @@ Here is an example of a small navbar component:
|
|
238
238
|
require "protos"
|
239
239
|
|
240
240
|
class Navbar < Protos::Component
|
241
|
-
def
|
241
|
+
def view_template
|
242
242
|
# **attrs will add:
|
243
243
|
# - Any html options defined on the component initialization such as data,
|
244
244
|
# role, for, etc..
|
@@ -375,11 +375,11 @@ import "protos-stimulus"
|
|
375
375
|
Then you can use the components in your apps.
|
376
376
|
|
377
377
|
```ruby
|
378
|
-
|
379
|
-
|
380
|
-
|
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" }
|
381
381
|
span { "This is some more content" }
|
382
|
-
|
382
|
+
card.actions do
|
383
383
|
button(class: "btn btn-primary") { "Action 1" }
|
384
384
|
end
|
385
385
|
end
|
@@ -657,6 +657,25 @@ git commits and the created tag, and push the `.gem` file to
|
|
657
657
|
Bug reports and pull requests are welcome on GitHub at
|
658
658
|
https://github.com/inhouse-work/protos.
|
659
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
|
+
|
660
679
|
## License
|
661
680
|
|
662
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
@@ -9,7 +9,7 @@ module Protos
|
|
9
9
|
|
10
10
|
def view_template(&block)
|
11
11
|
li(**attrs) do
|
12
|
-
render
|
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
15
|
input(type: :radio, name: id, form: "", autocomplete: :off)
|
@@ -20,11 +20,10 @@ module Protos
|
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
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
|
data/lib/protos/accordion.rb
CHANGED
@@ -10,20 +10,16 @@ module Protos
|
|
10
10
|
option :id,
|
11
11
|
default: -> { "collapse-#{SecureRandom.hex(4)}" }
|
12
12
|
|
13
|
-
def view_template(&
|
14
|
-
ul(**attrs, &
|
13
|
+
def view_template(&)
|
14
|
+
ul(**attrs, &)
|
15
15
|
end
|
16
16
|
|
17
|
-
def item(
|
18
|
-
Item.new(id:, **kwargs)
|
19
|
-
end
|
17
|
+
def item(*, **, &) = render Item.new(*, id:, **, &)
|
20
18
|
|
21
|
-
def
|
22
|
-
Collapse::Title.new(*args, id:, **kwargs, &block)
|
23
|
-
end
|
19
|
+
def content(...) = render Collapse::Content.new(...)
|
24
20
|
|
25
|
-
def
|
26
|
-
Collapse::
|
21
|
+
def title(*, **, &)
|
22
|
+
render Collapse::Title.new(*, id:, **, &)
|
27
23
|
end
|
28
24
|
|
29
25
|
private
|
data/lib/protos/alert/actions.rb
CHANGED
data/lib/protos/alert/icon.rb
CHANGED
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 view_template(&
|
19
|
-
div(**attrs, &
|
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
|
|
data/lib/protos/attributes.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
24
|
-
|
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(
|
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/breadcrumbs.rb
CHANGED
data/lib/protos/card/actions.rb
CHANGED
data/lib/protos/card/body.rb
CHANGED
data/lib/protos/card/image.rb
CHANGED
data/lib/protos/card/title.rb
CHANGED
data/lib/protos/card.rb
CHANGED
@@ -14,25 +14,17 @@ module Protos
|
|
14
14
|
default: -> { :default },
|
15
15
|
reader: false
|
16
16
|
|
17
|
-
def view_template(&
|
18
|
-
article(**attrs, &
|
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
|
|
data/lib/protos/carousel/item.rb
CHANGED
data/lib/protos/carousel.rb
CHANGED
@@ -16,17 +16,13 @@ module Protos
|
|
16
16
|
:end
|
17
17
|
)
|
18
18
|
|
19
|
-
def view_template(&
|
20
|
-
div(**attrs, &
|
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
|
|
data/lib/protos/chat_bubble.rb
CHANGED
@@ -15,25 +15,17 @@ module Protos
|
|
15
15
|
:end
|
16
16
|
)
|
17
17
|
|
18
|
-
def view_template(&
|
19
|
-
div(**attrs, &
|
18
|
+
def view_template(&)
|
19
|
+
div(**attrs, &)
|
20
20
|
end
|
21
21
|
|
22
|
-
def content(...)
|
23
|
-
Content.new(...)
|
24
|
-
end
|
22
|
+
def content(...) = render Content.new(...)
|
25
23
|
|
26
|
-
def footer(...)
|
27
|
-
Footer.new(...)
|
28
|
-
end
|
24
|
+
def footer(...) = render Footer.new(...)
|
29
25
|
|
30
|
-
def header(...)
|
31
|
-
Header.new(...)
|
32
|
-
end
|
26
|
+
def header(...) = render Header.new(...)
|
33
27
|
|
34
|
-
def image(...)
|
35
|
-
Image.new(...)
|
36
|
-
end
|
28
|
+
def image(...) = render Image.new(...)
|
37
29
|
|
38
30
|
private
|
39
31
|
|
@@ -10,11 +10,11 @@ module Protos
|
|
10
10
|
reader: false,
|
11
11
|
default: -> { "" }
|
12
12
|
|
13
|
-
def view_template(&
|
13
|
+
def view_template(&)
|
14
14
|
if @id.size.positive?
|
15
|
-
label(for: @id, **attrs, &
|
15
|
+
label(for: @id, **attrs, &)
|
16
16
|
else
|
17
|
-
div(**attrs, &
|
17
|
+
div(**attrs, &)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/lib/protos/collapse.rb
CHANGED
@@ -18,13 +18,9 @@ module Protos
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def title(
|
22
|
-
Title.new(*args, id:, **kwargs, &block)
|
23
|
-
end
|
21
|
+
def title(*, **, &) = render Title.new(*, id:, **, &)
|
24
22
|
|
25
|
-
def content(...)
|
26
|
-
Content.new(...)
|
27
|
-
end
|
23
|
+
def content(...) = render Content.new(...)
|
28
24
|
|
29
25
|
private
|
30
26
|
|
data/lib/protos/combobox.rb
CHANGED
@@ -11,37 +11,21 @@ module Protos
|
|
11
11
|
reader: false,
|
12
12
|
type: TriggerTypes | Types::Array.of(TriggerTypes)
|
13
13
|
|
14
|
-
def trigger(...)
|
15
|
-
Popover::Trigger.new(...)
|
16
|
-
end
|
14
|
+
def trigger(...) = render Popover::Trigger.new(...)
|
17
15
|
|
18
|
-
def content(...)
|
19
|
-
Popover::Content.new(...)
|
20
|
-
end
|
16
|
+
def content(...) = render Popover::Content.new(...)
|
21
17
|
|
22
|
-
def input(...)
|
23
|
-
Command::Input.new(...)
|
24
|
-
end
|
18
|
+
def input(...) = render Command::Input.new(...)
|
25
19
|
|
26
|
-
def group(...)
|
27
|
-
Command::Group.new(...)
|
28
|
-
end
|
20
|
+
def group(...) = render Command::Group.new(...)
|
29
21
|
|
30
|
-
def item(...)
|
31
|
-
Command::Item.new(...)
|
32
|
-
end
|
22
|
+
def item(...) = render Command::Item.new(...)
|
33
23
|
|
34
|
-
def list(...)
|
35
|
-
Command::List.new(...)
|
36
|
-
end
|
24
|
+
def list(...) = render Command::List.new(...)
|
37
25
|
|
38
|
-
def title(...)
|
39
|
-
Command::Title.new(...)
|
40
|
-
end
|
26
|
+
def title(...) = render Command::Title.new(...)
|
41
27
|
|
42
|
-
def empty(...)
|
43
|
-
Command::Empty.new(...)
|
44
|
-
end
|
28
|
+
def empty(...) = render Command::Empty.new(...)
|
45
29
|
|
46
30
|
private
|
47
31
|
|
data/lib/protos/command/empty.rb
CHANGED
data/lib/protos/command/item.rb
CHANGED
data/lib/protos/command/list.rb
CHANGED
data/lib/protos/command/title.rb
CHANGED