├── .gitignore ├── .prettierrc ├── masks ├── squircle.svg ├── squircle@2x.svg └── squircle@3x.svg ├── .editorconfig ├── .eslintrc ├── .github └── workflows │ └── test.yml ├── test.js ├── LICENSE ├── README.md ├── package.json ├── index.ts ├── CHANGELOG.md └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | npm-debug.log 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "printWidth": 80, 5 | "arrowParens": "avoid" 6 | } 7 | -------------------------------------------------------------------------------- /masks/squircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /masks/squircle@2x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /masks/squircle@3x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [] 4 | indent_style = tab 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = false 10 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | }, 5 | "extends": ["airbnb-base", "prettier"], 6 | "plugins": ["prettier"], 7 | "rules": { 8 | "import/no-extraneous-dependencies": "off", 9 | "prettier/prettier": ["error"], 10 | "func-names": "off" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Tests 5 | 6 | on: 7 | push: 8 | branches: [main] 9 | pull_request: 10 | branches: [main] 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: [20.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | - name: Use Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | - run: npm ci 27 | - run: npm test 28 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | const plugin = require('./index.ts'); 2 | 3 | const svgMask1x = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' rx='50' fill='black'/%3E%3C/svg%3E`; 4 | 5 | describe('Smooth Corners Plugin', () => { 6 | it('should generate basic utilities with default sizes', () => { 7 | const utilities = {}; 8 | const addUtilities = jest.fn(utils => { 9 | Object.assign(utilities, utils); 10 | }); 11 | 12 | plugin.handler({ addUtilities, theme: () => ({}) }); 13 | 14 | // Test presence of utility classes 15 | expect(Object.keys(utilities)).toContain('.smooth-corners-sm'); 16 | expect(Object.keys(utilities)).toContain('.smooth-corners-md'); 17 | expect(Object.keys(utilities)).toContain('.smooth-corners-lg'); 18 | 19 | // Test mask-border properties 20 | expect( 21 | utilities['.smooth-corners-sm']['@supports (mask-border-width: 60px)'][ 22 | 'mask-border' 23 | ] 24 | ).toBe(`url("${svgMask1x}") 49% fill / 25px`); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Gary Tokman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | npm downloads 4 | 5 | 8 | discord users online 9 | 10 |
11 | 12 | # Corner Smoothing 13 | 14 | Frame 1 15 | 16 | > Adjusts a rounded corner to create a continuous curve. Inspired by [Rob](https://github.com/robb/Continuous-Corners-CSS). 17 | 18 | ## Installation 19 | 20 | Install the plugin from npm: 21 | 22 | ```sh 23 | npm install tailwind-corner-smoothing --save-dev 24 | ``` 25 | 26 | # Usage 27 | v4 28 | 29 | ```js 30 | // Global.css / App.css 31 | 32 | @plugin "tailwind-corner-smoothing"; 33 | 34 | ``` 35 | 36 | 37 | v3 38 | ```js 39 | // tailwind.config.js 40 | module.exports = { 41 | plugins: [require('tailwind-corner-smoothing')], 42 | }; 43 | ``` 44 | 45 | # Example 46 | 47 | ```html 48 |
Smooth corners!
49 | ``` 50 | 51 | # License 52 | 53 | MIT 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-corner-smoothing", 3 | "version": "1.2.0", 4 | "description": "Adjusts a rounded corner to create a continuous curve.", 5 | "main": "index.js", 6 | "files": [ 7 | "index.js" 8 | ], 9 | "scripts": { 10 | "lint": "eslint .", 11 | "lint:fix": "eslint . --fix", 12 | "format": "prettier --write --loglevel=error . !CHANGELOG.md", 13 | "test": "jest", 14 | "test:watch": "jest --watch", 15 | "release": "npx tsc index.ts && standard-version", 16 | "postrelease": "git push --follow-tags origin main && npm publish" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/gtokman/corner-smoothing.git" 21 | }, 22 | "bugs": { 23 | "url": "https://github.com/gtokman/corner-smoothing/issues" 24 | }, 25 | "homepage": "https://github.com/gtokman/corner-smoothing#readme", 26 | "keywords": [ 27 | "create-tailwind-plugin", 28 | "tailwind-css-plugin", 29 | "tailwindcss", 30 | "plugin" 31 | ], 32 | "author": "Gary Tokman", 33 | "license": "MIT", 34 | "devDependencies": { 35 | "eslint": "^7.2.0", 36 | "eslint-config-airbnb-base": "^14.2.1", 37 | "eslint-config-prettier": "^6.15.0", 38 | "eslint-plugin-import": "^2.22.1", 39 | "eslint-plugin-jest": "^24.1.3", 40 | "eslint-plugin-prettier": "^3.1.4", 41 | "husky": "^4.3.0", 42 | "jest": "^26.6.3", 43 | "jest-matcher-css": "^1.1.0", 44 | "lint-staged": "^10.5.2", 45 | "lodash": "^4.17.20", 46 | "postcss": "^8.1.9", 47 | "prettier": "^2.2.0", 48 | "standard-version": "^9.5.0", 49 | "tailwindcss": "latest", 50 | "fs": "^0.0.1-security" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | const plugin = require('tailwindcss/plugin'); 2 | 3 | // Inline SVGs as Base64 encoded strings 4 | const svgMask1x = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' rx='50' fill='black'/%3E%3C/svg%3E`; 5 | const svgMask2x = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' rx='50' fill='black'/%3E%3C/svg%3E`; 6 | const svgMask3x = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='450' height='450' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' rx='50' fill='black'/%3E%3C/svg%3E`; 7 | 8 | module.exports = plugin( 9 | function ({ addUtilities, theme }) { 10 | const options = theme('cornerSmoothing') || {}; 11 | const sizes = options.sizes || { 12 | sm: '25px', 13 | md: '60px', 14 | lg: '75px', 15 | }; 16 | 17 | const utilities = {}; 18 | 19 | Object.entries(sizes).forEach(([key, size]) => { 20 | utilities[`.smooth-corners-${key}`] = { 21 | '@supports (mask-border-width: 60px)': { 22 | 'mask-border': `url("${ 23 | options.maskPath ?? svgMask1x 24 | }") 49% fill / ${size}`, 25 | '@media (min-resolution: 2x)': { 26 | 'mask-border': `url("${ 27 | options.maskPath ?? svgMask2x 28 | }") 49% fill / ${size}`, 29 | }, 30 | '@media (min-resolution: 3x)': { 31 | 'mask-border': `url("${ 32 | options.maskPath ?? svgMask3x 33 | }") 49% fill / ${size}`, 34 | }, 35 | }, 36 | }; 37 | }); 38 | 39 | addUtilities(utilities); 40 | }, 41 | { 42 | theme: { 43 | cornerSmoothing: { 44 | maskPath: svgMask1x, 45 | sizes: { 46 | sm: '25px', 47 | md: '60px', 48 | lg: '75px', 49 | }, 50 | }, 51 | }, 52 | } 53 | ); 54 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ## [1.2.0](https://github.com/gtokman/corner-smoothing/compare/v1.1.1...v1.2.0) (2024-11-05) 6 | 7 | 8 | ### Features 9 | 10 | * convert to use base64 ([a8b214c](https://github.com/gtokman/corner-smoothing/commit/a8b214c58ca016e8ca5a996efbe993cfa3c41712)) 11 | 12 | 13 | ### Bug Fixes 14 | 15 | * update ([e5c2588](https://github.com/gtokman/corner-smoothing/commit/e5c2588db59bc8f33b9adeeb69269739a1006371)) 16 | * updates ([a2fde35](https://github.com/gtokman/corner-smoothing/commit/a2fde352a188ae9705ed65ce60228afe2db3facf)) 17 | * updates to where the assets live ([7575fe1](https://github.com/gtokman/corner-smoothing/commit/7575fe19842f6f0d2ed4e38dab55327df70c765a)) 18 | 19 | ### [1.1.1](https://github.com/gtokman/corner-smoothing/compare/v1.1.0...v1.1.1) (2024-11-05) 20 | 21 | 22 | ### Bug Fixes 23 | 24 | * update the package name ([8d80c6d](https://github.com/gtokman/corner-smoothing/commit/8d80c6d0918bd02e8887ade8f2357427866b14ea)) 25 | * updates ([c33ad22](https://github.com/gtokman/corner-smoothing/commit/c33ad22b62db02b59998c8620c7e0bb29f5885f3)) 26 | 27 | ## 1.1.0 (2024-11-05) 28 | 29 | 30 | ### Features 31 | 32 | * create extension ([a16e914](https://github.com/gtokman/corner-smoothing/commit/a16e914f79b486e8e2e37656e239292e8fb13ee5)) 33 | * create extension ([e8866a4](https://github.com/gtokman/corner-smoothing/commit/e8866a4a8be263dc4b07f4ef1dbe123374bd1806)) 34 | 35 | 36 | ### Bug Fixes 37 | 38 | * update ([f9fb921](https://github.com/gtokman/corner-smoothing/commit/f9fb921612ea6bf98b917c953088b3aaf99055d8)) 39 | * update readme ([48eff93](https://github.com/gtokman/corner-smoothing/commit/48eff935c0c24a2fe7146958dee1a2b257d177ac)) 40 | * update to include files ([725d0fb](https://github.com/gtokman/corner-smoothing/commit/725d0fbc20e89acd8c9a3c6fcbc85f9961fb1523)) 41 | * updates ([fb23b2a](https://github.com/gtokman/corner-smoothing/commit/fb23b2ac6b891be6becafabc8d33007229bf5f89)) 42 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var plugin = require('tailwindcss/plugin'); 2 | var base64Mask1x = 'data:image/png;base64,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'; 3 | var base64Mask2x = 'data:image/png;base64,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'; 4 | var base64Mask3x = 'data:image/png;base64,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'; 5 | module.exports = plugin(function (_a) { 6 | var addUtilities = _a.addUtilities, theme = _a.theme; 7 | var options = theme('cornerSmoothing') || {}; 8 | var sizes = options.sizes || { 9 | sm: '25px', 10 | md: '60px', 11 | lg: '75px', 12 | }; 13 | var utilities = {}; 14 | Object.entries(sizes).forEach(function (_a) { 15 | var key = _a[0], size = _a[1]; 16 | utilities[".smooth-corners-".concat(key)] = { 17 | '@supports (mask-border-width: 60px)': { 18 | 'mask-border': "url(\"".concat(options.maskPath || base64Mask1x, "\") 49% fill / ").concat(size), 19 | '@media (min-resolution: 2x)': { 20 | 'mask-border': "url(\"".concat(options.maskPath || base64Mask2x, "\") 49% fill / ").concat(size), 21 | }, 22 | '@media (min-resolution: 3x)': { 23 | 'mask-border': "url(\"".concat(options.maskPath || base64Mask3x, "\") 49% fill / ").concat(size), 24 | }, 25 | }, 26 | }; 27 | }); 28 | addUtilities(utilities); 29 | }, { 30 | theme: { 31 | cornerSmoothing: { 32 | maskPath: "".concat(base64Mask1x), 33 | maskPath2x: "".concat(base64Mask2x), 34 | maskPath3x: "".concat(base64Mask3x), 35 | sizes: { 36 | sm: '25px', 37 | md: '60px', 38 | lg: '75px', 39 | }, 40 | }, 41 | }, 42 | }); 43 | --------------------------------------------------------------------------------