ruby_ui 1.0.0.beta1 → 1.0.0.pre.alpha.4

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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/rbui/base_generator.rb +17 -0
  3. data/lib/generators/rbui/component_generator.rb +137 -0
  4. data/lib/generators/rbui/install/install_generator.rb +194 -0
  5. data/lib/{ruby_ui → rbui}/accordion/accordion.rb +1 -1
  6. data/lib/{ruby_ui → rbui}/accordion/accordion_content.rb +2 -2
  7. data/lib/{ruby_ui → rbui}/accordion/accordion_default_content.rb +1 -1
  8. data/lib/{ruby_ui → rbui}/accordion/accordion_default_trigger.rb +3 -3
  9. data/lib/{ruby_ui → rbui}/accordion/accordion_icon.rb +2 -2
  10. data/lib/{ruby_ui → rbui}/accordion/accordion_item.rb +4 -4
  11. data/lib/{ruby_ui → rbui}/accordion/accordion_trigger.rb +2 -3
  12. data/lib/{ruby_ui → rbui}/alert/alert.rb +2 -2
  13. data/lib/{ruby_ui → rbui}/alert/alert_description.rb +1 -1
  14. data/lib/{ruby_ui → rbui}/alert/alert_title.rb +1 -1
  15. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog.rb +3 -3
  16. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_action.rb +2 -2
  17. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_cancel.rb +3 -3
  18. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_content.rb +4 -4
  19. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_description.rb +1 -1
  20. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_footer.rb +1 -1
  21. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_header.rb +1 -1
  22. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_title.rb +1 -1
  23. data/lib/{ruby_ui → rbui}/alert_dialog/alert_dialog_trigger.rb +2 -2
  24. data/lib/{ruby_ui → rbui}/aspect_ratio/aspect_ratio.rb +1 -1
  25. data/lib/{ruby_ui → rbui}/avatar/avatar.rb +2 -2
  26. data/lib/{ruby_ui → rbui}/avatar/avatar_fallback.rb +1 -1
  27. data/lib/{ruby_ui → rbui}/avatar/avatar_image.rb +1 -1
  28. data/lib/{ruby_ui → rbui}/badge/badge.rb +2 -2
  29. data/lib/{ruby_ui → rbui}/base.rb +8 -1
  30. data/lib/{ruby_ui → rbui}/button/button.rb +13 -13
  31. data/lib/rbui/calendar/calendar.rb +39 -0
  32. data/lib/{ruby_ui → rbui}/calendar/calendar_body.rb +2 -2
  33. data/lib/{ruby_ui → rbui}/calendar/calendar_days.rb +14 -14
  34. data/lib/{ruby_ui → rbui}/calendar/calendar_header.rb +1 -1
  35. data/lib/{ruby_ui → rbui}/calendar/calendar_next.rb +2 -2
  36. data/lib/{ruby_ui → rbui}/calendar/calendar_prev.rb +2 -2
  37. data/lib/{ruby_ui → rbui}/calendar/calendar_title.rb +2 -2
  38. data/lib/{ruby_ui → rbui}/calendar/calendar_weekdays.rb +2 -2
  39. data/lib/{ruby_ui → rbui}/card/card.rb +1 -1
  40. data/lib/{ruby_ui → rbui}/card/card_content.rb +1 -1
  41. data/lib/{ruby_ui → rbui}/card/card_description.rb +1 -1
  42. data/lib/{ruby_ui → rbui}/card/card_footer.rb +1 -1
  43. data/lib/{ruby_ui → rbui}/card/card_header.rb +1 -1
  44. data/lib/{ruby_ui → rbui}/card/card_title.rb +1 -1
  45. data/lib/{ruby_ui → rbui}/chart/chart.rb +3 -3
  46. data/lib/{ruby_ui → rbui}/checkbox/checkbox.rb +4 -4
  47. data/lib/{ruby_ui → rbui}/checkbox/checkbox_group.rb +2 -2
  48. data/lib/{ruby_ui → rbui}/clipboard/clipboard.rb +6 -6
  49. data/lib/{ruby_ui → rbui}/clipboard/clipboard_popover.rb +2 -2
  50. data/lib/{ruby_ui → rbui}/clipboard/clipboard_source.rb +2 -2
  51. data/lib/{ruby_ui → rbui}/clipboard/clipboard_trigger.rb +3 -3
  52. data/lib/{ruby_ui → rbui}/codeblock/codeblock.rb +10 -7
  53. data/lib/{ruby_ui → rbui}/collapsible/collapsible.rb +3 -3
  54. data/lib/{ruby_ui → rbui}/collapsible/collapsible_content.rb +2 -2
  55. data/lib/{ruby_ui → rbui}/collapsible/collapsible_trigger.rb +2 -2
  56. data/lib/rbui/combobox/combobox.rb +24 -0
  57. data/lib/rbui/combobox/combobox_content.rb +31 -0
  58. data/lib/{ruby_ui → rbui}/combobox/combobox_empty.rb +2 -2
  59. data/lib/{ruby_ui → rbui}/combobox/combobox_group.rb +2 -2
  60. data/lib/{ruby_ui → rbui}/combobox/combobox_input.rb +4 -4
  61. data/lib/{ruby_ui → rbui}/combobox/combobox_item.rb +5 -5
  62. data/lib/{ruby_ui → rbui}/combobox/combobox_list.rb +4 -2
  63. data/lib/{ruby_ui → rbui}/combobox/combobox_search_input.rb +3 -3
  64. data/lib/{ruby_ui → rbui}/combobox/combobox_separator.rb +1 -1
  65. data/lib/{ruby_ui → rbui}/combobox/combobox_trigger.rb +3 -3
  66. data/lib/{ruby_ui → rbui}/combobox/combobox_value.rb +2 -2
  67. data/lib/{ruby_ui → rbui}/command/command.rb +1 -1
  68. data/lib/{ruby_ui → rbui}/command/command_dialog.rb +2 -2
  69. data/lib/{ruby_ui → rbui}/command/command_dialog_content.rb +6 -6
  70. data/lib/{ruby_ui → rbui}/command/command_dialog_trigger.rb +3 -3
  71. data/lib/{ruby_ui → rbui}/command/command_empty.rb +2 -2
  72. data/lib/{ruby_ui → rbui}/command/command_group.rb +2 -2
  73. data/lib/{ruby_ui → rbui}/command/command_input.rb +3 -3
  74. data/lib/{ruby_ui → rbui}/command/command_item.rb +2 -2
  75. data/lib/{ruby_ui → rbui}/command/command_list.rb +1 -1
  76. data/lib/{ruby_ui → rbui}/context_menu/context_menu.rb +2 -2
  77. data/lib/{ruby_ui → rbui}/context_menu/context_menu_content.rb +2 -2
  78. data/lib/{ruby_ui → rbui}/context_menu/context_menu_item.rb +3 -3
  79. data/lib/{ruby_ui → rbui}/context_menu/context_menu_label.rb +2 -2
  80. data/lib/{ruby_ui → rbui}/context_menu/context_menu_separator.rb +1 -1
  81. data/lib/{ruby_ui → rbui}/context_menu/context_menu_trigger.rb +3 -3
  82. data/lib/{ruby_ui → rbui}/dialog/dialog.rb +3 -3
  83. data/lib/{ruby_ui → rbui}/dialog/dialog_content.rb +7 -7
  84. data/lib/{ruby_ui → rbui}/dialog/dialog_description.rb +1 -1
  85. data/lib/{ruby_ui → rbui}/dialog/dialog_footer.rb +1 -1
  86. data/lib/{ruby_ui → rbui}/dialog/dialog_header.rb +1 -1
  87. data/lib/{ruby_ui → rbui}/dialog/dialog_middle.rb +1 -1
  88. data/lib/{ruby_ui → rbui}/dialog/dialog_title.rb +1 -1
  89. data/lib/{ruby_ui → rbui}/dialog/dialog_trigger.rb +2 -2
  90. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu.rb +4 -4
  91. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu_content.rb +2 -2
  92. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu_item.rb +3 -3
  93. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu_label.rb +1 -1
  94. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu_separator.rb +1 -1
  95. data/lib/{ruby_ui → rbui}/dropdown_menu/dropdown_menu_trigger.rb +2 -2
  96. data/lib/{ruby_ui → rbui}/form/form.rb +1 -1
  97. data/lib/{ruby_ui → rbui}/form/form_field.rb +2 -2
  98. data/lib/{ruby_ui → rbui}/form/form_field_error.rb +2 -2
  99. data/lib/{ruby_ui → rbui}/form/form_field_hint.rb +1 -1
  100. data/lib/{ruby_ui → rbui}/form/form_field_label.rb +1 -1
  101. data/lib/{ruby_ui → rbui}/hover_card/hover_card.rb +3 -3
  102. data/lib/{ruby_ui → rbui}/hover_card/hover_card_content.rb +2 -2
  103. data/lib/{ruby_ui → rbui}/hover_card/hover_card_trigger.rb +2 -2
  104. data/lib/{ruby_ui → rbui}/input/input.rb +3 -3
  105. data/lib/{ruby_ui → rbui}/link/link.rb +13 -13
  106. data/lib/{ruby_ui → rbui}/pagination/pagination.rb +1 -1
  107. data/lib/{ruby_ui → rbui}/pagination/pagination_content.rb +1 -1
  108. data/lib/{ruby_ui → rbui}/pagination/pagination_ellipsis.rb +1 -1
  109. data/lib/{ruby_ui → rbui}/pagination/pagination_item.rb +4 -4
  110. data/lib/{ruby_ui → rbui}/popover/popover.rb +4 -4
  111. data/lib/{ruby_ui → rbui}/popover/popover_content.rb +2 -2
  112. data/lib/{ruby_ui → rbui}/popover/popover_trigger.rb +2 -2
  113. data/lib/{ruby_ui → rbui}/radio_button/radio_button.rb +3 -3
  114. data/lib/rbui/railtie.rb +52 -0
  115. data/lib/{ruby_ui → rbui}/select/select.rb +5 -5
  116. data/lib/{ruby_ui → rbui}/select/select_content.rb +3 -3
  117. data/lib/{ruby_ui → rbui}/select/select_group.rb +1 -1
  118. data/lib/{ruby_ui → rbui}/select/select_input.rb +4 -4
  119. data/lib/{ruby_ui → rbui}/select/select_item.rb +4 -4
  120. data/lib/{ruby_ui → rbui}/select/select_label.rb +1 -1
  121. data/lib/{ruby_ui → rbui}/select/select_trigger.rb +3 -3
  122. data/lib/{ruby_ui → rbui}/select/select_value.rb +2 -2
  123. data/lib/{ruby_ui → rbui}/sheet/sheet.rb +2 -2
  124. data/lib/{ruby_ui → rbui}/sheet/sheet_content.rb +7 -7
  125. data/lib/{ruby_ui → rbui}/sheet/sheet_description.rb +1 -1
  126. data/lib/{ruby_ui → rbui}/sheet/sheet_footer.rb +1 -1
  127. data/lib/{ruby_ui → rbui}/sheet/sheet_header.rb +1 -1
  128. data/lib/{ruby_ui → rbui}/sheet/sheet_middle.rb +1 -1
  129. data/lib/{ruby_ui → rbui}/sheet/sheet_title.rb +1 -1
  130. data/lib/{ruby_ui → rbui}/sheet/sheet_trigger.rb +2 -2
  131. data/lib/{ruby_ui → rbui}/shortcut_key/shortcut_key.rb +1 -1
  132. data/lib/{ruby_ui → rbui}/table/table.rb +1 -1
  133. data/lib/{ruby_ui → rbui}/table/table_body.rb +1 -1
  134. data/lib/{ruby_ui → rbui}/table/table_caption.rb +1 -1
  135. data/lib/{ruby_ui → rbui}/table/table_cell.rb +1 -1
  136. data/lib/{ruby_ui → rbui}/table/table_footer.rb +1 -1
  137. data/lib/{ruby_ui → rbui}/table/table_head.rb +1 -1
  138. data/lib/{ruby_ui → rbui}/table/table_header.rb +1 -1
  139. data/lib/{ruby_ui → rbui}/table/table_row.rb +1 -1
  140. data/lib/{ruby_ui → rbui}/tabs/tabs.rb +3 -3
  141. data/lib/{ruby_ui → rbui}/tabs/tabs_content.rb +2 -2
  142. data/lib/{ruby_ui → rbui}/tabs/tabs_list.rb +1 -1
  143. data/lib/{ruby_ui → rbui}/tabs/tabs_trigger.rb +3 -3
  144. data/lib/{ruby_ui → rbui}/textarea/textarea.rb +3 -3
  145. data/lib/{ruby_ui → rbui}/theme_toggle/theme_toggle.rb +4 -4
  146. data/lib/{ruby_ui → rbui}/tooltip/tooltip.rb +3 -3
  147. data/lib/{ruby_ui → rbui}/tooltip/tooltip_content.rb +3 -3
  148. data/lib/{ruby_ui → rbui}/tooltip/tooltip_trigger.rb +2 -2
  149. data/lib/{ruby_ui → rbui}/typography/typography_blockquote.rb +1 -1
  150. data/lib/rbui/typography/typography_h1.rb +17 -0
  151. data/lib/rbui/typography/typography_h2.rb +17 -0
  152. data/lib/rbui/typography/typography_h3.rb +17 -0
  153. data/lib/rbui/typography/typography_h4.rb +17 -0
  154. data/lib/{ruby_ui/typography/inline_code.rb → rbui/typography/typography_inline_code.rb} +2 -2
  155. data/lib/{ruby_ui/typography/inline_link.rb → rbui/typography/typography_inline_link.rb} +2 -2
  156. data/lib/rbui/typography/typography_large.rb +17 -0
  157. data/lib/rbui/typography/typography_lead.rb +17 -0
  158. data/lib/rbui/typography/typography_list.rb +47 -0
  159. data/lib/rbui/typography/typography_list_item.rb +17 -0
  160. data/lib/rbui/typography/typography_muted.rb +17 -0
  161. data/lib/rbui/typography/typography_p.rb +17 -0
  162. data/lib/rbui/typography/typography_small.rb +17 -0
  163. data/lib/rbui/version.rb +5 -0
  164. data/lib/rbui.rb +57 -0
  165. data/lib/ruby_ui.rb +1 -5
  166. metadata +174 -163
  167. data/lib/generators/ruby_ui/component_generator.rb +0 -130
  168. data/lib/generators/ruby_ui/install/install_generator.rb +0 -90
  169. data/lib/generators/ruby_ui/javascript_utils.rb +0 -36
  170. data/lib/ruby_ui/calendar/calendar.rb +0 -39
  171. data/lib/ruby_ui/combobox/combobox.rb +0 -24
  172. data/lib/ruby_ui/combobox/combobox_content.rb +0 -31
  173. data/lib/ruby_ui/masked_input/masked_input.rb +0 -15
  174. data/lib/ruby_ui/typography/heading.rb +0 -60
  175. data/lib/ruby_ui/typography/text.rb +0 -53
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class AvatarFallback < Base
5
5
  def view_template(&)
