Skip to content

Commit 55b4ee0

Browse files
jho406claude
andcommitted
Add wrappers for shadcn/ui, React Aria, React Spectrum, PrimeReact, MUI, and Chakra UI
Adds six new candy_wrapper implementations that bridge Rails form_props with popular React UI libraries, bringing the total to eight wrappers. Updates README with component status table and install instructions for each library. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent bfb8416 commit 55b4ee0

7 files changed

Lines changed: 4438 additions & 26 deletions

File tree

‎README.md‎

Lines changed: 80 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,31 @@ and name are likely to change drastically before a major version release.
1313
Each component are meant to be copied from this repo to your own project and customized to your liking. There are no
1414
CLI tools to help. just copy and paste from github.
1515

16-
| `form_props` helper | Component | [Vanilla] | [Mantine] | ? |
17-
| :-------------------------------------- | :--------------------- | :----------------- | :------------------- | :------------------- |
18-
| `f.text_field` | Checkbox | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
19-
| `f.collection_check_boxes` | CollectionCheckboxes | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
20-
| `f.collection_radio_buttons` | CollectionRadioButtons | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
21-
| `f.color_field` | ColorField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
22-
| `f.date_field` | DateField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
23-
| `f.datetime_local_field` | DateTimeLocalField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
24-
| `f.email_field` | EmailField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
25-
| `f.month_field` | MonthField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
26-
| `f.number_field` | NumberField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
27-
| `f.password_field` | PasswordField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
28-
| `f.range_field` | RangeField | :heavy_check_mark: | :white_large_square: | :white_large_square: |
29-
| `f.search_field` | SearchField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
30-
| `f.select` (`multiple: true` supported) | Select | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
31-
| `f.tel_field` | TelField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
32-
| `f.file_field` | FileField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
33-
| `f.text_field` | TextField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
34-
| `f.time_field` | TimeField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
35-
| `f.url_field` | UrlField | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
36-
| `f.text_area` | TextArea | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
37-
| `f.grouped_collection_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
38-
| `f.weekday_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
39-
| `f.time_zone_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
40-
| `f.submit` | SubmitButton | :heavy_check_mark: | :heavy_check_mark: | :white_large_square: |
16+
| `form_props` helper | Component | [Vanilla] | [Mantine] | [shadcn/ui] | [React Aria] | [React Spectrum] | [PrimeReact] | [MUI] | [Chakra UI] |
17+
| :-------------------------------------- | :--------------------- | :----------------- | :----------------- | :----------------- | :----------------- | :----------------- | :----------------- | :----------------- | :----------------- |
18+
| `f.check_box` | Checkbox | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
19+
| `f.collection_check_boxes` | CollectionCheckboxes | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
20+
| `f.collection_radio_buttons` | CollectionRadioButtons | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
21+
| `f.color_field` | ColorField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
22+
| `f.date_field` | DateField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
23+
| `f.datetime_local_field` | DateTimeLocalField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
24+
| `f.email_field` | EmailField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
25+
| `f.month_field` | MonthField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
26+
| `f.number_field` | NumberField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
27+
| `f.password_field` | PasswordField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
28+
| `f.range_field` | RangeField | :heavy_check_mark: | :white_large_square: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
29+
| `f.search_field` | SearchField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
30+
| `f.select` (`multiple: true` supported) | Select | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
31+
| `f.tel_field` | TelField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
32+
| `f.file_field` | FileField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
33+
| `f.text_field` | TextField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
34+
| `f.time_field` | TimeField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
35+
| `f.url_field` | UrlField | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
36+
| `f.text_area` | TextArea | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
37+
| `f.grouped_collection_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
38+
| `f.weekday_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
39+
| `f.time_zone_select` | Select | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
40+
| `f.submit` | SubmitButton | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
4141

4242
## Installation
4343

@@ -140,17 +140,71 @@ wrappers of your own, you can start here and use other UI wrappers as reference.
140140

141141
## Mantine
142142

143-
To use the Mantine wrappers, add the following libraries to your libraries before copying
143+
To use the Mantine wrappers, add the following libraries before copying:
144144

145145
```
146146
yarn add dayjs
147147
yarn add @mantine/core
148148
yarn add @mantine/dates
149149
```
150150

151+
## shadcn/ui
152+
153+
Copy the shadcn wrapper and the shadcn components it depends on (Input, Select, Checkbox, RadioGroup, Textarea, Slider, Button, Label) into your project.
154+
155+
## React Aria
156+
157+
To use the React Aria wrappers, add the following libraries before copying:
158+
159+
```
160+
yarn add react-aria-components
161+
yarn add @internationalized/date
162+
```
163+
164+
## React Spectrum
165+
166+
To use the React Spectrum wrappers, add the following libraries before copying:
167+
168+
```
169+
yarn add @adobe/react-spectrum
170+
yarn add @internationalized/date
171+
```
172+
173+
## PrimeReact
174+
175+
To use the PrimeReact wrappers, add the following library before copying:
176+
177+
```
178+
yarn add primereact
179+
```
180+
181+
## MUI
182+
183+
To use the MUI wrappers, add the following library before copying:
184+
185+
```
186+
yarn add @mui/material @emotion/react @emotion/styled
187+
```
188+
189+
## Chakra UI
190+
191+
To use the Chakra UI wrappers, add the following library before copying:
192+
193+
```
194+
yarn add @chakra-ui/react
195+
```
196+
151197
## Contributors
152198

153199
Thank you, [contributors]!
154200

155201
[contributors]: https://github.com/thoughtbot/candy_wrapper/graphs/contributors
156202
[form_props]: https://github.com/thoughtbot/form_props
203+
[Vanilla]: wrappers/ts/vanilla
204+
[Mantine]: wrappers/ts/mantine
205+
[shadcn/ui]: wrappers/ts/shadcn
206+
[React Aria]: wrappers/ts/react-aria
207+
[React Spectrum]: wrappers/ts/react-spectrum
208+
[PrimeReact]: wrappers/ts/primereact
209+
[MUI]: wrappers/ts/mui
210+
[Chakra UI]: wrappers/ts/chakra

0 commit comments

Comments
 (0)