tailwindcss-rails 3.3.1 → 4.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +109 -9
- data/lib/generators/tailwindcss/authentication/templates/app/views/passwords/edit.html.erb +2 -2
- data/lib/generators/tailwindcss/authentication/templates/app/views/passwords/new.html.erb +1 -1
- data/lib/generators/tailwindcss/authentication/templates/app/views/sessions/new.html.erb +2 -2
- data/lib/generators/tailwindcss/scaffold/templates/_form.html.erb.tt +6 -6
- data/lib/install/application.tailwind.css +1 -13
- data/lib/install/{tailwindcss.rb → install_tailwindcss.rb} +2 -7
- data/lib/install/upgrade_tailwindcss.rb +48 -0
- data/lib/tailwindcss/commands.rb +0 -1
- data/lib/tailwindcss/engine.rb +0 -4
- data/lib/tailwindcss/version.rb +1 -1
- data/lib/tasks/install.rake +1 -1
- data/lib/tasks/upgrade.rake +6 -0
- metadata +6 -6
- data/app/assets/stylesheets/inter-font.css +0 -194
- data/lib/install/tailwind.config.js +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90c12e592470225fa2691b3d6a05f37a9e2ec42105914808503fb2ff8dcad26d
|
4
|
+
data.tar.gz: b8ed05daad38b1e5d444e642d2c6959a9bdeccf7b73dffb64cd6180298f9e9e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 503d686e869134450c4b7088881779bc63db162e2b75864c2ced185a4575a8d3425c8f7afb7929e892dbf1196e79cf163480e7e4d637a0a6467e03e26b9f256d
|
7
|
+
data.tar.gz: b44d09d37a35e990f020526880d4d227759b24f979c3443009d7dc5f2f0ffca03ad8a3ea686b6e969530f05e4e4bf96337812132ef58f5c7ff85657a94dfe85d
|
data/README.md
CHANGED
@@ -9,6 +9,10 @@
|
|
9
9
|
- [Installation](#installation)
|
10
10
|
* [Choosing a specific version of `tailwindcss`](#choosing-a-specific-version-of-tailwindcss)
|
11
11
|
* [Using a local installation of `tailwindcss`](#using-a-local-installation-of-tailwindcss)
|
12
|
+
- [Upgrading your application from Tailwind v3 to v4](#upgrading-your-application-from-tailwind-v3-to-v4)
|
13
|
+
* [You don't _have_ to upgrade](#you-dont-_have_-to-upgrade)
|
14
|
+
* [Upgrade steps](#upgrade-steps)
|
15
|
+
* [Troubleshooting](#troubleshooting)
|
12
16
|
- [Developing with Tailwindcss](#developing-with-tailwindcss)
|
13
17
|
* [Configuration and commands](#configuration-and-commands)
|
14
18
|
* [Building for production](#building-for-production)
|
@@ -17,7 +21,7 @@
|
|
17
21
|
* [Live rebuild](#live-rebuild)
|
18
22
|
* [Using with PostCSS](#using-with-postcss)
|
19
23
|
* [Custom inputs or outputs](#custom-inputs-or-outputs)
|
20
|
-
- [Troubleshooting](#troubleshooting)
|
24
|
+
- [Troubleshooting](#troubleshooting-1)
|
21
25
|
* [Lost keystrokes or hanging when using terminal-based debugging tools (e.g. IRB, Pry, `ruby/debug`...etc.) with the Puma plugin](#lost-keystrokes-or-hanging-when-using-terminal-based-debugging-tools-eg-irb-pry-rubydebugetc-with-the-puma-plugin)
|
22
26
|
* [Running in a docker container exits prematurely](#running-in-a-docker-container-exits-prematurely)
|
23
27
|
* [Conflict with sassc-rails](#conflict-with-sassc-rails)
|
@@ -55,21 +59,117 @@ gem "tailwindcss-ruby", "3.4.13"
|
|
55
59
|
You can also use a local (npm-based) installation if you prefer, please go to https://github.com/flavorjones/tailwindcss-ruby for more information.
|
56
60
|
|
57
61
|
|
58
|
-
##
|
62
|
+
## Upgrading your application from Tailwind v3 to v4
|
59
63
|
|
60
|
-
|
64
|
+
v4.x of this gem has been updated to work with Tailwind v4, including providing some help with upgrading your application.
|
65
|
+
|
66
|
+
A full explanation of a Tailwind v4 upgrade is out of scope for this README, so we strongly urge you to read the [official Tailwind v4 upgrade guide](https://tailwindcss.com/docs/upgrade-guide) before embarking on an upgrade to an existing large app.
|
67
|
+
|
68
|
+
This gem will help with some of the mechanics of the upgrade, however.
|
69
|
+
|
70
|
+
### You don't _have_ to upgrade
|
71
|
+
|
72
|
+
Keep in mind that you don't _need_ to upgrade. You can stay on Tailwind v3 for the foreseeable future if you prefer not to migrate now, or if your migration runs into problems.
|
73
|
+
|
74
|
+
Just make sure you're pinning the version of **both** `tailwindcss-rails` and `tailwindcss-ruby`:
|
75
|
+
|
76
|
+
``` ruby
|
77
|
+
# Gemfile
|
78
|
+
gem "tailwindcss-rails", "~> 3.3"
|
79
|
+
gem "tailwindcss-ruby", "~> 3.4"
|
80
|
+
```
|
81
|
+
|
82
|
+
|
83
|
+
### Upgrade steps
|
84
|
+
|
85
|
+
First, update to `tailwindcss-rails` v4.0.0 or higher. This will also ensure you're transitively depending on `tailwindcss-ruby` v4.
|
86
|
+
|
87
|
+
``` html
|
88
|
+
# Gemfile
|
89
|
+
gem "tailwindcss-rails", "~> 4.0"
|
90
|
+
```
|
91
|
+
|
92
|
+
Then, run the `tailwindcss:upgrade` task. Among other things, this will try to run the official Tailwind upgrade utility. It requires `npx` in order to run, but it's a one-time operation and is *highly recommended* for a successful upgrade.
|
93
|
+
|
94
|
+
Here's what the upgrade task does:
|
95
|
+
|
96
|
+
- Cleans up some things in the generated `config/tailwind.config.js`.
|
97
|
+
- Runs the upstream upgrader (note: requires `npx` to run the one-time upgrade, but highly recommended).
|
98
|
+
- Removes references to the Inter font from the application layout.
|
99
|
+
- If present, moves `config/postcss.config.js` to the root directory.
|
100
|
+
|
101
|
+
Here's what that upgrade looks like on a vanilla Rails app:
|
102
|
+
|
103
|
+
``` sh
|
104
|
+
$ bin/rails tailwindcss:upgrade
|
105
|
+
apply /path/to/tailwindcss-rails/lib/install/upgrade_tailwindcss.rb
|
106
|
+
Removing references to 'defaultTheme' from /home/user/myapp/config/tailwind.config.js
|
107
|
+
gsub config/tailwind.config.js
|
108
|
+
Running the upstream Tailwind CSS upgrader
|
109
|
+
run npx @tailwindcss/upgrade@next --force --config /home/user/myapp/config/tailwind.config.js from "."
|
110
|
+
≈ tailwindcss v4.0.0
|
111
|
+
|
112
|
+
│ Searching for CSS files in the current directory and its subdirectories…
|
113
|
+
|
114
|
+
│ ↳ Linked `./config/tailwind.config.js` to `./app/assets/stylesheets/application.tailwind.css`
|
115
|
+
|
116
|
+
│ Migrating JavaScript configuration files…
|
61
117
|
|
62
|
-
|
118
|
+
│ ↳ The configuration file at `./config/tailwind.config.js` could not be automatically migrated to the new CSS
|
119
|
+
│ configuration format, so your CSS has been updated to load your existing configuration file.
|
63
120
|
|
64
|
-
|
121
|
+
│ Migrating templates…
|
122
|
+
|
123
|
+
│ ↳ Migrated templates for configuration file: `./config/tailwind.config.js`
|
124
|
+
|
125
|
+
│ Migrating stylesheets…
|
126
|
+
|
127
|
+
│ ↳ Migrated stylesheet: `./app/assets/stylesheets/application.tailwind.css`
|
128
|
+
|
129
|
+
│ ↳ No PostCSS config found, skipping migration.
|
130
|
+
|
131
|
+
│ Updating dependencies…
|
132
|
+
|
133
|
+
│ Could not detect a package manager. Please manually update `tailwindcss` to v4.
|
134
|
+
|
135
|
+
│ Verify the changes and commit them to your repository.
|
136
|
+
|
137
|
+
Strip Inter font CSS from application layout
|
138
|
+
gsub app/views/layouts/application.html.erb
|
139
|
+
Compile initial Tailwind build
|
140
|
+
run rails tailwindcss:build from "."
|
141
|
+
≈ tailwindcss v4.0.0
|
142
|
+
|
143
|
+
Done in 52ms
|
144
|
+
run bundle install --quiet
|
145
|
+
```
|
146
|
+
|
147
|
+
If this doesn't succeed, it's likely that you've customized your Tailwind configuration and you'll need to do some work to make sure your application upgrades. Please read the [official upgrade guide](https://tailwindcss.com/docs/upgrade-guide)!
|
148
|
+
|
149
|
+
|
150
|
+
### Troubleshooting
|
151
|
+
|
152
|
+
You may want to check out [TailwindCSS v4 - upgrade experience report · rails/tailwindcss-rails · Discussion #450](https://github.com/rails/tailwindcss-rails/discussions/450) if you're having trouble upgrading.
|
153
|
+
|
154
|
+
We know there are some cases we haven't addressed with the upgrade task:
|
155
|
+
|
156
|
+
- If the user isn’t using PostCSS, some migrations (e.g., updating class names in the view files) may fail
|
157
|
+
- In setups without JavaScript tooling, the update process may fail to fully migrate `tailwind.config.js` because the tool assumes that the imported packages (e.g., tailwind plugins) are installed via a package manager, allowing them to be called.
|
158
|
+
|
159
|
+
We'll try to improve the upgrade process over time, but for now you may need to do some manual work to upgrade.
|
160
|
+
|
161
|
+
|
162
|
+
## Developing with Tailwindcss
|
163
|
+
|
164
|
+
### Configuration and commands
|
65
165
|
|
66
166
|
#### Input file: `app/assets/stylesheets/application.tailwind.css`
|
67
167
|
|
68
|
-
The installer will generate a Tailwind input file in `app/assets/stylesheets/application.tailwind.css`. This is where you import the plugins you want to use
|
168
|
+
The installer will generate a Tailwind input file in `app/assets/stylesheets/application.tailwind.css`. This is where you import the plugins you want to use and where you can setup your custom `@apply` rules.
|
69
169
|
|
70
170
|
#### Output file: `app/assets/builds/tailwind.css`
|
71
171
|
|
72
|
-
When you run `rails tailwindcss:build`, the input file will be used to generate the output in `app/assets/builds/tailwind.css`. That's the output CSS that you'll include in your app
|
172
|
+
When you run `rails tailwindcss:build`, the input file will be used to generate the output in `app/assets/builds/tailwind.css`. That's the output CSS that you'll include in your app.
|
73
173
|
|
74
174
|
#### Commands
|
75
175
|
|
@@ -151,12 +251,12 @@ Running `bin/dev` invokes Foreman to start both the Tailwind watch process and t
|
|
151
251
|
|
152
252
|
### Using with PostCSS
|
153
253
|
|
154
|
-
If you want to use PostCSS as a preprocessor, create a custom `
|
254
|
+
If you want to use PostCSS as a preprocessor, create a custom `postcss.config.js` in your project root directory, and that file will be loaded by tailwind automatically.
|
155
255
|
|
156
256
|
For example, to enable nesting:
|
157
257
|
|
158
258
|
```js
|
159
|
-
//
|
259
|
+
// postcss.config.js
|
160
260
|
module.exports = {
|
161
261
|
plugins: {
|
162
262
|
'postcss-import': {},
|
@@ -7,11 +7,11 @@
|
|
7
7
|
|
8
8
|
<%%= form_with url: password_path(params[:token]), method: :put, class: "contents" do |form| %>
|
9
9
|
<div class="my-5">
|
10
|
-
<%%= form.password_field :password, required: true, autocomplete: "new-password", placeholder: "Enter new password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 outline-
|
10
|
+
<%%= form.password_field :password, required: true, autocomplete: "new-password", placeholder: "Enter new password", maxlength: 72, class: "block shadow-sm rounded-md border border-gray-400 outline-hidden focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
11
11
|
</div>
|
12
12
|
|
13
13
|
<div class="my-5">
|
14
|
-
<%%= form.password_field :password_confirmation, required: true, autocomplete: "new-password", placeholder: "Repeat new password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 outline-
|
14
|
+
<%%= form.password_field :password_confirmation, required: true, autocomplete: "new-password", placeholder: "Repeat new password", maxlength: 72, class: "block shadow-sm rounded-md border border-gray-400 outline-hidden focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
15
15
|
</div>
|
16
16
|
|
17
17
|
<div class="inline">
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
<%%= form_with url: passwords_path, class: "contents" do |form| %>
|
9
9
|
<div class="my-5">
|
10
|
-
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow rounded-md border border-gray-400 outline-
|
10
|
+
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow-sm rounded-md border border-gray-400 outline-hidden focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
11
11
|
</div>
|
12
12
|
|
13
13
|
<div class="inline">
|
@@ -11,11 +11,11 @@
|
|
11
11
|
|
12
12
|
<%%= form_with url: session_url, class: "contents" do |form| %>
|
13
13
|
<div class="my-5">
|
14
|
-
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow rounded-md border border-gray-400 focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
14
|
+
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow-sm rounded-md border border-gray-400 focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
15
15
|
</div>
|
16
16
|
|
17
17
|
<div class="my-5">
|
18
|
-
<%%= form.password_field :password, required: true, autocomplete: "current-password", placeholder: "Enter your password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
18
|
+
<%%= form.password_field :password, required: true, autocomplete: "current-password", placeholder: "Enter your password", maxlength: 72, class: "block shadow-sm rounded-md border border-gray-400 focus:outline-blue-600 px-3 py-2 mt-2 w-full" %>
|
19
19
|
</div>
|
20
20
|
|
21
21
|
<div class="col-span-6 sm:flex sm:items-center sm:gap-4">
|
@@ -15,23 +15,23 @@
|
|
15
15
|
<div class="my-5">
|
16
16
|
<% if attribute.password_digest? -%>
|
17
17
|
<%%= form.label :password %>
|
18
|
-
<%%= form.password_field :password, class: ["block shadow rounded-md border outline-
|
18
|
+
<%%= form.password_field :password, class: ["block shadow-sm rounded-md border outline-hidden px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:password].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:password].any?}] %>
|
19
19
|
</div>
|
20
20
|
|
21
21
|
<div class="my-5">
|
22
22
|
<%%= form.label :password_confirmation %>
|
23
|
-
<%%= form.password_field :password_confirmation, class: ["block shadow rounded-md border outline-
|
23
|
+
<%%= form.password_field :password_confirmation, class: ["block shadow-sm rounded-md border outline-hidden px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:password_confirmation].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:password_confirmation].any?}] %>
|
24
24
|
<% elsif attribute.attachments? -%>
|
25
25
|
<%%= form.label :<%= attribute.column_name %> %>
|
26
|
-
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true, class: ["block shadow rounded-md border outline-
|
26
|
+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true, class: ["block shadow-sm rounded-md border outline-hidden px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:password].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:password].any?}] %>
|
27
27
|
<% else -%>
|
28
28
|
<%%= form.label :<%= attribute.column_name %> %>
|
29
29
|
<% if attribute.field_type == :textarea || attribute.field_type == :text_area -%>
|
30
|
-
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, rows: 4, class: ["block shadow rounded-md border outline-
|
30
|
+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, rows: 4, class: ["block shadow-sm rounded-md border outline-hidden px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].any?}] %>
|
31
31
|
<% elsif attribute.field_type == :checkbox || attribute.field_type == :check_box -%>
|
32
|
-
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: ["block shadow rounded-md border outline-
|
32
|
+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: ["block shadow-sm rounded-md border outline-hidden mt-2 h-5 w-5", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].any?}] %>
|
33
33
|
<% else -%>
|
34
|
-
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: ["block shadow rounded-md border outline-
|
34
|
+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: ["block shadow-sm rounded-md border outline-hidden px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].none?, "border-red-400 focus:outline-red-600": <%= model_resource_name %>.errors[:<%= attribute.column_name %>].any?}] %>
|
35
35
|
<% end -%>
|
36
36
|
<% end -%>
|
37
37
|
</div>
|
@@ -4,7 +4,7 @@ CENTERING_CONTAINER_INSERTION_POINT = /^\s*<%= yield %>/.freeze
|
|
4
4
|
if APPLICATION_LAYOUT_PATH.exist?
|
5
5
|
say "Add Tailwindcss include tags and container element in application layout"
|
6
6
|
insert_into_file APPLICATION_LAYOUT_PATH.to_s, <<~ERB.indent(4), before: /^\s*<%= stylesheet_link_tag/
|
7
|
-
<%= stylesheet_link_tag "tailwind", "
|
7
|
+
<%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %>
|
8
8
|
ERB
|
9
9
|
|
10
10
|
if File.open(APPLICATION_LAYOUT_PATH).read =~ /<body>\n\s*<%= yield %>\n\s*<\/body>/
|
@@ -13,7 +13,7 @@ if APPLICATION_LAYOUT_PATH.exist?
|
|
13
13
|
end
|
14
14
|
else
|
15
15
|
say "Default application.html.erb is missing!", :red
|
16
|
-
say %( Add <%= stylesheet_link_tag "tailwind", "
|
16
|
+
say %( Add <%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %> within the <head> tag in your custom layout.)
|
17
17
|
end
|
18
18
|
|
19
19
|
say "Build into app/assets/builds"
|
@@ -28,11 +28,6 @@ if Rails.root.join(".gitignore").exist?
|
|
28
28
|
append_to_file(".gitignore", %(\n/app/assets/builds/*\n!/app/assets/builds/.keep\n))
|
29
29
|
end
|
30
30
|
|
31
|
-
unless Rails.root.join("config/tailwind.config.js").exist?
|
32
|
-
say "Add default config/tailwindcss.config.js"
|
33
|
-
copy_file "#{__dir__}/tailwind.config.js", "config/tailwind.config.js"
|
34
|
-
end
|
35
|
-
|
36
31
|
unless Rails.root.join("app/assets/stylesheets/application.tailwind.css").exist?
|
37
32
|
say "Add default app/assets/stylesheets/application.tailwind.css"
|
38
33
|
copy_file "#{__dir__}/application.tailwind.css", "app/assets/stylesheets/application.tailwind.css"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
TAILWIND_CONFIG_PATH = Rails.root.join("config/tailwind.config.js")
|
2
|
+
APPLICATION_LAYOUT_PATH = Rails.root.join("app/views/layouts/application.html.erb")
|
3
|
+
POSTCSS_CONFIG_PATH = Rails.root.join("config/postcss.config.js")
|
4
|
+
|
5
|
+
unless TAILWIND_CONFIG_PATH.exist?
|
6
|
+
say "Default tailwind.config.js is missing!", :red
|
7
|
+
abort
|
8
|
+
end
|
9
|
+
|
10
|
+
if File.read(TAILWIND_CONFIG_PATH).match?(/defaultTheme/)
|
11
|
+
say "Removing references to 'defaultTheme' from #{TAILWIND_CONFIG_PATH}"
|
12
|
+
gsub_file TAILWIND_CONFIG_PATH.to_s, /^(.*defaultTheme)/, "// \\1"
|
13
|
+
end
|
14
|
+
|
15
|
+
if POSTCSS_CONFIG_PATH.exist?
|
16
|
+
say "Moving PostCSS configuration to application root directory"
|
17
|
+
FileUtils.mv(POSTCSS_CONFIG_PATH, Rails.root, verbose: true) || abort
|
18
|
+
end
|
19
|
+
|
20
|
+
if system("npx --version")
|
21
|
+
say "Running the upstream Tailwind CSS upgrader"
|
22
|
+
command = Shellwords.join(["npx", "@tailwindcss/upgrade@next", "--force", "--config", TAILWIND_CONFIG_PATH.to_s])
|
23
|
+
success = run(command, abort_on_failure: false)
|
24
|
+
unless success
|
25
|
+
say "The upgrade tool failed!", :red
|
26
|
+
say %( You probably need to update your configuration. Please read the error messages,)
|
27
|
+
say %( and check the Tailwind CSS upgrade guide at https://tailwindcss.com/docs/upgrade-guide.)
|
28
|
+
abort
|
29
|
+
end
|
30
|
+
else
|
31
|
+
say "Could not run the Tailwind upgrade tool. Please see https://tailwindcss.com/docs/upgrade-guide for manual instructions.", :red
|
32
|
+
abort
|
33
|
+
end
|
34
|
+
|
35
|
+
if APPLICATION_LAYOUT_PATH.exist?
|
36
|
+
if File.read(APPLICATION_LAYOUT_PATH).match?(/"inter-font"/)
|
37
|
+
say "Strip Inter font CSS from application layout"
|
38
|
+
gsub_file APPLICATION_LAYOUT_PATH.to_s, %r{, "inter-font"}, ""
|
39
|
+
else
|
40
|
+
say "Inter font CSS not detected.", :green
|
41
|
+
end
|
42
|
+
else
|
43
|
+
say "Default application.html.erb is missing!", :red
|
44
|
+
say %( Please check your layouts and remove any "inter-font" stylesheet links.)
|
45
|
+
end
|
46
|
+
|
47
|
+
say "Compile initial Tailwind build"
|
48
|
+
run "rails tailwindcss:build"
|
data/lib/tailwindcss/commands.rb
CHANGED
@@ -10,7 +10,6 @@ module Tailwindcss
|
|
10
10
|
Tailwindcss::Ruby.executable(**kwargs),
|
11
11
|
"-i", rails_root.join("app/assets/stylesheets/application.tailwind.css").to_s,
|
12
12
|
"-o", rails_root.join("app/assets/builds/tailwind.css").to_s,
|
13
|
-
"-c", rails_root.join("config/tailwind.config.js").to_s,
|
14
13
|
]
|
15
14
|
|
16
15
|
command << "--minify" unless (debug || rails_css_compressor?)
|
data/lib/tailwindcss/engine.rb
CHANGED
@@ -2,10 +2,6 @@ require "rails"
|
|
2
2
|
|
3
3
|
module Tailwindcss
|
4
4
|
class Engine < ::Rails::Engine
|
5
|
-
initializer "tailwindcss.assets" do
|
6
|
-
Rails.application.config.assets.precompile += %w( inter-font.css )
|
7
|
-
end
|
8
|
-
|
9
5
|
initializer "tailwindcss.disable_generator_stylesheets" do
|
10
6
|
Rails.application.config.generators.stylesheets = false
|
11
7
|
end
|
data/lib/tailwindcss/version.rb
CHANGED
data/lib/tasks/install.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
namespace :tailwindcss do
|
2
2
|
desc "Install Tailwind CSS into the app"
|
3
3
|
task :install do
|
4
|
-
system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/
|
4
|
+
system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/install_tailwindcss.rb", __dir__)}"
|
5
5
|
end
|
6
6
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tailwindcss-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -29,14 +29,14 @@ dependencies:
|
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '4.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '4.0'
|
40
40
|
email: david@loudthinking.com
|
41
41
|
executables: []
|
42
42
|
extensions: []
|
@@ -61,7 +61,6 @@ files:
|
|
61
61
|
- app/assets/fonts/Inter-roman.latin.var.woff2
|
62
62
|
- app/assets/fonts/Inter-roman.symbols.var.woff2
|
63
63
|
- app/assets/fonts/Inter-roman.vietnamese.var.woff2
|
64
|
-
- app/assets/stylesheets/inter-font.css
|
65
64
|
- lib/generators/tailwindcss/authentication/authentication_generator.rb
|
66
65
|
- lib/generators/tailwindcss/authentication/templates/app/views/passwords/edit.html.erb
|
67
66
|
- lib/generators/tailwindcss/authentication/templates/app/views/passwords/new.html.erb
|
@@ -83,8 +82,8 @@ files:
|
|
83
82
|
- lib/install/Procfile.dev
|
84
83
|
- lib/install/application.tailwind.css
|
85
84
|
- lib/install/dev
|
86
|
-
- lib/install/
|
87
|
-
- lib/install/
|
85
|
+
- lib/install/install_tailwindcss.rb
|
86
|
+
- lib/install/upgrade_tailwindcss.rb
|
88
87
|
- lib/puma/plugin/tailwindcss.rb
|
89
88
|
- lib/tailwindcss-rails.rb
|
90
89
|
- lib/tailwindcss/commands.rb
|
@@ -94,6 +93,7 @@ files:
|
|
94
93
|
- lib/tasks/build.rake
|
95
94
|
- lib/tasks/clobber.rake
|
96
95
|
- lib/tasks/install.rake
|
96
|
+
- lib/tasks/upgrade.rake
|
97
97
|
homepage: https://github.com/rails/tailwindcss-rails
|
98
98
|
licenses:
|
99
99
|
- MIT
|
@@ -1,194 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*= link_directory ../fonts
|
3
|
-
*/
|
4
|
-
|
5
|
-
@font-face {
|
6
|
-
font-family: 'Inter var';
|
7
|
-
font-style: italic;
|
8
|
-
font-weight: 100 900;
|
9
|
-
font-display: swap;
|
10
|
-
src: url('Inter-italic.extra.var.woff2') format('woff2');
|
11
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
12
|
-
font-named-instance: 'Italic';
|
13
|
-
}
|
14
|
-
/* alternates */
|
15
|
-
@font-face {
|
16
|
-
font-family: 'Inter var';
|
17
|
-
font-style: italic;
|
18
|
-
font-weight: 100 900;
|
19
|
-
font-display: swap;
|
20
|
-
src: url('Inter-italic.alternates.var.woff2') format('woff2');
|
21
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
22
|
-
font-named-instance: 'Italic';
|
23
|
-
}
|
24
|
-
/* symbols */
|
25
|
-
@font-face {
|
26
|
-
font-family: 'Inter var';
|
27
|
-
font-style: italic;
|
28
|
-
font-weight: 100 900;
|
29
|
-
font-display: swap;
|
30
|
-
src: url('Inter-italic.symbols.var.woff2') format('woff2');
|
31
|
-
unicode-range: U+20DD-20DF,U+2190-219A,U+21A9-21AB,U+21B0-21B2,U+21B3-21B6,U+21BA-21BC,U+21D0,U+21D2,U+21D4,U+21DE-21E0,U+21E4-21E6,U+21E7,U+21EA,U+2303,U+2305,U+2318,U+2325-2328,U+232B,U+2380,U+2387,U+238B,U+23CE-23D0,U+2460-2469,U+24B6-24D0,U+24EA,U+25A0-25A3,U+25B2-25B4,U+25B6-25B8,U+25BA-25BE,U+25C0-25C2,U+25C4-25C8,U+25CB,U+25CF,U+25EF,U+2600,U+2605-2607,U+263C,U+2661,U+2665,U+26A0,U+2713,U+2717,U+2756,U+2764,U+2780-2789,U+27F5-27FB,U+2B06,U+2B12-2B14,U+2B1C,U+E000,U+E12B-E164,U+1F130-1F14A,U+1F850,U+1F852;
|
32
|
-
font-named-instance: 'Italic';
|
33
|
-
}
|
34
|
-
|
35
|
-
/* extra */
|
36
|
-
@font-face {
|
37
|
-
font-family: 'Inter var';
|
38
|
-
font-style: italic;
|
39
|
-
font-weight: 100 900;
|
40
|
-
font-display: swap;
|
41
|
-
src: url('Inter-italic.extra.var.woff2') format('woff2');
|
42
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
43
|
-
font-named-instance: 'Italic';
|
44
|
-
}
|
45
|
-
/* alternates */
|
46
|
-
@font-face {
|
47
|
-
font-family: 'Inter var';
|
48
|
-
font-style: italic;
|
49
|
-
font-weight: 100 900;
|
50
|
-
font-display: swap;
|
51
|
-
src: url('Inter-italic.alternates.var.woff2') format('woff2');
|
52
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
53
|
-
font-named-instance: 'Italic';
|
54
|
-
}
|
55
|
-
/* symbols */
|
56
|
-
@font-face {
|
57
|
-
font-family: 'Inter var';
|
58
|
-
font-style: italic;
|
59
|
-
font-weight: 100 900;
|
60
|
-
font-display: swap;
|
61
|
-
src: url('Inter-italic.symbols.var.woff2') format('woff2');
|
62
|
-
unicode-range: U+20DD-20DF,U+2190-219A,U+21A9-21AB,U+21B0-21B2,U+21B3-21B6,U+21BA-21BC,U+21D0,U+21D2,U+21D4,U+21DE-21E0,U+21E4-21E6,U+21E7,U+21EA,U+2303,U+2305,U+2318,U+2325-2328,U+232B,U+2380,U+2387,U+238B,U+23CE-23D0,U+2460-2469,U+24B6-24D0,U+24EA,U+25A0-25A3,U+25B2-25B4,U+25B6-25B8,U+25BA-25BE,U+25C0-25C2,U+25C4-25C8,U+25CB,U+25CF,U+25EF,U+2600,U+2605-2607,U+263C,U+2661,U+2665,U+26A0,U+2713,U+2717,U+2756,U+2764,U+2780-2789,U+27F5-27FB,U+2B06,U+2B12-2B14,U+2B1C,U+E000,U+E12B-E164,U+1F130-1F14A,U+1F850,U+1F852;
|
63
|
-
font-named-instance: 'Italic';
|
64
|
-
}
|
65
|
-
/* cyrillic */
|
66
|
-
@font-face {
|
67
|
-
font-family: 'Inter var';
|
68
|
-
font-style: italic;
|
69
|
-
font-weight: 100 900;
|
70
|
-
font-display: swap;
|
71
|
-
src: url('Inter-italic.cyrillic.var.woff2') format('woff2');
|
72
|
-
unicode-range: U+0400-049E,U+04A0-0500,U+052F,U+20B4,U+2116,U+2DFF,U+A69F;
|
73
|
-
font-named-instance: 'Italic';
|
74
|
-
}
|
75
|
-
/* greek */
|
76
|
-
@font-face {
|
77
|
-
font-family: 'Inter var';
|
78
|
-
font-style: italic;
|
79
|
-
font-weight: 100 900;
|
80
|
-
font-display: swap;
|
81
|
-
src: url('Inter-italic.greek.var.woff2') format('woff2');
|
82
|
-
unicode-range: U+0370-0378,U+037A-0380,U+0384-038B,U+038C,U+038E-03A2,U+03A3-03E2,U+03F0-0400,U+1F00-1F16,U+1F18-1F1E,U+1F20-1F46,U+1F48-1F4E,U+1F50-1F58,U+1F59,U+1F5B,U+1F5D,U+1F5F-1F7E,U+1F80-1FB5,U+1FB6-1FC5,U+1FC6-1FD4,U+1FD6-1FDC,U+1FDD-1FF0,U+1FF2-1FF5,U+1FF6-1FFF;
|
83
|
-
font-named-instance: 'Italic';
|
84
|
-
}
|
85
|
-
/* vietnamese */
|
86
|
-
@font-face {
|
87
|
-
font-family: 'Inter var';
|
88
|
-
font-style: italic;
|
89
|
-
font-weight: 100 900;
|
90
|
-
font-display: swap;
|
91
|
-
src: url('Inter-italic.vietnamese.var.woff2') format('woff2');
|
92
|
-
unicode-range: U+0102-0104,U+0110-0112,U+0128-012A,U+0168-016A,U+01A0-01A2,U+01AF-01B1,U+1EA0-1EFA,U+20AB;
|
93
|
-
font-named-instance: 'Italic';
|
94
|
-
}
|
95
|
-
/* latin-ext */
|
96
|
-
@font-face {
|
97
|
-
font-family: 'Inter var';
|
98
|
-
font-style: italic;
|
99
|
-
font-weight: 100 900;
|
100
|
-
font-display: swap;
|
101
|
-
src: url('Inter-italic.latin-ext.var.woff2') format('woff2');
|
102
|
-
unicode-range: U+0100-0149,U+014A-01C4,U+01C5-0250,U+0259,U+1E00-1F00,U+2020,U+20A0-20AC,U+20AD-20C0,U+2113,U+2C7C,U+2C7F,U+A7FF;
|
103
|
-
font-named-instance: 'Italic';
|
104
|
-
}
|
105
|
-
/* latin */
|
106
|
-
@font-face {
|
107
|
-
font-family: 'Inter var';
|
108
|
-
font-style: italic;
|
109
|
-
font-weight: 100 900;
|
110
|
-
font-display: swap;
|
111
|
-
src: url('Inter-italic.latin.var.woff2') format('woff2');
|
112
|
-
unicode-range: U+0000-007F,U+00A0-0100,U+0131,U+0152-0154,U+02BB-02BD,U+02C6,U+02DA,U+02DC,U+2000-200C,U+2010-2028,U+202F-2060,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+FEFF;
|
113
|
-
font-named-instance: 'Italic';
|
114
|
-
}
|
115
|
-
/* extra */
|
116
|
-
@font-face {
|
117
|
-
font-family: 'Inter var';
|
118
|
-
font-style: normal;
|
119
|
-
font-weight: 100 900;
|
120
|
-
font-display: swap;
|
121
|
-
src: url('Inter-roman.extra.var.woff2') format('woff2');
|
122
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
123
|
-
font-named-instance: 'Regular';
|
124
|
-
}
|
125
|
-
/* alternates */
|
126
|
-
@font-face {
|
127
|
-
font-family: 'Inter var';
|
128
|
-
font-style: normal;
|
129
|
-
font-weight: 100 900;
|
130
|
-
font-display: swap;
|
131
|
-
src: url('Inter-roman.alternates.var.woff2') format('woff2');
|
132
|
-
unicode-range: U+E000,U+E002-E081,U+E093-E097,U+E0A5-E0E7,U+E0F3-E11D,U+E11E-E165,U+EE01,U+F6C3;
|
133
|
-
font-named-instance: 'Regular';
|
134
|
-
}
|
135
|
-
/* symbols */
|
136
|
-
@font-face {
|
137
|
-
font-family: 'Inter var';
|
138
|
-
font-style: normal;
|
139
|
-
font-weight: 100 900;
|
140
|
-
font-display: swap;
|
141
|
-
src: url('Inter-roman.symbols.var.woff2') format('woff2');
|
142
|
-
unicode-range: U+20DD-20DF,U+2190-219A,U+21A9-21AB,U+21B0-21B2,U+21B3-21B6,U+21BA-21BC,U+21D0,U+21D2,U+21D4,U+21DE-21E0,U+21E4-21E6,U+21E7,U+21EA,U+2303,U+2305,U+2318,U+2325-2328,U+232B,U+2380,U+2387,U+238B,U+23CE-23D0,U+2460-2469,U+24B6-24D0,U+24EA,U+25A0-25A3,U+25B2-25B4,U+25B6-25B8,U+25BA-25BE,U+25C0-25C2,U+25C4-25C8,U+25CB,U+25CF,U+25EF,U+2600,U+2605-2607,U+263C,U+2661,U+2665,U+26A0,U+2713,U+2717,U+2756,U+2764,U+2780-2789,U+27F5-27FB,U+2B06,U+2B12-2B14,U+2B1C,U+E000,U+E12B-E164,U+1F130-1F14A,U+1F850,U+1F852;
|
143
|
-
font-named-instance: 'Regular';
|
144
|
-
}
|
145
|
-
/* cyrillic */
|
146
|
-
@font-face {
|
147
|
-
font-family: 'Inter var';
|
148
|
-
font-style: normal;
|
149
|
-
font-weight: 100 900;
|
150
|
-
font-display: swap;
|
151
|
-
src: url('Inter-roman.cyrillic.var.woff2') format('woff2');
|
152
|
-
unicode-range: U+0400-049E,U+04A0-0500,U+052F,U+20B4,U+2116,U+2DFF,U+A69F;
|
153
|
-
font-named-instance: 'Regular';
|
154
|
-
}
|
155
|
-
/* greek */
|
156
|
-
@font-face {
|
157
|
-
font-family: 'Inter var';
|
158
|
-
font-style: normal;
|
159
|
-
font-weight: 100 900;
|
160
|
-
font-display: swap;
|
161
|
-
src: url('Inter-roman.greek.var.woff2') format('woff2');
|
162
|
-
unicode-range: U+0370-0378,U+037A-0380,U+0384-038B,U+038C,U+038E-03A2,U+03A3-03E2,U+03F0-0400,U+1F00-1F16,U+1F18-1F1E,U+1F20-1F46,U+1F48-1F4E,U+1F50-1F58,U+1F59,U+1F5B,U+1F5D,U+1F5F-1F7E,U+1F80-1FB5,U+1FB6-1FC5,U+1FC6-1FD4,U+1FD6-1FDC,U+1FDD-1FF0,U+1FF2-1FF5,U+1FF6-1FFF;
|
163
|
-
font-named-instance: 'Regular';
|
164
|
-
}
|
165
|
-
/* vietnamese */
|
166
|
-
@font-face {
|
167
|
-
font-family: 'Inter var';
|
168
|
-
font-style: normal;
|
169
|
-
font-weight: 100 900;
|
170
|
-
font-display: swap;
|
171
|
-
src: url('Inter-roman.vietnamese.var.woff2') format('woff2');
|
172
|
-
unicode-range: U+0102-0104,U+0110-0112,U+0128-012A,U+0168-016A,U+01A0-01A2,U+01AF-01B1,U+1EA0-1EFA,U+20AB;
|
173
|
-
font-named-instance: 'Regular';
|
174
|
-
}
|
175
|
-
/* latin-ext */
|
176
|
-
@font-face {
|
177
|
-
font-family: 'Inter var';
|
178
|
-
font-style: normal;
|
179
|
-
font-weight: 100 900;
|
180
|
-
font-display: swap;
|
181
|
-
src: url('Inter-roman.latin-ext.var.woff2') format('woff2');
|
182
|
-
unicode-range: U+0100-0149,U+014A-01C4,U+01C5-0250,U+0259,U+1E00-1F00,U+2020,U+20A0-20AC,U+20AD-20C0,U+2113,U+2C7C,U+2C7F,U+A7FF;
|
183
|
-
font-named-instance: 'Regular';
|
184
|
-
}
|
185
|
-
/* latin */
|
186
|
-
@font-face {
|
187
|
-
font-family: 'Inter var';
|
188
|
-
font-style: normal;
|
189
|
-
font-weight: 100 900;
|
190
|
-
font-display: swap;
|
191
|
-
src: url('Inter-roman.latin.var.woff2') format('woff2');
|
192
|
-
unicode-range: U+0000-007F,U+00A0-0100,U+0131,U+0152-0154,U+02BB-02BD,U+02C6,U+02DA,U+02DC,U+2000-200C,U+2010-2028,U+202F-2060,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+FEFF;
|
193
|
-
font-named-instance: 'Regular';
|
194
|
-
}
|
@@ -1,22 +0,0 @@
|
|
1
|
-
const defaultTheme = require('tailwindcss/defaultTheme')
|
2
|
-
|
3
|
-
module.exports = {
|
4
|
-
content: [
|
5
|
-
'./public/*.html',
|
6
|
-
'./app/helpers/**/*.rb',
|
7
|
-
'./app/javascript/**/*.js',
|
8
|
-
'./app/views/**/*.{erb,haml,html,slim}'
|
9
|
-
],
|
10
|
-
theme: {
|
11
|
-
extend: {
|
12
|
-
fontFamily: {
|
13
|
-
sans: ['Inter var', ...defaultTheme.fontFamily.sans],
|
14
|
-
},
|
15
|
-
},
|
16
|
-
},
|
17
|
-
plugins: [
|
18
|
-
// require('@tailwindcss/forms'),
|
19
|
-
// require('@tailwindcss/typography'),
|
20
|
-
// require('@tailwindcss/container-queries'),
|
21
|
-
]
|
22
|
-
}
|