Skip to content

Commit ebd2f87

Browse files
committed
Create UI radio component
1 parent db99cba commit ebd2f87

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
class SolidusAdmin::UI::Radio::Component < SolidusAdmin::BaseComponent
4+
SIZES = {
5+
s: "size-4 checked:border-[5px]",
6+
m: "size-5 checked:border-[6px]",
7+
}.freeze
8+
9+
def initialize(size: :m, **attributes)
10+
@size = size
11+
@attributes = attributes
12+
@attributes[:class] = "
13+
#{SIZES.fetch(@size)}
14+
appearance-none cursor-pointer outline-none
15+
rounded-full border-2 border-gray-300 bg-white
16+
checked:border-gray-700
17+
hover:border-gray-700 hover:checked:border-gray-500
18+
focus:ring-2 focus:ring-offset-1 focus:ring-gray-300
19+
active:ring-2 active:ring-offset-1 active:ring-gray-300
20+
focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-gray-300
21+
disabled:border-gray-300/50 disabled:hover:border-gray-300/50 disabled:active:ring-0 disabled:cursor-not-allowed
22+
transition-all duration-75 ease-linear
23+
"
24+
end
25+
26+
def call
27+
tag.input(type: "radio", **@attributes)
28+
end
29+
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# frozen_string_literal: true
2+
3+
# @component "ui/forms/switch"
4+
class SolidusAdmin::UI::Radio::ComponentPreview < ViewComponent::Preview
5+
include SolidusAdmin::Preview
6+
7+
def overview
8+
render_with_template
9+
end
10+
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<div class="grid grid-cols-5 gap-2 text-sm text-gray-700 items-center">
2+
<div></div>
3+
<div class="col-span-2 text-center font-semibold">Small</div>
4+
<div class="col-span-2 text-center font-semibold">Medium</div>
5+
6+
<div></div>
7+
<div class="text-center">Default</div>
8+
<div class="text-center">Disabled</div>
9+
<div class="text-center">Default</div>
10+
<div class="text-center">Disabled</div>
11+
12+
<div class="font-semibold text-right">Off</div>
13+
<div class="place-self-center">
14+
<%= render current_component.new name: "small-default", size: :s %>
15+
</div>
16+
<div class="place-self-center">
17+
<%= render current_component.new name: "small-disabled", size: :s, disabled: true %>
18+
</div>
19+
<div class="place-self-center">
20+
<%= render current_component.new name: "medium-default" %>
21+
</div>
22+
<div class="place-self-center">
23+
<%= render current_component.new name: "medium-disabled", disabled: true %>
24+
</div>
25+
26+
<div class="font-semibold text-right">On</div>
27+
<div class="place-self-center">
28+
<%= render current_component.new name: "small-default", size: :s, checked: true %>
29+
</div>
30+
<div class="place-self-center">
31+
<%= render current_component.new name: "small-disabled", size: :s, checked: true, disabled: true %>
32+
</div>
33+
<div class="place-self-center">
34+
<%= render current_component.new name: "medium-default", checked: true %>
35+
</div>
36+
<div class="place-self-center">
37+
<%= render current_component.new name: "medium-disabled", checked: true, disabled: true %>
38+
</div>
39+
</div>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
5+
RSpec.describe SolidusAdmin::UI::Radio::Component, type: :component do
6+
it "renders the overview preview" do
7+
render_preview(:overview)
8+
end
9+
end

0 commit comments

Comments
 (0)