From 9aa70cb1bae59d138917f3dfb049852c52f1123f Mon Sep 17 00:00:00 2001 From: Bruno Luigi Date: Fri, 22 Nov 2024 11:31:04 +0000 Subject: [PATCH 1/3] Switch component implemented --- README.md | 2 +- lib/ruby_ui/switch/switch.rb | 30 ++++++++++++++++++++++++++++++ test/ruby_ui/switch_test.rb | 21 +++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 lib/ruby_ui/switch/switch.rb create mode 100644 test/ruby_ui/switch_test.rb diff --git a/README.md b/README.md index 47b51b56..373b0922 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ bin/rails g ruby_ui:install ## Documentation 📖 -Visit https://ruby_ui.dev/docs/introduction to view the full documentation, including: +Visit https://rbui.dev/docs/introduction to view the full documentation, including: - Detailed component guides - Themes diff --git a/lib/ruby_ui/switch/switch.rb b/lib/ruby_ui/switch/switch.rb new file mode 100644 index 00000000..a8b511c4 --- /dev/null +++ b/lib/ruby_ui/switch/switch.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module RubyUI + class Switch < Base + def view_template + attrs => { include_hidden:, **input_attrs } + + label( + role: "switch", + class: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50 bg-input has-[:checked]:bg-primary" + ) do + input(type: "hidden", name: attrs[:name], value: "0") if include_hidden + input(**input_attrs) + + span(class: "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform translate-x-0 peer-checked:translate-x-5 ") + end + end + + private + + def default_attrs + { + class: "hidden peer", + type: "checkbox", + include_hidden: true, + value: "1" + } + end + end +end diff --git a/test/ruby_ui/switch_test.rb b/test/ruby_ui/switch_test.rb new file mode 100644 index 00000000..59fa4cfc --- /dev/null +++ b/test/ruby_ui/switch_test.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require "test_helper" + +class RubyUI::SwitchTest < ComponentTest + def test_render_with_all_items + output = phlex do + RubyUI.Switch(name: "toggle") + end + + assert_match(/toggle/, output) + end + + def test_render_checked + output = phlex do + RubyUI.Switch(name: "toggle", checked: true) + end + + assert_match(/checked/, output) + end +end From 77866aab6b19430e2a74328530ca5f5bd2964785 Mon Sep 17 00:00:00 2001 From: Bruno Luigi Date: Fri, 22 Nov 2024 11:46:35 +0000 Subject: [PATCH 2/3] README.md url fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 373b0922..e1856e44 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ bin/rails g ruby_ui:install ## Documentation 📖 -Visit https://rbui.dev/docs/introduction to view the full documentation, including: +Visit https://rubyui.com/docs/introduction to view the full documentation, including: - Detailed component guides - Themes From 79f65b972030a53c4195959151fdd377f3e03ccd Mon Sep 17 00:00:00 2001 From: Bruno Luigi Date: Mon, 2 Dec 2024 10:26:48 +0000 Subject: [PATCH 3/3] Adjustments suggested by @stephannv --- lib/ruby_ui/switch/switch.rb | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/ruby_ui/switch/switch.rb b/lib/ruby_ui/switch/switch.rb index a8b511c4..1dcf275a 100644 --- a/lib/ruby_ui/switch/switch.rb +++ b/lib/ruby_ui/switch/switch.rb @@ -2,29 +2,23 @@ module RubyUI class Switch < Base - def view_template - attrs => { include_hidden:, **input_attrs } + def initialize(include_hidden: true, checked_value: "1", unchecked_value: "0", **attrs) + @include_hidden = include_hidden + @checked_value = checked_value + @unchecked_value = unchecked_value + super(**attrs) + end + def view_template label( role: "switch", class: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50 bg-input has-[:checked]:bg-primary" ) do - input(type: "hidden", name: attrs[:name], value: "0") if include_hidden - input(**input_attrs) + input(type: "hidden", name: attrs[:name], value: @unchecked_value) if @include_hidden + input(**attrs.merge(type: "checkbox", class: "hidden peer", value: @checked_value)) span(class: "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform translate-x-0 peer-checked:translate-x-5 ") end end - - private - - def default_attrs - { - class: "hidden peer", - type: "checkbox", - include_hidden: true, - value: "1" - } - end end end