ariadne_view_components 0.0.34-aarch64-linux → 0.0.36-aarch64-linux

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -5
  3. data/README.md +2 -2
  4. data/app/components/ariadne/avatar_component.rb +1 -1
  5. data/app/components/ariadne/avatar_stack_component.rb +7 -7
  6. data/app/components/ariadne/base_button.rb +2 -2
  7. data/app/components/ariadne/base_component.rb +2 -2
  8. data/app/components/ariadne/blankslate_component.rb +9 -9
  9. data/app/components/ariadne/body_component.rb +1 -1
  10. data/app/components/ariadne/button_component.rb +8 -6
  11. data/app/components/ariadne/clipboard_copy_component.rb +1 -1
  12. data/app/components/ariadne/comment_component/comment_component.html.erb +6 -6
  13. data/app/components/ariadne/comment_component.rb +5 -5
  14. data/app/components/ariadne/component.rb +0 -1
  15. data/app/components/ariadne/container_component.rb +1 -1
  16. data/app/components/ariadne/counter_component.rb +1 -1
  17. data/app/components/ariadne/details_component.rb +10 -9
  18. data/app/components/ariadne/dropdown/menu_component.rb +3 -3
  19. data/app/components/ariadne/dropdown_component/dropdown_component.html.erb +2 -2
  20. data/app/components/ariadne/dropdown_component.rb +52 -52
  21. data/app/components/ariadne/flash_component.rb +5 -5
  22. data/app/components/ariadne/flex_component/flex_component.html.erb +5 -0
  23. data/app/components/ariadne/flex_component.rb +10 -3
  24. data/app/components/ariadne/footer_component.rb +2 -2
  25. data/app/components/ariadne/grid_component.rb +4 -8
  26. data/app/components/ariadne/header_component.rb +7 -7
  27. data/app/components/ariadne/heading_component.rb +1 -1
  28. data/app/components/ariadne/heroicon_component.rb +2 -2
  29. data/app/components/ariadne/inline_flex_component.rb +7 -7
  30. data/app/components/ariadne/link_component.rb +3 -3
  31. data/app/components/ariadne/list_component.rb +10 -4
  32. data/app/components/ariadne/narrow_container_component.rb +1 -1
  33. data/app/components/ariadne/panel_bar_component.rb +3 -3
  34. data/app/components/ariadne/pill_component.rb +1 -1
  35. data/app/components/ariadne/rich_text_area_component/rich-text-area-component.ts +4 -4
  36. data/app/components/ariadne/rich_text_area_component.rb +1 -1
  37. data/app/components/ariadne/slideover_component.rb +3 -3
  38. data/app/components/ariadne/tab_component.rb +1 -1
  39. data/app/components/ariadne/tab_container_component/tab-container-component.ts +1 -1
  40. data/app/components/ariadne/tab_container_component.rb +7 -7
  41. data/app/components/ariadne/tab_nav_component.rb +5 -5
  42. data/app/components/ariadne/table_nav_component.rb +42 -42
  43. data/app/components/ariadne/time_ago_component.rb +1 -1
  44. data/app/components/ariadne/timeline_component.rb +1 -1
  45. data/app/components/ariadne/tooltip_component/tooltip-component.ts +5 -5
  46. data/app/components/ariadne/tooltip_component.rb +1 -1
  47. data/app/lib/ariadne/action_view_extensions/form_helper.rb +1 -1
  48. data/app/lib/ariadne/class_name_helper.rb +1 -1
  49. data/app/lib/ariadne/form_builder.rb +10 -10
  50. data/lib/ariadne/view_components/linters/argument_mappers/conversion_error.rb +10 -0
  51. data/lib/ariadne/view_components/linters/autocorrectable.rb +32 -0
  52. data/lib/ariadne/view_components/linters/base_linter.rb +202 -0
  53. data/lib/ariadne/view_components/linters/tag_tree_helpers.rb +76 -0
  54. data/lib/ariadne/view_components/version.rb +2 -1
  55. data/lib/tasks/build.rake +6 -0
  56. data/lib/tasks/coverage.rake +4 -1
  57. data/lib/tasks/docs.rake +5 -1
  58. data/lib/tasks/test.rake +19 -0
  59. data/static/classes.yml +3 -1
  60. metadata +8 -16
  61. data/app/assets/javascripts/ariadne-form-with.d.ts +0 -20
  62. data/app/assets/javascripts/ariadne-form.d.ts +0 -22
  63. data/app/assets/javascripts/ariadne.d.ts +0 -2
  64. data/app/assets/javascripts/ariadne_view_components.js +0 -8
  65. data/app/assets/javascripts/ariadne_view_components.js.map +0 -1
  66. data/app/assets/javascripts/clipboard-copy-component.d.ts +0 -4
  67. data/app/assets/javascripts/comment-component.d.ts +0 -12
  68. data/app/assets/javascripts/rich-text-area-component.d.ts +0 -6
  69. data/app/assets/javascripts/slideover-component.d.ts +0 -9
  70. data/app/assets/javascripts/tab-container-component.d.ts +0 -1
  71. data/app/assets/javascripts/tab-nav-component.d.ts +0 -9
  72. data/app/assets/javascripts/time-ago-component.d.ts +0 -1
  73. data/app/assets/javascripts/time_ago_component.d.ts +0 -1
  74. data/app/assets/javascripts/tooltip-component.d.ts +0 -24
