ruby_ui 1.0.0.beta1 → 1.0.0.rc1

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/LICENSE.txt +21 -0
  3. data/README.md +85 -0
  4. data/lib/generators/ruby_ui/component_generator.rb +4 -40
  5. data/lib/generators/ruby_ui/dependencies.yml +74 -0
  6. data/lib/generators/ruby_ui/install/install_generator.rb +21 -22
  7. data/lib/generators/ruby_ui/install/templates/ruby_ui.rb.erb +18 -0
  8. data/lib/generators/ruby_ui/install/templates/tailwind.css.erb +156 -0
  9. data/lib/generators/ruby_ui/javascript_utils.rb +21 -0
  10. data/lib/ruby_ui/accordion/accordion_controller.js +97 -0
  11. data/lib/ruby_ui/alert/alert.rb +1 -1
  12. data/lib/ruby_ui/alert_dialog/alert_dialog_content.rb +1 -1
  13. data/lib/ruby_ui/alert_dialog/alert_dialog_controller.js +31 -0
  14. data/lib/ruby_ui/alert_dialog/alert_dialog_footer.rb +1 -1
  15. data/lib/ruby_ui/alert_dialog/alert_dialog_header.rb +1 -1
  16. data/lib/ruby_ui/breadcrumb/breadcrumb.rb +17 -0
  17. data/lib/ruby_ui/breadcrumb/breadcrumb_ellipsis.rb +39 -0
  18. data/lib/ruby_ui/breadcrumb/breadcrumb_item.rb +17 -0
  19. data/lib/ruby_ui/breadcrumb/breadcrumb_link.rb +22 -0
  20. data/lib/ruby_ui/breadcrumb/breadcrumb_list.rb +17 -0
  21. data/lib/ruby_ui/breadcrumb/breadcrumb_page.rb +19 -0
  22. data/lib/ruby_ui/breadcrumb/breadcrumb_separator.rb +38 -0
  23. data/lib/ruby_ui/calendar/calendar_controller.js +249 -0
  24. data/lib/ruby_ui/calendar/calendar_input_controller.js +8 -0
  25. data/lib/ruby_ui/carousel/carousel.rb +44 -0
  26. data/lib/ruby_ui/carousel/carousel_content.rb +23 -0
  27. data/lib/ruby_ui/carousel/carousel_controller.js +60 -0
  28. data/lib/ruby_ui/carousel/carousel_item.rb +23 -0
  29. data/lib/ruby_ui/carousel/carousel_next.rb +48 -0
  30. data/lib/ruby_ui/carousel/carousel_previous.rb +49 -0
  31. data/lib/ruby_ui/chart/chart_controller.js +103 -0
  32. data/lib/ruby_ui/checkbox/checkbox_group_controller.js +21 -0
  33. data/lib/ruby_ui/clipboard/clipboard_controller.js +54 -0
  34. data/lib/ruby_ui/collapsible/collapsible_controller.js +47 -0
  35. data/lib/ruby_ui/combobox/combobox.rb +8 -6
  36. data/lib/ruby_ui/combobox/combobox_checkbox.rb +25 -0
  37. data/lib/ruby_ui/combobox/combobox_controller.js +176 -0
  38. data/lib/ruby_ui/combobox/{combobox_empty.rb → combobox_empty_state.rb} +2 -2
  39. data/lib/ruby_ui/combobox/combobox_item.rb +9 -37
  40. data/lib/ruby_ui/combobox/combobox_list.rb +2 -11
  41. data/lib/ruby_ui/combobox/combobox_list_group.rb +20 -0
  42. data/lib/ruby_ui/combobox/combobox_popover.rb +30 -0
  43. data/lib/ruby_ui/combobox/combobox_radio.rb +26 -0
  44. data/lib/ruby_ui/combobox/combobox_search_input.rb +21 -24
  45. data/lib/ruby_ui/combobox/combobox_toggle_all_checkbox.rb +25 -0
  46. data/lib/ruby_ui/combobox/combobox_trigger.rb +25 -20
  47. data/lib/ruby_ui/command/command_controller.js +136 -0
  48. data/lib/ruby_ui/context_menu/context_menu_controller.js +144 -0
  49. data/lib/ruby_ui/dialog/dialog_content.rb +2 -2
  50. data/lib/ruby_ui/dialog/dialog_controller.js +32 -0
  51. data/lib/ruby_ui/dialog/dialog_footer.rb +1 -1
  52. data/lib/ruby_ui/dialog/dialog_header.rb +1 -1
  53. data/lib/ruby_ui/dropdown_menu/dropdown_menu_controller.js +120 -0
  54. data/lib/ruby_ui/form/form_field_controller.js +61 -0
  55. data/lib/ruby_ui/hover_card/hover_card_controller.js +144 -0
  56. data/lib/ruby_ui/masked_input/masked_input_controller.js +9 -0
  57. data/lib/ruby_ui/popover/popover_controller.js +107 -0
  58. data/lib/ruby_ui/progress/progress.rb +37 -0
  59. data/lib/ruby_ui/radio_button/radio_button.rb +4 -1
  60. data/lib/ruby_ui/select/select_content.rb +1 -1
  61. data/lib/ruby_ui/select/select_controller.js +171 -0
  62. data/lib/ruby_ui/select/select_item_controller.js +11 -0
  63. data/lib/ruby_ui/select/select_value.rb +1 -1
  64. data/lib/ruby_ui/separator/separator.rb +38 -0
  65. data/lib/ruby_ui/sheet/sheet_content.rb +1 -1
  66. data/lib/ruby_ui/sheet/sheet_content_controller.js +7 -0
  67. data/lib/ruby_ui/sheet/sheet_controller.js +9 -0
  68. data/lib/ruby_ui/{combobox/combobox_separator.rb → skeleton/skeleton.rb} +4 -2
  69. data/lib/ruby_ui/switch/switch.rb +24 -0
  70. data/lib/ruby_ui/tabs/tabs_controller.js +45 -0
  71. data/lib/ruby_ui/theme_toggle/theme_toggle_controller.js +30 -0
  72. data/lib/ruby_ui/tooltip/tooltip_controller.js +37 -0
  73. data/lib/ruby_ui.rb +1 -1
  74. metadata +57 -11
  75. data/lib/ruby_ui/combobox/combobox_content.rb +0 -31
  76. data/lib/ruby_ui/combobox/combobox_group.rb +0 -38
  77. data/lib/ruby_ui/combobox/combobox_input.rb +0 -22
  78. data/lib/ruby_ui/combobox/combobox_value.rb +0 -27
