ruby_ui 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +4 -0
  4. data/lib/generators/ruby_ui/install/docs_generator.rb +33 -0
  5. data/lib/ruby_ui/accordion/accordion_docs.rb +53 -0
  6. data/lib/ruby_ui/alert/alert_docs.rb +135 -0
  7. data/lib/ruby_ui/alert_dialog/alert_dialog_docs.rb +35 -0
  8. data/lib/ruby_ui/aspect_ratio/aspect_ratio_docs.rb +64 -0
  9. data/lib/ruby_ui/avatar/avatar_docs.rb +92 -0
  10. data/lib/ruby_ui/badge/badge_docs.rb +80 -0
  11. data/lib/ruby_ui/breadcrumb/breadcrumb_docs.rb +116 -0
  12. data/lib/ruby_ui/button/button_docs.rb +143 -0
  13. data/lib/ruby_ui/calendar/calendar_docs.rb +34 -0
  14. data/lib/ruby_ui/card/card_docs.rb +114 -0
  15. data/lib/ruby_ui/carousel/carousel_docs.rb +104 -0
  16. data/lib/ruby_ui/chart/chart_docs.rb +115 -0
  17. data/lib/ruby_ui/checkbox/checkbox.rb +2 -2
  18. data/lib/ruby_ui/checkbox/checkbox_docs.rb +41 -0
  19. data/lib/ruby_ui/clipboard/clipboard_docs.rb +30 -0
  20. data/lib/ruby_ui/codeblock/codeblock_docs.rb +55 -0
  21. data/lib/ruby_ui/collapsible/collapsible_docs.rb +96 -0
  22. data/lib/ruby_ui/combobox/combobox_controller.js +16 -1
  23. data/lib/ruby_ui/combobox/combobox_docs.rb +151 -0
  24. data/lib/ruby_ui/combobox/combobox_popover.rb +2 -1
  25. data/lib/ruby_ui/combobox/combobox_toggle_all_checkbox.rb +3 -2
  26. data/lib/ruby_ui/combobox/combobox_trigger.rb +1 -1
  27. data/lib/ruby_ui/command/command_docs.rb +154 -0
  28. data/lib/ruby_ui/context_menu/context_menu.rb +1 -1
  29. data/lib/ruby_ui/context_menu/context_menu_docs.rb +85 -0
  30. data/lib/ruby_ui/dialog/dialog_docs.rb +102 -0
  31. data/lib/ruby_ui/docs/base.rb +90 -0
  32. data/lib/ruby_ui/docs/component_setup_tabs.rb +15 -0
  33. data/lib/ruby_ui/docs/components_table.rb +13 -0
  34. data/lib/ruby_ui/docs/header.rb +17 -0
  35. data/lib/ruby_ui/docs/sidebar_examples.rb +22 -0
  36. data/lib/ruby_ui/docs/visual_code_example.rb +22 -0
  37. data/lib/ruby_ui/dropdown_menu/dropdown_menu_docs.rb +212 -0
  38. data/lib/ruby_ui/form/form_docs.rb +178 -0
  39. data/lib/ruby_ui/form/form_field.rb +1 -1
  40. data/lib/ruby_ui/form/form_field_error.rb +1 -1
  41. data/lib/ruby_ui/form/form_field_hint.rb +1 -1
  42. data/lib/ruby_ui/form/form_field_label.rb +1 -1
  43. data/lib/ruby_ui/hover_card/hover_card_docs.rb +71 -0
  44. data/lib/ruby_ui/input/input.rb +4 -3
  45. data/lib/ruby_ui/input/input_docs.rb +68 -0
  46. data/lib/ruby_ui/link/link_docs.rb +106 -0
  47. data/lib/ruby_ui/masked_input/masked_input_docs.rb +47 -0
  48. data/lib/ruby_ui/pagination/pagination_docs.rb +127 -0
  49. data/lib/ruby_ui/popover/popover_docs.rb +971 -0
  50. data/lib/ruby_ui/progress/progress_docs.rb +27 -0
  51. data/lib/ruby_ui/radio_button/radio_button.rb +1 -1
  52. data/lib/ruby_ui/radio_button/radio_button_docs.rb +53 -0
  53. data/lib/ruby_ui/select/select_docs.rb +129 -0
  54. data/lib/ruby_ui/separator/separator_docs.rb +36 -0
  55. data/lib/ruby_ui/sheet/sheet_content.rb +1 -1
  56. data/lib/ruby_ui/sheet/sheet_docs.rb +76 -0
  57. data/lib/ruby_ui/shortcut_key/shortcut_key_docs.rb +29 -0
  58. data/lib/ruby_ui/sidebar/sidebar_docs.rb +176 -0
  59. data/lib/ruby_ui/skeleton/skeleton_docs.rb +29 -0
  60. data/lib/ruby_ui/switch/switch_docs.rb +46 -0
  61. data/lib/ruby_ui/table/table_docs.rb +102 -0
  62. data/lib/ruby_ui/tabs/tabs_docs.rb +211 -0
  63. data/lib/ruby_ui/textarea/textarea_docs.rb +54 -0
  64. data/lib/ruby_ui/theme_toggle/theme_toggle_docs.rb +71 -0
  65. data/lib/ruby_ui/tooltip/tooltip_docs.rb +52 -0
  66. data/lib/ruby_ui/typography/typography_docs.rb +107 -0
  67. data/lib/ruby_ui.rb +1 -1
  68. metadata +53 -6
