protos 0.4.1 → 0.4.2

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/README.md +2 -1
  4. data/TODO.md +18 -0
  5. data/lib/protos/accordion/item.rb +2 -2
  6. data/lib/protos/accordion.rb +3 -9
  7. data/lib/protos/alert/actions.rb +1 -1
  8. data/lib/protos/alert/icon.rb +1 -1
  9. data/lib/protos/alert.rb +15 -13
  10. data/lib/protos/attributes.rb +3 -0
  11. data/lib/protos/avatar.rb +60 -32
  12. data/lib/protos/breadcrumbs.rb +1 -1
  13. data/lib/protos/card/actions.rb +1 -1
  14. data/lib/protos/card/body.rb +1 -1
  15. data/lib/protos/card/title.rb +1 -1
  16. data/lib/protos/card.rb +9 -7
  17. data/lib/protos/carousel/actions.rb +10 -10
  18. data/lib/protos/carousel/item.rb +1 -1
  19. data/lib/protos/carousel.rb +7 -5
  20. data/lib/protos/chat_bubble/content.rb +17 -12
  21. data/lib/protos/chat_bubble/footer.rb +1 -1
  22. data/lib/protos/chat_bubble/header.rb +1 -1
  23. data/lib/protos/chat_bubble/image.rb +1 -1
  24. data/lib/protos/chat_bubble.rb +10 -5
  25. data/lib/protos/collapse/content.rb +1 -1
  26. data/lib/protos/collapse/title.rb +1 -1
  27. data/lib/protos/collapse.rb +5 -1
  28. data/lib/protos/combobox.rb +1 -1
  29. data/lib/protos/command/dialog.rb +8 -8
  30. data/lib/protos/command/empty.rb +1 -1
  31. data/lib/protos/command/input.rb +12 -12
  32. data/lib/protos/command/list.rb +1 -1
  33. data/lib/protos/command/title.rb +1 -1
  34. data/lib/protos/drawer/content.rb +1 -1
  35. data/lib/protos/drawer/side.rb +6 -6
  36. data/lib/protos/drawer/trigger.rb +1 -1
  37. data/lib/protos/drawer.rb +2 -2
  38. data/lib/protos/dropdown/menu.rb +7 -7
  39. data/lib/protos/dropdown.rb +2 -2
  40. data/lib/protos/hero/content.rb +1 -1
  41. data/lib/protos/hero/overlay.rb +1 -1
  42. data/lib/protos/hero.rb +1 -1
  43. data/lib/protos/list/item.rb +4 -4
  44. data/lib/protos/list.rb +1 -4
  45. data/lib/protos/modal/close_button.rb +1 -4
  46. data/lib/protos/modal/dialog.rb +17 -12
  47. data/lib/protos/popover.rb +6 -6
  48. data/lib/protos/stats/actions.rb +1 -1
  49. data/lib/protos/stats/description.rb +1 -1
  50. data/lib/protos/stats/figure.rb +1 -1
  51. data/lib/protos/stats/stat.rb +1 -1
  52. data/lib/protos/stats/title.rb +1 -1
  53. data/lib/protos/stats/value.rb +1 -1
  54. data/lib/protos/stats.rb +1 -1
  55. data/lib/protos/steps/step.rb +49 -0
  56. data/lib/protos/steps.rb +27 -0
  57. data/lib/protos/swap/off.rb +1 -1
  58. data/lib/protos/swap/on.rb +1 -1
  59. data/lib/protos/swap.rb +1 -1
  60. data/lib/protos/table/caption.rb +15 -1
  61. data/lib/protos/table/cell.rb +13 -8
  62. data/lib/protos/table/head.rb +11 -18
  63. data/lib/protos/table.rb +9 -7
  64. data/lib/protos/tabs/tab.rb +1 -1
  65. data/lib/protos/tabs.rb +13 -7
  66. data/lib/protos/timeline/center.rb +1 -1
  67. data/lib/protos/timeline/left.rb +1 -1
  68. data/lib/protos/timeline/right.rb +1 -1
  69. data/lib/protos/toast/close_button.rb +1 -1
  70. data/lib/protos/toast.rb +19 -17
  71. data/lib/protos/token_list.rb +7 -1
  72. data/lib/protos/types.rb +0 -25
  73. data/lib/protos/typography/heading.rb +15 -13
  74. data/lib/protos/typography/inline_link.rb +6 -6
  75. data/lib/protos/typography/paragraph.rb +3 -3
  76. data/lib/protos/version.rb +1 -1
  77. data/lib/protos.rb +3 -0
  78. metadata +5 -2
