stimulus_plumbers 0.2.7 → 0.2.9

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -0
  3. data/README.md +60 -41
  4. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.es.js +760 -237
  5. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.umd.js +1 -1
  6. data/lib/stimulus_plumbers/components/action_list/item.rb +27 -0
  7. data/lib/stimulus_plumbers/components/action_list/section.rb +21 -0
  8. data/lib/stimulus_plumbers/components/action_list.rb +23 -0
  9. data/lib/stimulus_plumbers/components/avatar.rb +72 -0
  10. data/lib/stimulus_plumbers/components/button/group.rb +17 -0
  11. data/lib/stimulus_plumbers/components/button.rb +27 -0
  12. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb +2 -2
  13. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb +2 -2
  14. data/lib/stimulus_plumbers/components/calendar/month/turbo.rb +55 -0
  15. data/lib/stimulus_plumbers/components/calendar.rb +33 -0
  16. data/lib/stimulus_plumbers/components/card/section.rb +25 -0
  17. data/lib/stimulus_plumbers/components/card.rb +27 -0
  18. data/lib/stimulus_plumbers/components/combobox/autocomplete.rb +53 -0
  19. data/lib/stimulus_plumbers/components/combobox/date.rb +50 -0
  20. data/lib/stimulus_plumbers/components/combobox/dropdown.rb +38 -0
  21. data/lib/stimulus_plumbers/components/combobox/options/option.rb +34 -0
  22. data/lib/stimulus_plumbers/components/combobox/options/option_group.rb +29 -0
  23. data/lib/stimulus_plumbers/components/combobox/options.rb +59 -0
  24. data/lib/stimulus_plumbers/components/combobox/popover.rb +20 -0
  25. data/lib/stimulus_plumbers/components/combobox/time/drum.rb +37 -0
  26. data/lib/stimulus_plumbers/components/combobox/time.rb +120 -0
  27. data/lib/stimulus_plumbers/components/combobox/trigger.rb +38 -0
  28. data/lib/stimulus_plumbers/components/combobox.rb +59 -0
  29. data/lib/stimulus_plumbers/components/date_picker/navigation.rb +1 -1
  30. data/lib/stimulus_plumbers/components/date_picker/navigator.rb +1 -1
  31. data/lib/stimulus_plumbers/components/icon.rb +49 -0
  32. data/lib/stimulus_plumbers/components/popover/builder.rb +25 -0
  33. data/lib/stimulus_plumbers/components/popover.rb +26 -0
  34. data/lib/stimulus_plumbers/form/builder.rb +64 -17
  35. data/lib/stimulus_plumbers/form/{field_component.rb → field.rb} +13 -11
  36. data/lib/stimulus_plumbers/form/fields/combobox.rb +41 -0
  37. data/lib/stimulus_plumbers/form/fields/error.rb +14 -0
  38. data/lib/stimulus_plumbers/form/fields/group.rb +14 -0
  39. data/lib/stimulus_plumbers/form/fields/hint.rb +14 -0
  40. data/lib/stimulus_plumbers/form/fields/label.rb +21 -0
  41. data/lib/stimulus_plumbers/form/fields/password.rb +55 -0
  42. data/lib/stimulus_plumbers/form/fields/renderer.rb +16 -21
  43. data/lib/stimulus_plumbers/form/fields/search.rb +54 -0
  44. data/lib/stimulus_plumbers/form/fields/select.rb +8 -2
  45. data/lib/stimulus_plumbers/form/fields/submit.rb +23 -0
  46. data/lib/stimulus_plumbers/form/fields/text.rb +12 -4
  47. data/lib/stimulus_plumbers/helpers/action_list_helper.rb +2 -2
  48. data/lib/stimulus_plumbers/helpers/avatar_helper.rb +2 -2
  49. data/lib/stimulus_plumbers/helpers/button_helper.rb +2 -2
  50. data/lib/stimulus_plumbers/helpers/calendar_helper.rb +1 -1
  51. data/lib/stimulus_plumbers/helpers/calendar_turbo_helper.rb +1 -1
  52. data/lib/stimulus_plumbers/helpers/card_helper.rb +2 -2
  53. data/lib/stimulus_plumbers/helpers/combobox_helper.rb +74 -0
  54. data/lib/stimulus_plumbers/helpers/popover_helper.rb +2 -2
  55. data/lib/stimulus_plumbers/helpers.rb +2 -2
  56. data/lib/stimulus_plumbers/plumber/base.rb +20 -0
  57. data/lib/stimulus_plumbers/plumber/dispatcher.rb +111 -0
  58. data/lib/stimulus_plumbers/plumber/html_options.rb +51 -0
  59. data/lib/stimulus_plumbers/plumber/renderer.rb +89 -0
  60. data/lib/stimulus_plumbers/themes/base.rb +9 -15
  61. data/lib/stimulus_plumbers/themes/schema/ranges.rb +5 -5
  62. data/lib/stimulus_plumbers/themes/schema.rb +97 -0
  63. data/lib/stimulus_plumbers/themes/tailwind/calendar.rb +48 -2
  64. data/lib/stimulus_plumbers/themes/tailwind/combobox.rb +75 -0
  65. data/lib/stimulus_plumbers/themes/tailwind/form.rb +10 -6
  66. data/lib/stimulus_plumbers/themes/tailwind_theme.rb +2 -0
  67. data/lib/stimulus_plumbers/version.rb +1 -1
  68. data/lib/stimulus_plumbers.rb +41 -14
  69. metadata +42 -23
  70. data/lib/stimulus_plumbers/components/action_list/renderer.rb +0 -47
  71. data/lib/stimulus_plumbers/components/avatar/renderer.rb +0 -74
  72. data/lib/stimulus_plumbers/components/button/renderer.rb +0 -33
  73. data/lib/stimulus_plumbers/components/calendar/month/turbo/renderer.rb +0 -57
  74. data/lib/stimulus_plumbers/components/calendar/renderer.rb +0 -35
  75. data/lib/stimulus_plumbers/components/card/renderer.rb +0 -41
  76. data/lib/stimulus_plumbers/components/date_picker/renderer.rb +0 -82
  77. data/lib/stimulus_plumbers/components/icon/renderer.rb +0 -51
  78. data/lib/stimulus_plumbers/components/plumber/base.rb +0 -22
  79. data/lib/stimulus_plumbers/components/plumber/dispatcher.rb +0 -113
  80. data/lib/stimulus_plumbers/components/plumber/html_options.rb +0 -34
  81. data/lib/stimulus_plumbers/components/plumber/renderer.rb +0 -91
  82. data/lib/stimulus_plumbers/components/popover/renderer.rb +0 -46
  83. data/lib/stimulus_plumbers/helpers/date_picker_helper.rb +0 -17
  84. data/lib/stimulus_plumbers/themes/action_list.rb +0 -14
  85. data/lib/stimulus_plumbers/themes/avatar.rb +0 -14
  86. data/lib/stimulus_plumbers/themes/button.rb +0 -18
  87. data/lib/stimulus_plumbers/themes/calendar.rb +0 -15
  88. data/lib/stimulus_plumbers/themes/card.rb +0 -12
  89. data/lib/stimulus_plumbers/themes/form.rb +0 -30
  90. data/lib/stimulus_plumbers/themes/layout.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c89886ba431e3857285faa6f16e80f5f54cb4b2bf9fb69582be6f8c1395ddd67