@@ -0,0 +1,971 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Views::Docs::Popover < Views::Base
4
+ def view_template
5
+ component = "Popover"
6
+
7
+ div(class: "max-w-2xl mx-auto w-full py-10 space-y-10") do
8
+ render Docs::Header.new(title: "Popover", description: "Displays rich content in a portal, triggered by a button.")
9
+
10
+ render Docs::VisualCodeExample.new(title: "Example", context: self) do
11
+ <<~RUBY
12
+ Popover do
13
+ PopoverTrigger(class: 'w-full') do
14
+ Button(variant: :outline) { "Open Popover" }
15
+ end
16
+ PopoverContent(class: 'w-40') do
17
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
18
+ svg(
19
+ xmlns: "http://www.w3.org/2000/svg",
20
+ fill: "none",
21
+ viewbox: "0 0 24 24",
22
+ stroke_width: "1.5",
23
+ stroke: "currentColor",
24
+ class: "w-4 h-4 mr-2"
25
+ ) do |s|
26
+ s.path(
27
+ stroke_linecap: "round",
28
+ stroke_linejoin: "round",
29
+ d:
30
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
31
+ )
32
+ end
33
+ plain "Profile"
34
+ end
35
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
36
+ svg(
37
+ xmlns: "http://www.w3.org/2000/svg",
38
+ fill: "none",
39
+ viewbox: "0 0 24 24",
40
+ stroke_width: "1.5",
41
+ stroke: "currentColor",
42
+ class: "w-4 h-4 mr-2"
43
+ ) do |s|
44
+ s.path(
45
+ stroke_linecap: "round",
46
+ stroke_linejoin: "round",
47
+ d:
48
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
49
+ )
50
+ s.path(
51
+ stroke_linecap: "round",
52
+ stroke_linejoin: "round",
53
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
54
+ )
55
+ end
56
+ plain "Settings"
57
+ end
58
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
59
+ svg(
60
+ xmlns: "http://www.w3.org/2000/svg",
61
+ fill: "none",
62
+ viewbox: "0 0 24 24",
63
+ stroke_width: "1.5",
64
+ stroke: "currentColor",
65
+ class: "w-4 h-4 mr-2"
66
+ ) do |s|
67
+ s.path(
68
+ stroke_linecap: "round",
69
+ stroke_linejoin: "round",
70
+ d:
71
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
72
+ )
73
+ end
74
+ plain "Logout"
75
+ end
76
+ end
77
+ end
78
+ RUBY
79
+ end
80
+
81
+ render Docs::VisualCodeExample.new(title: "Placement", context: self) do
82
+ <<~RUBY
83
+ div(class: 'grid grid-cols-1 sm:grid-cols-3 gap-4') do
84
+ # -- TOP --
85
+ Popover(options: { placement: 'top' }) do
86
+ PopoverTrigger(class: 'w-full') do
87
+ Button(variant: :outline, class: 'w-full justify-center') { 'top' }
88
+ end
89
+ PopoverContent(class: 'w-40') do
90
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
91
+ svg(
92
+ xmlns: "http://www.w3.org/2000/svg",
93
+ fill: "none",
94
+ viewbox: "0 0 24 24",
95
+ stroke_width: "1.5",
96
+ stroke: "currentColor",
97
+ class: "w-4 h-4 mr-2"
98
+ ) do |s|
99
+ s.path(
100
+ stroke_linecap: "round",
101
+ stroke_linejoin: "round",
102
+ d:
103
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
104
+ )
105
+ end
106
+ plain "Profile"
107
+ end
108
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
109
+ svg(
110
+ xmlns: "http://www.w3.org/2000/svg",
111
+ fill: "none",
112
+ viewbox: "0 0 24 24",
113
+ stroke_width: "1.5",
114
+ stroke: "currentColor",
115
+ class: "w-4 h-4 mr-2"
116
+ ) do |s|
117
+ s.path(
118
+ stroke_linecap: "round",
119
+ stroke_linejoin: "round",
120
+ d:
121
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
122
+ )
123
+ s.path(
124
+ stroke_linecap: "round",
125
+ stroke_linejoin: "round",
126
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
127
+ )
128
+ end
129
+ plain "Settings"
130
+ end
131
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
132
+ svg(
133
+ xmlns: "http://www.w3.org/2000/svg",
134
+ fill: "none",
135
+ viewbox: "0 0 24 24",
136
+ stroke_width: "1.5",
137
+ stroke: "currentColor",
138
+ class: "w-4 h-4 mr-2"
139
+ ) do |s|
140
+ s.path(
141
+ stroke_linecap: "round",
142
+ stroke_linejoin: "round",
143
+ d:
144
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
145
+ )
146
+ end
147
+ plain "Logout"
148
+ end
149
+ end
150
+ end
151
+
152
+ Popover(options: { placement: 'top-start' }) do
153
+ PopoverTrigger(class: 'w-full') do
154
+ Button(variant: :outline, class: 'w-full justify-center') { 'top-start' }
155
+ end
156
+ PopoverContent(class: 'w-40') do
157
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
158
+ svg(
159
+ xmlns: "http://www.w3.org/2000/svg",
160
+ fill: "none",
161
+ viewbox: "0 0 24 24",
162
+ stroke_width: "1.5",
163
+ stroke: "currentColor",
164
+ class: "w-4 h-4 mr-2"
165
+ ) do |s|
166
+ s.path(
167
+ stroke_linecap: "round",
168
+ stroke_linejoin: "round",
169
+ d:
170
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
171
+ )
172
+ end
173
+ plain "Profile"
174
+ end
175
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
176
+ svg(
177
+ xmlns: "http://www.w3.org/2000/svg",
178
+ fill: "none",
179
+ viewbox: "0 0 24 24",
180
+ stroke_width: "1.5",
181
+ stroke: "currentColor",
182
+ class: "w-4 h-4 mr-2"
183
+ ) do |s|
184
+ s.path(
185
+ stroke_linecap: "round",
186
+ stroke_linejoin: "round",
187
+ d:
188
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
189
+ )
190
+ s.path(
191
+ stroke_linecap: "round",
192
+ stroke_linejoin: "round",
193
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
194
+ )
195
+ end
196
+ plain "Settings"
197
+ end
198
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
199
+ svg(
200
+ xmlns: "http://www.w3.org/2000/svg",
201
+ fill: "none",
202
+ viewbox: "0 0 24 24",
203
+ stroke_width: "1.5",
204
+ stroke: "currentColor",
205
+ class: "w-4 h-4 mr-2"
206
+ ) do |s|
207
+ s.path(
208
+ stroke_linecap: "round",
209
+ stroke_linejoin: "round",
210
+ d:
211
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
212
+ )
213
+ end
214
+ plain "Logout"
215
+ end
216
+ end
217
+ end
218
+
219
+ Popover(options: { placement: 'top-end' }) do
220
+ PopoverTrigger(class: 'w-full') do
221
+ Button(variant: :outline, class: 'w-full justify-center') { 'top-end' }
222
+ end
223
+ PopoverContent(class: 'w-40') do
224
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
225
+ svg(
226
+ xmlns: "http://www.w3.org/2000/svg",
227
+ fill: "none",
228
+ viewbox: "0 0 24 24",
229
+ stroke_width: "1.5",
230
+ stroke: "currentColor",
231
+ class: "w-4 h-4 mr-2"
232
+ ) do |s|
233
+ s.path(
234
+ stroke_linecap: "round",
235
+ stroke_linejoin: "round",
236
+ d:
237
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
238
+ )
239
+ end
240
+ plain "Profile"
241
+ end
242
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
243
+ svg(
244
+ xmlns: "http://www.w3.org/2000/svg",
245
+ fill: "none",
246
+ viewbox: "0 0 24 24",
247
+ stroke_width: "1.5",
248
+ stroke: "currentColor",
249
+ class: "w-4 h-4 mr-2"
250
+ ) do |s|
251
+ s.path(
252
+ stroke_linecap: "round",
253
+ stroke_linejoin: "round",
254
+ d:
255
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
256
+ )
257
+ s.path(
258
+ stroke_linecap: "round",
259
+ stroke_linejoin: "round",
260
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
261
+ )
262
+ end
263
+ plain "Settings"
264
+ end
265
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
266
+ svg(
267
+ xmlns: "http://www.w3.org/2000/svg",
268
+ fill: "none",
269
+ viewbox: "0 0 24 24",
270
+ stroke_width: "1.5",
271
+ stroke: "currentColor",
272
+ class: "w-4 h-4 mr-2"
273
+ ) do |s|
274
+ s.path(
275
+ stroke_linecap: "round",
276
+ stroke_linejoin: "round",
277
+ d:
278
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
279
+ )
280
+ end
281
+ plain "Logout"
282
+ end
283
+ end
284
+ end
285
+
286
+ # -- RIGHT --
287
+ Popover(options: { placement: 'right' }) do
288
+ PopoverTrigger(class: 'w-full') do
289
+ Button(variant: :outline, class: 'w-full justify-center') { 'right' }
290
+ end
291
+ PopoverContent(class: 'w-40') do
292
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
293
+ svg(
294
+ xmlns: "http://www.w3.org/2000/svg",
295
+ fill: "none",
296
+ viewbox: "0 0 24 24",
297
+ stroke_width: "1.5",
298
+ stroke: "currentColor",
299
+ class: "w-4 h-4 mr-2"
300
+ ) do |s|
301
+ s.path(
302
+ stroke_linecap: "round",
303
+ stroke_linejoin: "round",
304
+ d:
305
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
306
+ )
307
+ end
308
+ plain "Profile"
309
+ end
310
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
311
+ svg(
312
+ xmlns: "http://www.w3.org/2000/svg",
313
+ fill: "none",
314
+ viewbox: "0 0 24 24",
315
+ stroke_width: "1.5",
316
+ stroke: "currentColor",
317
+ class: "w-4 h-4 mr-2"
318
+ ) do |s|
319
+ s.path(
320
+ stroke_linecap: "round",
321
+ stroke_linejoin: "round",
322
+ d:
323
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
324
+ )
325
+ s.path(
326
+ stroke_linecap: "round",
327
+ stroke_linejoin: "round",
328
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
329
+ )
330
+ end
331
+ plain "Settings"
332
+ end
333
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
334
+ svg(
335
+ xmlns: "http://www.w3.org/2000/svg",
336
+ fill: "none",
337
+ viewbox: "0 0 24 24",
338
+ stroke_width: "1.5",
339
+ stroke: "currentColor",
340
+ class: "w-4 h-4 mr-2"
341
+ ) do |s|
342
+ s.path(
343
+ stroke_linecap: "round",
344
+ stroke_linejoin: "round",
345
+ d:
346
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
347
+ )
348
+ end
349
+ plain "Logout"
350
+ end
351
+ end
352
+ end
353
+
354
+ Popover(options: { placement: 'right-start' }) do
355
+ PopoverTrigger(class: 'w-full') do
356
+ Button(variant: :outline, class: 'w-full justify-center') { 'right-start' }
357
+ end
358
+ PopoverContent(class: 'w-40') do
359
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
360
+ svg(
361
+ xmlns: "http://www.w3.org/2000/svg",
362
+ fill: "none",
363
+ viewbox: "0 0 24 24",
364
+ stroke_width: "1.5",
365
+ stroke: "currentColor",
366
+ class: "w-4 h-4 mr-2"
367
+ ) do |s|
368
+ s.path(
369
+ stroke_linecap: "round",
370
+ stroke_linejoin: "round",
371
+ d:
372
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
373
+ )
374
+ end
375
+ plain "Profile"
376
+ end
377
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
378
+ svg(
379
+ xmlns: "http://www.w3.org/2000/svg",
380
+ fill: "none",
381
+ viewbox: "0 0 24 24",
382
+ stroke_width: "1.5",
383
+ stroke: "currentColor",
384
+ class: "w-4 h-4 mr-2"
385
+ ) do |s|
386
+ s.path(
387
+ stroke_linecap: "round",
388
+ stroke_linejoin: "round",
389
+ d:
390
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
391
+ )
392
+ s.path(
393
+ stroke_linecap: "round",
394
+ stroke_linejoin: "round",
395
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
396
+ )
397
+ end
398
+ plain "Settings"
399
+ end
400
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
401
+ svg(
402
+ xmlns: "http://www.w3.org/2000/svg",
403
+ fill: "none",
404
+ viewbox: "0 0 24 24",
405
+ stroke_width: "1.5",
406
+ stroke: "currentColor",
407
+ class: "w-4 h-4 mr-2"
408
+ ) do |s|
409
+ s.path(
410
+ stroke_linecap: "round",
411
+ stroke_linejoin: "round",
412
+ d:
413
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
414
+ )
415
+ end
416
+ plain "Logout"
417
+ end
418
+ end
419
+ end
420
+
421
+ Popover(options: { placement: 'right-end' }) do
422
+ PopoverTrigger(class: 'w-full') do
423
+ Button(variant: :outline, class: 'w-full justify-center') { 'right-end' }
424
+ end
425
+ PopoverContent(class: 'w-40') do
426
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
427
+ svg(
428
+ xmlns: "http://www.w3.org/2000/svg",
429
+ fill: "none",
430
+ viewbox: "0 0 24 24",
431
+ stroke_width: "1.5",
432
+ stroke: "currentColor",
433
+ class: "w-4 h-4 mr-2"
434
+ ) do |s|
435
+ s.path(
436
+ stroke_linecap: "round",
437
+ stroke_linejoin: "round",
438
+ d:
439
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
440
+ )
441
+ end
442
+ plain "Profile"
443
+ end
444
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
445
+ svg(
446
+ xmlns: "http://www.w3.org/2000/svg",
447
+ fill: "none",
448
+ viewbox: "0 0 24 24",
449
+ stroke_width: "1.5",
450
+ stroke: "currentColor",
451
+ class: "w-4 h-4 mr-2"
452
+ ) do |s|
453
+ s.path(
454
+ stroke_linecap: "round",
455
+ stroke_linejoin: "round",
456
+ d:
457
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
458
+ )
459
+ s.path(
460
+ stroke_linecap: "round",
461
+ stroke_linejoin: "round",
462
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
463
+ )
464
+ end
465
+ plain "Settings"
466
+ end
467
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
468
+ svg(
469
+ xmlns: "http://www.w3.org/2000/svg",
470
+ fill: "none",
471
+ viewbox: "0 0 24 24",
472
+ stroke_width: "1.5",
473
+ stroke: "currentColor",
474
+ class: "w-4 h-4 mr-2"
475
+ ) do |s|
476
+ s.path(
477
+ stroke_linecap: "round",
478
+ stroke_linejoin: "round",
479
+ d:
480
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
481
+ )
482
+ end
483
+ plain "Logout"
484
+ end
485
+ end
486
+ end
487
+
488
+ # -- LEFT --
489
+ Popover(options: { placement: 'left' }) do
490
+ PopoverTrigger(class: 'w-full') do
491
+ Button(variant: :outline, class: 'w-full justify-center') { 'left' }
492
+ end
493
+ PopoverContent(class: 'w-40') do
494
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
495
+ svg(
496
+ xmlns: "http://www.w3.org/2000/svg",
497
+ fill: "none",
498
+ viewbox: "0 0 24 24",
499
+ stroke_width: "1.5",
500
+ stroke: "currentColor",
501
+ class: "w-4 h-4 mr-2"
502
+ ) do |s|
503
+ s.path(
504
+ stroke_linecap: "round",
505
+ stroke_linejoin: "round",
506
+ d:
507
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
508
+ )
509
+ end
510
+ plain "Profile"
511
+ end
512
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
513
+ svg(
514
+ xmlns: "http://www.w3.org/2000/svg",
515
+ fill: "none",
516
+ viewbox: "0 0 24 24",
517
+ stroke_width: "1.5",
518
+ stroke: "currentColor",
519
+ class: "w-4 h-4 mr-2"
520
+ ) do |s|
521
+ s.path(
522
+ stroke_linecap: "round",
523
+ stroke_linejoin: "round",
524
+ d:
525
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
526
+ )
527
+ s.path(
528
+ stroke_linecap: "round",
529
+ stroke_linejoin: "round",
530
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
531
+ )
532
+ end
533
+ plain "Settings"
534
+ end
535
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
536
+ svg(
537
+ xmlns: "http://www.w3.org/2000/svg",
538
+ fill: "none",
539
+ viewbox: "0 0 24 24",
540
+ stroke_width: "1.5",
541
+ stroke: "currentColor",
542
+ class: "w-4 h-4 mr-2"
543
+ ) do |s|
544
+ s.path(
545
+ stroke_linecap: "round",
546
+ stroke_linejoin: "round",
547
+ d:
548
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
549
+ )
550
+ end
551
+ plain "Logout"
552
+ end
553
+ end
554
+ end
555
+
556
+ Popover(options: { placement: 'left-start' }) do
557
+ PopoverTrigger(class: 'w-full') do
558
+ Button(variant: :outline, class: 'w-full justify-center') { 'left-start' }
559
+ end
560
+ PopoverContent(class: 'w-40') do
561
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
562
+ svg(
563
+ xmlns: "http://www.w3.org/2000/svg",
564
+ fill: "none",
565
+ viewbox: "0 0 24 24",
566
+ stroke_width: "1.5",
567
+ stroke: "currentColor",
568
+ class: "w-4 h-4 mr-2"
569
+ ) do |s|
570
+ s.path(
571
+ stroke_linecap: "round",
572
+ stroke_linejoin: "round",
573
+ d:
574
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
575
+ )
576
+ end
577
+ plain "Profile"
578
+ end
579
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
580
+ svg(
581
+ xmlns: "http://www.w3.org/2000/svg",
582
+ fill: "none",
583
+ viewbox: "0 0 24 24",
584
+ stroke_width: "1.5",
585
+ stroke: "currentColor",
586
+ class: "w-4 h-4 mr-2"
587
+ ) do |s|
588
+ s.path(
589
+ stroke_linecap: "round",
590
+ stroke_linejoin: "round",
591
+ d:
592
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
593
+ )
594
+ s.path(
595
+ stroke_linecap: "round",
596
+ stroke_linejoin: "round",
597
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
598
+ )
599
+ end
600
+ plain "Settings"
601
+ end
602
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
603
+ svg(
604
+ xmlns: "http://www.w3.org/2000/svg",
605
+ fill: "none",
606
+ viewbox: "0 0 24 24",
607
+ stroke_width: "1.5",
608
+ stroke: "currentColor",
609
+ class: "w-4 h-4 mr-2"
610
+ ) do |s|
611
+ s.path(
612
+ stroke_linecap: "round",
613
+ stroke_linejoin: "round",
614
+ d:
615
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
616
+ )
617
+ end
618
+ plain "Logout"
619
+ end
620
+ end
621
+ end
622
+
623
+ Popover(options: { placement: 'left-end' }) do
624
+ PopoverTrigger(class: 'w-full') do
625
+ Button(variant: :outline, class: 'w-full justify-center') { 'left-end' }
626
+ end
627
+ PopoverContent(class: 'w-40') do
628
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
629
+ svg(
630
+ xmlns: "http://www.w3.org/2000/svg",
631
+ fill: "none",
632
+ viewbox: "0 0 24 24",
633
+ stroke_width: "1.5",
634
+ stroke: "currentColor",
635
+ class: "w-4 h-4 mr-2"
636
+ ) do |s|
637
+ s.path(
638
+ stroke_linecap: "round",
639
+ stroke_linejoin: "round",
640
+ d:
641
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
642
+ )
643
+ end
644
+ plain "Profile"
645
+ end
646
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
647
+ svg(
648
+ xmlns: "http://www.w3.org/2000/svg",
649
+ fill: "none",
650
+ viewbox: "0 0 24 24",
651
+ stroke_width: "1.5",
652
+ stroke: "currentColor",
653
+ class: "w-4 h-4 mr-2"
654
+ ) do |s|
655
+ s.path(
656
+ stroke_linecap: "round",
657
+ stroke_linejoin: "round",
658
+ d:
659
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
660
+ )
661
+ s.path(
662
+ stroke_linecap: "round",
663
+ stroke_linejoin: "round",
664
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
665
+ )
666
+ end
667
+ plain "Settings"
668
+ end
669
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
670
+ svg(
671
+ xmlns: "http://www.w3.org/2000/svg",
672
+ fill: "none",
673
+ viewbox: "0 0 24 24",
674
+ stroke_width: "1.5",
675
+ stroke: "currentColor",
676
+ class: "w-4 h-4 mr-2"
677
+ ) do |s|
678
+ s.path(
679
+ stroke_linecap: "round",
680
+ stroke_linejoin: "round",
681
+ d:
682
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
683
+ )
684
+ end
685
+ plain "Logout"
686
+ end
687
+ end
688
+ end
689
+
690
+ # -- BOTTOM --
691
+ Popover(options: { placement: 'bottom' }) do
692
+ PopoverTrigger(class: 'w-full') do
693
+ Button(variant: :outline, class: 'w-full justify-center') { 'bottom' }
694
+ end
695
+ PopoverContent(class: 'w-40') do
696
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
697
+ svg(
698
+ xmlns: "http://www.w3.org/2000/svg",
699
+ fill: "none",
700
+ viewbox: "0 0 24 24",
701
+ stroke_width: "1.5",
702
+ stroke: "currentColor",
703
+ class: "w-4 h-4 mr-2"
704
+ ) do |s|
705
+ s.path(
706
+ stroke_linecap: "round",
707
+ stroke_linejoin: "round",
708
+ d:
709
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
710
+ )
711
+ end
712
+ plain "Profile"
713
+ end
714
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
715
+ svg(
716
+ xmlns: "http://www.w3.org/2000/svg",
717
+ fill: "none",
718
+ viewbox: "0 0 24 24",
719
+ stroke_width: "1.5",
720
+ stroke: "currentColor",
721
+ class: "w-4 h-4 mr-2"
722
+ ) do |s|
723
+ s.path(
724
+ stroke_linecap: "round",
725
+ stroke_linejoin: "round",
726
+ d:
727
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
728
+ )
729
+ s.path(
730
+ stroke_linecap: "round",
731
+ stroke_linejoin: "round",
732
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
733
+ )
734
+ end
735
+ plain "Settings"
736
+ end
737
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
738
+ svg(
739
+ xmlns: "http://www.w3.org/2000/svg",
740
+ fill: "none",
741
+ viewbox: "0 0 24 24",
742
+ stroke_width: "1.5",
743
+ stroke: "currentColor",
744
+ class: "w-4 h-4 mr-2"
745
+ ) do |s|
746
+ s.path(
747
+ stroke_linecap: "round",
748
+ stroke_linejoin: "round",
749
+ d:
750
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
751
+ )
752
+ end
753
+ plain "Logout"
754
+ end
755
+ end
756
+ end
757
+
758
+ Popover(options: { placement: 'bottom-start' }) do
759
+ PopoverTrigger(class: 'w-full') do
760
+ Button(variant: :outline, class: 'w-full justify-center') { 'bottom-start' }
761
+ end
762
+ PopoverContent(class: 'w-40') do
763
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
764
+ svg(
765
+ xmlns: "http://www.w3.org/2000/svg",
766
+ fill: "none",
767
+ viewbox: "0 0 24 24",
768
+ stroke_width: "1.5",
769
+ stroke: "currentColor",
770
+ class: "w-4 h-4 mr-2"
771
+ ) do |s|
772
+ s.path(
773
+ stroke_linecap: "round",
774
+ stroke_linejoin: "round",
775
+ d:
776
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
777
+ )
778
+ end
779
+ plain "Profile"
780
+ end
781
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
782
+ svg(
783
+ xmlns: "http://www.w3.org/2000/svg",
784
+ fill: "none",
785
+ viewbox: "0 0 24 24",
786
+ stroke_width: "1.5",
787
+ stroke: "currentColor",
788
+ class: "w-4 h-4 mr-2"
789
+ ) do |s|
790
+ s.path(
791
+ stroke_linecap: "round",
792
+ stroke_linejoin: "round",
793
+ d:
794
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
795
+ )
796
+ s.path(
797
+ stroke_linecap: "round",
798
+ stroke_linejoin: "round",
799
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
800
+ )
801
+ end
802
+ plain "Settings"
803
+ end
804
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
805
+ svg(
806
+ xmlns: "http://www.w3.org/2000/svg",
807
+ fill: "none",
808
+ viewbox: "0 0 24 24",
809
+ stroke_width: "1.5",
810
+ stroke: "currentColor",
811
+ class: "w-4 h-4 mr-2"
812
+ ) do |s|
813
+ s.path(
814
+ stroke_linecap: "round",
815
+ stroke_linejoin: "round",
816
+ d:
817
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
818
+ )
819
+ end
820
+ plain "Logout"
821
+ end
822
+ end
823
+ end
824
+
825
+ Popover(options: { placement: 'bottom-end' }) do
826
+ PopoverTrigger(class: 'w-full') do
827
+ Button(variant: :outline, class: 'w-full justify-center') { 'bottom-end' }
828
+ end
829
+ PopoverContent(class: 'w-40') do
830
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
831
+ svg(
832
+ xmlns: "http://www.w3.org/2000/svg",
833
+ fill: "none",
834
+ viewbox: "0 0 24 24",
835
+ stroke_width: "1.5",
836
+ stroke: "currentColor",
837
+ class: "w-4 h-4 mr-2"
838
+ ) do |s|
839
+ s.path(
840
+ stroke_linecap: "round",
841
+ stroke_linejoin: "round",
842
+ d:
843
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
844
+ )
845
+ end
846
+ plain "Profile"
847
+ end
848
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
849
+ svg(
850
+ xmlns: "http://www.w3.org/2000/svg",
851
+ fill: "none",
852
+ viewbox: "0 0 24 24",
853
+ stroke_width: "1.5",
854
+ stroke: "currentColor",
855
+ class: "w-4 h-4 mr-2"
856
+ ) do |s|
857
+ s.path(
858
+ stroke_linecap: "round",
859
+ stroke_linejoin: "round",
860
+ d:
861
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
862
+ )
863
+ s.path(
864
+ stroke_linecap: "round",
865
+ stroke_linejoin: "round",
866
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
867
+ )
868
+ end
869
+ plain "Settings"
870
+ end
871
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
872
+ svg(
873
+ xmlns: "http://www.w3.org/2000/svg",
874
+ fill: "none",
875
+ viewbox: "0 0 24 24",
876
+ stroke_width: "1.5",
877
+ stroke: "currentColor",
878
+ class: "w-4 h-4 mr-2"
879
+ ) do |s|
880
+ s.path(
881
+ stroke_linecap: "round",
882
+ stroke_linejoin: "round",
883
+ d:
884
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
885
+ )
886
+ end
887
+ plain "Logout"
888
+ end
889
+ end
890
+ end
891
+ end
892
+ RUBY
893
+ end
894
+
895
+ render Docs::VisualCodeExample.new(title: "Trigger", context: self) do
896
+ <<~RUBY
897
+ Popover(options: { trigger: 'click' }) do
898
+ PopoverTrigger(class: 'w-full') do
899
+ Button(variant: :outline) { "Click" }
900
+ end
901
+ PopoverContent(class: 'w-40') do
902
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
903
+ svg(
904
+ xmlns: "http://www.w3.org/2000/svg",
905
+ fill: "none",
906
+ viewbox: "0 0 24 24",
907
+ stroke_width: "1.5",
908
+ stroke: "currentColor",
909
+ class: "w-4 h-4 mr-2"
910
+ ) do |s|
911
+ s.path(
912
+ stroke_linecap: "round",
913
+ stroke_linejoin: "round",
914
+ d:
915
+ "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z"
916
+ )
917
+ end
918
+ plain "Profile"
919
+ end
920
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
921
+ svg(
922
+ xmlns: "http://www.w3.org/2000/svg",
923
+ fill: "none",
924
+ viewbox: "0 0 24 24",
925
+ stroke_width: "1.5",
926
+ stroke: "currentColor",
927
+ class: "w-4 h-4 mr-2"
928
+ ) do |s|
929
+ s.path(
930
+ stroke_linecap: "round",
931
+ stroke_linejoin: "round",
932
+ d:
933
+ "M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"
934
+ )
935
+ s.path(
936
+ stroke_linecap: "round",
937
+ stroke_linejoin: "round",
938
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
939
+ )
940
+ end
941
+ plain "Settings"
942
+ end
943
+ Link(href: "#", variant: :ghost, class: 'w-full justify-start pl-2') do
944
+ svg(
945
+ xmlns: "http://www.w3.org/2000/svg",
946
+ fill: "none",
947
+ viewbox: "0 0 24 24",
948
+ stroke_width: "1.5",
949
+ stroke: "currentColor",
950
+ class: "w-4 h-4 mr-2"
951
+ ) do |s|
952
+ s.path(
953
+ stroke_linecap: "round",
954
+ stroke_linejoin: "round",
955
+ d:
956
+ "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"
957
+ )
958
+ end
959
+ plain "Logout"
960
+ end
961
+ end
962
+ end
963
+ RUBY
964
+ end
965
+
966
+ render Components::ComponentSetup::Tabs.new(component_name: component)
967
+
968
+ render Docs::ComponentsTable.new(component_files(component))
969
+ end
970
+ end
971
+ end