diff --git a/LICENSE.txt b/LICENSE.txt
index 89c27dd9..f2420e82 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2024 RBUI
+Copyright (c) 2024 RubyUI
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 4bcc1b9f..47b51b56 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,15 @@
-# RBUI (former PhlexUI) 🚀
+# RubyUI (former PhlexUI) 🚀
A UI component library, crafted precisely for Ruby devs who want to stay organized and build modern apps, fast. ✨
**Use this to build your own component library** 🛠️
-## About RBUI 📚
+## About RubyUI 📚
-RBUI is a UI component library designed to let Ruby developers create modern, fast, and organized applications. 💎
+RubyUI is a UI component library designed to let Ruby developers create modern, fast, and organized applications. 💎
### Key Features:
-- **Built for Speed** ⚡: RBUI leverages Phlex, which is up to 12x faster than traditional Rails ERB templates.
+- **Built for Speed** ⚡: RubyUI leverages Phlex, which is up to 12x faster than traditional Rails ERB templates.
- **Stunning UI** 🎨: Design beautiful, streamlined, and customizable UIs that sell your app effortlessly.
- **Stay Organized** 📁: Keep your UI components well-organized and easy to manage.
- **Customer-Centric UX** 🧑💼: Create memorable app experiences for your users.
@@ -28,26 +28,26 @@ RBUI is a UI component library designed to let Ruby developers create modern, fa
### 1. Install the gem
```bash
-bundle add rbui
+bundle add ruby_ui
```
or add it to your Gemfile:
```ruby
-gem "rbui"
+gem "ruby_ui"
```
### 2. Run the installer:
```bash
-bin/rails g rbui:install
+bin/rails g ruby_ui:install
```
### 3. Done! 🎉
## Documentation 📖
-Visit https://rbui.dev/docs/introduction to view the full documentation, including:
+Visit https://ruby_ui.dev/docs/introduction to view the full documentation, including:
- Detailed component guides
- Themes
@@ -56,7 +56,7 @@ Visit https://rbui.dev/docs/introduction to view the full documentation, includi
## Speed Comparison 🏎️
-RBUI, powered by Phlex, outperforms traditional methods:
+RubyUI, powered by Phlex, outperforms traditional methods:
- Phlex: Baseline 🏁
- ViewComponent: 5.57x slower 🐢
@@ -75,4 +75,4 @@ Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.
---
-© 2024 RBUI. All rights reserved. 🔒
+© 2024 RubyUI. All rights reserved. 🔒
diff --git a/bin/console b/bin/console
index 1d47efb2..22d83bec 100644
--- a/bin/console
+++ b/bin/console
@@ -1,7 +1,7 @@
#!/usr/bin/env ruby
require "bundler/setup"
-require "rbui"
+require "ruby_ui"
Bundler.require(:development)
diff --git a/lib/generators/rbui/install/templates/base_store_initializer.rb.tt b/lib/generators/rbui/install/templates/base_store_initializer.rb.tt
deleted file mode 100644
index 02a09787..00000000
--- a/lib/generators/rbui/install/templates/base_store_initializer.rb.tt
+++ /dev/null
@@ -1,10 +0,0 @@
-#RBUI.setup do |config|
-
- # Setting a namespace allows you to access RBUI components through this namespace.
- # For example, with namespace set to "UI", you can use:
- # UI::Button.new instead of RBUI::Button.new
- # UI::Card.new instead of RBUI::Card.new
- # This can help avoid naming conflicts and allows for cleaner, more concise code.
- # If you prefer to use RBUI components directly, you can leave this unset.
- # config.namespace = "UI"
-#end
diff --git a/lib/generators/rbui/base_generator.rb b/lib/generators/ruby_ui/base_generator.rb
similarity index 89%
rename from lib/generators/rbui/base_generator.rb
rename to lib/generators/ruby_ui/base_generator.rb
index 40e313c3..8f55601a 100644
--- a/lib/generators/rbui/base_generator.rb
+++ b/lib/generators/ruby_ui/base_generator.rb
@@ -1,9 +1,9 @@
require "rails/generators"
-module RBUI
+module RubyUI
module Generators
class BaseGenerator < defined?(Rails::Generators::Base) ? Rails::Generators::Base : Object
- namespace "rbui:base"
+ namespace "ruby_ui:base"
source_root File.join(__dir__, "templates")
diff --git a/lib/generators/rbui/component_generator.rb b/lib/generators/ruby_ui/component_generator.rb
similarity index 80%
rename from lib/generators/rbui/component_generator.rb
rename to lib/generators/ruby_ui/component_generator.rb
index ae81404b..4ff80df9 100644
--- a/lib/generators/rbui/component_generator.rb
+++ b/lib/generators/ruby_ui/component_generator.rb
@@ -1,7 +1,7 @@
-module RBUI
+module RubyUI
module Generators
- class ComponentGenerator < RBUI::Generators::BaseGenerator
- namespace "rbui:component"
+ class ComponentGenerator < RubyUI::Generators::BaseGenerator
+ namespace "ruby_ui:component"
source_root File.expand_path("../../..", __dir__)
argument :component_name, type: :string, required: true
@@ -21,7 +21,7 @@ def copy_common_files
end
def copy_component_files
- puts "Component #{component} not found in rbui gem" if component_source.empty?
+ puts "Component #{component} not found in ruby_ui gem" if component_source.empty?
component_files = Dir.glob("#{component_source}/*")
@@ -32,22 +32,22 @@ def copy_component_files
end
def update_index_file
- index_path = File.join(destination_root, "app/components/rbui/index.js")
+ index_path = File.join(destination_root, "app/components/ruby_ui/index.js")
- rbui_index_content = File.read(index_path)
+ ruby_ui_index_content = File.read(index_path)
- updated_rbui_index_content = add_controller_registration(rbui_index_content)
+ updated_ruby_ui_index_content = add_controller_registration(ruby_ui_index_content)
- File.write(index_path, updated_rbui_index_content)
+ File.write(index_path, updated_ruby_ui_index_content)
end
- def add_controller_registration(rbui_index_content)
+ def add_controller_registration(ruby_ui_index_content)
valid_controllers = get_valid_controllers
- rbui_index_content = update_imports(rbui_index_content, valid_controllers)
- update_registrations(rbui_index_content, valid_controllers)
+ ruby_ui_index_content = update_imports(ruby_ui_index_content, valid_controllers)
+ update_registrations(ruby_ui_index_content, valid_controllers)
# Uncomment the following line if you want to update exports
- # rbui_index_content = update_exports(rbui_index_content, valid_controllers)
+ # ruby_ui_index_content = update_exports(ruby_ui_index_content, valid_controllers)
end
def get_valid_controllers
@@ -74,8 +74,8 @@ def controller_info(controller_file)
# Build the new import path
new_import_path = new_import_path("./#{relative_path.dirname}/#{file_name}")
- # Create the registration name by dasherizing the component name and prefixing with 'rbui--'
- registration_name = "rbui--#{component_name.dasherize}"
+ # Create the registration name by dasherizing the component name and prefixing with 'ruby_ui--'
+ registration_name = "ruby_ui--#{component_name.dasherize}"
# Return a hash with import, registration, and export statements
{
@@ -92,7 +92,7 @@ def controller_info(controller_file)
def new_import_path(relative_path)
if using_importmap?
- "rbui/#{relative_path.sub(/^\.\//, "")}"
+ "ruby_ui/#{relative_path.sub(/^\.\//, "")}"
else
relative_path
end
@@ -118,11 +118,11 @@ def component
end
def source_path
- @source_path ||= "lib/rbui"
+ @source_path ||= "lib/ruby_ui"
end
def destination_path
- @destination_path ||= "app/components/rbui"
+ @destination_path ||= "app/components/ruby_ui"
end
def component_source
diff --git a/lib/generators/rbui/install/install_generator.rb b/lib/generators/ruby_ui/install/install_generator.rb
similarity index 82%
rename from lib/generators/rbui/install/install_generator.rb
rename to lib/generators/ruby_ui/install/install_generator.rb
index 3454641c..f7b4acac 100644
--- a/lib/generators/rbui/install/install_generator.rb
+++ b/lib/generators/ruby_ui/install/install_generator.rb
@@ -2,10 +2,10 @@
require_relative "../base_generator"
# TODO: make ejctectec components work without the gem
-module RBUI
+module RubyUI
module Generators
- class InstallGenerator < RBUI::Generators::BaseGenerator
- namespace "rbui:install"
+ class InstallGenerator < RubyUI::Generators::BaseGenerator
+ namespace "ruby_ui:install"
if defined?(Rails::Generators::Base)
source_root File.expand_path("templates", __dir__)
@@ -22,7 +22,7 @@ def add_phlex_rails
say "Phlex Rails is already installed", :green
else
say "Adding Phlex Rails"
- run "bundle add phlex-rails --version=\"~> 1.2.1\""
+ run "bundle add phlex-rails --version=\"~> 2.0.0.beta2\""
end
say "Adding tailwind_merge"
@@ -59,11 +59,11 @@ def install_stuff
tailwind_config_path = Rails.root.join("config/tailwind.config.js")
if !File.exist?(tailwind_config_path)
- say "Tailwind CSS is required for RBUI", :red
+ say "Tailwind CSS is required for RubyUI", :red
end
- say "Add rbui initializer"
- template "base_store_initializer.rb", "config/initializers/rbui.rb"
+ say "Add ruby_ui initializer"
+ template "base_store_initializer.rb", "config/initializers/ruby_ui.rb"
if using_importmap?
say "Using importmaps, adding tailwind-animate"
@@ -90,16 +90,16 @@ def install_stuff
template "application.tailwind.css", "app/assets/stylesheets/application.tailwind.css", force: true
end
- def pin_rbui_js
+ def pin_ruby_ui_js
stimulus_path = Rails.root.join("app/javascript/application.js")
- package_name = "rbui-js"
+ package_name = "ruby_ui-js"
- say "Add RBUI Stimulus controllers"
- # run "mkdir -p app/javascript/controllers/rbui-js"
- template "index.js", "app/components/rbui/index.js"
+ say "Add RubyUI Stimulus controllers"
+ # run "mkdir -p app/javascript/controllers/ruby_ui-js"
+ template "index.js", "app/components/ruby_ui/index.js"
if using_importmap?
- gsub_file "app/components/rbui/index.js", /^import { application }.*$/ do
+ gsub_file "app/components/ruby_ui/index.js", /^import { application }.*$/ do
'import { application } from "controllers/application";'
end
@@ -109,34 +109,34 @@ def pin_rbui_js
say "Pin #{package_name}"
append_to_file Rails.root.join("config/importmap.rb") do
- "pin_all_from \"app/components/rbui\", under: \"rbui\"\n"
+ "pin_all_from \"app/components/ruby_ui\", under: \"ruby_ui\"\n"
end
run "bin/importmap pin #{package_name}"
- append_to_file stimulus_path, "\nimport \"rbui\";\n"
+ append_to_file stimulus_path, "\nimport \"ruby_ui\";\n"
manifest_path = Rails.root.join("app/assets/config/manifest.js")
if File.exist?(manifest_path)
- append_to_file manifest_path, "\n//= link rbui/index.js\n"
+ append_to_file manifest_path, "\n//= link ruby_ui/index.js\n"
end
fix_import_maps!
else
- say "Add rbui-js package"
+ say "Add ruby_ui-js package"
run "yarn add #{package_name}"
- append_to_file stimulus_path, "\nimport \"../components/rbui\";\n"
+ append_to_file stimulus_path, "\nimport \"../components/ruby_ui\";\n"
run "yarn build"
end
end
- def include_rbui
- message = "Include RBUI in your global component layout?\n This allows to call RBUI.Button {\"button\"} / RBUI::Button.new {\"button\"} with Button {\"button\"} (y/n)"
+ def include_ruby_ui
+ message = "Include RubyUI in your global component layout?\n This allows to call RubyUI.Button {\"button\"} / RubyUI::Button.new {\"button\"} with Button {\"button\"} (y/n)"
if yes?(message)
- say "Add RBUI to your global component layout"
+ say "Add RubyUI to your global component layout"
insert_into_file "app/views/application_view.rb", after: "class ApplicationView < ApplicationComponent\n" do
- " include RBUI\n"
+ " include RubyUI\n"
end
end
end
diff --git a/lib/generators/rbui/install/templates/.keep b/lib/generators/ruby_ui/install/templates/.keep
similarity index 100%
rename from lib/generators/rbui/install/templates/.keep
rename to lib/generators/ruby_ui/install/templates/.keep
diff --git a/lib/generators/rbui/install/templates/application.tailwind.css.tt b/lib/generators/ruby_ui/install/templates/application.tailwind.css.tt
similarity index 97%
rename from lib/generators/rbui/install/templates/application.tailwind.css.tt
rename to lib/generators/ruby_ui/install/templates/application.tailwind.css.tt
index 26fa13a0..582befe7 100644
--- a/lib/generators/rbui/install/templates/application.tailwind.css.tt
+++ b/lib/generators/ruby_ui/install/templates/application.tailwind.css.tt
@@ -25,7 +25,7 @@
--ring: 240 5.9% 10%;
--radius: 0.5rem;
- /* rbui especific */
+ /* ruby_ui especific */
--warning: 38 92% 50%;
--warning-foreground: 0 0% 100%;
--success: 87 100% 37%;
@@ -53,7 +53,7 @@
--input: 240 3.7% 15.9%;
--ring: 240 4.9% 83.9%;
- /* rbui especific */
+ /* ruby_ui especific */
--warning: 38 92% 50%;
--warning-foreground: 0 0% 100%;
--success: 84 81% 44%;
diff --git a/lib/generators/ruby_ui/install/templates/base_store_initializer.rb.tt b/lib/generators/ruby_ui/install/templates/base_store_initializer.rb.tt
new file mode 100644
index 00000000..c99d685f
--- /dev/null
+++ b/lib/generators/ruby_ui/install/templates/base_store_initializer.rb.tt
@@ -0,0 +1,10 @@
+#RubyUI.setup do |config|
+
+ # Setting a namespace allows you to access RubyUI components through this namespace.
+ # For example, with namespace set to "UI", you can use:
+ # UI::Button.new instead of RubyUI::Button.new
+ # UI::Card.new instead of RubyUI::Card.new
+ # This can help avoid naming conflicts and allows for cleaner, more concise code.
+ # If you prefer to use RubyUI components directly, you can leave this unset.
+ # config.namespace = "UI"
+#end
diff --git a/lib/generators/rbui/install/templates/index.js.tt b/lib/generators/ruby_ui/install/templates/index.js.tt
similarity index 61%
rename from lib/generators/rbui/install/templates/index.js.tt
rename to lib/generators/ruby_ui/install/templates/index.js.tt
index ff6e702d..68a9f7ad 100644
--- a/lib/generators/rbui/install/templates/index.js.tt
+++ b/lib/generators/ruby_ui/install/templates/index.js.tt
@@ -4,7 +4,7 @@ import { application } from "../../../app/javascript/controllers/application";
// import ComboboxController from "./combobox/combobox_controller";
// Register all controllers
-// application.register("rbui--combobox", ComboboxController);
+// application.register("ruby_ui--combobox", ComboboxController);
-import RBUI from "rbui-js";
-RBUI.initialize(application);
+import RubyUI from "ruby_ui-js";
+RubyUI.initialize(application);
diff --git a/lib/generators/rbui/install/templates/index_view.rb.tt b/lib/generators/ruby_ui/install/templates/index_view.rb.tt
similarity index 94%
rename from lib/generators/rbui/install/templates/index_view.rb.tt
rename to lib/generators/ruby_ui/install/templates/index_view.rb.tt
index 963dc8dd..0218e28d 100644
--- a/lib/generators/rbui/install/templates/index_view.rb.tt
+++ b/lib/generators/ruby_ui/install/templates/index_view.rb.tt
@@ -2,7 +2,7 @@
class Static::IndexView < ApplicationView
def template
- render RBUI::Button.new { "click me" }
+ render RubyUI::Button.new { "click me" }
br {}
# UI.Button { "click me" }
diff --git a/lib/generators/rbui/install/templates/tailwind.config.js.tt b/lib/generators/ruby_ui/install/templates/tailwind.config.js.tt
similarity index 88%
rename from lib/generators/rbui/install/templates/tailwind.config.js.tt
rename to lib/generators/ruby_ui/install/templates/tailwind.config.js.tt
index a517a41e..038bdb94 100644
--- a/lib/generators/rbui/install/templates/tailwind.config.js.tt
+++ b/lib/generators/ruby_ui/install/templates/tailwind.config.js.tt
@@ -1,9 +1,9 @@
-// For importing tailwind styles from rbui gem
+// For importing tailwind styles from ruby_ui gem
const execSync = require('child_process').execSync;
-// Import rbui gem path
-const outputRBUI = execSync('bundle show rbui', { encoding: 'utf-8' });
-const rbui_path = outputRBUI.trim() + '/**/*.rb';
+// Import ruby_ui gem path
+const outputRubyUI = execSync('bundle show ruby_ui', { encoding: 'utf-8' });
+const ruby_ui_path = outputRubyUI.trim() + '/**/*.rb';
const defaultTheme = require('tailwindcss/defaultTheme')
@@ -11,11 +11,11 @@ module.exports = {
darkMode: ["class"],
content: [
'./app/views/**/*.{erb,haml,html,slim,rb}',
- './app/components/rbui/**/*.rb',
+ './app/components/ruby_ui/**/*.rb',
'./app/helpers/**/*.rb',
'./app/assets/stylesheets/**/*.css',
'./app/javascript/**/*.js',
- rbui_path
+ ruby_ui_path
],
theme: {
container: {
@@ -60,7 +60,7 @@ module.exports = {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
- /* rbui especific */
+ /* ruby_ui especific */
warning: {
DEFAULT: "hsl(var(--warning))",
foreground: "hsl(var(--warning-foreground))",
diff --git a/lib/rbui.rb b/lib/rbui.rb
deleted file mode 100644
index 63073aea..00000000
--- a/lib/rbui.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require "json"
-require "phlex"
-
-module RBUI
- extend Phlex::Kit
-
- def self.setup
- yield self
- create_namespace_module if namespace
- end
-
- def self.create_namespace_module
- source_module = self
- mod = namespace.to_s.split("::").inject(Object) do |parent, const|
- parent.const_get(const)
- rescue
- parent.const_set(const, Module.new)
- end
-
- mod.singleton_class.class_eval do
- define_method :const_missing do |name|
- source_module.const_defined?(name) ? source_module.const_get(name) : super(name)
- end
-
- define_method :method_missing do |name, *args, &block|
- source_module.respond_to?(name) ? source_module.send(name, *args, &block) : super(name, *args, &block)
- end
-
- define_method :respond_to_missing? do |name, include_private = false|
- source_module.respond_to?(name) || super(name, include_private)
- end
- end
- end
-
- def self.namespace
- @namespace ||= nil
- end
-
- def self.namespace=(value)
- @namespace = value
- end
-end
-
-# Require the Base class first
-require_relative "rbui/base"
-
-# Manually require all the files
-Dir.glob(File.join(__dir__, "rbui", "**", "*.rb")).sort.each { |file| require file }
-
-# If you need to require generators (assuming they're needed)
-if defined?(Rails::Generators)
- require_relative "generators/rbui/base_generator"
- require_relative "generators/rbui/install/install_generator"
- require_relative "generators/rbui/component_generator"
-end
diff --git a/lib/rbui/accordion/accordion_controller.js b/lib/rbui/accordion/accordion_controller.js
deleted file mode 100644
index d646cefc..00000000
--- a/lib/rbui/accordion/accordion_controller.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import { Controller } from "@hotwired/stimulus"
-import { animate } from "motion"
-
-// Connects to data-controller="rbui--accordion"
-export default class extends Controller {
- static targets = ['icon', 'content']
- static values = {
- open: {
- type: Boolean,
- default: false,
- },
- animationDuration: {
- type: Number,
- default: 0.15, // Default animation duration (in seconds)
- },
- animationEasing: {
- type: String,
- default: 'ease-in-out', // Default animation easing
- },
- rotateIcon: {
- type: Number,
- default: 180, // Default icon rotation (in degrees)
- },
- }
-
- connect() {
- // Set the initial state of the accordion
- let originalAnimationDuration = this.animationDurationValue
- this.animationDurationValue = 0
- this.openValue ? this.open() : this.close()
- this.animationDurationValue = originalAnimationDuration
- }
-
- // Toggle the 'open' value
- toggle() {
- this.openValue = !this.openValue
- }
-
- // Handle changes in the 'open' value
- openValueChanged(isOpen, wasOpen) {
- if (isOpen) {
- this.open()
- } else {
- this.close()
- }
- }
-
- // Open the accordion content
- open() {
- if (this.hasContentTarget) {
- this.revealContent()
- this.hasIconTarget && this.rotateIcon()
- this.openValue = true
- }
- }
-
- // Close the accordion content
- close() {
- if (this.hasContentTarget) {
- this.hideContent()
- this.hasIconTarget && this.rotateIcon()
- this.openValue = false
- }
- }
-
- // Reveal the accordion content with animation
- revealContent() {
- const contentHeight = this.contentTarget.scrollHeight;
- animate(this.contentTarget, { height: `${contentHeight}px` }, { duration: this.animationDurationValue, easing: this.animationEasingValue })
- }
-
- // Hide the accordion content with animation
- hideContent() {
- animate(this.contentTarget, { height: 0 }, { duration: this.animationDurationValue, easing: this.animationEasingValue })
- }
-
- // Rotate the accordion icon 180deg using animate function
- rotateIcon() {
- animate(this.iconTarget, { rotate: `${this.openValue ? this.rotateIconValue : 0}deg` })
- }
-}
diff --git a/lib/rbui/calendar/calendar.rb b/lib/rbui/calendar/calendar.rb
deleted file mode 100644
index 2ea26c02..00000000
--- a/lib/rbui/calendar/calendar.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-module RBUI
- class Calendar < Base
- def initialize(selected_date: nil, input_id: nil, date_format: "yyyy-MM-dd", **attrs)
- @selected_date = selected_date
- @input_id = input_id
- @date_format = date_format
- super(**attrs)
- end
-
- def view_template
- div(**attrs) do
- RBUI.CalendarHeader do
- RBUI.CalendarTitle
- RBUI.CalendarPrev
- RBUI.CalendarNext
- end
- RBUI.CalendarBody # Where the calendar is rendered (Weekdays and Days)
- RBUI.CalendarWeekdays # Template for the weekdays
- RBUI.CalendarDays # Template for the days
- end
- end
-
- private
-
- def default_attrs
- {
- class: "p-3 space-y-4",
- data: {
- controller: "rbui--calendar",
- rbui__calendar_selected_date_value: @selected_date&.to_s,
- rbui__calendar_format_value: @date_format,
- rbui__calendar_rbui__calendar_input_outlet: @input_id
- }
- }
- end
- end
-end
diff --git a/lib/rbui/combobox/combobox.rb b/lib/rbui/combobox/combobox.rb
deleted file mode 100644
index 6441db31..00000000
--- a/lib/rbui/combobox/combobox.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-module RBUI
- class Combobox < Base
- def view_template(&)
- div(**attrs, &)
- end
-
- private
-
- def default_attrs
- {
- data: {
- controller: "rbui--combobox",
- rbui__combobox_open_value: "false",
- action: "click@window->rbui--combobox#onClickOutside",
- rbui__combobox_rbui__combobox_content_outlet: ".combobox-content",
- rbui__combobox_rbui__combobox_item_outlet: ".combobox-item"
- },
- class: "group/combobox w-full relative"
- }
- end
- end
-end
diff --git a/lib/rbui/combobox/combobox_content.rb b/lib/rbui/combobox/combobox_content.rb
deleted file mode 100644
index 75d858e8..00000000
--- a/lib/rbui/combobox/combobox_content.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-module RBUI
- class ComboboxContent < Base
- def initialize(**attrs)
- @id = "content#{SecureRandom.hex(4)}"
- super
- end
-
- def view_template(&)
- div(**attrs) do
- 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-[rbui--combobox-open-value=true]/combobox:animate-in fade-out-0 group-data-[rbui--combobox-open-value=true]/combobox:fade-in-0 zoom-out-95 group-data-[rbui--combobox-open-value=true]/combobox:zoom-in-95 slide-in-from-top-2", &)
- end
- end
-
- private
-
- def default_attrs
- {
- id: @id,
- role: "listbox",
- data: {
- controller: "rbui--combobox-content",
- rbui__combobox_target: "content",
- action: "keydown.enter->rbui--combobox#onKeyEnter keydown.esc->rbui--combobox#onEscKey keydown.down->rbui--combobox#onKeyDown keydown.up->rbui--combobox#onKeyUp"
- },
- class: "combobox-content hidden w-full absolute top-0 left-0 z-50"
- }
- end
- end
-end
diff --git a/lib/rbui/tabs/tabs_controller.js b/lib/rbui/tabs/tabs_controller.js
deleted file mode 100644
index 26cfa1af..00000000
--- a/lib/rbui/tabs/tabs_controller.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Controller } from "@hotwired/stimulus"
-
-// Connects to data-controller="rbui--tabs"
-export default class extends Controller {
- static targets = ["trigger", "content"]
- static values = { active: String }
-
- connect() {
- if (!this.hasActiveValue && this.triggerTargets.length > 0) {
- this.activeValue = this.triggerTargets[0].dataset.value
- }
- }
-
- show(e) {
- this.activeValue = e.currentTarget.dataset.value
- }
-
- activeValueChanged(currentValue, previousValue) {
- if (currentValue == '' || currentValue == previousValue) return
-
- this.contentTargets.forEach((el) => {
- el.classList.add("hidden")
- })
-
- this.triggerTargets.forEach((el) => {
- el.dataset.state = "inactive"
- })
-
- this.activeContentTarget() && this.activeContentTarget().classList.remove("hidden")
- this.activeTriggerTarget().dataset.state = "active"
- }
-
- activeTriggerTarget() {
- return this.triggerTargets.find((el) => el.dataset.value == this.activeValue)
- }
-
- activeContentTarget() {
- return this.contentTargets.find((el) => el.dataset.value == this.activeValue)
- }
-}
diff --git a/lib/ruby_ui.rb b/lib/ruby_ui.rb
index afff68f0..5ec29716 100644
--- a/lib/ruby_ui.rb
+++ b/lib/ruby_ui.rb
@@ -1 +1,57 @@
-require_relative "rbui"
+# frozen_string_literal: true
+
+require "json"
+require "phlex"
+
+module RubyUI
+ extend Phlex::Kit
+
+ def self.setup
+ yield self
+ create_namespace_module if namespace
+ end
+
+ def self.create_namespace_module
+ source_module = self
+ mod = namespace.to_s.split("::").inject(Object) do |parent, const|
+ parent.const_get(const)
+ rescue
+ parent.const_set(const, Module.new)
+ end
+
+ mod.singleton_class.class_eval do
+ define_method :const_missing do |name|
+ source_module.const_defined?(name) ? source_module.const_get(name) : super(name)
+ end
+
+ define_method :method_missing do |name, *args, &block|
+ source_module.respond_to?(name) ? source_module.send(name, *args, &block) : super(name, *args, &block)
+ end
+
+ define_method :respond_to_missing? do |name, include_private = false|
+ source_module.respond_to?(name) || super(name, include_private)
+ end
+ end
+ end
+
+ def self.namespace
+ @namespace ||= nil
+ end
+
+ def self.namespace=(value)
+ @namespace = value
+ end
+end
+
+# Require the Base class first
+require_relative "ruby_ui/base"
+
+# Manually require all the files
+Dir.glob(File.join(__dir__, "ruby_ui", "**", "*.rb")).sort.each { |file| require file }
+
+# If you need to require generators (assuming they're needed)
+if defined?(Rails::Generators)
+ require_relative "generators/ruby_ui/base_generator"
+ require_relative "generators/ruby_ui/install/install_generator"
+ require_relative "generators/ruby_ui/component_generator"
+end
diff --git a/lib/rbui/accordion/accordion.rb b/lib/ruby_ui/accordion/accordion.rb
similarity index 93%
rename from lib/rbui/accordion/accordion.rb
rename to lib/ruby_ui/accordion/accordion.rb
index 70ce830e..c7f8ff24 100644
--- a/lib/rbui/accordion/accordion.rb
+++ b/lib/ruby_ui/accordion/accordion.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Accordion < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/accordion/accordion_content.rb b/lib/ruby_ui/accordion/accordion_content.rb
similarity index 82%
rename from lib/rbui/accordion/accordion_content.rb
rename to lib/ruby_ui/accordion/accordion_content.rb
index a8b168ce..1b6feef9 100644
--- a/lib/rbui/accordion/accordion_content.rb
+++ b/lib/ruby_ui/accordion/accordion_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionContent < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__accordion_target: "content"
+ ruby_ui__accordion_target: "content"
},
class: "overflow-y-hidden",
style: "height: 0px;"
diff --git a/lib/ruby_ui/accordion/accordion_controller.js b/lib/ruby_ui/accordion/accordion_controller.js
new file mode 100644
index 00000000..0a2f0fd8
--- /dev/null
+++ b/lib/ruby_ui/accordion/accordion_controller.js
@@ -0,0 +1,97 @@
+import { Controller } from "@hotwired/stimulus";
+import { animate } from "motion";
+
+// Connects to data-controller="ruby_ui--accordion"
+export default class extends Controller {
+ static targets = ["icon", "content"];
+ static values = {
+ open: {
+ type: Boolean,
+ default: false,
+ },
+ animationDuration: {
+ type: Number,
+ default: 0.15, // Default animation duration (in seconds)
+ },
+ animationEasing: {
+ type: String,
+ default: "ease-in-out", // Default animation easing
+ },
+ rotateIcon: {
+ type: Number,
+ default: 180, // Default icon rotation (in degrees)
+ },
+ };
+
+ connect() {
+ // Set the initial state of the accordion
+ let originalAnimationDuration = this.animationDurationValue;
+ this.animationDurationValue = 0;
+ this.openValue ? this.open() : this.close();
+ this.animationDurationValue = originalAnimationDuration;
+ }
+
+ // Toggle the 'open' value
+ toggle() {
+ this.openValue = !this.openValue;
+ }
+
+ // Handle changes in the 'open' value
+ openValueChanged(isOpen, wasOpen) {
+ if (isOpen) {
+ this.open();
+ } else {
+ this.close();
+ }
+ }
+
+ // Open the accordion content
+ open() {
+ if (this.hasContentTarget) {
+ this.revealContent();
+ this.hasIconTarget && this.rotateIcon();
+ this.openValue = true;
+ }
+ }
+
+ // Close the accordion content
+ close() {
+ if (this.hasContentTarget) {
+ this.hideContent();
+ this.hasIconTarget && this.rotateIcon();
+ this.openValue = false;
+ }
+ }
+
+ // Reveal the accordion content with animation
+ revealContent() {
+ const contentHeight = this.contentTarget.scrollHeight;
+ animate(
+ this.contentTarget,
+ { height: `${contentHeight}px` },
+ {
+ duration: this.animationDurationValue,
+ easing: this.animationEasingValue,
+ },
+ );
+ }
+
+ // Hide the accordion content with animation
+ hideContent() {
+ animate(
+ this.contentTarget,
+ { height: 0 },
+ {
+ duration: this.animationDurationValue,
+ easing: this.animationEasingValue,
+ },
+ );
+ }
+
+ // Rotate the accordion icon 180deg using animate function
+ rotateIcon() {
+ animate(this.iconTarget, {
+ rotate: `${this.openValue ? this.rotateIconValue : 0}deg`,
+ });
+ }
+}
diff --git a/lib/rbui/accordion/accordion_default_content.rb b/lib/ruby_ui/accordion/accordion_default_content.rb
similarity index 94%
rename from lib/rbui/accordion/accordion_default_content.rb
rename to lib/ruby_ui/accordion/accordion_default_content.rb
index c405d6bb..423255b6 100644
--- a/lib/rbui/accordion/accordion_default_content.rb
+++ b/lib/ruby_ui/accordion/accordion_default_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionDefaultContent < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/accordion/accordion_default_trigger.rb b/lib/ruby_ui/accordion/accordion_default_trigger.rb
similarity index 78%
rename from lib/rbui/accordion/accordion_default_trigger.rb
rename to lib/ruby_ui/accordion/accordion_default_trigger.rb
index 968f6dc2..51187c69 100644
--- a/lib/rbui/accordion/accordion_default_trigger.rb
+++ b/lib/ruby_ui/accordion/accordion_default_trigger.rb
@@ -1,17 +1,17 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionDefaultTrigger < Base
def view_template(&block)
div(class: "flex items-center justify-between w-full") do
p(&block)
- RBUI.AccordionIcon
+ RubyUI.AccordionIcon
end
end
def default_attrs
{
- data: {action: "click->rbui--accordion#toggle"},
+ data: {action: "click->ruby_ui--accordion#toggle"},
class: "w-full flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline"
}
end
diff --git a/lib/rbui/accordion/accordion_icon.rb b/lib/ruby_ui/accordion/accordion_icon.rb
similarity index 91%
rename from lib/rbui/accordion/accordion_icon.rb
rename to lib/ruby_ui/accordion/accordion_icon.rb
index 5fbb5ac1..bda60b1e 100644
--- a/lib/rbui/accordion/accordion_icon.rb
+++ b/lib/ruby_ui/accordion/accordion_icon.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionIcon < Base
def view_template(&block)
span(**attrs) do
@@ -31,7 +31,7 @@ def icon
def default_attrs
{
class: "opacity-50",
- data: {rbui__accordion_target: "icon"}
+ data: {ruby_ui__accordion_target: "icon"}
}
end
end
diff --git a/lib/rbui/accordion/accordion_item.rb b/lib/ruby_ui/accordion/accordion_item.rb
similarity index 69%
rename from lib/rbui/accordion/accordion_item.rb
rename to lib/ruby_ui/accordion/accordion_item.rb
index 6dab750f..d2d1937e 100644
--- a/lib/rbui/accordion/accordion_item.rb
+++ b/lib/ruby_ui/accordion/accordion_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionItem < Base
def initialize(open: false, rotate_icon: 180, **attrs)
@open = open
@@ -17,9 +17,9 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--accordion",
- rbui__accordion_open_value: @open,
- rbui__accordion_rotate_icon_value: @rotate_icon
+ controller: "ruby_ui--accordion",
+ ruby_ui__accordion_open_value: @open,
+ ruby_ui__accordion_rotate_icon_value: @rotate_icon
},
class: "border-b"
}
diff --git a/lib/rbui/accordion/accordion_trigger.rb b/lib/ruby_ui/accordion/accordion_trigger.rb
similarity index 81%
rename from lib/rbui/accordion/accordion_trigger.rb
rename to lib/ruby_ui/accordion/accordion_trigger.rb
index 5659939d..471de1d3 100644
--- a/lib/rbui/accordion/accordion_trigger.rb
+++ b/lib/ruby_ui/accordion/accordion_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AccordionTrigger < Base
def view_template(&)
button(**attrs, &)
@@ -9,7 +9,7 @@ def view_template(&)
def default_attrs
{
type: "button",
- data: {action: "click->rbui--accordion#toggle"},
+ data: {action: "click->ruby_ui--accordion#toggle"},
class: "w-full flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline"
}
end
diff --git a/lib/rbui/alert/alert.rb b/lib/ruby_ui/alert/alert.rb
similarity index 98%
rename from lib/rbui/alert/alert.rb
rename to lib/ruby_ui/alert/alert.rb
index fdc428e3..0c7881eb 100644
--- a/lib/rbui/alert/alert.rb
+++ b/lib/ruby_ui/alert/alert.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Alert < Base
def initialize(variant: nil, **attrs)
@variant = variant
diff --git a/lib/rbui/alert/alert_description.rb b/lib/ruby_ui/alert/alert_description.rb
similarity index 94%
rename from lib/rbui/alert/alert_description.rb
rename to lib/ruby_ui/alert/alert_description.rb
index 776bf52f..b36a15d1 100644
--- a/lib/rbui/alert/alert_description.rb
+++ b/lib/ruby_ui/alert/alert_description.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDescription < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/alert/alert_title.rb b/lib/ruby_ui/alert/alert_title.rb
similarity index 94%
rename from lib/rbui/alert/alert_title.rb
rename to lib/ruby_ui/alert/alert_title.rb
index 09caaec2..37e2fff9 100644
--- a/lib/rbui/alert/alert_title.rb
+++ b/lib/ruby_ui/alert/alert_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertTitle < Base
def view_template(&)
h5(**attrs, &)
diff --git a/lib/rbui/alert_dialog/alert_dialog.rb b/lib/ruby_ui/alert_dialog/alert_dialog.rb
similarity index 73%
rename from lib/rbui/alert_dialog/alert_dialog.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog.rb
index af688f5e..756fa9c7 100644
--- a/lib/rbui/alert_dialog/alert_dialog.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialog < Base
def initialize(open: false, **attrs)
@open = open
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--alert-dialog",
- rbui__alert_dialog_open_value: @open.to_s
+ controller: "ruby_ui--alert-dialog",
+ ruby_ui__alert_dialog_open_value: @open.to_s
},
class: "inline-block"
}
diff --git a/lib/rbui/alert_dialog/alert_dialog_action.rb b/lib/ruby_ui/alert_dialog/alert_dialog_action.rb
similarity index 76%
rename from lib/rbui/alert_dialog/alert_dialog_action.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_action.rb
index dd314700..75a34d2e 100644
--- a/lib/rbui/alert_dialog/alert_dialog_action.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_action.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogAction < Base
def view_template(&)
- render RBUI::Button.new(**attrs, &)
+ render RubyUI::Button.new(**attrs, &)
end
private
diff --git a/lib/rbui/alert_dialog/alert_dialog_cancel.rb b/lib/ruby_ui/alert_dialog/alert_dialog_cancel.rb
similarity index 68%
rename from lib/rbui/alert_dialog/alert_dialog_cancel.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_cancel.rb
index 69a85b1a..75a4f89c 100644
--- a/lib/rbui/alert_dialog/alert_dialog_cancel.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_cancel.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogCancel < Base
def view_template(&)
- render RBUI::Button.new(**attrs, &)
+ render RubyUI::Button.new(**attrs, &)
end
private
@@ -12,7 +12,7 @@ def default_attrs
{
variant: :outline,
data: {
- action: "click->rbui--alert-dialog#dismiss"
+ action: "click->ruby_ui--alert-dialog#dismiss"
},
class: "mt-2 sm:mt-0"
}
diff --git a/lib/rbui/alert_dialog/alert_dialog_content.rb b/lib/ruby_ui/alert_dialog/alert_dialog_content.rb
similarity index 95%
rename from lib/rbui/alert_dialog/alert_dialog_content.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_content.rb
index a892ce3f..eee13407 100644
--- a/lib/rbui/alert_dialog/alert_dialog_content.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogContent < Base
def view_template(&block)
all_template_tag(**attrs) do
@@ -37,7 +37,7 @@ def container(&)
def default_attrs
{
data: {
- rbui__alert_dialog_target: "content"
+ ruby_ui__alert_dialog_target: "content"
}
}
end
diff --git a/lib/rbui/alert_dialog/alert_dialog_controller.js b/lib/ruby_ui/alert_dialog/alert_dialog_controller.js
similarity index 91%
rename from lib/rbui/alert_dialog/alert_dialog_controller.js
rename to lib/ruby_ui/alert_dialog/alert_dialog_controller.js
index 3f19be01..439a450f 100644
--- a/lib/rbui/alert_dialog/alert_dialog_controller.js
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_controller.js
@@ -1,6 +1,6 @@
import { Controller } from "@hotwired/stimulus";
-// Connects to data-controller="rbui--alert-dialog"
+// Connects to data-controller="ruby_ui--alert-dialog"
export default class extends Controller {
static targets = ["content"];
static values = {
diff --git a/lib/rbui/alert_dialog/alert_dialog_description.rb b/lib/ruby_ui/alert_dialog/alert_dialog_description.rb
similarity index 94%
rename from lib/rbui/alert_dialog/alert_dialog_description.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_description.rb
index 5a0aa7b9..4bcf5578 100644
--- a/lib/rbui/alert_dialog/alert_dialog_description.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_description.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogDescription < Base
def view_template(&)
p(**attrs, &)
diff --git a/lib/rbui/alert_dialog/alert_dialog_footer.rb b/lib/ruby_ui/alert_dialog/alert_dialog_footer.rb
similarity index 95%
rename from lib/rbui/alert_dialog/alert_dialog_footer.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_footer.rb
index d03b8aea..07c0e6e1 100644
--- a/lib/rbui/alert_dialog/alert_dialog_footer.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_footer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogFooter < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/alert_dialog/alert_dialog_header.rb b/lib/ruby_ui/alert_dialog/alert_dialog_header.rb
similarity index 94%
rename from lib/rbui/alert_dialog/alert_dialog_header.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_header.rb
index 93b17f0f..1331fa1f 100644
--- a/lib/rbui/alert_dialog/alert_dialog_header.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogHeader < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/alert_dialog/alert_dialog_title.rb b/lib/ruby_ui/alert_dialog/alert_dialog_title.rb
similarity index 94%
rename from lib/rbui/alert_dialog/alert_dialog_title.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_title.rb
index 5cd0015b..6f7a87b4 100644
--- a/lib/rbui/alert_dialog/alert_dialog_title.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogTitle < Base
def view_template(&)
h2(**attrs, &)
diff --git a/lib/rbui/alert_dialog/alert_dialog_trigger.rb b/lib/ruby_ui/alert_dialog/alert_dialog_trigger.rb
similarity index 74%
rename from lib/rbui/alert_dialog/alert_dialog_trigger.rb
rename to lib/ruby_ui/alert_dialog/alert_dialog_trigger.rb
index 447e13bc..127c2c39 100644
--- a/lib/rbui/alert_dialog/alert_dialog_trigger.rb
+++ b/lib/ruby_ui/alert_dialog/alert_dialog_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AlertDialogTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {action: "click->rbui--alert-dialog#open"},
+ data: {action: "click->ruby_ui--alert-dialog#open"},
class: "inline-block"
}
end
diff --git a/lib/rbui/aspect_ratio/aspect_ratio.rb b/lib/ruby_ui/aspect_ratio/aspect_ratio.rb
similarity index 98%
rename from lib/rbui/aspect_ratio/aspect_ratio.rb
rename to lib/ruby_ui/aspect_ratio/aspect_ratio.rb
index fede6a68..87c286f1 100644
--- a/lib/rbui/aspect_ratio/aspect_ratio.rb
+++ b/lib/ruby_ui/aspect_ratio/aspect_ratio.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AspectRatio < Base
def initialize(aspect_ratio: "16/9", **attrs)
raise "aspect_ratio must be in the format of a string with a slash in the middle (eg. '16/9', '1/1')" unless aspect_ratio.is_a?(String) && aspect_ratio.include?("/")
diff --git a/lib/rbui/avatar/avatar.rb b/lib/ruby_ui/avatar/avatar.rb
similarity index 97%
rename from lib/rbui/avatar/avatar.rb
rename to lib/ruby_ui/avatar/avatar.rb
index 28bd2bf5..01b96781 100644
--- a/lib/rbui/avatar/avatar.rb
+++ b/lib/ruby_ui/avatar/avatar.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Avatar < Base
SIZES = {
xs: "h-4 w-4 text-[0.5rem]",
diff --git a/lib/rbui/avatar/avatar_fallback.rb b/lib/ruby_ui/avatar/avatar_fallback.rb
similarity index 95%
rename from lib/rbui/avatar/avatar_fallback.rb
rename to lib/ruby_ui/avatar/avatar_fallback.rb
index d7115333..a1a5a538 100644
--- a/lib/rbui/avatar/avatar_fallback.rb
+++ b/lib/ruby_ui/avatar/avatar_fallback.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AvatarFallback < Base
def view_template(&)
span(**attrs, &)
diff --git a/lib/rbui/avatar/avatar_image.rb b/lib/ruby_ui/avatar/avatar_image.rb
similarity index 96%
rename from lib/rbui/avatar/avatar_image.rb
rename to lib/ruby_ui/avatar/avatar_image.rb
index 00985466..bce164e3 100644
--- a/lib/rbui/avatar/avatar_image.rb
+++ b/lib/ruby_ui/avatar/avatar_image.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class AvatarImage < Base
def initialize(src:, alt: "", **attrs)
@src = src
diff --git a/lib/rbui/badge/badge.rb b/lib/ruby_ui/badge/badge.rb
similarity index 99%
rename from lib/rbui/badge/badge.rb
rename to lib/ruby_ui/badge/badge.rb
index 18afd91f..752f70e5 100644
--- a/lib/rbui/badge/badge.rb
+++ b/lib/ruby_ui/badge/badge.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Badge < Base
SIZES = {
sm: "px-1.5 py-0.5 text-xs",
diff --git a/lib/rbui/base.rb b/lib/ruby_ui/base.rb
similarity index 98%
rename from lib/rbui/base.rb
rename to lib/ruby_ui/base.rb
index ee5ecaf7..16ccc7db 100644
--- a/lib/rbui/base.rb
+++ b/lib/ruby_ui/base.rb
@@ -2,7 +2,7 @@
require "tailwind_merge"
-module RBUI
+module RubyUI
class Base < Phlex::HTML
TAILWIND_MERGER = ::TailwindMerge::Merger.new.freeze unless defined?(TAILWIND_MERGER)
diff --git a/lib/rbui/button/button.rb b/lib/ruby_ui/button/button.rb
similarity index 99%
rename from lib/rbui/button/button.rb
rename to lib/ruby_ui/button/button.rb
index 7cc67912..9636fa22 100644
--- a/lib/rbui/button/button.rb
+++ b/lib/ruby_ui/button/button.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Button < Base
def initialize(type: :button, variant: :primary, size: :md, icon: false, **attrs)
@type = type
diff --git a/lib/ruby_ui/calendar/calendar.rb b/lib/ruby_ui/calendar/calendar.rb
new file mode 100644
index 00000000..0bb8e815
--- /dev/null
+++ b/lib/ruby_ui/calendar/calendar.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module RubyUI
+ class Calendar < Base
+ def initialize(selected_date: nil, input_id: nil, date_format: "yyyy-MM-dd", **attrs)
+ @selected_date = selected_date
+ @input_id = input_id
+ @date_format = date_format
+ super(**attrs)
+ end
+
+ def view_template
+ div(**attrs) do
+ RubyUI.CalendarHeader do
+ RubyUI.CalendarTitle
+ RubyUI.CalendarPrev
+ RubyUI.CalendarNext
+ end
+ RubyUI.CalendarBody # Where the calendar is rendered (Weekdays and Days)
+ RubyUI.CalendarWeekdays # Template for the weekdays
+ RubyUI.CalendarDays # Template for the days
+ end
+ end
+
+ private
+
+ def default_attrs
+ {
+ class: "p-3 space-y-4",
+ data: {
+ controller: "ruby_ui--calendar",
+ ruby_ui__calendar_selected_date_value: @selected_date&.to_s,
+ ruby_ui__calendar_format_value: @date_format,
+ ruby_ui__calendar_ruby_ui__calendar_input_outlet: @input_id
+ }
+ }
+ end
+ end
+end
diff --git a/lib/rbui/calendar/calendar_body.rb b/lib/ruby_ui/calendar/calendar_body.rb
similarity index 77%
rename from lib/rbui/calendar/calendar_body.rb
rename to lib/ruby_ui/calendar/calendar_body.rb
index c1d49706..fe6437c8 100644
--- a/lib/rbui/calendar/calendar_body.rb
+++ b/lib/ruby_ui/calendar/calendar_body.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarBody < Base
def view_template
table(**attrs)
@@ -11,7 +11,7 @@ def view_template
def default_attrs
{
data: {
- rbui__calendar_target: "calendar"
+ ruby_ui__calendar_target: "calendar"
}
}
end
diff --git a/lib/rbui/calendar/calendar_controller.js b/lib/ruby_ui/calendar/calendar_controller.js
similarity index 73%
rename from lib/rbui/calendar/calendar_controller.js
rename to lib/ruby_ui/calendar/calendar_controller.js
index bc669a18..bf706e13 100644
--- a/lib/rbui/calendar/calendar_controller.js
+++ b/lib/ruby_ui/calendar/calendar_controller.js
@@ -2,22 +2,30 @@ import { Controller } from "@hotwired/stimulus";
import Mustache from "mustache";
export default class extends Controller {
- static targets = ["calendar", "title", "weekdaysTemplate", "selectedDateTemplate", "todayDateTemplate", "currentMonthDateTemplate", "otherMonthDateTemplate"];
+ static targets = [
+ "calendar",
+ "title",
+ "weekdaysTemplate",
+ "selectedDateTemplate",
+ "todayDateTemplate",
+ "currentMonthDateTemplate",
+ "otherMonthDateTemplate",
+ ];
static values = {
selectedDate: {
type: String,
- default: null
+ default: null,
},
viewDate: {
type: String,
- default: new Date().toISOString().slice(0, 10)
+ default: new Date().toISOString().slice(0, 10),
},
format: {
type: String,
- default: "yyyy-MM-dd" // Default format
- }
+ default: "yyyy-MM-dd", // Default format
+ },
};
- static outlets = ["rbui--calendar-input"]
+ static outlets = ["ruby_ui--calendar-input"];
initialize() {
this.updateCalendar(); // Initial calendar render
@@ -49,7 +57,7 @@ export default class extends Controller {
this.updateCalendar();
// update the input value
- this.rbuiCalendarInputOutlets.forEach(outlet => {
+ this.ruby_uiCalendarInputOutlets.forEach((outlet) => {
const formattedDate = this.formatDate(this.selectedDate());
outlet.setValue(formattedDate);
});
@@ -77,34 +85,47 @@ export default class extends Controller {
}
calendarDays() {
- return this.getFullWeeksStartAndEndInMonth().map(week => this.renderWeek(week)).join('');
+ return this.getFullWeeksStartAndEndInMonth()
+ .map((week) => this.renderWeek(week))
+ .join("");
}
renderWeek(week) {
- const days = week.map(day => {
- return this.renderDay(day);
- }).join('');
+ const days = week
+ .map((day) => {
+ return this.renderDay(day);
+ })
+ .join("");
return `
${days}
`;
}
renderDay(day) {
const today = new Date();
- let dateHTML = '';
+ let dateHTML = "";
const data = { day: day, dayDate: day.getDate() };
if (day.toDateString() === this.selectedDate().toDateString()) {
// selectedDate
// Render the selected date template target innerHTML with Mustache
- dateHTML = Mustache.render(this.selectedDateTemplateTarget.innerHTML, data);
+ dateHTML = Mustache.render(
+ this.selectedDateTemplateTarget.innerHTML,
+ data,
+ );
} else if (day.toDateString() === today.toDateString()) {
// todayDate
dateHTML = Mustache.render(this.todayDateTemplateTarget.innerHTML, data);
} else if (day.getMonth() === this.viewDate().getMonth()) {
// currentMonthDate
- dateHTML = Mustache.render(this.currentMonthDateTemplateTarget.innerHTML, data);
+ dateHTML = Mustache.render(
+ this.currentMonthDateTemplateTarget.innerHTML,
+ data,
+ );
} else {
// otherMonthDate
- dateHTML = Mustache.render(this.otherMonthDateTemplateTarget.innerHTML, data);
+ dateHTML = Mustache.render(
+ this.otherMonthDateTemplateTarget.innerHTML,
+ data,
+ );
}
return dateHTML;
}
@@ -120,7 +141,9 @@ export default class extends Controller {
}
viewDate() {
- return this.viewDateValue ? new Date(this.viewDateValue) : this.selectedDate();
+ return this.viewDateValue
+ ? new Date(this.viewDateValue)
+ : this.selectedDate();
}
getFullWeeksStartAndEndInMonth() {
@@ -146,7 +169,7 @@ export default class extends Controller {
end = 7 - firstDate.getDay() + 1;
weeks.push({
start: start,
- end: end
+ end: end,
});
start = end + 1;
end = end + 7;
@@ -154,7 +177,7 @@ export default class extends Controller {
while (start <= numDays) {
weeks.push({
start: start,
- end: end
+ end: end,
});
start = end + 1;
end = end + 7;
@@ -163,7 +186,7 @@ export default class extends Controller {
end = end - numDays;
weeks.push({
start: start,
- end: end
+ end: end,
});
break;
}
@@ -190,31 +213,38 @@ export default class extends Controller {
const monthName = date.toLocaleString("en-US", { month: "long" });
const daySuffix = this.getDaySuffix(day);
-
const map = {
- 'yyyy': year,
- 'MM': ('0' + month).slice(-2),
- 'dd': ('0' + day).slice(-2),
- 'HH': ('0' + hours).slice(-2),
- 'mm': ('0' + minutes).slice(-2),
- 'ss': ('0' + seconds).slice(-2),
- 'EEEE': dayOfWeek,
- 'MMMM': monthName,
- 'do': day + daySuffix,
- 'PPPP': `${dayOfWeek}, ${monthName} ${day}${daySuffix}, ${year}`
+ yyyy: year,
+ MM: ("0" + month).slice(-2),
+ dd: ("0" + day).slice(-2),
+ HH: ("0" + hours).slice(-2),
+ mm: ("0" + minutes).slice(-2),
+ ss: ("0" + seconds).slice(-2),
+ EEEE: dayOfWeek,
+ MMMM: monthName,
+ do: day + daySuffix,
+ PPPP: `${dayOfWeek}, ${monthName} ${day}${daySuffix}, ${year}`,
};
- const formattedDate = format.replace(/yyyy|MM|dd|HH|mm|ss|EEEE|MMMM|do|PPPP/g, matched => map[matched]);
+ const formattedDate = format.replace(
+ /yyyy|MM|dd|HH|mm|ss|EEEE|MMMM|do|PPPP/g,
+ (matched) => map[matched],
+ );
return formattedDate;
}
getDaySuffix(day) {
- if (day > 3 && day < 21) return 'th';
+ if (day > 3 && day < 21) return "th";
switch (day % 10) {
- case 1: return "st";
- case 2: return "nd";
- case 3: return "rd";
- default: return "th";
+ case 1:
+ return "st";
+ case 2:
+ return "nd";
+ case 3:
+ return "rd";
+ default:
+ return "th";
}
}
-}
\ No newline at end of file
+}
+
diff --git a/lib/rbui/calendar/calendar_days.rb b/lib/ruby_ui/calendar/calendar_days.rb
similarity index 90%
rename from lib/rbui/calendar/calendar_days.rb
rename to lib/ruby_ui/calendar/calendar_days.rb
index 38177f8d..ceb6e9a2 100644
--- a/lib/rbui/calendar/calendar_days.rb
+++ b/lib/ruby_ui/calendar/calendar_days.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarDays < Base
BASE_CLASS = "inline-flex items-center justify-center rounded-md text-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-8 w-8 p-0 font-normal aria-selected:opacity-100"
@@ -17,7 +17,7 @@ def render_selected_date_template
date_template("selectedDateTemplate") do
button(
data_day: "{{day}}",
- data_action: "click->rbui--calendar#selectDay",
+ data_action: "click->ruby_ui--calendar#selectDay",
name: "day",
class:
[
@@ -36,7 +36,7 @@ def render_today_date_template
date_template("todayDateTemplate") do
button(
data_day: "{{day}}",
- data_action: "click->rbui--calendar#selectDay",
+ data_action: "click->ruby_ui--calendar#selectDay",
name: "day",
class:
[
@@ -54,7 +54,7 @@ def render_current_month_date_template
date_template("currentMonthDateTemplate") do
button(
data_day: "{{day}}",
- data_action: "click->rbui--calendar#selectDay",
+ data_action: "click->ruby_ui--calendar#selectDay",
name: "day",
class:
[
@@ -72,7 +72,7 @@ def render_other_month_date_template
date_template("otherMonthDateTemplate") do
button(
data_day: "{{day}}",
- data_action: " click->rbui--calendar#selectDay",
+ data_action: " click->ruby_ui--calendar#selectDay",
name: "day",
class:
[
@@ -87,7 +87,7 @@ def render_other_month_date_template
end
def date_template(target, &block)
- all_template_tag(data: {rbui__calendar_target: target}) do
+ all_template_tag(data: {ruby_ui__calendar_target: target}) do
td(
class:
"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected])]:rounded-md",
diff --git a/lib/rbui/calendar/calendar_header.rb b/lib/ruby_ui/calendar/calendar_header.rb
similarity index 94%
rename from lib/rbui/calendar/calendar_header.rb
rename to lib/ruby_ui/calendar/calendar_header.rb
index 324cef7c..72a560b6 100644
--- a/lib/rbui/calendar/calendar_header.rb
+++ b/lib/ruby_ui/calendar/calendar_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarHeader < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/calendar/calendar_input_controller.js b/lib/ruby_ui/calendar/calendar_input_controller.js
similarity index 100%
rename from lib/rbui/calendar/calendar_input_controller.js
rename to lib/ruby_ui/calendar/calendar_input_controller.js
diff --git a/lib/rbui/calendar/calendar_next.rb b/lib/ruby_ui/calendar/calendar_next.rb
similarity index 95%
rename from lib/rbui/calendar/calendar_next.rb
rename to lib/ruby_ui/calendar/calendar_next.rb
index 7203ca56..5b0c72a7 100644
--- a/lib/rbui/calendar/calendar_next.rb
+++ b/lib/ruby_ui/calendar/calendar_next.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarNext < Base
def view_template(&block)
button(**attrs) do
@@ -36,7 +36,7 @@ def default_attrs
class:
"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input hover:bg-accent hover:text-accent-foreground h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute right-1",
type: "button",
- data_action: "click->rbui--calendar#nextMonth"
+ data_action: "click->ruby_ui--calendar#nextMonth"
}
end
end
diff --git a/lib/rbui/calendar/calendar_prev.rb b/lib/ruby_ui/calendar/calendar_prev.rb
similarity index 95%
rename from lib/rbui/calendar/calendar_prev.rb
rename to lib/ruby_ui/calendar/calendar_prev.rb
index 750d0879..31ebd33c 100644
--- a/lib/rbui/calendar/calendar_prev.rb
+++ b/lib/ruby_ui/calendar/calendar_prev.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarPrev < Base
def view_template(&block)
button(**attrs) do
@@ -36,7 +36,7 @@ def default_attrs
class:
"rdp-button_reset rdp-button inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input hover:bg-accent hover:text-accent-foreground h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute left-1",
type: "button",
- data_action: "click->rbui--calendar#prevMonth"
+ data_action: "click->ruby_ui--calendar#prevMonth"
}
end
end
diff --git a/lib/rbui/calendar/calendar_title.rb b/lib/ruby_ui/calendar/calendar_title.rb
similarity index 87%
rename from lib/rbui/calendar/calendar_title.rb
rename to lib/ruby_ui/calendar/calendar_title.rb
index da308203..3c844c6d 100644
--- a/lib/rbui/calendar/calendar_title.rb
+++ b/lib/ruby_ui/calendar/calendar_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarTitle < Base
def initialize(default: "Month Year", **attrs)
@default = default
@@ -19,7 +19,7 @@ def default_attrs
aria_live: "polite",
role: "presentation",
data: {
- rbui__calendar_target: "title"
+ ruby_ui__calendar_target: "title"
}
}
end
diff --git a/lib/rbui/calendar/calendar_weekdays.rb b/lib/ruby_ui/calendar/calendar_weekdays.rb
similarity index 86%
rename from lib/rbui/calendar/calendar_weekdays.rb
rename to lib/ruby_ui/calendar/calendar_weekdays.rb
index 45b9c376..9aa4c64a 100644
--- a/lib/rbui/calendar/calendar_weekdays.rb
+++ b/lib/ruby_ui/calendar/calendar_weekdays.rb
@@ -1,11 +1,11 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CalendarWeekdays < Base
DAYS = %w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday].freeze
def view_template
- all_template_tag(data: {rbui__calendar_target: "weekdaysTemplate"}) do
+ all_template_tag(data: {ruby_ui__calendar_target: "weekdaysTemplate"}) do
thead(**attrs) do
tr(class: "flex") do
DAYS.each do |day|
diff --git a/lib/rbui/card/card.rb b/lib/ruby_ui/card/card.rb
similarity index 94%
rename from lib/rbui/card/card.rb
rename to lib/ruby_ui/card/card.rb
index 7250f49c..520c04bc 100644
--- a/lib/rbui/card/card.rb
+++ b/lib/ruby_ui/card/card.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Card < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/card/card_content.rb b/lib/ruby_ui/card/card_content.rb
similarity index 93%
rename from lib/rbui/card/card_content.rb
rename to lib/ruby_ui/card/card_content.rb
index 511d53f6..675780c9 100644
--- a/lib/rbui/card/card_content.rb
+++ b/lib/ruby_ui/card/card_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CardContent < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/card/card_description.rb b/lib/ruby_ui/card/card_description.rb
similarity index 94%
rename from lib/rbui/card/card_description.rb
rename to lib/ruby_ui/card/card_description.rb
index 5ad4db77..c00e7439 100644
--- a/lib/rbui/card/card_description.rb
+++ b/lib/ruby_ui/card/card_description.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CardDescription < Base
def view_template(&)
p(**attrs, &)
diff --git a/lib/rbui/card/card_footer.rb b/lib/ruby_ui/card/card_footer.rb
similarity index 94%
rename from lib/rbui/card/card_footer.rb
rename to lib/ruby_ui/card/card_footer.rb
index 11d0478f..63e59cc3 100644
--- a/lib/rbui/card/card_footer.rb
+++ b/lib/ruby_ui/card/card_footer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CardFooter < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/card/card_header.rb b/lib/ruby_ui/card/card_header.rb
similarity index 94%
rename from lib/rbui/card/card_header.rb
rename to lib/ruby_ui/card/card_header.rb
index f185a911..302da732 100644
--- a/lib/rbui/card/card_header.rb
+++ b/lib/ruby_ui/card/card_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CardHeader < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/card/card_title.rb b/lib/ruby_ui/card/card_title.rb
similarity index 94%
rename from lib/rbui/card/card_title.rb
rename to lib/ruby_ui/card/card_title.rb
index c96898b7..87dd16a9 100644
--- a/lib/rbui/card/card_title.rb
+++ b/lib/ruby_ui/card/card_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CardTitle < Base
def view_template(&)
h3(**attrs, &)
diff --git a/lib/rbui/chart/chart.rb b/lib/ruby_ui/chart/chart.rb
similarity index 72%
rename from lib/rbui/chart/chart.rb
rename to lib/ruby_ui/chart/chart.rb
index f9ef7f33..bc47d6f0 100644
--- a/lib/rbui/chart/chart.rb
+++ b/lib/ruby_ui/chart/chart.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Chart < Base
def initialize(options: {}, **attrs)
@options = options.to_json
@@ -15,8 +15,8 @@ def view_template(&)
def default_attrs
{
- data_controller: "rbui--chart",
- data_rbui__chart_options_value: @options
+ data_controller: "ruby_ui--chart",
+ data_ruby_ui__chart_options_value: @options
}
end
end
diff --git a/lib/rbui/chart/chart_controller.js b/lib/ruby_ui/chart/chart_controller.js
similarity index 100%
rename from lib/rbui/chart/chart_controller.js
rename to lib/ruby_ui/chart/chart_controller.js
diff --git a/lib/rbui/checkbox/checkbox.rb b/lib/ruby_ui/checkbox/checkbox.rb
similarity index 65%
rename from lib/rbui/checkbox/checkbox.rb
rename to lib/ruby_ui/checkbox/checkbox.rb
index 9ea4c2fc..1f464755 100644
--- a/lib/rbui/checkbox/checkbox.rb
+++ b/lib/ruby_ui/checkbox/checkbox.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Checkbox < Base
def view_template
input(**attrs)
@@ -12,9 +12,9 @@ def default_attrs
{
type: "checkbox",
data: {
- rbui__form_field_target: "input",
- rbui__checkbox_group_target: "checkbox",
- action: "change->rbui--checkbox-group#onChange change->rbui--form-field#onInput invalid->rbui--form-field#onInvalid"
+ ruby_ui__form_field_target: "input",
+ ruby_ui__checkbox_group_target: "checkbox",
+ action: "change->ruby_ui--checkbox-group#onChange change->ruby_ui--form-field#onInput invalid->ruby_ui--form-field#onInvalid"
},
class: "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 accent-primary"
}
diff --git a/lib/rbui/checkbox/checkbox_group.rb b/lib/ruby_ui/checkbox/checkbox_group.rb
similarity index 79%
rename from lib/rbui/checkbox/checkbox_group.rb
rename to lib/ruby_ui/checkbox/checkbox_group.rb
index 4cb13504..cc14bf53 100644
--- a/lib/rbui/checkbox/checkbox_group.rb
+++ b/lib/ruby_ui/checkbox/checkbox_group.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CheckboxGroup < Base
def view_template(&)
div(**attrs, &)
@@ -12,7 +12,7 @@ def default_attrs
{
role: "group",
data: {
- controller: "rbui--checkbox-group"
+ controller: "ruby_ui--checkbox-group"
}
}
end
diff --git a/lib/rbui/checkbox/checkbox_group_controller.js b/lib/ruby_ui/checkbox/checkbox_group_controller.js
similarity index 100%
rename from lib/rbui/checkbox/checkbox_group_controller.js
rename to lib/ruby_ui/checkbox/checkbox_group_controller.js
diff --git a/lib/rbui/clipboard/clipboard.rb b/lib/ruby_ui/clipboard/clipboard.rb
similarity index 68%
rename from lib/rbui/clipboard/clipboard.rb
rename to lib/ruby_ui/clipboard/clipboard.rb
index e3b36ebb..4253459e 100644
--- a/lib/rbui/clipboard/clipboard.rb
+++ b/lib/ruby_ui/clipboard/clipboard.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Clipboard < Base
def initialize(options: {}, success: "Copied!", error: "Copy Failed!", **attrs)
@options = options
@@ -30,11 +30,11 @@ def error_popover
def default_attrs
{
data: {
- controller: "rbui--clipboard",
- action: "click@window->rbui--clipboard#onClickOutside",
- rbui__clipboard_success_value: @success,
- rbui__clipboard_error_value: @error,
- rbui__clipboard_options_value: @options.to_json
+ controller: "ruby_ui--clipboard",
+ action: "click@window->ruby_ui--clipboard#onClickOutside",
+ ruby_ui__clipboard_success_value: @success,
+ ruby_ui__clipboard_error_value: @error,
+ ruby_ui__clipboard_options_value: @options.to_json
}
}
end
diff --git a/lib/rbui/clipboard/clipboard_controller.js b/lib/ruby_ui/clipboard/clipboard_controller.js
similarity index 100%
rename from lib/rbui/clipboard/clipboard_controller.js
rename to lib/ruby_ui/clipboard/clipboard_controller.js
diff --git a/lib/rbui/clipboard/clipboard_popover.rb b/lib/ruby_ui/clipboard/clipboard_popover.rb
similarity index 93%
rename from lib/rbui/clipboard/clipboard_popover.rb
rename to lib/ruby_ui/clipboard/clipboard_popover.rb
index b13c7278..f1ae18f0 100644
--- a/lib/rbui/clipboard/clipboard_popover.rb
+++ b/lib/ruby_ui/clipboard/clipboard_popover.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ClipboardPopover < Base
def initialize(type:, **attrs)
@type = type
@@ -11,7 +11,7 @@ def view_template(&block)
div(
class: "hidden",
style: "width: max-content; position: absolute; top: 0; left: 0;",
- data: {rbui__clipboard_target: clipboard_target}
+ data: {ruby_ui__clipboard_target: clipboard_target}
) do
div(**attrs, &block)
end
diff --git a/lib/rbui/clipboard/clipboard_source.rb b/lib/ruby_ui/clipboard/clipboard_source.rb
similarity index 78%
rename from lib/rbui/clipboard/clipboard_source.rb
rename to lib/ruby_ui/clipboard/clipboard_source.rb
index 56769c2a..ef2771f1 100644
--- a/lib/rbui/clipboard/clipboard_source.rb
+++ b/lib/ruby_ui/clipboard/clipboard_source.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ClipboardSource < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__clipboard_target: "source"
+ ruby_ui__clipboard_target: "source"
}
}
end
diff --git a/lib/rbui/clipboard/clipboard_trigger.rb b/lib/ruby_ui/clipboard/clipboard_trigger.rb
similarity index 65%
rename from lib/rbui/clipboard/clipboard_trigger.rb
rename to lib/ruby_ui/clipboard/clipboard_trigger.rb
index 22b76df3..b7da6767 100644
--- a/lib/rbui/clipboard/clipboard_trigger.rb
+++ b/lib/ruby_ui/clipboard/clipboard_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ClipboardTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,8 +11,8 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__clipboard_target: "trigger",
- action: "click->rbui--clipboard#copy"
+ ruby_ui__clipboard_target: "trigger",
+ action: "click->ruby_ui--clipboard#copy"
}
}
end
diff --git a/lib/rbui/codeblock/codeblock.rb b/lib/ruby_ui/codeblock/codeblock.rb
similarity index 89%
rename from lib/rbui/codeblock/codeblock.rb
rename to lib/ruby_ui/codeblock/codeblock.rb
index 2a360c88..e214d4ef 100644
--- a/lib/rbui/codeblock/codeblock.rb
+++ b/lib/ruby_ui/codeblock/codeblock.rb
@@ -2,7 +2,7 @@
require "rouge"
-module RBUI
+module RubyUI
class Codeblock < Base
FORMATTER = ::Rouge::Formatters::HTML.new
ROUGE_CSS = Rouge::Themes::Github.mode(:dark).render(scope: ".highlight") # See themes here: https://rouge-ruby.github.io/docs/Rouge/CSSTheme.html
@@ -39,13 +39,13 @@ def default_attrs
end
def with_clipboard
- RBUI.Clipboard(success: @clipboard_success, error: @clipboard_error, class: "relative") do
- RBUI.ClipboardSource do
+ RubyUI.Clipboard(success: @clipboard_success, error: @clipboard_error, class: "relative") do
+ RubyUI.ClipboardSource do
codeblock
end
div(class: "absolute top-2 right-2") do
- RBUI.ClipboardTrigger do
- RBUI.Button(variant: :ghost, size: :sm, icon: true, class: "text-white hover:text-white hover:bg-white/20") { clipboard_icon }
+ RubyUI.ClipboardTrigger do
+ RubyUI.Button(variant: :ghost, size: :sm, icon: true, class: "text-white hover:text-white hover:bg-white/20") { clipboard_icon }
end
end
end
diff --git a/lib/rbui/collapsible/collapsible.rb b/lib/ruby_ui/collapsible/collapsible.rb
similarity index 73%
rename from lib/rbui/collapsible/collapsible.rb
rename to lib/ruby_ui/collapsible/collapsible.rb
index adbfcfc7..1f094012 100644
--- a/lib/rbui/collapsible/collapsible.rb
+++ b/lib/ruby_ui/collapsible/collapsible.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Collapsible < Base
def initialize(open: false, **attrs)
@open = open
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--collapsible",
- rbui__collapsible_open_value: @open
+ controller: "ruby_ui--collapsible",
+ ruby_ui__collapsible_open_value: @open
}
}
end
diff --git a/lib/rbui/collapsible/collapsible_content.rb b/lib/ruby_ui/collapsible/collapsible_content.rb
similarity index 76%
rename from lib/rbui/collapsible/collapsible_content.rb
rename to lib/ruby_ui/collapsible/collapsible_content.rb
index e6259b15..8af7379f 100644
--- a/lib/rbui/collapsible/collapsible_content.rb
+++ b/lib/ruby_ui/collapsible/collapsible_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CollapsibleContent < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {rbui__collapsible_target: "content"},
+ data: {ruby_ui__collapsible_target: "content"},
class: "overflow-y-hidden"
}
end
diff --git a/lib/rbui/collapsible/collapsible_controller.js b/lib/ruby_ui/collapsible/collapsible_controller.js
similarity index 100%
rename from lib/rbui/collapsible/collapsible_controller.js
rename to lib/ruby_ui/collapsible/collapsible_controller.js
diff --git a/lib/rbui/collapsible/collapsible_trigger.rb b/lib/ruby_ui/collapsible/collapsible_trigger.rb
similarity index 75%
rename from lib/rbui/collapsible/collapsible_trigger.rb
rename to lib/ruby_ui/collapsible/collapsible_trigger.rb
index 4273cab4..b0d76fdb 100644
--- a/lib/rbui/collapsible/collapsible_trigger.rb
+++ b/lib/ruby_ui/collapsible/collapsible_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CollapsibleTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- action: "click->rbui--collapsible#toggle"
+ action: "click->ruby_ui--collapsible#toggle"
}
}
end
diff --git a/lib/ruby_ui/combobox/combobox.rb b/lib/ruby_ui/combobox/combobox.rb
new file mode 100644
index 00000000..81641d1c
--- /dev/null
+++ b/lib/ruby_ui/combobox/combobox.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module RubyUI
+ class Combobox < Base
+ def view_template(&)
+ div(**attrs, &)
+ end
+
+ private
+
+ def default_attrs
+ {
+ data: {
+ controller: "ruby_ui--combobox",
+ ruby_ui__combobox_open_value: "false",
+ action: "click@window->ruby_ui--combobox#onClickOutside",
+ ruby_ui__combobox_ruby_ui__combobox_content_outlet: ".combobox-content",
+ ruby_ui__combobox_ruby_ui__combobox_item_outlet: ".combobox-item"
+ },
+ class: "group/combobox w-full relative"
+ }
+ end
+ end
+end
diff --git a/lib/ruby_ui/combobox/combobox_content.rb b/lib/ruby_ui/combobox/combobox_content.rb
new file mode 100644
index 00000000..e0bead32
--- /dev/null
+++ b/lib/ruby_ui/combobox/combobox_content.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module RubyUI
+ class ComboboxContent < Base
+ def initialize(**attrs)
+ @id = "content#{SecureRandom.hex(4)}"
+ super
+ end
+
+ def view_template(&)
+ div(**attrs) do
+ 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", &)
+ end
+ end
+
+ private
+
+ def default_attrs
+ {
+ id: @id,
+ role: "listbox",
+ data: {
+ controller: "ruby_ui--combobox-content",
+ ruby_ui__combobox_target: "content",
+ 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"
+ },
+ class: "combobox-content hidden w-full absolute top-0 left-0 z-50"
+ }
+ end
+ end
+end
diff --git a/lib/rbui/combobox/combobox_content_controller.js b/lib/ruby_ui/combobox/combobox_content_controller.js
similarity index 75%
rename from lib/rbui/combobox/combobox_content_controller.js
rename to lib/ruby_ui/combobox/combobox_content_controller.js
index 8c04529a..2c825cbf 100644
--- a/lib/rbui/combobox/combobox_content_controller.js
+++ b/lib/ruby_ui/combobox/combobox_content_controller.js
@@ -18,13 +18,18 @@ export default class extends Controller {
#updateGroupVisibility() {
this.groupTargets.forEach((group) => {
- const hasVisibleItems = group.querySelectorAll("[data-rbui--combobox-content-target='item']:not(.hidden)").length > 0;
+ const hasVisibleItems =
+ group.querySelectorAll(
+ "[data-ruby_ui--combobox-content-target='item']:not(.hidden)",
+ ).length > 0;
this.#toggleVisibility([group], hasVisibleItems);
});
}
#filterItems(query) {
- return this.itemTargets.filter((item) => this.#sanitizeStr(item.innerText).includes(query));
+ return this.itemTargets.filter((item) =>
+ this.#sanitizeStr(item.innerText).includes(query),
+ );
}
#toggleVisibility(elements, isVisible) {
diff --git a/lib/rbui/combobox/combobox_controller.js b/lib/ruby_ui/combobox/combobox_controller.js
similarity index 73%
rename from lib/rbui/combobox/combobox_controller.js
rename to lib/ruby_ui/combobox/combobox_controller.js
index 89c4caf8..8caeac86 100644
--- a/lib/rbui/combobox/combobox_controller.js
+++ b/lib/ruby_ui/combobox/combobox_controller.js
@@ -1,12 +1,20 @@
import { Controller } from "@hotwired/stimulus";
import { computePosition, autoUpdate, offset } from "@floating-ui/dom";
-export const POPOVER_OPENED = "rbui--combobox#popoverOpened";
+export const POPOVER_OPENED = "ruby_ui--combobox#popoverOpened";
export default class extends Controller {
- static targets = ["input", "trigger", "value", "content", "search", "list", "item"];
+ static targets = [
+ "input",
+ "trigger",
+ "value",
+ "content",
+ "search",
+ "list",
+ "item",
+ ];
static values = { open: Boolean };
- static outlets = ["rbui--combobox-item", "rbui--combobox-content"];
+ static outlets = ["ruby_ui--combobox-item", "ruby_ui--combobox-content"];
constructor(...args) {
super(...args);
@@ -41,15 +49,17 @@ export default class extends Controller {
onKeyEnter(event) {
event.preventDefault();
- const currentItem = this.itemTargets.find((item) => item.getAttribute("aria-current") === "true");
+ const currentItem = this.itemTargets.find(
+ (item) => item.getAttribute("aria-current") === "true",
+ );
if (!currentItem) this.#closeContent();
- this.#setValueDispatchEventAndCloseContent(currentItem)
+ this.#setValueDispatchEventAndCloseContent(currentItem);
}
onSearchInput(event) {
- this.rbuiComboboxContentOutlet.handleSearchInput(event.target.value);
+ this.ruby_uiComboboxContentOutlet.handleSearchInput(event.target.value);
this.#findAndSetCurrentAndActiveDescendant();
}
@@ -70,7 +80,9 @@ export default class extends Controller {
onKeyDown(event) {
event.preventDefault();
- const currentIndex = this.itemTargets.findIndex((item) => item.getAttribute("aria-current") === "true");
+ const currentIndex = this.itemTargets.findIndex(
+ (item) => item.getAttribute("aria-current") === "true",
+ );
if (currentIndex + 1 < this.itemTargets.length) {
this.itemTargets[currentIndex].removeAttribute("aria-current");
@@ -82,7 +94,9 @@ export default class extends Controller {
onKeyUp(event) {
event.preventDefault();
- const currentIndex = this.itemTargets.findIndex((item) => item.getAttribute("aria-current") === "true");
+ const currentIndex = this.itemTargets.findIndex(
+ (item) => item.getAttribute("aria-current") === "true",
+ );
if (currentIndex > 0) {
this.itemTargets[currentIndex].removeAttribute("aria-current");
@@ -112,14 +126,18 @@ export default class extends Controller {
}
#findAndSetCurrentAndActiveDescendant() {
- const selectedItem = this.itemTargets.find((item) => item.getAttribute("aria-selected") === "true");
+ const selectedItem = this.itemTargets.find(
+ (item) => item.getAttribute("aria-selected") === "true",
+ );
if (selectedItem) {
this.#setCurrentAndActiveDescendant(selectedItem);
return;
}
- const selectedVisible = this.itemTargets.find((item) => !item.classList.contains("hidden"));
+ const selectedVisible = this.itemTargets.find(
+ (item) => !item.classList.contains("hidden"),
+ );
this.#setCurrentAndActiveDescendant(selectedVisible);
}
@@ -127,14 +145,19 @@ export default class extends Controller {
if (!item) return;
item.setAttribute("aria-current", "true");
- this.triggerTarget.setAttribute("aria-activedescendant", item.getAttribute("id"));
+ this.triggerTarget.setAttribute(
+ "aria-activedescendant",
+ item.getAttribute("id"),
+ );
}
#setValueDispatchEventAndCloseContent(item) {
const oldValue = this.inputTarget.value;
const newValue = item.dataset.value;
- this.rbuiComboboxItemOutlets.forEach(item => item.handleItemSelected(newValue));
+ this.ruby_uiComboboxItemOutlets.forEach((item) =>
+ item.handleItemSelected(newValue),
+ );
this.inputTarget.value = item.dataset.value;
this.valueTarget.innerText = item.innerText;
@@ -143,7 +166,6 @@ export default class extends Controller {
this.#closeContent();
}
-
#dispatchOnChange(oldValue, newValue) {
if (oldValue === newValue) return;
@@ -166,7 +188,9 @@ export default class extends Controller {
#setFloatingElement() {
this.cleanup = autoUpdate(this.triggerTarget, this.contentTarget, () => {
- computePosition(this.triggerTarget, this.contentTarget, { middleware: [offset(4)] }).then(({ x, y }) => {
+ computePosition(this.triggerTarget, this.contentTarget, {
+ middleware: [offset(4)],
+ }).then(({ x, y }) => {
Object.assign(this.contentTarget.style, {
left: `${x}px`,
top: `${y}px`,
diff --git a/lib/rbui/combobox/combobox_empty.rb b/lib/ruby_ui/combobox/combobox_empty.rb
similarity index 81%
rename from lib/rbui/combobox/combobox_empty.rb
rename to lib/ruby_ui/combobox/combobox_empty.rb
index e487a473..552c5a3c 100644
--- a/lib/rbui/combobox/combobox_empty.rb
+++ b/lib/ruby_ui/combobox/combobox_empty.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxEmpty < Base
def view_template(&)
div(**attrs, &)
@@ -13,7 +13,7 @@ def default_attrs
role: "presentation",
class: "hidden py-6 text-center text-sm",
data: {
- rbui__combobox_content_target: "empty"
+ ruby_ui__combobox_content_target: "empty"
}
}
end
diff --git a/lib/rbui/combobox/combobox_group.rb b/lib/ruby_ui/combobox/combobox_group.rb
similarity index 91%
rename from lib/rbui/combobox/combobox_group.rb
rename to lib/ruby_ui/combobox/combobox_group.rb
index 4b53824f..1620d032 100644
--- a/lib/rbui/combobox/combobox_group.rb
+++ b/lib/ruby_ui/combobox/combobox_group.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxGroup < Base
def initialize(heading: nil, **attrs)
@heading = heading
@@ -30,7 +30,7 @@ def default_attrs
role: "presentation",
data: {
value: @heading,
- rbui__combobox_content_target: "group"
+ ruby_ui__combobox_content_target: "group"
}
}
end
diff --git a/lib/rbui/combobox/combobox_input.rb b/lib/ruby_ui/combobox/combobox_input.rb
similarity index 53%
rename from lib/rbui/combobox/combobox_input.rb
rename to lib/ruby_ui/combobox/combobox_input.rb
index 01a55cf1..bab4122c 100644
--- a/lib/rbui/combobox/combobox_input.rb
+++ b/lib/ruby_ui/combobox/combobox_input.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxInput < Base
def view_template
input(**attrs)
@@ -12,9 +12,9 @@ def default_attrs
{
class: "hidden",
data: {
- rbui__combobox_target: "input",
- rbui__form_field_target: "input",
- action: "change->rbui--form-field#onChange invalid->rbui--form-field#onInvalid"
+ ruby_ui__combobox_target: "input",
+ ruby_ui__form_field_target: "input",
+ action: "change->ruby_ui--form-field#onChange invalid->ruby_ui--form-field#onInvalid"
}
}
end
diff --git a/lib/rbui/combobox/combobox_item.rb b/lib/ruby_ui/combobox/combobox_item.rb
similarity index 84%
rename from lib/rbui/combobox/combobox_item.rb
rename to lib/ruby_ui/combobox/combobox_item.rb
index d7bd455a..319b9afb 100644
--- a/lib/rbui/combobox/combobox_item.rb
+++ b/lib/ruby_ui/combobox/combobox_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxItem < Base
def initialize(value: nil, **attrs)
@value = value
@@ -41,10 +41,10 @@ def default_attrs
"combobox-item group relative flex cursor-pointer select-none items-center gap-x-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground aria-[current]:bg-accent aria-[current]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
data: {
value: @value,
- rbui__combobox_target: "item",
- rbui__combobox_content_target: "item",
- controller: "rbui--combobox-item",
- action: "click->rbui--combobox#onItemSelected"
+ ruby_ui__combobox_target: "item",
+ ruby_ui__combobox_content_target: "item",
+ controller: "ruby_ui--combobox-item",
+ action: "click->ruby_ui--combobox#onItemSelected"
},
aria_selected: "false"
}
diff --git a/lib/rbui/combobox/combobox_item_controller.js b/lib/ruby_ui/combobox/combobox_item_controller.js
similarity index 100%
rename from lib/rbui/combobox/combobox_item_controller.js
rename to lib/ruby_ui/combobox/combobox_item_controller.js
diff --git a/lib/rbui/combobox/combobox_list.rb b/lib/ruby_ui/combobox/combobox_list.rb
similarity index 87%
rename from lib/rbui/combobox/combobox_list.rb
rename to lib/ruby_ui/combobox/combobox_list.rb
index da9a64af..278111f4 100644
--- a/lib/rbui/combobox/combobox_list.rb
+++ b/lib/ruby_ui/combobox/combobox_list.rb
@@ -2,7 +2,7 @@
require "securerandom"
-module RBUI
+module RubyUI
class ComboboxList < Base
def initialize(**attrs)
@id = "list#{SecureRandom.hex(4)}"
@@ -19,7 +19,7 @@ def default_attrs
{
id: @id,
data: {
- rbui__combobox_target: "list"
+ ruby_ui__combobox_target: "list"
},
role: "listbox",
tabindex: "-1"
diff --git a/lib/rbui/combobox/combobox_search_input.rb b/lib/ruby_ui/combobox/combobox_search_input.rb
similarity index 90%
rename from lib/rbui/combobox/combobox_search_input.rb
rename to lib/ruby_ui/combobox/combobox_search_input.rb
index f42ba5d4..0d1ec828 100644
--- a/lib/rbui/combobox/combobox_search_input.rb
+++ b/lib/ruby_ui/combobox/combobox_search_input.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxSearchInput < Base
def initialize(placeholder:, **attrs)
@placeholder = placeholder
@@ -44,8 +44,8 @@ def default_attrs
"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
placeholder: @placeholder,
data: {
- action: "input->rbui--combobox#onSearchInput",
- rbui__combobox_target: "search"
+ action: "input->ruby_ui--combobox#onSearchInput",
+ ruby_ui__combobox_target: "search"
},
autocomplete: "off",
autocorrect: "off",
diff --git a/lib/rbui/combobox/combobox_separator.rb b/lib/ruby_ui/combobox/combobox_separator.rb
similarity index 93%
rename from lib/rbui/combobox/combobox_separator.rb
rename to lib/ruby_ui/combobox/combobox_separator.rb
index 3f14366e..a2a18732 100644
--- a/lib/rbui/combobox/combobox_separator.rb
+++ b/lib/ruby_ui/combobox/combobox_separator.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxSeparator < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/combobox/combobox_trigger.rb b/lib/ruby_ui/combobox/combobox_trigger.rb
similarity index 91%
rename from lib/rbui/combobox/combobox_trigger.rb
rename to lib/ruby_ui/combobox/combobox_trigger.rb
index 6d3a21e0..80f45470 100644
--- a/lib/rbui/combobox/combobox_trigger.rb
+++ b/lib/ruby_ui/combobox/combobox_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxTrigger < Base
def view_template(&block)
button(**attrs) do
@@ -34,8 +34,8 @@ def icon
def default_attrs
{
data: {
- action: "rbui--combobox#onTriggerClick",
- rbui__combobox_target: "trigger"
+ action: "ruby_ui--combobox#onTriggerClick",
+ ruby_ui__combobox_target: "trigger"
},
type: "button",
role: "combobox",
diff --git a/lib/rbui/combobox/combobox_value.rb b/lib/ruby_ui/combobox/combobox_value.rb
similarity index 87%
rename from lib/rbui/combobox/combobox_value.rb
rename to lib/ruby_ui/combobox/combobox_value.rb
index 7ba6cb0f..f011a5b1 100644
--- a/lib/rbui/combobox/combobox_value.rb
+++ b/lib/ruby_ui/combobox/combobox_value.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ComboboxValue < Base
def initialize(placeholder: nil, **attrs)
@placeholder = placeholder
@@ -18,7 +18,7 @@ def view_template(&block)
def default_attrs
{
data: {
- rbui__combobox_target: "value"
+ ruby_ui__combobox_target: "value"
},
class: "pointer-events-none"
}
diff --git a/lib/rbui/command/command.rb b/lib/ruby_ui/command/command.rb
similarity index 89%
rename from lib/rbui/command/command.rb
rename to lib/ruby_ui/command/command.rb
index c4498430..de1d042c 100644
--- a/lib/rbui/command/command.rb
+++ b/lib/ruby_ui/command/command.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Command < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/command/command_controller.js b/lib/ruby_ui/command/command_controller.js
similarity index 65%
rename from lib/rbui/command/command_controller.js
rename to lib/ruby_ui/command/command_controller.js
index a53a40eb..933e909a 100644
--- a/lib/rbui/command/command_controller.js
+++ b/lib/ruby_ui/command/command_controller.js
@@ -1,16 +1,16 @@
import { Controller } from "@hotwired/stimulus";
-import Fuse from 'fuse.js';
+import Fuse from "fuse.js";
-// Connects to data-controller="rbui--command"
+// Connects to data-controller="ruby_ui--command"
export default class extends Controller {
- static targets = ["input", "group", "item", "empty", "content"]
+ static targets = ["input", "group", "item", "empty", "content"];
static values = {
open: {
type: Boolean,
- default: false
+ default: false,
},
- }
+ };
connect() {
this.inputTarget.focus();
@@ -19,24 +19,23 @@ export default class extends Controller {
this.selectedIndex = -1;
if (this.openValue) {
- this.open()
+ this.open();
}
}
open(e) {
- e.preventDefault()
- document.body.insertAdjacentHTML('beforeend', this.contentTarget.innerHTML)
+ e.preventDefault();
+ document.body.insertAdjacentHTML("beforeend", this.contentTarget.innerHTML);
// prevent scroll on body
- document.body.classList.add('overflow-hidden')
+ document.body.classList.add("overflow-hidden");
}
-
dismiss() {
// allow scroll on body
- document.body.classList.remove('overflow-hidden')
+ document.body.classList.remove("overflow-hidden");
// remove the element
- console.log("this.element", this.element)
- this.element.remove()
+ console.log("this.element", this.element);
+ this.element.remove();
}
filter(e) {
@@ -52,19 +51,24 @@ export default class extends Controller {
this.toggleVisibility(this.itemTargets, false);
const results = this.searchIndex.search(query);
- results.forEach(result => this.toggleVisibility([result.item.element], true));
+ results.forEach((result) =>
+ this.toggleVisibility([result.item.element], true),
+ );
this.toggleVisibility(this.emptyTargets, results.length === 0);
this.updateGroupVisibility();
}
toggleVisibility(elements, isVisible) {
- elements.forEach(el => el.classList.toggle("hidden", !isVisible));
+ elements.forEach((el) => el.classList.toggle("hidden", !isVisible));
}
updateGroupVisibility() {
- this.groupTargets.forEach(group => {
- const hasVisibleItems = group.querySelectorAll("[data-rbui--command-target='item']:not(.hidden)").length > 0;
+ this.groupTargets.forEach((group) => {
+ const hasVisibleItems =
+ group.querySelectorAll(
+ "[data-ruby_ui--command-target='item']:not(.hidden)",
+ ).length > 0;
this.toggleVisibility([group], hasVisibleItems);
});
}
@@ -81,19 +85,24 @@ export default class extends Controller {
threshold: 0.2,
includeMatches: true,
};
- const items = this.itemTargets.map(el => ({ value: el.dataset.value, element: el }));
+ const items = this.itemTargets.map((el) => ({
+ value: el.dataset.value,
+ element: el,
+ }));
return new Fuse(items, options);
}
handleKeydown(e) {
- const visibleItems = this.itemTargets.filter(item => !item.classList.contains('hidden'));
- if (e.key === 'ArrowDown') {
+ const visibleItems = this.itemTargets.filter(
+ (item) => !item.classList.contains("hidden"),
+ );
+ if (e.key === "ArrowDown") {
e.preventDefault();
this.updateSelectedItem(visibleItems, 1);
- } else if (e.key === 'ArrowUp') {
+ } else if (e.key === "ArrowUp") {
e.preventDefault();
this.updateSelectedItem(visibleItems, -1);
- } else if (e.key === 'Enter' && this.selectedIndex !== -1) {
+ } else if (e.key === "Enter" && this.selectedIndex !== -1) {
e.preventDefault();
visibleItems[this.selectedIndex].click();
}
@@ -117,11 +126,11 @@ export default class extends Controller {
}
toggleAriaSelected(element, isSelected) {
- element.setAttribute('aria-selected', isSelected.toString());
+ element.setAttribute("aria-selected", isSelected.toString());
}
deselectAll() {
- this.itemTargets.forEach(item => this.toggleAriaSelected(item, false));
+ this.itemTargets.forEach((item) => this.toggleAriaSelected(item, false));
this.selectedIndex = -1;
}
}
diff --git a/lib/rbui/command/command_dialog.rb b/lib/ruby_ui/command/command_dialog.rb
similarity index 75%
rename from lib/rbui/command/command_dialog.rb
rename to lib/ruby_ui/command/command_dialog.rb
index 167d7b99..7a179185 100644
--- a/lib/rbui/command/command_dialog.rb
+++ b/lib/ruby_ui/command/command_dialog.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandDialog < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {controller: "rbui--command"}
+ data: {controller: "ruby_ui--command"}
}
end
end
diff --git a/lib/rbui/command/command_dialog_content.rb b/lib/ruby_ui/command/command_dialog_content.rb
similarity index 86%
rename from lib/rbui/command/command_dialog_content.rb
rename to lib/ruby_ui/command/command_dialog_content.rb
index a387e6f0..893ad0b5 100644
--- a/lib/rbui/command/command_dialog_content.rb
+++ b/lib/ruby_ui/command/command_dialog_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandDialogContent < Base
SIZES = {
xs: "max-w-sm",
@@ -17,8 +17,8 @@ def initialize(size: :md, **attrs)
end
def view_template(&block)
- all_template_tag(data: {rbui__command_target: "content"}) do
- div(data: {controller: "rbui--command"}) do
+ all_template_tag(data: {ruby_ui__command_target: "content"}) do
+ div(data: {controller: "ruby_ui--command"}) do
backdrop
div(**attrs, &block)
end
@@ -40,7 +40,7 @@ def default_attrs
def backdrop
div(
data_state: "open",
- data_action: "click->rbui--command#dismiss esc->rbui--command#dismiss",
+ data_action: "click->ruby_ui--command#dismiss esc->ruby_ui--command#dismiss",
class: "fixed pointer-events-auto inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
)
end
diff --git a/lib/rbui/command/command_dialog_trigger.rb b/lib/ruby_ui/command/command_dialog_trigger.rb
similarity index 71%
rename from lib/rbui/command/command_dialog_trigger.rb
rename to lib/ruby_ui/command/command_dialog_trigger.rb
index 7d4d0f17..ec70d5d5 100644
--- a/lib/rbui/command/command_dialog_trigger.rb
+++ b/lib/ruby_ui/command/command_dialog_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandDialogTrigger < Base
DEFAULT_KEYBINDINGS = [
"keydown.ctrl+k@window",
@@ -8,7 +8,7 @@ class CommandDialogTrigger < Base
].freeze
def initialize(keybindings: DEFAULT_KEYBINDINGS, **attrs)
- @keybindings = keybindings.map { |kb| "#{kb}->rbui--command#open" }
+ @keybindings = keybindings.map { |kb| "#{kb}->ruby_ui--command#open" }
super(**attrs)
end
@@ -21,7 +21,7 @@ def view_template(&)
def default_attrs
{
data: {
- action: ["click->rbui--command#open", @keybindings.join(" ")]
+ action: ["click->ruby_ui--command#open", @keybindings.join(" ")]
}
}
end
diff --git a/lib/rbui/command/command_empty.rb b/lib/ruby_ui/command/command_empty.rb
similarity index 80%
rename from lib/rbui/command/command_empty.rb
rename to lib/ruby_ui/command/command_empty.rb
index d42327d3..d0f9c74f 100644
--- a/lib/rbui/command/command_empty.rb
+++ b/lib/ruby_ui/command/command_empty.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandEmpty < Base
def view_template(&)
div(**attrs, &)
@@ -12,7 +12,7 @@ def default_attrs
{
class: "py-6 text-center text-sm",
role: "presentation",
- data: {rbui__command_target: "empty"}
+ data: {ruby_ui__command_target: "empty"}
}
end
end
diff --git a/lib/rbui/command/command_group.rb b/lib/ruby_ui/command/command_group.rb
similarity index 93%
rename from lib/rbui/command/command_group.rb
rename to lib/ruby_ui/command/command_group.rb
index 84ba6774..7eb5b7d6 100644
--- a/lib/rbui/command/command_group.rb
+++ b/lib/ruby_ui/command/command_group.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandGroup < Base
def initialize(title: nil, **attrs)
@title = title
@@ -32,7 +32,7 @@ def default_attrs
role: "presentation",
data: {
value: @title,
- rbui__command_target: "group"
+ ruby_ui__command_target: "group"
}
}
end
diff --git a/lib/rbui/command/command_input.rb b/lib/ruby_ui/command/command_input.rb
similarity index 82%
rename from lib/rbui/command/command_input.rb
rename to lib/ruby_ui/command/command_input.rb
index 1d4fd53e..ee921cb0 100644
--- a/lib/rbui/command/command_input.rb
+++ b/lib/ruby_ui/command/command_input.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandInput < Base
def initialize(placeholder: "Type a command or search...", **attrs)
@placeholder = placeholder
@@ -40,8 +40,8 @@ def default_attrs
{
class: "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
placeholder: @placeholder,
- data_action: "input->rbui--command#filter keydown.down->rbui--command#handleKeydown keydown.up->rbui--command#handleKeydown keydown.enter->rbui--command#handleKeydown keydown.esc->rbui--command#dismiss",
- data_rbui__command_target: "input",
+ data_action: "input->ruby_ui--command#filter keydown.down->ruby_ui--command#handleKeydown keydown.up->ruby_ui--command#handleKeydown keydown.enter->ruby_ui--command#handleKeydown keydown.esc->ruby_ui--command#dismiss",
+ data_ruby_ui__command_target: "input",
autocomplete: "off",
autocorrect: "off",
spellcheck: false,
diff --git a/lib/rbui/command/command_item.rb b/lib/ruby_ui/command/command_item.rb
similarity index 93%
rename from lib/rbui/command/command_item.rb
rename to lib/ruby_ui/command/command_item.rb
index a9cb1929..8b2c2aad 100644
--- a/lib/rbui/command/command_item.rb
+++ b/lib/ruby_ui/command/command_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandItem < Base
def initialize(value:, text: "", href: "#", **attrs)
@value = value
@@ -21,7 +21,7 @@ def default_attrs
href: @href,
role: "option",
data: {
- rbui__command_target: "item",
+ ruby_ui__command_target: "item",
value: @value,
text: @text
}
diff --git a/lib/rbui/command/command_list.rb b/lib/ruby_ui/command/command_list.rb
similarity index 94%
rename from lib/rbui/command/command_list.rb
rename to lib/ruby_ui/command/command_list.rb
index f99876db..990872c3 100644
--- a/lib/rbui/command/command_list.rb
+++ b/lib/ruby_ui/command/command_list.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class CommandList < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/context_menu/context_menu.rb b/lib/ruby_ui/context_menu/context_menu.rb
similarity index 86%
rename from lib/rbui/context_menu/context_menu.rb
rename to lib/ruby_ui/context_menu/context_menu.rb
index 1d33370b..37a28c4d 100644
--- a/lib/rbui/context_menu/context_menu.rb
+++ b/lib/ruby_ui/context_menu/context_menu.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenu < Base
def initialize(options: {}, **attrs)
@options = options
@@ -17,7 +17,7 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--context-menu",
+ controller: "ruby_ui--context-menu",
popover_options_value: @options.to_json
}
}
diff --git a/lib/rbui/context_menu/context_menu_content.rb b/lib/ruby_ui/context_menu/context_menu_content.rb
similarity index 90%
rename from lib/rbui/context_menu/context_menu_content.rb
rename to lib/ruby_ui/context_menu/context_menu_content.rb
index 4c2bbf85..6ff51082 100644
--- a/lib/rbui/context_menu/context_menu_content.rb
+++ b/lib/ruby_ui/context_menu/context_menu_content.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenuContent < Base
def view_template(&block)
- all_template_tag(data: {rbui__context_menu_target: "content"}) do
+ all_template_tag(data: {ruby_ui__context_menu_target: "content"}) do
div(**attrs, &block)
end
end
diff --git a/lib/rbui/context_menu/context_menu_controller.js b/lib/ruby_ui/context_menu/context_menu_controller.js
similarity index 100%
rename from lib/rbui/context_menu/context_menu_controller.js
rename to lib/ruby_ui/context_menu/context_menu_controller.js
diff --git a/lib/rbui/context_menu/context_menu_item.rb b/lib/ruby_ui/context_menu/context_menu_item.rb
similarity index 94%
rename from lib/rbui/context_menu/context_menu_item.rb
rename to lib/ruby_ui/context_menu/context_menu_item.rb
index ab3580a0..4c870fc3 100644
--- a/lib/rbui/context_menu/context_menu_item.rb
+++ b/lib/ruby_ui/context_menu/context_menu_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenuItem < Base
def initialize(href: "#", checked: false, shortcut: nil, disabled: false, **attrs)
@href = href
@@ -56,8 +56,8 @@ def default_attrs
"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 pl-8",
tabindex: "-1",
data_orientation: "vertical",
- data_action: "click->rbui--context-menu#close",
- data_rbui__context_menu_target: "menuItem",
+ data_action: "click->ruby_ui--context-menu#close",
+ data_ruby_ui__context_menu_target: "menuItem",
data_disabled: @disabled,
disabled: @disabled
}
diff --git a/lib/rbui/context_menu/context_menu_label.rb b/lib/ruby_ui/context_menu/context_menu_label.rb
similarity index 96%
rename from lib/rbui/context_menu/context_menu_label.rb
rename to lib/ruby_ui/context_menu/context_menu_label.rb
index 46e779f7..0c6b6b86 100644
--- a/lib/rbui/context_menu/context_menu_label.rb
+++ b/lib/ruby_ui/context_menu/context_menu_label.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenuLabel < Base
def initialize(inset: false, **attrs)
@inset = inset
diff --git a/lib/rbui/context_menu/context_menu_separator.rb b/lib/ruby_ui/context_menu/context_menu_separator.rb
similarity index 95%
rename from lib/rbui/context_menu/context_menu_separator.rb
rename to lib/ruby_ui/context_menu/context_menu_separator.rb
index 19afc01c..6b0a50d3 100644
--- a/lib/rbui/context_menu/context_menu_separator.rb
+++ b/lib/ruby_ui/context_menu/context_menu_separator.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenuSeparator < Base
def view_template
div(**attrs)
diff --git a/lib/rbui/context_menu/context_menu_trigger.rb b/lib/ruby_ui/context_menu/context_menu_trigger.rb
similarity index 61%
rename from lib/rbui/context_menu/context_menu_trigger.rb
rename to lib/ruby_ui/context_menu/context_menu_trigger.rb
index 9cc7c5a7..8aff0651 100644
--- a/lib/rbui/context_menu/context_menu_trigger.rb
+++ b/lib/ruby_ui/context_menu/context_menu_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ContextMenuTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,8 +11,8 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__context_menu_target: "trigger",
- action: "contextmenu->rbui--context-menu#handleContextMenu"
+ ruby_ui__context_menu_target: "trigger",
+ action: "contextmenu->ruby_ui--context-menu#handleContextMenu"
}
}
end
diff --git a/lib/rbui/dialog/dialog.rb b/lib/ruby_ui/dialog/dialog.rb
similarity index 74%
rename from lib/rbui/dialog/dialog.rb
rename to lib/ruby_ui/dialog/dialog.rb
index 9800e99e..51a8d89b 100644
--- a/lib/rbui/dialog/dialog.rb
+++ b/lib/ruby_ui/dialog/dialog.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Dialog < Base
def initialize(open: false, **attrs)
@open = open
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--dialog",
- rbui__dialog_open_value: @open
+ controller: "ruby_ui--dialog",
+ ruby_ui__dialog_open_value: @open
}
}
end
diff --git a/lib/rbui/dialog/dialog_content.rb b/lib/ruby_ui/dialog/dialog_content.rb
similarity index 91%
rename from lib/rbui/dialog/dialog_content.rb
rename to lib/ruby_ui/dialog/dialog_content.rb
index d81d1975..3b95f522 100644
--- a/lib/rbui/dialog/dialog_content.rb
+++ b/lib/ruby_ui/dialog/dialog_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogContent < Base
SIZES = {
xs: "max-w-sm",
@@ -17,8 +17,8 @@ def initialize(size: :md, **attrs)
end
def view_template
- all_template_tag(data: {rbui__dialog_target: "content"}) do
- div(data_controller: "rbui--dialog") do
+ all_template_tag(data: {ruby_ui__dialog_target: "content"}) do
+ div(data_controller: "ruby_ui--dialog") do
backdrop
div(**attrs) do
yield
@@ -44,7 +44,7 @@ def close_button
button(
type: "button",
class: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
- data_action: "click->rbui--dialog#dismiss"
+ data_action: "click->ruby_ui--dialog#dismiss"
) do
svg(
width: "15",
@@ -69,7 +69,7 @@ def close_button
def backdrop
div(
data_state: "open",
- data_action: "click->rbui--dialog#dismiss esc->rbui--dialog#dismiss",
+ data_action: "click->ruby_ui--dialog#dismiss esc->ruby_ui--dialog#dismiss",
class:
"fixed pointer-events-auto inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
)
diff --git a/lib/rbui/dialog/dialog_controller.js b/lib/ruby_ui/dialog/dialog_controller.js
similarity index 100%
rename from lib/rbui/dialog/dialog_controller.js
rename to lib/ruby_ui/dialog/dialog_controller.js
diff --git a/lib/rbui/dialog/dialog_description.rb b/lib/ruby_ui/dialog/dialog_description.rb
similarity index 94%
rename from lib/rbui/dialog/dialog_description.rb
rename to lib/ruby_ui/dialog/dialog_description.rb
index 0efa4301..2da33bda 100644
--- a/lib/rbui/dialog/dialog_description.rb
+++ b/lib/ruby_ui/dialog/dialog_description.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogDescription < Base
def view_template(&)
p(**attrs, &)
diff --git a/lib/rbui/dialog/dialog_footer.rb b/lib/ruby_ui/dialog/dialog_footer.rb
similarity index 95%
rename from lib/rbui/dialog/dialog_footer.rb
rename to lib/ruby_ui/dialog/dialog_footer.rb
index 43fdb58b..88277df0 100644
--- a/lib/rbui/dialog/dialog_footer.rb
+++ b/lib/ruby_ui/dialog/dialog_footer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogFooter < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/dialog/dialog_header.rb b/lib/ruby_ui/dialog/dialog_header.rb
similarity index 94%
rename from lib/rbui/dialog/dialog_header.rb
rename to lib/ruby_ui/dialog/dialog_header.rb
index 097eb501..cb7d9b5c 100644
--- a/lib/rbui/dialog/dialog_header.rb
+++ b/lib/ruby_ui/dialog/dialog_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogHeader < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/dialog/dialog_middle.rb b/lib/ruby_ui/dialog/dialog_middle.rb
similarity index 93%
rename from lib/rbui/dialog/dialog_middle.rb
rename to lib/ruby_ui/dialog/dialog_middle.rb
index c0cf6665..aa8a9072 100644
--- a/lib/rbui/dialog/dialog_middle.rb
+++ b/lib/ruby_ui/dialog/dialog_middle.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogMiddle < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/dialog/dialog_title.rb b/lib/ruby_ui/dialog/dialog_title.rb
similarity index 94%
rename from lib/rbui/dialog/dialog_title.rb
rename to lib/ruby_ui/dialog/dialog_title.rb
index eb448971..fce48fa7 100644
--- a/lib/rbui/dialog/dialog_title.rb
+++ b/lib/ruby_ui/dialog/dialog_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogTitle < Base
def view_template(&)
h3(**attrs, &)
diff --git a/lib/rbui/dialog/dialog_trigger.rb b/lib/ruby_ui/dialog/dialog_trigger.rb
similarity index 79%
rename from lib/rbui/dialog/dialog_trigger.rb
rename to lib/ruby_ui/dialog/dialog_trigger.rb
index 97423f39..ddc877da 100644
--- a/lib/rbui/dialog/dialog_trigger.rb
+++ b/lib/ruby_ui/dialog/dialog_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DialogTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- action: "click->rbui--dialog#open"
+ action: "click->ruby_ui--dialog#open"
},
class: "inline-block"
}
diff --git a/lib/rbui/dropdown_menu/dropdown_menu.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb
similarity index 60%
rename from lib/rbui/dropdown_menu/dropdown_menu.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu.rb
index d004417c..e7e8bcda 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenu < Base
def initialize(options: {}, **attrs)
@options = options
@@ -16,9 +16,9 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--dropdown-menu",
- action: "click@window->rbui--dropdown-menu#onClickOutside",
- rbui__dropdown_menu_options_value: @options.to_json
+ controller: "ruby_ui--dropdown-menu",
+ action: "click@window->ruby_ui--dropdown-menu#onClickOutside",
+ ruby_ui__dropdown_menu_options_value: @options.to_json
}
}
end
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_content.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu_content.rb
similarity index 81%
rename from lib/rbui/dropdown_menu/dropdown_menu_content.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_content.rb
index f2ddb87e..44b8e16d 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu_content.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu_content.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenuContent < Base
def view_template(&block)
- div(data: {rbui__dropdown_menu_target: "content"}, class: "hidden", style: "width: max-content; position: absolute; top: 0; left: 0;") do
+ div(data: {ruby_ui__dropdown_menu_target: "content"}, class: "hidden", style: "width: max-content; position: absolute; top: 0; left: 0;") do
div(**attrs, &block)
end
end
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_controller.js b/lib/ruby_ui/dropdown_menu/dropdown_menu_controller.js
similarity index 100%
rename from lib/rbui/dropdown_menu/dropdown_menu_controller.js
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_controller.js
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_item.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu_item.rb
similarity index 84%
rename from lib/rbui/dropdown_menu/dropdown_menu_item.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_item.rb
index c9cf38f4..88b8f24b 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu_item.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenuItem < Base
def initialize(href: "#", **attrs)
@href = href
@@ -18,8 +18,8 @@ def default_attrs
href: @href,
role: "menuitem",
class: "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
- data_action: "click->rbui--dropdown-menu#close",
- data_rbui__dropdown_menu_target: "menuItem",
+ data_action: "click->ruby_ui--dropdown-menu#close",
+ data_ruby_ui__dropdown_menu_target: "menuItem",
tabindex: "-1",
data_orientation: "vertical"
}
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_label.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu_label.rb
similarity index 94%
rename from lib/rbui/dropdown_menu/dropdown_menu_label.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_label.rb
index cf8c10b7..1a29ee72 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu_label.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu_label.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenuLabel < Base
def view_template(&)
h3(**attrs, &)
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_separator.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu_separator.rb
similarity index 95%
rename from lib/rbui/dropdown_menu/dropdown_menu_separator.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_separator.rb
index e5fc565f..030064b1 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu_separator.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu_separator.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenuSeparator < Base
def view_template
div(**attrs)
diff --git a/lib/rbui/dropdown_menu/dropdown_menu_trigger.rb b/lib/ruby_ui/dropdown_menu/dropdown_menu_trigger.rb
similarity index 64%
rename from lib/rbui/dropdown_menu/dropdown_menu_trigger.rb
rename to lib/ruby_ui/dropdown_menu/dropdown_menu_trigger.rb
index b363a5e5..448deb88 100644
--- a/lib/rbui/dropdown_menu/dropdown_menu_trigger.rb
+++ b/lib/ruby_ui/dropdown_menu/dropdown_menu_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class DropdownMenuTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {rbui__dropdown_menu_target: "trigger", action: "click->rbui--dropdown-menu#toggle"},
+ data: {ruby_ui__dropdown_menu_target: "trigger", action: "click->ruby_ui--dropdown-menu#toggle"},
class: "inline-block"
}
end
diff --git a/lib/rbui/form/form.rb b/lib/ruby_ui/form/form.rb
similarity index 92%
rename from lib/rbui/form/form.rb
rename to lib/ruby_ui/form/form.rb
index 5ea73430..c34e7745 100644
--- a/lib/rbui/form/form.rb
+++ b/lib/ruby_ui/form/form.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Form < Base
def view_template(&)
form(**attrs, &)
diff --git a/lib/rbui/form/form_field.rb b/lib/ruby_ui/form/form_field.rb
similarity index 80%
rename from lib/rbui/form/form_field.rb
rename to lib/ruby_ui/form/form_field.rb
index e02d839c..0dfd6fb7 100644
--- a/lib/rbui/form/form_field.rb
+++ b/lib/ruby_ui/form/form_field.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class FormField < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--form-field"
+ controller: "ruby_ui--form-field"
},
class: "space-y-2"
}
diff --git a/lib/rbui/form/form_field_controller.js b/lib/ruby_ui/form/form_field_controller.js
similarity index 100%
rename from lib/rbui/form/form_field_controller.js
rename to lib/ruby_ui/form/form_field_controller.js
diff --git a/lib/rbui/form/form_field_error.rb b/lib/ruby_ui/form/form_field_error.rb
similarity index 81%
rename from lib/rbui/form/form_field_error.rb
rename to lib/ruby_ui/form/form_field_error.rb
index 414296f3..0fceacd3 100644
--- a/lib/rbui/form/form_field_error.rb
+++ b/lib/ruby_ui/form/form_field_error.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class FormFieldError < Base
def view_template(&)
p(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__form_field_target: "error"
+ ruby_ui__form_field_target: "error"
},
class: "text-sm font-medium text-destructive"
}
diff --git a/lib/rbui/form/form_field_hint.rb b/lib/ruby_ui/form/form_field_hint.rb
similarity index 93%
rename from lib/rbui/form/form_field_hint.rb
rename to lib/ruby_ui/form/form_field_hint.rb
index a4d3b038..5304a259 100644
--- a/lib/rbui/form/form_field_hint.rb
+++ b/lib/ruby_ui/form/form_field_hint.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class FormFieldHint < Base
def view_template(&)
p(**attrs, &)
diff --git a/lib/rbui/form/form_field_label.rb b/lib/ruby_ui/form/form_field_label.rb
similarity index 95%
rename from lib/rbui/form/form_field_label.rb
rename to lib/ruby_ui/form/form_field_label.rb
index 13ae7a25..032ada13 100644
--- a/lib/rbui/form/form_field_label.rb
+++ b/lib/ruby_ui/form/form_field_label.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class FormFieldLabel < Base
def view_template(&)
label(**attrs, &)
diff --git a/lib/rbui/hover_card/hover_card.rb b/lib/ruby_ui/hover_card/hover_card.rb
similarity index 76%
rename from lib/rbui/hover_card/hover_card.rb
rename to lib/ruby_ui/hover_card/hover_card.rb
index b9251c70..a072e4f1 100644
--- a/lib/rbui/hover_card/hover_card.rb
+++ b/lib/ruby_ui/hover_card/hover_card.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class HoverCard < Base
def initialize(option: {}, **attrs)
@options = option
@@ -18,8 +18,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--hover-card",
- rbui__hover_card_options_value: @options.to_json
+ controller: "ruby_ui--hover-card",
+ ruby_ui__hover_card_options_value: @options.to_json
}
}
end
diff --git a/lib/rbui/hover_card/hover_card_content.rb b/lib/ruby_ui/hover_card/hover_card_content.rb
similarity index 88%
rename from lib/rbui/hover_card/hover_card_content.rb
rename to lib/ruby_ui/hover_card/hover_card_content.rb
index b26384bc..068356cd 100644
--- a/lib/rbui/hover_card/hover_card_content.rb
+++ b/lib/ruby_ui/hover_card/hover_card_content.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class HoverCardContent < Base
def view_template(&block)
- all_template_tag(data: {rbui__hover_card_target: "content"}) do
+ all_template_tag(data: {ruby_ui__hover_card_target: "content"}) do
div(**attrs, &block)
end
end
diff --git a/lib/rbui/hover_card/hover_card_controller.js b/lib/ruby_ui/hover_card/hover_card_controller.js
similarity index 100%
rename from lib/rbui/hover_card/hover_card_controller.js
rename to lib/ruby_ui/hover_card/hover_card_controller.js
diff --git a/lib/rbui/hover_card/hover_card_trigger.rb b/lib/ruby_ui/hover_card/hover_card_trigger.rb
similarity index 79%
rename from lib/rbui/hover_card/hover_card_trigger.rb
rename to lib/ruby_ui/hover_card/hover_card_trigger.rb
index 1713212e..6b5238a5 100644
--- a/lib/rbui/hover_card/hover_card_trigger.rb
+++ b/lib/ruby_ui/hover_card/hover_card_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class HoverCardTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__hover_card_target: "trigger"
+ ruby_ui__hover_card_target: "trigger"
},
class: "inline-block"
}
diff --git a/lib/rbui/index.js b/lib/ruby_ui/index.js
similarity index 55%
rename from lib/rbui/index.js
rename to lib/ruby_ui/index.js
index 838a546b..6b80213e 100644
--- a/lib/rbui/index.js
+++ b/lib/ruby_ui/index.js
@@ -34,37 +34,37 @@ function initialize(application) {
};
// Register all controllers
- registerIfNotExists("rbui--accordion", AccordionController);
- registerIfNotExists("rbui--alert-dialog", AlertDialogController);
- registerIfNotExists("rbui--calendar", CalendarController);
- registerIfNotExists("rbui--calendar-input", CalendarInputController);
- registerIfNotExists("rbui--collapsible", CollapsibleController);
- registerIfNotExists("rbui--chart", ChartController);
- registerIfNotExists("rbui--checkbox-group", CheckboxGroupController);
- registerIfNotExists("rbui--clipboard", ClipboardController);
- registerIfNotExists("rbui--combobox", ComboboxController);
- registerIfNotExists("rbui--combobox-content", ComboboxContentController);
- registerIfNotExists("rbui--combobox-item", ComboboxItemController);
- registerIfNotExists("rbui--command", CommandController);
- registerIfNotExists("rbui--context-menu", ContextMenuController);
- registerIfNotExists("rbui--dialog", DialogController);
- registerIfNotExists("rbui--dropdown-menu", DropdownMenuController);
- registerIfNotExists("rbui--form-field", FormFieldController);
- registerIfNotExists("rbui--hover-card", HoverCardController);
- registerIfNotExists("rbui--popover", PopoverController);
- registerIfNotExists("rbui--tabs", TabsController);
- registerIfNotExists("rbui--theme-toggle", ThemeToggleController);
- registerIfNotExists("rbui--tooltip", TooltipController);
- registerIfNotExists("rbui--select", SelectController);
- registerIfNotExists("rbui--select-item", SelectItemController);
- registerIfNotExists("rbui--sheet", SheetController);
- registerIfNotExists("rbui--sheet-content", SheetContentController);
+ registerIfNotExists("ruby_ui--accordion", AccordionController);
+ registerIfNotExists("ruby_ui--alert-dialog", AlertDialogController);
+ registerIfNotExists("ruby_ui--calendar", CalendarController);
+ registerIfNotExists("ruby_ui--calendar-input", CalendarInputController);
+ registerIfNotExists("ruby_ui--collapsible", CollapsibleController);
+ registerIfNotExists("ruby_ui--chart", ChartController);
+ registerIfNotExists("ruby_ui--checkbox-group", CheckboxGroupController);
+ registerIfNotExists("ruby_ui--clipboard", ClipboardController);
+ registerIfNotExists("ruby_ui--combobox", ComboboxController);
+ registerIfNotExists("ruby_ui--combobox-content", ComboboxContentController);
+ registerIfNotExists("ruby_ui--combobox-item", ComboboxItemController);
+ registerIfNotExists("ruby_ui--command", CommandController);
+ registerIfNotExists("ruby_ui--context-menu", ContextMenuController);
+ registerIfNotExists("ruby_ui--dialog", DialogController);
+ registerIfNotExists("ruby_ui--dropdown-menu", DropdownMenuController);
+ registerIfNotExists("ruby_ui--form-field", FormFieldController);
+ registerIfNotExists("ruby_ui--hover-card", HoverCardController);
+ registerIfNotExists("ruby_ui--popover", PopoverController);
+ registerIfNotExists("ruby_ui--tabs", TabsController);
+ registerIfNotExists("ruby_ui--theme-toggle", ThemeToggleController);
+ registerIfNotExists("ruby_ui--tooltip", TooltipController);
+ registerIfNotExists("ruby_ui--select", SelectController);
+ registerIfNotExists("ruby_ui--select-item", SelectItemController);
+ registerIfNotExists("ruby_ui--sheet", SheetController);
+ registerIfNotExists("ruby_ui--sheet-content", SheetContentController);
}
-const RBUI = {
+const RubyUI = {
initialize,
};
-export default RBUI;
+export default RubyUI;
export { initialize };
diff --git a/lib/rbui/input/input.rb b/lib/ruby_ui/input/input.rb
similarity index 80%
rename from lib/rbui/input/input.rb
rename to lib/ruby_ui/input/input.rb
index d8c127c7..4cc7f0ef 100644
--- a/lib/rbui/input/input.rb
+++ b/lib/ruby_ui/input/input.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Input < Base
def initialize(type: :string, **attrs)
@type = type.to_sym
@@ -16,8 +16,8 @@ def view_template
def default_attrs
{
data: {
- rbui__form_field_target: "input",
- action: "input->rbui--form-field#onInput invalid->rbui--form-field#onInvalid"
+ ruby_ui__form_field_target: "input",
+ action: "input->ruby_ui--form-field#onInput invalid->ruby_ui--form-field#onInvalid"
},
class: "flex h-9 w-full rounded-md border bg-background px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50 border-border focus-visible:ring-ring placeholder:text-muted-foreground"
}
diff --git a/lib/rbui/link/link.rb b/lib/ruby_ui/link/link.rb
similarity index 99%
rename from lib/rbui/link/link.rb
rename to lib/ruby_ui/link/link.rb
index 083c316c..528ea507 100644
--- a/lib/rbui/link/link.rb
+++ b/lib/ruby_ui/link/link.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Link < Base
def initialize(href: "#", variant: :link, size: :md, icon: false, **attrs)
@href = href
diff --git a/lib/rbui/pagination/pagination.rb b/lib/ruby_ui/pagination/pagination.rb
similarity index 95%
rename from lib/rbui/pagination/pagination.rb
rename to lib/ruby_ui/pagination/pagination.rb
index 839e93d6..dfc64369 100644
--- a/lib/rbui/pagination/pagination.rb
+++ b/lib/ruby_ui/pagination/pagination.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Pagination < Base
def view_template(&)
nav(**attrs, &)
diff --git a/lib/rbui/pagination/pagination_content.rb b/lib/ruby_ui/pagination/pagination_content.rb
similarity index 94%
rename from lib/rbui/pagination/pagination_content.rb
rename to lib/ruby_ui/pagination/pagination_content.rb
index 2fd0e433..135f403a 100644
--- a/lib/rbui/pagination/pagination_content.rb
+++ b/lib/ruby_ui/pagination/pagination_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class PaginationContent < Base
def view_template(&)
ul(**attrs, &)
diff --git a/lib/rbui/pagination/pagination_ellipsis.rb b/lib/ruby_ui/pagination/pagination_ellipsis.rb
similarity index 98%
rename from lib/rbui/pagination/pagination_ellipsis.rb
rename to lib/ruby_ui/pagination/pagination_ellipsis.rb
index b59a4b87..10b26783 100644
--- a/lib/rbui/pagination/pagination_ellipsis.rb
+++ b/lib/ruby_ui/pagination/pagination_ellipsis.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class PaginationEllipsis < Base
def view_template(&block)
li do
diff --git a/lib/rbui/pagination/pagination_item.rb b/lib/ruby_ui/pagination/pagination_item.rb
similarity index 82%
rename from lib/rbui/pagination/pagination_item.rb
rename to lib/ruby_ui/pagination/pagination_item.rb
index 3a211d1d..d9add897 100644
--- a/lib/rbui/pagination/pagination_item.rb
+++ b/lib/ruby_ui/pagination/pagination_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class PaginationItem < Base
def initialize(href: "#", active: false, **attrs)
@href = href
@@ -20,7 +20,7 @@ def default_attrs
{
aria: {current: @active ? "page" : nil},
class: [
- RBUI::Button.new(variant: @active ? :outline : :ghost).attrs[:class]
+ RubyUI::Button.new(variant: @active ? :outline : :ghost).attrs[:class]
]
}
end
diff --git a/lib/rbui/popover/popover.rb b/lib/ruby_ui/popover/popover.rb
similarity index 61%
rename from lib/rbui/popover/popover.rb
rename to lib/ruby_ui/popover/popover.rb
index 28dd4301..ab0f3439 100644
--- a/lib/rbui/popover/popover.rb
+++ b/lib/ruby_ui/popover/popover.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Popover < Base
def initialize(options: {}, **attrs)
@options = options
@@ -16,9 +16,9 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--popover",
- rbui__popover_options_value: @options.to_json,
- rbui__popover_trigger_value: @options[:trigger] || "hover"
+ controller: "ruby_ui--popover",
+ ruby_ui__popover_options_value: @options.to_json,
+ ruby_ui__popover_trigger_value: @options[:trigger] || "hover"
}
}
end
diff --git a/lib/rbui/popover/popover_content.rb b/lib/ruby_ui/popover/popover_content.rb
similarity index 92%
rename from lib/rbui/popover/popover_content.rb
rename to lib/ruby_ui/popover/popover_content.rb
index 34e44eaa..8ba5aeda 100644
--- a/lib/rbui/popover/popover_content.rb
+++ b/lib/ruby_ui/popover/popover_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class PopoverContent < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__popover_target: "content"
+ ruby_ui__popover_target: "content"
},
class: [
"hidden z-50 rounded-md border bg-background p-1 text-foreground shadow-md outline-none",
diff --git a/lib/rbui/popover/popover_controller.js b/lib/ruby_ui/popover/popover_controller.js
similarity index 100%
rename from lib/rbui/popover/popover_controller.js
rename to lib/ruby_ui/popover/popover_controller.js
diff --git a/lib/rbui/popover/popover_trigger.rb b/lib/ruby_ui/popover/popover_trigger.rb
similarity index 80%
rename from lib/rbui/popover/popover_trigger.rb
rename to lib/ruby_ui/popover/popover_trigger.rb
index e9ad61f3..8644c1f7 100644
--- a/lib/rbui/popover/popover_trigger.rb
+++ b/lib/ruby_ui/popover/popover_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class PopoverTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -11,7 +11,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__popover_target: "trigger"
+ ruby_ui__popover_target: "trigger"
},
class: "inline-block"
}
diff --git a/lib/rbui/radio_button/radio_button.rb b/lib/ruby_ui/radio_button/radio_button.rb
similarity index 65%
rename from lib/rbui/radio_button/radio_button.rb
rename to lib/ruby_ui/radio_button/radio_button.rb
index b4c85448..596a0470 100644
--- a/lib/rbui/radio_button/radio_button.rb
+++ b/lib/ruby_ui/radio_button/radio_button.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class RadioButton < Base
def view_template
input(**attrs)
@@ -12,8 +12,8 @@ def default_attrs
{
type: "radio",
data: {
- rbui__form_field_target: "input",
- action: "change->rbui--form-field#onInput invalid->rbui--form-field#onInvalid"
+ ruby_ui__form_field_target: "input",
+ action: "change->ruby_ui--form-field#onInput invalid->ruby_ui--form-field#onInvalid"
},
class: "h-4 w-4 p-0 border-primary rounded-full flex-none"
}
diff --git a/lib/rbui/railtie.rb b/lib/ruby_ui/railtie.rb
similarity index 53%
rename from lib/rbui/railtie.rb
rename to lib/ruby_ui/railtie.rb
index 992832dd..07a06a78 100644
--- a/lib/rbui/railtie.rb
+++ b/lib/ruby_ui/railtie.rb
@@ -1,37 +1,37 @@
-module RBUI
+module RubyUI
if defined?(Rails)
class Railtie < ::Rails::Railtie
generators do
- require_relative "../generators/rbui/install/install_generator"
+ require_relative "../generators/ruby_ui/install/install_generator"
config.app_generators do |g|
g.templates.unshift File.expand_path("../templates", __FILE__)
end
- initializer "rbui.set_generator_namespace" do
- Rails::Generators.namespace(RBUI::Generators, as: "rbui")
+ initializer "ruby_ui.set_generator_namespace" do
+ Rails::Generators.namespace(RubyUI::Generators, as: "ruby_ui")
end
end
# Add component loading
config.to_prepare do
- # Define the path to the RBUI components
- rbui_components_path = Rails.root.join("app/components/rbui")
+ # Define the path to the RubyUI components
+ ruby_ui_components_path = Rails.root.join("app/components/ruby_ui")
- # Check if the RBUI components directory exists
- if Dir.exist?(rbui_components_path)
- # Find all Ruby files in the RBUI components directory and its subdirectories
- Dir[rbui_components_path.join("**", "*.rb")].each do |file|
- # Get the relative path of the file from the RBUI components directory
- relative_path = Pathname.new(file).relative_path_from(rbui_components_path)
+ # Check if the RubyUI components directory exists
+ if Dir.exist?(ruby_ui_components_path)
+ # Find all Ruby files in the RubyUI components directory and its subdirectories
+ Dir[ruby_ui_components_path.join("**", "*.rb")].each do |file|
+ # Get the relative path of the file from the RubyUI components directory
+ relative_path = Pathname.new(file).relative_path_from(ruby_ui_components_path)
# Convert the file path to a component name
# e.g., "form/input.rb" becomes ["Form", "Input"]
component_name_parts = relative_path.to_s.chomp(".rb").split("/").map(&:camelize)
- # Create the full component name with RBUI namespace
- # e.g., "RBUI::Form::Input"
- full_component_name = "RBUI::#{component_name_parts.join("::")}"
+ # Create the full component name with RubyUI namespace
+ # e.g., "RubyUI::Form::Input"
+ full_component_name = "RubyUI::#{component_name_parts.join("::")}"
begin
# Check if the component is already defined
diff --git a/lib/rbui/select/select.rb b/lib/ruby_ui/select/select.rb
similarity index 52%
rename from lib/rbui/select/select.rb
rename to lib/ruby_ui/select/select.rb
index 5d3705dc..95ca50a0 100644
--- a/lib/rbui/select/select.rb
+++ b/lib/ruby_ui/select/select.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Select < Base
def view_template(&)
div(**attrs, &)
@@ -11,10 +11,10 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--select",
- rbui__select_open_value: "false",
- action: "click@window->rbui--select#clickOutside",
- rbui__select_rbui__select_item_outlet: ".item"
+ controller: "ruby_ui--select",
+ ruby_ui__select_open_value: "false",
+ action: "click@window->ruby_ui--select#clickOutside",
+ ruby_ui__select_ruby_ui__select_item_outlet: ".item"
},
class: "group/select w-full relative"
}
diff --git a/lib/rbui/select/select_content.rb b/lib/ruby_ui/select/select_content.rb
similarity index 66%
rename from lib/rbui/select/select_content.rb
rename to lib/ruby_ui/select/select_content.rb
index 60554be9..1756eea6 100644
--- a/lib/rbui/select/select_content.rb
+++ b/lib/ruby_ui/select/select_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectContent < Base
def initialize(**attrs)
@id = "content#{SecureRandom.hex(4)}"
@@ -10,7 +10,7 @@ def initialize(**attrs)
def view_template(&block)
div(**attrs) do
div(
- class: "max-h-96 min-w-max overflow-auto rounded-md border bg-background p-1 text-foreground shadow-md animate-out group-data-[rbui--select-open-value=true]/select:animate-in fade-out-0 group-data-[rbui--select-open-value=true]/select:fade-in-0 zoom-out-95 group-data-[rbui--select-open-value=true]/select:zoom-in-95 slide-in-from-top-2", &block
+ class: "max-h-96 min-w-max overflow-auto rounded-md border bg-background p-1 text-foreground shadow-md animate-out group-data-[ruby_ui--select-open-value=true]/select:animate-in fade-out-0 group-data-[ruby_ui--select-open-value=true]/select:fade-in-0 zoom-out-95 group-data-[ruby_ui--select-open-value=true]/select:zoom-in-95 slide-in-from-top-2", &block
)
end
end
@@ -23,7 +23,7 @@ def default_attrs
role: "listbox",
tabindex: "-1",
data: {
- rbui__select_target: "content"
+ ruby_ui__select_target: "content"
},
class: "hidden w-full absolute top-0 left-0 z-50"
}
diff --git a/lib/rbui/select/select_controller.js b/lib/ruby_ui/select/select_controller.js
similarity index 77%
rename from lib/rbui/select/select_controller.js
rename to lib/ruby_ui/select/select_controller.js
index c078d246..8a65fe26 100644
--- a/lib/rbui/select/select_controller.js
+++ b/lib/ruby_ui/select/select_controller.js
@@ -4,7 +4,7 @@ import { computePosition, autoUpdate, offset } from "@floating-ui/dom";
export default class extends Controller {
static targets = ["trigger", "content", "input", "value", "item"];
static values = { open: Boolean };
- static outlets = ["rbui--select-item"];
+ static outlets = ["ruby_ui--select-item"];
constructor(...args) {
super(...args);
@@ -23,7 +23,9 @@ export default class extends Controller {
selectItem(event) {
event.preventDefault();
- this.rbuiSelectItemOutlets.forEach(item => item.handleSelectItem(event));
+ this.ruby_uiSelectItemOutlets.forEach((item) =>
+ item.handleSelectItem(event),
+ );
const oldValue = this.inputTarget.value;
const newValue = event.target.dataset.value;
@@ -48,7 +50,9 @@ export default class extends Controller {
handleKeyDown(event) {
event.preventDefault();
- const currentIndex = this.itemTargets.findIndex((item) => item.getAttribute("aria-current") === "true");
+ const currentIndex = this.itemTargets.findIndex(
+ (item) => item.getAttribute("aria-current") === "true",
+ );
if (currentIndex + 1 < this.itemTargets.length) {
this.itemTargets[currentIndex].removeAttribute("aria-current");
@@ -59,7 +63,9 @@ export default class extends Controller {
handleKeyUp(event) {
event.preventDefault();
- const currentIndex = this.itemTargets.findIndex((item) => item.getAttribute("aria-current") === "true");
+ const currentIndex = this.itemTargets.findIndex(
+ (item) => item.getAttribute("aria-current") === "true",
+ );
if (currentIndex > 0) {
this.itemTargets[currentIndex].removeAttribute("aria-current");
@@ -72,18 +78,25 @@ export default class extends Controller {
this.closeContent();
}
-
setFocusAndCurrent() {
- const selectedItem = this.itemTargets.find((item) => item.getAttribute("aria-selected") === "true");
+ const selectedItem = this.itemTargets.find(
+ (item) => item.getAttribute("aria-selected") === "true",
+ );
if (selectedItem) {
selectedItem.focus({ preventScroll: true });
selectedItem.setAttribute("aria-current", "true");
- this.triggerTarget.setAttribute("aria-activedescendant", selectedItem.getAttribute("id"));
+ this.triggerTarget.setAttribute(
+ "aria-activedescendant",
+ selectedItem.getAttribute("id"),
+ );
} else {
this.itemTarget.focus({ preventScroll: true });
this.itemTarget.setAttribute("aria-current", "true");
- this.triggerTarget.setAttribute("aria-activedescendant", this.itemTarget.getAttribute("id"));
+ this.triggerTarget.setAttribute(
+ "aria-activedescendant",
+ this.itemTarget.getAttribute("id"),
+ );
}
}
@@ -107,7 +120,9 @@ export default class extends Controller {
setFloatingElement() {
this.cleanup = autoUpdate(this.triggerTarget, this.contentTarget, () => {
- computePosition(this.triggerTarget, this.contentTarget, { middleware: [offset(4)] }).then(({ x, y }) => {
+ computePosition(this.triggerTarget, this.contentTarget, {
+ middleware: [offset(4)],
+ }).then(({ x, y }) => {
Object.assign(this.contentTarget.style, {
left: `${x}px`,
top: `${y}px`,
@@ -129,7 +144,10 @@ export default class extends Controller {
const currentItem = this.itemTargets[currentIndex];
currentItem.focus({ preventScroll: true });
currentItem.setAttribute("aria-current", "true");
- this.triggerTarget.setAttribute("aria-activedescendant", currentItem.getAttribute("id"));
+ this.triggerTarget.setAttribute(
+ "aria-activedescendant",
+ currentItem.getAttribute("id"),
+ );
}
closeContent() {
diff --git a/lib/rbui/select/select_group.rb b/lib/ruby_ui/select/select_group.rb
similarity index 92%
rename from lib/rbui/select/select_group.rb
rename to lib/ruby_ui/select/select_group.rb
index bc9c7efe..e22d8d22 100644
--- a/lib/rbui/select/select_group.rb
+++ b/lib/ruby_ui/select/select_group.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectGroup < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/select/select_input.rb b/lib/ruby_ui/select/select_input.rb
similarity index 53%
rename from lib/rbui/select/select_input.rb
rename to lib/ruby_ui/select/select_input.rb
index 3f3e02d5..2a22fb81 100644
--- a/lib/rbui/select/select_input.rb
+++ b/lib/ruby_ui/select/select_input.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectInput < Base
def view_template
input(**attrs)
@@ -12,9 +12,9 @@ def default_attrs
{
class: "hidden",
data: {
- rbui__select_target: "input",
- rbui__form_field_target: "input",
- action: "change->rbui--form-field#onChange invalid->rbui--form-field#onInvalid"
+ ruby_ui__select_target: "input",
+ ruby_ui__form_field_target: "input",
+ action: "change->ruby_ui--form-field#onChange invalid->ruby_ui--form-field#onInvalid"
}
}
end
diff --git a/lib/rbui/select/select_item.rb b/lib/ruby_ui/select/select_item.rb
similarity index 80%
rename from lib/rbui/select/select_item.rb
rename to lib/ruby_ui/select/select_item.rb
index fb8c6a34..fa49bbe8 100644
--- a/lib/rbui/select/select_item.rb
+++ b/lib/ruby_ui/select/select_item.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectItem < Base
def initialize(value: nil, **attrs)
@value = value
@@ -39,9 +39,9 @@ def default_attrs
tabindex: "0",
class: "item group relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
data: {
- controller: "rbui--select-item",
- action: "click->rbui--select#selectItem keydown.enter->rbui--select#selectItem keydown.down->rbui--select#handleKeyDown keydown.up->rbui--select#handleKeyUp keydown.esc->rbui--select#handleEsc",
- rbui__select_target: "item"
+ controller: "ruby_ui--select-item",
+ action: "click->ruby_ui--select#selectItem keydown.enter->ruby_ui--select#selectItem keydown.down->ruby_ui--select#handleKeyDown keydown.up->ruby_ui--select#handleKeyUp keydown.esc->ruby_ui--select#handleEsc",
+ ruby_ui__select_target: "item"
},
data_value: @value,
data_orientation: "vertical",
diff --git a/lib/rbui/select/select_item_controller.js b/lib/ruby_ui/select/select_item_controller.js
similarity index 100%
rename from lib/rbui/select/select_item_controller.js
rename to lib/ruby_ui/select/select_item_controller.js
diff --git a/lib/rbui/select/select_label.rb b/lib/ruby_ui/select/select_label.rb
similarity index 94%
rename from lib/rbui/select/select_label.rb
rename to lib/ruby_ui/select/select_label.rb
index 7f1029bc..99feee83 100644
--- a/lib/rbui/select/select_label.rb
+++ b/lib/ruby_ui/select/select_label.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectLabel < Base
def view_template(&)
h3(**attrs, &)
diff --git a/lib/rbui/select/select_trigger.rb b/lib/ruby_ui/select/select_trigger.rb
similarity index 92%
rename from lib/rbui/select/select_trigger.rb
rename to lib/ruby_ui/select/select_trigger.rb
index e3b16fa5..549775e2 100644
--- a/lib/rbui/select/select_trigger.rb
+++ b/lib/ruby_ui/select/select_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectTrigger < Base
def view_template(&block)
button(**attrs) do
@@ -34,8 +34,8 @@ def icon
def default_attrs
{
data: {
- action: "rbui--select#onClick",
- rbui__select_target: "trigger"
+ action: "ruby_ui--select#onClick",
+ ruby_ui__select_target: "trigger"
},
type: "button",
role: "combobox",
diff --git a/lib/rbui/select/select_value.rb b/lib/ruby_ui/select/select_value.rb
similarity index 88%
rename from lib/rbui/select/select_value.rb
rename to lib/ruby_ui/select/select_value.rb
index dbae3c00..0ca8d02d 100644
--- a/lib/rbui/select/select_value.rb
+++ b/lib/ruby_ui/select/select_value.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SelectValue < Base
def initialize(placeholder: nil, **attrs)
@placeholder = placeholder
@@ -18,7 +18,7 @@ def view_template(&block)
def default_attrs
{
data: {
- rbui__select_target: "value"
+ ruby_ui__select_target: "value"
},
class: "pointer-events-none"
}
diff --git a/lib/rbui/sheet/sheet.rb b/lib/ruby_ui/sheet/sheet.rb
similarity index 75%
rename from lib/rbui/sheet/sheet.rb
rename to lib/ruby_ui/sheet/sheet.rb
index 6d0c50f4..cae400bc 100644
--- a/lib/rbui/sheet/sheet.rb
+++ b/lib/ruby_ui/sheet/sheet.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Sheet < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {controller: "rbui--sheet"}
+ data: {controller: "ruby_ui--sheet"}
}
end
end
diff --git a/lib/rbui/sheet/sheet_content.rb b/lib/ruby_ui/sheet/sheet_content.rb
similarity index 91%
rename from lib/rbui/sheet/sheet_content.rb
rename to lib/ruby_ui/sheet/sheet_content.rb
index 680b706c..440b70b6 100644
--- a/lib/rbui/sheet/sheet_content.rb
+++ b/lib/ruby_ui/sheet/sheet_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetContent < Base
SIDE_CLASS = {
top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
@@ -16,8 +16,8 @@ def initialize(side: :right, **attrs)
end
def view_template(&block)
- all_template_tag(data: {rbui__sheet_target: "content"}) do
- div(data: {controller: "rbui--sheet-content"}) do
+ all_template_tag(data: {ruby_ui__sheet_target: "content"}) do
+ div(data: {controller: "ruby_ui--sheet-content"}) do
backdrop
div(**attrs) do
block&.call
@@ -43,7 +43,7 @@ def close_button
button(
type: "button",
class: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
- data_action: "click->rbui--sheet-content#close"
+ data_action: "click->ruby_ui--sheet-content#close"
) do
svg(
width: "15",
@@ -68,7 +68,7 @@ def close_button
def backdrop
div(
data_state: "open",
- data_action: "click->rbui--sheet-content#close",
+ data_action: "click->ruby_ui--sheet-content#close",
class:
"fixed pointer-events-auto inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
)
diff --git a/lib/rbui/sheet/sheet_content_controller.js b/lib/ruby_ui/sheet/sheet_content_controller.js
similarity index 100%
rename from lib/rbui/sheet/sheet_content_controller.js
rename to lib/ruby_ui/sheet/sheet_content_controller.js
diff --git a/lib/rbui/sheet/sheet_controller.js b/lib/ruby_ui/sheet/sheet_controller.js
similarity index 100%
rename from lib/rbui/sheet/sheet_controller.js
rename to lib/ruby_ui/sheet/sheet_controller.js
diff --git a/lib/rbui/sheet/sheet_description.rb b/lib/ruby_ui/sheet/sheet_description.rb
similarity index 94%
rename from lib/rbui/sheet/sheet_description.rb
rename to lib/ruby_ui/sheet/sheet_description.rb
index bc127aa6..1edc1459 100644
--- a/lib/rbui/sheet/sheet_description.rb
+++ b/lib/ruby_ui/sheet/sheet_description.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetDescription < Base
def view_template(&)
p(**attrs, &)
diff --git a/lib/rbui/sheet/sheet_footer.rb b/lib/ruby_ui/sheet/sheet_footer.rb
similarity index 95%
rename from lib/rbui/sheet/sheet_footer.rb
rename to lib/ruby_ui/sheet/sheet_footer.rb
index 2ed204b3..36cc4ded 100644
--- a/lib/rbui/sheet/sheet_footer.rb
+++ b/lib/ruby_ui/sheet/sheet_footer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetFooter < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/sheet/sheet_header.rb b/lib/ruby_ui/sheet/sheet_header.rb
similarity index 94%
rename from lib/rbui/sheet/sheet_header.rb
rename to lib/ruby_ui/sheet/sheet_header.rb
index ddcee85f..08626ee3 100644
--- a/lib/rbui/sheet/sheet_header.rb
+++ b/lib/ruby_ui/sheet/sheet_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetHeader < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/sheet/sheet_middle.rb b/lib/ruby_ui/sheet/sheet_middle.rb
similarity index 93%
rename from lib/rbui/sheet/sheet_middle.rb
rename to lib/ruby_ui/sheet/sheet_middle.rb
index 58c2ae78..10648ab6 100644
--- a/lib/rbui/sheet/sheet_middle.rb
+++ b/lib/ruby_ui/sheet/sheet_middle.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetMiddle < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/sheet/sheet_title.rb b/lib/ruby_ui/sheet/sheet_title.rb
similarity index 94%
rename from lib/rbui/sheet/sheet_title.rb
rename to lib/ruby_ui/sheet/sheet_title.rb
index 57b866a4..891a29b0 100644
--- a/lib/rbui/sheet/sheet_title.rb
+++ b/lib/ruby_ui/sheet/sheet_title.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetTitle < Base
def view_template(&)
h3(**attrs, &)
diff --git a/lib/rbui/sheet/sheet_trigger.rb b/lib/ruby_ui/sheet/sheet_trigger.rb
similarity index 73%
rename from lib/rbui/sheet/sheet_trigger.rb
rename to lib/ruby_ui/sheet/sheet_trigger.rb
index f93970cb..32419ae2 100644
--- a/lib/rbui/sheet/sheet_trigger.rb
+++ b/lib/ruby_ui/sheet/sheet_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class SheetTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {action: "click->rbui--sheet#open"}
+ data: {action: "click->ruby_ui--sheet#open"}
}
end
end
diff --git a/lib/rbui/shortcut_key/shortcut_key.rb b/lib/ruby_ui/shortcut_key/shortcut_key.rb
similarity index 96%
rename from lib/rbui/shortcut_key/shortcut_key.rb
rename to lib/ruby_ui/shortcut_key/shortcut_key.rb
index 0d3e4e93..257d42ad 100644
--- a/lib/rbui/shortcut_key/shortcut_key.rb
+++ b/lib/ruby_ui/shortcut_key/shortcut_key.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ShortcutKey < Base
def view_template(&)
kbd(**attrs, &)
diff --git a/lib/rbui/table/table.rb b/lib/ruby_ui/table/table.rb
similarity index 95%
rename from lib/rbui/table/table.rb
rename to lib/ruby_ui/table/table.rb
index aa1cbbd1..d3f2c373 100644
--- a/lib/rbui/table/table.rb
+++ b/lib/ruby_ui/table/table.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Table < Base
def view_template(&block)
div(class: "relative w-full overflow-auto") do
diff --git a/lib/rbui/table/table_body.rb b/lib/ruby_ui/table/table_body.rb
similarity index 94%
rename from lib/rbui/table/table_body.rb
rename to lib/ruby_ui/table/table_body.rb
index eb67515b..84891e20 100644
--- a/lib/rbui/table/table_body.rb
+++ b/lib/ruby_ui/table/table_body.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableBody < Base
def view_template(&)
tbody(**attrs, &)
diff --git a/lib/rbui/table/table_caption.rb b/lib/ruby_ui/table/table_caption.rb
similarity index 94%
rename from lib/rbui/table/table_caption.rb
rename to lib/ruby_ui/table/table_caption.rb
index 538b4b16..21335a8b 100644
--- a/lib/rbui/table/table_caption.rb
+++ b/lib/ruby_ui/table/table_caption.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableCaption < Base
def view_template(&)
caption(**attrs, &)
diff --git a/lib/rbui/table/table_cell.rb b/lib/ruby_ui/table/table_cell.rb
similarity index 95%
rename from lib/rbui/table/table_cell.rb
rename to lib/ruby_ui/table/table_cell.rb
index a51877ea..6d7e3539 100644
--- a/lib/rbui/table/table_cell.rb
+++ b/lib/ruby_ui/table/table_cell.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableCell < Base
def view_template(&)
td(**attrs, &)
diff --git a/lib/rbui/table/table_footer.rb b/lib/ruby_ui/table/table_footer.rb
similarity index 95%
rename from lib/rbui/table/table_footer.rb
rename to lib/ruby_ui/table/table_footer.rb
index 8f7cd1f3..156d7683 100644
--- a/lib/rbui/table/table_footer.rb
+++ b/lib/ruby_ui/table/table_footer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableFooter < Base
def view_template(&)
tfoot(**attrs, &)
diff --git a/lib/rbui/table/table_head.rb b/lib/ruby_ui/table/table_head.rb
similarity index 95%
rename from lib/rbui/table/table_head.rb
rename to lib/ruby_ui/table/table_head.rb
index 83b9ae1e..c0c8d0e4 100644
--- a/lib/rbui/table/table_head.rb
+++ b/lib/ruby_ui/table/table_head.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableHead < Base
def view_template(&)
th(**attrs, &)
diff --git a/lib/rbui/table/table_header.rb b/lib/ruby_ui/table/table_header.rb
similarity index 93%
rename from lib/rbui/table/table_header.rb
rename to lib/ruby_ui/table/table_header.rb
index 32b868c8..5d632e8c 100644
--- a/lib/rbui/table/table_header.rb
+++ b/lib/ruby_ui/table/table_header.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableHeader < Base
def view_template(&)
thead(**attrs, &)
diff --git a/lib/rbui/table/table_row.rb b/lib/ruby_ui/table/table_row.rb
similarity index 95%
rename from lib/rbui/table/table_row.rb
rename to lib/ruby_ui/table/table_row.rb
index c50dfcb2..4b451df7 100644
--- a/lib/rbui/table/table_row.rb
+++ b/lib/ruby_ui/table/table_row.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TableRow < Base
def view_template(&)
tr(**attrs, &)
diff --git a/lib/rbui/tabs/tabs.rb b/lib/ruby_ui/tabs/tabs.rb
similarity index 74%
rename from lib/rbui/tabs/tabs.rb
rename to lib/ruby_ui/tabs/tabs.rb
index 4d67f8d2..37e37adf 100644
--- a/lib/rbui/tabs/tabs.rb
+++ b/lib/ruby_ui/tabs/tabs.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Tabs < Base
def initialize(default: nil, **attrs)
@default = default
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--tabs",
- rbui__tabs_active_value: @default
+ controller: "ruby_ui--tabs",
+ ruby_ui__tabs_active_value: @default
}
}
end
diff --git a/lib/rbui/tabs/tabs_content.rb b/lib/ruby_ui/tabs/tabs_content.rb
similarity index 89%
rename from lib/rbui/tabs/tabs_content.rb
rename to lib/ruby_ui/tabs/tabs_content.rb
index 5c7055f2..c27b7072 100644
--- a/lib/rbui/tabs/tabs_content.rb
+++ b/lib/ruby_ui/tabs/tabs_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TabsContent < Base
def initialize(value:, **attrs)
@value = value
@@ -16,7 +16,7 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__tabs_target: :content,
+ ruby_ui__tabs_target: :content,
value: @value
},
class: "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hidden"
diff --git a/lib/ruby_ui/tabs/tabs_controller.js b/lib/ruby_ui/tabs/tabs_controller.js
new file mode 100644
index 00000000..995df447
--- /dev/null
+++ b/lib/ruby_ui/tabs/tabs_controller.js
@@ -0,0 +1,45 @@
+import { Controller } from "@hotwired/stimulus";
+
+// Connects to data-controller="ruby_ui--tabs"
+export default class extends Controller {
+ static targets = ["trigger", "content"];
+ static values = { active: String };
+
+ connect() {
+ if (!this.hasActiveValue && this.triggerTargets.length > 0) {
+ this.activeValue = this.triggerTargets[0].dataset.value;
+ }
+ }
+
+ show(e) {
+ this.activeValue = e.currentTarget.dataset.value;
+ }
+
+ activeValueChanged(currentValue, previousValue) {
+ if (currentValue == "" || currentValue == previousValue) return;
+
+ this.contentTargets.forEach((el) => {
+ el.classList.add("hidden");
+ });
+
+ this.triggerTargets.forEach((el) => {
+ el.dataset.state = "inactive";
+ });
+
+ this.activeContentTarget() &&
+ this.activeContentTarget().classList.remove("hidden");
+ this.activeTriggerTarget().dataset.state = "active";
+ }
+
+ activeTriggerTarget() {
+ return this.triggerTargets.find(
+ (el) => el.dataset.value == this.activeValue,
+ );
+ }
+
+ activeContentTarget() {
+ return this.contentTargets.find(
+ (el) => el.dataset.value == this.activeValue,
+ );
+ }
+}
diff --git a/lib/rbui/tabs/tabs_list.rb b/lib/ruby_ui/tabs/tabs_list.rb
similarity index 95%
rename from lib/rbui/tabs/tabs_list.rb
rename to lib/ruby_ui/tabs/tabs_list.rb
index aa31adc2..650e00c0 100644
--- a/lib/rbui/tabs/tabs_list.rb
+++ b/lib/ruby_ui/tabs/tabs_list.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TabsList < Base
def view_template(&)
div(**attrs, &)
diff --git a/lib/rbui/tabs/tabs_trigger.rb b/lib/ruby_ui/tabs/tabs_trigger.rb
similarity index 87%
rename from lib/rbui/tabs/tabs_trigger.rb
rename to lib/ruby_ui/tabs/tabs_trigger.rb
index eac6b0df..64ddd904 100644
--- a/lib/rbui/tabs/tabs_trigger.rb
+++ b/lib/ruby_ui/tabs/tabs_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TabsTrigger < Base
def initialize(value:, **attrs)
@value = value
@@ -17,8 +17,8 @@ def default_attrs
{
type: :button,
data: {
- rbui__tabs_target: "trigger",
- action: "click->rbui--tabs#show",
+ ruby_ui__tabs_target: "trigger",
+ action: "click->ruby_ui--tabs#show",
value: @value
},
class: "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow"
diff --git a/lib/rbui/textarea/textarea.rb b/lib/ruby_ui/textarea/textarea.rb
similarity index 80%
rename from lib/rbui/textarea/textarea.rb
rename to lib/ruby_ui/textarea/textarea.rb
index 5600aabe..3fa2ef13 100644
--- a/lib/rbui/textarea/textarea.rb
+++ b/lib/ruby_ui/textarea/textarea.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Textarea < Base
def initialize(rows: 4, **attrs)
@rows = rows
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- rbui__form_field_target: "input",
- action: "input->rbui--form-field#onInput invalid->rbui--form-field#onInvalid"
+ ruby_ui__form_field_target: "input",
+ action: "input->ruby_ui--form-field#onInput invalid->ruby_ui--form-field#onInvalid"
},
class: "flex w-full rounded-md border bg-background px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50 border-border focus-visible:ring-ring placeholder:text-muted-foreground"
}
diff --git a/lib/rbui/theme_toggle/theme_toggle.rb b/lib/ruby_ui/theme_toggle/theme_toggle.rb
similarity index 75%
rename from lib/rbui/theme_toggle/theme_toggle.rb
rename to lib/ruby_ui/theme_toggle/theme_toggle.rb
index 3a14041c..a3a4b15f 100644
--- a/lib/rbui/theme_toggle/theme_toggle.rb
+++ b/lib/ruby_ui/theme_toggle/theme_toggle.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class ThemeToggle < Base
def view_template(&)
div(**attrs, &)
@@ -20,21 +20,21 @@ def dark_mode(**user_attrs, &)
def default_attrs
{
- data: {controller: "rbui--theme-toggle"}
+ data: {controller: "ruby_ui--theme-toggle"}
}
end
def default_light_attrs
{
class: "dark:hidden",
- data: {action: "click->rbui--theme-toggle#setDarkTheme"}
+ data: {action: "click->ruby_ui--theme-toggle#setDarkTheme"}
}
end
def default_dark_attrs
{
class: "hidden dark:inline-block",
- data: {action: "click->rbui--theme-toggle#setLightTheme"}
+ data: {action: "click->ruby_ui--theme-toggle#setLightTheme"}
}
end
end
diff --git a/lib/rbui/theme_toggle/theme_toggle_controller.js b/lib/ruby_ui/theme_toggle/theme_toggle_controller.js
similarity index 100%
rename from lib/rbui/theme_toggle/theme_toggle_controller.js
rename to lib/ruby_ui/theme_toggle/theme_toggle_controller.js
diff --git a/lib/rbui/tooltip/tooltip.rb b/lib/ruby_ui/tooltip/tooltip.rb
similarity index 75%
rename from lib/rbui/tooltip/tooltip.rb
rename to lib/ruby_ui/tooltip/tooltip.rb
index 74e21677..83de01cd 100644
--- a/lib/rbui/tooltip/tooltip.rb
+++ b/lib/ruby_ui/tooltip/tooltip.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Tooltip < Base
def initialize(placement: "top", **attrs)
@placement = placement
@@ -16,8 +16,8 @@ def view_template(&)
def default_attrs
{
data: {
- controller: "rbui--tooltip",
- rbui__tooltip_placement_value: @placement
+ controller: "ruby_ui--tooltip",
+ ruby_ui__tooltip_placement_value: @placement
},
class: "group"
}
diff --git a/lib/rbui/tooltip/tooltip_content.rb b/lib/ruby_ui/tooltip/tooltip_content.rb
similarity index 61%
rename from lib/rbui/tooltip/tooltip_content.rb
rename to lib/ruby_ui/tooltip/tooltip_content.rb
index 0cfe4377..6cdc0353 100644
--- a/lib/rbui/tooltip/tooltip_content.rb
+++ b/lib/ruby_ui/tooltip/tooltip_content.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TooltipContent < Base
def initialize(**attrs)
@id = "tooltip#{SecureRandom.hex(4)}"
@@ -17,9 +17,9 @@ def default_attrs
{
id: @id,
data: {
- rbui__tooltip_target: "content"
+ ruby_ui__tooltip_target: "content"
},
- class: "invisible peer-hover:visible peer-focus:visible w-max absolute top-0 left-0 z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md peer-focus:zoom-in-95 animate-out fade-out-0 zoom-out-95 peer-hover:animate-in peer-focus:animate-in peer-hover:fade-in-0 peer-focus:fade-in-0 peer-hover:zoom-in-95 group-data-[rbui--tooltip-placement-value=bottom]:slide-in-from-top-2 group-data-[rbui--tooltip-placement-value=left]:slide-in-from-right-2 group-data-[rbui--tooltip-placement-value=right]:slide-in-from-left-2 group-data-[rbui--tooltip-placement-value=top]:slide-in-from-bottom-2 delay-500"
+ class: "invisible peer-hover:visible peer-focus:visible w-max absolute top-0 left-0 z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md peer-focus:zoom-in-95 animate-out fade-out-0 zoom-out-95 peer-hover:animate-in peer-focus:animate-in peer-hover:fade-in-0 peer-focus:fade-in-0 peer-hover:zoom-in-95 group-data-[ruby_ui--tooltip-placement-value=bottom]:slide-in-from-top-2 group-data-[ruby_ui--tooltip-placement-value=left]:slide-in-from-right-2 group-data-[ruby_ui--tooltip-placement-value=right]:slide-in-from-left-2 group-data-[ruby_ui--tooltip-placement-value=top]:slide-in-from-bottom-2 delay-500"
}
end
end
diff --git a/lib/rbui/tooltip/tooltip_controller.js b/lib/ruby_ui/tooltip/tooltip_controller.js
similarity index 100%
rename from lib/rbui/tooltip/tooltip_controller.js
rename to lib/ruby_ui/tooltip/tooltip_controller.js
diff --git a/lib/rbui/tooltip/tooltip_trigger.rb b/lib/ruby_ui/tooltip/tooltip_trigger.rb
similarity index 78%
rename from lib/rbui/tooltip/tooltip_trigger.rb
rename to lib/ruby_ui/tooltip/tooltip_trigger.rb
index 6be872cb..a535e942 100644
--- a/lib/rbui/tooltip/tooltip_trigger.rb
+++ b/lib/ruby_ui/tooltip/tooltip_trigger.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TooltipTrigger < Base
def view_template(&)
div(**attrs, &)
@@ -10,7 +10,7 @@ def view_template(&)
def default_attrs
{
- data: {rbui__tooltip_target: "trigger"},
+ data: {ruby_ui__tooltip_target: "trigger"},
variant: :outline,
class: "peer"
}
diff --git a/lib/rbui/typography/heading.rb b/lib/ruby_ui/typography/heading.rb
similarity index 98%
rename from lib/rbui/typography/heading.rb
rename to lib/ruby_ui/typography/heading.rb
index 30a1dabe..bd883c0f 100644
--- a/lib/rbui/typography/heading.rb
+++ b/lib/ruby_ui/typography/heading.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Heading < Base
def initialize(level: nil, as: nil, size: nil, **attrs)
@level = level
diff --git a/lib/rbui/typography/inline_code.rb b/lib/ruby_ui/typography/inline_code.rb
similarity index 95%
rename from lib/rbui/typography/inline_code.rb
rename to lib/ruby_ui/typography/inline_code.rb
index 277dc443..539c9617 100644
--- a/lib/rbui/typography/inline_code.rb
+++ b/lib/ruby_ui/typography/inline_code.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class InlineCode < Base
def view_template(&)
code(**attrs, &)
diff --git a/lib/rbui/typography/inline_link.rb b/lib/ruby_ui/typography/inline_link.rb
similarity index 96%
rename from lib/rbui/typography/inline_link.rb
rename to lib/ruby_ui/typography/inline_link.rb
index 02332273..07929dd1 100644
--- a/lib/rbui/typography/inline_link.rb
+++ b/lib/ruby_ui/typography/inline_link.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class InlineLink < Base
def initialize(href:, **attrs)
super(**attrs)
diff --git a/lib/rbui/typography/text.rb b/lib/ruby_ui/typography/text.rb
similarity index 98%
rename from lib/rbui/typography/text.rb
rename to lib/ruby_ui/typography/text.rb
index 71848699..b3945936 100644
--- a/lib/rbui/typography/text.rb
+++ b/lib/ruby_ui/typography/text.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class Text < Base
def initialize(as: "p", size: "3", weight: "regular", **attrs)
@as = as
diff --git a/lib/rbui/typography/typography_blockquote.rb b/lib/ruby_ui/typography/typography_blockquote.rb
similarity index 94%
rename from lib/rbui/typography/typography_blockquote.rb
rename to lib/ruby_ui/typography/typography_blockquote.rb
index fd93b320..b4d4e843 100644
--- a/lib/rbui/typography/typography_blockquote.rb
+++ b/lib/ruby_ui/typography/typography_blockquote.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
class TypographyBlockquote < Base
def view_template(&)
blockquote(**attrs, &)
diff --git a/lib/rbui/version.rb b/lib/ruby_ui/version.rb
similarity index 81%
rename from lib/rbui/version.rb
rename to lib/ruby_ui/version.rb
index ce71ba2b..8b278664 100644
--- a/lib/rbui/version.rb
+++ b/lib/ruby_ui/version.rb
@@ -1,5 +1,5 @@
# frozen_string_literal: true
-module RBUI
+module RubyUI
VERSION = "1.0.0-alpha.4"
end
diff --git a/package.json b/package.json
index 01e37a0e..95b2236f 100644
--- a/package.json
+++ b/package.json
@@ -1,14 +1,14 @@
{
"name": "ruby_ui_js",
"version": "1.0.0-alpha.4",
- "main": "lib/rbui/index.js",
- "description": "Stimulus controllers for RbUI Component Library",
- "homepage": "https://rbui.dev",
+ "main": "lib/ruby_ui/index.js",
+ "description": "Stimulus controllers for ruby_ui Component Library",
+ "homepage": "https://ruby_ui.dev",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
- "RbUI",
+ "ruby_ui",
"Stimulus",
"StimulusJS",
"StimulusControllers",
@@ -18,7 +18,7 @@
],
"repository": {
"type": "git",
- "url": "https://github.com/rbui-hq/rbui.git"
+ "url": "https://github.com/ruby_ui-hq/ruby_ui.git"
},
"author": "George Kettle",
"license": "ISC",
diff --git a/ruby_ui.gemspec b/ruby_ui.gemspec
index dc5890c5..3e3747fe 100644
--- a/ruby_ui.gemspec
+++ b/ruby_ui.gemspec
@@ -1,8 +1,8 @@
-require_relative "lib/rbui/version"
+require_relative "lib/ruby_ui/version"
Gem::Specification.new do |s|
s.name = "ruby_ui"
- s.version = RBUI::VERSION
+ s.version = RubyUI::VERSION
s.summary = "RubyUI is a UI Component Library for Ruby developers."
s.description = "Ruby UI is a UI Component Library for Ruby developers. Built on top of the Phlex Framework."
s.authors = ["George Kettle"]
diff --git a/test/rbui/alert_dialog_test.rb b/test/rbui/alert_dialog_test.rb
deleted file mode 100644
index 485ff02d..00000000
--- a/test/rbui/alert_dialog_test.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::AlertDialogTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.AlertDialog do
- RBUI.AlertDialogTrigger do
- RBUI.Button { "Show dialog" }
- end
- RBUI.AlertDialogContent do
- RBUI.AlertDialogHeader do
- RBUI.AlertDialogTitle { "Are you absolutely sure?" }
- RBUI.AlertDialogDescription { "This action cannot be undone. This will permanently delete your account and remove your data from our servers." }
- end
- RBUI.AlertDialogFooter do
- RBUI.AlertDialogCancel { "Cancel" }
- RBUI.AlertDialogAction { "Continue" }
- end
- end
- end
- end
-
- assert_match(/Show dialog/, output)
- end
-end
diff --git a/test/rbui/calendar_test.rb b/test/rbui/calendar_test.rb
deleted file mode 100644
index c5927ff7..00000000
--- a/test/rbui/calendar_test.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::CalendarTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Input(type: "string", placeholder: "Select a date", class: "rounded-md border shadow", id: "date", data_controller: "rbui--input")
- RBUI.Calendar(input_id: "#date", class: "rounded-md border shadow")
- end
-
- assert_match(/Select a date/, output)
- end
-end
diff --git a/test/rbui/card_test.rb b/test/rbui/card_test.rb
deleted file mode 100644
index 74e31b69..00000000
--- a/test/rbui/card_test.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::CardTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Card(class: "w-96") do
- RBUI.CardHeader do
- RBUI.CardTitle { 'You might like "RBUI"' }
- RBUI.CardDescription { "@joeldrapper" }
- end
- RBUI.CardContent do
- RBUI.AspectRatio(aspect_ratio: "16/9", class: "rounded-md overflow-hidden border") do |aspect_ratio|
- aspect_ratio.img(
- alt: "Placeholder",
- loading: "lazy",
- src: "https://avatars.githubusercontent.com/u/246692?v=4"
- )
- end
- end
- RBUI.CardFooter(class: "flex justify-end gap-x-2") do
- RBUI.Button(variant: :outline) { "See more" }
- RBUI.Button(variant: :primary) { "Buy now" }
- end
- end
- end
-
- assert_match(/You might like/, output)
- end
-end
diff --git a/test/rbui/combobox_test.rb b/test/rbui/combobox_test.rb
deleted file mode 100644
index d516c26f..00000000
--- a/test/rbui/combobox_test.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::ComboboxTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Combobox do
- RBUI.ComboboxInput()
- RBUI.ComboboxTrigger do
- RBUI.ComboboxValue(placeholder: "Select event...")
- end
- RBUI.ComboboxContent do
- RBUI.ComboboxSearchInput(placeholder: "Search event...")
- RBUI.ComboboxList do
- RBUI.ComboboxEmpty { "No results found." }
- RBUI.ComboboxGroup(heading: "Suggestions") do
- RBUI.ComboboxItem(value: "railsworld") do |item|
- item.span { "Rails World" }
- end
- RBUI.ComboboxItem(value: "tropicalrb") do |item|
- item.span { "Tropical.rb" }
- end
- RBUI.ComboboxItem(value: "friendly.rb") do |item|
- item.span { "Friendly.rb" }
- end
- end
-
- RBUI.ComboboxSeparator()
-
- RBUI.ComboboxGroup(heading: "Others") do
- RBUI.ComboboxItem(value: "railsconf") do |item|
- item.span { "RailsConf" }
- end
- RBUI.ComboboxItem(value: "euruko") do |item|
- item.span { "Euruko" }
- end
- RBUI.ComboboxItem(value: "rubykaigi") do |item|
- item.span { "RubyKaigi" }
- end
- end
- end
- end
- end
- end
-
- assert_match(/Tropical.rb/, output)
- end
-end
diff --git a/test/rbui/context_menu_test.rb b/test/rbui/context_menu_test.rb
deleted file mode 100644
index c510d4c6..00000000
--- a/test/rbui/context_menu_test.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::ContextMenuTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.ContextMenu do
- RBUI.ContextMenuTrigger(class: "flex h-[150px] w-[300px] items-center justify-center rounded-md border border-dashed text-sm") { "Right click here" }
- RBUI.ContextMenuContent(class: "w-64") do
- RBUI.ContextMenuItem(href: "#", shortcut: "⌘[") { "Back" }
- RBUI.ContextMenuItem(href: "#", shortcut: "⌘]", disabled: true) { "Forward" }
- RBUI.ContextMenuItem(href: "#", shortcut: "⌘R") { "Reload" }
- RBUI.ContextMenuSeparator
- RBUI.ContextMenuItem(href: "#", shortcut: "⌘⇧B", checked: true) { "Show Bookmarks Bar" }
- RBUI.ContextMenuItem(href: "#") { "Show Full URLs" }
- RBUI.ContextMenuSeparator
- RBUI.ContextMenuLabel(inset: true) { "More Tools" }
- RBUI.ContextMenuSeparator
- RBUI.ContextMenuItem(href: "#") { "Developer Tools" }
- RBUI.ContextMenuItem(href: "#") { "Task Manager" }
- RBUI.ContextMenuItem(href: "#") { "Extensions" }
- end
- end
- end
-
- assert_match(/Right click here/, output)
- end
-end
diff --git a/test/rbui/dialog_test.rb b/test/rbui/dialog_test.rb
deleted file mode 100644
index 85cf8b74..00000000
--- a/test/rbui/dialog_test.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::DialogTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Dialog do
- RBUI.DialogTrigger do
- RBUI.Button { "Open Dialog" }
- end
- RBUI.DialogContent do
- RBUI.DialogHeader do
- RBUI.DialogTitle { "RBUI to the rescue" }
- RBUI.DialogDescription { "RBUI helps you build accessible standard compliant web apps with ease" }
- end
- RBUI.DialogMiddle do
- RBUI.AspectRatio(aspect_ratio: "16/9", class: "rounded-md overflow-hidden border") do |aspect|
- aspect.img(
- alt: "Placeholder",
- loading: "lazy",
- src: "https://avatars.githubusercontent.com/u/246692?v=4"
- )
- end
- end
- RBUI.DialogFooter do
- RBUI.Button(variant: :outline, data: {action: "click->rbui--dialog#dismiss"}) { "Cancel" }
- RBUI.Button { "Save" }
- end
- end
- end
- end
-
- assert_match(/Open Dialog/, output)
- end
-end
diff --git a/test/rbui/dropdown_menu_test.rb b/test/rbui/dropdown_menu_test.rb
deleted file mode 100644
index 3eda7925..00000000
--- a/test/rbui/dropdown_menu_test.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::DropdownMenuTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.DropdownMenu do
- RBUI.DropdownMenuTrigger(class: "w-full") do
- RBUI.Button(variant: :outline) { "Open" }
- end
- RBUI.DropdownMenuContent do
- RBUI.DropdownMenuLabel { "My Account" }
- RBUI.DropdownMenuSeparator
- RBUI.DropdownMenuItem(href: "#") { "Profile" }
- RBUI.DropdownMenuItem(href: "#") { "Billing" }
- RBUI.DropdownMenuItem(href: "#") { "Team" }
- RBUI.DropdownMenuItem(href: "#") { "Subscription" }
- end
- end
- end
-
- assert_match(/Open/, output)
- end
-end
diff --git a/test/rbui/form_test.rb b/test/rbui/form_test.rb
deleted file mode 100644
index 572f88e0..00000000
--- a/test/rbui/form_test.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::FormTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Form do
- RBUI.FormField do
- RBUI.FormFieldLabel { "Label" }
- RBUI.Input(placeholder: "Joel Drapper", required: true, minlength: "3") { "Joel Drapper" }
- RBUI.FormFieldHint()
- RBUI.FormFieldError()
- end
- end
- end
-
- assert_match(/Joel/, output)
- end
-end
diff --git a/test/rbui/hover_card_test.rb b/test/rbui/hover_card_test.rb
deleted file mode 100644
index 455bfc0d..00000000
--- a/test/rbui/hover_card_test.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::HoverCardTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.HoverCard do
- RBUI.HoverCardTrigger do
- RBUI.Button(variant: :link) { "@joeldrapper" }
- end
- RBUI.HoverCardContent do |card_content|
- card_content.div(class: "flex justify-between space-x-4") do
- RBUI.Avatar do
- RBUI.AvatarImage(src: "https://avatars.githubusercontent.com/u/246692?v=4", alt: "joeldrapper")
- RBUI.AvatarFallback { "JD" }
- end
- end
- end
- end
- end
-
- assert_match(/joeldrapper/, output)
- end
-end
diff --git a/test/rbui/pagination_test.rb b/test/rbui/pagination_test.rb
deleted file mode 100644
index 68974e52..00000000
--- a/test/rbui/pagination_test.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::PaginationTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Pagination do
- RBUI.PaginationContent do
- RBUI.PaginationItem(href: "#") do |item|
- item.plain "First"
- end
- RBUI.PaginationItem(href: "#") do |item|
- item.plain "Prev"
- end
-
- RBUI.PaginationEllipsis
-
- RBUI.PaginationItem(href: "#") { "4" }
- RBUI.PaginationItem(href: "#", active: true) { "5" }
- RBUI.PaginationItem(href: "#") { "6" }
-
- RBUI.PaginationEllipsis
-
- RBUI.PaginationItem(href: "#") do |item|
- item.plain "Next"
- end
- RBUI.PaginationItem(href: "#") do |item|
- item.plain "Last"
- end
- end
- end
- end
-
- assert_match(/First/, output)
- end
-end
diff --git a/test/rbui/popover_test.rb b/test/rbui/popover_test.rb
deleted file mode 100644
index 610a1c3a..00000000
--- a/test/rbui/popover_test.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::PopoverTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Popover do
- RBUI.PopoverTrigger(class: "w-full") do
- RBUI.Button(variant: :outline) { "Open Popover" }
- end
- RBUI.PopoverContent(class: "w-40") do
- RBUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
- link.plain "Profile"
- end
- RBUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
- link.plain "Settings"
- end
- RBUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
- link.plain "Logout"
- end
- end
- end
- end
-
- assert_match(/Profile/, output)
- end
-end
diff --git a/test/rbui/setup_test.rb b/test/rbui/setup_test.rb
deleted file mode 100644
index 8e796121..00000000
--- a/test/rbui/setup_test.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::SetupTest < Minitest::Test
- def setup
- @original_namespace = RBUI.namespace
- end
-
- def teardown
- RBUI.namespace = @original_namespace
- Object.send(:remove_const, :UI) if Object.const_defined?(:UI)
- end
-
- def test_default_namespace
- RBUI.setup {}
-
- assert_nil RBUI.namespace
- assert_kind_of RBUI::Base, RBUI::Button.new
- end
-
- def test_custom_namespace
- RBUI.setup do |config|
- config.namespace = "UI"
- end
-
- assert_equal "UI", RBUI.namespace
- assert_equal RBUI::Base, UI::Base
- assert_kind_of RBUI::Base, UI::Button.new
- end
-end
diff --git a/test/rbui/sheet_test.rb b/test/rbui/sheet_test.rb
deleted file mode 100644
index 17a3e78e..00000000
--- a/test/rbui/sheet_test.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::SheetTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Sheet do
- RBUI.SheetTrigger do
- RBUI.Button(variant: :outline) { "Open Sheet" }
- end
-
- RBUI.SheetContent(class: "sm:max-w-sm") do
- RBUI.SheetHeader do
- RBUI.SheetTitle { "Edit profile" }
- RBUI.SheetDescription { "Make changes to your profile here. Click save when you're done." }
- end
- RBUI.SheetMiddle do
- RBUI.Input(placeholder: "Joel Drapper") { "Joel Drapper" }
- RBUI.Input(placeholder: "joel@drapper.me")
-
- RBUI.SheetFooter do
- RBUI.Button(variant: :outline, data: {action: "click->rbui--sheet-content#close"}) { "Cancel" }
- RBUI.Button(type: "submit") { "Save" }
- end
- end
- end
- end
- end
-
- assert_match(/Open Sheet/, output)
- end
-end
diff --git a/test/rbui/table_test.rb b/test/rbui/table_test.rb
deleted file mode 100644
index a9f9b7ae..00000000
--- a/test/rbui/table_test.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::TableTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- invoices = [
- {identifier: "INV-0001", status: "Active", method: "Credit Card", amount: 100},
- {identifier: "INV-0002", status: "Active", method: "Bank Transfer", amount: 230},
- {identifier: "INV-0003", status: "Pending", method: "PayPal", amount: 350},
- {identifier: "INV-0004", status: "Inactive", method: "Credit Card", amount: 100}
- ]
-
- output = phlex_context do
- RBUI.Table do
- RBUI.TableCaption { "Employees at Acme inc." }
- RBUI.TableHeader do
- RBUI.TableRow do
- RBUI.TableHead { "Name" }
- RBUI.TableHead { "Email" }
- RBUI.TableHead { "Status" }
- RBUI.TableHead(class: "text-right") { "Role" }
- end
- end
- RBUI.TableBody do
- invoices.each do |invoice|
- RBUI.TableRow do
- RBUI.TableCell(class: "font-medium") { invoice[:identifier] }
- RBUI.TableCell { invoice[:status] }
- RBUI.TableCell { invoice[:method] }
- RBUI.TableCell(class: "text-right") { invoice[:amount] }
- end
- end
- end
- RBUI.TableFooter do
- RBUI.TableRow do
- RBUI.TableHead(class: "font-medium", colspan: 3) { "Total" }
- RBUI.TableHead(class: "font-medium text-right") { invoices.sum { |invoice| invoice[:amount] } }
- end
- end
- end
- end
-
- assert_match(/Total/, output)
- end
-end
diff --git a/test/rbui/tabs_test.rb b/test/rbui/tabs_test.rb
deleted file mode 100644
index 4e6e4255..00000000
--- a/test/rbui/tabs_test.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-
-class RBUI::TabsTest < Minitest::Test
- include Phlex::Testing::ViewHelper
-
- def test_render_with_all_items
- output = phlex_context do
- RBUI.Tabs(default_value: "account", class: "w-96") do
- RBUI.TabsList do
- RBUI.TabsTrigger(value: "account") { "Account" }
- RBUI.TabsTrigger(value: "password") { "Password" }
- end
- RBUI.TabsContent(value: "account") do
- RBUI::Text(as: "p", size: "4") { "Account" }
- RBUI::Text(size: "5", weight: "semibold") { "Are you sure absolutely sure?" }
- RBUI::Text(size: "2", class: "text-muted-foreground") { "Update your account details." }
- end
- RBUI.TabsContent(value: "password") do
- RBUI::Text(as: "p", size: "4") { "Password" }
- RBUI::Text(size: "2", class: "text-muted-foreground") { "Change your password here. After saving, you'll be logged out." }
- end
- end
- end
-
- assert_match(/Account/, output)
- end
-end
diff --git a/test/rbui/accordion_test.rb b/test/ruby_ui/accordion_test.rb
similarity index 62%
rename from test/rbui/accordion_test.rb
rename to test/ruby_ui/accordion_test.rb
index 464caf61..38a8ac0f 100644
--- a/test/rbui/accordion_test.rb
+++ b/test/ruby_ui/accordion_test.rb
@@ -2,29 +2,29 @@
require "test_helper"
-class RBUI::AccordionTest < Minitest::Test
+class RubyUI::AccordionTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_default_items
output = phlex_context do
- RBUI.Accordion do
- RBUI.AccordionItem do
- RBUI.AccordionDefaultTrigger { "Title" }
- RBUI.AccordionDefaultContent { "Content" }
+ RubyUI.Accordion do
+ RubyUI.AccordionItem do
+ RubyUI.AccordionDefaultTrigger { "Title" }
+ RubyUI.AccordionDefaultContent { "Content" }
end
end
end
- assert_match(/ruby_ui--dialog#dismiss"}) { "Cancel" }
+ RubyUI.Button { "Save" }
+ end
+ end
+ end
+ end
+
+ assert_match(/Open Dialog/, output)
+ end
+end
diff --git a/test/ruby_ui/dropdown_menu_test.rb b/test/ruby_ui/dropdown_menu_test.rb
new file mode 100644
index 00000000..4e0df149
--- /dev/null
+++ b/test/ruby_ui/dropdown_menu_test.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::DropdownMenuTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.DropdownMenu do
+ RubyUI.DropdownMenuTrigger(class: "w-full") do
+ RubyUI.Button(variant: :outline) { "Open" }
+ end
+ RubyUI.DropdownMenuContent do
+ RubyUI.DropdownMenuLabel { "My Account" }
+ RubyUI.DropdownMenuSeparator
+ RubyUI.DropdownMenuItem(href: "#") { "Profile" }
+ RubyUI.DropdownMenuItem(href: "#") { "Billing" }
+ RubyUI.DropdownMenuItem(href: "#") { "Team" }
+ RubyUI.DropdownMenuItem(href: "#") { "Subscription" }
+ end
+ end
+ end
+
+ assert_match(/Open/, output)
+ end
+end
diff --git a/test/ruby_ui/form_test.rb b/test/ruby_ui/form_test.rb
new file mode 100644
index 00000000..33871e71
--- /dev/null
+++ b/test/ruby_ui/form_test.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::FormTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.Form do
+ RubyUI.FormField do
+ RubyUI.FormFieldLabel { "Label" }
+ RubyUI.Input(placeholder: "Joel Drapper", required: true, minlength: "3") { "Joel Drapper" }
+ RubyUI.FormFieldHint()
+ RubyUI.FormFieldError()
+ end
+ end
+ end
+
+ assert_match(/Joel/, output)
+ end
+end
diff --git a/test/ruby_ui/hover_card_test.rb b/test/ruby_ui/hover_card_test.rb
new file mode 100644
index 00000000..16bc1f14
--- /dev/null
+++ b/test/ruby_ui/hover_card_test.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::HoverCardTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.HoverCard do
+ RubyUI.HoverCardTrigger do
+ RubyUI.Button(variant: :link) { "@joeldrapper" }
+ end
+ RubyUI.HoverCardContent do |card_content|
+ card_content.div(class: "flex justify-between space-x-4") do
+ RubyUI.Avatar do
+ RubyUI.AvatarImage(src: "https://avatars.githubusercontent.com/u/246692?v=4", alt: "joeldrapper")
+ RubyUI.AvatarFallback { "JD" }
+ end
+ end
+ end
+ end
+ end
+
+ assert_match(/joeldrapper/, output)
+ end
+end
diff --git a/test/rbui/inline_code_test.rb b/test/ruby_ui/inline_code_test.rb
similarity index 79%
rename from test/rbui/inline_code_test.rb
rename to test/ruby_ui/inline_code_test.rb
index fdb50d3c..501c3330 100644
--- a/test/rbui/inline_code_test.rb
+++ b/test/ruby_ui/inline_code_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::InlineCodeTest < Minitest::Test
+class RubyUI::InlineCodeTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_inline_code
output = phlex_context do
- RBUI::InlineCode() { "This is an inline code block" }
+ RubyUI::InlineCode() { "This is an inline code block" }
end
assert_match("This is an inline code block", output)
diff --git a/test/rbui/inline_link_test.rb b/test/ruby_ui/inline_link_test.rb
similarity index 79%
rename from test/rbui/inline_link_test.rb
rename to test/ruby_ui/inline_link_test.rb
index 2340a391..6f646fda 100644
--- a/test/rbui/inline_link_test.rb
+++ b/test/ruby_ui/inline_link_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::InlineLinkTest < Minitest::Test
+class RubyUI::InlineLinkTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_inline_link
output = phlex_context do
- RBUI::InlineLink(href: "#") { "Link" }
+ RubyUI::InlineLink(href: "#") { "Link" }
end
assert_match(/Link/, output)
diff --git a/test/rbui/input_test.rb b/test/ruby_ui/input_test.rb
similarity index 67%
rename from test/rbui/input_test.rb
rename to test/ruby_ui/input_test.rb
index 3380e9b7..7f6d48e8 100644
--- a/test/rbui/input_test.rb
+++ b/test/ruby_ui/input_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::InputTest < Minitest::Test
+class RubyUI::InputTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.Input(type: "email", placeholder: "Email")
+ RubyUI.Input(type: "email", placeholder: "Email")
end
assert_match(/Email/, output)
@@ -15,7 +15,7 @@ def test_render_with_all_items
def test_render_with_value
output = phlex_context do
- RBUI.Input(type: "email", value: "user@email.com")
+ RubyUI.Input(type: "email", value: "user@email.com")
end
assert_match(/user@email.com/, output)
diff --git a/test/rbui/link_test.rb b/test/ruby_ui/link_test.rb
similarity index 72%
rename from test/rbui/link_test.rb
rename to test/ruby_ui/link_test.rb
index 53faa885..85b2e6aa 100644
--- a/test/rbui/link_test.rb
+++ b/test/ruby_ui/link_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::LinkTest < Minitest::Test
+class RubyUI::LinkTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.Link(href: "#") { "Link" }
+ RubyUI.Link(href: "#") { "Link" }
end
assert_match(/Link/, output)
diff --git a/test/ruby_ui/pagination_test.rb b/test/ruby_ui/pagination_test.rb
new file mode 100644
index 00000000..036c2c95
--- /dev/null
+++ b/test/ruby_ui/pagination_test.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::PaginationTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.Pagination do
+ RubyUI.PaginationContent do
+ RubyUI.PaginationItem(href: "#") do |item|
+ item.plain "First"
+ end
+ RubyUI.PaginationItem(href: "#") do |item|
+ item.plain "Prev"
+ end
+
+ RubyUI.PaginationEllipsis
+
+ RubyUI.PaginationItem(href: "#") { "4" }
+ RubyUI.PaginationItem(href: "#", active: true) { "5" }
+ RubyUI.PaginationItem(href: "#") { "6" }
+
+ RubyUI.PaginationEllipsis
+
+ RubyUI.PaginationItem(href: "#") do |item|
+ item.plain "Next"
+ end
+ RubyUI.PaginationItem(href: "#") do |item|
+ item.plain "Last"
+ end
+ end
+ end
+ end
+
+ assert_match(/First/, output)
+ end
+end
diff --git a/test/ruby_ui/popover_test.rb b/test/ruby_ui/popover_test.rb
new file mode 100644
index 00000000..4baccc9e
--- /dev/null
+++ b/test/ruby_ui/popover_test.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::PopoverTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.Popover do
+ RubyUI.PopoverTrigger(class: "w-full") do
+ RubyUI.Button(variant: :outline) { "Open Popover" }
+ end
+ RubyUI.PopoverContent(class: "w-40") do
+ RubyUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
+ link.plain "Profile"
+ end
+ RubyUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
+ link.plain "Settings"
+ end
+ RubyUI.Link(href: "#", variant: :ghost, class: "block w-full justify-start pl-2") do |link|
+ link.plain "Logout"
+ end
+ end
+ end
+ end
+
+ assert_match(/Profile/, output)
+ end
+end
diff --git a/test/rbui/select_test.rb b/test/ruby_ui/select_test.rb
similarity index 56%
rename from test/rbui/select_test.rb
rename to test/ruby_ui/select_test.rb
index 6ebbf5a7..14e223ab 100644
--- a/test/rbui/select_test.rb
+++ b/test/ruby_ui/select_test.rb
@@ -2,7 +2,7 @@
require "test_helper"
-class RBUI::SelectTest < Minitest::Test
+class RubyUI::SelectTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
@@ -13,15 +13,15 @@ def test_render_with_all_items
]
output = phlex_context do
- RBUI.Select do
- RBUI.SelectInput(name: "NAME")
- RBUI.SelectTrigger do
- RBUI.SelectValue(placeholder: "Placeholder")
+ RubyUI.Select do
+ RubyUI.SelectInput(name: "NAME")
+ RubyUI.SelectTrigger do
+ RubyUI.SelectValue(placeholder: "Placeholder")
end
- RBUI.SelectContent(outlet_id: "1") do
- RBUI.SelectGroup do
+ RubyUI.SelectContent(outlet_id: "1") do
+ RubyUI.SelectGroup do
people.each do |person|
- RBUI.SelectItem(value: person[1]) { person[0] }
+ RubyUI.SelectItem(value: person[1]) { person[0] }
end
end
end
diff --git a/test/ruby_ui/setup_test.rb b/test/ruby_ui/setup_test.rb
new file mode 100644
index 00000000..76f0a59d
--- /dev/null
+++ b/test/ruby_ui/setup_test.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::SetupTest < Minitest::Test
+ def setup
+ @original_namespace = RubyUI.namespace
+ end
+
+ def teardown
+ RubyUI.namespace = @original_namespace
+ Object.send(:remove_const, :UI) if Object.const_defined?(:UI)
+ end
+
+ def test_default_namespace
+ RubyUI.setup {}
+
+ assert_nil RubyUI.namespace
+ assert_kind_of RubyUI::Base, RubyUI::Button.new
+ end
+
+ def test_custom_namespace
+ RubyUI.setup do |config|
+ config.namespace = "UI"
+ end
+
+ assert_equal "UI", RubyUI.namespace
+ assert_equal RubyUI::Base, UI::Base
+ assert_kind_of RubyUI::Base, UI::Button.new
+ end
+end
diff --git a/test/ruby_ui/sheet_test.rb b/test/ruby_ui/sheet_test.rb
new file mode 100644
index 00000000..8d66e109
--- /dev/null
+++ b/test/ruby_ui/sheet_test.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::SheetTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.Sheet do
+ RubyUI.SheetTrigger do
+ RubyUI.Button(variant: :outline) { "Open Sheet" }
+ end
+
+ RubyUI.SheetContent(class: "sm:max-w-sm") do
+ RubyUI.SheetHeader do
+ RubyUI.SheetTitle { "Edit profile" }
+ RubyUI.SheetDescription { "Make changes to your profile here. Click save when you're done." }
+ end
+ RubyUI.SheetMiddle do
+ RubyUI.Input(placeholder: "Joel Drapper") { "Joel Drapper" }
+ RubyUI.Input(placeholder: "joel@drapper.me")
+
+ RubyUI.SheetFooter do
+ RubyUI.Button(variant: :outline, data: {action: "click->ruby_ui--sheet-content#close"}) { "Cancel" }
+ RubyUI.Button(type: "submit") { "Save" }
+ end
+ end
+ end
+ end
+ end
+
+ assert_match(/Open Sheet/, output)
+ end
+end
diff --git a/test/rbui/shortcut_key_test.rb b/test/ruby_ui/shortcut_key_test.rb
similarity index 77%
rename from test/rbui/shortcut_key_test.rb
rename to test/ruby_ui/shortcut_key_test.rb
index ffbafbf9..55b12262 100644
--- a/test/rbui/shortcut_key_test.rb
+++ b/test/ruby_ui/shortcut_key_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::ShortcutKeyTest < Minitest::Test
+class RubyUI::ShortcutKeyTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.ShortcutKey do |shortcut|
+ RubyUI.ShortcutKey do |shortcut|
shortcut.span(class: "text-xs") { "⌘" }
shortcut.plain "K"
end
diff --git a/test/ruby_ui/table_test.rb b/test/ruby_ui/table_test.rb
new file mode 100644
index 00000000..3983f28d
--- /dev/null
+++ b/test/ruby_ui/table_test.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::TableTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ invoices = [
+ {identifier: "INV-0001", status: "Active", method: "Credit Card", amount: 100},
+ {identifier: "INV-0002", status: "Active", method: "Bank Transfer", amount: 230},
+ {identifier: "INV-0003", status: "Pending", method: "PayPal", amount: 350},
+ {identifier: "INV-0004", status: "Inactive", method: "Credit Card", amount: 100}
+ ]
+
+ output = phlex_context do
+ RubyUI.Table do
+ RubyUI.TableCaption { "Employees at Acme inc." }
+ RubyUI.TableHeader do
+ RubyUI.TableRow do
+ RubyUI.TableHead { "Name" }
+ RubyUI.TableHead { "Email" }
+ RubyUI.TableHead { "Status" }
+ RubyUI.TableHead(class: "text-right") { "Role" }
+ end
+ end
+ RubyUI.TableBody do
+ invoices.each do |invoice|
+ RubyUI.TableRow do
+ RubyUI.TableCell(class: "font-medium") { invoice[:identifier] }
+ RubyUI.TableCell { invoice[:status] }
+ RubyUI.TableCell { invoice[:method] }
+ RubyUI.TableCell(class: "text-right") { invoice[:amount] }
+ end
+ end
+ end
+ RubyUI.TableFooter do
+ RubyUI.TableRow do
+ RubyUI.TableHead(class: "font-medium", colspan: 3) { "Total" }
+ RubyUI.TableHead(class: "font-medium text-right") { invoices.sum { |invoice| invoice[:amount] } }
+ end
+ end
+ end
+ end
+
+ assert_match(/Total/, output)
+ end
+end
diff --git a/test/ruby_ui/tabs_test.rb b/test/ruby_ui/tabs_test.rb
new file mode 100644
index 00000000..374cccc1
--- /dev/null
+++ b/test/ruby_ui/tabs_test.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class RubyUI::TabsTest < Minitest::Test
+ include Phlex::Testing::ViewHelper
+
+ def test_render_with_all_items
+ output = phlex_context do
+ RubyUI.Tabs(default_value: "account", class: "w-96") do
+ RubyUI.TabsList do
+ RubyUI.TabsTrigger(value: "account") { "Account" }
+ RubyUI.TabsTrigger(value: "password") { "Password" }
+ end
+ RubyUI.TabsContent(value: "account") do
+ RubyUI::Text(as: "p", size: "4") { "Account" }
+ RubyUI::Text(size: "5", weight: "semibold") { "Are you sure absolutely sure?" }
+ RubyUI::Text(size: "2", class: "text-muted-foreground") { "Update your account details." }
+ end
+ RubyUI.TabsContent(value: "password") do
+ RubyUI::Text(as: "p", size: "4") { "Password" }
+ RubyUI::Text(size: "2", class: "text-muted-foreground") { "Change your password here. After saving, you'll be logged out." }
+ end
+ end
+ end
+
+ assert_match(/Account/, output)
+ end
+end
diff --git a/test/rbui/text_test.rb b/test/ruby_ui/text_test.rb
similarity index 76%
rename from test/rbui/text_test.rb
rename to test/ruby_ui/text_test.rb
index 03b0fd44..dba4f73d 100644
--- a/test/rbui/text_test.rb
+++ b/test/ruby_ui/text_test.rb
@@ -2,13 +2,13 @@
require "test_helper"
-class RBUI::TypographyTest < Minitest::Test
+class RubyUI::TypographyTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_heading_with_levels
(1..4).each do |level|
output = phlex_context do
- RBUI::Heading(level: level.to_s) { "This is an H#{level} title" }
+ RubyUI::Heading(level: level.to_s) { "This is an H#{level} title" }
end
assert_match("This is an H#{level} title", output)
@@ -18,7 +18,7 @@ def test_heading_with_levels
def test_heading_with_custom_size
output = phlex_context do
- RBUI::Heading(as: "h2", size: "7") { "Custom Heading" }
+ RubyUI::Heading(as: "h2", size: "7") { "Custom Heading" }
end
assert_match("Custom Heading", output)
@@ -29,7 +29,7 @@ def test_heading_with_custom_size
def test_text_with_sizes
(1..9).each do |size|
output = phlex_context do
- RBUI::Text(size: size.to_s) { "Size #{size} text" }
+ RubyUI::Text(size: size.to_s) { "Size #{size} text" }
end
assert_match("Size #{size} text", output)
@@ -48,7 +48,7 @@ def test_text_with_sizes
def test_text_with_weights
%w[light regular medium bold].each do |weight|
output = phlex_context do
- RBUI::Text(weight: weight) { "#{weight.capitalize} text" }
+ RubyUI::Text(weight: weight) { "#{weight.capitalize} text" }
end
assert_match("#{weight.capitalize} text", output)
@@ -59,7 +59,7 @@ def test_text_with_weights
def test_text_as_different_elements
%w[p span div label].each do |element|
output = phlex_context do
- RBUI::Text(as: element) { element.capitalize.to_s }
+ RubyUI::Text(as: element) { element.capitalize.to_s }
end
assert_match(element.capitalize.to_s, output)
@@ -69,7 +69,7 @@ def test_text_as_different_elements
def test_lead_text
output = phlex_context do
- RBUI::Text(as: "p", size: "5", weight: "medium") { "A modal dialog that interrupts the user." }
+ RubyUI::Text(as: "p", size: "5", weight: "medium") { "A modal dialog that interrupts the user." }
end
assert_match("A modal dialog that interrupts the user.", output)
@@ -79,7 +79,7 @@ def test_lead_text
def test_large_text
output = phlex_context do
- RBUI::Text(size: "5", weight: "semibold") { "Are you sure absolutely sure?" }
+ RubyUI::Text(size: "5", weight: "semibold") { "Are you sure absolutely sure?" }
end
assert_match("Are you sure absolutely sure?", output)
@@ -89,7 +89,7 @@ def test_large_text
def test_small_text
output = phlex_context do
- RBUI::Text(size: "2", weight: "medium") { "Email address" }
+ RubyUI::Text(size: "2", weight: "medium") { "Email address" }
end
assert_match("Email address", output)
@@ -99,7 +99,7 @@ def test_small_text
def test_muted_text
output = phlex_context do
- RBUI::Text(size: "2", class: "text-muted-foreground") { "Enter your email address." }
+ RubyUI::Text(size: "2", class: "text-muted-foreground") { "Enter your email address." }
end
assert_match("Enter your email address.", output)
diff --git a/test/rbui/textarea_test.rb b/test/ruby_ui/textarea_test.rb
similarity index 70%
rename from test/rbui/textarea_test.rb
rename to test/ruby_ui/textarea_test.rb
index 9174e70a..5513ff22 100644
--- a/test/rbui/textarea_test.rb
+++ b/test/ruby_ui/textarea_test.rb
@@ -2,12 +2,12 @@
require "test_helper"
-class RBUI::TextareaTest < Minitest::Test
+class RubyUI::TextareaTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.Textarea(rows: 4, placeholder: "Comment")
+ RubyUI.Textarea(rows: 4, placeholder: "Comment")
end
assert_match(/Comment/, output)
@@ -15,7 +15,7 @@ def test_render_with_all_items
def test_render_with_value
output = phlex_context do
- RBUI.Textarea { "Value" }
+ RubyUI.Textarea { "Value" }
end
assert_match(/Value/, output)
diff --git a/test/rbui/theme_toggle_test.rb b/test/ruby_ui/theme_toggle_test.rb
similarity index 60%
rename from test/rbui/theme_toggle_test.rb
rename to test/ruby_ui/theme_toggle_test.rb
index 31e06e00..d514aa27 100644
--- a/test/rbui/theme_toggle_test.rb
+++ b/test/ruby_ui/theme_toggle_test.rb
@@ -2,18 +2,18 @@
require "test_helper"
-class RBUI::ThemeToggleTest < Minitest::Test
+class RubyUI::ThemeToggleTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.ThemeToggle do |toggle|
+ RubyUI.ThemeToggle do |toggle|
toggle.light_mode do
- RBUI.Button(variant: :primary) { "Light" }
+ RubyUI.Button(variant: :primary) { "Light" }
end
toggle.dark_mode do
- RBUI.Button(variant: :primary) { "Dark" }
+ RubyUI.Button(variant: :primary) { "Dark" }
end
end
end
diff --git a/test/rbui/tooltip_test.rb b/test/ruby_ui/tooltip_test.rb
similarity index 50%
rename from test/rbui/tooltip_test.rb
rename to test/ruby_ui/tooltip_test.rb
index 6beeac4e..eca36ebf 100644
--- a/test/rbui/tooltip_test.rb
+++ b/test/ruby_ui/tooltip_test.rb
@@ -2,17 +2,17 @@
require "test_helper"
-class RBUI::TooltipTest < Minitest::Test
+class RubyUI::TooltipTest < Minitest::Test
include Phlex::Testing::ViewHelper
def test_render_with_all_items
output = phlex_context do
- RBUI.Tooltip do
- RBUI.TooltipTrigger do
- RBUI.Button(variant: :outline, icon: true) { "?" }
+ RubyUI.Tooltip do
+ RubyUI.TooltipTrigger do
+ RubyUI.Button(variant: :outline, icon: true) { "?" }
end
- RBUI.TooltipContent do
- RBUI::Text(as: "p") { "Add to library" }
+ RubyUI.TooltipContent do
+ RubyUI::Text(as: "p") { "Add to library" }
end
end
end