From 3aad267a96b8745aa7894f3eb7513506e28b886f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Mendon=C3=A7a?= Date: Mon, 25 May 2026 12:42:04 -0300 Subject: [PATCH] [Feature] Add Sheet initial open state --- gem/lib/ruby_ui/sheet/sheet.rb | 10 +++++++++- gem/lib/ruby_ui/sheet/sheet_controller.js | 6 ++++++ gem/test/ruby_ui/sheet_test.rb | 12 ++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gem/lib/ruby_ui/sheet/sheet.rb b/gem/lib/ruby_ui/sheet/sheet.rb index 84dc6c15b..1b3b0300f 100644 --- a/gem/lib/ruby_ui/sheet/sheet.rb +++ b/gem/lib/ruby_ui/sheet/sheet.rb @@ -2,6 +2,11 @@ module RubyUI class Sheet < Base + def initialize(open: false, **attrs) + @open = open + super(**attrs) + end + def view_template(&) div(**attrs, &) end @@ -10,7 +15,10 @@ def view_template(&) def default_attrs { - data: {controller: "ruby-ui--sheet"} + data: { + controller: "ruby-ui--sheet", + ruby_ui__sheet_open_value: @open.to_s + } } end end diff --git a/gem/lib/ruby_ui/sheet/sheet_controller.js b/gem/lib/ruby_ui/sheet/sheet_controller.js index 45e98637a..22ddf68d8 100644 --- a/gem/lib/ruby_ui/sheet/sheet_controller.js +++ b/gem/lib/ruby_ui/sheet/sheet_controller.js @@ -3,6 +3,12 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["content"] + static values = { open: false } + + connect() { + if (this.openValue) this.open() + } + open() { document.body.insertAdjacentHTML("beforeend", this.contentTarget.innerHTML) } diff --git a/gem/test/ruby_ui/sheet_test.rb b/gem/test/ruby_ui/sheet_test.rb index 3b5fe46a9..2b7074574 100644 --- a/gem/test/ruby_ui/sheet_test.rb +++ b/gem/test/ruby_ui/sheet_test.rb @@ -30,4 +30,16 @@ def test_render_with_all_items assert_match(/Open Sheet/, output) end + + def test_render_closed_by_default + output = phlex { RubyUI.Sheet { "content" } } + + assert_match(/data-ruby-ui--sheet-open-value="false"/, output) + end + + def test_render_open_when_open_is_true + output = phlex { RubyUI.Sheet(open: true) { "content" } } + + assert_match(/data-ruby-ui--sheet-open-value="true"/, output) + end end