@@ -36,15 +36,15 @@ module Ariadne
36
36
 
37
37
  # @example Default
38
38
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
39
- # <% c.button do %>
39
+ # <% c.with_button do %>
40
40
  # Dropdown
41
41
  # <% end %>
42
42
  #
43
- # <% c.menu do |menu| %>
44
- # <% menu.header { "Header" } %>
45
- # <% menu.item { "Item 1" } %>
46
- # <% menu.item { "Item 2" } %>
47
- # <% menu.item { "Item 3" } %>
43
+ # <% c.with_menu do |menu| %>
44
+ # <% menu.with_header { "Header" } %>
45
+ # <% menu.with_item { "Item 1" } %>
46
+ # <% menu.with_item { "Item 2" } %>
47
+ # <% menu.with_item { "Item 3" } %>
48
48
  # <% end %>
49
49
  # <% end %>
50
50
  #
@@ -54,95 +54,95 @@ module Ariadne
54
54
  # Dividers can be used to separate a group of items. They don't have any content.
55
55
  # @code
56
56
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
57
- # <% c.button do %>
57
+ # <% c.with_button do %>
58
58
  # Dropdown
59
59
  # <% end %>
60
60
  #
61
- # <% c.menu do |menu| %>
62
- # <% menu.header { "Header" } %>
63
- # <%= menu.item { "Item 1" } %>
64
- # <%= menu.item { "Item 2" } %>
65
- # <%= menu.item(divider: true) %>
66
- # <%= menu.item { "Item 3" } %>
67
- # <%= menu.item { "Item 4" } %>
68
- # <%= menu.item(divider: true) %>
69
- # <%= menu.item { "Item 5" } %>
70
- # <%= menu.item { "Item 6" } %>
61
+ # <% c.with_menu do |menu| %>
62
+ # <% menu.with_header { "Header" } %>
63
+ # <%= menu.with_item { "Item 1" } %>
64
+ # <%= menu.with_item { "Item 2" } %>
65
+ # <%= menu.with_item(divider: true) %>
66
+ # <%= menu.with_item { "Item 3" } %>
67
+ # <%= menu.with_item { "Item 4" } %>
68
+ # <%= menu.with_item(divider: true) %>
69
+ # <%= menu.with_item { "Item 5" } %>
70
+ # <%= menu.with_item { "Item 6" } %>
71
71
  # <% end %>
72
72
  # <% end %>
73
73
  #
74
74
  # @example With direction
75
75
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
76
- # <% c.button do %>
76
+ # <% c.with_button do %>
77
77
  # Dropdown
78
78
  # <% end %>
79
79
  #
80
- # <% c.menu(direction: :s) do |menu| %>
80
+ # <% c.with_menu(direction: :s) do |menu| %>
81
81
  # <% menu.header { "Header" } %>
82
- # <%= menu.item { "Item 1" } %>
83
- # <%= menu.item { "Item 2" } %>
84
- # <%= menu.item { "Item 3" } %>
85
- # <%= menu.item { "Item 4" } %>
82
+ # <%= menu.with_item { "Item 1" } %>
83
+ # <%= menu.with_item { "Item 2" } %>
84
+ # <%= menu.with_item { "Item 3" } %>
85
+ # <%= menu.with_item { "Item 4" } %>
86
86
  # <% end %>
87
87
  # <% end %>
88
88
  #
89
89
  # @example With caret
90
90
  # <%= render(Ariadne::DropdownComponent.new(with_caret: true)) do |c| %>
91
- # <% c.button do %>
91
+ # <% c.with_button do %>
92
92
  # Dropdown
93
93
  # <% end %>
94
94
  #
95
- # <% c.menu do |menu| %>
96
- # <% menu.header { "Header" } %>
97
- # <%= menu.item { "Item 1" } %>
98
- # <%= menu.item { "Item 2" } %>
99
- # <%= menu.item { "Item 3" } %>
100
- # <%= menu.item { "Item 4" } %>
95
+ # <% c.with_menu do |menu| %>
96
+ # <% menu.with_header { "Header" } %>
97
+ # <%= menu.with_item { "Item 1" } %>
98
+ # <%= menu.with_item { "Item 2" } %>
99
+ # <%= menu.with_item { "Item 3" } %>
100
+ # <%= menu.with_item { "Item 4" } %>
101
101
  # <% end %>
102
102
  # <% end %>
103
103
  #
104
104
  # @example Customizing the button
105
105
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
106
- # <% c.button(scheme: :info, size: :sm) do %>
106
+ # <% c.with_button(scheme: :info, size: :sm) do %>
107
107
  # Dropdown
108
108
  # <% end %>
109
109
  #