@@ -6,10 +6,10 @@ module Protos
6
6
  # DOCS: The search input for the command palette
7
7
 
8
8
  option :placeholder,
9
+ reader: :private,
9
10
  default: -> {
10
11
  "Type a command or search..."
11
- },
12
- reader: :private
12
+ }
13
13
 
14
14
  def view_template(&block)
15
15
  div(**attrs) do
@@ -30,16 +30,16 @@ module Protos
30
30
 
31
31
  def theme
32
32
  {
33
- container: tokens("form-control"),
34
- label: tokens(
35
- "input",
36
- "input-bordered",
37
- "flex",
38
- "items-center",
39
- "gap-2"
40
- ),
41
- input: tokens("grow", "bg-transparent"),
42
- icon: tokens("flex", "place-items-center")
33
+ container: "form-control",
34
+ input: "grow bg-transparent",
35
+ icon: "flex place-items-center",
36
+ label: %w[
37
+ input
38
+ input-bordered
39
+ flex
40
+ items-center
41
+ gap-2
42
+ ]
43
43
  }
44
44
  end
45
45
  end
@@ -19,7 +19,7 @@ module Protos
19
19
 
20
20
  def theme
21
21
  {
22
- container: tokens("menu")
22
+ container: "menu"
23
23
  }
24
24
  end
25
25
  end
@@ -14,7 +14,7 @@ module Protos
14
14
 
15
15
  def theme
16
16
  {
17
- container: tokens("menu-title")
17
+ container: "menu-title"
18
18
  }
19
19
  end
20
20
  end
@@ -14,7 +14,7 @@ module Protos
14
14
 
15
15
  def theme
16
16
  {
17
- container: tokens("drawer-content")
17
+ container: "drawer-content"
18
18
  }
19
19
  end
20
20
  end
@@ -19,12 +19,12 @@ module Protos
19
19
 
20
20
  def theme
21
21
  {
22
- container: tokens(
23
- "drawer-side",
24
- "z-20",
25
- "peer-checked:backdrop-blur-sm"
26
- ),
27
- toggle: tokens("drawer-overlay")
22
+ container: %w[
23
+ drawer-side
24
+ z-20
25
+ peer-checked:backdrop-blur-sm
26
+ ],
27
+ toggle: "drawer-overlay"
28
28
  }
29
29
  end
30
30
  end
@@ -16,7 +16,7 @@ module Protos
16
16
 
17
17
  def theme
18
18
  {
19
- container: tokens("drawer-button")
19
+ container: "drawer-button"
20
20
  }
21
21
  end
22
22
  end
data/lib/protos/drawer.rb CHANGED
@@ -26,8 +26,8 @@ module Protos
26
26
 
27
27
  def theme
28
28
  {
29
- container: tokens("drawer"),
30
- toggle: tokens("drawer-toggle", "peer")
29
+ container: "drawer",
30
+ toggle: "drawer-toggle peer"
31
31
  }
32
32
  end
33
33
  end
@@ -17,13 +17,13 @@ module Protos
17
17
 
18
18
  def theme
19
19
  {
20
- container: tokens(
21
- "menu",
22
- "dropdown-content",
23
- "z-10",
24
- "bg-base-100",
25
- "rounded-box"
26
- )
20
+ container: %w[
21
+ menu
22
+ dropdown-content
23
+ z-10
24
+ bg-base-100
25
+ rounded-box
26
+ ]
27
27
  }
28
28
  end
29
29
  end
@@ -11,13 +11,13 @@ module Protos
11
11
  # tricky to get right and we felt the dependency tradeoff was worthwhile.
12
12
 
13
13
  option :position,
14
- type: PositionTypes,
14
+ type: Popover::Positions,
15
15
  default: -> { :bottom },
16
16
  reader: false
17
17
  option :trigger,
