├── .gitignore ├── README.md ├── package.json ├── packages ├── example │ ├── .babelrc │ ├── .gitignore │ ├── README.md │ ├── components │ │ ├── ClipboardIcon.tsx │ │ ├── CloseIcon.tsx │ │ ├── CodeIcon.tsx │ │ ├── Dialog.tsx │ │ ├── Pattern.tsx │ │ └── Tooltip.tsx │ ├── next.config.js │ ├── package.json │ ├── pages │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── api │ │ │ └── hello.ts │ │ └── index.tsx │ ├── postcss.config.js │ ├── public │ │ ├── favicon.ico │ │ └── isometric.png │ ├── styles │ │ └── globals.css │ ├── tailwind.config.js │ └── tsconfig.json └── tailwindcss-bg-patterns │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_STORE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Inspired by CSS Background Patterns by MagicPattern and used by RelayForms
3 | 4 | 9 | 10 | --- 11 | 12 | ## Demo 13 | 14 | See a live demo of all background patterns here: [Live demo](https://hillmann.cc/tailwindcss-bg-patterns/) 15 | 16 | ## Installation 17 | 18 | Add the `tailwindcss-bg-patterns` plugin to your project: 19 | 20 | ```bash 21 | # Install using npm 22 | npm install --save-dev tailwindcss-bg-patterns 23 | 24 | # Install using yarn 25 | yarn add -D tailwindcss-bg-patterns 26 | 27 | # Install using pnpm 28 | pnpm add -D tailwindcss-bg-patterns 29 | ``` 30 | 31 | ## Usage 32 | 33 | ```javascript 34 | // tailwind.config.js 35 | { 36 | theme: { // defaults to these values 37 | patterns: { 38 | opacities: { 39 | 100: "1", 40 | 80: ".80", 41 | 60: ".60", 42 | 40: ".40", 43 | 20: ".20", 44 | 10: ".10", 45 | 5: ".05", 46 | }, 47 | sizes: { 48 | 1: "0.25rem", 49 | 2: "0.5rem", 50 | 4: "1rem", 51 | 6: "1.5rem", 52 | 8: "2rem", 53 | 16: "4rem", 54 | 20: "5rem", 55 | 24: "6rem", 56 | 32: "8rem", 57 | } 58 | } 59 | }, 60 | plugins: [ 61 | require('tailwindcss-bg-patterns'), 62 | ], 63 | } 64 | ``` 65 | 66 | ## Background Patterns 67 | 68 | Included are the following patterns: 69 | 70 | - Lines (`pattern-lines`) 71 | - Vertical Lines (`pattern-vertical-lines`) 72 | - Diagonal Lines (`pattern-diagonal-lines`) 73 | - Rectangles (`pattern-rectangles`) 74 | - Rhombus (`pattern-rhombus`) 75 | - Dots (`pattern-dots`) 76 | - Boxes (`pattern-boxes`) 77 | - Cross (`pattern-cross`) 78 | - Zigzag (`pattern-zigzag`) 79 | - Zigzag 3D (`pattern-zigzag-3d`) 80 | - Isometric (`pattern-isometric`) 81 | - Wavy (`pattern-wavy`) 82 | - Triangles (`pattern-triangles`) 83 | - Moon (`pattern-moon`) 84 | - Paper (`pattern-paper`) 85 | 86 | ## Utilities 87 | 88 | The plugin provides utility classes to control the foreground and background colors (based on your theme colors) as well as opacity and sizing (can be controlled in your theme, too): 89 | 90 | **Opacity**: `pattern-opacity-80` applies opacity of `0.8` 91 | 92 | By default the plugin comes with the following options for opacity: `pattern-opacity-100`, `pattern-opacity-80`, `pattern-opacity-60`, `pattern-opacity-40`, `pattern-opacity-20`, `pattern-opacity-10`, `pattern-opacity-5`x 93 | 94 | **Size**: `pattern-size-8` applies a size of `2rem` 95 | 96 | By default the plugin comes with the following options for size: `pattern-size-1`, `pattern-size-2`, `pattern-size-4`, `pattern-size-6`, `pattern-size-8`, `pattern-size-16`, `pattern-size-20`, `pattern-size-24`, `pattern-size-32` 97 | 98 | **Color**: `pattern-indigo-600` (foreground) and `pattern-bg-white` (background) 99 | 100 | Colors will be extracted from your theme. 101 | 102 | ## Example 103 | 104 | Applying the isometric background pattern to a div: 105 | 106 | ```html 107 | 110 | ``` 111 | 112 | Which results in: 113 | 114 |  115 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwindcss-bg-patterns-workspace", 3 | "version": "1.0.0", 4 | "keywords": [ 5 | "plugin", 6 | "tailwind", 7 | "tailwind css", 8 | "tailwindcss", 9 | "tailwindcss-plugin", 10 | "css background patterns", 11 | "background patterns" 12 | ], 13 | "repository": "git@github.com:thillmann/tailwind-patterns.git", 14 | "license": "MIT", 15 | "author": "Timo Hillmann
49 |
50 |
51 |
67 | Inspired by CSS Background Patterns by MagicPattern and used by RelayForms
3 | 4 | 9 | 10 | --- 11 | 12 | ## Demo 13 | 14 | See a live demo of all background patterns here: [Live demo](https://hillmann.cc/tailwindcss-bg-patterns/) 15 | 16 | ## Installation 17 | 18 | Add the `tailwindcss-bg-patterns` plugin to your project: 19 | 20 | ```bash 21 | # Install using npm 22 | npm install --save-dev tailwindcss-bg-patterns 23 | 24 | # Install using yarn 25 | yarn add -D tailwindcss-bg-patterns 26 | 27 | # Install using pnpm 28 | pnpm add -D tailwindcss-bg-patterns 29 | ``` 30 | 31 | ## Usage 32 | 33 | ```javascript 34 | // tailwind.config.js 35 | { 36 | theme: { // defaults to these values 37 | patterns: { 38 | opacity: { 39 | 100: "1", 40 | 80: ".80", 41 | 60: ".60", 42 | 40: ".40", 43 | 20: ".20", 44 | 10: ".10", 45 | 5: ".05", 46 | }, 47 | size: { 48 | 1: "0.25rem", 49 | 2: "0.5rem", 50 | 4: "1rem", 51 | 6: "1.5rem", 52 | 8: "2rem", 53 | 16: "4rem", 54 | 20: "5rem", 55 | 24: "6rem", 56 | 32: "8rem", 57 | } 58 | } 59 | }, 60 | plugins: [ 61 | require('tailwindcss-bg-patterns'), 62 | ], 63 | } 64 | ``` 65 | 66 | ## Background Patterns 67 | 68 | Included are the following patterns: 69 | 70 | - Lines (`pattern-lines`) 71 | - Vertical Lines (`pattern-vertical-lines`) 72 | - Diagonal Lines (`pattern-diagonal-lines`) 73 | - Rectangles (`pattern-rectangles`) 74 | - Rhombus (`pattern-rhombus`) 75 | - Dots (`pattern-dots`) 76 | - Boxes (`pattern-boxes`) 77 | - Cross (`pattern-cross`) 78 | - Zigzag (`pattern-zigzag`) 79 | - Zigzag 3D (`pattern-zigzag-3d`) 80 | - Isometric (`pattern-isometric`) 81 | - Wavy (`pattern-wavy`) 82 | - Triangles (`pattern-triangles`) 83 | - Moon (`pattern-moon`) 84 | - Paper (`pattern-paper`) 85 | 86 | ## Utilities 87 | 88 | The plugin provides utility classes to control the foreground and background colors (based on your theme colors) as well as opacity and sizing (can be controlled in your theme, too): 89 | 90 | **Opacity**: `pattern-opacity-80` applies opacity of `0.8` 91 | 92 | By default the plugin comes with the following options for opacity: `pattern-size-100`, `pattern-size-80`, `pattern-size-60`, `pattern-size-40`, `pattern-size-20`, `pattern-size-10`, `pattern-size-5`x 93 | 94 | **Size**: `pattern-size-8` applies a size of `2rem` 95 | 96 | By default the plugin comes with the following options for size: `pattern-size-1`, `pattern-size-2`, `pattern-size-4`, `pattern-size-6`, `pattern-size-8`, `pattern-size-16`, `pattern-size-20`, `pattern-size-24`, `pattern-size-32` 97 | 98 | **Color**: `pattern-indigo-600` (foreground) and `pattern-bg-white` (background) 99 | 100 | Colors will be extracted from your theme. 101 | 102 | ## Example 103 | 104 | Applying the isometric background pattern to a div: 105 | 106 | ```html 107 | 110 | ``` 111 | 112 | Which results in: 113 | 114 |  115 | -------------------------------------------------------------------------------- /packages/tailwindcss-bg-patterns/index.js: -------------------------------------------------------------------------------- 1 | const plugin = require("tailwindcss/plugin"); 2 | 3 | const patterns = [ 4 | { 5 | name: "lines", 6 | styles: { 7 | opacity: "var(--pattern-opacity, 0.4)", 8 | backgroundColor: "var(--pattern-bg-color, transparent)", 9 | backgroundImage: `linear-gradient(0deg, var(--pattern-bg-color, transparent) 50%, var(--pattern-color) 50%)`, 10 | backgroundSize: `var(--pattern-size, 40px) var(--pattern-size, 40px)`, 11 | }, 12 | }, 13 | { 14 | name: "vertical-lines", 15 | styles: { 16 | opacity: "var(--pattern-opacity, 0.4)", 17 | backgroundColor: "var(--pattern-bg-color, transparent)", 18 | backgroundImage: `linear-gradient(to right, var(--pattern-color), var(--pattern-color) var(--pattern-size-half, 20px), var(--pattern-bg-color, transparent) var(--pattern-size-half, 20px), var(--pattern-bg-color, transparent))`, 19 | backgroundSize: `var(--pattern-size, 40px) var(--pattern-size, 40px)`, 20 | }, 21 | }, 22 | { 23 | name: "dots", 24 | styles: { 25 | opacity: "var(--pattern-opacity, 0.4)", 26 | backgroundColor: "var(--pattern-bg-color, transparent)", 27 | backgroundImage: `radial-gradient(var(--pattern-color) calc(var(--pattern-size, 40px) * 0.1), var(--pattern-bg-color) calc(var(--pattern-size, 40px) * 0.1))`, 28 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 29 | }, 30 | }, 31 | { 32 | name: "rhombus", 33 | styles: { 34 | opacity: "var(--pattern-opacity, 0.4)", 35 | backgroundColor: "var(--pattern-bg-color, transparent)", 36 | backgroundImage: `linear-gradient(135deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(225deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(45deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(315deg, var(--pattern-color) 25%, var(--pattern-bg-color) 25%)`, 37 | backgroundPosition: 38 | "var(--pattern-size, 40px) 0, var(--pattern-size, 40px) 0, 0 0, 0 0", 39 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 40 | backgroundRepeat: "repeat", 41 | }, 42 | }, 43 | { 44 | name: "cross", 45 | styles: { 46 | opacity: "var(--pattern-opacity, 0.4)", 47 | backgroundColor: "var(--pattern-bg-color, transparent)", 48 | background: `radial-gradient(circle, transparent 20%, var(--pattern-bg-color) 20%, var(--pattern-bg-color) 80%, transparent 80%, transparent), radial-gradient(circle, transparent 20%, var(--pattern-bg-color) 20%, var(--pattern-bg-color) 80%, transparent 80%, transparent) var(--pattern-size-half, 20px) var(--pattern-size-half, 20px), linear-gradient(var(--pattern-color) calc(var(--pattern-size, 40px) * 0.04), transparent calc(var(--pattern-size, 40px) * 0.04)) 0 calc(var(--pattern-size, 40px) * -0.02), linear-gradient(90deg, var(--pattern-color) calc(var(--pattern-size, 40px) * 0.04), var(--pattern-bg-color) calc(var(--pattern-size, 100px) * 0.04)) calc(var(--pattern-size, 40px) * -0.02) 0`, 49 | backgroundSize: `var(--pattern-size, 40px) var(--pattern-size, 20px), var(--pattern-size, 40px) var(--pattern-size, 20px), var(--pattern-size-half, 20px) var(--pattern-size-half, 20px), var(--pattern-size-half, 20px) var(--pattern-size-half, 20px)`, 50 | }, 51 | }, 52 | { 53 | name: "wavy", 54 | styles: { 55 | opacity: "var(--pattern-opacity, 0.4)", 56 | backgroundColor: "var(--pattern-bg-color, transparent)", 57 | backgroundImage: 58 | "repeating-radial-gradient( circle at 0 0, transparent 0, var(--pattern-bg-color, transparent) var(--pattern-size, 40px) ), repeating-linear-gradient( var(--pattern-color-55), var(--pattern-color) )", 59 | }, 60 | }, 61 | { 62 | name: "zigzag", 63 | styles: { 64 | opacity: "var(--pattern-opacity, 0.4)", 65 | backgroundColor: "var(--pattern-bg-color, transparent)", 66 | backgroundImage: 67 | "linear-gradient(135deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(225deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(45deg, var(--pattern-color) 25%, transparent 25%), linear-gradient(315deg, var(--pattern-color) 25%, var(--pattern-bg-color, transparent) 25%)", 68 | backgroundPosition: 69 | "var(--pattern-size-half, 20px) 0, var(--pattern-size-half, 20px) 0, 0 0, 0 0", 70 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 71 | backgroundRepeat: "repeat", 72 | }, 73 | }, 74 | { 75 | name: "zigzag-3d", 76 | styles: { 77 | opacity: "var(--pattern-opacity, 0.4)", 78 | backgroundColor: "var(--pattern-bg-color, transparent)", 79 | background: 80 | "linear-gradient(135deg, var(--pattern-color-55) 25%, transparent 25%) calc(var(--pattern-size, 40px) * -0.5) 0/ var(--pattern-size, 40px) var(--pattern-size, 40px), linear-gradient(225deg, var(--pattern-color) 25%, transparent 25%) calc(var(--pattern-size, 40px) * -0.5) 0/ var(--pattern-size, 40px) var(--pattern-size, 40px), linear-gradient(315deg, var(--pattern-color-55) 25%, transparent 25%) 0px 0/ var(--pattern-size, 40px) var(--pattern-size, 40px), linear-gradient(45deg, var(--pattern-color) 25%, var(--pattern-bg-color) 25%) 0px 0/ var(--pattern-size, 40px) var(--pattern-size, 40px)", 81 | }, 82 | }, 83 | { 84 | name: "isometric", 85 | styles: { 86 | opacity: "var(--pattern-opacity, 0.4)", 87 | backgroundColor: "var(--pattern-bg-color, transparent)", 88 | backgroundImage: 89 | "linear-gradient(30deg, var(--pattern-color) 12%, transparent 12.5%, transparent 87%, var(--pattern-color) 87.5%, var(--pattern-color)), linear-gradient(150deg, var(--pattern-color) 12%, transparent 12.5%, transparent 87%, var(--pattern-color) 87.5%, var(--pattern-color)), linear-gradient(30deg, var(--pattern-color) 12%, transparent 12.5%, transparent 87%, var(--pattern-color) 87.5%, var(--pattern-color)), linear-gradient(150deg, var(--pattern-color) 12%, transparent 12.5%, transparent 87%, var(--pattern-color) 87.5%, var(--pattern-color)), linear-gradient(60deg, var(--pattern-color-77) 25%, transparent 25.5%, transparent 75%, var(--pattern-color-77) 75%, var(--pattern-color-77)), linear-gradient(60deg, var(--pattern-color-77) 25%, transparent 25.5%, transparent 75%, var(--pattern-color-77) 75%, var(--pattern-color-77))", 90 | backgroundSize: 91 | "var(--pattern-size, 40px) calc(var(--pattern-size, 40px) * 1.75)", 92 | backgroundPosition: 93 | "0 0, 0 0, var(--pattern-size-half, 20px) calc(var(--pattern-size, 40px) * 0.875), var(--pattern-size-half, 20px) calc(var(--pattern-size, 40px) * 0.875), 0 0, var(--pattern-size-half, 20px) calc(var(--pattern-size, 40px) * 0.875)", 94 | }, 95 | }, 96 | { 97 | name: "boxes", 98 | styles: { 99 | opacity: "var(--pattern-opacity, 0.4)", 100 | backgroundColor: "var(--pattern-bg-color, transparent)", 101 | backgroundImage: 102 | "linear-gradient(var(--pattern-color) calc(var(--pattern-size, 40px) * 0.1), transparent calc(var(--pattern-size, 40px) * 0.1)), linear-gradient(to right, var(--pattern-color) calc(var(--pattern-size, 40px) * 0.1), var(--pattern-bg-color, transparent) calc(var(--pattern-size, 40px) * 0.1))", 103 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 104 | }, 105 | }, 106 | { 107 | name: "rectangles", 108 | styles: { 109 | opacity: "var(--pattern-opacity, 0.4)", 110 | backgroundColor: "var(--pattern-bg-color, transparent)", 111 | backgroundImage: 112 | "repeating-linear-gradient(45deg, var(--pattern-color) 25%, transparent 25%, transparent 75%, var(--pattern-color) 75%, var(--pattern-color)), repeating-linear-gradient(45deg, var(--pattern-color) 25%, var(--pattern-bg-color, transparent) 25%, var(--pattern-bg-color, transparent) 75%, var(--pattern-color) 75%, var(--pattern-color))", 113 | backgroundPosition: 114 | "0 0, var(--pattern-size-half, 20px) var(--pattern-size-half, 20px)", 115 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 116 | }, 117 | }, 118 | { 119 | name: "diagonal-lines", 120 | styles: { 121 | opacity: "var(--pattern-opacity, 0.4)", 122 | backgroundColor: "var(--pattern-bg-color, transparent)", 123 | background: 124 | "repeating-linear-gradient( 45deg, var(--pattern-color), var(--pattern-color) calc(var(--pattern-size, 40px) * 0.2), var(--pattern-bg-color, transparent) calc(var(--pattern-size, 40px) * 0.2), var(--pattern-bg-color) var(--pattern-size, 40px) )", 125 | }, 126 | }, 127 | { 128 | name: "triangles", 129 | styles: { 130 | opacity: "var(--pattern-opacity, 0.4)", 131 | backgroundColor: "var(--pattern-bg-color, transparent)", 132 | backgroundImage: "linear-gradient(45deg, var(--pattern-color) 50%, var(--pattern-bg-color, transparent) 50%)", 133 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 134 | }, 135 | }, 136 | { 137 | name: "moon", 138 | styles: { 139 | opacity: "var(--pattern-opacity, 0.4)", 140 | backgroundColor: "var(--pattern-bg-color, transparent)", 141 | backgroundImage: "radial-gradient( ellipse farthest-corner at var(--pattern-size, 40px) var(--pattern-size, 40px), var(--pattern-color), var(--pattern-color) 50%, var(--pattern-bg-color, transparent) 50%)", 142 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px)", 143 | }, 144 | }, 145 | { 146 | name: "paper", 147 | styles: { 148 | opacity: "var(--pattern-opacity, 0.4)", 149 | backgroundColor: "var(--pattern-bg-color, transparent)", 150 | backgroundImage: "linear-gradient(var(--pattern-color) calc(var(--pattern-size, 40px) * 0.04), transparent calc(var(--pattern-size, 40px) * 0.04)), linear-gradient(90deg, var(--pattern-color) calc(var(--pattern-size, 40px) * 0.04), transparent calc(var(--pattern-size, 40px) * 0.04)), linear-gradient(var(--pattern-color) calc(var(--pattern-size, 40px) * 0.02), transparent calc(var(--pattern-size, 40px) * 0.02)), linear-gradient(90deg, var(--pattern-color) 2px, var(--pattern-bg-color, transparent) calc(var(--pattern-size, 40px) * 0.02))", 151 | backgroundSize: "var(--pattern-size, 40px) var(--pattern-size, 40px), var(--pattern-size, 40px) var(--pattern-size, 40px), calc(var(--pattern-size, 40px) * 0.2) calc(var(--pattern-size, 40px) * 0.2), calc(var(--pattern-size, 40px) * 0.2) calc(var(--pattern-size, 40px) * 0.2)", 152 | backgroundPosition: "calc(var(--pattern-size, 40px) * -0.04) calc(var(--pattern-size, 40px) * -0.04), calc(var(--pattern-size, 40px) * -0.04) calc(var(--pattern-size, 40px) * -0.04), calc(var(--pattern-size, 40px) * -0.02) calc(var(--pattern-size, 40px) * -0.02), calc(var(--pattern-size, 40px) * -0.02) calc(var(--pattern-size, 40px) * -0.02)", 153 | }, 154 | }, 155 | ]; 156 | 157 | const defaultOpacities = { 158 | 100: "1", 159 | 80: ".80", 160 | 60: ".60", 161 | 40: ".40", 162 | 20: ".20", 163 | 10: ".10", 164 | 5: ".05", 165 | }; 166 | 167 | const defaultSizes = { 168 | 1: "0.25rem", 169 | 2: "0.5rem", 170 | 4: "1rem", 171 | 6: "1.5rem", 172 | 8: "2rem", 173 | 16: "4rem", 174 | 20: "5rem", 175 | 24: "6rem", 176 | 32: "8rem", 177 | }; 178 | 179 | module.exports = plugin(function ({ addComponents, addUtilities, theme }) { 180 | const colors = theme("colors", {}); 181 | const allColors = Object.keys(colors).map((key) => ({ 182 | name: key, 183 | values: colors[key], 184 | })); 185 | const opacities = theme("patterns.opacity", defaultOpacities); 186 | const sizes = theme("patterns.size", defaultSizes); 187 | 188 | let utilities = {}; 189 | let components = {}; 190 | 191 | allColors.forEach(({ name, values }) => { 192 | if (typeof values === "object") { 193 | Object.keys(values).forEach((value) => { 194 | utilities[`.pattern-${name}-${value}`] = { 195 | "--pattern-color": values[value], 196 | "--pattern-color-55": values[value] + "55", 197 | "--pattern-color-77": values[value] + "77", 198 | }; 199 | utilities[`.pattern-bg-${name}-${value}`] = { 200 | "--pattern-bg-color": values[value], 201 | }; 202 | }); 203 | } else { 204 | utilities[`.pattern-${name}`] = { 205 | "--pattern-color": values, 206 | }; 207 | utilities[`.pattern-bg-${name}`] = { 208 | "--pattern-bg-color": values, 209 | }; 210 | } 211 | }); 212 | 213 | Object.keys(opacities).forEach((opacity) => { 214 | utilities[`.pattern-opacity-${opacity}`] = { 215 | "--pattern-opacity": opacities[opacity], 216 | }; 217 | }); 218 | 219 | Object.keys(sizes).forEach((size) => { 220 | utilities[`.pattern-size-${size}`] = { 221 | "--pattern-size": sizes[size], 222 | "--pattern-size-half": `calc(${sizes[size]} / 2)`, 223 | }; 224 | }); 225 | 226 | patterns.forEach(({ name: patternName, styles }) => { 227 | components[`.pattern-${patternName}`] = styles; 228 | }); 229 | 230 | addUtilities(utilities); 231 | addComponents(components); 232 | }); 233 | -------------------------------------------------------------------------------- /packages/tailwindcss-bg-patterns/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwindcss-bg-patterns", 3 | "version": "0.3.0", 4 | "keywords": [ 5 | "plugin", 6 | "tailwind", 7 | "tailwind css", 8 | "tailwindcss", 9 | "tailwindcss-plugin", 10 | "css background patterns", 11 | "background patterns" 12 | ], 13 | "repository": "git@github.com:thillmann/tailwind-patterns.git", 14 | "license": "MIT", 15 | "author": "Timo Hillmann