@@ -0,0 +1,30 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ initialize() {
5
+ this.setTheme()
6
+ }
7
+
8
+ setTheme() {
9
+ // On page load or when changing themes, best to add inline in `head` to avoid FOUC
10
+ if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
11
+ document.documentElement.classList.add('dark')
12
+ document.documentElement.classList.remove('light')
13
+ } else {
14
+ document.documentElement.classList.remove('dark')
15
+ document.documentElement.classList.add('light')
16
+ }
17
+ }
18
+
19
+ setLightTheme() {
20
+ // Whenever the user explicitly chooses light mode
21
+ localStorage.theme = 'light'
22
+ this.setTheme()
23
+ }
24
+
25
+ setDarkTheme() {
26
+ // Whenever the user explicitly chooses dark mode
27
+ localStorage.theme = 'dark'
28
+ this.setTheme()
29
+ }
30
+ }
@@ -0,0 +1,37 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+ import { computePosition, autoUpdate, offset } from "@floating-ui/dom";
3
+
4
+ export default class extends Controller {
5
+ static targets = ["trigger", "content"];
6
+ static values = { placement: String }
7
+
8
+ constructor(...args) {
9
+ super(...args);
10
+ this.cleanup;
11
+ }
12
+
13
+ connect() {
14
+ this.setFloatingElement();
15
+
16
+ const tooltipId = this.contentTarget.getAttribute("id");
17
+ this.triggerTarget.setAttribute("aria-describedby", tooltipId);
18
+
19
+ }
20
+
21
+ disconnect() {
22
+ this.cleanup();
23
+ }
24
+
25
+ setFloatingElement() {
26
+ console.log(this.placementValue);
27
+
28
+ this.cleanup = autoUpdate(this.triggerTarget, this.contentTarget, () => {
29
+ computePosition(this.triggerTarget, this.contentTarget, { placement: this.placementValue, middleware: [offset(4)] }).then(({ x, y }) => {
30
+ Object.assign(this.contentTarget.style, {
31
+ left: `${x}px`,
32
+ top: `${y}px`,
33
+ });
34
+ });
35
+ });
36
+ }
37
+ }
data/lib/ruby_ui.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyUI
4
- VERSION = "1.0.0.beta1"
4
+ VERSION = "1.0.0.rc1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta1
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Kettle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-22 00:00:00.000000000 Z
11
+ date: 2025-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phlex
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0.beta2
19
+ version: 2.1.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0.beta2
26
+ version: 2.1.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rouge
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -101,12 +101,18 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - LICENSE.txt
105
+ - README.md
104
106
  - lib/generators/ruby_ui/component_generator.rb
