simple_form_tailwind_css 0.0.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b73ad445d1750d1d2ee3e739191e13faf3810ffb21cd4b70b950ea1231c496fe
4
- data.tar.gz: 837eecadfea116d27a355f6ee87d6466cae2d58b6a9737cb15a32b88af3a6bc0
3
+ metadata.gz: 8d0537cd908d4ed47ec04dace25a9debe8ddf599170ba4b2be4491315e04c876
4
+ data.tar.gz: 81f849c320766f54aa4200c4a00e4832009b6b55886ea4d7095ea426994804fa
5
5
  SHA512:
6
- metadata.gz: ff4c73b207528ed9297774f13867d89ef662e1ab4ac20ca32caa32a598b0f0220442371e31c78b0cf4ecbe7b83d3817bfe50232ee960aca4b9fc714f155215ba
7
- data.tar.gz: 4b9f200c89ea591ea4abd778a2de6b83b077c87bebb6554347532f319c0416c919a87ee9422e17f4a5484b4f1fe6f083a5ae5d0cd0cfd6ddf25408287a869b9b
6
+ metadata.gz: ef63e38f5e7d20291826a610bc3e6dc1726055a3ec02f85d612a70d1abdd991c84d65aca1e3c9ecbfe25954ffaef14bb97b71b64da5f719f12422770fb9846c1
7
+ data.tar.gz: 504d5255785aae42c85ef1059dd4ef4de558715682320a4d66ad8eb72ce938b15ae22bed3cc880b2c8e0cd59dcea173238333f2fede24d43890311f9993ee5eb
data/README.md CHANGED
@@ -2,14 +2,28 @@
2
2
 
3
3
  Tailwind components for [Simple Form][]
4
4
 
5
- ## Installation
5
+ ## Prerequisites
6
+
7
+ You should have these installed first:
6
8
 
