phlex_kit 0.2.2 → 0.3.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -4
  3. data/config/importmap.rb +17 -3
  4. data/lib/generators/phlex_kit/component/component_generator.rb +42 -10
  5. data/lib/phlex_kit/engine.rb +7 -2
  6. data/lib/phlex_kit/version.rb +1 -1
  7. metadata +39 -39
  8. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/accordion}/accordion_controller.js +0 -0
  9. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/alert_dialog}/alert_dialog_controller.js +0 -0
  10. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/attachment}/scroll_fade_controller.js +0 -0
  11. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/avatar}/avatar_controller.js +0 -0
  12. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/calendar}/calendar_controller.js +0 -0
  13. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/calendar}/calendar_input_controller.js +0 -0
  14. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/carousel}/carousel_controller.js +0 -0
  15. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/chart}/chart_controller.js +0 -0
  16. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/clipboard}/clipboard_controller.js +0 -0
  17. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/collapsible}/collapsible_controller.js +0 -0
  18. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/combobox}/combobox_controller.js +0 -0
  19. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/command}/command_controller.js +0 -0
  20. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/command}/command_dialog_controller.js +0 -0
  21. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/context_menu}/context_menu_controller.js +0 -0
  22. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_column_visibility_controller.js +0 -0
  23. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_controller.js +0 -0
  24. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_search_controller.js +0 -0
  25. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/dialog}/dialog_controller.js +0 -0
  26. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/dropdown_menu}/dropdown_menu_controller.js +0 -0
  27. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/form_field}/form_field_controller.js +0 -0
  28. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/hover_card}/hover_card_controller.js +0 -0
  29. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/input_otp}/input_otp_controller.js +0 -0
  30. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/masked_input}/masked_input_controller.js +0 -0
  31. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/menubar}/menubar_controller.js +0 -0
  32. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/message_scroller}/message_scroller_controller.js +0 -0
  33. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/popover}/popover_controller.js +0 -0
  34. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/resizable}/resizable_controller.js +0 -0
  35. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/select}/select_controller.js +0 -0
  36. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/select}/select_item_controller.js +0 -0
  37. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/sheet}/sheet_content_controller.js +0 -0
  38. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/sheet}/sheet_controller.js +0 -0
  39. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/slider}/slider_controller.js +0 -0
  40. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/tabs}/tabs_controller.js +0 -0
  41. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/theme_toggle}/theme_toggle_controller.js +0 -0
  42. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toast}/toast_controller.js +0 -0
  43. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toast}/toaster_controller.js +0 -0
  44. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toggle}/toggle_controller.js +0 -0
  45. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toggle_group}/toggle_group_controller.js +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f6988a4f8e3f47462f9f83824ed6542cafded9d656adb10340e7eb618156063
4
- data.tar.gz: ca293b01074cfa84962df3c80683e3df5ae36cf5a919b1e8c0bcd1861948b52c
3
+ metadata.gz: c45b2de6be65de34864a76e477a59011047aedbcd60622748301fba338ab61bf
4
+ data.tar.gz: 91d2611e8b3d7aaecaae5a123065efaac66e53ae67a8c60d8b4264bba8cbb34c
5
5
  SHA512:
