aeros 0.0.1

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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +230 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/stylesheets/aeros/application.css +15 -0
  6. data/app/assets/stylesheets/aeros/application.tailwind.css +7 -0
  7. data/app/assets/stylesheets/aeros/tailwind.css +1100 -0
  8. data/app/components/aeros/application_view_component.rb +75 -0
  9. data/app/components/aeros/button/component.rb +128 -0
  10. data/app/components/aeros/button/controller.js +7 -0
  11. data/app/components/aeros/card/component.html.erb +3 -0
  12. data/app/components/aeros/card/component.rb +7 -0
  13. data/app/components/aeros/dropdown/component.html.erb +26 -0
  14. data/app/components/aeros/dropdown/component.rb +66 -0
  15. data/app/components/aeros/empty/component.html.erb +12 -0
  16. data/app/components/aeros/empty/component.rb +5 -0
  17. data/app/components/aeros/form_builder.rb +71 -0
  18. data/app/components/aeros/input_password/component.html.erb +43 -0
  19. data/app/components/aeros/input_password/component.rb +6 -0
  20. data/app/components/aeros/input_password/controller.js +17 -0
  21. data/app/components/aeros/input_select/component.html.erb +43 -0
  22. data/app/components/aeros/input_select/component.rb +24 -0
  23. data/app/components/aeros/input_text/component.html.erb +25 -0
  24. data/app/components/aeros/input_text/component.rb +5 -0
  25. data/app/components/aeros/input_wrapper/component.html.erb +20 -0
  26. data/app/components/aeros/input_wrapper/component.rb +12 -0
  27. data/app/components/aeros/page/component.html.erb +24 -0
  28. data/app/components/aeros/page/component.rb +9 -0
  29. data/app/components/aeros/spinner/component.rb +55 -0
  30. data/app/components/aeros/table/component.html.erb +10 -0
  31. data/app/components/aeros/table/component.rb +64 -0
  32. data/app/controllers/aeros/application_controller.rb +4 -0
  33. data/app/controllers/aeros/showcase_controller.rb +4 -0
  34. data/app/helpers/aeros/application_helper.rb +16 -0
  35. data/app/javascript/aeros/application.js +3 -0
  36. data/app/javascript/aeros/controllers/application.js +5 -0
  37. data/app/javascript/aeros/controllers/index.js +5 -0
  38. data/app/javascript/aeros/controllers/loader.js +62 -0
  39. data/app/jobs/aeros/application_job.rb +4 -0
  40. data/app/models/aeros/application_record.rb +5 -0
  41. data/app/views/aeros/showcase/index.html.erb +1 -0
  42. data/app/views/layouts/aeros/application.html.erb +20 -0
  43. data/config/importmap.rb +15 -0
  44. data/config/routes.rb +3 -0
  45. data/lib/aeros/engine.rb +37 -0
  46. data/lib/aeros/engine_helpers.rb +44 -0
  47. data/lib/aeros/version.rb +3 -0
  48. data/lib/aeros.rb +9 -0
  49. data/lib/tasks/aeros_tasks.rake +21 -0
  50. metadata +220 -0