18
18
  default: -> { :click },
19
19
  reader: false,
20
- type: TriggerTypes | Types::Array.of(TriggerTypes)
20
+ type: Popover::Triggers | Types::Array.of(Popover::Triggers)
21
21
 
22
22
  def item(...) = render Item.new(...)
23
23
 
@@ -14,7 +14,7 @@ module Protos
14
14
 
15
15
  def theme
16
16
  {
17
- container: tokens("hero-content")
17
+ container: "hero-content"
18
18
  }
19
19
  end
20
20
  end
@@ -15,7 +15,7 @@ module Protos
15
15
 
16
16
  def theme
17
17
  {
18
- container: tokens("hero-overlay")
18
+ container: "hero-overlay"
19
19
  }
20
20
  end
21
21
  end
data/lib/protos/hero.rb CHANGED
@@ -18,7 +18,7 @@ module Protos
18
18
 
19
19
  def theme
20
20
  {
21
- container: tokens("hero")
21
+ container: "hero"
22
22
  }
23
23
  end
24
24
  end
@@ -15,10 +15,10 @@ module Protos
15
15
 
16
16
  def theme
17
17
  {
18
- container: tokens(
19
- "join-item",
20
- "[&:not(:first-child)]:border-t-0"
21
- )
18
+ container: %w[
19
+ join-item
20
+ [&:not(:first-child)]:border-t-0
21
+ ]
22
22
  }
23
23
  end
24
24
  end
data/lib/protos/list.rb CHANGED
@@ -17,10 +17,7 @@ module Protos
17
17
 
18
18
  def theme
19
19
  {
20
- container: tokens(
21
- "join",
22
- "join-vertical"
23
- )
20
+ container: "join join-vertical"
24
21
  }
25
22
  end
26
23
 
@@ -7,10 +7,7 @@ module Protos
7
7
 
8
8
  def view_template(&block)
9
9
  form(method: :dialog, class: css[:form]) do
10
- button(
11
- **attrs,
12
- &block
13
- )
10
+ button(**attrs, &block)
14
11
  end
15
12
  end
16
13
  end
@@ -14,18 +14,6 @@ module Protos
14
14
 
15
15
  private
16
16
 
17
- def theme
18
- {
19
- container: tokens(
20
- "modal",
21
- "modal-bottom",
22
- "backdrop-blur-sm",
23
- "sm:modal-middle"
24
- ),
25
- modal: tokens("modal-box", "flex", "flex-col", "gap-xs")
26
- }
27
- end
28
-
29
17
  def attrs
30
18
  @attrs ||= build_attrs(
31
19
  {
@@ -33,6 +21,23 @@ module Protos
33
21
  }
34
22
  )
35
23
  end
24
+
25
+ def theme
26
+ {
27
+ container: %w[
28
+ modal
29
+ modal-bottom
30
+ backdrop-blur-sm
31
+ sm:modal-middle
32
+ ],
33
+ modal: %w[
34
+ modal-box
35
+ flex
36
+ flex-col
37
+ gap-xs
38
+ ]
39
+ }
40
+ end
36
41
  end
37
42
  end
38
43
  end
@@ -12,7 +12,7 @@ module Protos
12
12
  # Tippy.js options can be passed in via the `options` attribute or, more
13
13
  # conveniently by the typed options listed below.
14
14
 