107
+ - lib/generators/ruby_ui/dependencies.yml
105
108
  - lib/generators/ruby_ui/install/install_generator.rb
109
+ - lib/generators/ruby_ui/install/templates/ruby_ui.rb.erb
110
+ - lib/generators/ruby_ui/install/templates/tailwind.css.erb
106
111
  - lib/generators/ruby_ui/javascript_utils.rb
107
112
  - lib/ruby_ui.rb
108
113
  - lib/ruby_ui/accordion/accordion.rb
109
114
  - lib/ruby_ui/accordion/accordion_content.rb
115
+ - lib/ruby_ui/accordion/accordion_controller.js
110
116
  - lib/ruby_ui/accordion/accordion_default_content.rb
111
117
  - lib/ruby_ui/accordion/accordion_default_trigger.rb
112
118
  - lib/ruby_ui/accordion/accordion_icon.rb
@@ -119,6 +125,7 @@ files:
119
125
  - lib/ruby_ui/alert_dialog/alert_dialog_action.rb
120
126
  - lib/ruby_ui/alert_dialog/alert_dialog_cancel.rb
121
127
  - lib/ruby_ui/alert_dialog/alert_dialog_content.rb
128
+ - lib/ruby_ui/alert_dialog/alert_dialog_controller.js
122
129
  - lib/ruby_ui/alert_dialog/alert_dialog_description.rb
123
130
  - lib/ruby_ui/alert_dialog/alert_dialog_footer.rb
124
131
  - lib/ruby_ui/alert_dialog/alert_dialog_header.rb
@@ -130,11 +137,20 @@ files:
130
137
  - lib/ruby_ui/avatar/avatar_image.rb
131
138
  - lib/ruby_ui/badge/badge.rb
132
139
  - lib/ruby_ui/base.rb
140
+ - lib/ruby_ui/breadcrumb/breadcrumb.rb
141
+ - lib/ruby_ui/breadcrumb/breadcrumb_ellipsis.rb
142
+ - lib/ruby_ui/breadcrumb/breadcrumb_item.rb
143
+ - lib/ruby_ui/breadcrumb/breadcrumb_link.rb
144
+ - lib/ruby_ui/breadcrumb/breadcrumb_list.rb
145
+ - lib/ruby_ui/breadcrumb/breadcrumb_page.rb
146
+ - lib/ruby_ui/breadcrumb/breadcrumb_separator.rb
133
147
  - lib/ruby_ui/button/button.rb
134
148
  - lib/ruby_ui/calendar/calendar.rb
135
149
  - lib/ruby_ui/calendar/calendar_body.rb
150
+ - lib/ruby_ui/calendar/calendar_controller.js
136
151
  - lib/ruby_ui/calendar/calendar_days.rb
137
152
  - lib/ruby_ui/calendar/calendar_header.rb
153
+ - lib/ruby_ui/calendar/calendar_input_controller.js
138
154
  - lib/ruby_ui/calendar/calendar_next.rb
139
155
  - lib/ruby_ui/calendar/calendar_prev.rb
140
156
  - lib/ruby_ui/calendar/calendar_title.rb
@@ -145,29 +161,41 @@ files:
145
161
  - lib/ruby_ui/card/card_footer.rb
146
162
  - lib/ruby_ui/card/card_header.rb
147
163
  - lib/ruby_ui/card/card_title.rb
164
+ - lib/ruby_ui/carousel/carousel.rb
165
+ - lib/ruby_ui/carousel/carousel_content.rb
166
+ - lib/ruby_ui/carousel/carousel_controller.js
167
+ - lib/ruby_ui/carousel/carousel_item.rb
168
+ - lib/ruby_ui/carousel/carousel_next.rb
169
+ - lib/ruby_ui/carousel/carousel_previous.rb
148
170
  - lib/ruby_ui/chart/chart.rb
