Skip to content

Commit 12813fd

Browse files
committed
prepare tailwind 4 support
1 parent dc715b9 commit 12813fd

File tree

10 files changed

+55
-62
lines changed

10 files changed

+55
-62
lines changed

README.md

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,31 @@ Imagine you could write an Intersection Observer like a Tailwind CSS variant:
1313

1414
## Installation
1515
This package has two parts. A Tailwind CSS plugin and a tiny JavaScript snippet.<br>
16-
Download and install it with NPM:
16+
Download and install it via npm:
1717
```sh
18-
npm install -D tailwindcss-intersect
18+
npm install tailwindcss-intersect
1919
```
2020

21-
### Add the plugin to your tailwind.config.js file
21+
### Import
22+
Import it just like Tailwind CSS in your CSS file:
23+
```css
24+
/* tailwind css v4.x */
25+
@import "tailwindcss";
26+
@import "tailwindcss-intersect";
27+
```
28+
29+
If you are using **Tailwind CSS v3** or a JavaScript configuration file, import it like this:
2230
```js
2331
// tailwind.config.js
2432
module.exports = {
25-
// ...
26-
plugins: [
27-
require('tailwindcss-intersect')
28-
],
33+
// ...
34+
plugins: [
35+
require('tailwindcss-intersect')
36+
],
2937
}
3038
```
3139

32-
### Add the necessary JavaScript snippet to your site
40+
### Add the necessary JavaScript snippet
3341