6
- metadata.gz: fd26ed3b6aef6bf015c7fbdf574516a68e8eb10fe1cfe1356a4292420d01917977428d2b35a301b65e6a8ff19c73daf5ac9ffdfb9af6abae6f96afd4818d7c81
7
- data.tar.gz: 6d6c3d42730c2ce500a6f8c8e49afab8e11ec192f87bf9d87434761d334b40e1a762cc157ad7b38b2914edbffeae9fea501235f1cdc0ec6937c88a8f843399fa
6
+ metadata.gz: 2528e616b1d5d55ee66f8089cb016207e505601e2be03cca6e9f706f4c68c29622414e9fcd96717354222e142c570806dc85290842eff2570e3d2120f7cc97ce
7
+ data.tar.gz: 9c218687c79045dc1cf070b40b37f4706fb023c878a142a86c5c2f05cd88f99516a81f00d5cb382d97aae2c9b48dc8c7e0a680f4b43a09146a5a8bcddde3668f
data/README.md CHANGED
@@ -9,6 +9,12 @@ instead of Tailwind**. The full [ruby_ui](https://ruby-ui.com) catalog plus
9
9
  shadcn's own additions — 70 component families, 38 Stimulus controllers —
10
10
  with the default theme lifted verbatim from shadcn/ui's current token system.
11
11
 
12
+ ![The docs site's /create page — shadcn/ui's theme-builder demo rebuilt entirely from PhlexKit components](docs/images/create-page.png)
13
+
14
+ *Every pixel above is PhlexKit: [shadcn's /create demo](https://ui.shadcn.com/create)
15
+ rebuilt in the dummy app from kit components — cards, charts, sliders,
16
+ switches, nav menu, command palette — at `/create` in [the docs site](#the-docs-site).*
17
+
12
18
  - **No build step.** Components are plain Ruby classes with co-located vanilla
13
19
  CSS, served precompiled-static through Propshaft. No Tailwind, no Node, no
14
20
  PostCSS.
@@ -52,6 +58,11 @@ registerPhlexKitControllers(application)
52
58
 
53
59
  That's it — no Tailwind config, no content globs, no bundler.
54
60
 
61
+ For a full step-by-step walkthrough on the default Propshaft + importmap stack —
62
+ including how the `@import` chain and the Stimulus registration wire up, and how
63
+ to verify the install — see
64
+ [docs/05-PROPSHAFT-INSTALL.md](docs/05-PROPSHAFT-INSTALL.md).
65
+
55
66
  ## Usage
56
67
 
57
68
  ```ruby
@@ -207,8 +218,14 @@ Want to own and edit a component's source? Eject it into your app:
207
218
  bin/rails g phlex_kit:component button
208
219
  ```
209
220
 
210
- This copies `button.rb` + `button.css` into `app/components/phlex_kit/button/`
211
- and wires its `@import`. Your copy shadows the gem's.
221
+ This copies the whole component folder — `button.rb` (+ any parts), `button.css`,
222
+ and, for interactive components, `button_controller.js` into
223
+ `app/components/phlex_kit/button/`, prepends its `@import`, and wires
224
+ `config/application.rb` once so your copy fully shadows the gem's — **Ruby, CSS,
225
+ and JS**. (It Zeitwerk-collapses the folder so `button/button.rb` autoloads as
226
+ `PhlexKit::Button`, and puts `app/components` ahead of the gem on Propshaft's
227
+ asset path so the ejected CSS/JS resolve to your copy, not the gem's.) Re-running
228
+ for another component reuses the same wiring — it's injected only once.
212
229
 
213
230
  ## The docs site
214
231
 
@@ -278,8 +295,9 @@ fully mirrored overlay alignment in RTL may need small host-side overrides.
278
295
  Four engine initializers make the zero-build story hold:
279
296
 
280
297
  1. `app/components`, the stylesheet dir, and `app/javascript` go on
281
- Propshaft's load path, so CSS sits beside each `.rb` and the importmap pins
282
- resolve.
298
+ Propshaft's load path, so each component's `.css` and `_controller.js` sit
299
+ beside its `.rb` and the importmap pins resolve (`app/javascript` still serves
300
+ the central `controllers/index.js` registry).
283
301
  2. Component folders are Zeitwerk-`collapse`d, so `button/button.rb` is
284
302
  `PhlexKit::Button` and `card/card_header.rb` is `PhlexKit::CardHeader`.
285
303
  3. A guard keeps Propshaft from serving Ruby source out of `public/assets/`.
data/config/importmap.rb CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  # Pins the PhlexKit Stimulus controllers so importmap-rails hosts can register
4
4
  # them. The engine appends this file to the host's importmap paths.
5
- pin_all_from PhlexKit::Engine.root.join("app/javascript/phlex_kit/controllers"),
6
- under: "phlex_kit/controllers",
7
- to: "phlex_kit/controllers"
5
+ #
6
+ # Each controller is co-located with its component under
7
+ # app/components/phlex_kit/<name>/<name>_controller.js, but we keep the flat
8
+ # `phlex_kit/controllers/*` module namespace stable so index.js imports and the
9
+ # host-facing API (`import … from "phlex_kit/controllers"`) never change. Basenames
10
+ # are globally unique, so the flat module IDs don't collide. app/components is
11
+ # already on the asset path (see Engine), so these logical paths resolve and
12
+ # get fingerprinted.
13
+ components_root = PhlexKit::Engine.root.join("app/components")
14
+ Dir.glob(components_root.join("phlex_kit/*/*_controller.js")).sort.each do |path|
15
+ name = File.basename(path, ".js") # e.g. "button_controller"
16
+ logical = path.sub("#{components_root}/", "") # e.g. "phlex_kit/button/button_controller.js"
17
+ pin "phlex_kit/controllers/#{name}", to: logical
18
+ end
19
+
20
+ # The aggregator that hosts import from ("phlex_kit/controllers"); stays central.
21
+ pin "phlex_kit/controllers", to: "phlex_kit/controllers/index.js"
@@ -5,13 +5,17 @@ require "rails/generators/named_base"
5
5
  module PhlexKit
6
6
  module Generators
7
7
  # `rails g phlex_kit:component button` — the shadcn-style "eject": copies a
8
- # component's folder (.rb parts + co-located .css) out of the gem and into the
9
- # host app so the team owns and can edit the source. Appends its @import to
10
- # application.css. The ejected copy keeps the PhlexKit namespace; the host's
11
- # copy shadows the gem's via Zeitwerk load-path order.
8
+ # component's folder (.rb parts + co-located .css + _controller.js) out of the
9
+ # gem and into the host app so the team owns and can edit the source. Appends
10
+ # its @import to application.css and wires config/application.rb (once) so the
11
+ # ejected copy fully shadows the gem's Ruby, CSS, and JS alike.
12
12
  class ComponentGenerator < Rails::Generators::NamedBase
13
13
  source_root PhlexKit::Engine.root.join("app/components/phlex_kit").to_s
14
14
 
15
+ # Marker that `wire_host_app` is idempotent against — presence means an
16
+ # earlier eject already wired config/application.rb.
17
+ COLLAPSE_LINE = %(Rails.autoloaders.main.collapse(Rails.root.join("app/components/phlex_kit/*")))
18
+
15
19
  def eject_component
16
20
  unless File.directory?(File.join(self.class.source_root, file_name))
17
21
  say_status :error, "no PhlexKit component named '#{file_name}'", :red
@@ -27,14 +31,42 @@ module PhlexKit
27
31
  prepend_to_file(css, line) unless File.read(css).include?(line.strip)
28
32
  end
29
33
 
30
- def remind_collapse
31
- say <<~MSG
32
- Ejected phlex_kit/#{file_name}. Ensure your app collapses ejected
33
- component folders (config/application.rb):
34
+ # Make an ejected component fully editable, in one step. Two things are
35
+ # needed and neither is on by default in a host app:
36
+ # 1. Zeitwerk collapse so app/components/phlex_kit/button/button.rb
37
+ # autoloads as PhlexKit::Button (not ::Button::Button). Fixes Ruby.
38
+ # 2. Host app/components ahead of the gem on Propshaft's asset path — so
39
+ # the ejected <name>.css and <name>_controller.js resolve to the host
40
+ # copy instead of the gem's. Without this the Ruby shadows but the CSS
41
+ # and JS silently keep serving the gem's originals.
42
+ # Injected once (idempotent) right after config.load_defaults, where
43
+ # config.assets is available.
44
+ def wire_host_app
45
+ app_rb = "config/application.rb"
46
+ unless File.exist?(app_rb)
47
+ say_status :skip, "#{app_rb} not found — wire ejected components manually (see docs/05-PROPSHAFT-INSTALL.md)", :yellow
48
+ return
49
+ end
50
+ if File.read(app_rb).include?(COLLAPSE_LINE)
51
+ say_status :identical, "#{app_rb} already wired for ejected components", :blue
52
+ return
53
+ end
54
+ inject_into_file app_rb, after: /^\s*config\.load_defaults.*\n/ do
55
+ # Indent only non-empty lines so the blank separator carries no trailing space.
56
+ <<~RUBY.gsub(/^(?=.)/, " ")
34
57
 
35
- Rails.autoloaders.main.collapse("app/components/phlex_kit/*")
58
+ # PhlexKit: make ejected components under app/components/phlex_kit/
59
+ # fully editable — collapse so <name>/<name>.rb autoloads as
60
+ # PhlexKit::<Name>, and put the dir ahead of the gem on the asset path
61
+ # so the ejected <name>.css and <name>_controller.js shadow the gem's.
62
+ #{COLLAPSE_LINE}
63
+ config.assets.paths.unshift(Rails.root.join("app/components"))
64
+ RUBY
65
+ end
66
+ end
36
67
 
37
- MSG
68
+ def confirm
69
+ say_status :phlex_kit, "ejected phlex_kit/#{file_name} — your copy now shadows the gem (Ruby, CSS, JS)", :green
38
70
  end
39
71
  end
40
72
  end
@@ -14,8 +14,10 @@ module PhlexKit
14
14
  if app.config.respond_to?(:assets)
15
15
  app.config.assets.paths << root.join("app/components")
16
16
  app.config.assets.paths << root.join("app/assets/stylesheets")
17
- # The Stimulus controllers must be servable too, or every importmap pin
18
- # from (4) resolves to a missing asset and gets silently skipped.
17
+ # The Stimulus controllers are co-located under app/components (served via
18
+ # the path above); this keeps the central registry (controllers/index.js)
19
+ # servable too, or the "phlex_kit/controllers" pin from (4) resolves to a
20
+ # missing asset and gets silently skipped.
19
21
  app.config.assets.paths << root.join("app/javascript")
20
22
  end
21
23
  end
@@ -38,6 +40,9 @@ module PhlexKit
38
40
  initializer "phlex_kit.importmap", before: "importmap" do |app|
39
41
  if app.respond_to?(:config) && app.config.respond_to?(:importmap)
40
42
  app.config.importmap.paths << root.join("config/importmap.rb")
43
+ # Colocated controllers change under app/components; the central registry
44
+ # lives under app/javascript. Sweep both so edits bust the importmap cache.
45
+ app.config.importmap.cache_sweepers << root.join("app/components")
41
46
  app.config.importmap.cache_sweepers << root.join("app/javascript")
42
47
  end
43
48
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PhlexKit
4
- VERSION = "0.2.2"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlex_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Kennedy
@@ -126,6 +126,7 @@ files:
126
126
  - app/components/phlex_kit/accordion/accordion.css
127
127
  - app/components/phlex_kit/accordion/accordion.rb
128
128
  - app/components/phlex_kit/accordion/accordion_content.rb
129
+ - app/components/phlex_kit/accordion/accordion_controller.js
129
130
  - app/components/phlex_kit/accordion/accordion_default_content.rb
130
131
  - app/components/phlex_kit/accordion/accordion_default_trigger.rb
131
132
  - app/components/phlex_kit/accordion/accordion_icon.rb
@@ -140,6 +141,7 @@ files:
140
141
  - app/components/phlex_kit/alert_dialog/alert_dialog_action.rb
141
142
  - app/components/phlex_kit/alert_dialog/alert_dialog_cancel.rb
142
143
  - app/components/phlex_kit/alert_dialog/alert_dialog_content.rb
144
+ - app/components/phlex_kit/alert_dialog/alert_dialog_controller.js
143
145
  - app/components/phlex_kit/alert_dialog/alert_dialog_description.rb
144
146
  - app/components/phlex_kit/alert_dialog/alert_dialog_footer.rb
145
147
  - app/components/phlex_kit/alert_dialog/alert_dialog_header.rb
@@ -158,8 +160,10 @@ files:
158
160
  - app/components/phlex_kit/attachment/attachment_media.rb
159
161
  - app/components/phlex_kit/attachment/attachment_title.rb
160
162
  - app/components/phlex_kit/attachment/attachment_trigger.rb
163
+ - app/components/phlex_kit/attachment/scroll_fade_controller.js
161
164
  - app/components/phlex_kit/avatar/avatar.css
162
165
  - app/components/phlex_kit/avatar/avatar.rb
166
+ - app/components/phlex_kit/avatar/avatar_controller.js
163
167
  - app/components/phlex_kit/avatar/avatar_fallback.rb
164
168
  - app/components/phlex_kit/avatar/avatar_group.rb
165
169
  - app/components/phlex_kit/avatar/avatar_image.rb
@@ -185,8 +189,10 @@ files:
185
189
  - app/components/phlex_kit/calendar/calendar.css
186
190
  - app/components/phlex_kit/calendar/calendar.rb
187
191
  - app/components/phlex_kit/calendar/calendar_body.rb
192
+ - app/components/phlex_kit/calendar/calendar_controller.js
188
193
  - app/components/phlex_kit/calendar/calendar_days.rb
189
194
  - app/components/phlex_kit/calendar/calendar_header.rb
195
+ - app/components/phlex_kit/calendar/calendar_input_controller.js
190
196
  - app/components/phlex_kit/calendar/calendar_next.rb
191
197
  - app/components/phlex_kit/calendar/calendar_prev.rb
192
198
  - app/components/phlex_kit/calendar/calendar_title.rb
@@ -202,15 +208,18 @@ files:
202
208
  - app/components/phlex_kit/carousel/carousel.css
203
209
  - app/components/phlex_kit/carousel/carousel.rb
204
210
  - app/components/phlex_kit/carousel/carousel_content.rb
211
+ - app/components/phlex_kit/carousel/carousel_controller.js
205
212
  - app/components/phlex_kit/carousel/carousel_item.rb
206
213
  - app/components/phlex_kit/carousel/carousel_next.rb
207
214
  - app/components/phlex_kit/carousel/carousel_previous.rb
208
215
  - app/components/phlex_kit/chart/chart.css
209
216
  - app/components/phlex_kit/chart/chart.rb
217
+ - app/components/phlex_kit/chart/chart_controller.js
210
218
  - app/components/phlex_kit/checkbox/checkbox.css
211
219
  - app/components/phlex_kit/checkbox/checkbox.rb
212
220
  - app/components/phlex_kit/clipboard/clipboard.css
213
221
  - app/components/phlex_kit/clipboard/clipboard.rb
222
+ - app/components/phlex_kit/clipboard/clipboard_controller.js
214
223
  - app/components/phlex_kit/clipboard/clipboard_popover.rb
215
224
  - app/components/phlex_kit/clipboard/clipboard_source.rb
216
225
  - app/components/phlex_kit/clipboard/clipboard_trigger.rb
@@ -219,6 +228,7 @@ files:
219
228
  - app/components/phlex_kit/collapsible/collapsible.css
220
229
  - app/components/phlex_kit/collapsible/collapsible.rb
221
230
  - app/components/phlex_kit/collapsible/collapsible_content.rb
231
+ - app/components/phlex_kit/collapsible/collapsible_controller.js
222
232
  - app/components/phlex_kit/collapsible/collapsible_trigger.rb
223
233
  - app/components/phlex_kit/combobox/combobox.css
224
234
  - app/components/phlex_kit/combobox/combobox.rb
@@ -226,6 +236,7 @@ files:
226
236
  - app/components/phlex_kit/combobox/combobox_badge_trigger.rb
227
237
  - app/components/phlex_kit/combobox/combobox_checkbox.rb
228
238
  - app/components/phlex_kit/combobox/combobox_clear_button.rb
239
+ - app/components/phlex_kit/combobox/combobox_controller.js
229
240
  - app/components/phlex_kit/combobox/combobox_empty_state.rb
230
241
  - app/components/phlex_kit/combobox/combobox_input_trigger.rb
231
242
  - app/components/phlex_kit/combobox/combobox_item.rb
@@ -239,8 +250,10 @@ files:
239
250
  - app/components/phlex_kit/combobox/combobox_trigger.rb
240
251
  - app/components/phlex_kit/command/command.css
241
252
  - app/components/phlex_kit/command/command.rb
253
+ - app/components/phlex_kit/command/command_controller.js
242
254
  - app/components/phlex_kit/command/command_dialog.rb
243
255
  - app/components/phlex_kit/command/command_dialog_content.rb
256
+ - app/components/phlex_kit/command/command_dialog_controller.js
244
257
  - app/components/phlex_kit/command/command_dialog_trigger.rb
245
258
  - app/components/phlex_kit/command/command_empty.rb
246
259
  - app/components/phlex_kit/command/command_group.rb
@@ -250,6 +263,7 @@ files:
250
263
  - app/components/phlex_kit/context_menu/context_menu.css
251
264
  - app/components/phlex_kit/context_menu/context_menu.rb
252
265
  - app/components/phlex_kit/context_menu/context_menu_content.rb
266
+ - app/components/phlex_kit/context_menu/context_menu_controller.js
253
267
  - app/components/phlex_kit/context_menu/context_menu_item.rb
254
268
  - app/components/phlex_kit/context_menu/context_menu_label.rb
255
269
  - app/components/phlex_kit/context_menu/context_menu_separator.rb
@@ -258,6 +272,8 @@ files:
258
272
  - app/components/phlex_kit/data_table/data_table.rb
259
273
  - app/components/phlex_kit/data_table/data_table_bulk_actions.rb
260
274
  - app/components/phlex_kit/data_table/data_table_column_toggle.rb
275
+ - app/components/phlex_kit/data_table/data_table_column_visibility_controller.js
276
+ - app/components/phlex_kit/data_table/data_table_controller.js
261
277
  - app/components/phlex_kit/data_table/data_table_expand_toggle.rb
262
278
  - app/components/phlex_kit/data_table/data_table_form.rb
263
279
  - app/components/phlex_kit/data_table/data_table_kaminari_adapter.rb
@@ -268,6 +284,7 @@ files:
268
284
  - app/components/phlex_kit/data_table/data_table_per_page_select.rb
269
285
  - app/components/phlex_kit/data_table/data_table_row_checkbox.rb
270
286
  - app/components/phlex_kit/data_table/data_table_search.rb
287
+ - app/components/phlex_kit/data_table/data_table_search_controller.js
271
288
  - app/components/phlex_kit/data_table/data_table_select_all_checkbox.rb
272
289
  - app/components/phlex_kit/data_table/data_table_selection_summary.rb
273
290
  - app/components/phlex_kit/data_table/data_table_sort_head.rb
@@ -277,6 +294,7 @@ files:
277
294
  - app/components/phlex_kit/dialog/dialog.css
278
295
  - app/components/phlex_kit/dialog/dialog.rb
279
296
  - app/components/phlex_kit/dialog/dialog_content.rb
297
+ - app/components/phlex_kit/dialog/dialog_controller.js
280
298
  - app/components/phlex_kit/dialog/dialog_description.rb
281
299
  - app/components/phlex_kit/dialog/dialog_footer.rb
282
300
  - app/components/phlex_kit/dialog/dialog_header.rb
@@ -296,6 +314,7 @@ files:
296
314
  - app/components/phlex_kit/dropdown_menu/dropdown_menu.rb
297
315
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_checkbox_item.rb
298
316
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_content.rb
317
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_controller.js
299
318
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_group.rb
300
319
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_item.rb
301
320
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_label.rb
@@ -318,12 +337,14 @@ files:
318
337
  - app/components/phlex_kit/form/form.rb
319
338
  - app/components/phlex_kit/form_field/form_field.css
320
339
  - app/components/phlex_kit/form_field/form_field.rb
340
+ - app/components/phlex_kit/form_field/form_field_controller.js
321
341
  - app/components/phlex_kit/form_field/form_field_error.rb
322
342
  - app/components/phlex_kit/form_field/form_field_hint.rb
323
343
  - app/components/phlex_kit/form_field/form_field_label.rb
324
344
  - app/components/phlex_kit/hover_card/hover_card.css
325
345
  - app/components/phlex_kit/hover_card/hover_card.rb
326
346
  - app/components/phlex_kit/hover_card/hover_card_content.rb
347
+ - app/components/phlex_kit/hover_card/hover_card_controller.js
327
348
  - app/components/phlex_kit/hover_card/hover_card_trigger.rb
328
349
  - app/components/phlex_kit/icon/icon.rb
329
350
  - app/components/phlex_kit/input/input.css
@@ -334,6 +355,7 @@ files:
334
355
  - app/components/phlex_kit/input_group/input_group_text.rb
335
356
  - app/components/phlex_kit/input_otp/input_otp.css
336
357
  - app/components/phlex_kit/input_otp/input_otp.rb
358
+ - app/components/phlex_kit/input_otp/input_otp_controller.js
337
359
  - app/components/phlex_kit/input_otp/input_otp_group.rb
338
360
  - app/components/phlex_kit/input_otp/input_otp_separator.rb
339
361
  - app/components/phlex_kit/input_otp/input_otp_slot.rb
@@ -357,9 +379,11 @@ files:
357
379
  - app/components/phlex_kit/marker/marker_content.rb
358
380
  - app/components/phlex_kit/marker/marker_icon.rb
359
381
  - app/components/phlex_kit/masked_input/masked_input.rb
382
+ - app/components/phlex_kit/masked_input/masked_input_controller.js
360
383
  - app/components/phlex_kit/menubar/menubar.css
361
384
  - app/components/phlex_kit/menubar/menubar.rb
362
385
  - app/components/phlex_kit/menubar/menubar_content.rb
386
+ - app/components/phlex_kit/menubar/menubar_controller.js
363
387
  - app/components/phlex_kit/menubar/menubar_item.rb
364
388
  - app/components/phlex_kit/menubar/menubar_menu.rb
365
389
  - app/components/phlex_kit/menubar/menubar_separator.rb
@@ -373,6 +397,7 @@ files:
373
397
  - app/components/phlex_kit/message/message_header.rb
374
398
  - app/components/phlex_kit/message_scroller/message_scroller.css
375
399
  - app/components/phlex_kit/message_scroller/message_scroller.rb
400
+ - app/components/phlex_kit/message_scroller/message_scroller_controller.js
376
401
  - app/components/phlex_kit/native_select/native_select.css
377
402
  - app/components/phlex_kit/native_select/native_select.rb
378
403
  - app/components/phlex_kit/native_select/native_select_group.rb
@@ -393,6 +418,7 @@ files:
393
418
  - app/components/phlex_kit/popover/popover.css
394
419
  - app/components/phlex_kit/popover/popover.rb
395
420
  - app/components/phlex_kit/popover/popover_content.rb
421
+ - app/components/phlex_kit/popover/popover_controller.js
396
422
  - app/components/phlex_kit/popover/popover_trigger.rb
397
423
  - app/components/phlex_kit/progress/progress.css
398
424
  - app/components/phlex_kit/progress/progress.rb
@@ -401,6 +427,7 @@ files:
401
427
  - app/components/phlex_kit/radio_group/radio_group.css
402
428
  - app/components/phlex_kit/radio_group/radio_group.rb
403
429
  - app/components/phlex_kit/resizable/resizable.css
430
+ - app/components/phlex_kit/resizable/resizable_controller.js
404
431
  - app/components/phlex_kit/resizable/resizable_handle.rb
405
432
  - app/components/phlex_kit/resizable/resizable_panel.rb
406
433
  - app/components/phlex_kit/resizable/resizable_panel_group.rb
@@ -409,9 +436,11 @@ files:
409
436
  - app/components/phlex_kit/select/select.css
410
437
  - app/components/phlex_kit/select/select.rb
411
438
  - app/components/phlex_kit/select/select_content.rb
439
+ - app/components/phlex_kit/select/select_controller.js
412
440
  - app/components/phlex_kit/select/select_group.rb
413
441
  - app/components/phlex_kit/select/select_input.rb
414
442
  - app/components/phlex_kit/select/select_item.rb
443
+ - app/components/phlex_kit/select/select_item_controller.js
415
444
  - app/components/phlex_kit/select/select_label.rb
416
445
  - app/components/phlex_kit/select/select_trigger.rb
417
446
  - app/components/phlex_kit/select/select_value.rb
@@ -420,6 +449,8 @@ files:
420
449
  - app/components/phlex_kit/sheet/sheet.css
421
450
  - app/components/phlex_kit/sheet/sheet.rb
422
451
  - app/components/phlex_kit/sheet/sheet_content.rb
452
+ - app/components/phlex_kit/sheet/sheet_content_controller.js
453
+ - app/components/phlex_kit/sheet/sheet_controller.js
423
454
  - app/components/phlex_kit/sheet/sheet_description.rb
424
455
  - app/components/phlex_kit/sheet/sheet_footer.rb
425
456
  - app/components/phlex_kit/sheet/sheet_header.rb
@@ -454,6 +485,7 @@ files:
454
485
  - app/components/phlex_kit/skeleton/skeleton.rb
455
486
  - app/components/phlex_kit/slider/slider.css
456
487
  - app/components/phlex_kit/slider/slider.rb
488
+ - app/components/phlex_kit/slider/slider_controller.js
457
489
  - app/components/phlex_kit/spinner/spinner.css
458
490
  - app/components/phlex_kit/spinner/spinner.rb
459
491
  - app/components/phlex_kit/switch/switch.css
@@ -470,25 +502,31 @@ files:
470
502
  - app/components/phlex_kit/tabs/tabs.css
471
503
  - app/components/phlex_kit/tabs/tabs.rb
472
504
  - app/components/phlex_kit/tabs/tabs_content.rb
505
+ - app/components/phlex_kit/tabs/tabs_controller.js
473
506
  - app/components/phlex_kit/tabs/tabs_list.rb
474
507
  - app/components/phlex_kit/tabs/tabs_trigger.rb
475
508
  - app/components/phlex_kit/textarea/textarea.css
476
509
  - app/components/phlex_kit/textarea/textarea.rb
477
510
  - app/components/phlex_kit/theme_toggle/theme_toggle.rb
511
+ - app/components/phlex_kit/theme_toggle/theme_toggle_controller.js
478
512
  - app/components/phlex_kit/toast/toast.css
479
513
  - app/components/phlex_kit/toast/toast.rb
480
514
  - app/components/phlex_kit/toast/toast_action.rb
481
515
  - app/components/phlex_kit/toast/toast_cancel.rb
482
516
  - app/components/phlex_kit/toast/toast_close.rb
517
+ - app/components/phlex_kit/toast/toast_controller.js
483
518
  - app/components/phlex_kit/toast/toast_description.rb
484
519
  - app/components/phlex_kit/toast/toast_icon.rb
485
520
  - app/components/phlex_kit/toast/toast_item.rb
486
521
  - app/components/phlex_kit/toast/toast_region.rb
487
522
  - app/components/phlex_kit/toast/toast_title.rb
523
+ - app/components/phlex_kit/toast/toaster_controller.js
488
524
  - app/components/phlex_kit/toggle/toggle.css
489
525
  - app/components/phlex_kit/toggle/toggle.rb
526
+ - app/components/phlex_kit/toggle/toggle_controller.js
490
527
  - app/components/phlex_kit/toggle_group/toggle_group.css
491
528
  - app/components/phlex_kit/toggle_group/toggle_group.rb
529
+ - app/components/phlex_kit/toggle_group/toggle_group_controller.js
492
530
  - app/components/phlex_kit/toggle_group/toggle_group_item.rb
493
531
  - app/components/phlex_kit/tooltip/tooltip.css
494
532
  - app/components/phlex_kit/tooltip/tooltip.rb
@@ -500,45 +538,7 @@ files:
500
538
  - app/components/phlex_kit/typography/inline_link.rb
501
539
  - app/components/phlex_kit/typography/text.rb
502
540
  - app/components/phlex_kit/typography/typography.css
503
- - app/javascript/phlex_kit/controllers/accordion_controller.js
504
- - app/javascript/phlex_kit/controllers/alert_dialog_controller.js
505
- - app/javascript/phlex_kit/controllers/avatar_controller.js
506
- - app/javascript/phlex_kit/controllers/calendar_controller.js
507
- - app/javascript/phlex_kit/controllers/calendar_input_controller.js
508
- - app/javascript/phlex_kit/controllers/carousel_controller.js
509
- - app/javascript/phlex_kit/controllers/chart_controller.js
510
- - app/javascript/phlex_kit/controllers/clipboard_controller.js
511
- - app/javascript/phlex_kit/controllers/collapsible_controller.js
512
- - app/javascript/phlex_kit/controllers/combobox_controller.js
513
- - app/javascript/phlex_kit/controllers/command_controller.js
514
- - app/javascript/phlex_kit/controllers/command_dialog_controller.js
515
- - app/javascript/phlex_kit/controllers/context_menu_controller.js
516
- - app/javascript/phlex_kit/controllers/data_table_column_visibility_controller.js
517
- - app/javascript/phlex_kit/controllers/data_table_controller.js
518
- - app/javascript/phlex_kit/controllers/data_table_search_controller.js
519
- - app/javascript/phlex_kit/controllers/dialog_controller.js
520
- - app/javascript/phlex_kit/controllers/dropdown_menu_controller.js
521
- - app/javascript/phlex_kit/controllers/form_field_controller.js
522
- - app/javascript/phlex_kit/controllers/hover_card_controller.js
523
541
  - app/javascript/phlex_kit/controllers/index.js
524
- - app/javascript/phlex_kit/controllers/input_otp_controller.js
525
- - app/javascript/phlex_kit/controllers/masked_input_controller.js
526
- - app/javascript/phlex_kit/controllers/menubar_controller.js
527
- - app/javascript/phlex_kit/controllers/message_scroller_controller.js
528
- - app/javascript/phlex_kit/controllers/popover_controller.js
529
- - app/javascript/phlex_kit/controllers/resizable_controller.js
530
- - app/javascript/phlex_kit/controllers/scroll_fade_controller.js
531
- - app/javascript/phlex_kit/controllers/select_controller.js
532
- - app/javascript/phlex_kit/controllers/select_item_controller.js
533
- - app/javascript/phlex_kit/controllers/sheet_content_controller.js
534
- - app/javascript/phlex_kit/controllers/sheet_controller.js
535
- - app/javascript/phlex_kit/controllers/slider_controller.js
536
- - app/javascript/phlex_kit/controllers/tabs_controller.js
537
- - app/javascript/phlex_kit/controllers/theme_toggle_controller.js
538
- - app/javascript/phlex_kit/controllers/toast_controller.js
539
- - app/javascript/phlex_kit/controllers/toaster_controller.js
540
- - app/javascript/phlex_kit/controllers/toggle_controller.js
541
- - app/javascript/phlex_kit/controllers/toggle_group_controller.js
542
542
  - config/importmap.rb
543
543
  - lib/generators/phlex_kit/component/component_generator.rb
544
544
  - lib/generators/phlex_kit/install/install_generator.rb