171
+ - lib/ruby_ui/chart/chart_controller.js
149
172
  - lib/ruby_ui/checkbox/checkbox.rb
150
173
  - lib/ruby_ui/checkbox/checkbox_group.rb
174
+ - lib/ruby_ui/checkbox/checkbox_group_controller.js
151
175
  - lib/ruby_ui/clipboard/clipboard.rb
176
+ - lib/ruby_ui/clipboard/clipboard_controller.js
152
177
  - lib/ruby_ui/clipboard/clipboard_popover.rb
153
178
  - lib/ruby_ui/clipboard/clipboard_source.rb
154
179
  - lib/ruby_ui/clipboard/clipboard_trigger.rb
155
180
  - lib/ruby_ui/codeblock/codeblock.rb
156
181
  - lib/ruby_ui/collapsible/collapsible.rb
157
182
  - lib/ruby_ui/collapsible/collapsible_content.rb
183
+ - lib/ruby_ui/collapsible/collapsible_controller.js
158
184
  - lib/ruby_ui/collapsible/collapsible_trigger.rb
159
185
  - lib/ruby_ui/combobox/combobox.rb
160
- - lib/ruby_ui/combobox/combobox_content.rb
161
- - lib/ruby_ui/combobox/combobox_empty.rb
162
- - lib/ruby_ui/combobox/combobox_group.rb
163
- - lib/ruby_ui/combobox/combobox_input.rb
186
+ - lib/ruby_ui/combobox/combobox_checkbox.rb
187
+ - lib/ruby_ui/combobox/combobox_controller.js
188
+ - lib/ruby_ui/combobox/combobox_empty_state.rb
164
189
  - lib/ruby_ui/combobox/combobox_item.rb
165
190
  - lib/ruby_ui/combobox/combobox_list.rb
191
+ - lib/ruby_ui/combobox/combobox_list_group.rb
192
+ - lib/ruby_ui/combobox/combobox_popover.rb
193
+ - lib/ruby_ui/combobox/combobox_radio.rb
166
194
  - lib/ruby_ui/combobox/combobox_search_input.rb
167
- - lib/ruby_ui/combobox/combobox_separator.rb
195
+ - lib/ruby_ui/combobox/combobox_toggle_all_checkbox.rb
168
196
  - lib/ruby_ui/combobox/combobox_trigger.rb
169
- - lib/ruby_ui/combobox/combobox_value.rb
170
197
  - lib/ruby_ui/command/command.rb
198
+ - lib/ruby_ui/command/command_controller.js
171
199
  - lib/ruby_ui/command/command_dialog.rb
172
200
  - lib/ruby_ui/command/command_dialog_content.rb
173
201
  - lib/ruby_ui/command/command_dialog_trigger.rb
@@ -178,12 +206,14 @@ files:
178
206
  - lib/ruby_ui/command/command_list.rb
179
207
  - lib/ruby_ui/context_menu/context_menu.rb
180
208
  - lib/ruby_ui/context_menu/context_menu_content.rb
209
+ - lib/ruby_ui/context_menu/context_menu_controller.js
181
210
  - lib/ruby_ui/context_menu/context_menu_item.rb
182
211
  - lib/ruby_ui/context_menu/context_menu_label.rb
183
212
  - lib/ruby_ui/context_menu/context_menu_separator.rb
184
213
  - lib/ruby_ui/context_menu/context_menu_trigger.rb
185
214
  - lib/ruby_ui/dialog/dialog.rb
186
215
  - lib/ruby_ui/dialog/dialog_content.rb
216
+ - lib/ruby_ui/dialog/dialog_controller.js
187
217
  - lib/ruby_ui/dialog/dialog_description.rb
188
218
  - lib/ruby_ui/dialog/dialog_footer.rb
189
219
  - lib/ruby_ui/dialog/dialog_header.rb
@@ -192,39 +222,50 @@ files:
192
222
  - lib/ruby_ui/dialog/dialog_trigger.rb
193
223
  - lib/ruby_ui/dropdown_menu/dropdown_menu.rb
194
224
  - lib/ruby_ui/dropdown_menu/dropdown_menu_content.rb