110
- # <% c.menu do |menu| %>
111
- # <% menu.header { "Header" } %>
112
- # <%= menu.item { "Item 1" } %>
113
- # <%= menu.item { "Item 2" } %>
114
- # <%= menu.item { "Item 3" } %>
115
- # <%= menu.item { "Item 4" } %>
110
+ # <% c.with_menu do |menu| %>
111
+ # <% menu.with_header { "Header" } %>
112
+ # <%= menu.with_item { "Item 1" } %>
113
+ # <%= menu.with_item { "Item 2" } %>
114
+ # <%= menu.with_item { "Item 3" } %>
115
+ # <%= menu.with_item { "Item 4" } %>
116
116
  # <% end %>
117
117
  # <% end %>
118
118
  #
119
119
  # @example Menu as list
120
120
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
121
- # <% c.button do %>
121
+ # <% c.with_button do %>
122
122
  # Dropdown
123
123
  # <% end %>
124
124
  #
125
- # <% c.menu(as: :list) do |menu| %>
126
- # <% menu.header { "Header" } %>
127
- # <% menu.item { "Item 1" } %>
128
- # <% menu.item { "Item 2" } %>
129
- # <% menu.item(divider: true) %>
130
- # <% menu.item { "Item 3" } %>
131
- # <% menu.item { "Item 4" } %>
125
+ # <% c.with_menu(as: :list) do |menu| %>
126
+ # <% menu.with_header { "Header" } %>
127
+ # <% menu.with_item { "Item 1" } %>
128
+ # <% menu.with_item { "Item 2" } %>
129
+ # <% menu.with_item(divider: true) %>
130
+ # <% menu.with_item { "Item 3" } %>
131
+ # <% menu.with_item { "Item 4" } %>
132
132
  # <% end %>
133
133
  # <% end %>
134
134
  #
135
135
  # @example Customizing menu items
136
136
  # <%= render(Ariadne::DropdownComponent.new) do |c| %>
137
- # <% c.button do %>
137
+ # <% c.with_button do %>
138
138
  # Dropdown
139
139
  # <% end %>
140
140
  #
141
- # <% c.menu do |menu| %>
142
- # <% menu.header { "Header" } %>
143
- # <% menu.item(tag: :button) { "Item 1" } %>
144
- # <% menu.item(classes: "ariadne-text-red-500") { "Item 2" } %>
145
- # <% menu.item { "Item 3" } %>
141
+ # <% c.with_menu do |menu| %>
142
+ # <% menu.with_header { "Header" } %>
143
+ # <% menu.with_item(tag: :button) { "Item 1" } %>
144
+ # <% menu.with_item(classes: "ariadne-text-red-500") { "Item 2" } %>
145
+ # <% menu.with_item { "Item 3" } %>
146
146
  # <% end %>
147
147
  # <% end %>
148
148
  #
@@ -152,7 +152,7 @@ module Ariadne
152
152
  # @param attributes [Hash] <%= link_to_attributes_docs %>
153
153
  def initialize(overlay: :default, with_caret: false, classes: "", attributes: {})
154
154
  @tag = check_incoming_tag(DEFAULT_TAG, tag)