7
- First, install and setup [Tailwind](https://github.com/rails/tailwindcss-rails) ([helpful additional steps here](https://github.com/rails/tailwindcss-rails/issues/25)), [Simple Form][], and the [heroicon gem](https://github.com/bharget/heroicon).
9
+ * [Simple Form gem][Simple Form]
10
+ * [Tailwind][]
11
+ * We're agnostic about install method; the Rails [tailwindcss-rails gem][] is one method
12
+ * [Heroicon gem][]
13
+ * Be sure to [run the install generator][heroicon generator] if it's a new dependency to your project
8
14
 
9
- Then add this gem to your application's Gemfile:
15
+ [Simple Form]: https://github.com/heartcombo/simple_form
16
+ [Tailwind]: https://tailwindcss.com/
17
+ [tailwindcss-rails gem]: https://github.com/rails/tailwindcss-rails
18
+ [Heroicon gem]: https://github.com/bharget/heroicon
19
+ [heroicon generator]: https://github.com/bharget/heroicon#installation
20
+
21
+ ## Installation
22
+
23
+ Add to your application's Gemfile:
10
24
 
11
25
  ```ruby
12
- gem "simple_form_tailwind", github: "abevoelker/simple_form_tailwind"
26
+ gem "simple_form_tailwind_css"
13
27
  ```
14
28
 
15
29
  And then execute:
@@ -18,12 +32,33 @@ And then execute:
18
32
  $ bundle install
19
33
  ```
20
34
 
21
- Finally, overwrite your Simple Form initializer with ours:
35
+ Next, overwrite your Simple Form initializer with ours:
22
36
 
23
37
  ```
24
38
  $ rails g simple_form:tailwind:install
25
39
  ```
26
40
 
41
+ Finally, for Tailwind 3 we need to modify `tailwind.config.js` to add an environment
42
+ variable that tells Tailwind where the gem's Ruby source is so that classes used by
43
+ the gem aren't pruned by Tailwind's JIT:
44
+
45
+ ```diff
46
+ --- a/tailwind.config.js
47
+ +++ b/tailwind.config.js
48
+ @@ -4,6 +4,7 @@ const colors = require('tailwindcss/colors')
49
+ /** @type {import('tailwindcss').Config} */
50
+ module.exports = {
51
+ content: [
52
+ + `${process.env.SIMPLE_FORM_TAILWIND_DIR}/**/*.rb`,
53
+ './app/views/**/*.{html,erb,haml}',
54
+ './app/helpers/**/*.rb',
55
+ './app/javascript/**/*.{js,jsx,ts,tsx,vue}',
56
+ ```
57
+
58
+ We're not done yet - jump down to the
59
+ [Tailwind JIT configuration](#tailwind-jit-configuration) section to read
60
+ approaches on how to pass in this variable to complete setup.
61
+
27
62
  ## Usage
28
63
 
29
64
  Here's an example form demonstrating usage:
@@ -89,16 +124,73 @@ Simple Form's error notification is supported, defaulting to a red color with x-
89
124
 
90
125
  ![Red error notification](/docs/images/error_notification_red.png?raw=true)
91
126
 
92
- You can customize the color and icon used:
127
+ You can customize the icon and Tailwind classes used:
93
128
 
94
129
  ```erb
95
- <%= f.error_notification color: "blue", icon: "information-circle" %>
130
+ <%= f.error_notification icon: "information-circle", icon_classes: "h-5 w-5 text-blue-400", message_classes: "text-sm text-blue-700", border_classes: "bg-blue-50 border-l-4 border-blue-400 p-4" %>
96
131
  ```
97
132
 
98
133
  ![Blue error notification](/docs/images/error_notification_blue.png?raw=true)
99
134
 
100
135
  The message and other parameters can be customized using the [expected Simple Form configuration options](https://www.rubydoc.info/github/plataformatec/simple_form/SimpleForm%2FFormBuilder:error_notification).
101
136
 
137
+ ## Tailwind JIT configuration
138
+
139
+ How to pass the `SIMPLE_FORM_TAILWIND_DIR` environment variable in to
140
+ `tailwind.config.js` is going to vary depending on how your build setup calls
141
+ the `tailwindcss` CLI.
142
+
143
+ If you're using the [tailwindcss-rails gem][] with its `tailwindcss:build` and `tailwindcss:watch` rake tasks, you can override them with something like this:
144
+
145
+ ```ruby
146
+ # lib/tasks/tailwindcss.rake
147
+
148
+ TAILWIND_COMPILE_COMMAND = "#{RbConfig.ruby} #{Pathname.new(__dir__).to_s}/../../exe/tailwindcss -i '#{Rails.root.join("app/assets/stylesheets/application.tailwind.css")}' -o '#{Rails.root.join("app/assets/builds/tailwind.css")}' -c '#{Rails.root.join("config/tailwind.config.js")}' --minify"
149
+ SIMPLE_FORM_TAILWIND_GEMDIR = `bundle show simple_form_tailwind_css`
150
+
151
+ Rake::Task["tailwindcss:build"].clear
152
+ Rake::Task["tailwindcss:watch"].clear
153
+ namespace :tailwindcss do
154
+ desc "Build your Tailwind CSS"
155
+ task :build do
156
+ system({"SIMPLE_FORM_TAILWIND_GEMDIR" => SIMPLE_FORM_TAILWIND_GEMDIR}, TAILWIND_COMPILE_COMMAND, exception: true)
157
+ end
158
+
159
+ desc "Watch and build your Tailwind CSS on file changes"
160
+ task :watch do
161
+ system({"SIMPLE_FORM_TAILWIND_GEMDIR" => SIMPLE_FORM_TAILWIND_GEMDIR}, "#{TAILWIND_COMPILE_COMMAND} -w")
162
+ end
163
+ end
164
+ ```
165
+
166
+ For myself, using [Propshaft][] and an npm script, I made this change:
167
+
168
+ ```diff
169
+ --- a/package.json
170
+ +++ b/package.json
171
+ @@ -50,10 +50,10 @@
172
+ },
173
+ "scripts": {
174
+ "build-dev:js": "esbuild `find app/javascript -type f` --tsconfig=./tsconfig.json --bundle --sourcemap --outdir=app/assets/builds --public-path=assets",
175
+ - "build-dev:tailwind": "tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/tailwind.css --minify",
176
+ + "build-dev:tailwind": "SIMPLE_FORM_TAILWIND_DIR=\"`bundle show simple_form_tailwind_css`\" tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/tailwind.css --minify",
177
+ "build-dev:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
178
+ }
179
+ }
180
+ ```
181
+
182
+ [Propshaft]: https://github.com/rails/propshaft
183
+
184
+ As an absolute last resort, instead of dynamically setting the `content` config
185
+ option you could use `safelist` instead. [Here's an example][safelist example]
186
+ from the project issues.
187
+
188
+ However, this approach is [discouraged by Tailwind][], and is unsupported by this
189
+ gem as it's likely to break in the future if class names are changed.
190
+
191
+ [discouraged by Tailwind]: https://tailwindcss.com/docs/content-configuration#safelisting-classes
192
+ [safelist example]: https://github.com/abevoelker/simple_form_tailwind_css/issues/4#issuecomment-1232210573
193
+
102
194
  ## Tailwind workarounds
103
195
 
104
196
  When using spacing classes such as `space-y-<number>`, Tailwind 2 has [an unfortunate shortcoming](https://github.com/tailwindlabs/tailwindcss/issues/3413) where certain hidden elements disrupt element spacing. Rails's authenticity token unfortunately is one such hidden element that triggers this behavior.
@@ -127,4 +219,3 @@ Instead add a wrapper `<div>` around the form elements:
127
219
 
128
220
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
129
221
 
130
- [Simple Form]: https://github.com/heartcombo/simple_form
@@ -2,8 +2,17 @@ module SimpleForm
2
2
  module Tailwind
3
3
  class ErrorNotification < SimpleForm::ErrorNotification
4
4
  def render
5
+ if @options[:color]
6
+ warn "WARNING SimpleForm::Tailwind's :color error_notification option has " \
7
+ "been removed due to incompatibility with Tailwind's JIT. " \
8
+ "Please replace with the new :icon_classes, :message_classes, and " \
9
+ ":border_classes options (see README for an example)."
10
+ end
11
+
5
12
  if has_errors?
6
- color = @options.fetch(:color, "red")
13
+ icon_classes = @options.fetch(:icon_classes, "h-5 w-5 text-red-400")
14
+ message_classes = @options.fetch(:message_classes, "text-sm text-red-700")
15
+ border_classes = @options.fetch(:border_classes, "bg-red-50 border-l-4 border-red-400 p-4")
7
16
  icon = @options.fetch(:icon, "x-circle")
8
17
 
9
18
  template.content_tag(
@@ -14,14 +23,14 @@ module SimpleForm
14
23
  (
15
24
  template.content_tag(
16
25
  :div,
17
- template.heroicon(icon, options: { class: "h-5 w-5 text-#{color}-400" }),
26
+ template.heroicon(icon, options: { class: icon_classes }),
18
27
  class: "flex-shrink-0"
19
28
  ) + template.content_tag(
20
29
  :div,
21
30
  template.content_tag(
22
31
  :p,
23
32
  error_message,
24
- class: "text-sm text-#{color}-700"
33
+ class: message_classes
25
34
  ),
26
35
  class: "ml-3"
27
36
  )
@@ -29,7 +38,7 @@ module SimpleForm
29
38
  class: "flex"
30
39
  )
31
40
  ),
32
- class: "bg-#{color}-50 border-l-4 border-#{color}-400 p-4"
41
+ class: border_classes
33
42
  )
34
43
  end
35
44
  end
@@ -1,5 +1,5 @@
1
1
  module SimpleForm
2
2
  module Tailwind
3
- VERSION = "0.0.2"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_form_tailwind_css
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abe Voelker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-08 00:00:00.000000000 Z
11
+ date: 2022-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_form