225
+ - lib/ruby_ui/dropdown_menu/dropdown_menu_controller.js
195
226
  - lib/ruby_ui/dropdown_menu/dropdown_menu_item.rb
196
227
  - lib/ruby_ui/dropdown_menu/dropdown_menu_label.rb
197
228
  - lib/ruby_ui/dropdown_menu/dropdown_menu_separator.rb
198
229
  - lib/ruby_ui/dropdown_menu/dropdown_menu_trigger.rb
199
230
  - lib/ruby_ui/form/form.rb
200
231
  - lib/ruby_ui/form/form_field.rb
232
+ - lib/ruby_ui/form/form_field_controller.js
201
233
  - lib/ruby_ui/form/form_field_error.rb
202
234
  - lib/ruby_ui/form/form_field_hint.rb
203
235
  - lib/ruby_ui/form/form_field_label.rb
204
236
  - lib/ruby_ui/hover_card/hover_card.rb
205
237
  - lib/ruby_ui/hover_card/hover_card_content.rb
238
+ - lib/ruby_ui/hover_card/hover_card_controller.js
206
239
  - lib/ruby_ui/hover_card/hover_card_trigger.rb
207
240
  - lib/ruby_ui/input/input.rb
208
241
  - lib/ruby_ui/link/link.rb
209
242
  - lib/ruby_ui/masked_input/masked_input.rb
243
+ - lib/ruby_ui/masked_input/masked_input_controller.js
210
244
  - lib/ruby_ui/pagination/pagination.rb
211
245
  - lib/ruby_ui/pagination/pagination_content.rb
212
246
  - lib/ruby_ui/pagination/pagination_ellipsis.rb
213
247
  - lib/ruby_ui/pagination/pagination_item.rb
214
248
  - lib/ruby_ui/popover/popover.rb
215
249
  - lib/ruby_ui/popover/popover_content.rb
250
+ - lib/ruby_ui/popover/popover_controller.js
216
251
  - lib/ruby_ui/popover/popover_trigger.rb
252
+ - lib/ruby_ui/progress/progress.rb
217
253
  - lib/ruby_ui/radio_button/radio_button.rb
218
254
  - lib/ruby_ui/select/select.rb
219
255
  - lib/ruby_ui/select/select_content.rb
256
+ - lib/ruby_ui/select/select_controller.js
220
257
  - lib/ruby_ui/select/select_group.rb
221
258
  - lib/ruby_ui/select/select_input.rb
222
259
  - lib/ruby_ui/select/select_item.rb
260
+ - lib/ruby_ui/select/select_item_controller.js
223
261
  - lib/ruby_ui/select/select_label.rb
224
262
  - lib/ruby_ui/select/select_trigger.rb
225
263
  - lib/ruby_ui/select/select_value.rb
264
+ - lib/ruby_ui/separator/separator.rb
226
265
  - lib/ruby_ui/sheet/sheet.rb
227
266
  - lib/ruby_ui/sheet/sheet_content.rb
267
+ - lib/ruby_ui/sheet/sheet_content_controller.js
268
+ - lib/ruby_ui/sheet/sheet_controller.js
228
269
  - lib/ruby_ui/sheet/sheet_description.rb
229
270
  - lib/ruby_ui/sheet/sheet_footer.rb
230
271
  - lib/ruby_ui/sheet/sheet_header.rb
@@ -232,6 +273,8 @@ files:
232
273
  - lib/ruby_ui/sheet/sheet_title.rb
233
274
  - lib/ruby_ui/sheet/sheet_trigger.rb
234
275
  - lib/ruby_ui/shortcut_key/shortcut_key.rb
276
+ - lib/ruby_ui/skeleton/skeleton.rb
277
+ - lib/ruby_ui/switch/switch.rb
235
278
  - lib/ruby_ui/table/table.rb
236
279
  - lib/ruby_ui/table/table_body.rb
237
280
  - lib/ruby_ui/table/table_caption.rb
@@ -242,12 +285,15 @@ files:
242
285
  - lib/ruby_ui/table/table_row.rb
243
286
  - lib/ruby_ui/tabs/tabs.rb
244
287
  - lib/ruby_ui/tabs/tabs_content.rb
288
+ - lib/ruby_ui/tabs/tabs_controller.js
245
289
  - lib/ruby_ui/tabs/tabs_list.rb
