├── .gitignore ├── README.md ├── cli.js ├── index.js ├── package-lock.json ├── package.json └── src └── icons └── FluentSearch12Regular.svelte /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte Icon Library - Svelicon 🎨 2 | 3 | Create Svelte components from Iconify SVG icons with type-safe support. A simple CLI tool for generating Svelte icons. 4 | 5 | ## Features ✨ 6 | 7 | - 🎯 **Iconify Integration**: Access and download icons from the Iconify collection. 8 | - ⚡ **Fast Conversion**: Quickly convert SVG icons to Svelte components. 9 | - 📦 **TypeScript Support**: Generate fully typed components with interfaces for Svelte TypeScript projects. 10 | - 🎨 **Customizable Icons**: Control icon size, display behavior, and spacing. 11 | - 🛠️ **CLI Tool**: Easy-to-use command-line interface for Svelte icon generation. 12 | - 🔄 **Flexible Output**: Generate JavaScript or TypeScript Svelte components. 13 | 14 | > Svelicon streamlines the process of using Iconify icons in your Svelte projects, offering TypeScript support and flexible customization. 15 | 16 | ## Requirements 🗒️ 17 | 18 | - Svelte 5 19 | - Awesomeness 20 | 21 | ## Usage 🚀 22 | 23 | ### Basic Usage 24 | 25 | ```bash 26 | npx svelicon fluent/person-passkey-28-filled 27 | ``` 28 | 29 | This command downloads the `person-passkey-28-filled` icon from the `fluent` collection and creates a TypeScript Svelte component at 30 | ``` 31 | src/icons/FluentPersonPasskey28Filled.svelte 32 | ``` 33 | 34 | ### CLI Options 35 | 36 | ```bash 37 | npx svelicon [options] [collection]/[icon] 38 | 39 | Options: 40 | -o, --output Output directory (default: "src/icons") 41 | --withts Generate TypeScript version (default: true) 42 | --withjs Generate JavaScript version 43 | -h, --help Display help for command 44 | ``` 45 | 46 | **Example**: 47 | ```bash 48 | npx svelicon --withjs fluent/person-passkey-28-filled 49 | ``` 50 | 51 | ## Component Props 🎛️ 52 | 53 | All generated components accept these props: 54 | 55 | ```typescript 56 | interface IconProps { 57 | size?: number; // Icon size in em units 58 | class?: string; // Add custom CSS classes to the SVG element 59 | } 60 | ``` 61 | 62 | ## Examples 📝 63 | 64 | ### JavaScript Usage 65 | 66 | ```svelte 67 | 70 | 71 | 72 | ``` 73 | 74 | ### TypeScript Usage 75 | 76 | ```svelte 77 | 85 | 86 | 87 | ``` 88 | 89 | ## Component Output Structure 🏗️ 90 | 91 | Generated components include: 92 | 93 | ```svelte 94 | 100 | 101 | 104 | 105 | 106 | ``` 107 | 108 | ## Benefits 🌟 109 | 110 | - **Zero Runtime Dependencies**: Svelte icon components are standalone. 111 | - **Tree-Shakeable**: Only import the Svelte icons you use. 112 | - **Type-Safe Svelte**: Full TypeScript support for Svelte projects. 113 | - **Small Bundle Size**: Minimal impact on your Svelte app's size. 114 | - **Flexible Svelte Icons**: Use any Iconify icon in your Svelte project. 115 | 116 | https://youtu.be/6cpXq1MHg-A 117 | 118 | ## Contributing 🤝 119 | 120 | Contributions are welcome! Please read our Contributing Guide for details. 121 | 122 | ## License 📄 123 | 124 | MIT © [Friend of Svelte](https://github.com/friendofsvelte) 125 | 126 | ## Support 💖 127 | 128 | If you find this Svelte icon library helpful, please consider: 129 | 130 | - ⭐ Starring the GitHub repo 131 | - 🐛 Creating issues for bugs and feature requests 132 | - 🔀 Contributing to the code base 133 | 134 | ## Related Projects 🔗 135 | 136 | - [Iconify](https://iconify.design/) 137 | - [SvelteKit](https://kit.svelte.dev/) 138 | - [Friend of Svelte](https://github.com/friendofsvelte) 139 | 140 | --- 141 | 142 | Made with ❤️ by [Friend of Svelte](https://github.com/friendofsvelte) 143 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import {program} from 'commander'; 3 | import {downloadIcon} from './index.js'; 4 | 5 | program 6 | .name('iconify-svelte') 7 | .description('Download Iconify icons as Svelte components') 8 | .argument('', 'icon collection (e.g., mdi)') 9 | .option('-o, --output ', 'output directory', 'src/icons') 10 | .option('--withts', 'generate TypeScript version', true) 11 | .option('--withjs', 'generate JavaScript version', false) 12 | .action(async (icon, options) => { 13 | try { 14 | const results = await downloadIcon(icon, { 15 | outputDir: options.output, withTs: options.withts, withJs: options.withjs 16 | }); 17 | 18 | if (results.length) { 19 | console.log('https://github.com/friendofsvelte/svelicon ✨ \n'); 20 | } 21 | results.forEach(file => { 22 | console.log(`🚀 Successfully created: ${file}`); 23 | }); 24 | } catch (error) { 25 | console.error('Error:', error.message); 26 | process.exit(1); 27 | } 28 | }); 29 | 30 | program.parse(); -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import {promises as fs} from 'fs'; 3 | import path from 'path'; 4 | import {mkdirp} from 'mkdirp'; 5 | import {parseSVGContent, convertParsedSVG, iconToSVG} from '@iconify/utils'; 6 | 7 | const capitalizeFirstLetter = (string) => { 8 | // Split the string by ':' and '-' to handle both separator types 9 | return string 10 | .split(/[:,-]/) 11 | .map(word => word.charAt(0).toUpperCase() + word.slice(1)) 12 | .join(''); 13 | }; 14 | 15 | // Common template parts 16 | const generateSvgTemplate = (pathData, width, height, size) => ` 22 | ${pathData} 23 | `; 24 | 25 | const generateComponentTemplate = ({ 26 | scriptContent, size = 'size', pathData, width, height 27 | }) => `${scriptContent} 28 | 29 | ${generateSvgTemplate(pathData, width, height, size)}`; 30 | 31 | function generateComponent(pathData, height, width, componentName, isTypescript) { 32 | const scriptContent = isTypescript ? ` 38 | 39 | ` : ``; 44 | 45 | return generateComponentTemplate({ 46 | scriptContent, pathData, width, height 47 | }); 48 | } 49 | 50 | async function processIconData(svgContent) { 51 | const parsedSVG = parseSVGContent(svgContent); 52 | if (!parsedSVG) { 53 | throw new Error('Could not parse SVG content'); 54 | } 55 | 56 | const iconData = convertParsedSVG(parsedSVG); 57 | if (!iconData) { 58 | throw new Error('Could not convert SVG to icon data'); 59 | } 60 | 61 | return iconData; 62 | } 63 | 64 | export async function downloadIcon(icon, options = {}) { 65 | const { 66 | outputDir = 'src/icons', withTs = false, withJs = true 67 | } = options; 68 | 69 | try { 70 | // Replace spaces with slashes in the name 71 | // Fetch and validate icon 72 | const response = await axios.get(`https://api.iconify.design/${icon}.svg`); 73 | if (response.status !== 200) { 74 | console.log(`Failed to download icon ${icon}`); 75 | return []; 76 | } 77 | 78 | // Process icon data 79 | const iconData = await processIconData(response.data); 80 | const renderData = iconToSVG(iconData, { 81 | height: 'auto', width: 'auto' 82 | }); 83 | 84 | // Prepare output 85 | await mkdirp(outputDir); 86 | const names = icon.split('/'); 87 | const collectionName = names[0]; 88 | const iconName = names[1]; 89 | if (!iconName) { 90 | throw new Error('Invalid icon name'); 91 | } 92 | const componentName = `${capitalizeFirstLetter(collectionName)}${capitalizeFirstLetter(iconName.replace(/ /g, '-'))}`; 93 | 94 | // Generate component content based on type 95 | const content = generateComponent(renderData.body, iconData.height, iconData.width, componentName, withTs); 96 | 97 | // Write file 98 | const outputPath = path.join(outputDir, `${componentName}.svelte`); 99 | await fs.writeFile(outputPath, content, 'utf8'); 100 | 101 | return [outputPath]; 102 | } catch (error) { 103 | console.error(`Failed to download icon ${icon}:\n ${error.message}`); 104 | return []; 105 | } 106 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelicon", 3 | "version": "1.0.3-dev", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelicon", 9 | "version": "1.0.3-dev", 10 | "dependencies": { 11 | "@iconify/utils": "^2.1.5", 12 | "axios": "^1.6.2", 13 | "commander": "^11.1.0", 14 | "mkdirp": "^3.0.1" 15 | }, 16 | "bin": { 17 | "svelicon": "cli.js" 18 | } 19 | }, 20 | "node_modules/@antfu/install-pkg": { 21 | "version": "0.4.1", 22 | "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", 23 | "integrity": "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==", 24 | "license": "MIT", 25 | "dependencies": { 26 | "package-manager-detector": "^0.2.0", 27 | "tinyexec": "^0.3.0" 28 | }, 29 | "funding": { 30 | "url": "https://github.com/sponsors/antfu" 31 | } 32 | }, 33 | "node_modules/@antfu/utils": { 34 | "version": "0.7.10", 35 | "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", 36 | "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", 37 | "license": "MIT", 38 | "funding": { 39 | "url": "https://github.com/sponsors/antfu" 40 | } 41 | }, 42 | "node_modules/@iconify/types": { 43 | "version": "2.0.0", 44 | "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", 45 | "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", 46 | "license": "MIT" 47 | }, 48 | "node_modules/@iconify/utils": { 49 | "version": "2.1.33", 50 | "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.33.tgz", 51 | "integrity": "sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==", 52 | "license": "MIT", 53 | "dependencies": { 54 | "@antfu/install-pkg": "^0.4.0", 55 | "@antfu/utils": "^0.7.10", 56 | "@iconify/types": "^2.0.0", 57 | "debug": "^4.3.6", 58 | "kolorist": "^1.8.0", 59 | "local-pkg": "^0.5.0", 60 | "mlly": "^1.7.1" 61 | } 62 | }, 63 | "node_modules/acorn": { 64 | "version": "8.14.0", 65 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 66 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 67 | "license": "MIT", 68 | "bin": { 69 | "acorn": "bin/acorn" 70 | }, 71 | "engines": { 72 | "node": ">=0.4.0" 73 | } 74 | }, 75 | "node_modules/asynckit": { 76 | "version": "0.4.0", 77 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 78 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 79 | "license": "MIT" 80 | }, 81 | "node_modules/axios": { 82 | "version": "1.7.7", 83 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", 84 | "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", 85 | "license": "MIT", 86 | "dependencies": { 87 | "follow-redirects": "^1.15.6", 88 | "form-data": "^4.0.0", 89 | "proxy-from-env": "^1.1.0" 90 | } 91 | }, 92 | "node_modules/combined-stream": { 93 | "version": "1.0.8", 94 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 95 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 96 | "license": "MIT", 97 | "dependencies": { 98 | "delayed-stream": "~1.0.0" 99 | }, 100 | "engines": { 101 | "node": ">= 0.8" 102 | } 103 | }, 104 | "node_modules/commander": { 105 | "version": "11.1.0", 106 | "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", 107 | "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", 108 | "license": "MIT", 109 | "engines": { 110 | "node": ">=16" 111 | } 112 | }, 113 | "node_modules/confbox": { 114 | "version": "0.1.8", 115 | "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", 116 | "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", 117 | "license": "MIT" 118 | }, 119 | "node_modules/debug": { 120 | "version": "4.3.7", 121 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 122 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 123 | "license": "MIT", 124 | "dependencies": { 125 | "ms": "^2.1.3" 126 | }, 127 | "engines": { 128 | "node": ">=6.0" 129 | }, 130 | "peerDependenciesMeta": { 131 | "supports-color": { 132 | "optional": true 133 | } 134 | } 135 | }, 136 | "node_modules/delayed-stream": { 137 | "version": "1.0.0", 138 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 139 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 140 | "license": "MIT", 141 | "engines": { 142 | "node": ">=0.4.0" 143 | } 144 | }, 145 | "node_modules/follow-redirects": { 146 | "version": "1.15.9", 147 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", 148 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", 149 | "funding": [ 150 | { 151 | "type": "individual", 152 | "url": "https://github.com/sponsors/RubenVerborgh" 153 | } 154 | ], 155 | "license": "MIT", 156 | "engines": { 157 | "node": ">=4.0" 158 | }, 159 | "peerDependenciesMeta": { 160 | "debug": { 161 | "optional": true 162 | } 163 | } 164 | }, 165 | "node_modules/form-data": { 166 | "version": "4.0.1", 167 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 168 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 169 | "license": "MIT", 170 | "dependencies": { 171 | "asynckit": "^0.4.0", 172 | "combined-stream": "^1.0.8", 173 | "mime-types": "^2.1.12" 174 | }, 175 | "engines": { 176 | "node": ">= 6" 177 | } 178 | }, 179 | "node_modules/kolorist": { 180 | "version": "1.8.0", 181 | "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", 182 | "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", 183 | "license": "MIT" 184 | }, 185 | "node_modules/local-pkg": { 186 | "version": "0.5.0", 187 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", 188 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", 189 | "license": "MIT", 190 | "dependencies": { 191 | "mlly": "^1.4.2", 192 | "pkg-types": "^1.0.3" 193 | }, 194 | "engines": { 195 | "node": ">=14" 196 | }, 197 | "funding": { 198 | "url": "https://github.com/sponsors/antfu" 199 | } 200 | }, 201 | "node_modules/mime-db": { 202 | "version": "1.52.0", 203 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 204 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 205 | "license": "MIT", 206 | "engines": { 207 | "node": ">= 0.6" 208 | } 209 | }, 210 | "node_modules/mime-types": { 211 | "version": "2.1.35", 212 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 213 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 214 | "license": "MIT", 215 | "dependencies": { 216 | "mime-db": "1.52.0" 217 | }, 218 | "engines": { 219 | "node": ">= 0.6" 220 | } 221 | }, 222 | "node_modules/mkdirp": { 223 | "version": "3.0.1", 224 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", 225 | "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", 226 | "license": "MIT", 227 | "bin": { 228 | "mkdirp": "dist/cjs/src/bin.js" 229 | }, 230 | "engines": { 231 | "node": ">=10" 232 | }, 233 | "funding": { 234 | "url": "https://github.com/sponsors/isaacs" 235 | } 236 | }, 237 | "node_modules/mlly": { 238 | "version": "1.7.2", 239 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", 240 | "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", 241 | "license": "MIT", 242 | "dependencies": { 243 | "acorn": "^8.12.1", 244 | "pathe": "^1.1.2", 245 | "pkg-types": "^1.2.0", 246 | "ufo": "^1.5.4" 247 | } 248 | }, 249 | "node_modules/ms": { 250 | "version": "2.1.3", 251 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 252 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 253 | "license": "MIT" 254 | }, 255 | "node_modules/package-manager-detector": { 256 | "version": "0.2.2", 257 | "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz", 258 | "integrity": "sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==", 259 | "license": "MIT" 260 | }, 261 | "node_modules/pathe": { 262 | "version": "1.1.2", 263 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 264 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 265 | "license": "MIT" 266 | }, 267 | "node_modules/pkg-types": { 268 | "version": "1.2.1", 269 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", 270 | "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", 271 | "license": "MIT", 272 | "dependencies": { 273 | "confbox": "^0.1.8", 274 | "mlly": "^1.7.2", 275 | "pathe": "^1.1.2" 276 | } 277 | }, 278 | "node_modules/proxy-from-env": { 279 | "version": "1.1.0", 280 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 281 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 282 | "license": "MIT" 283 | }, 284 | "node_modules/tinyexec": { 285 | "version": "0.3.1", 286 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", 287 | "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", 288 | "license": "MIT" 289 | }, 290 | "node_modules/ufo": { 291 | "version": "1.5.4", 292 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", 293 | "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", 294 | "license": "MIT" 295 | } 296 | } 297 | } 298 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelicon", 3 | "version": "1.0.5", 4 | "description": "✨ Svelte Icon Library - Iconify icons, raw SVG and converts them to Svelte components", 5 | "keywords": [ 6 | "svelte", "svelte5", 7 | "svelte icon", "icons", "svg", 8 | "iconify", "font awesome", "fluent" 9 | ], 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/friendofsvelte/svelicon" 13 | }, 14 | "main": "index.js", 15 | "type": "module", 16 | "bin": { 17 | "svelicon": "./cli.js" 18 | }, 19 | "dependencies": { 20 | "@iconify/utils": "^2.1.5", 21 | "axios": "^1.6.2", 22 | "commander": "^11.1.0", 23 | "mkdirp": "^3.0.1" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/icons/FluentSearch12Regular.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 18 | 19 | --------------------------------------------------------------------------------