3442
#### Via CDN
3543
You can include the CDN build of this plugin as a `<script>` tag to your site:
@@ -79,21 +87,8 @@ If you want to define the intersection behavior in a custom class (e.g. with the
7987
<div class="intersect custom-class"></div>
8088
```
8189

82-
## Migrate from 1.x
83-
If you have integrated the JavaScript snippet via NPM, change the import like this:
84-
```js
85-
// v1.x
86-
import Observer from 'tailwindcss-intersect';
87-
88-
// v2.x
89-
import { Observer } from 'tailwindcss-intersect';
90-
91-
Observer.start();
92-
```
93-
That's it! 🎉
94-
9590
---
9691

97-
<a href="https://tailwindcss.com/"><img src="https://img.shields.io/badge/Tailwind%20CSS-3.2+-38bdf8?style=for-the-badge"></a>
98-
<a href="https://www.npmjs.com/package/tailwindcss-intersect"><img src="https://img.shields.io/npm/v/tailwindcss-intersect?style=for-the-badge"></a>
92+
<a href="https://v3.tailwindcss.com/"><img src="https://img.shields.io/badge/Tailwind%20CSS-3.2+-38bdf8?style=for-the-badge"></a>
93+
<a href="https://tailwindcss.com/"><img src="https://img.shields.io/badge/Tailwind%20CSS-4.0+-38bdf8?style=for-the-badge"></a>
9994
<a href="https://www.npmjs.com/package/tailwindcss-intersect"><img src="https://img.shields.io/npm/dt/tailwindcss-intersect?style=for-the-badge"></a>

docs/example/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<meta http-equiv="X-UA-Compatible" content="IE=edge">
77
<meta name="viewport" content="width=device-width, initial-scale=1.0">
88
<title>Example „Cards” - Tailwind CSS Intersection Observer Plugin</title>
9-
<link href="styles.css" rel="stylesheet">
9+
<link href="output.css" rel="stylesheet">
1010
<script defer src="https://unpkg.com/[email protected]/dist/observer.min.js"></script>
1111
</head>
1212

docs/example/input.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@import "tailwindcss" source(none);
2+
3+
@import "../../src/";
4+
5+
@source "index.html"

docs/example/output.css

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/example/styles.css

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/example/tailwind.config.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

eslint.config.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1+
import js from '@eslint/js'
12
import globals from 'globals'
2-
import eslint from '@eslint/js'
3-
import tseslint from 'typescript-eslint'
43
import eslintPluginJest from 'eslint-plugin-jest'
54

6-
export default tseslint.config(
7-
eslint.configs.recommended,
8-
...tseslint.configs.recommended,
5+
export default [
6+
js.configs.recommended,
97
eslintPluginJest.configs['flat/recommended'],
108
{
119
languageOptions: {
@@ -19,20 +17,20 @@ export default tseslint.config(
1917
rules: {
2018
'comma-spacing': ['error', { 'before': false, 'after': true }],
2119
'comma-style': ['error', 'last'],
20+
'eol-last': ['error', 'always'],
2221
'func-call-spacing': ['error', 'never'],
2322
'key-spacing': ['error', { 'mode': 'minimum', 'beforeColon': false, 'afterColon': true }],
2423
'keyword-spacing': ['error', { 'before': true, 'after': true }],
2524
'linebreak-style': ['error', 'unix'],
2625
'lines-between-class-members': ['error', 'always'],
27-
'no-console': ['warn', { 'allow': ['warn'] }],
26+
'no-console': ['warn', { 'allow': ['warn', 'error'] }],
2827
'no-empty-function': 'error',
2928
'no-multiple-empty-lines': ['error', { 'max': 2 }],
3029
'no-var': 'error',
3130
'quotes': ['error', 'single'],
3231
'semi': ['error', 'never'],
33-
'svelte/no-at-html-tags': 'off',
3432
'space-before-blocks': ['error', 'always'],
3533
'space-before-function-paren': ['error', { 'named': 'never', 'anonymous': 'always', 'asyncArrow': 'always' }],
3634
},
37-
}
38-
)
35+
},
36+
]

package.json

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,32 @@
1919
"type": "module",
2020
"main": "dist/index.cjs.js",
2121
"module": "dist/index.esm.js",
22+
"style": "dist/index.css",
2223
"unpkg": "dist/observer.min.js",
2324
"types": "dist/index.d.ts",
2425
"files": [
2526
"/dist"
2627
],
2728
"scripts": {
28-
"dev": "npx tailwindcss -c ./docs/example/tailwind.config.js -o ./docs/example/styles.css",
29-
"watch": "npx tailwindcss -c ./docs/example/tailwind.config.js -o ./docs/example/styles.css --watch",
30-
"prod": "npx tailwindcss -c ./docs/example/tailwind.config.js -o ./docs/example/styles.css --minify",
29+
"dev": "npx @tailwindcss/cli -i docs/example/input.css -o docs/example/output.css",
30+
"watch": "npx @tailwindcss/cli -i docs/example/input.css -o docs/example/output.css --watch",
31+
"prod": "npx @tailwindcss/cli -i docs/example/input.css -o docs/example/output.css --minify",
3132
"build": "node scripts/build.js && npm run prod",
3233
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --setupFilesAfterEnv '<rootDir>/jest/customMatchers.js'",
33-
"lint": "npx eslint {src,jest}/**",
34-
"lint:fix": "npx eslint {src,jest}/** --fix"
34+
"lint": "npx eslint",
35+
"lint:fix": "npx eslint --fix"
3536
},
3637
"peerDependencies": {
37-
"tailwindcss": ">=3.2.0"
38+
"tailwindcss": ">=3.2.0 || >=4.0.0"
3839
},
3940
"devDependencies": {
40-
"@eslint/js": "^9.5.0",
41-
"esbuild": "^0.21.5",
42-
"eslint": "^9.5.0",
43-
"eslint-plugin-jest": "^28.6.0",
44-
"globals": "^15.6.0",
41+
"@eslint/js": "^9.19.0",
42+
"@tailwindcss/cli": "^4.0.0",
43+
"esbuild": "^0.24.2",
44+
"eslint": "^9.18.0",
45+
"eslint-plugin-jest": "^28.11.0",
4546
"jest": "^29.7.0",
46-
"prettier": "^2.8.8",
47-
"tailwindcss": "^3.2.0",
48-
"typescript": "^5.5.2",
49-
"typescript-eslint": "^7.14.1"
47+
"tailwindcss": "^4.0.0",
48+
"typescript": "^5.7.3"
5049
}
5150
}

scripts/build.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,10 @@ fs.copyFile('./src/index.d.ts', './dist/index.d.ts', error => {
3636
process.exit(1)
3737
}
3838
})
39+
40+
fs.copyFile('./src/index.css', './dist/index.css', error => {
41+
if (error) {
42+
console.error(error.message)
43+
process.exit(1)
44+
}
45+
})

src/index.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@custom-variant intersect (&:not([no-intersect]));

0 commit comments

Comments
 (0)