15
- PositionTypes = Types::Coercible::Symbol.enum(
15
+ Positions = Types::Coercible::Symbol.enum(
16
16
  :top,
17
17
  :top_start,
18
18
  :top_end,
@@ -27,7 +27,7 @@ module Protos
27
27
  :left_end
28
28
  )
29
29
 
30
- AnimationTypes = Types::Coercible::Symbol.enum(
30
+ Animations = Types::Coercible::Symbol.enum(
31
31
  :fade,
32
32
  :shift_away,
33
33
  :shift_away_subtle,
@@ -43,7 +43,7 @@ module Protos
43
43
  :perspective_extreme
44
44
  )
45
45
 
46
- TriggerTypes = Types::Coercible::Symbol.enum(
46
+ Triggers = Types::Coercible::Symbol.enum(
47
47
  :focus,
48
48
  :mouseenter,
49
49
  :click,
@@ -52,11 +52,11 @@ module Protos
52
52
  )
53
53
 
54
54
  option :position,
55
- type: PositionTypes,
55
+ type: Positions,
56
56
  default: -> { :top },
57
57
  reader: false
58
58
  option :animation,
59
- type: AnimationTypes,
59
+ type: Animations,
60
60
  default: -> { :fade },
61
61
  reader: false
62
62
  option :duration,
@@ -78,7 +78,7 @@ module Protos
78
78
  option :trigger,
79
79
  default: -> { %i[mouseenter focus] },
80
80
  reader: false,
81
- type: TriggerTypes | Types::Array.of(TriggerTypes)
81
+ type: Triggers | Types::Array.of(Triggers)
82
82
 
83
83
  def view_template(&)
84
84
  div(**attrs, &)
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat-actions")
16
+ container: "stat-actions"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat-desc")
16
+ container: "stat-desc"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat-figure")
16
+ container: "stat-figure"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat")
16
+ container: "stat"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat-title")
16
+ container: "stat-title"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("stat-value")
16
+ container: "stat-value"
17
17
  }
18
18
  end
19
19
  end
data/lib/protos/stats.rb CHANGED
@@ -25,7 +25,7 @@ module Protos
25
25
 
26
26
  def theme
27
27
  {
28
- container: tokens("stats")
28
+ container: "stats"
29
29
  }
30
30
  end
31
31
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Protos
4
+ class Steps
5
+ class Step < Protos::Component
6
+ # DOCS: Step component that contains a single step in a list of steps
7
+
8
+ Styles = Types::Coercible::Symbol.enum(
9
+ :default,
10
+ :primary,
11
+ :secondary,
12
+ :accent,
13
+ :info,
14
+ :success,
15
+ :warning,
16
+ :error
17
+ )
18
+
19
+ STYLES = {
20
+ default: "",
21
+ primary: "step-primary",
22
+ secondary: "step-secondary",
23
+ accent: "step-accent",
24
+ info: "step-info",
25
+ success: "step-success",
26
+ warning: "step-warning",
27
+ error: "step-error"
28
+ }.freeze
29
+
30
+ option :type, reader: false, type: Styles, default: -> { :default }
31
+
32
+ def view_template(&)
33
+ li(**attrs, &)
34
+ end
35
+
36
+ private
37
+
38
+ def type
39
+ STYLES.fetch(@type)
40
+ end
41
+
42
+ def theme
43
+ {
44
+ container: "step #{type}"
45
+ }
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Protos
4
+ class Steps < Component
5
+ # DOCS: Steps can be used to show a list of steps in a process.
6
+ # https://daisyui.com/components/steps/
7
+
8
+ option :vertical, type: Types::Bool, default: -> { false }
9
+
10
+ def view_template(&)
11
+ ol(**attrs, &)
12
+ end
13
+
14
+ def step(...) = render Step.new(...)
15
+
16
+ private
17
+
18
+ def theme
19
+ {
20
+ container: tokens(
21
+ "steps",
22
+ vertical: "steps-vertical"
23
+ )
24
+ }
25
+ end
26
+ end
27
+ end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("swap-off")
16
+ container: "swap-off"
17
17
  }
18
18
  end
19
19
  end
@@ -13,7 +13,7 @@ module Protos
13
13
 
14
14
  def theme
15
15
  {
16
- container: tokens("swap-on")
16
+ container: "swap-on"
17
17
  }
18
18
  end
19
19
  end
data/lib/protos/swap.rb CHANGED
@@ -21,7 +21,7 @@ module Protos
21
21
 
22
22
  def theme
23
23
  {
24
- container: tokens("swap")
24
+ container: "swap"
25
25
  }
26
26
  end
27
27
  end
@@ -5,15 +5,29 @@ module Protos
5
5
  class Caption < Component
6
6
  # DOCS: The caption of a table
7
7
 
8
+ SIDES = {
9
+ bottom: "caption-bottom",
10
+ top: "caption-top"
11
+ }.freeze
12
+
13
+ option :side,
14
+ reader: false,
15
+ type: Types::Coercible::Symbol.enum(:bottom, :top),
16
+ default: -> { :bottom }
17
+
8
18
  def view_template(&)
9
19
  caption(**attrs, &)
10
20
  end
11
21
 
12
22
  private
13
23
 
24
+ def side
25
+ SIDES.fetch(@side)
26
+ end
27
+
14
28
  def theme
15
29
  {
16
- container: tokens("caption-bottom")
30
+ container: side
17
31
  }
18
32
  end
19
33
  end
@@ -5,11 +5,16 @@ module Protos
5
5
  class Cell < Component
6
6
  # DOCS: A single cell in a table
7
7
 
8
+ ALLIGNMENT = {
9
+ left: "text-left",
10
+ right: "text-right",
11
+ center: "text-center"
12
+ }.freeze
13
+
8
14
  option :align,
9
15
  type: Types::Coercible::Symbol.enum(:left, :center, :right),
10
- default: -> {
11
- :left
12
- }
16
+ reader: false,
17
+ default: -> { :left }
13
18
 
14
19
  def view_template(&)
15
20
  td(**attrs, &)
@@ -29,13 +34,13 @@ module Protos
29
34
  align == :right
30
35
  end
31
36
 
37
+ def align
38
+ ALLIGNMENT.fetch(@align)
39
+ end
40
+
32
41
  def theme
33
42
  {
34
- container: tokens(
35
- left?: "text-left",
36
- right?: "text-right",
37
- center?: "text-center"
38
- )
43
+ container: align
39
44
  }
40
45
  end
41
46
  end
@@ -5,11 +5,16 @@ module Protos
5
5
  class Head < Component
6
6
  # DOCS: The head of a table
7
7
 
8
+ ALLIGNMENT = {
9
+ left: "text-left",
10
+ right: "text-right",
11
+ center: "text-center"
12
+ }.freeze
13
+
8
14
  option :align,
9
15
  type: Types::Coercible::Symbol.enum(:left, :center, :right),
10
- default: -> {
11
- :left
12
- }
16
+ reader: false,
17
+ default: -> { :left }
13
18
 
14
19
  def view_template(&)
15
20
  th(**attrs, &)
@@ -17,25 +22,13 @@ module Protos
17
22
 
18
23
  private
19
24
 
20
- def left?
21
- align == :left
22
- end
23
-
24
- def center?
25
- align == :center
26
- end
27
-
28
- def right?
29
- align == :right
25
+ def align
26
+ ALLIGNMENT.fetch(@align)
30
27
  end
31
28
 
32
29
  def theme
33
30
  {
34
- container: tokens(
35
- left?: "text-left",
36
- right?: "text-right",
37
- center?: "text-center"
38
- )
31
+ container: align
39
32
  }
40
33
  end
41
34
  end
data/lib/protos/table.rb CHANGED
@@ -5,6 +5,13 @@ module Protos
5
5
  # DOCS: A table component
6
6
  # https://daisyui.com/components/table/
7
7
 
8
+ SIZES = {
9
+ xs: "table-xs",
10
+ sm: "table-sm",
11
+ md: "table-md",
12
+ lg: "table-lg"
13
+ }.freeze
14
+
8
15
  option :pin_rows, default: -> { false }, type: Types::Bool
9
16
  option :pin_columns, default: -> { false }, type: Types::Bool
10
17
  option :striped, default: -> { false }, type: Types::Bool
@@ -41,17 +48,12 @@ module Protos
41
48
  private
42
49
 
43
50
  def size
44
- {
45
- xs: "table-xs",
46
- sm: "table-sm",
47
- md: "table-md",
48
- lg: "table-lg"
49
- }.fetch(@size)
51
+ SIZES.fetch(@size)
50
52
  end
51
53
 
52
54
  def theme
53
55
  {
54
- container: tokens("w-full", "overflow-x-auto"),
56
+ container: "w-full overflow-x-auto",
55
57
  table: tokens(
56
58
  "table",
57
59
  size,
@@ -32,7 +32,7 @@ module Protos
32
32
 
33
33
  def theme
34
34
  {
35
- container: tokens("tab-content"),
35
+ container: "tab-content",
36
36
  input: tokens(
37
37
  "tab",
38
38
  disabled: "tab-disabled",