6
6
  span(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class AvatarImage < Base
5
5
  def initialize(src:, alt: "", **attrs)
6
6
  @src = src
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Badge < Base
5
5
  SIZES = {
6
6
  sm: "px-1.5 py-0.5 text-xs",
@@ -53,7 +53,7 @@ module RubyUI
53
53
 
54
54
  def default_attrs
55
55
  {
56
- class: ["inline-flex items-center rounded-md font-medium ring-1 ring-inset", SIZES[@size], COLORS[@variant]]
56
+ class: tokens("inline-flex items-center rounded-md font-medium ring-1 ring-inset", SIZES[@size], COLORS[@variant])
57
57
  }
58
58
  end
59
59
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- module RubyUI
5
+ module RBUI
6
6
  class Base < Phlex::HTML
7
7
  TAILWIND_MERGER = ::TailwindMerge::Merger.new.freeze unless defined?(TAILWIND_MERGER)
8
8
 
@@ -13,6 +13,13 @@ module RubyUI
13
13
  @attrs[:class] = TAILWIND_MERGER.merge(@attrs[:class]) if @attrs[:class]
14
14
  end
15
15
 
16
+ if defined?(Rails) && Rails.env.development?
17
+ def before_template
18
+ comment { "Before #{self.class.name}" }
19
+ super
20
+ end
21
+ end
22
+
16
23
  private
17
24
 
18
25
  def default_attrs
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Button < Base
5
5
  def initialize(type: :button, variant: :primary, size: :md, icon: false, **attrs)
6
6
  @type = type
@@ -35,45 +35,45 @@ module RubyUI
35
35
  end
36
36
 
37
37
  def primary_classes
38
- [
38
+ tokens(
39
39
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground shadow hover:bg-primary/90",
40
40
  size_classes
41
- ]
41
+ )
42
42
  end
43
43
 
44
44
  def link_classes
45
- [
45
+ tokens(
46
46
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 text-primary underline-offset-4 hover:underline",
47
47
  size_classes
48
- ]
48
+ )
49
49
  end
50
50
 
51
51
  def secondary_classes
52
- [
52
+ tokens(
53
53
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-opacity-80",
54
54
  size_classes
55
- ]
55
+ )
56
56
  end
57
57
 
58
58
  def destructive_classes
59
- [
59
+ tokens(
60
60
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
61
61
  size_classes
62
- ]
62
+ )
63
63
  end
64
64
 
65
65
  def outline_classes
66
- [
66
+ tokens(
67
67
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
68
68
  size_classes
69
- ]
69
+ )
70
70
  end
71
71
 
72
72
  def ghost_classes
73
- [
73
+ tokens(
74
74
  "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground",
75
75
  size_classes
76
- ]
76
+ )
77
77
  end
78
78
 
79
79
  def default_classes
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBUI
4
+ class Calendar < Base
5
+ def initialize(selected_date: nil, input_id: nil, date_format: "yyyy-MM-dd", **attrs)
6
+ @selected_date = selected_date
7
+ @input_id = input_id
8
+ @date_format = date_format
9
+ super(**attrs)
10
+ end
11
+
12
+ def view_template
13
+ div(**attrs) do
14
+ RBUI.CalendarHeader do
15
+ RBUI.CalendarTitle
16
+ RBUI.CalendarPrev
17
+ RBUI.CalendarNext
18
+ end
19
+ RBUI.CalendarBody # Where the calendar is rendered (Weekdays and Days)
20
+ RBUI.CalendarWeekdays # Template for the weekdays
21
+ RBUI.CalendarDays # Template for the days
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def default_attrs
28
+ {
29
+ class: "p-3 space-y-4",
30
+ data: {
31
+ controller: "rbui--calendar",
32
+ rbui__calendar_selected_date_value: @selected_date&.to_s,
33
+ rbui__calendar_format_value: @date_format,
34
+ rbui__calendar_rbui__calendar_input_outlet: @input_id
35
+ }
36
+ }
37
+ end
38
+ end
39
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarBody < Base
5
5
  def view_template
6
6
  table(**attrs)
@@ -11,7 +11,7 @@ module RubyUI
11
11
  def default_attrs
12
12
  {
13
13
  data: {
14
- ruby_ui__calendar_target: "calendar"
14
+ rbui__calendar_target: "calendar"
15
15
  }
16
16
  }
17
17
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarDays < Base
5
5
  BASE_CLASS = "inline-flex items-center justify-center rounded-md text-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-8 w-8 p-0 font-normal aria-selected:opacity-100"
6
6
 
@@ -17,13 +17,13 @@ module RubyUI
17
17
  date_template("selectedDateTemplate") do
18
18
  button(
19
19
  data_day: "{{day}}",
20
- data_action: "click->ruby-ui--calendar#selectDay",
20
+ data_action: "click->rbui--calendar#selectDay",
21
21
  name: "day",
22
22
  class:
23
- [
23
+ tokens(
24
24
  BASE_CLASS,
25
25
  "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground"
26
- ],
26
+ ),
27
27
  role: "gridcell",
28
28
  tabindex: "0",
29
29
  type: "button",
@@ -36,13 +36,13 @@ module RubyUI
36
36
  date_template("todayDateTemplate") do
37
37
  button(
38
38
  data_day: "{{day}}",
39
- data_action: "click->ruby-ui--calendar#selectDay",
39
+ data_action: "click->rbui--calendar#selectDay",
40
40
  name: "day",
41
41
  class:
42
- [
42
+ tokens(
43
43
  BASE_CLASS,
44
44
  "bg-accent text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
45
- ],
45
+ ),
46
46
  role: "gridcell",
47
47
  tabindex: "-1",
48
48
  type: "button"
@@ -54,13 +54,13 @@ module RubyUI
54
54
  date_template("currentMonthDateTemplate") do
55
55
  button(
56
56
  data_day: "{{day}}",
57
- data_action: "click->ruby-ui--calendar#selectDay",
57
+ data_action: "click->rbui--calendar#selectDay",
58
58
  name: "day",
59
59
  class:
60
- [
60
+ tokens(
61
61
  BASE_CLASS,
62
62
  "bg-background text-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
63
- ],
63
+ ),
64
64
  role: "gridcell",
65
65
  tabindex: "-1",
66
66
  type: "button"
@@ -72,13 +72,13 @@ module RubyUI
72
72
  date_template("otherMonthDateTemplate") do
73
73
  button(
74
74
  data_day: "{{day}}",
75
- data_action: " click->ruby-ui--calendar#selectDay",
75
+ data_action: " click->rbui--calendar#selectDay",
76
76
  name: "day",
77
77
  class:
78
- [
78
+ tokens(
79
79
  BASE_CLASS,
80
80
  "bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
81
- ],
81
+ ),
82
82
  role: "gridcell",
83
83
  tabindex: "-1",
84
84
  type: "button"
@@ -87,7 +87,7 @@ module RubyUI
87
87
  end
88
88
 
89
89
  def date_template(target, &block)
90
- template(data: {ruby_ui__calendar_target: target}) do
90
+ template_tag(data: {rbui__calendar_target: target}) do
91
91
  td(
92
92
  class:
93
93
  "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected])]:rounded-md",
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarHeader < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarNext < Base
5
5
  def view_template(&block)
6
6
  button(**attrs) do
@@ -36,7 +36,7 @@ module RubyUI
36
36
  class:
37
37
  "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input hover:bg-accent hover:text-accent-foreground h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute right-1",
38
38
  type: "button",
39
- data_action: "click->ruby-ui--calendar#nextMonth"
39
+ data_action: "click->rbui--calendar#nextMonth"
40
40
  }
41
41
  end
42
42
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarPrev < Base
5
5
  def view_template(&block)
6
6
  button(**attrs) do
@@ -36,7 +36,7 @@ module RubyUI
36
36
  class:
37
37
  "rdp-button_reset rdp-button inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input hover:bg-accent hover:text-accent-foreground h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute left-1",
38
38
  type: "button",
39
- data_action: "click->ruby-ui--calendar#prevMonth"
39
+ data_action: "click->rbui--calendar#prevMonth"
40
40
  }
41
41
  end
42
42
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarTitle < Base
5
5
  def initialize(default: "Month Year", **attrs)
6
6
  @default = default
@@ -19,7 +19,7 @@ module RubyUI
19
19
  aria_live: "polite",
20
20
  role: "presentation",
21
21
  data: {
22
- ruby_ui__calendar_target: "title"
22
+ rbui__calendar_target: "title"
23
23
  }
24
24
  }
25
25
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CalendarWeekdays < Base
5
5
  DAYS = %w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday].freeze
6
6
 
7
7
  def view_template
8
- template(data: {ruby_ui__calendar_target: "weekdaysTemplate"}) do
8
+ template_tag(data: {rbui__calendar_target: "weekdaysTemplate"}) do
9
9
  thead(**attrs) do
10
10
  tr(class: "flex") do
11
11
  DAYS.each do |day|
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Card < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CardContent < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CardDescription < Base
5
5
  def view_template(&)
6
6
  p(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CardFooter < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CardHeader < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CardTitle < Base
5
5
  def view_template(&)
6
6
  h3(**attrs, &)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Chart < Base
5
5
  def initialize(options: {}, **attrs)
6
6
  @options = options.to_json
@@ -15,8 +15,8 @@ module RubyUI
15
15
 
16
16
  def default_attrs
17
17
  {
18
- data_controller: "ruby-ui--chart",
19
- data_ruby_ui__chart_options_value: @options
18
+ data_controller: "rbui--chart",
19
+ data_rbui__chart_options_value: @options
20
20
  }
21
21
  end
22
22
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Checkbox < Base
5
5
  def view_template
6
6
  input(**attrs)
@@ -12,9 +12,9 @@ module RubyUI
12
12
  {
13
13
  type: "checkbox",
14
14
  data: {
15
- ruby_ui__form_field_target: "input",
16
- ruby_ui__checkbox_group_target: "checkbox",
17
- action: "change->ruby-ui--checkbox-group#onChange change->ruby-ui--form-field#onInput invalid->ruby-ui--form-field#onInvalid"
15
+ rbui__form_field_target: "input",
16
+ rbui__checkbox_group_target: "checkbox",
17
+ action: "input->rbui--form-field#onInput invalid->rbui--form-field#onInvalid change->rbui--checkbox-group#onChange"
18
18
  },
19
19
  class: "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 accent-primary"
20
20
  }
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CheckboxGroup < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -12,7 +12,7 @@ module RubyUI
12
12
  {
13
13
  role: "group",
14
14
  data: {
15
- controller: "ruby-ui--checkbox-group"
15
+ controller: "rbui--checkbox-group"
16
16
  }
17
17
  }
18
18
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Clipboard < Base
5
5
  def initialize(options: {}, success: "Copied!", error: "Copy Failed!", **attrs)
6
6
  @options = options
@@ -30,11 +30,11 @@ module RubyUI
30
30
  def default_attrs
31
31
  {
32
32
  data: {
33
- controller: "ruby-ui--clipboard",
34
- action: "click@window->ruby-ui--clipboard#onClickOutside",
35
- ruby_ui__clipboard_success_value: @success,
36
- ruby_ui__clipboard_error_value: @error,
37
- ruby_ui__clipboard_options_value: @options.to_json
33
+ controller: "rbui--clipboard",
34
+ action: "click@window->rbui--clipboard#onClickOutside",
35
+ rbui__clipboard_success_value: @success,
36
+ rbui__clipboard_error_value: @error,
37
+ rbui__clipboard_options_value: @options.to_json
38
38
  }
39
39
  }
40
40
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class ClipboardPopover < Base
5
5
  def initialize(type:, **attrs)
6
6
  @type = type
@@ -11,7 +11,7 @@ module RubyUI
11
11
  div(
12
12
  class: "hidden",
13
13
  style: "width: max-content; position: absolute; top: 0; left: 0;",
14
- data: {ruby_ui__clipboard_target: clipboard_target}
14
+ data: {rbui__clipboard_target: clipboard_target}
15
15
  ) do
16
16
  div(**attrs, &block)
17
17
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class ClipboardSource < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -11,7 +11,7 @@ module RubyUI
11
11
  def default_attrs
12
12
  {
13
13
  data: {
14
- ruby_ui__clipboard_target: "source"
14
+ rbui__clipboard_target: "source"
15
15
  }
16
16
  }
17
17
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class ClipboardTrigger < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -11,8 +11,8 @@ module RubyUI
11
11
  def default_attrs
12
12
  {
13
13
  data: {
14
- ruby_ui__clipboard_target: "trigger",
15
- action: "click->ruby-ui--clipboard#copy"
14
+ rbui__clipboard_target: "trigger",
15
+ action: "click->rbui--clipboard#copy"
16
16
  }
17
17
  }
18
18
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "rouge"
4
4
 
5
- module RubyUI
5
+ module RBUI
6
6
  class Codeblock < Base
7
7
  FORMATTER = ::Rouge::Formatters::HTML.new
8
8
  ROUGE_CSS = Rouge::Themes::Github.mode(:dark).render(scope: ".highlight") # See themes here: https://rouge-ruby.github.io/docs/Rouge/CSSTheme.html
@@ -34,19 +34,18 @@ module RubyUI
34
34
 
35
35
  def default_attrs
36
36
  {
37
- style: {tab_size: 2},
38
37
  class: "highlight text-sm max-h-[350px] after:content-none flex font-mono overflow-auto overflow-x rounded-md border !bg-stone-900 [&_pre]:p-4"
39
38
  }
40
39
  end
41
40
 
42
41
  def with_clipboard
43
- RubyUI.Clipboard(success: @clipboard_success, error: @clipboard_error, class: "relative") do
44
- RubyUI.ClipboardSource do
42
+ RBUI.Clipboard(success: @clipboard_success, error: @clipboard_error, class: "relative") do
43
+ RBUI.ClipboardSource do
45
44
  codeblock
46
45
  end
47
46
  div(class: "absolute top-2 right-2") do
48
- RubyUI.ClipboardTrigger do
49
- RubyUI.Button(variant: :ghost, size: :sm, icon: true, class: "text-white hover:text-white hover:bg-white/20") { clipboard_icon }
47
+ RBUI.ClipboardTrigger do
48
+ RBUI.Button(variant: :ghost, size: :sm, icon: true, class: "text-white hover:text-white hover:bg-white/20") { clipboard_icon }
50
49
  end
51
50
  end
52
51
  end
@@ -55,7 +54,11 @@ module RubyUI
55
54
  def codeblock
56
55
  div(**attrs) do
57
56
  div(class: "after:content-none") do
58
- pre { raw(safe(FORMATTER.format(lexer.lex(@code)))) }
57
+ pre do
58
+ unsafe_raw FORMATTER.format(
59
+ lexer.lex(@code)
60
+ )
61
+ end
59
62
  end
60
63
  end
61
64
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class Collapsible < Base
5
5
  def initialize(open: false, **attrs)
6
6
  @open = open
@@ -16,8 +16,8 @@ module RubyUI
16
16
  def default_attrs
17
17
  {
18
18
  data: {
19
- controller: "ruby-ui--collapsible",
20
- ruby_ui__collapsible_open_value: @open
19
+ controller: "rbui--collapsible",
20
+ rbui__collapsible_open_value: @open
21
21
  }
22
22
  }
23
23
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CollapsibleContent < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -10,7 +10,7 @@ module RubyUI
10
10
 
11
11
  def default_attrs
12
12
  {
13
- data: {ruby_ui__collapsible_target: "content"},
13
+ data: {rbui__collapsible_target: "content"},
14
14
  class: "overflow-y-hidden"
15
15
  }
16
16
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module RubyUI
3
+ module RBUI
4
4
  class CollapsibleTrigger < Base
5
5
  def view_template(&)
6
6
  div(**attrs, &)
@@ -11,7 +11,7 @@ module RubyUI
11
11
  def default_attrs
12
12
  {
13
13
  data: {
14
- action: "click->ruby-ui--collapsible#toggle"
14
+ action: "click->rbui--collapsible#toggle"
15
15
  }
16
16
  }
17
17
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBUI
4
+ class Combobox < Base
5
+ def view_template(&)
6
+ div(**attrs, &)
7
+ end
8
+
9
+ private
10
+
11
+ def default_attrs
12
+ {
13
+ data: {
14
+ controller: "rbui--combobox",
15
+ rbui__combobox_open_value: "false",
16
+ action: "click@window->rbui--combobox#onClickOutside",
17
+ rbui__combobox_rbui__combobox_content_outlet: ".combobox-content",
18
+ rbui__combobox_rbui__combobox_item_outlet: ".combobox-item"
19
+ },
20
+ class: "group/combobox w-full relative"
21
+ }
22
+ end
23
+ end
24
+ end