155
- @classes = class_names(
155
+ @classes = merge_class_names(
156
156
  DEFAULT_CLASSES,
157
157
  classes,
158
158
  )
@@ -63,9 +63,9 @@ module Ariadne
63
63
  renders_one :action, lambda { |tag: :div, classes: "", attributes: {}|
64
64
  tag = check_incoming_tag(:div, tag)
65
65
 
66
- actual_classes = class_names(classes)
66
+ actual_classes = merge_class_names(classes)
67
67
 
68
- Ariadne::BaseComponent.new(tag: tag, classes: actual_classes, attributes: attributes)
68
+ render(Ariadne::BaseComponent.new(tag: tag, classes: actual_classes, attributes: attributes))
69
69
  }
70
70
 
71
71
  # @example Schemes
@@ -79,13 +79,13 @@ module Ariadne
79
79
  #
80
80
  # @example Icon
81
81
  # <%= render(Ariadne::FlashComponent.new) do |component| %>
82
- # <% component.icon(icon: :"user-group", variant: HeroiconsHelper::Icon::VARIANT_OUTLINE) %>
82
+ # <% component.with_icon(icon: :"user-group", variant: HeroiconsHelper::Icon::VARIANT_OUTLINE) %>
83
83
  # Look at this icon.
84
84
  # <% end %>
85
85
  #
86
86
  # @example With actions
87
87
  # <%= render(Ariadne::FlashComponent.new) do |component| %>
88
- # <% component.action do %>
88
+ # <% component.with_action do %>
89
89
  # <%= render(Ariadne::ButtonComponent.new(size: :sm)) { "Take action" } %>
90
90
  # <% end %>
91
91
  # This is a flash message with actions!
@@ -104,7 +104,7 @@ module Ariadne
104
104
 
105
105
  @scheme = fetch_or_raise(VALID_CONTENT_SCHEMES, scheme)
106
106
 
107
- @classes = class_names(
107
+ @classes = merge_class_names(
108
108
  DEFAULT_CLASSES,
109
109
  CONTENT_SCHEME_CLASS_MAPPINGS[@scheme],
110
110
  classes,
@@ -0,0 +1,5 @@
1
+ <%= render Ariadne::BaseComponent.new(tag: @tag, classes: @classes, attributes: @attributes) do |component| %>
2
+ <% items.each do |item| %>
3
+ <%= item %>
4
+ <% end %>
5
+ <% end %>
@@ -10,6 +10,13 @@ module Ariadne
10
10
 
11
11
  VALID_TYPES = [:row, :column, :row_reverse, :column_reverse].freeze
12
12
 
13
+ # The sub-items(s) to render
14
+ renders_many :items, lambda { |static_content = nil, &block|
15
+ next static_content if static_content.present?
16
+
17
+ view_context.capture { block&.call }
18
+ }
19
+
13
20
  # @example Default
14
21
  #
15
22
  # <%= render(Ariadne::FlexComponent.new(type: :column)) { "Example" } %>
@@ -33,7 +40,7 @@ module Ariadne
33
40
  "ariadne-flex-col-reverse"
34
41
  end
35
42
 
36
- @classes = class_names(
43
+ @classes = merge_class_names(
37
44
  DEFAULT_CLASSES,
38
45
  classes,
39
46
  flex_class,
@@ -42,8 +49,8 @@ module Ariadne
42
49
  @attributes = attributes
43
50
  end
44
51
 
45
- def call
46
- render(Ariadne::BaseComponent.new(tag: @tag, classes: @classes, attributes: @attributes)) { content }
52
+ def render?
53
+ items?
47
54
  end
48
55
  end
49
56
  end
@@ -7,12 +7,12 @@ module Ariadne
7
7
 
8
8
  # @example Default
9
9
  #
10
- # <%= render(Ariadne::FooterComponent.new) %>
10
+ # <%= render(Ariadne::FooterComponent.new) { "Footer." } %>
11
11
  #
12
12
  # @param classes [String] <%= link_to_classes_docs %>
13
13
  # @param attributes [Hash] <%= link_to_attributes_docs %>
14
14
  def initialize(classes: "", attributes: {})
15
- @classes = class_names(
15
+ @classes = merge_class_names(
16
16
  DEFAULT_CLASSES,
17
17
  classes,
18
18
  )
@@ -17,7 +17,7 @@ module Ariadne
17
17
  # @param classes [String] <%= link_to_classes_docs %>
18
18
  # @param attributes [Hash] <%= link_to_attributes_docs %>
19
19
  def initialize(classes: "", attributes: {})
20
- @classes = class_names(
20
+ @classes = merge_class_names(
21
21
  DEFAULT_CLASSES,
22
22
  classes,
23
23
  )
@@ -34,7 +34,7 @@ module Ariadne
34
34
  DEFAULT_ENTRY_CLASSES = "ariadne-group ariadne-flex-1 ariadne-flex ariadne-flex-col ariadne-p-8 hover:ariadne-text-gray-500"
35
35
  renders_one :entry, lambda { |classes: "", attributes: {}, &block|
36
36
  view_context.capture do
37
- actual_classes = class_names(DEFAULT_ENTRY_CLASSES, classes)
37
+ actual_classes = merge_class_names(DEFAULT_ENTRY_CLASSES, classes)
38
38
  render(Ariadne::BaseComponent.new(tag: :div, classes: actual_classes, attributes: attributes)) { block&.call }
39
39
  end
40
40
  }
@@ -42,7 +42,7 @@ module Ariadne
42
42
  DEFAULT_ACTION_LINK_CLASSES = "ariadne-relative ariadne--mr-px ariadne-w-0 ariadne-flex-1 ariadne-inline-flex ariadne-items-center ariadne-justify-center ariadne-py-4 ariadne-text-sm ariadne-font-medium ariadne-border ariadne-border-transparent"
43
43
  DEFAULT_ACTION_LINK_COLORS = "ariadne-h-full hover:ariadne-text-gray-500"
44
44
  renders_many :actions, lambda { |href:, icon:, label:, size: Ariadne::HeroiconComponent::SIZE_DEFAULT, variant: HeroiconsHelper::Icon::VARIANT_SOLID, classes: "", attributes: {}, text_classes: ""|
45
- actual_classes = class_names(DEFAULT_ACTION_LINK_CLASSES, DEFAULT_ACTION_LINK_COLORS, classes)
45
+ actual_classes = merge_class_names(DEFAULT_ACTION_LINK_CLASSES, DEFAULT_ACTION_LINK_COLORS, classes)
46
46
  render(Ariadne::LinkComponent.new(href: href, classes: actual_classes, attributes: attributes)) do
47
47
  render(Ariadne::HeroiconComponent.new(icon: icon, size: size, variant: variant, text_classes: text_classes)) { label }
48
48
  end
@@ -55,13 +55,9 @@ module Ariadne
55
55
  attr_reader :classes, :attributes
56
56
 
57
57
  def initialize(classes: "", attributes: {})
58
- @classes = class_names(DEFAULT_ITEM_CLASSES, classes)
58
+ @classes = merge_class_names(DEFAULT_ITEM_CLASSES, classes)
59
59
  @attributes = attributes
60
60
  end
61
-
62
- def call
63
- render(Ariadne::BaseComponent.new(tag: :div, classes: @classes, attributes: @attributes))
64
- end
65
61
  end
66
62
  end
67
63
  end
@@ -23,10 +23,10 @@ module Ariadne
23
23
  @text = text
24
24
 
25
25
  if src.blank?
26
- actual_classes = class_names(DEFAULT_TEXT_LOGO_CLASSES, classes)
26
+ actual_classes = merge_class_names(DEFAULT_TEXT_LOGO_CLASSES, classes)
27
27
  Ariadne::Text.new(tag: :span, classes: actual_classes, attributes: attributes)
28
28
  else
29
- actual_classes = class_names(DEFAULT_IMAGE_LOGO_CLASSES, classes)
29
+ actual_classes = merge_class_names(DEFAULT_IMAGE_LOGO_CLASSES, classes)
30
30
  actual_attributes = { width: 40, height: 40 }.merge(attributes)
31
31
  @image_logo = Ariadne::ImageComponent.new(src: src, alt: alt, classes: actual_classes, attributes: actual_attributes)
32
32
  end
@@ -40,7 +40,7 @@ module Ariadne
40
40
  # @param attributes [Hash] <%= link_to_attributes_docs %>
41
41
  DEFAULT_NAV_LINK_CLASSES = "ariadne-inline-block ariadne-rounded-lg ariadne-py-1 ariadne-px-2 ariadne-text-sm text-slate-700 hover:bg-slate-100 hover:text-slate-900"
42
42
  renders_many :navigation_links, lambda { |tag: Ariadne::LinkComponent::DEFAULT_TAG, href:, classes: "", attributes: {}|
43
- actual_classes = class_names(DEFAULT_NAV_LINK_CLASSES, classes)
43
+ actual_classes = merge_class_names(DEFAULT_NAV_LINK_CLASSES, classes)
44
44
  Ariadne::LinkComponent.new(tag: tag, href: href, classes: actual_classes, attributes: attributes)
45
45
  }
46
46
 
@@ -51,7 +51,7 @@ module Ariadne
51
51
  # @param classes [String] <%= link_to_classes_docs %>
52
52
  # @param attributes [Hash] <%= link_to_attributes_docs %>
53
53
  renders_many :action_links, lambda { |tag: Ariadne::LinkComponent::DEFAULT_TAG, href:, classes: "", attributes: {}|
54
- actual_classes = class_names(DEFAULT_NAV_LINK_CLASSES, classes)
54
+ actual_classes = merge_class_names(DEFAULT_NAV_LINK_CLASSES, classes)
55
55
  Ariadne::LinkComponent.new(tag: tag, href: href, classes: actual_classes, attributes: attributes)
56
56
  }
57
57
 
@@ -63,13 +63,13 @@ module Ariadne
63
63
  # @param attributes [Hash] <%= link_to_attributes_docs %>
64
64
  DEFAULT_SIGNUP_LINK_CLASSES = "group ariadne-inline-flex ariadne-items-center ariadne-justify-center ariadne-rounded-full ariadne-py-2 ariadne-px-4 ariadne-text-sm ariadne-font-semibold focus:ariadne-outline-none focus-visible:ariadne-outline-2 focus-visible:outline-offset-2"
65
65
  renders_one :signup_link, lambda { |tag: Ariadne::LinkComponent::DEFAULT_TAG, href:, classes: "", attributes: {}|
66
- actual_classes = class_names(DEFAULT_SIGNUP_LINK_CLASSES, classes)
66
+ actual_classes = merge_class_names(DEFAULT_SIGNUP_LINK_CLASSES, classes)
67
67
  Ariadne::LinkComponent.new(tag: tag, href: href, classes: actual_classes, attributes: attributes)
68
68
  }
69
69
 
70
70
  DEFAULT_PROFILE_LINK_CLASSES = "group ariadne-inline-flex ariadne-items-center ariadne-justify-center ariadne-rounded-full ariadne-py-2 ariadne-px-4 ariadne-text-sm ariadne-font-semibold focus:ariadne-outline-none focus-visible:ariadne-outline-2 focus-visible:outline-offset-2"
71
71
  renders_one :profile_link, lambda { |tag: Ariadne::LinkComponent::DEFAULT_TAG, href:, classes: "", attributes: {}|
72
- actual_classes = class_names(DEFAULT_PROFILE_LINK_CLASSES, classes)
72
+ actual_classes = merge_class_names(DEFAULT_PROFILE_LINK_CLASSES, classes)
73
73
  Ariadne::LinkComponent.new(tag: tag, href: href, classes: actual_classes, attributes: attributes)
74
74
  }
75
75
 
@@ -84,7 +84,7 @@ module Ariadne
84
84
  # @param classes [String] <%= link_to_classes_docs %>
85
85
  # @param attributes [Hash] <%= link_to_attributes_docs %>
86
86
  def initialize(classes: "", attributes: {})
87
- @classes = class_names(
87
+ @classes = merge_class_names(
88
88
  DEFAULT_CLASSES,
89
89
  classes,
90
90
  )
@@ -39,7 +39,7 @@ module Ariadne
39
39
  @tag = fetch_or_raise(TAG_OPTIONS, tag)
40
40
  @attributes = attributes
41
41
 
42
- @classes = class_names(*TAG_TO_CLASSES[tag], classes)
42
+ @classes = merge_class_names(*TAG_TO_CLASSES[tag], classes)
43
43
  end
44
44
 
45
45
  def call
@@ -145,13 +145,13 @@ module Ariadne
145
145
  }
146
146
 
147
147
  @icon = heroicon(icon, variant: variant, **attributes)
148
- @classes = class_names(
148
+ @classes = merge_class_names(
149
149
  @icon.attributes[:class],
150
150
  classes,
151
151
  )
152
152
  @attributes.merge!(@icon.attributes.except(:class, :"aria-hidden"))
153
153
 
154
- @text_classes = class_names(DEFAULT_TEXT_CLASSES, text_classes)
154
+ @text_classes = merge_class_names(DEFAULT_TEXT_CLASSES, text_classes)
155
155
  @text_attributes = text_attributes
156
156
  end
157
157
 
@@ -28,7 +28,7 @@ module Ariadne
28
28
  DEFAULT_TEXT_CLOSED_CLASSES = "ariadne-text-state-closed"
29
29
  DEFAULT_TEXT_CLASSES = "ariadne-pl-2 ariadne-text-sm ariadne-font-medium"
30
30
  renders_one :icon, lambda { |tag: :svg, icon:, variant:, size: Ariadne::HeroiconComponent::SIZE_DEFAULT, classes: "", attributes: {}, text_classes: "", text_attributes: {}|
31
- actual_text_classes = class_names(DEFAULT_TEXT_CLASSES, text_classes)
31
+ actual_text_classes = merge_class_names(DEFAULT_TEXT_CLASSES, text_classes)
32
32
  Ariadne::HeroiconComponent.new(tag: tag, icon: icon, variant: variant, size: size, classes: classes, attributes: attributes, text_classes: actual_text_classes, text_attributes: text_attributes) { content }
33
33
  }
34
34
 
@@ -38,7 +38,7 @@ module Ariadne
38
38
 
39
39
  DEFAULT_LABEL_CLASSES = "ariadne-pl-2 ariadne-text-sm ariadne-font-medium"
40
40
  renders_one :text, lambda { |classes: "", attributes: {}|
41
- actual_classes = class_names(DEFAULT_LABEL_CLASSES, classes)
41
+ actual_classes = merge_class_names(DEFAULT_LABEL_CLASSES, classes)
42
42
  Ariadne::BaseComponent.new(tag: :span, classes: actual_classes, attributes: attributes) { content }
43
43
  }
44
44
 
@@ -47,17 +47,17 @@ module Ariadne
47
47
  # @example Default
48
48
  #
49
49
  # <%= render(Ariadne::InlineFlexComponent.new) do |c| %>
50
- # <% c.item { Ariadne::InlineFlexComponent::STATE_OPEN_SVG.html_safe } %>
50
+ # <% c.with_item { Ariadne::InlineFlexComponent::STATE_OPEN_SVG.html_safe } %>
51
51
  # <% end %>
52
52
  #
53
53
  # # TODO: STATE_CLOSED_SVG colors didn't show until it was listed in an example
54
54
  # <%= render(Ariadne::InlineFlexComponent.new) do |c| %>
55
- # <% c.item { Ariadne::InlineFlexComponent::STATE_CLOSED_SVG.html_safe } %>
55
+ # <% c.with_item { Ariadne::InlineFlexComponent::STATE_CLOSED_SVG.html_safe } %>
56
56
  # <% end %>
57
57
  #
58
58
  # <%= render(Ariadne::InlineFlexComponent.new) do |c| %>
59
- # <% c.icon(icon: :check, size: :sm, variant: HeroiconsHelper::Icon::VARIANT_SOLID) %>
60
- # <% c.text { "Closed" } %>
59
+ # <% c.with_icon(icon: :check, size: :sm, variant: HeroiconsHelper::Icon::VARIANT_SOLID) %>
60
+ # <% c.with_text { "Closed" } %>
61
61
  # <% end %>
62
62
  #
63
63
  # @param tag [Symbol, String] The rendered tag name
@@ -65,7 +65,7 @@ module Ariadne
65
65
  # @param attributes [Hash] <%= link_to_attributes_docs %>
66
66
  def initialize(tag: DEFAULT_TAG, classes: "", attributes: {})
67
67
  @tag = check_incoming_tag(DEFAULT_TAG, tag)
68
- @classes = class_names(DEFAULT_CLASSES, classes)
68
+ @classes = merge_class_names(DEFAULT_CLASSES, classes)
69
69
  @attributes = attributes
70
70
  end
71
71
  end
@@ -35,7 +35,7 @@ module Ariadne
35
35
  # Use tooltips sparingly and as a last resort. Consult the <%= link_to_component(Ariadne::TooltipComponent) %> documentation for more information.
36
36
  # @code
37
37
  # <%= render(Ariadne::LinkComponent.new(href: "#", attributes: { id: "link-with-tooltip" })) do |c| %>
38
- # <% c.tooltip(text: "Tooltip text") %>
38
+ # <% c.with_tooltip(text: "Tooltip text") %>
39
39
  # Link
40
40
  # <% end %>
41
41
  #
@@ -44,7 +44,7 @@ module Ariadne
44
44
  # @param actionable [Boolean] If true, adds additional classes to the link to make it more aware.
45
45
  # @param classes [String] <%= link_to_classes_docs %>
46
46
  # @param attributes [Hash] <%= link_to_attributes_docs %>
47
- def initialize(tag: DEFAULT_TAG, href:, actionable: false, classes: "", attributes: {})
47
+ def initialize(tag: DEFAULT_TAG, href:, actionable: false, classes: "", attributes: {})
48
48
  @tag = check_incoming_tag(DEFAULT_TAG, tag)
49
49
 
50
50
  @attributes = attributes
@@ -52,7 +52,7 @@ module Ariadne
52
52
 
53
53
  @id = @attributes[:id]
54
54
 
55
- @classes = class_names(DEFAULT_CLASSES, classes)
55
+ @classes = merge_class_names(DEFAULT_CLASSES, classes)
56
56
  @classes << DEFAULT_ACTIONABLE_CLASSES if actionable
57
57
  end
58
58
 
@@ -12,7 +12,7 @@ module Ariadne
12
12
  # <% numbers = [1, 2, 3] %>
13
13
  # <%= render(Ariadne::ListComponent.new) do |list| %>
14
14
  # <% numbers.each do |number| %>
15
- # <%= list.item do |item| %>
15
+ # <%= list.with_item do |item| %>
16
16
  # <%= number %>
17
17
  # <% end %>
18
18
  # <% end %>
@@ -23,10 +23,14 @@ module Ariadne
23
23
  # @param attributes [Hash] <%= link_to_attributes_docs %>
24
24
  def initialize(classes: "", attributes: {})
25
25
  @tag = DEFAULT_TAG
26
- @classes = class_names(DEFAULT_UL_CLASSES, classes)
26
+ @classes = merge_class_names(DEFAULT_UL_CLASSES, classes)
27
27
  @attributes = attributes
28
28
  end
29
29
 
30
+ def render?
31
+ items?
32
+ end
33
+
30
34
  # This component is part of `ListComponent` and should not be
31
35
  # used as a standalone component.
32
36
  class ListItem < Ariadne::Component
@@ -36,7 +40,7 @@ module Ariadne
36
40
 
37
41
  def initialize(link: {}, classes: "", attributes: {})
38
42
  @link = link
39
- @classes = class_names(DEFAULT_ITEM_CLASSES, classes)
43
+ @classes = merge_class_names(DEFAULT_ITEM_CLASSES, classes)
40
44
  @attributes = attributes
41
45
  end
42
46
 
@@ -51,7 +55,9 @@ module Ariadne
51
55
  def call
52
56
  render(Ariadne::BaseComponent.new(tag: :li, classes: @classes, attributes: @attributes)) do
53
57
  if linked?
54
- render(Ariadne::LinkComponent.new(href: @link[:href], classes: @link[:classes], attributes: @link[:attributes])) do
58
+ classes = @link[:classes] || ""
59
+ attributes = @link[:attributes] || {}
60
+ render(Ariadne::LinkComponent.new(href: @link[:href], classes: classes, attributes: attributes)) do
55
61
  content
56
62
  end
57
63
  else
@@ -19,7 +19,7 @@ module Ariadne
19
19
  # @param attributes [Hash] <%= link_to_attributes_docs %>
20
20
  def initialize(classes: "", attributes: {})
21
21
  @tag = :div
22
- @classes = class_names(
22
+ @classes = merge_class_names(
23
23
  DEFAULT_CLASSES,
24
24
  classes,
25
25
  )
@@ -21,7 +21,7 @@ module Ariadne
21
21
  # @param attributes [Hash] <%= link_to_attributes_docs %>
22
22
  def initialize(classes: "", attributes: {})
23
23
  @tag = DEFAULT_TAG
24
- @classes = class_names(
24
+ @classes = merge_class_names(
25
25
  DEFAULT_CLASSES,
26
26
  classes,
27
27
  )
@@ -58,9 +58,9 @@ module Ariadne
58
58
  def initialize(link: {}, classes: "", attributes: {})
59
59
  @link = link
60
60
  if @link.present?
61
- @link["classes"] = class_names(DEFAULT_WRAPPER_CLASSES, @link["classes"])
61
+ @link["classes"] = merge_class_names(DEFAULT_WRAPPER_CLASSES, @link["classes"])
62
62
  end
63
- @classes = class_names(DEFAULT_ITEM_CLASSES, classes)
63
+ @classes = merge_class_names(DEFAULT_ITEM_CLASSES, classes)
64
64
  @attributes = attributes
65
65
  end
66
66
 
@@ -28,7 +28,7 @@ module Ariadne
28
28
  @attributes["style"] = "background-color: rgba(#{@red}, #{@green}, #{@blue}, #{@alpha});"
29
29
  @text_color = contrast_of(@red, @green, @blue)
30
30
 
31
- @classes = class_names(
31
+ @classes = merge_class_names(
32
32
  DEFAULT_CLASSES,
33
33
  classes,
34
34
  @text_color,
@@ -25,12 +25,12 @@ export default class RichTextArea extends Controller {
25
25
  editorProps: {
26
26
  attributes: {
27
27
  class:
28
- 'ariadne-h-28 ariadne-max-h-48 ariadne-p-2 ariadne-rounded-lg ariadne-overflow-y-auto focus:ariadne-outline-none'
29
- }
28
+ 'ariadne-h-28 ariadne-max-h-48 ariadne-p-2 ariadne-rounded-lg ariadne-overflow-y-auto focus:ariadne-outline-none',
29
+ },
30
30
  },
31
31
  parseOptions: {
32
- preserveWhitespace: true
33
- }
32
+ preserveWhitespace: true,
33
+ },
34
34
  })
35
35
 
36
36
  const tiptapValueContainer = editorElement.previousElementSibling
@@ -23,7 +23,7 @@ module Ariadne
23
23
  @sr_label = sr_label
24
24
  @has_form = has_form
25
25
 
26
- @classes = class_names(
26
+ @classes = merge_class_names(
27
27
  DEFAULT_CLASSES,
28
28
  classes,
29
29
  )
@@ -16,7 +16,7 @@ module Ariadne
16
16
 
17
17
  DEFAULT_BUTTON_CLASSES = "ariadne-inline-flex ariadne-items-center ariadne-shadow-sm ariadne-px-4 ariadne-py-1.5 ariadne-pb-2 ariadne-text-sm ariadne-leading-5 ariadne-font-medium ariadne-rounded-full " + Ariadne::ButtonComponent::SCHEME_CLASS_MAPPINGS[:default]
18
18
  renders_one :open_button, lambda { |selected: false, classes: "", attributes: {}|
19
- actual_classes = class_names(DEFAULT_BUTTON_CLASSES, classes, selected ? "" : BASE_HIDDEN_CLASS)
19
+ actual_classes = merge_class_names(DEFAULT_BUTTON_CLASSES, classes, selected ? "" : BASE_HIDDEN_CLASS)
20
20
 
21
21
  attributes[:id] ||= "btnOpen"
22
22
  attributes[:"data-slideover-component-target"] ||= "slidePanel"
@@ -27,7 +27,7 @@ module Ariadne
27
27
  }
28
28
 
29
29
  renders_one :close_button, lambda { |selected: false, classes: "", attributes: {}|
30
- actual_classes = class_names(DEFAULT_BUTTON_CLASSES, classes, selected ? "" : BASE_HIDDEN_CLASS)
30
+ actual_classes = merge_class_names(DEFAULT_BUTTON_CLASSES, classes, selected ? "" : BASE_HIDDEN_CLASS)
31
31
 
32
32
  attributes[:id] ||= "btnClose"
33
33
  attributes[:"data-slideover-component-target"] ||= "slidePanel"
@@ -49,7 +49,7 @@ module Ariadne
49
49
  # @param attributes [Hash] <%= link_to_attributes_docs %>
50
50
  def initialize(tag: DEFAULT_TAG, direction:, open_text: "Open", close_text: "Close", classes: "", attributes: {})
51
51
  @tag = check_incoming_tag(DEFAULT_TAG, tag)
52
- @classes = class_names(
52
+ @classes = merge_class_names(
53
53
  DEFAULT_CLASSES,
54
54
  classes,
55
55
  )
@@ -63,7 +63,7 @@ module Ariadne
63
63
  @href = href
64
64
  @selected = selected
65
65
 
66
- @classes = class_names(
66
+ @classes = merge_class_names(
67
67
  DEFAULT_CLASSES,
68
68
  classes,
69
69
  )
@@ -5,7 +5,7 @@ const DEFAULT_SELECTED_CLASSES: string[] = ['ariadne-border-slate-500', 'ariadne
5
5
  const DEFAULT_UNSELECTED_CLASSES: string[] = [
6
6
  'ariadne-text-gray-500',
7
7
  'hover:ariadne-text-gray-700',
8
- 'hover:ariadne-border-gray-300'
8
+ 'hover:ariadne-border-gray-300',
9
9
  ]
10
10
 
11
11
  for (const tabContainer of document.getElementsByTagName('tab-container')) {