@@ -0,0 +1,55 @@
1
+ module Aeros::Spinner
2
+ class Component < ::Aeros::ApplicationViewComponent
3
+ option(:size, default: proc { :default })
4
+ option(:variant, default: proc { :default })
5
+ option(:css, optional: true)
6
+
7
+ style do
8
+ base do
9
+ %w[
10
+ relative
11
+ inset-0
12
+ pl-2
13
+ mr-0
14
+ w-5
15
+ h-5
16
+ before:content-['']
17
+ before:box-border
18
+ before:absolute
19
+ before:top-1/2
20
+ before:left-1/2
21
+ before:w-5
22
+ before:h-5
23
+ before:-mt-2
24
+ before:-ml-2
25
+ before:rounded-full
26
+ before:border-2
27
+ before:animate-spin
28
+ ]
29
+ end
30
+
31
+ variants do
32
+ size do
33
+ xs { "before:w-3 before:h-3 before:-mt-1.5 before:-ml-1.5" }
34
+ sm { "before:w-4 before:h-4 before:-mt-2 before:-ml-2" }
35
+ default { "before:w-5 before:h-5 before:-mt-2.5 before:-ml-2.5" }
36
+ lg { "before:w-6 before:h-6 before:-mt-3 before:-ml-3" }
37
+ xl { "before:w-8 before:h-8 before:-mt-4 before:-ml-4" }
38
+ end
39
+
40
+ variant do
41
+ white { "before:border-white/50 before:border-t-white" }
42
+ default { "before:border-gray-500/50 before:border-t-gray-500" }
43
+ primary { "before:border-default-500/50 before:border-t-default-500" }
44
+ secondary { "before:border-secondary/50 before:border-t-secondary" }
45
+ destructive { "before:border-destructive/50 before:border-t-destructive" }
46
+ black { "before:border-black/50 before:border-t-black" }
47
+ end
48
+ end
49
+ end
50
+
51
+ erb_template <<~ERB
52
+ <span class="<%= style(size:, variant:) %> <%= css %>"></span>
53
+ ERB
54
+ end
55
+ end
@@ -0,0 +1,10 @@
1
+ <div class="overflow-x-auto">
2
+ <table class="<%= table_classes %>" <%= "id=\"#{id}\"" if id %>>
3
+ <%= header if header? %>
4
+ <tbody class="bg-white divide-y divide-gray-200">
5
+ <% rows.each do |row| %>
6
+ <%= row %>
7
+ <% end %>
8
+ </tbody>
9
+ </table>
10
+ </div>
@@ -0,0 +1,64 @@
1
+ module Aeros::Table
2
+ class Component < ::Aeros::ApplicationViewComponent
3
+ option(:css, optional: true)
4
+ option(:id, optional: true)
5
+
6
+ renders_one :header, "HeaderComponent"
7
+ renders_many :rows, "RowComponent"
8
+
9
+ class HeaderComponent < Aeros::ApplicationViewComponent
10
+ renders_many :columns, "ColumnComponent"
11
+
12
+ class ColumnComponent < Aeros::ApplicationViewComponent
13
+ option(:css, optional: true)
14
+
15
+ erb_template <<~ERB
16
+ <th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider <%= css %>">
17
+ <%= content %>
18
+ </th>
19
+ ERB
20
+ end
21
+
22
+ erb_template <<~ERB
23
+ <thead class="bg-gray-50">
24
+ <tr>
25
+ <% columns.each do |column| %>
26
+ <%= column %>
27
+ <% end %>
28
+ </tr>
29
+ </thead>
30
+ ERB
31
+ end
32
+
33
+ class RowComponent < Aeros::ApplicationViewComponent
34
+ option(:css, optional: true)
35
+
36
+ renders_many :cells, "CellComponent"
37
+
38
+ class CellComponent < Aeros::ApplicationViewComponent
39
+ option(:css, optional: true)
40
+
41
+ erb_template <<~ERB
42
+ <td class="px-6 py-4 text-sm text-gray-900 <%= css %>">
43
+ <%= content %>
44
+ </td>
45
+ ERB
46
+ end
47
+
48
+ erb_template <<~ERB
49
+ <tr class="<%= css %>">
50
+ <% cells.each do |cell| %>
51
+ <%= cell %>
52
+ <% end %>
53
+ </tr>
54
+ ERB
55
+ end
56
+
57
+ def table_classes
58
+ [
59
+ "min-w-full divide-y divide-gray-200",
60
+ css
61
+ ].compact.join(" ")
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,4 @@
1
+ module Aeros
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Aeros
2
+ class ShowcaseController < ApplicationController
3
+ end
4
+ end
@@ -0,0 +1,16 @@
1
+ module Aeros
2
+ module ApplicationHelper
3
+ def sqema_importmap_tags(entry_point = "application", shim: true)
4
+ safe_join [
5
+ javascript_inline_importmap_tag(Aeros.importmap.to_json(resolver: self)),
6
+ javascript_importmap_module_preload_tags(Aeros.importmap),
7
+ javascript_import_module_tag(entry_point)
8
+ ].compact, "\n"
9
+ end
10
+
11
+ def ui(name, *args, **kwargs, &block)
12
+ component = "Aeros::#{name.to_s.camelize}::Component".constantize
13
+ render(component.new(*args, **kwargs), &block)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ // Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
2
+ import "@hotwired/turbo-rails";
3
+ import "aeros/controllers";
@@ -0,0 +1,5 @@
1
+ import { Application } from "@hotwired/stimulus";
2
+ const application = Application.start();
3
+ application.debug = false;
4
+ window.Stimulus = application;
5
+ export { application };
@@ -0,0 +1,5 @@
1
+ import { application } from "aeros/controllers/application";
2
+ import { eagerLoadEngineControllersFrom } from "aeros/controllers/loader";
3
+
4
+ // Load component controllers
5
+ eagerLoadEngineControllersFrom("aeros/components", application);
@@ -0,0 +1,62 @@
1
+ // Copied from @hotwired/stimulus-loading
2
+ function parseImportmapJson() {
3
+ return JSON.parse(document.querySelector("script[type=importmap]").text)
4
+ .imports;
5
+ }
6
+
7
+ function registerControllerFromPath(path, under, application) {
8
+ // Build Stimulus identifier from import path
9
+ // Extract namespace from the path (e.g., "aeros" from "aeros/components", "sqema" from "sqema/controllers")
10
+ const namespace = under.split("/")[0];
11
+ const pathType = under.split("/")[1]; // "components" or "controllers"
12
+
13
+ const withoutPrefix = path.replace(new RegExp(`^${under}/`), "");
14
+
15
+ let base;
16
+ if (pathType === "components") {
17
+ // Components: drop the last path segment ("controller" or "*_controller")
18
+ // - "aeros/components/button/controller" -> "aeros/button" -> "aeros--button"
19
+ // - "sqema/components/views/static/index/controller" -> "sqema/views/static/index" -> "sqema--views--static--index"
20
+ if (withoutPrefix.endsWith("/controller")) {
21
+ base = namespace + "/" + withoutPrefix.slice(0, -"/controller".length);
22
+ } else if (/\/[^/]+_controller$/.test(withoutPrefix)) {
23
+ base = namespace + "/" + withoutPrefix.replace(/\/[^/]+_controller$/, "");
24
+ } else if (/_controller$/.test(withoutPrefix)) {
25
+ // Fallback for flat files
26
+ base = namespace + "/" + withoutPrefix.replace(/_controller$/, "");
27
+ } else {
28
+ // Not a controller path we recognize
29
+ return;
30
+ }
31
+ } else if (pathType === "controllers") {
32
+ // Standard controllers: namespace--(controllername)
33
+ // - "sqema/controllers/hello_controller" -> "sqema/hello" -> "sqema--hello"
34
+ base = namespace + "/" + withoutPrefix.replace(/_controller$/, "");
35
+ } else {
36
+ return;
37
+ }
38
+
39
+ const name = base.replace(/\//g, "--").replace(/_/g, "-");
40
+ import(path)
41
+ .then((module) => {
42
+ if (module.default) {
43
+ application.register(name, module.default);
44
+ }
45
+ })
46
+ .catch((error) => {
47
+ console.error(`Failed to register controller: ${name} (${path})`, error);
48
+ });
49
+ }
50
+
51
+ function eagerLoadEngineControllersFrom(under, application) {
52
+ const paths = Object.keys(parseImportmapJson()).filter((path) =>
53
+ path.match(new RegExp(`^${under}/.+`)),
54
+ );
55
+ paths.forEach((path) => {
56
+ if (path.endsWith("_controller") || path.endsWith("/controller")) {
57
+ registerControllerFromPath(path, under, application);
58
+ }
59
+ });
60
+ }
61
+
62
+ export { eagerLoadEngineControllersFrom };
@@ -0,0 +1,4 @@
1
+ module Aeros
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module Aeros
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ <%= ui("button", label: "ok") %>
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Aeros</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= yield :head %>
9
+
10
+ <script src="https://cdn.jsdelivr.net/npm/@tailwindplus/elements@1" type="module"></script>
11
+ <%= stylesheet_link_tag "aeros/application", media: "all" %>
12
+ <%= stylesheet_link_tag "aeros/tailwind", media: "all" %>
13
+ <%= javascript_importmap_tags "aeros/application", importmap: Aeros.importmap %>
14
+ </head>
15
+ <body>
16
+
17
+ <%= yield %>
18
+
19
+ </body>
20
+ </html>
@@ -0,0 +1,15 @@
1
+ pin "@hotwired/turbo-rails", to: "turbo.min.js"
2
+ pin "aeros/application"
3
+ pin "@hotwired/stimulus", to: "stimulus.min.js"
4
+ pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
5
+
6
+ pin_all_from(
7
+ Aeros::Engine.root.join("app/javascript/aeros/controllers"),
8
+ under: "aeros/controllers",
9
+ )
10
+
11
+ pin_all_from(
12
+ Aeros::Engine.root.join("app/components/aeros"),
13
+ under: "aeros/components",
14
+ to: "aeros"
15
+ )
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Aeros::Engine.routes.draw do
2
+ root(to: "showcase#index")
3
+ end
@@ -0,0 +1,37 @@
1
+ require "importmap-rails"
2
+ require "view_component-contrib"
3
+ require "dry-effects"
4
+ require "tailwind_merge"
5
+
6
+ module Aeros
7
+ class << self
8
+ attr_accessor :importmap
9
+ end
10
+
11
+ class Engine < ::Rails::Engine
12
+ isolate_namespace Aeros
13
+
14
+ # Support both Propshaft and Sprockets
15
+ initializer "aeros.assets" do |app|
16
+ if app.config.respond_to?(:assets)
17
+ app.config.assets.paths << root.join("app/javascript")
18
+ app.config.assets.paths << root.join("app/components")
19
+ end
20
+ end
21
+
22
+ initializer "aeros.importmap", before: "importmap" do |app|
23
+ Aeros.importmap = Importmap::Map.new
24
+ Aeros.importmap.draw(app.root.join("config/importmap.rb"))
25
+ Aeros.importmap.draw(root.join("config/importmap.rb"))
26
+ Aeros.importmap.cache_sweeper(watches: root.join("app/components"))
27
+
28
+ if app.config.respond_to?(:importmap)
29
+ app.config.importmap.paths << root.join("config/importmap.rb")
30
+ end
31
+
32
+ ActiveSupport.on_load(:action_controller_base) do
33
+ before_action { Aeros.importmap.cache_sweeper.execute_if_updated }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,44 @@
1
+ module Aeros
2
+ module EngineHelpers
3
+ # Sets up importmap for a Rails engine with Aeros gem integration
4
+ #
5
+ # Usage in your engine.rb:
6
+ # module YourEngine
7
+ # class << self
8
+ # attr_accessor :importmap
9
+ # end
10
+ #
11
+ # class Engine < ::Rails::Engine
12
+ # Aeros::EngineHelpers.setup_importmap(self, namespace: YourEngine)
13
+ # end
14
+ # end
15
+ def self.setup_importmap(engine_class, namespace:)
16
+ engine_class.initializer "#{namespace.name.underscore}.importmap", before: "importmap" do |app|
17
+ namespace.importmap = Importmap::Map.new
18
+ namespace.importmap.draw(app.root.join("config/importmap.rb"))
19
+ namespace.importmap.draw(engine_class.root.join("config/importmap.rb"))
20
+ namespace.importmap.draw(Aeros::Engine.root.join("config/importmap.rb"))
21
+ namespace.importmap.cache_sweeper(watches: engine_class.root.join("app/javascript"))
22
+ namespace.importmap.cache_sweeper(watches: engine_class.root.join("app/components"))
23
+
24
+ if app.config.respond_to?(:importmap)
25
+ app.config.importmap.paths << engine_class.root.join("config/importmap.rb")
26
+ end
27
+
28
+ ActiveSupport.on_load(:action_controller_base) do
29
+ before_action { namespace.importmap.cache_sweeper.execute_if_updated }
30
+ end
31
+ end
32
+ end
33
+
34
+ # Sets up asset paths for a Rails engine
35
+ def self.setup_assets(engine_class, namespace:)
36
+ engine_class.initializer "#{namespace.name.underscore}.assets" do |app|
37
+ if app.config.respond_to?(:assets)
38
+ app.config.assets.paths << engine_class.root.join("app/javascript")
39
+ app.config.assets.paths << engine_class.root.join("app/components")
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module Aeros
2
+ VERSION = "0.0.1"
3
+ end
data/lib/aeros.rb ADDED
@@ -0,0 +1,9 @@
1
+ require "aeros/version"
2
+ require "aeros/engine"
3
+ require "aeros/engine_helpers"
4
+
5
+ module Aeros
6
+ class << self
7
+ attr_accessor :importmap
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ # desc "Explaining what the task does"
2
+ namespace :aeros do
3
+ desc "run tailwind"
4
+ task :tailwind_engine_watch do
5
+ require "tailwindcss-rails"
6
+
7
+ command = [
8
+ Tailwindcss::Commands.compile_command.first,
9
+ "-i", Aeros::Engine.root.join("app/assets/stylesheets/aeros/application.tailwind.css").to_s,
10
+ "-o", Aeros::Engine.root.join("app/assets/stylesheets/aeros/tailwind.css").to_s,
11
+ "-w",
12
+ "--content", [
13
+ Aeros::Engine.root.join("app/components/**/*.rb").to_s,
14
+ Aeros::Engine.root.join("app/components/**/*.erb").to_s
15
+ ].join(",")
16
+ ]
17
+
18
+ p command
19
+ system(*command)
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aeros
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ben
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rails
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 8.0.3
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 8.0.3
26
+ - !ruby/object:Gem::Dependency
27
+ name: importmap-rails
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.2
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 2.2.2
40
+ - !ruby/object:Gem::Dependency
41
+ name: turbo-rails
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: stimulus-rails
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.3'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.3'
68
+ - !ruby/object:Gem::Dependency
69
+ name: tailwindcss-rails
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 4.3.0
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 4.3.0
82
+ - !ruby/object:Gem::Dependency
83
+ name: view_component
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '4.0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '4.0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: view_component-contrib
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.5
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.2.5
110
+ - !ruby/object:Gem::Dependency
111
+ name: dry-effects
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.5.0
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.5.0
124
+ - !ruby/object:Gem::Dependency
125
+ name: tailwind_merge
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.3'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.3'
138
+ description: A Rails engine providing ViewComponent-based UI components with Tailwind
139
+ CSS styling and Stimulus controllers. Includes convenience helpers for easy integration
140
+ into Rails engines.
141
+ email:
142
+ - ben@dee.mx
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - MIT-LICENSE
148
+ - README.md
149
+ - Rakefile
150
+ - app/assets/stylesheets/aeros/application.css
151
+ - app/assets/stylesheets/aeros/application.tailwind.css
152
+ - app/assets/stylesheets/aeros/tailwind.css
153
+ - app/components/aeros/application_view_component.rb
154
+ - app/components/aeros/button/component.rb
155
+ - app/components/aeros/button/controller.js
156
+ - app/components/aeros/card/component.html.erb
157
+ - app/components/aeros/card/component.rb
158
+ - app/components/aeros/dropdown/component.html.erb
159
+ - app/components/aeros/dropdown/component.rb
160
+ - app/components/aeros/empty/component.html.erb
161
+ - app/components/aeros/empty/component.rb
162
+ - app/components/aeros/form_builder.rb
163
+ - app/components/aeros/input_password/component.html.erb
164
+ - app/components/aeros/input_password/component.rb
165
+ - app/components/aeros/input_password/controller.js
166
+ - app/components/aeros/input_select/component.html.erb
167
+ - app/components/aeros/input_select/component.rb
168
+ - app/components/aeros/input_text/component.html.erb
169
+ - app/components/aeros/input_text/component.rb
170
+ - app/components/aeros/input_wrapper/component.html.erb
171
+ - app/components/aeros/input_wrapper/component.rb
172
+ - app/components/aeros/page/component.html.erb
173
+ - app/components/aeros/page/component.rb
174
+ - app/components/aeros/spinner/component.rb
175
+ - app/components/aeros/table/component.html.erb
176
+ - app/components/aeros/table/component.rb
177
+ - app/controllers/aeros/application_controller.rb
178
+ - app/controllers/aeros/showcase_controller.rb
179
+ - app/helpers/aeros/application_helper.rb
180
+ - app/javascript/aeros/application.js
181
+ - app/javascript/aeros/controllers/application.js
182
+ - app/javascript/aeros/controllers/index.js
183
+ - app/javascript/aeros/controllers/loader.js
184
+ - app/jobs/aeros/application_job.rb
185
+ - app/models/aeros/application_record.rb
186
+ - app/views/aeros/showcase/index.html.erb
187
+ - app/views/layouts/aeros/application.html.erb
188
+ - config/importmap.rb
189
+ - config/routes.rb
190
+ - lib/aeros.rb
191
+ - lib/aeros/engine.rb
192
+ - lib/aeros/engine_helpers.rb
193
+ - lib/aeros/version.rb
194
+ - lib/tasks/aeros_tasks.rake
195
+ homepage: https://github.com/getnvoi/ui
196
+ licenses:
197
+ - MIT
198
+ metadata:
199
+ homepage_uri: https://github.com/getnvoi/ui
200
+ source_code_uri: https://github.com/getnvoi/ui
201
+ changelog_uri: https://github.com/getnvoi/ui/blob/main/CHANGELOG.md
202
+ rubygems_mfa_required: 'true'
203
+ rdoc_options: []
204
+ require_paths:
205
+ - lib
206
+ required_ruby_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ required_rubygems_version: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ requirements: []
217
+ rubygems_version: 3.6.9
218
+ specification_version: 4
219
+ summary: Rails engine providing reusable UI components with Tailwind CSS and Stimulus
220
+ test_files: []