mirror of
https://github.com/iconify/iconify.git
synced 2024-12-12 13:47:49 +00:00
fix: correct handling for icons with palette in Tailwind plugin, plugin demo
This commit is contained in:
parent
626ac30ca6
commit
0dbc5da8b3
@ -167,6 +167,12 @@ Directory `plugins` contains plugins.
|
|||||||
| ------------------------------------------ | ------------ |
|
| ------------------------------------------ | ------------ |
|
||||||
| [Tailwind CSS plugin](./plugins/tailwind/) | Tailwind CSS |
|
| [Tailwind CSS plugin](./plugins/tailwind/) | Tailwind CSS |
|
||||||
|
|
||||||
|
#### Demo
|
||||||
|
|
||||||
|
Directory `plugins-demo` contains demo packages that show usage of plugins.
|
||||||
|
|
||||||
|
- [Tailwind demo](./plugins-demo/tailwind-demo/) - demo for Tailwind CSS plugin. Run `npm run build` to build demo, open `src/index.html` in browser to see result.
|
||||||
|
|
||||||
## Installation, debugging and contributing
|
## Installation, debugging and contributing
|
||||||
|
|
||||||
See [CONTRIBUTING.md](./CONTRIBUTING.md).
|
See [CONTRIBUTING.md](./CONTRIBUTING.md).
|
||||||
|
3
plugins-demo/tailwind-demo/.gitignore
vendored
Normal file
3
plugins-demo/tailwind-demo/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
dist
|
17
plugins-demo/tailwind-demo/package.json
Normal file
17
plugins-demo/tailwind-demo/package.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "@iconify-demo/tailwind",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tailwindcss -i ./src/input.css -o ./dist/output.css"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"devDependencies": {
|
||||||
|
"@iconify/tailwind": "workspace:*",
|
||||||
|
"@iconify-json/mdi-light": "^1.1.5",
|
||||||
|
"@iconify-json/vscode-icons": "^1.1.21",
|
||||||
|
"tailwindcss": "^3.2.4"
|
||||||
|
}
|
||||||
|
}
|
35
plugins-demo/tailwind-demo/src/index.html
Normal file
35
plugins-demo/tailwind-demo/src/index.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<link href="../dist/output.css" rel="stylesheet" />
|
||||||
|
</head>
|
||||||
|
<body class="m-0 p-2">
|
||||||
|
<p>
|
||||||
|
Few icons that change color on hover (first icon also changes icon
|
||||||
|
on hover):
|
||||||
|
<span class="text-3xl demo">
|
||||||
|
<span
|
||||||
|
class="icon-[mdi-light--arrow-left] hover:icon-hover-[mdi-light--arrow-right]"
|
||||||
|
></span>
|
||||||
|
<span class="icon-[mdi-light--forum]"></span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Icons with hardcoded palette:
|
||||||
|
<span class="text-3xl demo">
|
||||||
|
<span
|
||||||
|
class="icon-[vscode-icons--file-type-access] hover:icon-hover-[vscode-icons--file-type-access2]"
|
||||||
|
></span>
|
||||||
|
<span class="icon-[vscode-icons--file-type-vue]"></span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Clean selector:
|
||||||
|
<span
|
||||||
|
class="icon--mdi-light icon--mdi-light--home text-3xl demo"
|
||||||
|
></span>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
11
plugins-demo/tailwind-demo/src/input.css
Normal file
11
plugins-demo/tailwind-demo/src/input.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
.demo {
|
||||||
|
color: #16a34a;
|
||||||
|
vertical-align: -6px;
|
||||||
|
}
|
||||||
|
.demo:hover {
|
||||||
|
color: #b91c1c;
|
||||||
|
}
|
20
plugins-demo/tailwind-demo/tailwind.config.js
Normal file
20
plugins-demo/tailwind-demo/tailwind.config.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
const {
|
||||||
|
addCleanIconSelectors,
|
||||||
|
addDynamicIconSelectors,
|
||||||
|
} = require('@iconify/tailwind');
|
||||||
|
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
module.exports = {
|
||||||
|
content: ['./src/*.html'],
|
||||||
|
plugins: [
|
||||||
|
// Plugin with clean selectors: requires writing all used icons in first parameter
|
||||||
|
addCleanIconSelectors(['mdi-light:home']),
|
||||||
|
// Plugin with dynamic selectors
|
||||||
|
addDynamicIconSelectors(),
|
||||||
|
// Plugin with dynamic selectors that contains only css for overriding icon
|
||||||
|
addDynamicIconSelectors({
|
||||||
|
prefix: 'icon-hover',
|
||||||
|
overrideOnly: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
@ -2,7 +2,7 @@
|
|||||||
"name": "@iconify/tailwind",
|
"name": "@iconify/tailwind",
|
||||||
"description": "Iconify plugin for Tailwind CSS",
|
"description": "Iconify plugin for Tailwind CSS",
|
||||||
"author": "Vjacheslav Trushkin <cyberalien@gmail.com> (https://iconify.design)",
|
"author": "Vjacheslav Trushkin <cyberalien@gmail.com> (https://iconify.design)",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./dist/plugin.js",
|
"main": "./dist/plugin.js",
|
||||||
"types": "./dist/plugin.d.ts",
|
"types": "./dist/plugin.d.ts",
|
||||||
|
@ -16,7 +16,7 @@ export function getDynamicCSSRules(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const [prefix, name] = nameParts;
|
const [prefix, name] = nameParts;
|
||||||
if (!prefix.match(matchIconName) || !name.match(matchIconName)) {
|
if (!(prefix.match(matchIconName) && name.match(matchIconName))) {
|
||||||
throw new Error(`Invalid icon name: "${icon}"`);
|
throw new Error(`Invalid icon name: "${icon}"`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,18 +21,32 @@ export interface IconifyPluginLoaderOptions {
|
|||||||
/**
|
/**
|
||||||
* Locate icon set
|
* Locate icon set
|
||||||
*/
|
*/
|
||||||
|
interface LocatedIconSet {
|
||||||
|
main: string;
|
||||||
|
info?: string;
|
||||||
|
}
|
||||||
export function locateIconSet(
|
export function locateIconSet(
|
||||||
prefix: string,
|
prefix: string,
|
||||||
options: IconifyPluginLoaderOptions
|
options: IconifyPluginLoaderOptions
|
||||||
): string | undefined {
|
): LocatedIconSet | undefined {
|
||||||
if (options.files?.[prefix]) {
|
if (options.files?.[prefix]) {
|
||||||
return options.files?.[prefix];
|
return {
|
||||||
|
main: options.files?.[prefix],
|
||||||
|
};
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return require.resolve(`@iconify-json/${prefix}/icons.json`);
|
const main = require.resolve(`@iconify-json/${prefix}/icons.json`);
|
||||||
|
const info = require.resolve(`@iconify-json/${prefix}/info.json`);
|
||||||
|
return {
|
||||||
|
main,
|
||||||
|
info,
|
||||||
|
};
|
||||||
} catch {}
|
} catch {}
|
||||||
try {
|
try {
|
||||||
return require.resolve(`@iconify/json/json/${prefix}.json`);
|
const main = require.resolve(`@iconify/json/json/${prefix}.json`);
|
||||||
|
return {
|
||||||
|
main,
|
||||||
|
};
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,17 +80,25 @@ export function loadIconSet(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const filename = options.files?.[prefix] || locateIconSet(prefix, options);
|
const filename = options.files?.[prefix] || locateIconSet(prefix, options);
|
||||||
if (filename) {
|
if (!filename) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const main = typeof filename === 'string' ? filename : filename.main;
|
||||||
|
|
||||||
// Check for cache
|
// Check for cache
|
||||||
if (cache[filename]) {
|
if (cache[main]) {
|
||||||
return cache[filename];
|
return cache[main];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to load it
|
// Attempt to load it
|
||||||
try {
|
try {
|
||||||
const result = JSON.parse(readFileSync(filename, 'utf8'));
|
const result = JSON.parse(readFileSync(main, 'utf8'));
|
||||||
cache[filename] = result;
|
if (!result.info && typeof filename === 'object' && filename.info) {
|
||||||
|
// Load info from a separate file
|
||||||
|
result.info = JSON.parse(readFileSync(filename.info, 'utf8'));
|
||||||
|
}
|
||||||
|
cache[main] = result;
|
||||||
return result;
|
return result;
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
717
pnpm-lock.yaml
717
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -9,4 +9,5 @@ packages:
|
|||||||
- 'plugins/*'
|
- 'plugins/*'
|
||||||
- 'components-demo/*'
|
- 'components-demo/*'
|
||||||
- 'iconify-icon-demo/*'
|
- 'iconify-icon-demo/*'
|
||||||
|
- 'plugins-demo/*'
|
||||||
# - 'debug/*'
|
# - 'debug/*'
|
||||||
|
Loading…
Reference in New Issue
Block a user