uikit_rails 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of uikit_rails might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +259 -0
- data/Rakefile +12 -0
- data/app/controllers/uikit_rails/styleguide_controller.rb +72 -0
- data/app/views/layouts/uikit_rails/application.html.erb +412 -0
- data/app/views/uikit_rails/styleguide/index.html.erb +27 -0
- data/app/views/uikit_rails/styleguide/show.html.erb +56 -0
- data/config/routes.rb +6 -0
- data/lib/uikit_rails/engine.rb +13 -0
- data/lib/uikit_rails/generators/add_generator.rb +110 -0
- data/lib/uikit_rails/generators/install_generator.rb +62 -0
- data/lib/uikit_rails/generators/templates/base_component.rb.tt +32 -0
- data/lib/uikit_rails/generators/templates/uikit_rails.css.tt +69 -0
- data/lib/uikit_rails/templates/components/accordion/USAGE +30 -0
- data/lib/uikit_rails/templates/components/accordion/accordion.css +74 -0
- data/lib/uikit_rails/templates/components/accordion/component.html.erb +13 -0
- data/lib/uikit_rails/templates/components/accordion/component.rb +35 -0
- data/lib/uikit_rails/templates/components/accordion/preview.yml +81 -0
- data/lib/uikit_rails/templates/components/alert/USAGE +25 -0
- data/lib/uikit_rails/templates/components/alert/alert.css +60 -0
- data/lib/uikit_rails/templates/components/alert/component.html.erb +9 -0
- data/lib/uikit_rails/templates/components/alert/component.rb +27 -0
- data/lib/uikit_rails/templates/components/alert/preview.yml +53 -0
- data/lib/uikit_rails/templates/components/alert_dialog/USAGE +38 -0
- data/lib/uikit_rails/templates/components/alert_dialog/alert_dialog.css +108 -0
- data/lib/uikit_rails/templates/components/alert_dialog/component.html.erb +27 -0
- data/lib/uikit_rails/templates/components/alert_dialog/component.rb +23 -0
- data/lib/uikit_rails/templates/components/alert_dialog/preview.yml +94 -0
- data/lib/uikit_rails/templates/components/avatar/USAGE +20 -0
- data/lib/uikit_rails/templates/components/avatar/avatar.css +53 -0
- data/lib/uikit_rails/templates/components/avatar/component.html.erb +7 -0
- data/lib/uikit_rails/templates/components/avatar/component.rb +31 -0
- data/lib/uikit_rails/templates/components/avatar/preview.yml +42 -0
- data/lib/uikit_rails/templates/components/badge/USAGE +13 -0
- data/lib/uikit_rails/templates/components/badge/badge.css +61 -0
- data/lib/uikit_rails/templates/components/badge/component.rb +28 -0
- data/lib/uikit_rails/templates/components/badge/preview.yml +38 -0
- data/lib/uikit_rails/templates/components/breadcrumb/USAGE +23 -0
- data/lib/uikit_rails/templates/components/breadcrumb/breadcrumb.css +55 -0
- data/lib/uikit_rails/templates/components/breadcrumb/component.html.erb +14 -0
- data/lib/uikit_rails/templates/components/breadcrumb/component.rb +40 -0
- data/lib/uikit_rails/templates/components/breadcrumb/preview.yml +42 -0
- data/lib/uikit_rails/templates/components/button/USAGE +21 -0
- data/lib/uikit_rails/templates/components/button/button.css +125 -0
- data/lib/uikit_rails/templates/components/button/component.rb +44 -0
- data/lib/uikit_rails/templates/components/button/preview.yml +106 -0
- data/lib/uikit_rails/templates/components/card/USAGE +33 -0
- data/lib/uikit_rails/templates/components/card/card.css +63 -0
- data/lib/uikit_rails/templates/components/card/component.html.erb +16 -0
- data/lib/uikit_rails/templates/components/card/component.rb +26 -0
- data/lib/uikit_rails/templates/components/card/preview.yml +57 -0
- data/lib/uikit_rails/templates/components/checkbox/USAGE +19 -0
- data/lib/uikit_rails/templates/components/checkbox/checkbox.css +67 -0
- data/lib/uikit_rails/templates/components/checkbox/component.html.erb +6 -0
- data/lib/uikit_rails/templates/components/checkbox/component.rb +26 -0
- data/lib/uikit_rails/templates/components/checkbox/preview.yml +43 -0
- data/lib/uikit_rails/templates/components/collapsible/USAGE +31 -0
- data/lib/uikit_rails/templates/components/collapsible/collapsible.css +55 -0
- data/lib/uikit_rails/templates/components/collapsible/component.html.erb +8 -0
- data/lib/uikit_rails/templates/components/collapsible/component.rb +18 -0
- data/lib/uikit_rails/templates/components/collapsible/preview.yml +65 -0
- data/lib/uikit_rails/templates/components/dialog/USAGE +41 -0
- data/lib/uikit_rails/templates/components/dialog/component.html.erb +23 -0
- data/lib/uikit_rails/templates/components/dialog/component.rb +20 -0
- data/lib/uikit_rails/templates/components/dialog/dialog.css +133 -0
- data/lib/uikit_rails/templates/components/dialog/preview.yml +77 -0
- data/lib/uikit_rails/templates/components/dropdown/USAGE +40 -0
- data/lib/uikit_rails/templates/components/dropdown/component.html.erb +14 -0
- data/lib/uikit_rails/templates/components/dropdown/component.rb +62 -0
- data/lib/uikit_rails/templates/components/dropdown/dropdown.css +104 -0
- data/lib/uikit_rails/templates/components/dropdown/preview.yml +75 -0
- data/lib/uikit_rails/templates/components/input/USAGE +21 -0
- data/lib/uikit_rails/templates/components/input/component.rb +25 -0
- data/lib/uikit_rails/templates/components/input/input.css +43 -0
- data/lib/uikit_rails/templates/components/input/preview.yml +58 -0
- data/lib/uikit_rails/templates/components/label/USAGE +16 -0
- data/lib/uikit_rails/templates/components/label/component.rb +25 -0
- data/lib/uikit_rails/templates/components/label/label.css +25 -0
- data/lib/uikit_rails/templates/components/label/preview.yml +34 -0
- data/lib/uikit_rails/templates/components/pagination/USAGE +45 -0
- data/lib/uikit_rails/templates/components/pagination/component.html.erb +7 -0
- data/lib/uikit_rails/templates/components/pagination/component.rb +90 -0
- data/lib/uikit_rails/templates/components/pagination/pagination.css +89 -0
- data/lib/uikit_rails/templates/components/pagination/preview.yml +61 -0
- data/lib/uikit_rails/templates/components/popover/USAGE +44 -0
- data/lib/uikit_rails/templates/components/popover/component.html.erb +8 -0
- data/lib/uikit_rails/templates/components/popover/component.rb +19 -0
- data/lib/uikit_rails/templates/components/popover/popover.css +94 -0
- data/lib/uikit_rails/templates/components/popover/preview.yml +102 -0
- data/lib/uikit_rails/templates/components/progress/USAGE +15 -0
- data/lib/uikit_rails/templates/components/progress/component.html.erb +3 -0
- data/lib/uikit_rails/templates/components/progress/component.rb +38 -0
- data/lib/uikit_rails/templates/components/progress/preview.yml +44 -0
- data/lib/uikit_rails/templates/components/progress/progress.css +20 -0
- data/lib/uikit_rails/templates/components/select/USAGE +19 -0
- data/lib/uikit_rails/templates/components/select/component.rb +38 -0
- data/lib/uikit_rails/templates/components/select/preview.yml +61 -0
- data/lib/uikit_rails/templates/components/select/select.css +46 -0
- data/lib/uikit_rails/templates/components/separator/USAGE +15 -0
- data/lib/uikit_rails/templates/components/separator/component.rb +34 -0
- data/lib/uikit_rails/templates/components/separator/preview.yml +32 -0
- data/lib/uikit_rails/templates/components/separator/separator.css +21 -0
- data/lib/uikit_rails/templates/components/sheet/USAGE +44 -0
- data/lib/uikit_rails/templates/components/sheet/component.html.erb +23 -0
- data/lib/uikit_rails/templates/components/sheet/component.rb +23 -0
- data/lib/uikit_rails/templates/components/sheet/preview.yml +105 -0
- data/lib/uikit_rails/templates/components/sheet/sheet.css +193 -0
- data/lib/uikit_rails/templates/components/skeleton/USAGE +19 -0
- data/lib/uikit_rails/templates/components/skeleton/component.rb +38 -0
- data/lib/uikit_rails/templates/components/skeleton/preview.yml +44 -0
- data/lib/uikit_rails/templates/components/skeleton/skeleton.css +25 -0
- data/lib/uikit_rails/templates/components/switch/USAGE +19 -0
- data/lib/uikit_rails/templates/components/switch/component.html.erb +19 -0
- data/lib/uikit_rails/templates/components/switch/component.rb +23 -0
- data/lib/uikit_rails/templates/components/switch/preview.yml +43 -0
- data/lib/uikit_rails/templates/components/switch/switch.css +81 -0
- data/lib/uikit_rails/templates/components/table/USAGE +40 -0
- data/lib/uikit_rails/templates/components/table/component.html.erb +14 -0
- data/lib/uikit_rails/templates/components/table/component.rb +25 -0
- data/lib/uikit_rails/templates/components/table/preview.yml +109 -0
- data/lib/uikit_rails/templates/components/table/table.css +86 -0
- data/lib/uikit_rails/templates/components/tabs/USAGE +24 -0
- data/lib/uikit_rails/templates/components/tabs/component.html.erb +10 -0
- data/lib/uikit_rails/templates/components/tabs/component.rb +35 -0
- data/lib/uikit_rails/templates/components/tabs/preview.yml +60 -0
- data/lib/uikit_rails/templates/components/tabs/tabs.css +72 -0
- data/lib/uikit_rails/templates/components/textarea/USAGE +19 -0
- data/lib/uikit_rails/templates/components/textarea/component.rb +25 -0
- data/lib/uikit_rails/templates/components/textarea/preview.yml +47 -0
- data/lib/uikit_rails/templates/components/textarea/textarea.css +39 -0
- data/lib/uikit_rails/templates/components/toggle/USAGE +25 -0
- data/lib/uikit_rails/templates/components/toggle/component.rb +39 -0
- data/lib/uikit_rails/templates/components/toggle/preview.yml +81 -0
- data/lib/uikit_rails/templates/components/toggle/toggle.css +89 -0
- data/lib/uikit_rails/templates/components/tooltip/USAGE +23 -0
- data/lib/uikit_rails/templates/components/tooltip/component.html.erb +8 -0
- data/lib/uikit_rails/templates/components/tooltip/component.rb +19 -0
- data/lib/uikit_rails/templates/components/tooltip/preview.yml +52 -0
- data/lib/uikit_rails/templates/components/tooltip/tooltip.css +78 -0
- data/lib/uikit_rails/templates/stimulus/accordion_controller.js +19 -0
- data/lib/uikit_rails/templates/stimulus/alert_dialog_controller.js +25 -0
- data/lib/uikit_rails/templates/stimulus/collapsible_controller.js +9 -0
- data/lib/uikit_rails/templates/stimulus/dialog_controller.js +19 -0
- data/lib/uikit_rails/templates/stimulus/dropdown_controller.js +47 -0
- data/lib/uikit_rails/templates/stimulus/popover_controller.js +47 -0
- data/lib/uikit_rails/templates/stimulus/sheet_controller.js +19 -0
- data/lib/uikit_rails/templates/stimulus/tabs_controller.js +24 -0
- data/lib/uikit_rails/templates/stimulus/tooltip_controller.js +13 -0
- data/lib/uikit_rails/version.rb +5 -0
- data/lib/uikit_rails.rb +58 -0
- data/sig/uikit_rails.rbs +4 -0
- data/test_app/.dockerignore +51 -0
- data/test_app/.gitattributes +9 -0
- data/test_app/.github/dependabot.yml +12 -0
- data/test_app/.github/workflows/ci.yml +124 -0
- data/test_app/.gitignore +35 -0
- data/test_app/.kamal/hooks/docker-setup.sample +3 -0
- data/test_app/.kamal/hooks/post-app-boot.sample +3 -0
- data/test_app/.kamal/hooks/post-deploy.sample +14 -0
- data/test_app/.kamal/hooks/post-proxy-reboot.sample +3 -0
- data/test_app/.kamal/hooks/pre-app-boot.sample +3 -0
- data/test_app/.kamal/hooks/pre-build.sample +51 -0
- data/test_app/.kamal/hooks/pre-connect.sample +47 -0
- data/test_app/.kamal/hooks/pre-deploy.sample +122 -0
- data/test_app/.kamal/hooks/pre-proxy-reboot.sample +3 -0
- data/test_app/.kamal/secrets +20 -0
- data/test_app/.rubocop.yml +8 -0
- data/test_app/.ruby-version +1 -0
- data/test_app/Dockerfile +77 -0
- data/test_app/Gemfile +68 -0
- data/test_app/Gemfile.lock +587 -0
- data/test_app/README.md +24 -0
- data/test_app/Rakefile +6 -0
- data/test_app/app/assets/images/.keep +0 -0
- data/test_app/app/assets/stylesheets/application.css +10 -0
- data/test_app/app/assets/stylesheets/ui/accordion.css +74 -0
- data/test_app/app/assets/stylesheets/ui/alert.css +60 -0
- data/test_app/app/assets/stylesheets/ui/alert_dialog.css +108 -0
- data/test_app/app/assets/stylesheets/ui/avatar.css +53 -0
- data/test_app/app/assets/stylesheets/ui/badge.css +61 -0
- data/test_app/app/assets/stylesheets/ui/breadcrumb.css +55 -0
- data/test_app/app/assets/stylesheets/ui/button.css +125 -0
- data/test_app/app/assets/stylesheets/ui/card.css +63 -0
- data/test_app/app/assets/stylesheets/ui/checkbox.css +67 -0
- data/test_app/app/assets/stylesheets/ui/collapsible.css +55 -0
- data/test_app/app/assets/stylesheets/ui/dialog.css +133 -0
- data/test_app/app/assets/stylesheets/ui/dropdown.css +104 -0
- data/test_app/app/assets/stylesheets/ui/input.css +43 -0
- data/test_app/app/assets/stylesheets/ui/label.css +25 -0
- data/test_app/app/assets/stylesheets/ui/pagination.css +89 -0
- data/test_app/app/assets/stylesheets/ui/popover.css +94 -0
- data/test_app/app/assets/stylesheets/ui/progress.css +20 -0
- data/test_app/app/assets/stylesheets/ui/select.css +46 -0
- data/test_app/app/assets/stylesheets/ui/separator.css +21 -0
- data/test_app/app/assets/stylesheets/ui/sheet.css +193 -0
- data/test_app/app/assets/stylesheets/ui/skeleton.css +25 -0
- data/test_app/app/assets/stylesheets/ui/switch.css +81 -0
- data/test_app/app/assets/stylesheets/ui/table.css +86 -0
- data/test_app/app/assets/stylesheets/ui/tabs.css +72 -0
- data/test_app/app/assets/stylesheets/ui/textarea.css +39 -0
- data/test_app/app/assets/stylesheets/ui/toggle.css +89 -0
- data/test_app/app/assets/stylesheets/ui/tooltip.css +78 -0
- data/test_app/app/assets/stylesheets/uikit_rails.css +69 -0
- data/test_app/app/components/ui/accordion/component.html.erb +13 -0
- data/test_app/app/components/ui/accordion/component.rb +35 -0
- data/test_app/app/components/ui/accordion/preview.yml +81 -0
- data/test_app/app/components/ui/alert/component.html.erb +9 -0
- data/test_app/app/components/ui/alert/component.rb +27 -0
- data/test_app/app/components/ui/alert/preview.yml +53 -0
- data/test_app/app/components/ui/alert_dialog/component.html.erb +27 -0
- data/test_app/app/components/ui/alert_dialog/component.rb +23 -0
- data/test_app/app/components/ui/alert_dialog/preview.yml +94 -0
- data/test_app/app/components/ui/avatar/component.html.erb +7 -0
- data/test_app/app/components/ui/avatar/component.rb +31 -0
- data/test_app/app/components/ui/avatar/preview.yml +42 -0
- data/test_app/app/components/ui/badge/component.rb +28 -0
- data/test_app/app/components/ui/badge/preview.yml +38 -0
- data/test_app/app/components/ui/base_component.rb +32 -0
- data/test_app/app/components/ui/breadcrumb/component.html.erb +14 -0
- data/test_app/app/components/ui/breadcrumb/component.rb +40 -0
- data/test_app/app/components/ui/breadcrumb/preview.yml +42 -0
- data/test_app/app/components/ui/button/component.rb +44 -0
- data/test_app/app/components/ui/button/preview.yml +106 -0
- data/test_app/app/components/ui/card/component.html.erb +16 -0
- data/test_app/app/components/ui/card/component.rb +26 -0
- data/test_app/app/components/ui/card/preview.yml +57 -0
- data/test_app/app/components/ui/checkbox/component.html.erb +6 -0
- data/test_app/app/components/ui/checkbox/component.rb +26 -0
- data/test_app/app/components/ui/checkbox/preview.yml +43 -0
- data/test_app/app/components/ui/collapsible/component.html.erb +8 -0
- data/test_app/app/components/ui/collapsible/component.rb +18 -0
- data/test_app/app/components/ui/collapsible/preview.yml +65 -0
- data/test_app/app/components/ui/dialog/component.html.erb +23 -0
- data/test_app/app/components/ui/dialog/component.rb +20 -0
- data/test_app/app/components/ui/dialog/preview.yml +77 -0
- data/test_app/app/components/ui/dropdown/component.html.erb +14 -0
- data/test_app/app/components/ui/dropdown/component.rb +62 -0
- data/test_app/app/components/ui/dropdown/preview.yml +75 -0
- data/test_app/app/components/ui/input/component.rb +25 -0
- data/test_app/app/components/ui/input/preview.yml +58 -0
- data/test_app/app/components/ui/label/component.rb +25 -0
- data/test_app/app/components/ui/label/preview.yml +34 -0
- data/test_app/app/components/ui/pagination/component.html.erb +7 -0
- data/test_app/app/components/ui/pagination/component.rb +90 -0
- data/test_app/app/components/ui/pagination/preview.yml +61 -0
- data/test_app/app/components/ui/popover/component.html.erb +8 -0
- data/test_app/app/components/ui/popover/component.rb +19 -0
- data/test_app/app/components/ui/popover/preview.yml +102 -0
- data/test_app/app/components/ui/progress/component.html.erb +3 -0
- data/test_app/app/components/ui/progress/component.rb +38 -0
- data/test_app/app/components/ui/progress/preview.yml +44 -0
- data/test_app/app/components/ui/select/component.rb +38 -0
- data/test_app/app/components/ui/select/preview.yml +61 -0
- data/test_app/app/components/ui/separator/component.rb +34 -0
- data/test_app/app/components/ui/separator/preview.yml +32 -0
- data/test_app/app/components/ui/sheet/component.html.erb +23 -0
- data/test_app/app/components/ui/sheet/component.rb +23 -0
- data/test_app/app/components/ui/sheet/preview.yml +105 -0
- data/test_app/app/components/ui/skeleton/component.rb +38 -0
- data/test_app/app/components/ui/skeleton/preview.yml +44 -0
- data/test_app/app/components/ui/switch/component.html.erb +19 -0
- data/test_app/app/components/ui/switch/component.rb +23 -0
- data/test_app/app/components/ui/switch/preview.yml +43 -0
- data/test_app/app/components/ui/table/component.html.erb +14 -0
- data/test_app/app/components/ui/table/component.rb +25 -0
- data/test_app/app/components/ui/table/preview.yml +109 -0
- data/test_app/app/components/ui/tabs/component.html.erb +10 -0
- data/test_app/app/components/ui/tabs/component.rb +35 -0
- data/test_app/app/components/ui/tabs/preview.yml +60 -0
- data/test_app/app/components/ui/textarea/component.rb +25 -0
- data/test_app/app/components/ui/textarea/preview.yml +47 -0
- data/test_app/app/components/ui/toggle/component.rb +39 -0
- data/test_app/app/components/ui/toggle/preview.yml +81 -0
- data/test_app/app/components/ui/tooltip/component.html.erb +8 -0
- data/test_app/app/components/ui/tooltip/component.rb +19 -0
- data/test_app/app/components/ui/tooltip/preview.yml +52 -0
- data/test_app/app/controllers/application_controller.rb +7 -0
- data/test_app/app/controllers/concerns/.keep +0 -0
- data/test_app/app/helpers/application_helper.rb +2 -0
- data/test_app/app/javascript/application.js +3 -0
- data/test_app/app/javascript/controllers/application.js +9 -0
- data/test_app/app/javascript/controllers/hello_controller.js +7 -0
- data/test_app/app/javascript/controllers/index.js +4 -0
- data/test_app/app/javascript/controllers/ui/accordion_controller.js +19 -0
- data/test_app/app/javascript/controllers/ui/alert_dialog_controller.js +25 -0
- data/test_app/app/javascript/controllers/ui/collapsible_controller.js +9 -0
- data/test_app/app/javascript/controllers/ui/dialog_controller.js +19 -0
- data/test_app/app/javascript/controllers/ui/dropdown_controller.js +47 -0
- data/test_app/app/javascript/controllers/ui/popover_controller.js +47 -0
- data/test_app/app/javascript/controllers/ui/sheet_controller.js +19 -0
- data/test_app/app/javascript/controllers/ui/tabs_controller.js +24 -0
- data/test_app/app/javascript/controllers/ui/tooltip_controller.js +13 -0
- data/test_app/app/jobs/application_job.rb +7 -0
- data/test_app/app/mailers/application_mailer.rb +4 -0
- data/test_app/app/models/application_record.rb +3 -0
- data/test_app/app/models/concerns/.keep +0 -0
- data/test_app/app/views/layouts/application.html.erb +29 -0
- data/test_app/app/views/layouts/mailer.html.erb +13 -0
- data/test_app/app/views/layouts/mailer.text.erb +1 -0
- data/test_app/app/views/pwa/manifest.json.erb +22 -0
- data/test_app/app/views/pwa/service-worker.js +26 -0
- data/test_app/bin/brakeman +7 -0
- data/test_app/bin/bundler-audit +6 -0
- data/test_app/bin/ci +6 -0
- data/test_app/bin/dev +2 -0
- data/test_app/bin/docker-entrypoint +8 -0
- data/test_app/bin/importmap +4 -0
- data/test_app/bin/jobs +6 -0
- data/test_app/bin/kamal +16 -0
- data/test_app/bin/rails +4 -0
- data/test_app/bin/rake +4 -0
- data/test_app/bin/rubocop +8 -0
- data/test_app/bin/setup +35 -0
- data/test_app/bin/thrust +5 -0
- data/test_app/config/application.rb +27 -0
- data/test_app/config/boot.rb +4 -0
- data/test_app/config/bundler-audit.yml +5 -0
- data/test_app/config/cable.yml +17 -0
- data/test_app/config/cache.yml +16 -0
- data/test_app/config/ci.rb +24 -0
- data/test_app/config/credentials.yml.enc +1 -0
- data/test_app/config/database.yml +40 -0
- data/test_app/config/deploy.yml +119 -0
- data/test_app/config/environment.rb +5 -0
- data/test_app/config/environments/development.rb +78 -0
- data/test_app/config/environments/production.rb +90 -0
- data/test_app/config/environments/test.rb +53 -0
- data/test_app/config/importmap.rb +7 -0
- data/test_app/config/initializers/assets.rb +7 -0
- data/test_app/config/initializers/content_security_policy.rb +29 -0
- data/test_app/config/initializers/filter_parameter_logging.rb +8 -0
- data/test_app/config/initializers/inflections.rb +16 -0
- data/test_app/config/locales/en.yml +31 -0
- data/test_app/config/puma.rb +42 -0
- data/test_app/config/queue.yml +18 -0
- data/test_app/config/recurring.yml +15 -0
- data/test_app/config/routes.rb +13 -0
- data/test_app/config/storage.yml +27 -0
- data/test_app/config.ru +6 -0
- data/test_app/db/cable_schema.rb +11 -0
- data/test_app/db/cache_schema.rb +12 -0
- data/test_app/db/queue_schema.rb +129 -0
- data/test_app/db/seeds.rb +9 -0
- data/test_app/lib/tasks/.keep +0 -0
- data/test_app/log/.keep +0 -0
- data/test_app/public/400.html +135 -0
- data/test_app/public/404.html +135 -0
- data/test_app/public/406-unsupported-browser.html +135 -0
- data/test_app/public/422.html +135 -0
- data/test_app/public/500.html +135 -0
- data/test_app/public/icon.png +0 -0
- data/test_app/public/icon.svg +3 -0
- data/test_app/public/robots.txt +1 -0
- data/test_app/script/.keep +0 -0
- data/test_app/storage/.keep +0 -0
- data/test_app/test/controllers/.keep +0 -0
- data/test_app/test/fixtures/files/.keep +0 -0
- data/test_app/test/helpers/.keep +0 -0
- data/test_app/test/integration/.keep +0 -0
- data/test_app/test/mailers/.keep +0 -0
- data/test_app/test/models/.keep +0 -0
- data/test_app/test/test_helper.rb +15 -0
- data/test_app/tmp/.keep +0 -0
- data/test_app/tmp/pids/.keep +0 -0
- data/test_app/tmp/storage/.keep +0 -0
- data/test_app/vendor/.keep +0 -0
- data/test_app/vendor/javascript/.keep +0 -0
- metadata +438 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 15fd29b901ee109f1db0bd8397dd6cdd751c061ca49b69805cff6f2eb357c079
|
|
4
|
+
data.tar.gz: 9a4e1bb1eac43ad31eb5f3283d7d4b38e6e4c99273c2f3c2e199c825b53838af
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: b0f262f355681225409026ea3b17476c942989711a7818a02a796955747266a049d80698f63f47ffed41c972170109c4ae15b02d2c8fca97b73060a8a883e6af
|
|
7
|
+
data.tar.gz: 78e353120978cabb0289137033d25002faa419ecfefe8c3d275a5ab2c28ff7ed43dccd0dd557b43f7c4889e11e6a1eac54047a9ddcfcba1147934b7a948c872a
|
data/README.md
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# UikitRails
|
|
2
|
+
|
|
3
|
+
Beautiful, copy-paste UI components for Rails — inspired by [shadcn/ui](https://ui.shadcn.com).
|
|
4
|
+
|
|
5
|
+
You don't install a component library. You **copy components into your project** and own the code. Customize everything — HTML, CSS, Ruby — no abstractions in the way.
|
|
6
|
+
|
|
7
|
+
## Why UikitRails?
|
|
8
|
+
|
|
9
|
+
| | Traditional gems | UikitRails |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| **Ownership** | Locked behind gem API | Code lives in your app |
|
|
12
|
+
| **Styling** | Override with hacks | Edit the CSS directly |
|
|
13
|
+
| **Tailwind required?** | Often | No — plain CSS with design tokens |
|
|
14
|
+
| **Customization** | Limited to gem options | Change anything you want |
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
- **Copy, don't depend** — components are copied into your app via generators. No runtime dependency.
|
|
19
|
+
- **No Tailwind required** — plain CSS powered by CSS custom properties (design tokens). Works with any CSS setup.
|
|
20
|
+
- **ViewComponent-based** — each component is a proper [ViewComponent](https://viewcomponent.org/) with a Ruby class and ERB template.
|
|
21
|
+
- **Dark mode ready** — add `class="dark"` to your `<html>` tag and it just works.
|
|
22
|
+
- **Built-in styleguide** — mount the engine to browse live previews and copy code for every installed component.
|
|
23
|
+
- **Accessible** — semantic HTML, keyboard navigation, focus-visible states, and ARIA attributes.
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
### 1. Add the gem
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
gem "uikit_rails"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
bundle install
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. Run the installer
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
rails generate uikit_rails:install
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This creates two files:
|
|
44
|
+
|
|
45
|
+
| File | Purpose |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `app/components/ui/base_component.rb` | Base class all UI components inherit from |
|
|
48
|
+
| `app/assets/stylesheets/uikit_rails.css` | Design tokens — colors, radii, fonts, transitions |
|
|
49
|
+
|
|
50
|
+
### 3. Add components
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Add specific components
|
|
54
|
+
rails generate uikit_rails:add button card input
|
|
55
|
+
|
|
56
|
+
# Or install everything at once
|
|
57
|
+
rails generate uikit_rails:add --all
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
This copies into your app:
|
|
61
|
+
|
|
62
|
+
| File | Purpose |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `app/components/ui/button/component.rb` | ViewComponent Ruby class |
|
|
65
|
+
| `app/assets/stylesheets/ui/button.css` | Component styles (plain CSS) |
|
|
66
|
+
| `app/components/ui/button/preview.yml` | Preview examples for the styleguide |
|
|
67
|
+
|
|
68
|
+
Add multiple components at once:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
rails generate uikit_rails:add button card badge alert
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 4. Use in your views
|
|
75
|
+
|
|
76
|
+
```erb
|
|
77
|
+
<%= render Ui::Button::Component.new do %>
|
|
78
|
+
Click me
|
|
79
|
+
<% end %>
|
|
80
|
+
|
|
81
|
+
<%= render Ui::Button::Component.new(variant: :destructive, size: :lg) do %>
|
|
82
|
+
Delete
|
|
83
|
+
<% end %>
|
|
84
|
+
|
|
85
|
+
<%= render Ui::Button::Component.new(tag: :a, href: "/dashboard", variant: :outline) do %>
|
|
86
|
+
Go to Dashboard
|
|
87
|
+
<% end %>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Component Styleguide
|
|
91
|
+
|
|
92
|
+
UikitRails ships with a **mountable engine** that gives you a live component browser — like Storybook, but built into your Rails app.
|
|
93
|
+
|
|
94
|
+
Add one line to your routes:
|
|
95
|
+
|
|
96
|
+
```ruby
|
|
97
|
+
# config/routes.rb
|
|
98
|
+
mount UikitRails::Engine => "/ui"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then visit `/ui` to see:
|
|
102
|
+
- A sidebar listing every installed component
|
|
103
|
+
- Live rendered previews with all variants and sizes
|
|
104
|
+
- Copyable ERB code snippets for every example
|
|
105
|
+
- The `rails generate` command to install each component
|
|
106
|
+
|
|
107
|
+
The styleguide is self-contained — it has its own layout and styles that won't interfere with your app.
|
|
108
|
+
|
|
109
|
+
## Available Components
|
|
110
|
+
|
|
111
|
+
**Layout & Display**
|
|
112
|
+
|
|
113
|
+
| Component | Description |
|
|
114
|
+
|---|---|
|
|
115
|
+
| `card` | Container with header, title, description, body, and footer slots |
|
|
116
|
+
| `separator` | Horizontal or vertical divider between content |
|
|
117
|
+
| `skeleton` | Animated placeholder for loading states |
|
|
118
|
+
| `avatar` | Circular avatar with image or fallback initials |
|
|
119
|
+
| `badge` | Small status indicator (default, secondary, destructive, outline) |
|
|
120
|
+
| `alert` | Informational banner with title and description (default, destructive) |
|
|
121
|
+
| `progress` | Progress bar with accessible ARIA attributes |
|
|
122
|
+
| `label` | Styled form label |
|
|
123
|
+
| `table` | Data table with header, body, footer, and caption slots |
|
|
124
|
+
|
|
125
|
+
**Form Controls**
|
|
126
|
+
|
|
127
|
+
| Component | Description |
|
|
128
|
+
|---|---|
|
|
129
|
+
| `button` | Button with 6 variants and 4 sizes, renders as `<button>` or `<a>` |
|
|
130
|
+
| `input` | Styled text input field |
|
|
131
|
+
| `textarea` | Multi-line text input |
|
|
132
|
+
| `select` | Native select dropdown with custom styling |
|
|
133
|
+
| `checkbox` | Styled checkbox with optional label |
|
|
134
|
+
| `switch` | Toggle switch for boolean settings (pure CSS) |
|
|
135
|
+
| `toggle` | Pressable toggle button with pressed state |
|
|
136
|
+
|
|
137
|
+
**Interactive (Stimulus)**
|
|
138
|
+
|
|
139
|
+
| Component | Description |
|
|
140
|
+
|---|---|
|
|
141
|
+
| `dialog` | Modal dialog using native `<dialog>` element |
|
|
142
|
+
| `alert_dialog` | Confirmation dialog that requires user action |
|
|
143
|
+
| `sheet` | Slide-over panel from any side (top, right, bottom, left) |
|
|
144
|
+
| `dropdown` | Dropdown menu with items, separators, and labels |
|
|
145
|
+
| `popover` | Floating content panel triggered by click |
|
|
146
|
+
| `tabs` | Tabbed content panels with keyboard navigation |
|
|
147
|
+
| `tooltip` | Hover/focus tooltip (top, bottom, left, right) |
|
|
148
|
+
| `accordion` | Collapsible sections with single or multiple open |
|
|
149
|
+
| `collapsible` | Simple expand/collapse toggle |
|
|
150
|
+
|
|
151
|
+
**Navigation**
|
|
152
|
+
|
|
153
|
+
| Component | Description |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `breadcrumb` | Navigation breadcrumb trail with links |
|
|
156
|
+
| `pagination` | Page navigation with prev, next, pages, and ellipsis |
|
|
157
|
+
|
|
158
|
+
## Customization
|
|
159
|
+
|
|
160
|
+
### Design Tokens
|
|
161
|
+
|
|
162
|
+
All components reference CSS custom properties defined in `app/assets/stylesheets/uikit_rails.css`. Change them once, every component updates:
|
|
163
|
+
|
|
164
|
+
```css
|
|
165
|
+
:root {
|
|
166
|
+
--ui-primary: #2563eb;
|
|
167
|
+
--ui-primary-foreground: #ffffff;
|
|
168
|
+
--ui-radius: 0.5rem;
|
|
169
|
+
--ui-font-family: "Inter", sans-serif;
|
|
170
|
+
--ui-transition-speed: 150ms;
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Dark mode tokens are defined under `.dark` — add the class to `<html>` or `<body>` to switch.
|
|
175
|
+
|
|
176
|
+
### Component Code
|
|
177
|
+
|
|
178
|
+
Since you own the code, you can change anything:
|
|
179
|
+
|
|
180
|
+
- **Ruby class** — add new variants, change defaults, add validations
|
|
181
|
+
- **CSS file** — restyle completely, add animations, adjust spacing
|
|
182
|
+
- **Preview** — edit `preview.yml` to add your own examples to the styleguide
|
|
183
|
+
|
|
184
|
+
### Example: Adding a Custom Variant
|
|
185
|
+
|
|
186
|
+
```ruby
|
|
187
|
+
# app/components/ui/button/component.rb
|
|
188
|
+
VARIANTS = %i[default destructive outline secondary ghost link brand].freeze
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```css
|
|
192
|
+
/* app/assets/stylesheets/ui/button.css */
|
|
193
|
+
.ui-btn--brand {
|
|
194
|
+
background-color: #7c3aed;
|
|
195
|
+
color: #ffffff;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.ui-btn--brand:hover {
|
|
199
|
+
background-color: #6d28d9;
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```erb
|
|
204
|
+
<%= render Ui::Button::Component.new(variant: :brand) do %>
|
|
205
|
+
Brand Button
|
|
206
|
+
<% end %>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## How It Works
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
rails generate uikit_rails:install
|
|
213
|
+
└─ copies base_component.rb + uikit_rails.css (design tokens)
|
|
214
|
+
|
|
215
|
+
rails generate uikit_rails:add button
|
|
216
|
+
└─ copies component.rb → app/components/ui/button/
|
|
217
|
+
└─ copies button.css → app/assets/stylesheets/ui/
|
|
218
|
+
└─ copies preview.yml → app/components/ui/button/
|
|
219
|
+
|
|
220
|
+
mount UikitRails::Engine => "/ui"
|
|
221
|
+
└─ serves a styleguide at /ui with live previews
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
The gem is only used for **generators and the styleguide engine**. Your components have zero runtime dependency on the gem — you could remove it from your Gemfile after adding all the components you need (though you'd lose the styleguide).
|
|
225
|
+
|
|
226
|
+
## Requirements
|
|
227
|
+
|
|
228
|
+
- Ruby >= 3.2
|
|
229
|
+
- Rails >= 7.0
|
|
230
|
+
- [view_component](https://github.com/ViewComponent/view_component) >= 3.0
|
|
231
|
+
|
|
232
|
+
## Development
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
git clone https://github.com/kha-wogi/uikit_rails.git
|
|
236
|
+
cd uikit_rails
|
|
237
|
+
bin/setup
|
|
238
|
+
bundle exec rspec # run tests
|
|
239
|
+
bundle exec rubocop # run linter
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
A test Rails app is included at `test_app/` for manual testing:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
cd test_app
|
|
246
|
+
bundle install
|
|
247
|
+
bin/rails generate uikit_rails:install
|
|
248
|
+
bin/rails generate uikit_rails:add button
|
|
249
|
+
bin/rails server
|
|
250
|
+
# Visit http://localhost:3000/ui
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Contributing
|
|
254
|
+
|
|
255
|
+
Bug reports and pull requests are welcome on [GitHub](https://github.com/kha-wogi/uikit_rails).
|
|
256
|
+
|
|
257
|
+
## License
|
|
258
|
+
|
|
259
|
+
MIT
|
data/Rakefile
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "yaml"
|
|
4
|
+
|
|
5
|
+
module UikitRails
|
|
6
|
+
# Serves the component styleguide: index of installed components and live previews.
|
|
7
|
+
class StyleguideController < ActionController::Base
|
|
8
|
+
layout "uikit_rails/application"
|
|
9
|
+
|
|
10
|
+
def index
|
|
11
|
+
@components = installed_components
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def show
|
|
15
|
+
@component = params[:component]
|
|
16
|
+
@components = installed_components
|
|
17
|
+
|
|
18
|
+
unless @components.include?(@component)
|
|
19
|
+
redirect_to uikit_rails.root_path, alert: "Component '#{@component}' is not installed."
|
|
20
|
+
return
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
load_preview
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def installed_components
|
|
29
|
+
components_dir = Rails.root.join("app/components/ui")
|
|
30
|
+
return [] unless Dir.exist?(components_dir)
|
|
31
|
+
|
|
32
|
+
Dir.children(components_dir)
|
|
33
|
+
.select { |entry| File.directory?(components_dir.join(entry)) }
|
|
34
|
+
.sort
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def load_preview
|
|
38
|
+
preview_path = Rails.root.join("app/components/ui", @component, "preview.yml")
|
|
39
|
+
unless File.exist?(preview_path)
|
|
40
|
+
@sections = []
|
|
41
|
+
@description = nil
|
|
42
|
+
return
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
data = YAML.safe_load_file(preview_path, permitted_classes: [Symbol])
|
|
46
|
+
@description = data["description"]
|
|
47
|
+
@sections = parse_sections(data["sections"])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def parse_sections(sections)
|
|
51
|
+
(sections || []).map do |section|
|
|
52
|
+
{
|
|
53
|
+
title: section["title"],
|
|
54
|
+
examples: parse_examples(section["examples"])
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def parse_examples(examples)
|
|
60
|
+
(examples || []).map do |example|
|
|
61
|
+
code = example["code"].to_s.strip
|
|
62
|
+
{ title: example["title"], code: code, rendered: render_example(code) }
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def render_example(code)
|
|
67
|
+
render_to_string(inline: code, layout: false)
|
|
68
|
+
rescue StandardError => e
|
|
69
|
+
%(<span style="color:red">Render error: #{ERB::Util.html_escape(e.message)}</span>)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|