4
- data.tar.gz: 66f92918cfcb2c729047555955b17570a94574bc7512d1ba65e68515e447163a
3
+ metadata.gz: d76429866edf575ec9095b3e73a601255f68195aacba6db0dc40c3215786e8e7
4
+ data.tar.gz: 3e1051dd9edc8f3bfc4f2d4881f1e94f76c9af700fbf142c703f53efbaf6e511
5
5
  SHA512:
6
- metadata.gz: d1ae00ceb5a566aff19e6ac1cc81232fff4783dfe2729174b8ba19e578f90b324c09882101cd55bd380053f1f5498e05829d457b3aea1d52cb8cc31bb0fc6298
7
- data.tar.gz: 0b8ce29fe76ee4bf93ba709ec1714c0cd191dab7352136123b807c03b1ba50d355d6475d88274694c2e05e17ef56255da6ea1eb09cafac4b4f014c759f290c6f
6
+ metadata.gz: def84ab70ce388aaeb0267be2def55739fe9bd94ecb68d69327ea9061180cde93b8a4e68d3d54959aa7af995f67d22ead8eb70d6cf09f2de85a3a9a7735124d7
7
+ data.tar.gz: fd1bec2e6d8a28bb0f90390ddb7c32785e8ff24e7ec0c60bb3b5128625d8997904167282e58ac28493eee05b5a23f5a51d948d0a16a0af8b604c06dc88b2784d
data/CHANGELOG.md ADDED
@@ -0,0 +1,59 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
4
+
5
+ ---
6
+ ## [0.2.9](https://github.com/ryancyq/stimulus-plumbers/compare/stimulus-plumbers-rails/v0.2.8..stimulus-plumbers-rails/v0.2.9) - 2026-05-15
7
+
8
+ ### Bug Fixes
9
+
10
+ - combobox options + theme ([#53](https://github.com/ryancyq/stimulus-plumbers/issues/53)) - ([38b8f56](https://github.com/ryancyq/stimulus-plumbers/commit/38b8f5632fd62ed62947d62567e704a0b8b46f74)) - Ryan Chang
11
+ - update broken ruby action bindings ([#55](https://github.com/ryancyq/stimulus-plumbers/issues/55)) - ([f2259df](https://github.com/ryancyq/stimulus-plumbers/commit/f2259dfd8f2369bb588ee24fec3d9e8a8f854093)) - Ryan Chang
12
+
13
+ ### Documentation
14
+
15
+ - update form input ([#49](https://github.com/ryancyq/stimulus-plumbers/issues/49)) - ([dd35b7f](https://github.com/ryancyq/stimulus-plumbers/commit/dd35b7fdadf5ffb8808b00c0c5b75542bcde4d02)) - Ryan Chang
16
+ - update theme to align with implementation ([#57](https://github.com/ryancyq/stimulus-plumbers/issues/57)) - ([0645cfa](https://github.com/ryancyq/stimulus-plumbers/commit/0645cfa9896aa65082b7f2fd9e619d2216c13f75)) - Ryan Chang
17
+
18
+ ### Features
19
+
20
+ - form input search ([#50](https://github.com/ryancyq/stimulus-plumbers/issues/50)) - ([130b966](https://github.com/ryancyq/stimulus-plumbers/commit/130b9666a644a54b94da5ba23f5d0b32a0458f53)) - Ryan Chang
21
+
22
+ ### Tests
23
+
24
+ - code coverage report ([#48](https://github.com/ryancyq/stimulus-plumbers/issues/48)) - ([78950e6](https://github.com/ryancyq/stimulus-plumbers/commit/78950e603ac7e003b5c6361ab6016796caca3397)) - Ryan Chang
25
+
26
+ ---
27
+ ## [0.2.8](https://github.com/ryancyq/stimulus-plumbers/compare/stimulus-plumbers-rails/v0.2.7..stimulus-plumbers-rails/v0.2.8) - 2026-05-10
28
+
29
+ ### Features
30
+
31
+ - input group ([#46](https://github.com/ryancyq/stimulus-plumbers/issues/46)) - ([a5e24f6](https://github.com/ryancyq/stimulus-plumbers/commit/a5e24f6dbc8b740822333164ceeefd7d20367f1b)) - Ryan Chang
32
+
33
+ ### Tests
34
+
35
+ - theme coverage ([#45](https://github.com/ryancyq/stimulus-plumbers/issues/45)) - ([cc86565](https://github.com/ryancyq/stimulus-plumbers/commit/cc86565fd65a5b9dc390e838d379de75576d60ba)) - Ryan Chang
36
+
37
+ ---
38
+ ## [0.2.2] - 2026-04-14
39
+
40
+ ### Dependencies
41
+
42
+ - migrate from rspec to minitest ([#16](https://github.com/ryancyq/stimulus-plumbers/issues/16)) - ([b183919](https://github.com/ryancyq/stimulus-plumbers/commit/b1839196235a7462d58bb2d3f9532388ffd916c2)) - Ryan Chang
43
+
44
+ ### Documentation
45
+
46
+ - update claude.md - ([2b36f6d](https://github.com/ryancyq/stimulus-plumbers/commit/2b36f6dcf7ce7c9154c187b011c2f8cf4cc5b9f9)) - Ryan Chang
47
+
48
+ ### Features
49
+
50
+ - stimulus plumbers rails gem ([#4](https://github.com/ryancyq/stimulus-plumbers/issues/4)) - ([e492e0f](https://github.com/ryancyq/stimulus-plumbers/commit/e492e0f910a6331328d52725f1931d9cd86c9563)) - Ryan Chang
51
+ - stimulus-rails UI components ([#15](https://github.com/ryancyq/stimulus-plumbers/issues/15)) - ([8e8b58c](https://github.com/ryancyq/stimulus-plumbers/commit/8e8b58c661a7cd8c79d7e65b729e3ea077e596b9)) - Ryan Chang
52
+ - form builder ([#21](https://github.com/ryancyq/stimulus-plumbers/issues/21)) - ([21aa9a6](https://github.com/ryancyq/stimulus-plumbers/commit/21aa9a634eca340e712f922f43ceb7383b56daee)) - Ryan Chang
53
+
54
+ ### Tests
55
+
56
+ - a11y ([#17](https://github.com/ryancyq/stimulus-plumbers/issues/17)) - ([4109a8a](https://github.com/ryancyq/stimulus-plumbers/commit/4109a8af8be8aab06ddbcff35e870556a6205852)) - Ryan Chang
57
+ - update rake test task to include system test - ([aa215b0](https://github.com/ryancyq/stimulus-plumbers/commit/aa215b0a84a36f32083327b4e7f03a646187cee9)) - Ryan Chang
58
+
59
+ <!-- generated by git-cliff -->
data/README.md CHANGED
@@ -1,75 +1,94 @@
1
- # Stimulus Plumbers
1
+ # stimulus-plumbers-rails
2
2
 
3
- A library of semantically correct, accessible UI components for Rails 8.0+ using ViewComponent and Stimulus.
3
+ [![Version][rubygems_badge]][rubygems]
4
+ [![CI][ci_badge]][ci]
5
+ [![Coverage][coverage_badge]][coverage]
4
6
 
5
- ## Installation
7
+ Rails helpers for accessible, WCAG 2.1 AA compliant UI components built on [Stimulus](https://stimulus.hotwired.dev/). Pairs with the [`@stimulus-plumbers/controllers`](../stimulus-plumbers) npm package.
8
+
9
+ ## Requirements
6
10
 
7
- Add this line to your application's Gemfile:
11
+ - Ruby >= 3.0
12
+ - Rails >= 6.1
13
+ - `@stimulus-plumbers/controllers` registered in your Stimulus app
14
+
15
+ ## Installation
8
16
 
9
17
  ```ruby
10
- gem 'stimulus_plumbers'
18
+ # Gemfile
19
+ gem "stimulus_plumbers"
11
20
  ```
12
21
 
13
- And then execute:
14
-
15
22
  ```bash
16
23
  bundle install
17
24
  ```
18
25
 
19
- ## Usage
26
+ Include the helpers in your `ApplicationHelper`:
20
27
 
21
- Stimulus Plumbers provides ready-to-use ViewComponent components that render semantically correct, accessible HTML. Each component is designed with accessibility as a core requirement, not an afterthought.
28
+ ```ruby
29
+ module ApplicationHelper
30
+ include StimulusPlumbers::Helpers::ComboboxHelper
31
+ include StimulusPlumbers::Helpers::PopoverHelper
32
+ include StimulusPlumbers::Helpers::CalendarHelper
33
+ end
34
+ ```
22
35
 
23
- ### Basic Example
36
+ Or use the form builder globally:
24
37
 
25
- ```erb
26
- <%# In your Rails view %>
27
- <%= render ButtonComponent.new(url: root_path) do %>
28
- Click me
29
- <% end %>
38
+ ```ruby
39
+ # config/application.rb
40
+ config.action_view.default_form_builder = StimulusPlumbers::Form::Builder
30
41
  ```
31
42
 
32
- ### Available Components
43
+ ## Components
33
44
 
34
- - **ActionList**: Accessible lists with items and sections
35
- - **Avatar**: User avatar component
36
- - **Button**: Semantic button with optional prefix/suffix
37
- - **Card**: Card component with sections
38
- - **Calendar**: Date calendar with navigation
39
- - **Container**: Layout container
40
- - **Divider**: Semantic divider/separator
41
- - **Dropdown**: Accessible dropdown menus
42
- - **Navigation**: Navigation bars, tabs, and lists
43
- - **Popover**: Accessible popover component
45
+ | Component | Helper(s) | Docs |
46
+ |-----------|-----------|------|
47
+ | Combobox date | `sp_combobox_date` | [docs/component/combobox.md](docs/component/combobox.md#sp_combobox_date) |
48
+ | Combobox dropdown | `sp_combobox_dropdown` | [docs/component/combobox.md](docs/component/combobox.md#sp_combobox_dropdown) |
49
+ | Combobox autocomplete | `sp_combobox_autocomplete` | [docs/component/combobox.md](docs/component/combobox.md#sp_combobox_autocomplete) |
50
+ | Combobox time | `sp_combobox_time` | [docs/component/combobox.md](docs/component/combobox.md#sp_combobox_time) |
51
+ | Calendar | `sp_calendar_month` | [docs/component/calendar.md](docs/component/calendar.md) |
52
+ | Popover | `sp_popover` | [docs/component/popover.md](docs/component/popover.md) |
53
+ | Modal | (JS only) | [docs/component/modal.md](docs/component/modal.md) |
44
54
 
45
- ## Component Philosophy
55
+ ## Form Builder
46
56
 
47
- All components in this library follow these principles:
57
+ `StimulusPlumbers::Form::Builder` wraps all components as model-aware form fields with automatic label, name/id, error, and ARIA wiring.
48
58
 
49
- 1. **Accessibility First**: WCAG 2.1 Level AA minimum
50
- 2. **Semantic HTML**: Use native elements before ARIA
51
- 3. **Keyboard Navigation**: Full keyboard support
52
- 4. **Screen Reader Friendly**: Proper announcements and labels
53
- 5. **Focus Management**: Visible focus indicators and logical tab order
59
+ [docs/component/form_builder.md](docs/component/form_builder.md)
54
60
 
55
- ## Development
61
+ ## Theming
62
+
63
+ Includes a Tailwind CSS theme out of the box. Supports custom themes by subclassing `Themes::Base`.
56
64
 
57
- After checking out the repo, run:
65
+ [docs/component/theme.md](docs/component/theme.md)
66
+
67
+ ## Development
58
68
 
59
69
  ```bash
60
70
  bundle install
71
+
72
+ bundle exec rake test:unit # unit tests
73
+ bundle exec rake test:system # accessibility system tests
74
+ bundle exec rake rubocop # lint
61
75
  ```
62
76
 
63
- Run the test suite with:
77
+ Test against a specific Rails version:
64
78
 
65
79
  ```bash
66
- bundle exec rspec
80
+ BUNDLE_GEMFILE=gemfiles/rails_8.0.gemfile bundle exec rake test:unit
67
81
  ```
68
82
 
69
- ## Contributing
70
-
71
- Bug reports and pull requests are welcome on GitHub at https://github.com/ryancyq/stimulus-plumbers.
83
+ Available appraisals: `rails_6.1`, `rails_7.0`, `rails_7.1`, `rails_7.2`, `rails_8.0`, `rails_8.1`, `rails_edge`.
72
84
 
73
85
  ## License
74
86
 
75
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
87
+ [MIT](https://opensource.org/licenses/MIT)
88
+
89
+ [rubygems_badge]: https://img.shields.io/gem/v/stimulus_plumbers.svg
90
+ [rubygems]: https://rubygems.org/gems/stimulus_plumbers
91
+ [ci_badge]: https://github.com/ryancyq/stimulus-plumbers/actions/workflows/ci-rails.yml/badge.svg
92
+ [ci]: https://github.com/ryancyq/stimulus-plumbers/actions/workflows/ci-rails.yml
93
+ [coverage_badge]: https://codecov.io/gh/ryancyq/stimulus-plumbers/graph/badge.svg?token=Z77H6M5GER&flag=ruby
94
+ [coverage]: https://codecov.io/gh/ryancyq/stimulus-plumbers