246
290
  - lib/ruby_ui/tabs/tabs_trigger.rb
247
291
  - lib/ruby_ui/textarea/textarea.rb
248
292
  - lib/ruby_ui/theme_toggle/theme_toggle.rb
293
+ - lib/ruby_ui/theme_toggle/theme_toggle_controller.js
249
294
  - lib/ruby_ui/tooltip/tooltip.rb
250
295
  - lib/ruby_ui/tooltip/tooltip_content.rb
296
+ - lib/ruby_ui/tooltip/tooltip_controller.js
251
297
  - lib/ruby_ui/tooltip/tooltip_trigger.rb
252
298
  - lib/ruby_ui/typography/heading.rb
253
299
  - lib/ruby_ui/typography/inline_code.rb
@@ -273,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
319
  - !ruby/object:Gem::Version
274
320
  version: '0'
275
321
  requirements: []
276
- rubygems_version: 3.5.16
322
+ rubygems_version: 3.5.11
277
323
  signing_key:
278
324
  specification_version: 4
279
325
  summary: RubyUI is a UI Component Library for Ruby developers.
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyUI
4
- class ComboboxContent < Base
5
- def initialize(**attrs)
6
- @id = "content#{SecureRandom.hex(4)}"
7
- super
8
- end
9
-
10
- def view_template(&)
11
- div(**attrs) do
12
- div(class: "min-w-max max-h-[300px] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none animate-out group-data-[ruby-ui--combobox-open-value=true]/combobox:animate-in fade-out-0 group-data-[ruby-ui--combobox-open-value=true]/combobox:fade-in-0 zoom-out-95 group-data-[ruby-ui--combobox-open-value=true]/combobox:zoom-in-95 slide-in-from-top-2", &)
13
- end
14
- end
15
-
16
- private
17
-
18
- def default_attrs
19
- {
20
- id: @id,
21
- role: "listbox",
22
- data: {
23
- controller: "ruby-ui--combobox-content",
24
- ruby_ui__combobox_target: "content",
25
- action: "keydown.enter->ruby-ui--combobox#onKeyEnter keydown.esc->ruby-ui--combobox#onEscKey keydown.down->ruby-ui--combobox#onKeyDown keydown.up->ruby-ui--combobox#onKeyUp"
26
- },
27
- class: "combobox-content hidden w-full absolute top-0 left-0 z-50"
28
- }
29
- end
30
- end
31
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyUI
4
- class ComboboxGroup < Base
5
- def initialize(heading: nil, **attrs)
6
- @heading = heading
7
- super(**attrs)
8
- end
9
-
10
- def view_template(&block)
11
- div(**attrs) do
12
- render_header if @heading
13
- render_items(&block)
14
- end
15
- end
16
-
17
- private
18
-
19
- def render_header
20
- div(group_heading: @heading, class: "px-2 py-1.5 text-xs font-medium text-muted-foreground") { @heading }
21
- end
22
-
23
- def render_items(&)
24
- div(group_items: "", role: "group", &)
25
- end
26
-
27
- def default_attrs
28
- {
29
- class: "overflow-hidden p-1 text-foreground",
30
- role: "presentation",
31
- data: {
32
- value: @heading,
33
- ruby_ui__combobox_content_target: "group"
34
- }
35
- }
36
- end
37
- end
38
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyUI
4
- class ComboboxInput < Base
5
- def view_template
6
- input(**attrs)
7
- end
8
-
9
- private
10
-
11
- def default_attrs
12
- {
13
- class: "hidden",
14
- data: {
15
- ruby_ui__combobox_target: "input",
16
- ruby_ui__form_field_target: "input",
17
- action: "change->ruby-ui--form-field#onChange invalid->ruby-ui--form-field#onInvalid"
18
- }
19
- }
20
- end
21
- end
22
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyUI
4
- class ComboboxValue < Base
5
- def initialize(placeholder: nil, **attrs)
6
- @placeholder = placeholder
7
- super(**attrs)
8
- end
9
-
10
- def view_template(&block)
11
- span(**attrs) do
12
- block ? block.call : @placeholder
13
- end
14
- end
15
-
16
- private
17
-
18
- def default_attrs
19
- {
20
- data: {
21
- ruby_ui__combobox_target: "value"
22
- },
23
- class: "pointer-events-none"
24
- }
25
- end
26
- end
27
- end