Repository: oktaysenkan/react-native-iconify Branch: main Commit: d5df1fb7ef86 Files: 478 Total size: 680.4 KB Directory structure: gitextract_nk4uenfv/ ├── .changeset/ │ ├── README.md │ └── config.json ├── .github/ │ ├── FUNDING.yml │ ├── actions/ │ │ └── setup/ │ │ └── action.yml │ └── workflows/ │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .nvmrc ├── .syncpackrc ├── LICENSE ├── README.md ├── apps/ │ ├── docs/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── content/ │ │ │ └── docs/ │ │ │ ├── architecture.mdx │ │ │ ├── index.mdx │ │ │ ├── installation/ │ │ │ │ ├── cli.mdx │ │ │ │ ├── esbuild.mdx │ │ │ │ ├── library.mdx │ │ │ │ ├── meta.json │ │ │ │ ├── nextjs.mdx │ │ │ │ ├── nuxt.mdx │ │ │ │ ├── qwik.mdx │ │ │ │ ├── react-native.mdx │ │ │ │ ├── react.mdx │ │ │ │ ├── remix.mdx │ │ │ │ ├── rollup.mdx │ │ │ │ ├── rspack.mdx │ │ │ │ ├── svelte.mdx │ │ │ │ ├── universal-build-tool.mdx │ │ │ │ ├── vue.mdx │ │ │ │ └── webpack.mdx │ │ │ ├── loaders/ │ │ │ │ ├── custom-loader.mdx │ │ │ │ ├── json-collections.mdx │ │ │ │ ├── local-collections.mdx │ │ │ │ ├── meta.json │ │ │ │ └── remote-collections.mdx │ │ │ ├── meta.json │ │ │ └── plugins/ │ │ │ ├── clean.mdx │ │ │ ├── custom.mdx │ │ │ ├── debugger.mdx │ │ │ ├── generic.mdx │ │ │ ├── meta.json │ │ │ ├── qwik.mdx │ │ │ ├── react-native.mdx │ │ │ ├── react.mdx │ │ │ ├── svelte.mdx │ │ │ ├── svg.mdx │ │ │ └── vue.mdx │ │ ├── eslint.config.mjs │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public/ │ │ │ └── browserconfig.xml │ │ ├── source.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── (home)/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── api/ │ │ │ │ │ └── search/ │ │ │ │ │ └── route.ts │ │ │ │ ├── docs/ │ │ │ │ │ ├── [[...slug]]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── layout.tsx │ │ │ │ ├── global.css │ │ │ │ ├── layout.tsx │ │ │ │ ├── llms-full.txt/ │ │ │ │ │ └── route.ts │ │ │ │ ├── llms.mdx/ │ │ │ │ │ └── docs/ │ │ │ │ │ └── [[...slug]]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── manifest.ts │ │ │ │ ├── og/ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ └── [...slug]/ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ └── route.tsx │ │ │ │ └── sitemap.ts │ │ │ ├── components/ │ │ │ │ ├── ConfigDemo.tsx │ │ │ │ ├── ai/ │ │ │ │ │ └── page-actions.tsx │ │ │ │ └── mdx/ │ │ │ │ └── mermaid.tsx │ │ │ ├── lib/ │ │ │ │ ├── cn.ts │ │ │ │ ├── layout.shared.tsx │ │ │ │ └── source.ts │ │ │ └── mdx-components.tsx │ │ └── tsconfig.json │ └── legacy-docs/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── next-env.d.ts │ ├── next-sitemap.config.js │ ├── next.config.mjs │ ├── package.json │ ├── pages/ │ │ ├── _app.tsx │ │ ├── _meta.tsx │ │ ├── api/ │ │ │ └── og.tsx │ │ ├── customization/ │ │ │ ├── _meta.tsx │ │ │ ├── custom-loader.mdx │ │ │ ├── json-collections.mdx │ │ │ ├── local-collections.mdx │ │ │ └── remote-collections.mdx │ │ ├── index.mdx │ │ ├── installation/ │ │ │ ├── _meta.tsx │ │ │ ├── nextjs.mdx │ │ │ ├── nuxt.mdx │ │ │ ├── qwik.mdx │ │ │ ├── react-esbuild.mdx │ │ │ ├── react-native.mdx │ │ │ ├── react-rollup.mdx │ │ │ ├── react-rspack.mdx │ │ │ ├── react-webpack.mdx │ │ │ ├── react.mdx │ │ │ ├── remix.mdx │ │ │ ├── svelte.mdx │ │ │ └── vue.mdx │ │ └── troubleshooting/ │ │ ├── _meta.tsx │ │ ├── bundle-size.mdx │ │ ├── module-resolution.mdx │ │ ├── monorepo.mdx │ │ └── typescript.mdx │ ├── public/ │ │ ├── browserconfig.xml │ │ ├── manifest.json │ │ ├── robots.txt │ │ ├── sitemap-0.xml │ │ └── sitemap.xml │ ├── theme.config.tsx │ └── tsconfig.json ├── examples/ │ ├── next/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components/ │ │ │ └── icons/ │ │ │ ├── feather/ │ │ │ │ ├── activity.tsx │ │ │ │ └── alert-circle.tsx │ │ │ ├── logos/ │ │ │ │ ├── active-campaign.tsx │ │ │ │ ├── apache.tsx │ │ │ │ └── atom-icon.tsx │ │ │ ├── lucide/ │ │ │ │ ├── badge-check.tsx │ │ │ │ └── cloud-download.tsx │ │ │ └── mdi/ │ │ │ ├── account-badge-outline.tsx │ │ │ ├── account.tsx │ │ │ └── home.tsx │ │ ├── monicon.config.ts │ │ ├── next-env.d.ts │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── styles/ │ │ │ ├── global.css │ │ │ └── index.module.css │ │ └── tsconfig.json │ ├── nuxt-app/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app.vue │ │ ├── components/ │ │ │ └── icons/ │ │ │ ├── feather/ │ │ │ │ ├── activity.vue │ │ │ │ └── alert-circle.vue │ │ │ ├── logos/ │ │ │ │ ├── active-campaign.vue │ │ │ │ ├── apache.vue │ │ │ │ └── atom-icon.vue │ │ │ ├── lucide/ │ │ │ │ ├── badge-check.vue │ │ │ │ └── cloud-download.vue │ │ │ └── mdi/ │ │ │ ├── account-badge-outline.vue │ │ │ ├── account.vue │ │ │ └── home.vue │ │ ├── monicon.config.ts │ │ ├── nuxt.config.ts │ │ ├── package.json │ │ ├── server/ │ │ │ └── tsconfig.json │ │ └── tsconfig.json │ ├── qwik-app/ │ │ ├── .eslintignore │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── README.md │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── public/ │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── qwik.env.d.ts │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── icons/ │ │ │ │ │ ├── feather/ │ │ │ │ │ │ ├── activity.tsx │ │ │ │ │ │ └── alert-circle.tsx │ │ │ │ │ ├── logos/ │ │ │ │ │ │ ├── active-campaign.tsx │ │ │ │ │ │ ├── apache.tsx │ │ │ │ │ │ └── atom-icon.tsx │ │ │ │ │ ├── lucide/ │ │ │ │ │ │ ├── badge-check.tsx │ │ │ │ │ │ └── cloud-download.tsx │ │ │ │ │ └── mdi/ │ │ │ │ │ ├── account-badge-outline.tsx │ │ │ │ │ ├── account.tsx │ │ │ │ │ └── home.tsx │ │ │ │ └── router-head/ │ │ │ │ └── router-head.tsx │ │ │ ├── entry.dev.tsx │ │ │ ├── entry.preview.tsx │ │ │ ├── entry.ssr.tsx │ │ │ ├── global.css │ │ │ ├── root.tsx │ │ │ └── routes/ │ │ │ ├── index.tsx │ │ │ ├── layout.tsx │ │ │ └── service-worker.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── react-native-app/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── (tabs)/ │ │ │ │ ├── _layout.tsx │ │ │ │ ├── explore.tsx │ │ │ │ └── index.tsx │ │ │ ├── +not-found.tsx │ │ │ └── _layout.tsx │ │ ├── app.json │ │ ├── components/ │ │ │ ├── Collapsible.tsx │ │ │ ├── ExternalLink.tsx │ │ │ ├── HapticTab.tsx │ │ │ ├── HelloWave.tsx │ │ │ ├── ParallaxScrollView.tsx │ │ │ ├── ThemedText.tsx │ │ │ ├── ThemedView.tsx │ │ │ ├── icons/ │ │ │ │ ├── feather/ │ │ │ │ │ ├── activity.tsx │ │ │ │ │ └── alert-circle.tsx │ │ │ │ ├── logos/ │ │ │ │ │ ├── active-campaign.tsx │ │ │ │ │ ├── apache.tsx │ │ │ │ │ └── atom-icon.tsx │ │ │ │ ├── lucide/ │ │ │ │ │ ├── badge-check.tsx │ │ │ │ │ └── cloud-download.tsx │ │ │ │ └── mdi/ │ │ │ │ ├── account-badge-outline.tsx │ │ │ │ ├── account.tsx │ │ │ │ └── home.tsx │ │ │ └── ui/ │ │ │ ├── IconSymbol.ios.tsx │ │ │ ├── IconSymbol.tsx │ │ │ ├── TabBarBackground.ios.tsx │ │ │ └── TabBarBackground.tsx │ │ ├── constants/ │ │ │ └── Colors.ts │ │ ├── eslint.config.js │ │ ├── hooks/ │ │ │ ├── useColorScheme.ts │ │ │ ├── useColorScheme.web.ts │ │ │ └── useThemeColor.ts │ │ ├── metro.config.js │ │ ├── monicon.config.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── remix/ │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── components/ │ │ │ │ └── icons/ │ │ │ │ ├── feather/ │ │ │ │ │ ├── activity.tsx │ │ │ │ │ └── alert-circle.tsx │ │ │ │ ├── logos/ │ │ │ │ │ ├── active-campaign.tsx │ │ │ │ │ ├── apache.tsx │ │ │ │ │ └── atom-icon.tsx │ │ │ │ ├── lucide/ │ │ │ │ │ ├── badge-check.tsx │ │ │ │ │ └── cloud-download.tsx │ │ │ │ └── mdi/ │ │ │ │ ├── account-badge-outline.tsx │ │ │ │ ├── account.tsx │ │ │ │ └── home.tsx │ │ │ ├── entry.client.tsx │ │ │ ├── entry.server.tsx │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ └── _index.tsx │ │ │ └── tailwind.css │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── tailwind.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── rollup-react/ │ │ ├── .babelrc │ │ ├── .gitignore │ │ ├── monicon.config.js │ │ ├── package.json │ │ ├── public/ │ │ │ └── index.html │ │ ├── rollup.config.mjs │ │ └── src/ │ │ ├── App.jsx │ │ ├── components/ │ │ │ └── icons/ │ │ │ ├── feather/ │ │ │ │ ├── activity.jsx │ │ │ │ └── alert-circle.jsx │ │ │ ├── logos/ │ │ │ │ ├── active-campaign.jsx │ │ │ │ ├── apache.jsx │ │ │ │ └── atom-icon.jsx │ │ │ ├── lucide/ │ │ │ │ ├── badge-check.jsx │ │ │ │ └── cloud-download.jsx │ │ │ └── mdi/ │ │ │ ├── account-badge-outline.jsx │ │ │ ├── account.jsx │ │ │ └── home.jsx │ │ └── index.js │ ├── rspack-react/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── monicon.config.mjs │ │ ├── package.json │ │ ├── rspack.config.mjs │ │ └── src/ │ │ ├── App.css │ │ ├── App.jsx │ │ ├── components/ │ │ │ └── icons/ │ │ │ ├── feather/ │ │ │ │ ├── activity.jsx │ │ │ │ └── alert-circle.jsx │ │ │ ├── logos/ │ │ │ │ ├── active-campaign.jsx │ │ │ │ ├── apache.jsx │ │ │ │ └── atom-icon.jsx │ │ │ ├── lucide/ │ │ │ │ ├── badge-check.jsx │ │ │ │ └── cloud-download.jsx │ │ │ └── mdi/ │ │ │ ├── account-badge-outline.jsx │ │ │ ├── account.jsx │ │ │ └── home.jsx │ │ ├── index.css │ │ └── main.jsx │ ├── svelte-app/ │ │ ├── .gitignore │ │ ├── .npmrc │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.d.ts │ │ │ ├── app.html │ │ │ ├── lib/ │ │ │ │ ├── components/ │ │ │ │ │ └── icons/ │ │ │ │ │ ├── feather/ │ │ │ │ │ │ ├── activity.svelte │ │ │ │ │ │ └── alert-circle.svelte │ │ │ │ │ ├── logos/ │ │ │ │ │ │ ├── active-campaign.svelte │ │ │ │ │ │ ├── apache.svelte │ │ │ │ │ │ └── atom-icon.svelte │ │ │ │ │ ├── lucide/ │ │ │ │ │ │ ├── badge-check.svelte │ │ │ │ │ │ └── cloud-download.svelte │ │ │ │ │ └── mdi/ │ │ │ │ │ ├── account-badge-outline.svelte │ │ │ │ │ ├── account.svelte │ │ │ │ │ └── home.svelte │ │ │ │ └── index.ts │ │ │ └── routes/ │ │ │ └── +page.svelte │ │ ├── svelte.config.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── vite-react/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── index.html │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── __tests__/ │ │ │ │ ├── App.test.tsx │ │ │ │ └── setup.ts │ │ │ ├── components/ │ │ │ │ └── icons/ │ │ │ │ ├── feather/ │ │ │ │ │ ├── activity.tsx │ │ │ │ │ └── alert-circle.tsx │ │ │ │ ├── logos/ │ │ │ │ │ ├── active-campaign.tsx │ │ │ │ │ ├── apache.tsx │ │ │ │ │ └── atom-icon.tsx │ │ │ │ ├── lucide/ │ │ │ │ │ ├── badge-check.tsx │ │ │ │ │ └── cloud-download.tsx │ │ │ │ ├── material-symbols/ │ │ │ │ │ └── 10k.tsx │ │ │ │ └── mdi/ │ │ │ │ ├── account-badge-outline.tsx │ │ │ │ ├── account.tsx │ │ │ │ └── home.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.app.tsbuildinfo │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ ├── tsconfig.node.tsbuildinfo │ │ ├── vite.config.ts │ │ └── vitest.config.ts │ └── vite-vue/ │ ├── .gitignore │ ├── .vscode/ │ │ └── extensions.json │ ├── README.md │ ├── index.html │ ├── monicon.config.ts │ ├── package.json │ ├── src/ │ │ ├── App.vue │ │ ├── __tests__/ │ │ │ └── App.test.ts │ │ ├── components/ │ │ │ └── icons/ │ │ │ ├── feather/ │ │ │ │ ├── activity.vue │ │ │ │ └── alert-circle.vue │ │ │ ├── json/ │ │ │ │ └── network.vue │ │ │ ├── local/ │ │ │ │ ├── folder.vue │ │ │ │ └── nested-folder.vue │ │ │ ├── lucide/ │ │ │ │ ├── badge-check.vue │ │ │ │ └── cloud-download.vue │ │ │ ├── mdi/ │ │ │ │ ├── account-badge-outline.vue │ │ │ │ ├── account.vue │ │ │ │ └── home.vue │ │ │ └── remote/ │ │ │ ├── attachment.vue │ │ │ └── download.vue │ │ ├── main.ts │ │ ├── style.css │ │ └── vite-env.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.app.tsbuildinfo │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── tsconfig.node.tsbuildinfo │ ├── vite.config.ts │ └── vitest.config.ts ├── lefthook.yml ├── package.json ├── packages/ │ ├── cli/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── core/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── monicon.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── loaders/ │ │ │ │ ├── index.ts │ │ │ │ ├── json-collection.ts │ │ │ │ ├── local-collection.ts │ │ │ │ ├── remote-collection.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── plugins/ │ │ │ │ ├── clean/ │ │ │ │ │ ├── glob.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin.ts │ │ │ │ ├── debugger/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin.ts │ │ │ │ ├── generic/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin.ts │ │ │ │ ├── index.ts │ │ │ │ ├── native/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin.ts │ │ │ │ │ └── templates.ts │ │ │ │ ├── qwik/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin.ts │ │ │ │ │ └── template.ts │ │ │ │ ├── react/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin.ts │ │ │ │ │ └── templates.ts │ │ │ │ ├── svelte/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin.ts │ │ │ │ │ └── templates.ts │ │ │ │ ├── svg/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin.ts │ │ │ │ ├── types.ts │ │ │ │ └── vue/ │ │ │ │ ├── index.ts │ │ │ │ ├── plugin.ts │ │ │ │ └── templates.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── config-loader.ts │ │ │ ├── file-system.ts │ │ │ ├── icon-processor.ts │ │ │ ├── index.ts │ │ │ ├── name.ts │ │ │ ├── plugin-loader.ts │ │ │ └── svg.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── esbuild/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── metro/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── nuxt/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── rollup/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── rspack/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── typescript-config/ │ │ ├── CHANGELOG.md │ │ ├── base.json │ │ ├── nextjs.json │ │ ├── package.json │ │ ├── react-native-library.json │ │ └── vue-library.json │ ├── vite/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ └── webpack/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── package.json │ ├── src/ │ │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts └── turbo.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .changeset/README.md ================================================ # Changesets Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works with multi-package repos, or single-package repos to help you version and publish your code. You can find the full documentation for it [in our repository](https://github.com/changesets/changesets) We have a quick list of common questions to get you started engaging with this project in [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) ================================================ FILE: .changeset/config.json ================================================ { "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json", "changelog": [ "@changesets/changelog-github", { "repo": "oktaysenkan/monicon" } ], "commit": false, "fixed": [["@monicon/*"]], "linked": [], "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", "ignore": [ "@monicon/react-native-app", "@monicon/next", "@monicon/remix", "@monicon/nuxt-app", "@monicon/rollup-react", "@monicon/rspack-react", "@monicon/vite-react", "@monicon/vite-vue", "@monicon/svelte-app", "@monicon/qwik-app", "@monicon/docs" ] } ================================================ FILE: .github/FUNDING.yml ================================================ github: oktaysenkan ================================================ FILE: .github/actions/setup/action.yml ================================================ name: Setup description: Setup Node.js and install dependencies runs: using: composite steps: - name: Setup Node.js uses: actions/setup-node@v3 with: node-version-file: .nvmrc - name: Install dependencies run: yarn install --immutable shell: bash ================================================ FILE: .github/workflows/ci.yml ================================================ name: CI on: pull_request: branches: - '**' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Setup uses: ./.github/actions/setup - name: Clean run: yarn clean - name: Build all packages and apps run: yarn build ================================================ FILE: .github/workflows/release.yml ================================================ name: Release on: push: branches: [main] jobs: release: if: github.repository == 'oktaysenkan/monicon' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Setup uses: ./.github/actions/setup - name: Clean run: yarn clean - name: Build all packages and apps run: yarn build - name: Create Release Pull Request or Publish to npm uses: changesets/action@v1 with: publish: yarn release version: yarn bump env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} ================================================ FILE: .gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # testing coverage # next.js .next/ .swc/ out/ build # expo .expo # misc .DS_Store *.pem dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo # monicon .monicon ================================================ FILE: .nvmrc ================================================ v22 ================================================ FILE: .syncpackrc ================================================ { "semverRange": "*", "source": [ "packages/*/package.json" ] } ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2025 Oktay Şenkan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ banner

Monicon

Universal Icon Library

Monicon is an easy-to-use icon library that makes adding icons to your projects simple. It works with popular frameworks like React, React Native, Next.js, Vue, Nuxt, Svelte and more. It's provides 200,000+ icons from popular sets like Material Design, Feather, and Font Awesome.

Documentation · Explore Icons · Issues

================================================ FILE: apps/docs/.gitignore ================================================ # deps /node_modules # generated content .source # test & build /coverage /.next/ /out/ /build *.tsbuildinfo # misc .DS_Store *.pem /.pnp .pnp.js npm-debug.log* yarn-debug.log* yarn-error.log* # others .env*.local .vercel next-env.d.ts ================================================ FILE: apps/docs/README.md ================================================ # docs This is a Next.js application generated with [Create Fumadocs](https://github.com/fuma-nama/fumadocs). Run development server: ```bash npm run dev # or pnpm dev # or yarn dev ``` Open http://localhost:3000 with your browser to see the result. ## Explore In the project, you can see: - `lib/source.ts`: Code for content source adapter, [`loader()`](https://fumadocs.dev/docs/headless/source-api) provides the interface to access your content. - `lib/layout.shared.tsx`: Shared options for layouts, optional but preferred to keep. | Route | Description | | ------------------------- | ------------------------------------------------------ | | `app/(home)` | The route group for your landing page and other pages. | | `app/docs` | The documentation layout and pages. | | `app/api/search/route.ts` | The Route Handler for search. | ### Fumadocs MDX A `source.config.ts` config file has been included, you can customise different options like frontmatter schema. Read the [Introduction](https://fumadocs.dev/docs/mdx) for further details. ## Learn More To learn more about Next.js and Fumadocs, take a look at the following resources: - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - [Fumadocs](https://fumadocs.dev) - learn about Fumadocs ================================================ FILE: apps/docs/content/docs/architecture.mdx ================================================ --- title: Architecture description: Understand Monicon's architecture, package structure, and how components work together --- This guide explains Monicon's architecture, including package dependencies, the icon generation flow, and how different components work together. ## Overview Monicon is built as a monorepo with multiple packages that work together to provide a flexible, framework-agnostic icon management system. The architecture is designed to be modular, extensible, and easy to integrate with different build tools and frameworks. ## Package Structure B[@monicon/cli] A --> C[@monicon/vite] A --> D[@monicon/webpack] A --> E[@monicon/rollup] A --> F[@monicon/esbuild] A --> G[@monicon/rspack] A --> H[@monicon/metro] A --> I[@monicon/nuxt] style A fill:#059669,stroke:#047857,color:#fff style B fill:#2563eb,stroke:#1d4ed8,color:#fff style C fill:#d97706,stroke:#b45309,color:#fff style D fill:#d97706,stroke:#b45309,color:#fff style E fill:#d97706,stroke:#b45309,color:#fff style F fill:#d97706,stroke:#b45309,color:#fff style G fill:#d97706,stroke:#b45309,color:#fff style H fill:#d97706,stroke:#b45309,color:#fff style I fill:#d97706,stroke:#b45309,color:#fff `}/> ### Core Packages #### @monicon/core (Core Engine) The heart of Monicon, containing all the core functionality: - **Bootstrap Function**: Entry point for icon generation - **Loaders**: Fetch icons from different sources (remote, local, JSON) - **Plugins**: Transform icons into framework-specific components - **Utilities**: Config loading, file system operations, icon processing #### @monicon/cli (Command Line Interface) Command-line tool for generating icons outside of build processes. Uses `@monicon/core` to provide a CLI experience. ### Bundler Integration Packages All bundler packages depend on `@monicon/core` and provide seamless integration: - **@monicon/vite** - Vite plugin - **@monicon/webpack** - Webpack plugin - **@monicon/rollup** - Rollup plugin - **@monicon/esbuild** - esbuild plugin - **@monicon/rspack** - Rspack plugin - **@monicon/metro** - Metro bundler plugin (React Native) - **@monicon/nuxt** - Nuxt module ## Core Architecture The `@monicon/core` package is structured into four main components: B[Loaders] A --> C[Plugins] A --> D[Utils] B --> B1[Remote Collection] B --> B2[Local Collection] B --> B3[JSON Collection] C --> C0[Generic Plugin] C --> C7[Clean Plugin] C --> C8[Debugger Plugin] C0 --> P1[React Plugin] C0 --> P2[Vue Plugin] C0 --> P3[Svelte Plugin] C0 --> P4[Qwik Plugin] C0 --> P5[React Native Plugin] C0 --> P6[SVG Plugin] D --> D1[Config Loader] D --> D2[File System] D --> D3[Icon Processor] D --> D4[Plugin Loader] D --> D5[SVG Utils] style A fill:#059669,stroke:#047857,color:#fff style B fill:#2563eb,stroke:#1d4ed8,color:#fff style C fill:#d97706,stroke:#b45309,color:#fff style D fill:#7c3aed,stroke:#6d28d9,color:#fff `} /> ### Components #### Bootstrap Entry point that orchestrates the entire icon generation process. It: - Loads configuration - Processes icons - Runs plugins - Writes output files #### Loaders Fetch icons from various sources: - **Remote Collection**: Fetch from Iconify CDN - **Local Collection**: Load from local file system - **JSON Collection**: Load from JSON files #### Plugins Transform raw SVG icons into framework-specific components: - **Generic Plugin**: Base plugin providing file generation capabilities (used internally by framework plugins) - **React Plugin**: Generate React/JSX components (built on Generic Plugin) - **Vue Plugin**: Generate Vue SFC components (built on Generic Plugin) - **Svelte Plugin**: Generate Svelte components (built on Generic Plugin) - **Qwik Plugin**: Generate Qwik components (built on Generic Plugin) - **React Native Plugin**: Generate React Native components with react-native-svg (built on Generic Plugin) - **SVG Plugin**: Generate plain SVG files (built on Generic Plugin) - **Clean Plugin**: Clean output directories - **Debugger Plugin**: Debug icon generation #### Utils Helper utilities for various operations: - **Config Loader**: Load and watch configuration files - **File System**: Handle file operations - **Icon Processor**: Process and transform icons - **Plugin Loader**: Load and execute plugins - **SVG Utils**: Parse and manipulate SVG content ## Plugin System Plugins are the core of Monicon's extensibility. Here's how the plugin system works: B[onPluginsLoad Hook] B --> C[beforeGenerate Hook] C --> D[Plugin 1] C --> E[Plugin 2] C --> F[Plugin N] D --> D1[generate] E --> E1[generate] F --> F1[generate] D1 --> G[Collect All Files] E1 --> G F1 --> G G --> H[afterGenerate Hook] H --> I[beforeWriteFiles Hook] I --> J[Write to Disk] J --> K[afterWriteFiles Hook] style A fill:#059669,stroke:#047857,color:#fff style G fill:#2563eb,stroke:#1d4ed8,color:#fff style J fill:#d97706,stroke:#b45309,color:#fff `} /> ### Plugin Lifecycle Each plugin can implement the following hooks: 1. **onPluginsLoad**: Called when plugins are loaded (optional) 2. **beforeGenerate**: Called before the generation process starts (optional) 3. **generate**: The main generation function that creates output files (required) 4. **afterGenerate**: Called after the generation process completes (optional) 5. **beforeWriteFiles**: Called before files are written to disk (optional) 6. **afterWriteFiles**: Called after files are written to disk (optional) ### Creating Custom Plugins Plugins are functions that return a configuration object: ```ts twoslash import { MoniconPlugin, MoniconPluginFile } from "@monicon/core/plugins"; export const txtPlugin: MoniconPlugin = (options) => (payload) => { return { name: "monicon-txt-plugin", generate: () => { const files: MoniconPluginFile[] = []; for (const icon of payload.icons) { files.push({ path: `output/${icon.name}.txt`, content: icon.svg, }); } return files; }, }; }; ``` ### Generic Plugin Foundation Most framework plugins (React, Vue, Svelte, Qwik, React Native, and SVG) are built on top of the **Generic Plugin**. The Generic Plugin provides a reusable foundation for file generation with flexible options: - **outputPath**: Function or string to determine where files are generated - **fileName**: Function or string to determine file names - **extension**: Function or string to determine file extensions - **content**: Function or string to generate file content This architecture allows framework plugins to focus on their specific transformations (e.g., converting SVG to React JSX) while delegating file management to the generic plugin. ```ts twoslash import { generic, GenericPluginOptions, MoniconPlugin, } from "@monicon/core/plugins"; type CustomPluginOptions = GenericPluginOptions; type CustomPluginInternalOptions = { foo?: string; }; export const customPlugin: MoniconPlugin = (options) => generic({ name: "my-custom-plugin", extension: "custom", content: (icon) => `/* Custom content for ${icon.name} */`, ...options, }); ``` ## Bundler Integration Flow Bundler packages integrate Monicon into the build process: B[Bundler Plugin Initialized] B --> C[Load Monicon Config] C --> D[Watch Config File] D --> E{Config File Changed?} E -->|Yes| F[Trigger Icon Generation] F --> G[Bootstrap Process] G --> H[Generate Icon Components] H --> I[Files Written] style A fill:#059669,stroke:#047857,color:#fff style G fill:#2563eb,stroke:#1d4ed8,color:#fff `} /> ### How Bundler Plugins Work 1. **Initialize**: Plugin is loaded by the bundler during startup 2. **Load Config**: Load Monicon configuration from `monicon.config.ts` 3. **Watch**: Watch the config file for changes 4. **Generate**: When changes are detected, trigger icon generation via `bootstrap()` ## Data Flow Example Let's trace a complete example of generating a React icon component: >CLI: npx @monicon/cli generate CLI->>Bootstrap: bootstrap(config) Bootstrap->>Loader: Load icons ["mdi:home"] Loader->>Loader: Fetch from Iconify CDN Loader-->>Bootstrap: Raw SVG data Bootstrap->>IconProcessor: Process icons IconProcessor->>IconProcessor: Parse SVG IconProcessor->>IconProcessor: Normalize dimensions IconProcessor-->>Bootstrap: Processed icons Bootstrap->>ReactPlugin: generate(icons) ReactPlugin->>ReactPlugin: Transform to JSX ReactPlugin->>ReactPlugin: Apply template ReactPlugin-->>Bootstrap: File objects Bootstrap->>FileSystem: Write files FileSystem->>FileSystem: Create directories FileSystem->>FileSystem: Write components FileSystem-->>Bootstrap: Success Bootstrap-->>CLI: Complete CLI-->>User: Icons generated! `} /> ## Key Design Principles ### 1. Framework Agnostic The core is framework-agnostic. Framework-specific logic is isolated in plugins, making it easy to support new frameworks. ### 2. Build Tool Independent Bundler integration packages are separate, allowing users to choose their preferred build tool or use the CLI. ### 3. Extensible The plugin system allows users to create custom transformations and integrations. ### 4. Type Safe Full TypeScript support with exported types for configuration and plugins. ## Examples ### Using Core Directly ```ts twoslash import { bootstrap } from "@monicon/core"; import { react } from "@monicon/core/plugins"; await bootstrap({ icons: ["mdi:home"], plugins: [react({ outputPath: "src/components/icons" })], }); ``` ### Using with Vite ```ts twoslash import { defineConfig } from "vite"; import monicon from "@monicon/vite"; import { react } from "@monicon/core/plugins"; export default defineConfig({ plugins: [ monicon({ icons: ["mdi:home"], plugins: [react({ outputPath: "src/components/icons" })], }), ], }); ``` ### Using CLI ```bash npx @monicon/cli generate --watch ``` ================================================ FILE: apps/docs/content/docs/index.mdx ================================================ --- title: Introduction description: Monicon is an easy-to-use icon orchestration tool that makes adding icons to your projects simple. --- Monicon is an tool agnostic and easy-to-use icon orchestration tool that makes adding icons to your projects simple. It works with any framework, language, and platform. - **Tool Agnostic**: Works with any framework, language, and platform. - **Huge Icon Library**: Get access to over 200,000 icons from famous sets like Material Design, Feather, and Font Awesome. - **Custom Icons**: You can create custom icons and use them in your projects. Monicon makes it easy to add your own icons. - **Works with Modern Tools**: Monicon supports tools like Vite, Webpack, Rollup, and others, so it's ready for any project. - **Fast and Efficient**: Monicon loads icons quickly to keep your project running smoothly. No flickering or lagging. - **Easy to Use**: Works with React, Vue, Svelte, Next.js, and other popular frameworks, making icon integration simple. You can discover icons on the [Icones](https://icones.js.org/) website. - **Customizable**: You can easily change the size, color, and other features of the icons to fit your design. - **Collaboration**: Monicon helps you collaborate with designers to speed up the design process and get better results. [Iconify Figma Plugin](https://www.figma.com/community/plugin/735098390272716381/iconify) allows you to use icons directly in Figma. - **Free and Open Source**: Monicon is free to use and open source, so you can use it in any project without restrictions. No matter which framework you use, Monicon makes adding and managing icons easy. Check out the documentation to see how Monicon can help improve your next project with great-looking icons! ## Comparison: Monicon & Iconify & unplugin-icons | Feature | Monicon | @iconify/react | unplugin-icons | | -------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | | **Tool Agnostic** | Works with any framework, language, and platform. | Works with React, Vue, Svelte, Next.js, and other popular frameworks. | Works with React, Vue, Svelte, Next.js, and other popular frameworks. | | **Icon Rendering** | Icons are bundled during build time, ensuring instant rendering with no blinking. | Icons load over HTTP, which can cause blinking during rendering. | Icons are bundled at build time, no blinking issues. | | **Offline Support** | Fully offline-compatible, works seamlessly with PWAs, Electron apps, and native environments. | Does not work offline due to reliance on HTTP for fetching icons. | Works offline | | **React Native Support** | Fully supports React Native, making it ideal for mobile and native projects. | No support for React Native. | No support for React Native. | | **Modern Bundler Support** | Compatible with Metro, Vite, Webpack, Rollup, Rspack, and others. | Primarily web-focused and lacks versatility across bundlers. | No support for Metro. | | **Custom Icon Support** | Easily create and use custom icons in your projects. | Easily create and use custom icons in your projects. | Easily create and use custom icons in your projects. | ================================================ FILE: apps/docs/content/docs/installation/cli.mdx ================================================ --- title: CLI description: Learn how to use the Monicon CLI to generate icons --- The Monicon CLI provides a command-line interface for generating icons, this is useful if you want to use Monicon as a tool-agnostic. ## Installation Install the Monicon Core ```bash tab="npm" npm install @monicon/core ``` ```bash tab="pnpm" pnpm add @monicon/core ``` ```bash tab="yarn" yarn add @monicon/core ``` ```bash tab="bun" bun add @monicon/core ``` ## Configuration Create a `monicon.config.ts` (or `.js`) file in your project root: ```ts twoslash title="monicon.config.ts" import { svg, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from a collection collections: ["lucide"], plugins: [ clean({ patterns: ["src/components/icons"] }), svg({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## Commands ### Generate Icons Generate icons based on your configuration: ```bash npx @monicon/cli generate ``` This command will: 1. Load your `monicon.config.ts` file 2. Fetch the specified icons 3. Generate components in the configured output path ### Watch Mode Run the CLI in watch mode to automatically regenerate icons when your config changes: ```bash npx @monicon/cli generate -w ``` This is useful during development to see changes immediately. ### Help Display help information: ```bash npx @monicon/cli -h ``` ### Version Check the installed CLI version: ```bash npx @monicon/cli -v ``` ## Usage in Scripts You can add the CLI to your `package.json` scripts for easy access: ```json title="package.json" { "scripts": { "dev": "npx @monicon/cli generate --watch && next dev", "build": "npx @monicon/cli generate && next build" } } ``` ================================================ FILE: apps/docs/content/docs/installation/esbuild.mdx ================================================ --- title: React (esbuild) description: Learn how to install and use Monicon in your React (esbuild) project --- ## Installation Install Monicon and its esbuild plugin in your project: ```bash tab="npm" npm install @monicon/core @monicon/esbuild ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/esbuild ``` ```bash tab="yarn" yarn add @monicon/core @monicon/esbuild ``` ```bash tab="bun" bun add @monicon/core @monicon/esbuild ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure esbuild Add the Monicon plugin to your esbuild configuration: ```js title="build.js" import * as esbuild from "esbuild"; import { monicon } from "@monicon/esbuild"; await esbuild.build({ plugins: [monicon()], }); ``` ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```tsx title="src/App.tsx" import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import ActivityIcon from "./components/icons/feather/activity"; export default function App() { return (
{/* you can also use standard SVG props */}
); } ``` ================================================ FILE: apps/docs/content/docs/installation/library.mdx ================================================ --- title: Library description: Learn how to use Monicon programmatically as a library --- Monicon can be used programmatically as a library, giving you full control over icon generation in your build scripts, custom tooling, or any other project. ## Installation Install the Monicon Core ```bash tab="npm" npm install @monicon/core ``` ```bash tab="pnpm" pnpm add @monicon/core ``` ```bash tab="yarn" yarn add @monicon/core ``` ```bash tab="bun" bun add @monicon/core ``` ## Basic Usage Import the `bootstrap` function from `@monicon/core` and call it with your configuration: ```ts twoslash title="scripts/generate-icons.ts" import { bootstrap } from "@monicon/core"; import { svg, clean } from "@monicon/core/plugins"; await bootstrap({ // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from a collection collections: ["lucide"], plugins: [ clean({ patterns: ["src/components/icons"] }), svg({ outputPath: "src/components/icons" }), ], watch: false, // Set to true for watch mode }); ``` ## Configuration The `bootstrap` function accepts a configuration object with the following options: ### Type Definition ```ts twoslash import { MoniconConfig } from "@monicon/core"; ``` ### Configuration Options | Option | Type | Default | Description | | ------------- | ------------------------------------ | ------- | --------------------------------------------------------------------------------- | | `icons` | `string[]` | `[]` | Array of individual icon names to load (e.g., `["mdi:home", "feather:activity"]`) | | `collections` | `string[]` | `[]` | Array of complete icon collections to load (e.g., `["lucide", "heroicons"]`) | | `plugins` | `MoniconPlugin[]` | `[]` | Array of plugins to process icons | | `loaders` | `Record>` | `{}` | Custom loaders for loading icons from different sources | | `watch` | `boolean` | `false` | Enable watch mode to automatically regenerate icons on config changes | ## Using with Config File The `bootstrap` function automatically loads your `monicon.config.ts` file if it exists, and merges it with any options you pass: ```ts twoslash title="scripts/generate-icons.ts" import { bootstrap } from "@monicon/core"; // This will load monicon.config.ts and merge with the provided options await bootstrap({ watch: false, // Override watch mode }); ``` ```ts twoslash title="monicon.config.ts" import { svg, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "feather:activity"], collections: ["lucide"], plugins: [ clean({ patterns: ["src/components/icons"] }), svg({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## Integration Examples ### Custom Build Script Create a custom build script that generates icons before building your app: ```ts twoslash title="scripts/build.ts" import { bootstrap } from "@monicon/core"; import { svg } from "@monicon/core/plugins"; import { execSync } from "child_process"; async function build() { console.log("Generating icons..."); await bootstrap({ icons: ["mdi:home", "feather:activity"], plugins: [svg({ outputPath: "src/components/icons" })], watch: false, }); console.log("Building application..."); execSync("npm run build:app", { stdio: "inherit" }); } build().catch(console.error); ``` ```json title="package.json" { "scripts": { "build": "tsx scripts/build.ts" } } ``` ### Pre-build Hook Use Monicon in a pre-build hook: ```json twoslash title="package.json" { "scripts": { "prebuild": "tsx scripts/generate-icons.ts", "build": "vite build" } } ``` ```ts twoslash title="scripts/generate-icons.ts" import { bootstrap } from "@monicon/core"; import { svg } from "@monicon/core/plugins"; await bootstrap({ icons: ["mdi:home", "feather:activity", "lucide:star"], plugins: [svg({ outputPath: "src/components/icons" })], watch: false, }); ``` ### Watch Mode for Development Use watch mode during development: ```ts twoslash title="scripts/dev.ts" import { bootstrap } from "@monicon/core"; import { react } from "@monicon/core/plugins"; // Generate icons with watch mode await bootstrap({ icons: ["mdi:home", "feather:activity"], plugins: [react({ outputPath: "src/components/icons" })], watch: true, }); console.log("Icon generator running in watch mode..."); ``` ================================================ FILE: apps/docs/content/docs/installation/meta.json ================================================ { "title": "Installation", "pages": [ "cli", "library", "universal-build-tool", "react", "nextjs", "remix", "qwik", "react-native", "vue", "nuxt", "svelte", "rollup", "rspack", "webpack", "esbuild" ] } ================================================ FILE: apps/docs/content/docs/installation/nextjs.mdx ================================================ --- title: Next.js description: Learn how to install and use Monicon in your Next.js project --- ## Installation Install Monicon and its Webpack plugin in your Next.js project: ```bash tab="npm" npm install @monicon/core @monicon/webpack ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/webpack ``` ```bash tab="yarn" yarn add @monicon/core @monicon/webpack ``` ```bash tab="bun" bun add @monicon/core @monicon/webpack ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:heart"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - components/icons * - src/components/icons */ clean({ patterns: ["components/icons"] }), react({ outputPath: "components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Next.js Add the Monicon plugin to your `next.config.mjs`: ```js title="next.config.mjs" import { MoniconPlugin } from "@monicon/webpack"; const nextConfig = { reactStrictMode: true, webpack: (config, { dev }) => { config.plugins.push(new MoniconPlugin({ watch: dev })); return config; }, }; export default nextConfig; ``` The `watch: dev` option enables automatic icon regeneration during development when your config changes. ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```tsx title="app/page.tsx" import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import HeartIcon from "./components/icons/feather/heart"; export default function Home() { return (
{/* if you don't want to use the className prop, you can use the svg props */}
); } ``` ================================================ FILE: apps/docs/content/docs/installation/nuxt.mdx ================================================ --- title: Nuxt description: Learn how to install and use Monicon in your Nuxt project --- ## Installation Install Monicon and its Nuxt module in your Nuxt project: ```bash tab="npm" npm install @monicon/core @monicon/nuxt ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/nuxt ``` ```bash tab="yarn" yarn add @monicon/core @monicon/nuxt ``` ```bash tab="bun" bun add @monicon/core @monicon/nuxt ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { vue, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - components/icons * - src/components/icons */ clean({ patterns: ["components/icons"] }), vue({ outputPath: "components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Nuxt Add the Monicon module to your `nuxt.config.ts`: ```ts title="nuxt.config.ts" export default defineNuxtConfig({ modules: ["@monicon/nuxt"], }); ``` ## Usage After configuration, Monicon will automatically generate Vue components for your icons. You can import and use them in your pages and components: ```vue title="app.vue" ``` ================================================ FILE: apps/docs/content/docs/installation/qwik.mdx ================================================ --- title: Qwik description: Learn how to install and use Monicon in your Qwik project --- ## Installation Install Monicon and its Vite plugin in your Qwik project: ```bash tab="npm" npm install @monicon/core @monicon/vite ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/vite ``` ```bash tab="yarn" yarn add @monicon/core @monicon/vite ``` ```bash tab="bun" bun add @monicon/core @monicon/vite ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { qwik, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), qwik({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Vite Add the Monicon plugin to your `vite.config.ts`: ```ts twoslash title="vite.config.ts" import { defineConfig, type UserConfig } from "vite"; import { monicon } from "@monicon/vite"; export default defineConfig((): UserConfig => { return { plugins: [ // ... other plugins monicon(), ], }; }); ``` ## Usage After configuration, Monicon will automatically generate Qwik components for your icons. You can import and use them in your routes and components: ```tsx title="src/routes/index.tsx" import { component$ } from "@builder.io/qwik"; import type { DocumentHead } from "@builder.io/qwik-city"; import BadgeCheckIcon from "~/components/icons/lucide/badge-check"; import CloudDownloadIcon from "~/components/icons/lucide/cloud-download"; import HomeIcon from "~/components/icons/mdi/home"; import ActivityIcon from "~/components/icons/feather/activity"; export default component$(() => { return (
{/* you can use standard SVG props */}
); }); export const head: DocumentHead = { title: "Welcome to Qwik", meta: [ { name: "description", content: "Qwik site description", }, ], }; ``` ================================================ FILE: apps/docs/content/docs/installation/react-native.mdx ================================================ --- title: React Native description: Learn how to install and use Monicon in your React Native project --- ## Installation Install Monicon and its Metro plugin in your React Native project: ```bash tab="npm" npm install @monicon/core @monicon/metro react-native-svg ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/metro react-native-svg ``` ```bash tab="yarn" yarn add @monicon/core @monicon/metro react-native-svg ``` ```bash tab="bun" bun add @monicon/core @monicon/metro react-native-svg ``` `react-native-svg` is required for rendering SVG icons in React Native. ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { reactNative, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - components/icons * - src/components/icons */ clean({ patterns: ["components/icons"] }), reactNative({ outputPath: "components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Metro Update your `metro.config.js` to use the Monicon Metro plugin: ```js title="metro.config.js" const { getDefaultConfig } = require("expo/metro-config"); const { withMonicon } = require("@monicon/metro"); const config = getDefaultConfig(__dirname); const configWithMonicon = withMonicon(config); module.exports = configWithMonicon; ``` ## Usage After configuration, Monicon will automatically generate React Native components for your icons. You can import and use them in your components: ```tsx title="app/(tabs)/index.tsx" import { StyleSheet, View } from "react-native"; import BadgeCheckIcon from "@/components/icons/lucide/badge-check"; import CloudDownloadIcon from "@/components/icons/lucide/cloud-download"; import HomeIcon from "@/components/icons/mdi/home"; import ActivityIcon from "@/components/icons/feather/activity"; export default function HomeScreen() { return ( ); } const styles = StyleSheet.create({ container: { flex: 1, flexDirection: "row", alignItems: "center", justifyContent: "center", gap: 10, }, }); ``` ================================================ FILE: apps/docs/content/docs/installation/react.mdx ================================================ --- title: React description: Learn how to install and use Monicon in your React (Vite) project --- ## Installation Install Monicon and its Vite plugin in your React project: ```bash tab="npm" npm install @monicon/core @monicon/vite ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/vite ``` ```bash tab="yarn" yarn add @monicon/core @monicon/vite ``` ```bash tab="bun" bun add @monicon/core @monicon/vite ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:heart"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Vite Add the Monicon plugin to your `vite.config.ts`: ```ts twoslash title="vite.config.ts" import { defineConfig } from "vite"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ // ... other plugins monicon(), ], }); ``` ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```tsx title="src/App.tsx" import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import HeartIcon from "./components/icons/feather/heart"; function App() { return (
{/* if you don't want to use the className prop, you can use the svg props */}
); } export default App; ``` ================================================ FILE: apps/docs/content/docs/installation/remix.mdx ================================================ --- title: Remix description: Learn how to install and use Monicon in your Remix project --- ## Installation Install Monicon and its Vite plugin in your Remix project: ```bash tab="npm" npm install @monicon/core @monicon/vite ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/vite ``` ```bash tab="yarn" yarn add @monicon/core @monicon/vite ``` ```bash tab="bun" bun add @monicon/core @monicon/vite ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - app/components/icons * - src/components/icons */ clean({ patterns: ["app/components/icons"] }), react({ outputPath: "app/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Vite Add the Monicon plugin to your `vite.config.ts`: ```ts twoslash title="vite.config.ts" import { defineConfig } from "vite"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ // ... other plugins monicon(), ], }); ``` ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your routes and components: ```tsx title="app/routes/_index.tsx" import type { MetaFunction } from "@remix-run/node"; import BadgeCheckIcon from "~/components/icons/lucide/badge-check"; import CloudDownloadIcon from "~/components/icons/lucide/cloud-download"; import HomeIcon from "~/components/icons/mdi/home"; import ActivityIcon from "~/components/icons/feather/activity"; export const meta: MetaFunction = () => { return [ { title: "New Remix App" }, { name: "description", content: "Welcome to Remix!" }, ]; }; export default function Index() { return (
{/* if you don't want to use the className prop, you can use the svg props */}
); } ``` ================================================ FILE: apps/docs/content/docs/installation/rollup.mdx ================================================ --- title: React (Rollup) description: Learn how to install and use Monicon in your Rollup project --- ## Installation Install Monicon and its Rollup plugin in your project: ```bash tab="npm" npm install @monicon/core @monicon/rollup ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/rollup ``` ```bash tab="yarn" yarn add @monicon/core @monicon/rollup ``` ```bash tab="bun" bun add @monicon/core @monicon/rollup ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.js` file in your project root: ```js twoslash title="monicon.config.js" const { react, clean } = require("@monicon/core/plugins"); module.exports = { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons", format: "jsx" }), ], }; ``` ### 2. Configure Rollup Add the Monicon plugin to your `rollup.config.mjs`: ```js twoslash title="rollup.config.mjs" import monicon from "@monicon/rollup"; export default { // ... your rollup config plugins: [ // ... other plugins monicon(), ], }; ``` ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```jsx title="src/App.jsx" import React from "react"; import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import ActivityIcon from "./components/icons/feather/activity"; const App = () => { return (
{/* If you don't want to use the className prop, you can use the svg props */}
); }; export default App; ``` ================================================ FILE: apps/docs/content/docs/installation/rspack.mdx ================================================ --- title: React (Rspack) description: Learn how to install and use Monicon in your React (Rspack) project --- ## Installation Install Monicon and its Rspack plugin in your project: ```bash tab="npm" npm install @monicon/core @monicon/rspack ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/rspack ``` ```bash tab="yarn" yarn add @monicon/core @monicon/rspack ``` ```bash tab="bun" bun add @monicon/core @monicon/rspack ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.mjs` file in your project root: ```js twoslash title="monicon.config.mjs" import { react, clean } from "@monicon/core/plugins"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons", format: "jsx" }), ], }; ``` ### 2. Configure Rspack Add the Monicon plugin to your `rspack.config.mjs`: ```js title="rspack.config.mjs" import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; import MoniconPlugin from "@monicon/rspack"; export default defineConfig({ // ... your rspack config plugins: [ // ... other plugins new MoniconPlugin(), ], }); ``` ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```jsx title="src/App.jsx" import React from "react"; import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import ActivityIcon from "./components/icons/feather/activity"; const App = () => { return (
{/* If you don't want to use the className prop, you can use the svg props */}
); }; export default App; ``` ================================================ FILE: apps/docs/content/docs/installation/svelte.mdx ================================================ --- title: Svelte description: Learn how to install and use Monicon in your Svelte (SvelteKit) project --- ## Installation Install Monicon and its Vite plugin in your Svelte project: ```bash tab="npm" npm install @monicon/core @monicon/vite ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/vite ``` ```bash tab="yarn" yarn add @monicon/core @monicon/vite ``` ```bash tab="bun" bun add @monicon/core @monicon/vite ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { svelte, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/lib/components/icons * - src/components/icons */ clean({ patterns: ["src/lib/components/icons"] }), svelte({ outputPath: "src/lib/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Vite Add the Monicon plugin to your `vite.config.ts`: ```ts twoslash title="vite.config.ts" import { defineConfig } from "vite"; import { monicon } from "@monicon/vite"; export default defineConfig({ plugins: [ // ... other plugins monicon(), ], }); ``` ## Usage After configuration, Monicon will automatically generate Svelte components for your icons. You can import and use them in your routes and components: ```svelte title="src/routes/+page.svelte"
``` ================================================ FILE: apps/docs/content/docs/installation/universal-build-tool.mdx ================================================ --- title: Universal Build Tool description: Learn how to use Monicon in universal build tools projects like Swift, Kotlin, etc. --- Monicon can generate SVG icons for any project, regardless of the programming language. This guide shows you how to use Monicon as a build step to generate icon files that can be used in Swift, Kotlin, etc. ## Installation Install the Monicon Core ```bash tab="npm" npm install @monicon/core tsx -g ``` ```bash tab="pnpm" pnpm add @monicon/core tsx -g ``` ```bash tab="yarn" yarn global add @monicon/core tsx ``` ```bash tab="bun" bun add @monicon/core tsx -g ``` ## Usage Create a `generate-icons.js` file to generate icons: ```js title="generate-icons.js" import { bootstrap } from "@monicon/core"; import { svg, clean } from "@monicon/core/plugins"; await bootstrap({ // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from a collection collections: ["lucide"], plugins: [ clean({ patterns: ["assets/icons"] }), svg({ outputPath: "assets/icons" }), ], watch: false, }); ``` ## Using a Config File (Optional) If you prefer to use a separate config file (useful for watch mode), create a `monicon.config.js` file: ```js title="monicon.config.js" import { svg, clean } from "@monicon/core/plugins"; export default { icons: ["mdi:home", "feather:activity"], collections: ["lucide"], plugins: [ clean({ patterns: ["assets/icons"] }), svg({ outputPath: "assets/icons" }), ], watch: true, }; ``` Then your build script can simply call `bootstrap()`: ```js twoslash title="generate-icons.js" import { bootstrap } from "@monicon/core"; bootstrap(); ``` ## Running the Build Run the build script to generate SVG files: ```bash tsx generate-icons.js ``` This will generate SVG files in the configured output path (`assets/icons` in the example above). ## Example Output After running the build script, you'll have SVG files in your output directory: ``` assets/icons/ ├── mdi/ │ └── home.svg ├── feather/ │ └── activity.svg └── lucide/ └── badge-check.svg └── cloud-download.svg └── ... ``` ================================================ FILE: apps/docs/content/docs/installation/vue.mdx ================================================ --- title: Vue description: Learn how to install and use Monicon in your Vue (Vite) project --- ## Installation Install Monicon and its Vite plugin in your Vue project: ```bash tab="npm" npm install @monicon/core @monicon/vite ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/vite ``` ```bash tab="yarn" yarn add @monicon/core @monicon/vite ``` ```bash tab="bun" bun add @monicon/core @monicon/vite ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.ts` file in your project root: ```ts twoslash title="monicon.config.ts" import { vue, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), vue({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Vite Add the Monicon plugin to your `vite.config.ts`: ```ts twoslash title="vite.config.ts" import { defineConfig } from "vite"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ // ... other plugins monicon(), ], }); ``` ## Usage After configuration, Monicon will automatically generate Vue components for your icons. You can import and use them in your components: ```vue title="src/App.vue" ``` ================================================ FILE: apps/docs/content/docs/installation/webpack.mdx ================================================ --- title: React (Webpack) description: Learn how to install and use Monicon in your React (Webpack) project --- ## Installation Install Monicon and its Webpack plugin in your project: ```bash tab="npm" npm install @monicon/core @monicon/webpack ``` ```bash tab="pnpm" pnpm add @monicon/core @monicon/webpack ``` ```bash tab="yarn" yarn add @monicon/core @monicon/webpack ``` ```bash tab="bun" bun add @monicon/core @monicon/webpack ``` ## Configuration ### 1. Create Monicon Config Create a `monicon.config.js` file in your project root: ```ts twoslash title="monicon.config.js" import { react, clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { // Loads individual icons by icon name icons: ["mdi:home", "feather:activity"], // Loads all icons from the lucide collection collections: ["lucide"], plugins: [ /** * change the output path to your project config for example; * - src/components/icons * - components/icons */ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons", format: "jsx" }), ], } satisfies MoniconConfig; ``` ### 2. Configure Webpack Add the Monicon plugin to your `webpack.config.js`: ```js title="webpack.config.js" const { MoniconPlugin } = require("@monicon/webpack"); module.exports = { // ... your webpack config plugins: [ new MoniconPlugin({ watch: process.env.NODE_ENV === "development" }), // ... other plugins ], }; ``` The `watch: true` option enables automatic icon regeneration during development when your config changes. ## Usage After configuration, Monicon will automatically generate React components for your icons. You can import and use them in your components: ```jsx title="src/App.jsx" import BadgeCheckIcon from "./components/icons/lucide/badge-check"; import CloudDownloadIcon from "./components/icons/lucide/cloud-download"; import HomeIcon from "./components/icons/mdi/home"; import ActivityIcon from "./components/icons/feather/activity"; export default function App() { return (
{/* If you don't want to use the className prop, you can use the svg props */}
); } ``` ================================================ FILE: apps/docs/content/docs/loaders/custom-loader.mdx ================================================ --- title: Custom Loader description: Create your own custom icon loader --- Custom loaders in Monicon allow you to define your own logic for providing SVG icons. This is especially useful when you want to generate icons dynamically, transform existing icons, or load them from a non-standard source. ## Creating a Custom Loader A custom loader is a function that returns an async function which returns an object mapping icon names to SVG strings: ```ts twoslash title="loaders/custom.ts" import { MoniconConfig } from "@monicon/core"; import { react, clean } from "@monicon/core/plugins"; import { Loader } from "@monicon/core/loaders"; export const customLoader: Loader = () => async () => { // your custom logic here return { heart: '', }; }; export default { icons: ["mdi:home"], loaders: { custom: customLoader(), }, plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## Usage After configuration, Monicon will generate components for your custom icons: ```tsx title="src/App.tsx" import StarIcon from "./components/icons/custom/star"; import HeartIcon from "./components/icons/custom/heart"; function App() { return (
); } export default App; ``` ================================================ FILE: apps/docs/content/docs/loaders/json-collections.mdx ================================================ --- title: JSON Collections description: Load icons from JSON files or URLs --- JSON Collections in Monicon allow you to define custom icons from JSON files or URLs. These JSON files map icon names to their corresponding SVG data, making it easy to include and manage custom icon sets in your project. ## Configuration Add the JSON collection loader to your `monicon.config.ts`: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { loadJSONCollection } from "@monicon/core/loaders"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home"], loaders: { json: loadJSONCollection( "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" ), }, plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## JSON File Format The JSON file should map icon names to their corresponding SVG markup: ```json title="icons.json" { "network": "", "user": "" } ``` ## Usage After configuration, Monicon will generate components for your JSON icons. You can import and use them in your components: ```tsx title="src/App.tsx" import NetworkIcon from "./components/icons/json/network"; import UserIcon from "./components/icons/json/user"; function App() { return (
); } export default App; ``` ## Use Cases JSON collections are particularly useful for: - Sharing icon sets across multiple projects - Loading icons from a CMS or API - Versioning and managing icon sets centrally - Quick prototyping with hosted icon sets ================================================ FILE: apps/docs/content/docs/loaders/local-collections.mdx ================================================ --- title: Local Collections description: Load icons from your local file system --- Local Collections in Monicon allow you to use icons stored locally on your file system. These collections can be loaded using the `loadLocalCollection` function, which points to the directory containing your SVG files. This setup is ideal for projects where icons are managed locally, providing a quick and flexible way to integrate custom icon sets. ## Configuration Add the local collection loader to your `monicon.config.ts`: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { loadLocalCollection } from "@monicon/core/loaders"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home"], loaders: { local: loadLocalCollection("assets/icons"), }, plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## Directory Structure For the above configuration, your `assets/icons` directory might look like this: ``` assets/ └── icons/ ├── folder.svg ├── user.svg └── network.svg ``` Each SVG file in the directory is automatically assigned a name based on its filename (e.g., `folder` for `folder.svg`). ## Usage After configuration, Monicon will generate components for your local icons. You can import and use them in your components: ```tsx title="src/App.tsx" import FolderIcon from "./components/icons/local/folder"; import UserIcon from "./components/icons/local/user"; import NetworkIcon from "./components/icons/local/network"; function App() { return (
); } export default App; ``` ## Nested Directories You can also organize your SVG files in nested directories: ``` assets/ └── icons/ ├── ui/ │ ├── button.svg │ └── input.svg └── social/ ├── twitter.svg └── github.svg ``` The nested structure will be preserved in the generated component paths: ```tsx import ButtonIcon from "./components/icons/local/ui/button"; import TwitterIcon from "./components/icons/local/social/twitter"; ``` ================================================ FILE: apps/docs/content/docs/loaders/meta.json ================================================ { "title": "Loaders", "pages": [ "local-collections", "json-collections", "remote-collections", "custom-loader" ] } ================================================ FILE: apps/docs/content/docs/loaders/remote-collections.mdx ================================================ --- title: Remote Collections description: Fetch icons directly from remote URLs --- Remote Collections in Monicon allow you to fetch and use icons directly from remote URLs. These collections are configured using the `loadRemoteCollection` function, which maps icon names to their respective URLs. This setup is perfect for integrating third-party or dynamically fetched icons into your project. ## Configuration Add the remote collection loader to your `monicon.config.ts`: ```ts twoslash title="monicon.config.ts" import { react, clean } from "@monicon/core/plugins"; import { loadRemoteCollection } from "@monicon/core/loaders"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home"], loaders: { remote: loadRemoteCollection({ download: "https://api.iconify.design/lucide:cloud-download.svg", attachment: "https://api.iconify.design/ri:attachment-2.svg", github: "https://api.iconify.design/simple-icons:github.svg", }), }, plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), ], } satisfies MoniconConfig; ``` ## Usage After configuration, Monicon will generate components for your remote icons. You can import and use them in your components: ```tsx title="src/App.tsx" import DownloadIcon from "./components/icons/remote/download"; import AttachmentIcon from "./components/icons/remote/attachment"; import GitHubIcon from "./components/icons/remote/github"; function App() { return (
); } export default App; ``` ================================================ FILE: apps/docs/content/docs/meta.json ================================================ { "title": "Documentation", "pages": [ "index", "architecture", "installation", "loaders", "plugins" ] } ================================================ FILE: apps/docs/content/docs/plugins/clean.mdx ================================================ --- title: Clean description: Clean output directories before generating icons --- The Clean plugin removes files and directories before generating new icons. This ensures your output directory only contains the icons you've configured, without leftover files from previous runs. ## Usage ```ts twoslash title="monicon.config.ts" import { clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [clean({ patterns: ["src/components/icons"] })], } satisfies MoniconConfig; ``` The Clean plugin should typically be placed **before** other plugins in the plugins array to ensure directories are cleaned before new files are generated. ## Options ### `patterns` An array of glob patterns to match files and directories for removal. - **Type:** `string[]` - **Required:** Yes ```ts twoslash import { clean } from "@monicon/core/plugins"; clean({ patterns: [ "src/components/icons", // Remove entire directory "components/icons/**/*.tsx", // Remove specific file types ], }); ``` ### `enabled` Enable or disable the clean plugin. - **Type:** `boolean` - **Default:** `true` ```ts twoslash import { clean } from "@monicon/core/plugins"; clean({ patterns: ["src/components/icons"], enabled: process.env.NODE_ENV === "production", }); ``` ## Why Use Clean? Without the Clean plugin, old icon files might remain in your output directory even after removing them from your configuration. This can lead to: - **Stale files** - Icons you no longer use still exist in your codebase - **Import errors** - Imports may resolve to old files - **Larger builds** - Unnecessary files increase bundle size - **Confusion** - Hard to know which icons are actually in use ## Conditional Cleaning You can conditionally enable cleaning based on environment: ```ts title="monicon.config.ts" import { clean } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home"], plugins: [ clean({ patterns: ["src/components/icons"], // Only clean in development enabled: process.env.NODE_ENV !== "production", }), ], } satisfies MoniconConfig; ``` ================================================ FILE: apps/docs/content/docs/plugins/custom.mdx ================================================ --- title: Custom Plugin description: Build your own Monicon plugins with full control over icon processing --- Learn how to create custom Monicon plugins to extend functionality with your own icon processing logic, custom file generation, and lifecycle hooks. ## Plugin Structure A Monicon plugin is a function that returns another function, which receives the icon payload and returns a plugin instance with lifecycle hooks. ```ts twoslash title="my-plugin.ts" import path from "path"; import type { MoniconPlugin, MoniconPluginFile, MoniconPluginGenerateContext, } from "@monicon/core/plugins"; type MyPluginOptions = { outputPath?: string; customOption?: string; }; export const myPlugin: MoniconPlugin = (options) => (payload) => { return { name: "my-custom-plugin", generate(context: MoniconPluginGenerateContext) { const files: MoniconPluginFile[] = []; for (const icon of payload.icons) { files.push({ path: path.join(options?.outputPath ?? "output", icon.name), content: icon.svg, }); } return files; }, }; }; ``` ## Plugin Types Monicon provides TypeScript types to help you build type-safe plugins. ### `MoniconPlugin` The main plugin type that defines the plugin factory function signature. ```ts twoslash import type { MoniconPlugin } from "@monicon/core/plugins"; type Options = { prefix?: string }; const plugin: MoniconPlugin = (options) => (payload) => ({ name: "example-plugin", generate: () => [], }); ``` ### `MoniconPluginFile` Represents a file to be generated by the plugin. ```ts twoslash import type { MoniconPluginFile } from "@monicon/core/plugins"; const file: MoniconPluginFile = { path: "output/icon.svg", content: "...", }; ``` ### `MoniconPluginPayload` The payload passed to the plugin containing the icons to process. ```ts twoslash import type { Icon } from "@monicon/core"; type MoniconPluginPayload = { icons: Icon[]; }; ``` ### `Icon` The icon object containing all icon data. ```ts twoslash type Icon = { name: string; svg: string; width: number; height: number; }; ``` ## Lifecycle Hooks Plugins can implement lifecycle hooks to execute code at different stages of the generation process. ### `generate` **Required.** The main generation function that returns an array of files to create. ```ts twoslash import type { MoniconPlugin, MoniconPluginGenerateContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate(context: MoniconPluginGenerateContext) { console.log("Generating files for", payload.icons.length, "icons"); console.log("Config file path:", context.configFilePath); return payload.icons.map((icon) => ({ path: `output/${icon.name}.svg`, content: icon.svg, })); }, }); ``` ### `onPluginsLoad` Called when all plugins are loaded. Useful for plugin initialization or validation. ```ts twoslash import type { MoniconPlugin, MoniconPluginLoadContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate: () => [], onPluginsLoad(context: MoniconPluginLoadContext) { console.log("Loaded plugins:", context.plugins); }, }); ``` ### `beforeGenerate` Called before the `generate` function runs. ```ts twoslash import type { MoniconPlugin, MoniconPluginGenerateContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate: () => [], beforeGenerate(context: MoniconPluginGenerateContext) { console.log("About to generate", context.icons.length, "icons"); }, }); ``` ### `afterGenerate` Called after the `generate` function completes. ```ts twoslash import type { MoniconPlugin, MoniconPluginGenerateContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate: () => [], afterGenerate(context: MoniconPluginGenerateContext) { console.log("Finished generating icons"); }, }); ``` ### `beforeWriteFiles` Called before files are written to disk. ```ts twoslash import type { MoniconPlugin, MoniconPluginWriteFilesContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate: () => [], beforeWriteFiles(context: MoniconPluginWriteFilesContext) { console.log("About to write", context.files.length, "files"); }, }); ``` ### `afterWriteFiles` Called after files have been written to disk. ```ts twoslash import type { MoniconPlugin, MoniconPluginWriteFilesContext, } from "@monicon/core/plugins"; const plugin: MoniconPlugin = () => (payload) => ({ name: "my-plugin", generate: () => [], afterWriteFiles(context: MoniconPluginWriteFilesContext) { console.log("Successfully wrote", context.files.length, "files"); }, }); ``` ## Context Objects Each lifecycle hook receives a context object with relevant information. ### `MoniconPluginGenerateContext` Available in `generate`, `beforeGenerate`, and `afterGenerate` hooks. - **`icons`** - Array of icons being processed - **`configUpdated`** - Whether the config file was updated - **`configFilePath`** - Path to the Monicon config file ### `MoniconPluginLoadContext` Available in `onPluginsLoad` hook. - **`plugins`** - Array of loaded plugin names - **`configUpdated`** - Whether the config file was updated - **`configFilePath`** - Path to the Monicon config file ### `MoniconPluginWriteFilesContext` Available in `beforeWriteFiles` and `afterWriteFiles` hooks. - **`files`** - Array of files to be written or that were written - **`configUpdated`** - Whether the config file was updated - **`configFilePath`** - Path to the Monicon config file ## Using with Generic Plugin For simpler use cases, you can extend the [Generic plugin](/docs/plugins/generic) instead of building from scratch: ```ts twoslash title="extended-generic-plugin.ts" import { generic, GenericPluginOptions, MoniconPlugin, } from "@monicon/core/plugins"; type MyOptions = GenericPluginOptions<{ foo?: string; }>; export const myPlugin: MoniconPlugin = (options) => generic({ name: "my-extended-plugin", outputPath: options?.outputPath ?? "output", extension: "json", content: (icon) => { return JSON.stringify( { name: icon.name, svg: icon.svg, foo: options?.foo, }, null, 2 ); }, }); ``` ================================================ FILE: apps/docs/content/docs/plugins/debugger.mdx ================================================ --- title: Debugger description: Debug the icon generation process --- The Debugger plugin logs information about the icon generation process, helping you understand what's happening during build time. ## Usage ```ts twoslash title="monicon.config.ts" import { debuggerPlugin } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [debuggerPlugin()], } satisfies MoniconConfig; ``` ## Options ### `enabled` Enable or disable the debugger plugin. - **Type:** `boolean` - **Default:** `true` ```ts twoslash import { debuggerPlugin } from "@monicon/core/plugins"; debuggerPlugin({ enabled: false }); debuggerPlugin({ enabled: true }); ``` ## What It Logs The Debugger plugin logs information at various stages of the generation process: ### On Plugins Load Logs when all plugins are loaded. ``` [Monicon - Debugger Plugin] On plugins load 3 plugins ``` ### Before Generate Logs the number of icons about to be generated. ``` [Monicon - Debugger Plugin] Before generate 2 icons ``` ### After Generate Logs the number of icons that were generated. ``` [Monicon - Debugger Plugin] After generate 2 icons ``` ### Before Write Files Logs the number of files about to be written to disk. ``` [Monicon - Debugger Plugin] Before write files 2 files ``` ### After Write Files Logs the number of files that were written to disk. ``` [Monicon - Debugger Plugin] After write files 2 files ``` ## Example Output When running your build with the debugger plugin enabled, you'll see output like: ```bash [Monicon - Debugger Plugin] On plugins load 3 plugins [Monicon - Debugger Plugin] Before generate 12 icons [Monicon - Debugger Plugin] After generate 12 icons [Monicon - Debugger Plugin] Before write files 12 files [Monicon - Debugger Plugin] After write files 12 files ``` ## Use Cases The Debugger plugin is useful for: - **Development** - Understanding what's happening during icon generation - **Debugging** - Troubleshooting issues with icon generation - **Performance** - Monitoring how many icons and files are being processed - **Verification** - Confirming that icons are being generated as expected ## Plugin Order The Debugger plugin can be placed anywhere in the plugins array. It's typically placed last so it logs information about all other plugins: ```ts twoslash import { debuggerPlugin } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home"], plugins: [ debuggerPlugin(), // Last to log all plugin activity ], } satisfies MoniconConfig; ``` ================================================ FILE: apps/docs/content/docs/plugins/generic.mdx ================================================ --- title: Generic description: Create custom icon outputs with flexible file generation --- The Generic plugin is a flexible base plugin that allows you to create custom file outputs from your icons. You can control the file path, name, extension, and content, making it perfect for custom integrations or specialized icon formats. ## Usage ```ts twoslash title="monicon.config.ts" import { generic } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ generic({ name: "custom-plugin", outputPath: "public/icons", extension: "txt", content: (icon) => `Icon: ${icon.name}\nSVG: ${icon.svg}`, }), ], } satisfies MoniconConfig; ``` ## Options ### `name` The name of your custom plugin instance (useful for debugging and logging). - **Type:** `string` - **Default:** `"monicon-generic-plugin"` ```ts twoslash import { generic } from "@monicon/core/plugins"; generic({ name: "my-custom-icon-plugin", content: (icon) => icon.svg, }); ``` ### `outputPath` The directory where files will be saved. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { generic } from "@monicon/core/plugins"; // Static path generic({ outputPath: "public/icons", content: (icon) => icon.svg, }); // Dynamic path based on icon generic({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "public/icons/mdi"; } return "public/icons"; }, content: (icon) => icon.svg, }); ``` ### `fileName` Customize the file name for each icon. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** Slugified icon name (e.g., `mdi:home` becomes `mdi/home`) ```ts twoslash import { generic } from "@monicon/core/plugins"; generic({ fileName: (icon) => { // Custom file naming return icon.name.toLowerCase().replace(":", "-"); }, content: (icon) => icon.svg, }); ``` ### `extension` Set the file extension for the generated files. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"svg"` ```ts twoslash import { generic } from "@monicon/core/plugins"; // Static extension generic({ extension: "txt", content: (icon) => icon.svg, }); // Dynamic extension based on icon generic({ extension: (icon) => { return icon.name.startsWith("mdi:") ? "xml" : "txt"; }, content: (icon) => icon.svg, }); ``` ### `content` The content to write to each file. This is a required option. - **Type:** `string | ((icon: Icon) => string)` - **Required:** `false` > [!NOTE] If no content is provided, the plugin will log a warning and skip the icon. ```ts twoslash import { generic } from "@monicon/core/plugins"; // Static content generic({ content: "Hello World", }); // Dynamic content based on icon generic({ content: (icon) => { return `Name: ${icon.name}\nSVG: ${icon.svg}`; }, }); ``` ## Examples ### Create JSON Metadata Files Generate JSON files with icon metadata: ```ts twoslash title="monicon.config.ts" import { generic } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ generic({ name: "icon-metadata", outputPath: "public/icons/metadata", extension: "json", content: (icon) => { return JSON.stringify(icon, null, 2); }, }), ], } satisfies MoniconConfig; ``` ## Use Cases The Generic plugin is perfect for: - **Custom file formats** - Generate icons in formats not supported by other plugins - **Metadata generation** - Create companion files with icon information - **Documentation** - Generate documentation or reference files from icons - **Testing** - Create test fixtures or sample data - **Integration** - Build custom outputs for specific tools or frameworks - **Logging** - Create text files that log icon information after processing ## Advanced Usage You can use the Generic plugin to build your own specialized plugins: ```ts twoslash title="my-plugin.ts" import { generic, GenericPluginOptions, MoniconPlugin, } from "@monicon/core/plugins"; import type { Icon } from "@monicon/core"; type MyCustomPluginOptions = GenericPluginOptions<{ foo?: string }>; export const myCustomPlugin: MoniconPlugin = (options) => generic({ name: "my-custom-plugin", afterGenerate(context) { console.log("afterGenerate", context); }, }); myCustomPlugin({ foo: "bar" }); ``` ================================================ FILE: apps/docs/content/docs/plugins/meta.json ================================================ { "title": "Plugins", "pages": [ "react", "vue", "svelte", "qwik", "react-native", "svg", "generic", "clean", "debugger", "custom" ] } ================================================ FILE: apps/docs/content/docs/plugins/qwik.mdx ================================================ --- title: Qwik description: Generate Qwik components for your icons --- The Qwik plugin generates Qwik components from your SVG icons. ## Usage ```ts twoslash title="monicon.config.ts" import { qwik } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ qwik({ outputPath: "src/components/icons", suffix: "Icon", }), ], } satisfies MoniconConfig; ``` ## Options ### `outputPath` The directory where icon components will be generated. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { qwik } from "@monicon/core/plugins"; // Static path qwik({ outputPath: "src/components/icons" }); // Dynamic path based on icon qwik({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "src/components/icons/mdi"; } return "src/components/icons"; }, }); ``` ### `componentName` Customize the component name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** `${icon.name}Icon` ```ts twoslash import { qwik } from "@monicon/core/plugins"; qwik({ componentName: (icon) => { return `Custom${icon.name}`; }, }); ``` ### `fileName` Customize the file name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** Slugified icon name ```ts twoslash import { qwik } from "@monicon/core/plugins"; qwik({ fileName: (icon) => { return icon.name.toLowerCase().replace(":", "-"); }, }); ``` ### `prefix` Add a prefix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `""` ```ts twoslash import { qwik } from "@monicon/core/plugins"; // Static prefix qwik({ prefix: "Icon" }); // Dynamic prefix qwik({ prefix: (icon) => { return icon.name.startsWith("mdi:") ? "Mdi" : ""; }, }); ``` ### `suffix` Add a suffix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"Icon"` ```ts twoslash import { qwik } from "@monicon/core/plugins"; // Static suffix qwik({ suffix: "Component" }); // No suffix qwik({ suffix: "" }); ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```tsx title="src/components/icons/mdi/home.tsx" import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const HomeIcon = component$((props: QwikIntrinsicElements["svg"]) => { return ( ); }); export default HomeIcon; ``` ## Usage in Components ```tsx title="src/routes/index.tsx" import { component$ } from "@builder.io/qwik"; import HomeIcon from "~/components/icons/mdi/home"; import HeartIcon from "~/components/icons/lucide/heart"; export default component$(() => { return (
); }); ``` ================================================ FILE: apps/docs/content/docs/plugins/react-native.mdx ================================================ --- title: React Native description: Generate React Native components for your icons --- The React Native plugin generates React Native components using `react-native-svg` from your SVG icons. ## Usage ```ts twoslash title="monicon.config.ts" import { reactNative } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ reactNative({ outputPath: "components/icons", format: "tsx", suffix: "Icon", }), ], } satisfies MoniconConfig; ``` Make sure you have `react-native-svg` installed in your project. ## Options ### `outputPath` The directory where icon components will be generated. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { reactNative } from "@monicon/core/plugins"; // Static path reactNative({ outputPath: "components/icons" }); // Dynamic path based on icon reactNative({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "components/icons/mdi"; } return "components/icons"; }, }); ``` ### `format` The output format for generated files. - **Type:** `"jsx" | "tsx"` - **Default:** `"tsx"` ```ts twoslash import { reactNative } from "@monicon/core/plugins"; // Generate JSX files reactNative({ format: "jsx" }); // Generate TSX files (default) reactNative({ format: "tsx" }); ``` ### `componentName` Customize the component name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** `${icon.name}Icon` ```ts twoslash import { reactNative } from "@monicon/core/plugins"; reactNative({ componentName: (icon) => { return `Custom${icon.name}`; }, }); ``` ### `fileName` Customize the file name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** Slugified icon name ```ts twoslash import { reactNative } from "@monicon/core/plugins"; reactNative({ fileName: (icon) => { return icon.name.toLowerCase().replace(":", "-"); }, }); ``` ### `prefix` Add a prefix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `""` ```ts twoslash import { reactNative } from "@monicon/core/plugins"; // Static prefix reactNative({ prefix: "Icon" }); ``` ### `suffix` Add a suffix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"Icon"` ```ts twoslash import { reactNative } from "@monicon/core/plugins"; // Static suffix reactNative({ suffix: "Component" }); // No suffix reactNative({ suffix: "" }); ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```tsx title="components/icons/mdi/home.tsx" import React from "react"; import { SvgXml, type SvgProps } from "react-native-svg"; const HomeIcon = (props: Omit) => { const xml = ``; return ; }; export default HomeIcon; ``` ## Usage in Components ```tsx title="app/(tabs)/index.tsx" import { View, StyleSheet } from "react-native"; import HomeIcon from "@/components/icons/mdi/home"; import HeartIcon from "@/components/icons/lucide/heart"; export default function HomeScreen() { return ( ); } const styles = StyleSheet.create({ container: { flex: 1, flexDirection: "row", alignItems: "center", justifyContent: "center", gap: 10, }, }); ``` ================================================ FILE: apps/docs/content/docs/plugins/react.mdx ================================================ --- title: React description: Generate React components for your icons --- The React plugin generates React components (TSX or JSX) from your SVG icons. ## Usage ```ts twoslash title="monicon.config.ts" import { react } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ react({ outputPath: "src/components/icons", format: "tsx", suffix: "Icon", }), ], } satisfies MoniconConfig; ``` ## Options ### `outputPath` The directory where icon components will be generated. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { react } from "@monicon/core/plugins"; // Static path react({ outputPath: "components/icons" }); // Dynamic path based on icon react({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "components/icons/mdi"; } return "components/icons"; }, }); ``` ### `format` The output format for generated files. - **Type:** `"jsx" | "tsx"` - **Default:** `"tsx"` ```ts twoslash import { react } from "@monicon/core/plugins"; // Generate JSX files react({ format: "jsx" }); // Generate TSX files (default) react({ format: "tsx" }); ``` ### `componentName` Customize the component name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** `${icon.name}Icon` ```ts twoslash import { react } from "@monicon/core/plugins"; react({ componentName: (icon) => { // Custom naming logic return `Custom${icon.name}`; }, }); ``` ### `fileName` Customize the file name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** Slugified icon name ```ts react({ fileName: (icon) => { // Custom file naming return icon.name.toLowerCase().replace(":", "-"); }, }); ``` ### `prefix` Add a prefix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `""` ```ts twoslash import { react } from "@monicon/core/plugins"; // Static prefix react({ prefix: "Icon" }); // Dynamic prefix react({ prefix: (icon) => { return icon.name.startsWith("mdi:") ? "Mdi" : ""; }, }); ``` ### `suffix` Add a suffix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"Icon"` ```ts twoslash import { react } from "@monicon/core/plugins"; // Static suffix react({ suffix: "Component" }); // No suffix react({ suffix: "" }); // Dynamic suffix react({ suffix: (icon) => { return icon.name.includes("outline") ? "Outline" : "Icon"; }, }); ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```ts title="src/components/icons/mdi/home.tsx" const HomeIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default HomeIcon; ``` ## Usage in Components ```tsx title="src/App.tsx" import HomeIcon from "./components/icons/mdi/home"; import HeartIcon from "./components/icons/lucide/heart"; function App() { return (
); } ``` ================================================ FILE: apps/docs/content/docs/plugins/svelte.mdx ================================================ --- title: Svelte description: Generate Svelte components for your icons --- The Svelte plugin generates Svelte components from your SVG icons. ## Usage ```ts twoslash title="monicon.config.ts" import { svelte } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ svelte({ outputPath: "'src/lib/components/icons", suffix: "Icon", }), ], } satisfies MoniconConfig; ``` ## Options ### `outputPath` The directory where icon components will be generated. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/lib/components/icons"` ```ts twoslash import { svelte } from "@monicon/core/plugins"; // Static path svelte({ outputPath: "src/lib/components/icons" }); // Dynamic path based on icon svelte({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "src/lib/components/icons/mdi"; } return "src/lib/components/icons"; }, }); ``` ### `componentName` Customize the component name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** `${icon.name}Icon` ```ts twoslash import { svelte } from "@monicon/core/plugins"; svelte({ componentName: (icon) => { return `Custom${icon.name}`; }, }); ``` ### `fileName` Customize the file name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** Slugified icon name ```ts twoslash import { svelte } from "@monicon/core/plugins"; svelte({ fileName: (icon) => { return icon.name.toLowerCase().replace(":", "-"); }, }); ``` ### `prefix` Add a prefix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `""` ```ts twoslash import { svelte } from "@monicon/core/plugins"; // Static prefix svelte({ prefix: "Icon" }); // Dynamic prefix svelte({ prefix: (icon) => { return icon.name.startsWith("mdi:") ? "Mdi" : ""; }, }); ``` ### `suffix` Add a suffix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"Icon"` ```ts twoslash import { svelte } from "@monicon/core/plugins"; // Static suffix svelte({ suffix: "Component" }); // No suffix svelte({ suffix: "" }); ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```svelte title="src/lib/components/icons/mdi/home.svelte" ``` ## Usage in Components ```svelte title="src/routes/+page.svelte"
``` ================================================ FILE: apps/docs/content/docs/plugins/svg.mdx ================================================ --- title: SVG description: Export icons as raw SVG files --- The SVG plugin exports your icons as raw SVG files, useful when you need standalone SVG files for design tools, documentation, or other purposes. ## Usage ```ts twoslash title="monicon.config.ts" import { svg } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ svg({ outputPath: "public/icons", }), ], } satisfies MoniconConfig; ``` ## Options ### `outputPath` The directory where SVG files will be saved. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { svg } from "@monicon/core/plugins"; // Static path svg({ outputPath: "public/icons" }) // Dynamic path based on icon svg({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "public/icons/mdi"; } return "public/icons"; }, }) ``` ### `fileName` Customize the file name for each icon. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** Slugified icon name ```ts import { svg } from "@monicon/core/plugins"; svg({ fileName: (icon) => { // Custom file naming return icon.name.toLowerCase().replace(":", "-"); }, }) ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```html title="public/icons/mdi/home.svg" ``` ## Usage in HTML ```html Home ``` ================================================ FILE: apps/docs/content/docs/plugins/vue.mdx ================================================ --- title: Vue description: Generate Vue components for your icons --- The Vue plugin generates Vue 3 Single File Components (SFC) from your SVG icons. ## Usage ```ts twoslash title="monicon.config.ts" import { vue } from "@monicon/core/plugins"; import { MoniconConfig } from "@monicon/core"; export default { icons: ["mdi:home", "lucide:heart"], plugins: [ vue({ outputPath: "src/components/icons", template: "ts", suffix: "Icon", }), ], } satisfies MoniconConfig; ``` ## Options ### `outputPath` The directory where icon components will be generated. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"src/components/icons"` ```ts twoslash import { vue } from "@monicon/core/plugins"; // Static path vue({ outputPath: "components/icons" }) // Dynamic path based on icon vue({ outputPath: (icon) => { if (icon.name.startsWith("mdi:")) { return "components/icons/mdi"; } return "components/icons"; }, }) ``` ### `template` The script template type for generated components. - **Type:** `"js" | "ts"` - **Default:** `"ts"` ```ts twoslash import { vue } from "@monicon/core/plugins"; // TypeScript setup (default) vue({ template: "ts" }) // JavaScript setup vue({ template: "js" }) ``` ### `componentName` Customize the component name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** `${icon.name}Icon` ```ts twoslash import { vue } from "@monicon/core/plugins"; vue({ componentName: (icon) => { return `Custom${icon.name}`; }, }) ``` ### `fileName` Customize the file name. - **Type:** `(icon: Icon) => string | undefined` - **Default:** Slugified icon name ```ts twoslash import { vue } from "@monicon/core/plugins"; vue({ fileName: (icon) => { return icon.name.toLowerCase().replace(":", "-"); }, }) ``` ### `prefix` Add a prefix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `""` ```ts twoslash import { vue } from "@monicon/core/plugins"; // Static prefix vue({ prefix: "Icon" }) // Dynamic prefix vue({ prefix: (icon) => { return icon.name.startsWith("mdi:") ? "Mdi" : ""; }, }) ``` ### `suffix` Add a suffix to component names. - **Type:** `string | ((icon: Icon) => string | undefined)` - **Default:** `"Icon"` ```ts twoslash import { vue } from "@monicon/core/plugins"; // Static suffix vue({ suffix: "Component" }) // No suffix vue({ suffix: "" }) ``` ## Generated Output For an icon `mdi:home`, the plugin generates: ```vue title="src/components/icons/mdi/home.vue" ``` ## Usage in Components ```vue title="src/App.vue" ``` ================================================ FILE: apps/docs/eslint.config.mjs ================================================ import { defineConfig, globalIgnores } from 'eslint/config'; import nextVitals from 'eslint-config-next/core-web-vitals'; const eslintConfig = defineConfig([ ...nextVitals, globalIgnores([ '.next/**', 'out/**', 'build/**', 'next-env.d.ts', '.source/**', ]), ]); export default eslintConfig; ================================================ FILE: apps/docs/next.config.mjs ================================================ import { createMDX } from "fumadocs-mdx/next"; const withMDX = createMDX(); /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, async rewrites() { return [ { source: "/docs/:path*.mdx", destination: "/llms.mdx/docs/:path*", }, ]; }, redirects() { return [ { source: "/installation/react", destination: "/docs/installation/react", permanent: true, }, { source: "/installation/react-rspack", destination: "/docs/installation/rspack", permanent: true, }, { source: "/installation/react-rollup", destination: "/docs/installation/rollup", permanent: true, }, { source: "/installation/react-esbuild", destination: "/docs/installation/esbuild", permanent: true, }, { source: "/installation/react-webpack", destination: "/docs/installation/webpack", permanent: true, }, { source: "/installation/react-native", destination: "/docs/installation/react-native", permanent: true, }, { source: "/installation/nextjs", destination: "/docs/installation/nextjs", permanent: true, }, { source: "/installation/remix", destination: "/docs/installation/remix", permanent: true, }, { source: "/installation/qwik", destination: "/docs/installation/qwik", permanent: true, }, { source: "/installation/vue", destination: "/docs/installation/vue", permanent: true, }, { source: "/installation/nuxt", destination: "/docs/installation/nuxt", permanent: true, }, { source: "/installation/svelte", destination: "/docs/installation/svelte", permanent: true, }, { source: "/customization/custom-loader", destination: "/docs/loaders/custom-loader", permanent: true, }, { source: "/customization/json-collections", destination: "/docs/loaders/json-collections", permanent: true, }, { source: "/customization/local-collections", destination: "/docs/loaders/local-collections", permanent: true, }, { source: "/customization/remote-collections", destination: "/docs/loaders/remote-collections", permanent: true, }, ]; }, }; export default withMDX(config); ================================================ FILE: apps/docs/package.json ================================================ { "name": "@monicon/docs", "version": "0.0.0", "private": true, "scripts": { "build": "next build", "dev": "next dev", "start": "next start", "types:check": "fumadocs-mdx && next typegen && tsc --noEmit", "postinstall": "fumadocs-mdx", "lint": "eslint" }, "dependencies": { "fumadocs-core": "16.4.7", "fumadocs-mdx": "14.2.5", "fumadocs-twoslash": "^3.1.12", "fumadocs-typescript": "^5.0.1", "fumadocs-ui": "16.4.7", "lucide-react": "^0.562.0", "next": "16.1.1", "react": "^19.2.3", "react-dom": "^19.2.3", "string-sanitizer": "^2.0.2", "tailwind-merge": "^3.4.0", "twoslash": "^0.3.6" }, "devDependencies": { "@monicon/core": "*", "@monicon/vite": "*", "@tailwindcss/postcss": "^4.1.18", "@types/mdx": "^2.0.13", "@types/node": "^25.0.5", "@types/react": "^19.2.8", "@types/react-dom": "^19.2.3", "eslint": "^9.39.2", "eslint-config-next": "16.1.1", "postcss": "^8.5.6", "tailwindcss": "^4.1.18", "typescript": "^5.9.3" } } ================================================ FILE: apps/docs/postcss.config.mjs ================================================ export default { plugins: { '@tailwindcss/postcss': {}, }, }; ================================================ FILE: apps/docs/public/browserconfig.xml ================================================ #ffffff ================================================ FILE: apps/docs/source.config.ts ================================================ import { defineConfig, defineDocs, frontmatterSchema, metaSchema } from 'fumadocs-mdx/config'; import { transformerTwoslash } from 'fumadocs-twoslash'; import { rehypeCodeDefaultOptions } from 'fumadocs-core/mdx-plugins'; // You can customise Zod schemas for frontmatter and `meta.json` here // see https://fumadocs.dev/docs/mdx/collections export const docs = defineDocs({ dir: 'content/docs', docs: { schema: frontmatterSchema, postprocess: { includeProcessedMarkdown: true, }, }, meta: { schema: metaSchema, }, }); export default defineConfig({ mdxOptions: { rehypeCodeOptions: { themes: { light: 'github-light', dark: 'github-dark', }, transformers: [...(rehypeCodeDefaultOptions.transformers ?? []), transformerTwoslash()], // important: Shiki doesn't support lazy loading languages for codeblocks in Twoslash popups // make sure to define them first (e.g. the common ones) langs: ['js', 'jsx', 'ts', 'tsx'], }, }, }); ================================================ FILE: apps/docs/src/app/(home)/layout.tsx ================================================ import { HomeLayout } from "fumadocs-ui/layouts/home"; import { baseOptions } from "@/lib/layout.shared"; export default function Layout({ children }: LayoutProps<"/">) { return {children}; } ================================================ FILE: apps/docs/src/app/(home)/page.tsx ================================================ import Link from "next/link"; import { ConfigDemo } from "@/components/ConfigDemo"; import { buttonVariants } from "fumadocs-ui/components/ui/button"; import { Card } from "fumadocs-ui/components/card"; import { Metadata } from "next"; export const metadata: Metadata = { title: "Monicon", description: "Monicon is an easy-to-use icon orchestration tool that makes adding icons to your projects simple.", openGraph: { title: "Monicon", description: "Monicon is an easy-to-use icon orchestration tool that makes adding icons to your projects simple.", images: ["/og"], url: "https://monicon.dev", siteName: "Monicon", locale: "en_US", type: "website", }, twitter: { card: "summary_large_image", title: "Monicon", description: "Monicon is an easy-to-use icon orchestration tool that makes adding icons to your projects simple.", images: ["/og"], }, }; export default function HomePage() { return (

Universal Icon Library

Monicon is an easy-to-use icon orchestration tool that makes adding icons to your projects simple. Access 200,000+ icons from popular sets like Material Design, Feather, and Font Awesome.

Get Started Explore Icons
🎨
} title="200,000+ Icons" > Access a vast collection of icons from popular icon sets including Material Design, Feather, Font Awesome, Lucide, and many more. 🚀
} title="Framework Agnostic" > Works seamlessly with React, Vue, Svelte, Next.js, Nuxt, React Native, and more. One configuration for all frameworks.
} title="Type-Safe" > Full TypeScript support with auto-generated types for all your icons, providing excellent developer experience. 📦 } title="Tree-Shakeable" > Only bundle the icons you actually use. Monicon generates individual icons as separate files for optimal bundle size. 🔧 } title="Customizable" > Load icons from multiple sources: online collections, local files, or custom JSON. Create your own plugin for any output format. ⚙️ } title="Simple Configuration" > Configure once in monicon.config.ts and integrate with your favorite bundler: Vite, Webpack, Rollup, esbuild, or Rspack.

How It Works

Define your configuration and select the icons you need. Monicon will automatically generate optimized icon components tailored to your framework.

Made by{" "} @senkanoktay

); } ================================================ FILE: apps/docs/src/app/api/search/route.ts ================================================ import { source } from '@/lib/source'; import { createFromSource } from 'fumadocs-core/search/server'; export const { GET } = createFromSource(source, { // https://docs.orama.com/docs/orama-js/supported-languages language: 'english', }); ================================================ FILE: apps/docs/src/app/docs/[[...slug]]/page.tsx ================================================ import { getPageImage, source } from "@/lib/source"; import { DocsBody, DocsDescription, DocsPage, DocsTitle, } from "fumadocs-ui/layouts/docs/page"; import { notFound } from "next/navigation"; import { getMDXComponents } from "@/mdx-components"; import type { Metadata } from "next"; import { createRelativeLink } from "fumadocs-ui/mdx"; import { LLMCopyButton, ViewOptions } from "@/components/ai/page-actions"; export default async function Page(props: PageProps<"/docs/[[...slug]]">) { const params = await props.params; const page = source.getPage(params.slug); if (!page) notFound(); const MDX = page.data.body; const gitConfig = { user: "oktaysenkan", repo: "monicon", branch: "main", }; return ( {page.data.title} {page.data.description}
); } export async function generateStaticParams() { return source.generateParams(); } export async function generateMetadata( props: PageProps<"/docs/[[...slug]]"> ): Promise { const params = await props.params; const page = source.getPage(params.slug); if (!page) notFound(); return { title: `${page.data.title} - Monicon`, description: page.data.description, openGraph: { images: getPageImage(page).url, }, }; } ================================================ FILE: apps/docs/src/app/docs/layout.tsx ================================================ import { source } from '@/lib/source'; import { DocsLayout } from 'fumadocs-ui/layouts/docs'; import { baseOptions } from '@/lib/layout.shared'; export default function Layout({ children }: LayoutProps<'/docs'>) { return ( {children} ); } ================================================ FILE: apps/docs/src/app/global.css ================================================ @import 'tailwindcss'; @import 'fumadocs-ui/css/neutral.css'; @import 'fumadocs-ui/css/preset.css'; @import 'fumadocs-twoslash/twoslash.css'; ================================================ FILE: apps/docs/src/app/layout.tsx ================================================ import { RootProvider } from "fumadocs-ui/provider/next"; import "./global.css"; import { Inter } from "next/font/google"; import Script from "next/script"; const inter = Inter({ subsets: ["latin"], }); export default function Layout({ children }: LayoutProps<"/">) { return ( {children}
``` ## Configure .gitignore Add the following to your `.gitignore` file to prevent icons from being committed to your repository. ``` # monicon .monicon ``` ## Next Steps You’ve successfully set up Monicon with Svelte! You can now explore more icon sets and customize your usage further. ================================================ FILE: apps/legacy-docs/pages/installation/vue.mdx ================================================ import { Steps, Callout } from "nextra/components"; # Install Monicon with Vue Setting up Monicon with Vue is a straightforward process. This guide will walk you through the installation and configuration steps to get started with Monicon in your Vue project. ## Install First, you’ll need to install the necessary dependencies for Monicon. In your project directory, run the following command. ```sh npm2yarn npm i @monicon/vue@1 @monicon/vite@1 ``` Next, install the development dependency @iconify/json for icon sets. This package provides a comprehensive collection of icons that you can easily integrate into your project. ```sh npm2yarn npm i -D @iconify/json # or specific icon sets npm i -D @iconify-json/mdi @iconify-json/feather ``` ## Configure Vite Now that the dependencies are installed, you’ll need to configure Vite to use Monicon. ```ts filename="vite.config.ts" import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ vue(), monicon({ icons: [ "mdi:home", "feather:activity", "logos:active-campaign", "lucide:badge-check", ], // Load all icons from the listed collections collections: ["radix-icons"], }), ], }); ``` The `icons` array in the `monicon` plugin configuration specifies the icon sets you want to use in your project. You can add more icon sets as needed. For a complete list of available icon sets, refer to the [Icones](https://icones.js.org/) website. ## Global Import (Optional) If you want to use Monicon globally in your Vue project, add the following code to your main.ts file. ```ts filename="main.ts" import Monicon from "@monicon/vue"; const app = createApp(App); app.use(Monicon); ``` ## Usage You can now use Monicon in your Vue components. Here’s an example of how to use Monicon in a Vue component. ```vue filename="src/App.vue" ``` ## Configure .gitignore Add the following to your `.gitignore` file to prevent icons from being committed to your repository. ``` # monicon .monicon ``` ## Next Steps You’ve successfully set up Monicon! You can now explore more icon sets and customize your usage further. ================================================ FILE: apps/legacy-docs/pages/troubleshooting/_meta.tsx ================================================ export default { typescript: "TypeScript", monorepo: "Monorepo", "module-resolution": "Module Resolution", "bundle-size": "Bundle Size", }; ================================================ FILE: apps/legacy-docs/pages/troubleshooting/bundle-size.mdx ================================================ import { Steps, Callout } from "nextra/components"; # Bundle Size To keep your application efficient, it’s best to only include the icons you actually use. This guide shows how to reduce your bundle size by selecting specific icons with Monicon. ## Unoptimized Configuration In the example below, the entire `lucide` icon collection is included, which increases the bundle size significantly. ```ts filename="vite.config.ts" {9,10} import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ react(), monicon({ icons: [], collections: ["lucide"], }), ], }); ``` ```sh vite v5.4.8 building for production... dist/assets/vite-react-Ceh97ktz.js 528.50 kB │ gzip: 68.80 kB ``` ## Optimized Configuration To reduce the bundle size, specify only the icons you need by adding them to the `icons` option and leaving `collections` empty. This setup includes just `"lucide:badge-check"` and reduces the bundle size significantly. ```tsx filename="vite.config.ts" {9,10} import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ react(), monicon({ icons: ["lucide:badge-check"], collections: [], }), ], }); ``` ```sh vite v5.4.8 building for production... dist/assets/vite-react-CloGAhCu.js 0.44 kB │ gzip: 0.27 kB ``` Bundle size reduced from **528.50 kB** to **0.44 kB** for the whole app. ## Conclusion To keep your bundle size small and your application efficient: 1. Specify only the icons you need with the `icons` option. 2. Leave `collections` empty if the entire set is unnecessary. This setup minimizes the bundle size and optimizes performance in production. ================================================ FILE: apps/legacy-docs/pages/troubleshooting/module-resolution.mdx ================================================ # Module Resolution Here, module resolution ensures that the correct version and format of the module are loaded, making sure everything works together smoothly. You can specify different formats like "esm" for modern JavaScript or "cjs" for older CommonJS modules. ```ts filename="apps/web/vite.config.ts" copy {10} import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ react(), // The format option makes sure outfile is in ESM format // You can also use "cjs" for CommonJS format but Vite does not support it monicon({ format: "esm" }), ], }); ``` ================================================ FILE: apps/legacy-docs/pages/troubleshooting/monorepo.mdx ================================================ # Monorepo Configuration This monorepo configuration each app has a unique output file, so you can use Monicon in multiple apps without conflicts. ```ts filename="apps/web/vite.config.ts" copy {9} import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ react(), // The outputFileName option makes sure each app has a unique file name monicon({ outputFileName: "web" }), ], }); ``` ================================================ FILE: apps/legacy-docs/pages/troubleshooting/typescript.mdx ================================================ # TypeScript Monicon uses TypeScript to generate types for the icons. To enable TypeScript type definitions for your icons, add the following configuration to your `tsconfig.json` file: ```json filename="tsconfig.json" copy {2} { "include": [".monicon/*.d.ts"] } ``` You can also use the `typesFileName` option to specify the name of the file to output the types to. If you want to disable the types file, you can set the `generateTypes` option to `false`. ```ts filename="apps/vite-react/vite.config.ts" copy {9,10} import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; export default defineConfig({ plugins: [ react(), monicon({ typesFileName: "types", generateTypes: true, }), ], }); ``` ================================================ FILE: apps/legacy-docs/public/browserconfig.xml ================================================ #ffffff ================================================ FILE: apps/legacy-docs/public/manifest.json ================================================ { "name": "Monicon", "icons": [ { "src": "/android-icon-36x36.png", "sizes": "36x36", "type": "image/png", "density": "0.75" }, { "src": "/android-icon-48x48.png", "sizes": "48x48", "type": "image/png", "density": "1.0" }, { "src": "/android-icon-72x72.png", "sizes": "72x72", "type": "image/png", "density": "1.5" }, { "src": "/android-icon-96x96.png", "sizes": "96x96", "type": "image/png", "density": "2.0" }, { "src": "/android-icon-144x144.png", "sizes": "144x144", "type": "image/png", "density": "3.0" }, { "src": "/android-icon-192x192.png", "sizes": "192x192", "type": "image/png", "density": "4.0" } ] } ================================================ FILE: apps/legacy-docs/public/robots.txt ================================================ # * User-agent: * Allow: / # Host Host: https://monicon-docs.vercel.app # Sitemaps Sitemap: https://monicon-docs.vercel.app/sitemap.xml ================================================ FILE: apps/legacy-docs/public/sitemap-0.xml ================================================ https://monicon-docs.vercel.app2026-01-24T12:51:07.293Zdaily0.7 https://monicon-docs.vercel.app/customization/custom-loader2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/customization/json-collections2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/customization/local-collections2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/customization/remote-collections2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/nextjs2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/nuxt2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/qwik2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react-esbuild2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react-native2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react-rollup2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react-rspack2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/react-webpack2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/remix2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/svelte2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/installation/vue2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/troubleshooting/bundle-size2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/troubleshooting/module-resolution2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/troubleshooting/monorepo2026-01-24T12:51:07.295Zdaily0.7 https://monicon-docs.vercel.app/troubleshooting/typescript2026-01-24T12:51:07.295Zdaily0.7 ================================================ FILE: apps/legacy-docs/public/sitemap.xml ================================================ https://monicon-docs.vercel.app/sitemap-0.xml ================================================ FILE: apps/legacy-docs/theme.config.tsx ================================================ import React from "react"; import { DocsThemeConfig, useConfig, useTheme } from "nextra-theme-docs"; import { useRouter } from "next/router"; const config: DocsThemeConfig = { banner: { key: "v2-release", content: ( 🎉 Monicon v2 is now available! Check out the new documentation → ), }, head() { const config = useConfig(); const { route } = useRouter(); const description = config.frontMatter.description ?? "Monicon is a icon library for Modern Frameworks"; const title = config.title + (route === "/" ? "" : " - Monicon"); return ( <> {title} ================================================ FILE: examples/nuxt-app/components/icons/feather/activity.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/feather/alert-circle.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/logos/active-campaign.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/logos/apache.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/logos/atom-icon.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/lucide/badge-check.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/lucide/cloud-download.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/mdi/account-badge-outline.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/mdi/account.vue ================================================ ================================================ FILE: examples/nuxt-app/components/icons/mdi/home.vue ================================================ ================================================ FILE: examples/nuxt-app/monicon.config.ts ================================================ import { debuggerPlugin, clean, vue } from "@monicon/core/plugins"; // import { // loadJSONCollection, // loadLocalCollection, // loadRemoteCollection, // } from "@monicon/core/loaders"; import { type MoniconConfig } from "@monicon/core"; export default { icons: [ "mdi:home", "mdi:account", "mdi:account-badge-outline", "feather:activity", "feather:alert-circle", "logos:active-campaign", "logos:atom-icon", "logos:apache", "lucide:badge-check", "lucide:cloud-download", "lucide:attachment-2", ], // collections: ["lucide"], loaders: { // local: loadLocalCollection("../../packages/icons"), // json: loadJSONCollection( // "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" // ), // remote: loadRemoteCollection({ // download: "https://api.iconify.design/lucide:cloud-download.svg", // attachment: "https://api.iconify.design/ri:attachment-2.svg", // }), }, plugins: [ clean({ patterns: ["components/icons"] }), vue({ outputPath: "components/icons" }), debuggerPlugin(), ], } satisfies MoniconConfig; ================================================ FILE: examples/nuxt-app/nuxt.config.ts ================================================ export default defineNuxtConfig({ devtools: { enabled: true }, compatibilityDate: "2024-10-05", modules: ["@monicon/nuxt"], }); ================================================ FILE: examples/nuxt-app/package.json ================================================ { "name": "@monicon/nuxt-app", "version": "0.0.0", "private": true, "type": "module", "scripts": { "build": "nuxt build", "dev": "nuxt dev --port 3001", "generate": "nuxt generate", "preview": "nuxt preview", "lint": "eslint .", "prepare": "nuxt prepare" }, "dependencies": { "@monicon/nuxt": "*" }, "devDependencies": { "@nuxt/devtools": "latest", "@nuxtjs/eslint-config-typescript": "^12.1.0", "eslint": "^8.57.0", "nuxt": "^3.13.2", "vue": "^3.4.21", "vue-router": "^4.3.0" } } ================================================ FILE: examples/nuxt-app/server/tsconfig.json ================================================ { "extends": "../.nuxt/tsconfig.server.json" } ================================================ FILE: examples/nuxt-app/tsconfig.json ================================================ { // https://nuxt.com/docs/guide/concepts/typescript "extends": "./.nuxt/tsconfig.json" } ================================================ FILE: examples/qwik-app/.eslintignore ================================================ **/*.log **/.DS_Store *. .vscode/settings.json .history .yarn bazel-* bazel-bin bazel-out bazel-qwik bazel-testlogs dist dist-dev lib lib-types etc external node_modules temp tsc-out tsdoc-metadata.json target output rollup.config.js build .cache .vscode .rollup.cache dist tsconfig.tsbuildinfo vite.config.ts *.spec.tsx *.spec.ts .netlify pnpm-lock.yaml package-lock.json yarn.lock server ================================================ FILE: examples/qwik-app/.eslintrc.cjs ================================================ module.exports = { root: true, env: { browser: true, es2021: true, node: true, }, extends: [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:qwik/recommended", ], parser: "@typescript-eslint/parser", parserOptions: { tsconfigRootDir: __dirname, project: ["./tsconfig.json"], ecmaVersion: 2021, sourceType: "module", ecmaFeatures: { jsx: true, }, }, plugins: ["@typescript-eslint"], rules: { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/no-namespace": "off", "@typescript-eslint/no-empty-function": "off", "@typescript-eslint/no-this-alias": "off", "@typescript-eslint/ban-types": "off", "@typescript-eslint/ban-ts-comment": "off", "prefer-spread": "off", "no-case-declarations": "off", "no-console": "off", "@typescript-eslint/no-unused-vars": ["error"], "@typescript-eslint/consistent-type-imports": "warn", "@typescript-eslint/no-unnecessary-condition": "warn", }, }; ================================================ FILE: examples/qwik-app/.gitignore ================================================ # Build /dist /lib /lib-types /server # Development node_modules .env *.local # Cache .cache .mf .rollup.cache tsconfig.tsbuildinfo # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* # Editor .vscode/* !.vscode/launch.json !.vscode/*.code-snippets .idea .DS_Store *.suo *.ntvs* *.njsproj *.sln *.sw? # Yarn .yarn/* !.yarn/releases ================================================ FILE: examples/qwik-app/.prettierignore ================================================ **/*.log **/.DS_Store *. .vscode/settings.json .history .yarn bazel-* bazel-bin bazel-out bazel-qwik bazel-testlogs dist dist-dev lib lib-types etc external node_modules temp tsc-out tsdoc-metadata.json target output rollup.config.js build .cache .vscode .rollup.cache tsconfig.tsbuildinfo vite.config.ts *.spec.tsx *.spec.ts .netlify pnpm-lock.yaml package-lock.json yarn.lock server ================================================ FILE: examples/qwik-app/README.md ================================================ # Qwik City App ⚡️ - [Qwik Docs](https://qwik.dev/) - [Discord](https://qwik.dev/chat) - [Qwik GitHub](https://github.com/QwikDev/qwik) - [@QwikDev](https://twitter.com/QwikDev) - [Vite](https://vitejs.dev/) --- ## Project Structure This project is using Qwik with [QwikCity](https://qwik.dev/qwikcity/overview/). QwikCity is just an extra set of tools on top of Qwik to make it easier to build a full site, including directory-based routing, layouts, and more. Inside your project, you'll see the following directory structure: ``` ├── public/ │ └── ... └── src/ ├── components/ │ └── ... └── routes/ └── ... ``` - `src/routes`: Provides the directory-based routing, which can include a hierarchy of `layout.tsx` layout files, and an `index.tsx` file as the page. Additionally, `index.ts` files are endpoints. Please see the [routing docs](https://qwik.dev/qwikcity/routing/overview/) for more info. - `src/components`: Recommended directory for components. - `public`: Any static assets, like images, can be placed in the public directory. Please see the [Vite public directory](https://vitejs.dev/guide/assets.html#the-public-directory) for more info. ## Add Integrations and deployment Use the `npm run qwik add` command to add additional integrations. Some examples of integrations includes: Cloudflare, Netlify or Express Server, and the [Static Site Generator (SSG)](https://qwik.dev/qwikcity/guides/static-site-generation/). ```shell npm run qwik add # or `yarn qwik add` ``` ## Development Development mode uses [Vite's development server](https://vitejs.dev/). The `dev` command will server-side render (SSR) the output during development. ```shell npm start # or `yarn start` ``` > Note: during dev mode, Vite may request a significant number of `.js` files. This does not represent a Qwik production build. ## Preview The preview command will create a production build of the client modules, a production build of `src/entry.preview.tsx`, and run a local server. The preview server is only for convenience to preview a production build locally and should not be used as a production server. ```shell npm run preview # or `yarn preview` ``` ## Production The production build will generate client and server modules by running both client and server build commands. The build command will use Typescript to run a type check on the source code. ```shell npm run build # or `yarn build` ``` ================================================ FILE: examples/qwik-app/monicon.config.ts ================================================ import { debuggerPlugin, qwik, clean } from "@monicon/core/plugins"; // import { // loadJSONCollection, // loadLocalCollection, // loadRemoteCollection, // } from "@monicon/core/loaders"; import { type MoniconConfig } from "@monicon/core"; export default { icons: [ "mdi:home", "mdi:account", "mdi:account-badge-outline", "feather:activity", "feather:alert-circle", "logos:active-campaign", "logos:atom-icon", "logos:apache", "lucide:badge-check", "lucide:cloud-download", "lucide:attachment-2", ], collections: [], loaders: { // local: loadLocalCollection("../../packages/icons"), // json: loadJSONCollection( // "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" // ), // remote: loadRemoteCollection({ // download: "https://api.iconify.design/lucide:cloud-download.svg", // attachment: "https://api.iconify.design/ri:attachment-2.svg", // }), }, plugins: [ clean({ patterns: ["src/components/icons"] }), qwik({ outputPath: "src/components/icons" }), debuggerPlugin(), ], } satisfies MoniconConfig; ================================================ FILE: examples/qwik-app/package.json ================================================ { "name": "@monicon/qwik-app", "version": "0.0.0", "description": "Blank project with routing included", "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "engines-annotation": "Mostly required by sharp which needs a Node-API v9 compatible runtime", "private": true, "trustedDependencies": [ "sharp" ], "trustedDependencies-annotation": "Needed for bun to allow running install scripts", "type": "module", "scripts": { "build": "qwik build", "build.client": "vite build", "build.preview": "vite build --ssr src/entry.preview.tsx", "postbuild.types": "tsc --incremental --noEmit", "deploy": "echo 'Run \"npm run qwik add\" to install a server adapter'", "dev": "vite --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", "fmt": "prettier --write .", "fmt.check": "prettier --check .", "lint": "eslint \"src/**/*.ts*\"", "preview": "qwik build preview && vite preview --open", "start": "vite --open --mode ssr", "qwik": "qwik", "clean": "rm -rf dist" }, "devDependencies": { "@builder.io/qwik": "^1.9.1", "@builder.io/qwik-city": "^1.9.1", "@types/eslint": "8.56.10", "@types/node": "20.14.11", "@typescript-eslint/eslint-plugin": "7.16.1", "@typescript-eslint/parser": "7.16.1", "eslint": "8.57.0", "eslint-plugin-qwik": "^1.9.1", "prettier": "3.3.3", "@monicon/vite": "*", "typescript": "5.4.5", "undici": "*", "vite": "^6.0.2", "vite-tsconfig-paths": "^4.2.1" } } ================================================ FILE: examples/qwik-app/public/manifest.json ================================================ { "$schema": "https://json.schemastore.org/web-manifest-combined.json", "name": "qwik-project-name", "short_name": "Welcome to Qwik", "start_url": ".", "display": "standalone", "background_color": "#fff", "description": "A Qwik project app." } ================================================ FILE: examples/qwik-app/public/robots.txt ================================================ ================================================ FILE: examples/qwik-app/qwik.env.d.ts ================================================ // This file can be used to add references for global types like `vite/client`. // Add global `vite/client` types. For more info, see: https://vitejs.dev/guide/features#client-types /// ================================================ FILE: examples/qwik-app/src/components/icons/feather/activity.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const FeatherActivityIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default FeatherActivityIcon; ================================================ FILE: examples/qwik-app/src/components/icons/feather/alert-circle.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const FeatherAlertCircleIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default FeatherAlertCircleIcon; ================================================ FILE: examples/qwik-app/src/components/icons/logos/active-campaign.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const LogosActiveCampaignIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default LogosActiveCampaignIcon; ================================================ FILE: examples/qwik-app/src/components/icons/logos/apache.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const LogosApacheIcon = component$((props: QwikIntrinsicElements["svg"]) => { return ( ); }); export default LogosApacheIcon; ================================================ FILE: examples/qwik-app/src/components/icons/logos/atom-icon.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const LogosAtomIconIcon = component$((props: QwikIntrinsicElements["svg"]) => { return ( ); }); export default LogosAtomIconIcon; ================================================ FILE: examples/qwik-app/src/components/icons/lucide/badge-check.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const LucideBadgeCheckIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default LucideBadgeCheckIcon; ================================================ FILE: examples/qwik-app/src/components/icons/lucide/cloud-download.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const LucideCloudDownloadIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default LucideCloudDownloadIcon; ================================================ FILE: examples/qwik-app/src/components/icons/mdi/account-badge-outline.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const MdiAccountBadgeOutlineIcon = component$( (props: QwikIntrinsicElements["svg"]) => { return ( ); }, ); export default MdiAccountBadgeOutlineIcon; ================================================ FILE: examples/qwik-app/src/components/icons/mdi/account.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const MdiAccountIcon = component$((props: QwikIntrinsicElements["svg"]) => { return ( ); }); export default MdiAccountIcon; ================================================ FILE: examples/qwik-app/src/components/icons/mdi/home.tsx ================================================ import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const MdiHomeIcon = component$((props: QwikIntrinsicElements["svg"]) => { return ( ); }); export default MdiHomeIcon; ================================================ FILE: examples/qwik-app/src/components/router-head/router-head.tsx ================================================ import { component$ } from "@builder.io/qwik"; import { useDocumentHead, useLocation } from "@builder.io/qwik-city"; /** * The RouterHead component is placed inside of the document `` element. */ export const RouterHead = component$(() => { const head = useDocumentHead(); const loc = useLocation(); return ( <> {head.title} {head.meta.map((m) => ( ))} {head.links.map((l) => ( ))} {head.styles.map((s) => ( ================================================ FILE: examples/svelte-app/svelte.config.js ================================================ import adapter from '@sveltejs/adapter-auto'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ const config = { // Consult https://svelte.dev/docs/kit/integrations // for more information about preprocessors preprocess: vitePreprocess(), kit: { // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. // If your environment is not supported, or you settled on a specific environment, switch out the adapter. // See https://svelte.dev/docs/kit/adapters for more information about adapters. adapter: adapter() } }; export default config; ================================================ FILE: examples/svelte-app/tsconfig.json ================================================ { "extends": "./.svelte-kit/tsconfig.json", "compilerOptions": { "allowJs": true, "checkJs": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, "strict": true, "moduleResolution": "bundler" } // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files // // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes // from the referenced tsconfig.json - TypeScript does not merge them in } ================================================ FILE: examples/svelte-app/vite.config.ts ================================================ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; import { monicon } from '@monicon/vite'; export default defineConfig({ plugins: [sveltekit(), monicon()] }); ================================================ FILE: examples/vite-react/.gitignore ================================================ # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* node_modules dist dist-ssr *.local # Editor directories and files .vscode/* !.vscode/extensions.json .idea .DS_Store *.suo *.ntvs* *.njsproj *.sln *.sw? ================================================ FILE: examples/vite-react/README.md ================================================ # React + TypeScript + Vite This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. Currently, two official plugins are available: - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh ## Expanding the ESLint configuration If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: - Configure the top-level `parserOptions` property like this: ```js export default tseslint.config({ languageOptions: { // other options... parserOptions: { project: ['./tsconfig.node.json', './tsconfig.app.json'], tsconfigRootDir: import.meta.dirname, }, }, }) ``` - Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` - Optionally add `...tseslint.configs.stylisticTypeChecked` - Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: ```js // eslint.config.js import react from 'eslint-plugin-react' export default tseslint.config({ // Set the react version settings: { react: { version: '18.3' } }, plugins: { // Add the react plugin react, }, rules: { // other rules... // Enable its recommended rules ...react.configs.recommended.rules, ...react.configs['jsx-runtime'].rules, }, }) ``` ================================================ FILE: examples/vite-react/eslint.config.js ================================================ import js from '@eslint/js' import globals from 'globals' import reactHooks from 'eslint-plugin-react-hooks' import reactRefresh from 'eslint-plugin-react-refresh' import tseslint from 'typescript-eslint' export default tseslint.config( { ignores: ['dist'] }, { extends: [js.configs.recommended, ...tseslint.configs.recommended], files: ['**/*.{ts,tsx}'], languageOptions: { ecmaVersion: 2020, globals: globals.browser, }, plugins: { 'react-hooks': reactHooks, 'react-refresh': reactRefresh, }, rules: { ...reactHooks.configs.recommended.rules, 'react-refresh/only-export-components': [ 'warn', { allowConstantExport: true }, ], }, }, ) ================================================ FILE: examples/vite-react/index.html ================================================ Vite + React + TS
================================================ FILE: examples/vite-react/monicon.config.ts ================================================ import { debuggerPlugin, react, clean } from "@monicon/core/plugins"; // import { // loadJSONCollection, // loadLocalCollection, // loadRemoteCollection, // } from "@monicon/core/loaders"; import { MoniconConfig } from "@monicon/core"; export default { icons: [ "mdi:home", "mdi:account", "mdi:account-badge-outline", "feather:activity", "feather:alert-circle", "logos:active-campaign", "logos:atom-icon", "logos:apache", "lucide:badge-check", "lucide:cloud-download", "lucide:attachment-2", "material-symbols:10k" ], // collections: ["lucide"], loaders: { // local: loadLocalCollection("../../packages/icons"), // json: loadJSONCollection( // "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" // ), // remote: loadRemoteCollection({ // download: "https://api.iconify.design/lucide:cloud-download.svg", // attachment: "https://api.iconify.design/ri:attachment-2.svg", // }), }, plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), debuggerPlugin(), ], } satisfies MoniconConfig; ================================================ FILE: examples/vite-react/package.json ================================================ { "name": "@monicon/vite-react", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vite build", "lint": "eslint .", "preview": "vite preview", "test": "vitest" }, "dependencies": { "@monicon/core": "*", "@tailwindcss/vite": "^4.1.7", "react": "^18.3.1", "react-dom": "^18.3.1", "tailwindcss": "^4.1.7" }, "devDependencies": { "@eslint/js": "^9.9.0", "@monicon/vite": "*", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.1", "eslint": "^9.9.0", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.9", "globals": "^15.9.0", "jsdom": "^25.0.1", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", "vite": "^6.0.2", "vitest": "^2.1.8" } } ================================================ FILE: examples/vite-react/src/App.tsx ================================================ import LogosActiveCampaignIcon from "./components/icons/logos/active-campaign"; import LogosAtomIconIcon from "./components/icons/logos/atom-icon"; import LucideBadgeCheckIcon from "./components/icons/lucide/badge-check"; import LucideCloudDownloadIcon from "./components/icons/lucide/cloud-download"; import MdiAccountIcon from "./components/icons/mdi/account"; import MdiHomeIcon from "./components/icons/mdi/home"; function App() { return (
); } export default App; ================================================ FILE: examples/vite-react/src/__tests__/App.test.tsx ================================================ import { describe, it, expect } from "vitest"; import { render } from "@testing-library/react"; import App from "../App"; describe("App", () => { it("should mount the App component", () => { const { container } = render(); expect(container.querySelectorAll("svg")).toHaveLength(4); }); }); ================================================ FILE: examples/vite-react/src/__tests__/setup.ts ================================================ import "@testing-library/jest-dom"; import { cleanup } from "@testing-library/react"; import { afterEach } from "vitest"; afterEach(() => { cleanup(); }); ================================================ FILE: examples/vite-react/src/components/icons/feather/activity.tsx ================================================ import React from "react"; const FeatherActivityIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default FeatherActivityIcon; ================================================ FILE: examples/vite-react/src/components/icons/feather/alert-circle.tsx ================================================ import React from "react"; const FeatherAlertCircleIcon = ( props: React.ComponentPropsWithoutRef<"svg">, ) => { return ( ); }; export default FeatherAlertCircleIcon; ================================================ FILE: examples/vite-react/src/components/icons/logos/active-campaign.tsx ================================================ import React from "react"; const LogosActiveCampaignIcon = ( props: React.ComponentPropsWithoutRef<"svg">, ) => { return ( ); }; export default LogosActiveCampaignIcon; ================================================ FILE: examples/vite-react/src/components/icons/logos/apache.tsx ================================================ import React from "react"; const LogosApacheIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default LogosApacheIcon; ================================================ FILE: examples/vite-react/src/components/icons/logos/atom-icon.tsx ================================================ import React from "react"; const LogosAtomIconIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default LogosAtomIconIcon; ================================================ FILE: examples/vite-react/src/components/icons/lucide/badge-check.tsx ================================================ import React from "react"; const LucideBadgeCheckIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default LucideBadgeCheckIcon; ================================================ FILE: examples/vite-react/src/components/icons/lucide/cloud-download.tsx ================================================ import React from "react"; const LucideCloudDownloadIcon = ( props: React.ComponentPropsWithoutRef<"svg">, ) => { return ( ); }; export default LucideCloudDownloadIcon; ================================================ FILE: examples/vite-react/src/components/icons/material-symbols/10k.tsx ================================================ import React from "react"; const MaterialSymbols10kIcon = ( props: React.ComponentPropsWithoutRef<"svg">, ) => { return ( ); }; export default MaterialSymbols10kIcon; ================================================ FILE: examples/vite-react/src/components/icons/mdi/account-badge-outline.tsx ================================================ import React from "react"; const MdiAccountBadgeOutlineIcon = ( props: React.ComponentPropsWithoutRef<"svg">, ) => { return ( ); }; export default MdiAccountBadgeOutlineIcon; ================================================ FILE: examples/vite-react/src/components/icons/mdi/account.tsx ================================================ import React from "react"; const MdiAccountIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default MdiAccountIcon; ================================================ FILE: examples/vite-react/src/components/icons/mdi/home.tsx ================================================ import React from "react"; const MdiHomeIcon = (props: React.ComponentPropsWithoutRef<"svg">) => { return ( ); }; export default MdiHomeIcon; ================================================ FILE: examples/vite-react/src/index.css ================================================ @import "tailwindcss"; ================================================ FILE: examples/vite-react/src/main.tsx ================================================ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' createRoot(document.getElementById('root')!).render( , ) ================================================ FILE: examples/vite-react/src/vite-env.d.ts ================================================ /// ================================================ FILE: examples/vite-react/tsconfig.app.json ================================================ { "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, "jsx": "react-jsx", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "include": ["src", ".monicon/*.d.ts"] } ================================================ FILE: examples/vite-react/tsconfig.app.tsbuildinfo ================================================ {"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/__tests__/app.test.tsx","./src/__tests__/setup.ts"],"errors":true,"version":"5.6.2"} ================================================ FILE: examples/vite-react/tsconfig.json ================================================ { "files": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" } ] } ================================================ FILE: examples/vite-react/tsconfig.node.json ================================================ { "compilerOptions": { "target": "ES2022", "lib": ["ES2023"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "include": ["vite.config.ts"] } ================================================ FILE: examples/vite-react/tsconfig.node.tsbuildinfo ================================================ {"root":["./vite.config.ts"],"version":"5.6.2"} ================================================ FILE: examples/vite-react/vite.config.ts ================================================ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import monicon from "@monicon/vite"; import tailwindcss from "@tailwindcss/vite"; export default defineConfig({ plugins: [react(), tailwindcss(), monicon()], }); ================================================ FILE: examples/vite-react/vitest.config.ts ================================================ import { mergeConfig } from "vitest/config"; import viteConfig from "./vite.config"; export default mergeConfig(viteConfig, { test: { globals: true, environment: "jsdom", setupFiles: ["./src/__tests__/setup.ts"], include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], }, }); ================================================ FILE: examples/vite-vue/.gitignore ================================================ # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* node_modules dist dist-ssr *.local # Editor directories and files .vscode/* !.vscode/extensions.json .idea .DS_Store *.suo *.ntvs* *.njsproj *.sln *.sw? ================================================ FILE: examples/vite-vue/.vscode/extensions.json ================================================ { "recommendations": ["Vue.volar"] } ================================================ FILE: examples/vite-vue/README.md ================================================ # Vue 3 + TypeScript + Vite This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` ================================================ FILE: examples/vite-vue/monicon.config.ts ================================================ import { vue, debuggerPlugin } from "@monicon/core/plugins"; import { loadJSONCollection, loadLocalCollection, loadRemoteCollection, } from "@monicon/core/loaders"; import { MoniconConfig } from "@monicon/core"; export default { icons: [ "mdi:home", "mdi:account", "mdi:account-badge-outline", "feather:activity", "feather:alert-circle", "lucide:badge-check", "lucide:cloud-download", "lucide:attachment-2", ], // collections: ["lucide"], loaders: { local: loadLocalCollection("../../packages/icons"), json: loadJSONCollection( "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" ), remote: loadRemoteCollection({ download: "https://api.iconify.design/lucide:cloud-download.svg", attachment: "https://api.iconify.design/ri:attachment-2.svg", }), }, plugins: [vue(), debuggerPlugin()], } satisfies MoniconConfig; ================================================ FILE: examples/vite-vue/package.json ================================================ { "name": "@monicon/vite-vue", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vite build && vue-tsc -b", "preview": "vite preview", "test": "vitest" }, "dependencies": { "vue": "^3.5.10" }, "devDependencies": { "@vitejs/plugin-vue": "^5.1.4", "@vitest/coverage-v8": "^2.1.8", "@vitest/ui": "^2.1.8", "@vue/test-utils": "^2.4.6", "jsdom": "^25.0.1", "typescript": "^5.5.3", "vite": "^6.0.2", "vitest": "^2.1.8", "vue-tsc": "^2.1.6", "@monicon/vite": "*" } } ================================================ FILE: examples/vite-vue/src/App.vue ================================================ ================================================ FILE: examples/vite-vue/src/__tests__/App.test.ts ================================================ import { describe, it, expect } from "vitest"; import { mount } from "@vue/test-utils"; import App from "../App.vue"; describe("App", () => { it("should mount the App component", () => { const wrapper = mount(App); expect(wrapper.findAll("svg")).toHaveLength(4); }); }); ================================================ FILE: examples/vite-vue/src/components/icons/feather/activity.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/feather/alert-circle.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/json/network.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/local/folder.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/local/nested-folder.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/lucide/badge-check.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/lucide/cloud-download.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/mdi/account-badge-outline.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/mdi/account.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/mdi/home.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/remote/attachment.vue ================================================ ================================================ FILE: examples/vite-vue/src/components/icons/remote/download.vue ================================================ ================================================ FILE: examples/vite-vue/src/main.ts ================================================ import { createApp } from "vue"; import App from "./App.vue"; import "./style.css"; const app = createApp(App); app.mount("#app"); ================================================ FILE: examples/vite-vue/src/style.css ================================================ :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; font-weight: 400; color-scheme: light dark; color: rgba(255, 255, 255, 0.87); background-color: #242424; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a { font-weight: 500; color: #646cff; text-decoration: inherit; } a:hover { color: #535bf2; } body { margin: 0; display: flex; place-items: center; min-width: 320px; min-height: 100vh; } h1 { font-size: 3.2em; line-height: 1.1; } button { border-radius: 8px; border: 1px solid transparent; padding: 0.6em 1.2em; font-size: 1em; font-weight: 500; font-family: inherit; background-color: #1a1a1a; cursor: pointer; transition: border-color 0.25s; } button:hover { border-color: #646cff; } button:focus, button:focus-visible { outline: 4px auto -webkit-focus-ring-color; } .card { padding: 2em; } #app { max-width: 1280px; margin: 0 auto; padding: 2rem; text-align: center; } @media (prefers-color-scheme: light) { :root { color: #213547; background-color: #ffffff; } a:hover { color: #747bff; } button { background-color: #f9f9f9; } } ================================================ FILE: examples/vite-vue/src/vite-env.d.ts ================================================ /// ================================================ FILE: examples/vite-vue/tsconfig.app.json ================================================ { "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, "module": "ESNext", "lib": ["ES2020", "DOM", "DOM.Iterable"], "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, "jsx": "preserve", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] } ================================================ FILE: examples/vite-vue/tsconfig.app.tsbuildinfo ================================================ {"root":["./src/main.ts","./src/vite-env.d.ts","./src/__tests__/app.test.ts","./src/app.vue","./src/components/icons/feather/activity.vue","./src/components/icons/feather/alert-circle.vue","./src/components/icons/json/network.vue","./src/components/icons/local/folder.vue","./src/components/icons/local/nested-folder.vue","./src/components/icons/lucide/badge-check.vue","./src/components/icons/lucide/cloud-download.vue","./src/components/icons/mdi/account-badge-outline.vue","./src/components/icons/mdi/account.vue","./src/components/icons/mdi/home.vue","./src/components/icons/remote/attachment.vue","./src/components/icons/remote/download.vue"],"version":"5.6.2"} ================================================ FILE: examples/vite-vue/tsconfig.json ================================================ { "files": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" } ] } ================================================ FILE: examples/vite-vue/tsconfig.node.json ================================================ { "compilerOptions": { "target": "ES2022", "lib": ["ES2023"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "include": ["vite.config.ts"] } ================================================ FILE: examples/vite-vue/tsconfig.node.tsbuildinfo ================================================ {"root":["./vite.config.ts"],"version":"5.6.2"} ================================================ FILE: examples/vite-vue/vite.config.ts ================================================ import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import monicon from "@monicon/vite"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), monicon()], }); ================================================ FILE: examples/vite-vue/vitest.config.ts ================================================ import { configDefaults, mergeConfig } from "vitest/config"; import viteConfig from "./vite.config"; export default mergeConfig(viteConfig, { test: { globals: true, environment: "jsdom", exclude: [...configDefaults.exclude, "e2e/**"], coverage: { provider: "v8", reporter: ["text", "json", "html"], }, }, }); ================================================ FILE: lefthook.yml ================================================ # EXAMPLE USAGE: # # Refer for explanation to following link: # https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md # # pre-push: # commands: # packages-audit: # tags: frontend security # run: yarn audit # gems-audit: # tags: backend security # run: bundle audit # # pre-commit: # parallel: true # commands: # eslint: # glob: "*.{js,ts,jsx,tsx}" # run: yarn eslint {staged_files} # rubocop: # tags: backend style # glob: "*.rb" # exclude: '(^|/)(application|routes)\.rb$' # run: bundle exec rubocop --force-exclusion {all_files} # govet: # tags: backend style # files: git ls-files -m # glob: "*.go" # run: go vet {files} # scripts: # "hello.js": # runner: node # "any.go": # runner: go run ================================================ FILE: package.json ================================================ { "name": "monicon", "private": true, "workspaces": [ "packages/*", "examples/*", "apps/*" ], "files": [], "scripts": { "dev": "turbo run dev", "build": "turbo run build", "build:pkgs": "turbo run build --filter='./packages/*'", "build:examples": "turbo run build --filter='./examples/*'", "clean": "turbo run clean", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\" --ignore-path .gitignore", "changeset": "changeset", "bump": "changeset version", "release": "yarn build:pkgs && changeset publish", "sync": "syncpack fix-mismatches" }, "devDependencies": { "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.9", "prettier": "^3.3.3", "turbo": "2.1.3" }, "packageManager": "yarn@1.22.19", "engines": { "node": ">=20" }, "dependencies": { "syncpack": "^13.0.0" } } ================================================ FILE: packages/cli/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo # monicon .monicon local ================================================ FILE: packages/cli/CHANGELOG.md ================================================ # @monicon/cli ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 - @monicon/typescript-config@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 - @monicon/typescript-config@2.0.0 ================================================ FILE: packages/cli/monicon.config.ts ================================================ import { debuggerPlugin, react, clean } from "@monicon/core/plugins"; import { type MoniconConfig } from "@monicon/core"; export default { icons: [ "mdi:home", "mdi:account", "mdi:account-badge-outline", "feather:activity", "feather:alert-circle", "logos:active-campaign", "logos:atom-icon", "logos:apache", "lucide:badge-check", "lucide:cloud-download", "lucide:attachment-2", ], plugins: [ clean({ patterns: ["src/components/icons"] }), react({ outputPath: "src/components/icons" }), debuggerPlugin(), ], watch: true, } satisfies MoniconConfig; ================================================ FILE: packages/cli/package.json ================================================ { "name": "@monicon/cli", "version": "2.0.8", "main": "./dist/index.cjs", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "bin": { "monicon": "./dist/index.cjs" }, "exports": { ".": { "require": "./dist/index.cjs", "import": "./dist/index.mjs", "types": "./dist/index.d.ts", "default": "./dist/index.mjs" }, "./*": { "require": "./dist/*/index.cjs", "import": "./dist/*/index.mjs", "types": "./dist/*/index.d.ts" } }, "typesVersions": { "*": { "*": [ "./dist/*/index.d.ts", "./dist/index.d.ts" ] } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "start": "tsx src/index.ts", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "tsup": "^8.0.1", "typescript": "^5.3.3", "prettier": "^3.5.3", "@monicon/typescript-config": "*" }, "dependencies": { "@monicon/core": "*", "cac": "^6.7.14" } } ================================================ FILE: packages/cli/src/index.ts ================================================ #!/usr/bin/env node import pkg from "../package.json" assert { type: "json" }; import cac from "cac"; import { bootstrap } from "@monicon/core"; import { loadConfigFile } from "@monicon/core/utils"; const cli = cac("monicon"); cli.command("").action(() => cli.outputHelp()); cli .command("generate", "Generate icons") .option("-w, --watch", "Watch for changes") .action(async (options) => { const config = await loadConfigFile(); if (!config.config) { console.error( "[Monicon] No config file found, please create a config file (monicon.config.ts). See https://monicon.dev/docs/configuration for more information." ); process.exit(1); } await bootstrap({ watch: false, ...config.config, ...options, }); }); cli.version(pkg.version); cli.help(); cli.parse(); ================================================ FILE: packages/cli/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext" } } ================================================ FILE: packages/cli/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: ["src/index.ts"], clean: true, format: ["cjs", "esm"], dts: true, minify: false, outDir: "dist/", sourcemap: false, bundle: true, splitting: false, outExtension(ctx) { return { dts: ".d.ts", js: ctx.format === "cjs" ? ".cjs" : ".mjs", }; }, treeshake: false, target: "es6", platform: "node", tsconfig: "./tsconfig.json", cjsInterop: true, keepNames: true, skipNodeModulesBundle: false, ...options, })); ================================================ FILE: packages/core/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo # monicon .monicon local ================================================ FILE: packages/core/CHANGELOG.md ================================================ # @monicon/core ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ================================================ FILE: packages/core/monicon.config.ts ================================================ import type { MoniconConfig } from "@monicon/core"; // import { // loadJSONCollection, // loadLocalCollection, // loadRemoteCollection, // } from "@monicon/core/loaders"; import { debuggerPlugin, react, vue, svg, clean } from "@monicon/core/plugins"; export default { icons: ["ic:baseline-chat", "mdi:home"], // collections: ["ei", "fad"], plugins: [ clean({ patterns: ["src/components/icons"] }), svg(), react(), vue(), debuggerPlugin(), ], // loaders: { // local: loadLocalCollection("local"), // json: loadJSONCollection( // "https://gist.githubusercontent.com/oktaysenkan/39681ecdb066dc44c52fa840dacc7562/raw/6aa7b8f8bf9d806742be0e1c4759809391d00bcd/icons.json" // ), // remote: loadRemoteCollection({ // download: "https://api.iconify.design/lucide:cloud-download.svg", // attachment: "https://api.iconify.design/ri:attachment-2.svg", // }), // }, watch: true, } satisfies MoniconConfig; ================================================ FILE: packages/core/package.json ================================================ { "name": "@monicon/core", "version": "2.0.8", "main": "./dist/index.cjs", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { "require": "./dist/index.cjs", "import": "./dist/index.mjs", "types": "./dist/index.d.ts", "default": "./dist/index.mjs" }, "./*": { "require": "./dist/*/index.cjs", "import": "./dist/*/index.mjs", "types": "./dist/*/index.d.ts" } }, "typesVersions": { "*": { "*": [ "./dist/*/index.d.ts", "./dist/index.d.ts" ] } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@iconify/json": "^2.2.251", "@iconify/types": "^2.0.0", "@monicon/typescript-config": "*", "@types/jsdom": "^21.1.7", "@types/lodash": "^4.17.14", "@types/pascalcase": "^1.0.3", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@iconify/utils": "^2.1.33", "change-case-all": "^2.1.0", "chokidar": "^4.0.3", "cosmiconfig": "^9.0.0", "deepmerge": "^4.3.1", "eta": "^3.5.0", "fuuu": "^0.0.8", "glob": "^11.0.2", "html-to-jsx-transform": "^1.2.0", "jsdom": "^26.0.0", "lodash": "^4.17.21", "pascalcase": "^2.0.0", "prettier": "^3.5.3", "radashi": "^12.7.1", "svgson": "^5.3.1" } } ================================================ FILE: packages/core/src/index.ts ================================================ import _ from "lodash"; import merge from "deepmerge"; export * from "./types"; import { MoniconPluginContext, MoniconPluginFunction } from "./plugins"; import type { MoniconConfig } from "./types"; import { loadConfigFile, watchConfigFile } from "./utils/config-loader"; import { writeFiles } from "./utils/file-system"; import { generateIcons } from "./utils/icon-processor"; import { loadPlugins, runPlugins } from "./utils/plugin-loader"; /** * Prepare the icon files * @param config - The config * @param configModified - Whether the config has been modified */ const prepareIconFiles = async ( config: Required, context: MoniconPluginContext ) => { const icons = await generateIcons(config); const plugins = await loadPlugins(config, context, icons); const files = await runPlugins(plugins, context, icons); await Promise.all( plugins.map(async (plugin) => plugin.beforeWriteFiles?.({ ...context, files }) ) ); await writeFiles(files); await Promise.all( plugins.map(async (plugin) => plugin.afterWriteFiles?.({ ...context, files }) ) ); }; const resolvePlugins = (plugins: MoniconPluginFunction[]) => { const resolvedPlugins = new Map(); plugins.forEach((plugin) => { const pluginInstance = plugin({ icons: [] }); resolvedPlugins.set(pluginInstance.name, plugin); }); return Array.from(resolvedPlugins.values()); }; /** * Bootstrap the icon generator * @param options - The options */ export const bootstrap = async (options?: MoniconConfig) => { const defaultConfig: Required = { icons: [], watch: true, plugins: [], loaders: {}, collections: [], }; const loadedConfig = await loadConfigFile(); const config = merge.all>([ defaultConfig, loadedConfig?.config ?? {}, options ?? {}, ]); config.plugins = resolvePlugins(config.plugins); console.log("[Monicon] Starting icon generation..."); if (config.watch) console.log("[Monicon] Watching for config changes..."); await prepareIconFiles(config, { configFilePath: loadedConfig.filepath, configUpdated: false, }); if (config.watch) { watchConfigFile({ onUpdate: async (newConfig) => { console.log("[Monicon] Config updated, re-generating icons..."); await prepareIconFiles( { ...defaultConfig, ...newConfig }, { configFilePath: loadedConfig.filepath, configUpdated: true, } ); }, }); } }; ================================================ FILE: packages/core/src/loaders/index.ts ================================================ export { loadJSONCollection, type JSONCollectionLoaderOptions, } from "./json-collection"; export { loadLocalCollection, type LocalCollectionLoaderOptions, } from "./local-collection"; export { loadRemoteCollection, type RemoteCollectionLoaderOptions, } from "./remote-collection"; export { type Content, type Loader, type LoaderResult } from "./types"; export { isValidSvg } from "./utils"; ================================================ FILE: packages/core/src/loaders/json-collection.ts ================================================ import * as f from "fuuu"; import { Loader, LoaderResult } from "./types"; import { isValidSvg } from "./utils"; export type JSONCollectionLoaderOptions = | string | { url: string; options?: RequestInit; }; export const loadJSONCollection: Loader = (input) => async () => { const url = typeof input === "string" ? input : input.url; const options = typeof input === "string" ? undefined : input.options; const response = await f.safe(() => fetch(url, options)); if (response.error) { console.warn(`[Monicon] Request to "${url}" failed.`); return {}; } const content = await f.safe(() => response.data.json()); if (content.error) { console.warn(`[Monicon] Unable to parse response from "${url}".`); return {}; } Object.entries(content.data).forEach(([key, value]) => { if (!isValidSvg(value)) { console.warn( `[Monicon] The response from "${url}" is not a valid SVG.` ); delete content.data[key]; } }); return content.data satisfies LoaderResult; }; ================================================ FILE: packages/core/src/loaders/local-collection.ts ================================================ import * as f from "fuuu"; import { glob } from "glob"; import path from "path"; import * as _ from "radashi"; import slugify from "slugify"; import * as fs from "fs"; import { Content, Loader, LoaderResult } from "./types"; import { isValidSvg } from "./utils"; slugify.extend({ "/": "-" }); export type LocalCollectionLoaderOptions = | string | { directory: string; }; export const loadLocalCollection: Loader = (input) => () => { const directory = typeof input === "string" ? input : input.directory; if (!directory) throw new Error("directory is required"); const directoryAbsolutePath = path.resolve(directory); const filePaths = glob.sync(`${directory}/**/*.svg`); if (!filePaths.length) { console.warn( `[Monicon] No files were found in the directory "${directory}".` ); } const files = filePaths.map((filePath) => { const content = f.syncSafe(() => fs.readFileSync(filePath, "utf-8")); if (content.error) { console.warn( `[Monicon] The file "${filePath}" was not found. This file might not exist, or the required icon file might not be in the correct format.` ); return; } if (!isValidSvg(content.data)) { console.warn(`[Monicon] The file "${filePath}" is not a valid SVG.`); return; } const fileAbsolutePath = path.resolve(filePath); const relativePath = fileAbsolutePath.replace( `${directoryAbsolutePath}/`, "" ); const fileNameWithoutExtension = relativePath.slice(0, -4).trim(); const slugified = slugify(fileNameWithoutExtension, { lower: true }); return { name: slugified, content: content.data } as Content; }); const filesFiltered = files.filter((item) => !!item) as Content[]; const asObject = _.objectify( filesFiltered, (item) => item.name, (item) => item.content ); return asObject satisfies LoaderResult; }; ================================================ FILE: packages/core/src/loaders/remote-collection.ts ================================================ import * as f from "fuuu"; import * as _ from "radashi"; import { Content, Loader, LoaderResult } from "./types"; import { isValidSvg } from "./utils"; export type RemoteCollectionLoaderOptions = Record< string, | string | { url: string; options?: RequestInit; } >; export const loadRemoteCollection: Loader = (input) => async () => { const asArray = await Promise.all( Object.entries(input).map(async ([key, value]) => { const url = typeof value === "string" ? value : value.url; const options = typeof value === "string" ? undefined : value.options; const response = await f.safe(() => fetch(url, options)); if (response.error) { console.warn(`[Monicon] Request to "${url}" failed.`); return; } const content = await f.safe(() => response.data.text()); if (content.error) { console.warn(`[Monicon] Unable to parse response from "${url}".`); return; } if (!isValidSvg(content.data)) { console.warn( `[Monicon] The response from "${url}" is not a valid SVG.` ); return; } return { name: key, content: content.data } as Content; }) ); const asArrayFiltered = asArray.filter((item) => !!item) as Content[]; const asObject = _.objectify( asArrayFiltered, (item) => item.name, (item) => item.content ); return asObject satisfies LoaderResult; }; ================================================ FILE: packages/core/src/loaders/types.ts ================================================ import * as _ from "radashi"; export type LoaderResult = Record; export type Loader = ( input: T ) => () => Promise | LoaderResult; export type Content = { name: string; content: string; }; ================================================ FILE: packages/core/src/loaders/utils.ts ================================================ import * as _ from "radashi"; import * as f from "fuuu"; import { parseSync } from "svgson"; export const isValidSvg = (svg: string) => { const parsed = f.syncSafe(() => parseSync(svg)); return !parsed.error; }; ================================================ FILE: packages/core/src/plugins/clean/glob.ts ================================================ import { glob } from "glob"; export default glob; ================================================ FILE: packages/core/src/plugins/clean/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/clean/plugin.ts ================================================ import fs from "fs"; import glob from "./glob"; import type { MoniconPlugin } from "../types"; export type CleanOptions = { patterns: string[]; enabled?: boolean; }; /** * Clean plugin to remove files and directories before generating new icons * @param options - The options for the plugin */ export const clean: MoniconPlugin = (options) => { return () => ({ name: "clean", generate: async () => { return []; }, beforeWriteFiles: async () => { const enabled = options.enabled ?? true; if (!enabled) return; const files = options.patterns.flatMap((pattern) => glob.sync(pattern)); files.forEach((path) => { const isExists = fs.existsSync(path); if (!isExists) return; const isDirectory = fs.lstatSync(path).isDirectory(); isDirectory ? fs.rmSync(path, { recursive: true, force: true }) : fs.unlinkSync(path); }); }, }); }; ================================================ FILE: packages/core/src/plugins/debugger/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/debugger/plugin.ts ================================================ import { MoniconPlugin } from "../types"; export type DebuggerPluginOptions = { enabled?: boolean; } | void; /** * Debugger plugin to log the icons and files * @param options - The options for the plugin */ export const debuggerPlugin: MoniconPlugin = (options) => () => { return { name: "monicon-debugger-plugin", generate: () => [], onPluginsLoad: (context) => { const enabled = options?.enabled ?? true; if (!enabled) return; console.log( `[Monicon - Debugger Plugin] On plugins load ${context.plugins.length} plugins` ); }, beforeGenerate: (context) => { const enabled = options?.enabled ?? true; if (!enabled) return; console.log( `[Monicon - Debugger Plugin] Before generate ${context.icons.length} icons` ); }, afterGenerate: (context) => { const enabled = options?.enabled ?? true; if (!enabled) return; console.log( `[Monicon - Debugger Plugin] After generate ${context.icons.length} icons` ); }, beforeWriteFiles: (context) => { const enabled = options?.enabled ?? true; if (!enabled) return; console.log( `[Monicon - Debugger Plugin] Before write files ${context.files.length} files` ); }, afterWriteFiles: (context) => { const enabled = options?.enabled ?? true; if (!enabled) return; console.log( `[Monicon - Debugger Plugin] After write files ${context.files.length} files` ); }, }; }; ================================================ FILE: packages/core/src/plugins/generic/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/generic/plugin.ts ================================================ import path from "path"; import slugify from "slugify"; import type { Icon } from "../../types"; import { MoniconPlugin, MoniconPluginFile, MoniconPluginInstance, } from "../types"; slugify.extend({ ":": "/" }); export type FileCreationOptions = { outputPath?: ((icon: Icon) => string | undefined) | string; fileName?: ((icon: Icon) => string | undefined) | string; extension?: ((icon: Icon) => string | undefined) | string; content?: ((icon: Icon) => string | Promise) | string }; type HasRequiredKey = {} extends T ? false : true; type NormalizeOptions = HasRequiredKey extends true ? T : T | void; export type GenericPluginOptions = NormalizeOptions< Partial & FileCreationOptions & T >; /** * Get the file name for the icon * @param icon - The icon to get the file name for * @param options - The options for the plugin * @returns The file name for the icon */ const getFileName = (icon: Icon, options: GenericPluginOptions) => { const defaultFileName = slugify(icon.name, { lower: true, remove: /:/g }); const fileName = typeof options?.fileName === "function" ? (options.fileName(icon) ?? defaultFileName) : (options?.fileName ?? defaultFileName); const extension = typeof options?.extension === "function" ? (options.extension(icon) ?? "svg") : (options?.extension ?? "svg"); return `${fileName}.${extension}`; }; /** * Get the output path for the icon * @param icon - The icon to get the output path for * @param options - The options for the plugin * @returns The output path for the icon */ const getOutputPath = (icon: Icon, options: GenericPluginOptions) => { const defaultOutputPath = "src/components/icons"; if (!options?.outputPath) { return defaultOutputPath; } return typeof options.outputPath === "function" ? (options.outputPath(icon) ?? defaultOutputPath) : (options.outputPath ?? defaultOutputPath); }; /** * Generate icon files * @param icons - The icons to generate * @param outputPath - The path to output the icons to */ const generateIconFiles = async (icons: Icon[], options: GenericPluginOptions) => { const results = await Promise.allSettled(icons.map(async (icon) => { const fileName = getFileName(icon, options); if (!fileName) return; const outputPath = getOutputPath(icon, options); if (!outputPath) return; const content = typeof options?.content === "function" ? (await options?.content(icon)) ?? "" : options?.content; if (!content) { console.warn( `[Monicon] - No content found for icon "${icon.name}" in "${options?.name}" plugin` ); return; } const filePath = path.join(outputPath, fileName); const file: MoniconPluginFile = { path: path.resolve(filePath), content: content, }; return file; })); const rejected = results.filter((result) => result.status === "rejected") as PromiseRejectedResult[]; if (rejected.length > 0) { console.warn( `[Monicon] - Failed to generate ${rejected.length} icons for "${options?.name}" plugin: ${rejected.map((result) => result.reason).join(", ")}` ); } const files = results.filter((result) => result.status === "fulfilled") as PromiseFulfilledResult[]; return files.map((result) => result.value ?? ""); }; /** * SVG plugin to generate icon files * @param options - The options for the plugin */ export const generic: MoniconPlugin = (options) => (payload) => { return { name: options?.name ?? "monicon-generic-plugin", async generate() { return generateIconFiles(payload.icons, this); }, ...options, }; }; ================================================ FILE: packages/core/src/plugins/index.ts ================================================ export * from "./react"; export * from "./svelte"; export * from "./native"; export * from "./qwik"; export * from "./vue"; export * from "./svg"; export * from "./debugger"; export * from "./clean"; export * from "./types"; export * from "./generic"; ================================================ FILE: packages/core/src/plugins/native/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/native/plugin.ts ================================================ import { Eta } from "eta"; import * as prettier from "prettier"; import { MoniconPlugin } from "../types"; import templates from "./templates"; import { generic, GenericPluginOptions } from "../generic"; import { ComponentNameOptions, getComponentName } from "../../utils/name"; export type ReactNativePluginOptionsInternal = ComponentNameOptions & { format?: "jsx" | "tsx"; } export type ReactNativePluginOptions = GenericPluginOptions; /** * React Native plugin to generate icon files * @param options - The options for the plugin */ export const reactNative: MoniconPlugin = (_options) => generic({ name: "monicon-react-native-plugin", extension: _options?.format ?? "tsx", content: async (icon) => { const options: ReactNativePluginOptions = { suffix: "Icon", ..._options, }; const eta = new Eta({ autoEscape: false }); const componentName = getComponentName(icon, options); const fileFormat = options?.format ?? "tsx"; const templateContent = templates[fileFormat]; const fileContent = eta.renderString(templateContent, { name: componentName, code: icon.svg, format: fileFormat, height: icon.height, width: icon.width, }); const formattedCode = await prettier.format(fileContent, { parser: fileFormat === "tsx" ? "typescript" : "babel", }); return formattedCode; }, ..._options, }); ================================================ FILE: packages/core/src/plugins/native/templates.ts ================================================ const tsxTemplate = `import React from "react"; import { SvgXml, type SvgProps } from "react-native-svg"; const <%= it.name %> = (props: Omit) => { const xml = \`<%= it.code %>\`; return ; }; export default <%= it.name %>;`; const jsxTemplate = `import React from "react"; import { SvgXml } from "react-native-svg"; const <%= it.name %> = (props) => { const xml = \`<%= it.code %>\`; return ; }; export default <%= it.name %>;`; const templates = { tsx: tsxTemplate, jsx: jsxTemplate, }; export default templates; ================================================ FILE: packages/core/src/plugins/qwik/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/qwik/plugin.ts ================================================ import { Eta } from "eta"; import * as prettier from "prettier"; import { MoniconPlugin } from "../types"; import template from "./template"; import { generic, GenericPluginOptions } from "../generic"; import { ComponentNameOptions, getComponentName } from "../../utils/name"; export type QwikPluginOptionsInternal = ComponentNameOptions export type QwikPluginOptions = GenericPluginOptions; /** * Qwik plugin to generate icon files * @param options - The options for the plugin */ export const qwik: MoniconPlugin = (_options) => generic({ name: "monicon-qwik-plugin", extension: "tsx", content: async (icon) => { const options: QwikPluginOptions = { suffix: "Icon", ..._options, }; const eta = new Eta({ autoEscape: false }); const componentName = getComponentName(icon, options); const fileContent = eta.renderString(template, { name: componentName, code: icon.svg, format: "tsx", height: icon.height, width: icon.width, }); const fileContentWithProps = fileContent.replace( /(]*)(?=>)/, "$1 {...props}" ); const formattedCode = await prettier.format(fileContentWithProps, { parser: "typescript", }); return formattedCode; }, ..._options, }); ================================================ FILE: packages/core/src/plugins/qwik/template.ts ================================================ const template = `import { component$, type QwikIntrinsicElements } from "@builder.io/qwik"; const <%= it.name %> = component$((props: QwikIntrinsicElements["svg"]) => { return <%= it.code %> }); export default <%= it.name %>;`; export default template; ================================================ FILE: packages/core/src/plugins/react/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/react/plugin.ts ================================================ import { Eta } from "eta"; import { htmlToJsx } from "html-to-jsx-transform"; import * as prettier from "prettier"; import { MoniconPlugin } from "../types"; import templates from "./templates"; import { generic, GenericPluginOptions } from "../generic"; import { ComponentNameOptions, getComponentName } from "../../utils/name"; export type ReactPluginOptionsInternal = ComponentNameOptions & { format?: "jsx" | "tsx"; } export type ReactPluginOptions = GenericPluginOptions; /** * React plugin to generate icon files * @param options - The options for the plugin */ export const react: MoniconPlugin = (_options) => generic({ name: "monicon-react-plugin", extension: _options?.format ?? "tsx", content: async (icon) => { const options: ReactPluginOptions = { suffix: "Icon", ..._options, }; const eta = new Eta({ autoEscape: false }); const componentName = getComponentName(icon, options); const fileFormat = options?.format ?? "tsx"; const reactCode = htmlToJsx(icon.svg); const templateContent = templates[fileFormat]; const fileContent = eta.renderString(templateContent, { name: componentName, code: reactCode, format: fileFormat, height: icon.height, width: icon.width, }); const fileContentWithProps = fileContent.replace( /(]*)(?=>)/, "$1 {...props}" ); const formattedCode = await prettier.format(fileContentWithProps, { parser: fileFormat === "tsx" ? "typescript" : "babel", }); return formattedCode; }, ..._options, }); ================================================ FILE: packages/core/src/plugins/react/templates.ts ================================================ const tsxTemplate = `import React from "react"; const <%= it.name %> = (props: React.ComponentPropsWithoutRef<"svg">) => { return <%= it.code %> }; export default <%= it.name %>;`; const jsxTemplate = `import React from "react"; const <%= it.name %> = (props) => { return <%= it.code %> }; export default <%= it.name %>;`; const templates = { tsx: tsxTemplate, jsx: jsxTemplate, }; export default templates; ================================================ FILE: packages/core/src/plugins/svelte/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/svelte/plugin.ts ================================================ import { Eta } from "eta"; import * as prettier from "prettier"; import { MoniconPlugin } from "../types"; import template from "./templates"; import { generic, GenericPluginOptions } from "../generic"; import { ComponentNameOptions, getComponentName } from "../../utils/name"; export type SveltePluginOptionsInternal = ComponentNameOptions export type SveltePluginOptions = GenericPluginOptions; /** * Svelte plugin to generate icon files * @param options - The options for the plugin */ export const svelte: MoniconPlugin = (_options) => generic({ name: "monicon-svelte-plugin", extension: "svelte", content: async (icon) => { const options: SveltePluginOptions = { suffix: "Icon", outputPath: "'src/lib/components/icons", ..._options, }; const eta = new Eta({ autoEscape: false }); const componentName = getComponentName(icon, options); const fileContent = eta.renderString(template, { name: componentName, code: icon.svg, height: icon.height, width: icon.width, }); const fileContentWithProps = fileContent.replace( /(]*)(?=>)/, "$1 {...$$$restProps}" ); const formattedCode = await prettier.format(fileContentWithProps, { parser: "babel", }); // TODO: prettier-plugin-svelte const fixedCode = formattedCode.replace(";", ""); return fixedCode; }, ..._options, }); ================================================ FILE: packages/core/src/plugins/svelte/templates.ts ================================================ const template = ` <%= it.code %> `; export default template; ================================================ FILE: packages/core/src/plugins/svg/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/svg/plugin.ts ================================================ import { MoniconPlugin } from "../types"; import { generic, GenericPluginOptions } from "../generic"; type SvgPluginOptions = GenericPluginOptions; /** * SVG plugin to generate icon files * @param options - The options for the plugin */ export const svg: MoniconPlugin = (options) => generic({ name: "monicon-svg-plugin", content: (icon) => icon.svg, ...options, }); ================================================ FILE: packages/core/src/plugins/types.ts ================================================ import type { Icon } from "../types"; export type MoniconPluginPayload = { icons: Icon[]; }; export type PromiseLike = Promise | T; export type MoniconPluginFile = { path: string; content: string; }; export type MoniconPluginContext = T & { configUpdated: boolean; configFilePath: string; }; export type MoniconPluginLoadContext = MoniconPluginContext<{ plugins: string[]; }>; export type MoniconPluginGenerateContext = MoniconPluginContext<{ icons: Icon[]; }>; export type MoniconPluginWriteFilesContext = MoniconPluginContext<{ files: MoniconPluginFile[]; }>; export type MoniconPlugin = (opts: T) => ( payload: MoniconPluginPayload ) => { name: string; generate: ( context: MoniconPluginGenerateContext ) => PromiseLike; onPluginsLoad?: (context: MoniconPluginLoadContext) => PromiseLike; beforeGenerate?: (context: MoniconPluginGenerateContext) => PromiseLike; afterGenerate?: (context: MoniconPluginGenerateContext) => PromiseLike; beforeWriteFiles?: ( context: MoniconPluginWriteFilesContext ) => PromiseLike; afterWriteFiles?: ( context: MoniconPluginWriteFilesContext ) => PromiseLike; }; export type MoniconPluginFunction = Awaited>; export type MoniconPluginInstance = Awaited>; ================================================ FILE: packages/core/src/plugins/vue/index.ts ================================================ export * from "./plugin"; ================================================ FILE: packages/core/src/plugins/vue/plugin.ts ================================================ import { Eta } from "eta"; import * as prettier from "prettier"; import { MoniconPlugin } from "../types"; import templates from "./templates"; import { generic, GenericPluginOptions } from "../generic"; import { ComponentNameOptions, getComponentName } from "../../utils/name"; export type VuePluginOptionsInternal = ComponentNameOptions & { template?: "js" | "ts"; } export type VuePluginOptions = GenericPluginOptions; /** * Vue plugin to generate icon files * @param options - The options for the plugin */ export const vue: MoniconPlugin = (_options) => generic({ name: "monicon-vue-plugin", extension: "vue", content: async (icon) => { const options: VuePluginOptions = { suffix: "Icon", template: "ts", outputPath: "src/components/icons", ..._options, }; const eta = new Eta({ autoEscape: false }); const componentName = getComponentName(icon, options); const fileFormat = options?.template ?? "ts"; const template = templates[fileFormat]; const fileContent = eta.renderString(template, { name: componentName, code: icon.svg, height: icon.height, width: icon.width, }); const fileContentWithProps = fileContent.replace( /(]*)(?=>)/, '$1 v-bind="props"' ); const formattedCode = await prettier.format(fileContentWithProps, { parser: "vue", }); return formattedCode; }, ..._options, }); ================================================ FILE: packages/core/src/plugins/vue/templates.ts ================================================ const tsTemplate = ` `; const jsTemplate = ` `; const templates = { js: jsTemplate, ts: tsTemplate, }; export default templates; ================================================ FILE: packages/core/src/types.ts ================================================ import { Loader } from "./loaders"; import { MoniconPluginFunction } from "./plugins"; export type MoniconConfig = { icons?: string[]; watch?: boolean; plugins?: MoniconPluginFunction[]; loaders?: Record>; collections?: string[]; }; export type CollectionIcon = { body: string; width?: number; height?: number; }; export type Collection = { prefix: string; lastModified: number; width?: number; height?: number; icons: Record; }; export type Icon = { name: string; body: string; width: number; height: number; svg: string; }; ================================================ FILE: packages/core/src/utils/config-loader.ts ================================================ import chokidar from "chokidar"; import { cosmiconfig } from "cosmiconfig"; import { loadJsSync, loadTsSync } from "cosmiconfig/dist/loaders.js"; import type { MoniconConfig } from "../types"; type WatchConfigFileParams = { onUpdate: (config: MoniconConfig) => void; }; const explorer = cosmiconfig("monicon", { cache: false, loaders: { '.js': loadJsSync, '.mjs': loadJsSync, '.cjs': loadJsSync, '.ts': loadTsSync, } }); export const loadConfigFile = async () => { const result = await explorer.search(); const config = (result?.config?.default || result?.config) as MoniconConfig; return { ...result, config, }; }; export const watchConfigFile = async ({ onUpdate }: WatchConfigFileParams) => { const result = await explorer.search(); const filepath = result?.filepath; if (filepath) { chokidar.watch(filepath).on("change", async (file) => { const newResult = await explorer.load(file); onUpdate( (newResult?.config?.default || newResult?.config) as MoniconConfig ); }); } return result; }; ================================================ FILE: packages/core/src/utils/file-system.ts ================================================ import fs from "fs/promises"; import path from "path"; import { MoniconPluginFile } from "../plugins"; /** * Write the files to the file system * @param files - The files to write */ export const writeFiles = async (files: MoniconPluginFile[]) => { await Promise.all( files.map(async (file) => { await fs.mkdir(path.dirname(file.path), { recursive: true }); await fs.writeFile(file.path, file.content); }) ); }; ================================================ FILE: packages/core/src/utils/icon-processor.ts ================================================ import { createSvg, transformIcon } from "./svg"; import type { Collection, Icon, MoniconConfig } from "../types"; import { create } from "lodash"; /** * Chunk the strings into smaller arrays * @param strings - The strings to chunk * @param maxLength - The size of the chunk * @returns The chunked strings */ export const chunkStrings = (strings: string[], maxLength: number = 400) => { const chunks: string[][] = []; let currentChunk: string[] = []; let currentLength: number = 0; for (const str of strings) { const stringLength = str.length; if (currentLength + stringLength > maxLength) { chunks.push(currentChunk); currentChunk = []; currentLength = 0; } currentChunk.push(str); currentLength += stringLength; } if (currentChunk.length > 0) { chunks.push(currentChunk); } return chunks; }; /** * Parse the icons from the input * @param icons - The icons to parse eg: `["mdi:home", "mdi:user"]` * @returns The parsed icons */ export const parseIcons = (icons: string[]) => { return icons.map(parseIcon); }; /** * Parse the icon from the input * @param icon - The icon to parse eg: `"mdi:home"` * @returns The parsed icon */ export const parseIcon = (icon: string) => { const parts = icon.split(":"); if (parts.length !== 2) { throw new Error( `Invalid icon format: ${icon}. Expected format: "prefix:name"` ); } const [prefix, name] = parts; return { prefix, name }; }; /** * Get the icons from the input * @param icons - The icons to get * @returns The icons */ const fetchIcons = async (icons: string[]) => { const parsedIcons = parseIcons(Array.from(new Set(icons))); const collections = new Map(); parsedIcons.forEach((icon) => { collections.get(icon.prefix) ? collections.get(icon.prefix)?.push(icon.name) : collections.set(icon.prefix, [icon.name]); }); const chunkedCollections = new Map(); collections.forEach((names, prefix) => chunkedCollections.set(prefix, chunkStrings(names)) ); const urlMap = new Map(); for (const [prefix, chunks] of chunkedCollections.entries()) { for (const chunk of chunks) { const searchParams = new URLSearchParams(); searchParams.set("icons", chunk.join(",")); const url = new URL(`https://api.iconify.design/${prefix}.json`); url.search = searchParams.toString(); const collection = urlMap.get(prefix); if (!collection) { urlMap.set(prefix, [url.toString()]); continue; } collection.push(url.toString()); } } const iconsByCollection = new Map(); const collectionResponses = await Promise.all( Array.from(urlMap.values()) .flat() .map(async (url) => { const response = await fetch(url); return response.json() as Promise; }) ); for (const response of collectionResponses) { const collection = iconsByCollection.get(response.prefix); if (!collection) { iconsByCollection.set(response.prefix, response); continue; } iconsByCollection.set(response.prefix, { ...collection, icons: { ...collection.icons, ...response.icons }, }); } const fullIcons: Icon[] = Array.from(iconsByCollection.values()).flatMap( (collection) => Object.entries(collection.icons).map(([name, icon]) => { const width = icon.width ?? collection.width ?? 16; const height = icon.height ?? collection.height ?? 16; const svg = createSvg({ body: icon.body, width, height }); const iconName = `${collection.prefix}:${name}`; return { name: iconName, width, height, body: icon.body, svg, }; }) ); return fullIcons; }; /** * Get the icons from the loaders * @param config - The config * @returns The loaded icons */ const getLoaderIcons = async (config: Required) => { const loaders = Object.entries(config.loaders); const loadedIcons: Record = {}; for await (const [loaderName, loader] of loaders) { const loaderResult = await loader(); for await (const [iconName, svg] of Object.entries(loaderResult)) { const icon = transformIcon(svg); const svgAsHtml = createSvg({ body: icon.body, width: icon.width, height: icon.height, }); const name = `${loaderName}:${iconName}`; loadedIcons[name] = { ...icon, name, svg: svgAsHtml }; } } return Object.values(loadedIcons); }; const fetchCollectionIcons = async (config: Required) => { // TODO: write to file system for caching. Request iconify last modified date and compare with the local file. If it's newer, fetch the new icons. const urls = config.collections.map((collection) => { return `https://raw.githubusercontent.com/iconify/icon-sets/refs/heads/master/json/${collection}.json`; }); const collectionResponses = await Promise.all( urls.map(async (url) => { const response = await fetch(url); return response.json() as Promise; }) ); const icons = collectionResponses.flatMap((collection) => { return Object.entries(collection.icons).map(([name, icon]) => { const width = icon.width ?? collection.width ?? 16; const height = icon.height ?? collection.height ?? 16; const svg = createSvg({ body: icon.body, width, height }); return { name: `${collection.prefix}:${name}`, width, height, body: icon.body, svg, }; }); }); return icons; }; /** * Generate icon files * @param config - The config * @param configModified - Whether the config has been modified * @returns The generated icons */ export const generateIcons = async (config: Required) => { const [fetchedIcons, collectionIcons, loaderIcons] = await Promise.all([ fetchIcons(config.icons), fetchCollectionIcons(config), getLoaderIcons(config), ]); const allIcons = [...fetchedIcons, ...loaderIcons, ...collectionIcons]; const uniqueIcons = new Map(); allIcons.forEach((icon) => uniqueIcons.set(icon.name, icon)); return Array.from(uniqueIcons.values()); }; ================================================ FILE: packages/core/src/utils/index.ts ================================================ export * from "./config-loader"; export * from "./file-system"; export * from "./icon-processor"; export * from "./plugin-loader"; export * from "./name"; ================================================ FILE: packages/core/src/utils/name.ts ================================================ import { pascalCase } from "change-case-all"; import { Icon } from "../types"; export type ComponentNameOptions = { prefix?: ((icon: Icon) => string | undefined) | string; suffix?: ((icon: Icon) => string | undefined) | string; componentName?: (icon: Icon) => string | undefined; } /** * Strip leading digits from a string * @param input - The input string * @returns The string with leading digits removed */ export const alphaNumericOnly = (input: string) => { return input.replace(/[^a-zA-Z0-9]/g, ""); } /** * Generate a component name from an icon name * @param name - The name of the icon * @returns The component name */ export const generateComponentName = (iconName: string) => { return alphaNumericOnly(pascalCase(iconName)) } /** * Get a component name from an icon * @param icon - The icon * @param options - The options * @returns The component name */ export const getComponentName = (icon: Icon, options: ComponentNameOptions) => { const componentName = generateComponentName(icon.name); const prefix = typeof options?.prefix === "function" ? options.prefix(icon) : (options?.prefix ?? ""); const suffix = typeof options?.suffix === "function" ? options.suffix(icon) : (options?.suffix ?? ""); return `${prefix}${componentName}${suffix}`; }; ================================================ FILE: packages/core/src/utils/plugin-loader.ts ================================================ import { MoniconPluginContext, MoniconPluginInstance } from "../plugins"; import { MoniconConfig } from "../types"; import { Icon } from "../types"; /** * Run the plugins * @param config - The config * @param icons - The icons to run the plugins on * @param configModified - Whether the config has been modified */ export const loadPlugins = async ( config: Required, context: MoniconPluginContext, icons: Icon[] ) => { const plugins = config.plugins.map((plugin) => plugin({ icons })); const pluginNames = plugins.map((plugin) => plugin.name); await Promise.all( plugins.map((plugin) => plugin.onPluginsLoad?.({ ...context, plugins: pluginNames }) ) ); return plugins; }; /** * Run the plugins * @param plugins - The plugins to run * @param configModified - Whether the config has been modified */ export const runPlugins = async ( plugins: MoniconPluginInstance[], context: MoniconPluginContext, icons: Icon[] ) => { const files = await Promise.all( plugins.map(async (plugin) => { await plugin.beforeGenerate?.({ ...context, icons }); const files = await plugin.generate({ ...context, icons }); await plugin.afterGenerate?.({ ...context, icons }); return files; }) ); return files.flat(); }; ================================================ FILE: packages/core/src/utils/svg.ts ================================================ import { JSDOM } from "jsdom"; import { parseSync, stringify } from "svgson"; import type { CollectionIcon } from "../types"; export const toPx = (value: string) => { if (value.endsWith("em")) { return parseFloat(value) * 16; } return parseFloat(value); }; export const transformIcon = (svg: string) => { const svgObject = parseSync(svg); const viewBox = svgObject.attributes?.viewBox; const [, , widthAsString, heightAsString] = viewBox?.split(" ") ?? []; const width = toPx(widthAsString ?? "1em"); const height = toPx(heightAsString ?? "1em"); const body = svgObject.children .map((child) => stringify(child, { selfClose: false })) .join(""); return { svg, body, width: width, height: height, }; }; /** * Create an SVG from the icon body * @param icon - The icon to create the SVG from * @returns The SVG */ export const createSvg = (icon: Required) => { const { window } = new JSDOM(); const parser = new window.DOMParser(); const viewBox = `0 0 ${icon.width} ${icon.height}`; const dom = parser.parseFromString( `${icon.body}`, "image/svg+xml" ); return dom.documentElement.outerHTML; }; ================================================ FILE: packages/core/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext" } } ================================================ FILE: packages/core/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: [ "src/index.ts", "src/plugins/index.ts", "src/loaders/index.ts", "src/utils/index.ts", ], clean: true, format: ["cjs", "esm"], dts: true, minify: false, outDir: "dist/", sourcemap: false, bundle: true, splitting: false, outExtension(ctx) { return { dts: ".d.ts", js: ctx.format === "cjs" ? ".cjs" : ".mjs", }; }, treeshake: false, target: "es2022", platform: "node", tsconfig: "./tsconfig.json", cjsInterop: true, keepNames: true, skipNodeModulesBundle: false, ...options, })); ================================================ FILE: packages/esbuild/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/esbuild/CHANGELOG.md ================================================ # @monicon/esbuild ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/core@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/core@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/core@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/core@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/core@0.0.123 ================================================ FILE: packages/esbuild/package.json ================================================ { "name": "@monicon/esbuild", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "peerDependencies": { "esbuild": "^0.17.0" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@monicon/core": "*" } } ================================================ FILE: packages/esbuild/src/index.ts ================================================ import { bootstrap, MoniconConfig } from "@monicon/core"; import type { Plugin } from "esbuild"; export const monicon = (options?: MoniconConfig): Plugin => { return { name: "esbuild-monicon", setup(build) { build.onStart(async () => { await bootstrap(options); }); }, }; }; export default monicon; ================================================ FILE: packages/esbuild/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/esbuild/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], dts: true, ...options, })); ================================================ FILE: packages/metro/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/metro/CHANGELOG.md ================================================ # @monicon/metro ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/core@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/core@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/core@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/core@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/core@0.0.123 ================================================ FILE: packages/metro/package.json ================================================ { "name": "@monicon/metro", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "publishConfig": { "access": "public" }, "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3", "metro-config": "^0.80.12" }, "dependencies": { "@monicon/core": "*" } } ================================================ FILE: packages/metro/src/index.ts ================================================ import type { IntermediateConfigT } from "metro-config"; import { bootstrap, MoniconConfig } from "@monicon/core"; // @ts-expect-error __DEV__ is not defined in the globalThis object const isDevelopmentMode = typeof __DEV__ !== "undefined" ? __DEV__ : false; export const withMonicon = ( metroConfig: IntermediateConfigT, config?: MoniconConfig ): IntermediateConfigT => { void bootstrap({ watch: isDevelopmentMode, ...config, }); return metroConfig; }; ================================================ FILE: packages/metro/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/metro/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], dts: true, ...options, })); ================================================ FILE: packages/nuxt/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/nuxt/CHANGELOG.md ================================================ # @monicon/nuxt ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 - @monicon/vite@1.2.2 - @monicon/webpack@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/webpack@1.2.1 - @monicon/vite@1.2.1 - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 - @monicon/vite@1.2.0 - @monicon/webpack@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/webpack@1.1.1 - @monicon/core@1.1.1 - @monicon/vite@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/webpack@1.1.1-next.0 - @monicon/core@1.1.1-next.0 - @monicon/vite@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/vite@1.1.0 - @monicon/core@1.1.0 - @monicon/webpack@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 - @monicon/vite@1.0.0 - @monicon/webpack@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 - @monicon/vite@0.0.153 - @monicon/webpack@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 - @monicon/vite@0.0.152 - @monicon/webpack@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 - @monicon/vite@0.0.151 - @monicon/webpack@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 - @monicon/vite@0.0.150 - @monicon/webpack@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 - @monicon/vite@0.0.149 - @monicon/webpack@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 - @monicon/vite@0.0.148 - @monicon/webpack@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 - @monicon/vite@0.0.147 - @monicon/webpack@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 - @monicon/vite@0.0.146 - @monicon/webpack@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 - @monicon/vite@0.0.145 - @monicon/webpack@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/webpack@0.0.144 - @monicon/core@0.0.144 - @monicon/vite@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 - @monicon/vite@0.0.140 - @monicon/webpack@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 - @monicon/vite@0.0.139 - @monicon/webpack@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 - @monicon/vite@0.0.138 - @monicon/webpack@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/core@0.0.123 ================================================ FILE: packages/nuxt/package.json ================================================ { "name": "@monicon/nuxt", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@nuxt/kit": "^3.11.2", "@monicon/core": "*" } } ================================================ FILE: packages/nuxt/src/index.ts ================================================ import { defineNuxtModule } from "@nuxt/kit"; import { bootstrap, MoniconConfig } from "@monicon/core"; const defaultOptions: MoniconConfig = { icons: [], }; export default defineNuxtModule({ meta: { name: "nuxt-monicon", configKey: "monicon", }, defaults: defaultOptions, async setup(options, nuxt) { nuxt.hook( "build:before", async () => await bootstrap({ watch: nuxt.options.dev, ...options }) ); }, }); ================================================ FILE: packages/nuxt/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/nuxt/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], externals: ["@nuxt/schema"], dts: true, ...options, })); ================================================ FILE: packages/rollup/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/rollup/CHANGELOG.md ================================================ # @monicon/rollup ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/vite@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/vite@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/vite@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/vite@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/vite@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/vite@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/vite@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/vite@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/vite@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/vite@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/vite@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/vite@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/vite@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/vite@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/vite@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/vite@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/vite@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/vite@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/vite@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/vite@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/vite@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/vite@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/vite@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/vite@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/vite@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/vite@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/vite@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/vite@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/vite@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/vite@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/vite@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/vite@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/vite@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/vite@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/vite@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/vite@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/vite@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/vite@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/vite@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/vite@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/vite@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/vite@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/vite@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/vite@0.0.123 ================================================ FILE: packages/rollup/package.json ================================================ { "name": "@monicon/rollup", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@monicon/vite": "*" } } ================================================ FILE: packages/rollup/src/index.ts ================================================ import { monicon } from "@monicon/vite"; export { monicon }; export default monicon; ================================================ FILE: packages/rollup/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/rollup/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], dts: true, ...options, })); ================================================ FILE: packages/rspack/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build # dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/rspack/CHANGELOG.md ================================================ # @monicon/rspack ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 - @monicon/webpack@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 - @monicon/webpack@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 - @monicon/webpack@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 - @monicon/webpack@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 - @monicon/webpack@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 - @monicon/webpack@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 - @monicon/webpack@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 - @monicon/webpack@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/webpack@2.0.0 - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 - @monicon/webpack@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/webpack@1.2.1 - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 - @monicon/webpack@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/webpack@1.1.1 - @monicon/core@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/webpack@1.1.1-next.0 - @monicon/core@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/core@1.1.0 - @monicon/webpack@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 - @monicon/webpack@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 - @monicon/webpack@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 - @monicon/webpack@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 - @monicon/webpack@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 - @monicon/webpack@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 - @monicon/webpack@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 - @monicon/webpack@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 - @monicon/webpack@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 - @monicon/webpack@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 - @monicon/webpack@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/webpack@0.0.144 - @monicon/core@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 - @monicon/webpack@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 - @monicon/webpack@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 - @monicon/webpack@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 - @monicon/webpack@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 - @monicon/webpack@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 - @monicon/webpack@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 - @monicon/webpack@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 - @monicon/webpack@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 - @monicon/webpack@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 - @monicon/webpack@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/webpack@0.0.130 - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/webpack@0.0.129 - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/webpack@0.0.128 - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/webpack@0.0.127 - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/webpack@0.0.126 - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/webpack@0.0.125 - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/webpack@0.0.124 - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/webpack@0.0.123 - @monicon/core@0.0.123 ================================================ FILE: packages/rspack/package.json ================================================ { "name": "@monicon/rspack", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "publishConfig": { "access": "public" }, "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@monicon/core": "*", "@monicon/webpack": "*" } } ================================================ FILE: packages/rspack/src/index.ts ================================================ import { MoniconConfig } from "@monicon/core"; import { MoniconPlugin as MoniconWebpackPlugin } from "@monicon/webpack"; const pluginName = "rspack-monicon"; export class MoniconPlugin extends MoniconWebpackPlugin { name = pluginName; constructor(config?: MoniconConfig) { const opts: MoniconConfig = { ...config, }; super(opts); } } export default MoniconPlugin; ================================================ FILE: packages/rspack/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/rspack/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], dts: true, ...options, })); ================================================ FILE: packages/typescript-config/CHANGELOG.md ================================================ # @monicon/typescript-config ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature ## 0.0.140 ### Patch Changes - remove unused deps ## 0.0.139 ### Patch Changes - change import path of stringToIcon ## 0.0.138 ### Patch Changes - remove side effects ## 0.0.137 ### Patch Changes - implement strokeWidth support ## 0.0.136 ### Patch Changes - remove importIcons functions ## 0.0.135 ### Patch Changes - fix import path ## 0.0.134 ### Patch Changes - remove prop drilling ## 0.0.133 ### Patch Changes - fix color issue ## 0.0.132 ### Patch Changes - implement prop drilling ## 0.0.131 ### Patch Changes - update readme ## 0.0.130 ### Patch Changes - add postinstall script ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime ## 0.0.128 ### Patch Changes - change import path ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime ## 0.0.125 ### Patch Changes - add placeholder variable back ## 0.0.124 ### Patch Changes - add docs website ## 0.0.123 ### Patch Changes - change package name ================================================ FILE: packages/typescript-config/base.json ================================================ { "$schema": "https://json.schemastore.org/tsconfig", "display": "Default", "compilerOptions": { "composite": false, "declaration": true, "declarationMap": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "inlineSources": false, "isolatedModules": true, "moduleResolution": "node", "noUnusedLocals": false, "noUnusedParameters": false, "preserveWatchOutput": true, "skipLibCheck": true, "strict": true }, "exclude": ["node_modules"] } ================================================ FILE: packages/typescript-config/nextjs.json ================================================ { "$schema": "https://json.schemastore.org/tsconfig", "display": "Next.js", "extends": "./base.json", "compilerOptions": { "allowJs": true, "declaration": false, "declarationMap": false, "incremental": true, "jsx": "preserve", "lib": ["dom", "dom.iterable", "esnext"], "module": "esnext", "noEmit": true, "resolveJsonModule": true, "strict": true, "target": "es5" }, "include": ["src", "next-env.d.ts"], "exclude": ["node_modules"] } ================================================ FILE: packages/typescript-config/package.json ================================================ { "name": "@monicon/typescript-config", "version": "2.0.8", "private": true, "publishConfig": { "access": "public" } } ================================================ FILE: packages/typescript-config/react-native-library.json ================================================ { "$schema": "https://json.schemastore.org/tsconfig", "display": "React Native Library", "extends": "./base.json", "compilerOptions": { "allowJs": true, "jsx": "react", "lib": ["DOM", "ESNext"], "noEmit": true, "resolveJsonModule": true, "target": "ESNext" } } ================================================ FILE: packages/typescript-config/vue-library.json ================================================ { "$schema": "https://json.schemastore.org/tsconfig", "display": "Vue Library", "extends": "./base.json", "compilerOptions": { "lib": ["ES2015", "dom"], "module": "ESNext", "target": "es6", "jsx": "preserve", "baseUrl": ".", }, "include": [ "src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue" ], } ================================================ FILE: packages/vite/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/vite/CHANGELOG.md ================================================ # @monicon/vite ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/core@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/core@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/core@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/core@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/core@0.0.123 ================================================ FILE: packages/vite/package.json ================================================ { "name": "@monicon/vite", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { "require": "./dist/*/index.js", "import": "./dist/*/index.mjs" } }, "publishConfig": { "access": "public" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "peerDependencies": { "vite": "^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" }, "devDependencies": { "@monicon/typescript-config": "2.0.8", "tsup": "^8.0.1", "typescript": "^5.3.3" }, "dependencies": { "@monicon/core": "2.0.8" } } ================================================ FILE: packages/vite/src/index.ts ================================================ import type { PluginOption } from "vite"; import { bootstrap, MoniconConfig } from "@monicon/core"; // Remix's vite plugin calls resolveId before buildStart, so we need to wait for the bootstrap to complete before resolving the id. let bootstrapPromise: Promise | null = null; export const monicon = (config?: MoniconConfig): PluginOption => { return { name: "vite-monicon", async buildStart() { if (bootstrapPromise) return; const isWatching = Boolean(this?.meta?.watchMode) || process.env.NODE_ENV === "development"; bootstrapPromise = bootstrap({ watch: isWatching, ...config }); }, resolveId: async () => { await bootstrapPromise; return; }, config: async () => { return { server: { fs: { allow: [".."], }, }, }; }, }; }; export default monicon; ================================================ FILE: packages/vite/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/vite/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], splitting: false, dts: true, ...options, })); ================================================ FILE: packages/webpack/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules .pnp .pnp.js # misc .DS_Store *.pem # build # dist # debug npm-debug.log* yarn-debug.log* yarn-error.log* # local env files .env.local .env.development.local .env.test.local .env.production.local # turbo .turbo ================================================ FILE: packages/webpack/CHANGELOG.md ================================================ # @monicon/webpack ## 2.0.8 ### Patch Changes - [`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update vite peer dependencies version - Updated dependencies [[`8623e16`](https://github.com/oktaysenkan/monicon/commit/8623e16e28e6a562d7a9179e4f45eedc05f0d3bf)]: - @monicon/core@2.0.8 ## 2.0.7 ### Patch Changes - [`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: use only needed loaders - Updated dependencies [[`450efa2`](https://github.com/oktaysenkan/monicon/commit/450efa221f0f33b56816d7f4c4296d637f210bc2)]: - @monicon/core@2.0.7 ## 2.0.6 ### Patch Changes - [#89](https://github.com/oktaysenkan/monicon/pull/89) [`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: set default watch false for cli - Updated dependencies [[`b07677a`](https://github.com/oktaysenkan/monicon/commit/b07677a0f8ae704a439e34c0e9a824edeff328d6)]: - @monicon/core@2.0.6 ## 2.0.5 ### Patch Changes - [#87](https://github.com/oktaysenkan/monicon/pull/87) [`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat: change component name generation algorithm - Updated dependencies [[`a68704f`](https://github.com/oktaysenkan/monicon/commit/a68704f9fdcb9e7de679779df61a9cfe4ffb97e9)]: - @monicon/core@2.0.5 ## 2.0.4 ### Patch Changes - [`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: sanitize component names - Updated dependencies [[`9a5487c`](https://github.com/oktaysenkan/monicon/commit/9a5487c3b4babbc005de3aeeb25767c9aab613f5)]: - @monicon/core@2.0.4 ## 2.0.3 ### Patch Changes - [#84](https://github.com/oktaysenkan/monicon/pull/84) [`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - chore: update cosmoconfig - Updated dependencies [[`313dde7`](https://github.com/oktaysenkan/monicon/commit/313dde7a8425df79e0d42d6cbf40883d5e56da5b)]: - @monicon/core@2.0.3 ## 2.0.2 ### Patch Changes - [#82](https://github.com/oktaysenkan/monicon/pull/82) [`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - refactor: add typescript config package as dev dep - Updated dependencies [[`6bff168`](https://github.com/oktaysenkan/monicon/commit/6bff1681f957d236f87330e276dfba3ecd88bd9e)]: - @monicon/core@2.0.2 ## 2.0.1 ### Patch Changes - [#80](https://github.com/oktaysenkan/monicon/pull/80) [`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: resolve npx executable issue - Updated dependencies [[`6b083a5`](https://github.com/oktaysenkan/monicon/commit/6b083a55396c8269c831155efe0d4c427b0a8a1d)]: - @monicon/core@2.0.1 ## 2.0.0 ### Major Changes - [#70](https://github.com/oktaysenkan/monicon/pull/70) [`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - introduce generic plugin system for creating custom icon transformations and output formats. This powerful new plugin allows unlimited extensibility - generate icons in any format beyond the built-in framework plugins by controlling file paths, names, extensions, and content generation. ### Patch Changes - Updated dependencies [[`ceeca33`](https://github.com/oktaysenkan/monicon/commit/ceeca334f2ad005206a2e7ce4b9276dcd23dbe35)]: - @monicon/core@2.0.0 ## 1.2.2 ### Patch Changes - [#68](https://github.com/oktaysenkan/monicon/pull/68) [`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix(react): resolve kebab-case html attributes warning - Updated dependencies [[`1902f22`](https://github.com/oktaysenkan/monicon/commit/1902f229ac19e3b74aebfddb2e2fe73ae78d2834)]: - @monicon/core@1.2.2 ## 1.2.1 ### Patch Changes - [#64](https://github.com/oktaysenkan/monicon/pull/64) [`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: update peer dependencies - Updated dependencies [[`400aad8`](https://github.com/oktaysenkan/monicon/commit/400aad80bad14d7fd4901a747dd34eedd65afc1c)]: - @monicon/core@1.2.1 ## 1.2.0 ### Minor Changes - [#62](https://github.com/oktaysenkan/monicon/pull/62) [`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement type generation ### Patch Changes - Updated dependencies [[`6a3a299`](https://github.com/oktaysenkan/monicon/commit/6a3a299398311653e7c9f7765572c1bbaf494c45)]: - @monicon/core@1.2.0 ## 1.1.1 ### Patch Changes - [#59](https://github.com/oktaysenkan/monicon/pull/59) [`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - fix: change auto-generated icons folder path - Updated dependencies [[`165e338`](https://github.com/oktaysenkan/monicon/commit/165e338e4c53088bebf2e08f49816fbec2161e81)]: - @monicon/core@1.1.1 ## 1.1.1-next.0 ### Patch Changes - fix: change auto-generated icons folder path - Updated dependencies []: - @monicon/core@1.1.1-next.0 ## 1.1.0 ### Minor Changes - [#56](https://github.com/oktaysenkan/monicon/pull/56) [`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - feat(svelte): add svelte 5 support (#55) ### Patch Changes - Updated dependencies [[`82fb3b0`](https://github.com/oktaysenkan/monicon/commit/82fb3b09cbfa74cce0d59ea7999bc87936059de3)]: - @monicon/core@1.1.0 ## 1.0.0 ### Major Changes - [#52](https://github.com/oktaysenkan/monicon/pull/52) [`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - stable release ### Patch Changes - Updated dependencies [[`05ae5f5`](https://github.com/oktaysenkan/monicon/commit/05ae5f59e76be1b91bcba22b62e2b928d179c217)]: - @monicon/core@1.0.0 ## 0.0.153 ### Patch Changes - [#49](https://github.com/oktaysenkan/monicon/pull/49) [`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - implement custom loaders - Updated dependencies [[`3d99a2a`](https://github.com/oktaysenkan/monicon/commit/3d99a2a84c01c9b6e52da955a7915791ee4c6aca)]: - @monicon/core@0.0.153 ## 0.0.152 ### Patch Changes - [#46](https://github.com/oktaysenkan/monicon/pull/46) [`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - load icons synchronously - Updated dependencies [[`bf84d7e`](https://github.com/oktaysenkan/monicon/commit/bf84d7edc2b9d4d197875437c663eae6f800e2c4)]: - @monicon/core@0.0.152 ## 0.0.151 ### Patch Changes - [#44](https://github.com/oktaysenkan/monicon/pull/44) [`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - update react peer dependencies - Updated dependencies [[`da4bd96`](https://github.com/oktaysenkan/monicon/commit/da4bd969ed3af993d4d01ffb69cbad86cf32184f)]: - @monicon/core@0.0.151 ## 0.0.150 ### Patch Changes - [#42](https://github.com/oktaysenkan/monicon/pull/42) [`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - Qwik support added - Updated dependencies [[`7fcefdc`](https://github.com/oktaysenkan/monicon/commit/7fcefdcab57a20b7eb8464525aecea156705f97d)]: - @monicon/core@0.0.150 ## 0.0.149 ### Patch Changes - [`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - add support for loading collections - Updated dependencies [[`a096797`](https://github.com/oktaysenkan/monicon/commit/a0967972bbbb57d9ac701822fcb6e8947d7aed19)]: - @monicon/core@0.0.149 ## 0.0.148 ### Patch Changes - [`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use require instead of await import - Updated dependencies [[`a3353b6`](https://github.com/oktaysenkan/monicon/commit/a3353b6239937c6523bc621b25a6c75a63ab7cb3)]: - @monicon/core@0.0.148 ## 0.0.147 ### Patch Changes - [`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - remove mjs output - Updated dependencies [[`489830b`](https://github.com/oktaysenkan/monicon/commit/489830bc4f352a620f8f54ce863c2f6d8e7f075c)]: - @monicon/core@0.0.147 ## 0.0.146 ### Patch Changes - [#37](https://github.com/oktaysenkan/monicon/pull/37) [`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - use await import - Updated dependencies [[`4f61546`](https://github.com/oktaysenkan/monicon/commit/4f61546635416f54cd85c2c042f7b44e119d14c4)]: - @monicon/core@0.0.146 ## 0.0.145 ### Patch Changes - [#35](https://github.com/oktaysenkan/monicon/pull/35) [`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - resolve navigator.product issue - Updated dependencies [[`54ee3ff`](https://github.com/oktaysenkan/monicon/commit/54ee3ffd51df589a4d2131029a55847ed15d8f9a)]: - @monicon/core@0.0.145 ## 0.0.144 ### Patch Changes - [`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2) Thanks [@oktaysenkan](https://github.com/oktaysenkan)! - revert config file feature - Updated dependencies [[`0819e8d`](https://github.com/oktaysenkan/monicon/commit/0819e8d7d31485fed596e985b7dce330f82296f2)]: - @monicon/core@0.0.144 ## 0.0.140 ### Patch Changes - remove unused deps - Updated dependencies - @monicon/core@0.0.140 ## 0.0.139 ### Patch Changes - change import path of stringToIcon - Updated dependencies - @monicon/core@0.0.139 ## 0.0.138 ### Patch Changes - remove side effects - Updated dependencies - @monicon/core@0.0.138 ## 0.0.137 ### Patch Changes - implement strokeWidth support - Updated dependencies - @monicon/core@0.0.137 ## 0.0.136 ### Patch Changes - remove importIcons functions - Updated dependencies - @monicon/core@0.0.136 ## 0.0.135 ### Patch Changes - fix import path - Updated dependencies - @monicon/core@0.0.135 ## 0.0.134 ### Patch Changes - remove prop drilling - Updated dependencies - @monicon/core@0.0.134 ## 0.0.133 ### Patch Changes - fix color issue - Updated dependencies - @monicon/core@0.0.133 ## 0.0.132 ### Patch Changes - implement prop drilling - Updated dependencies - @monicon/core@0.0.132 ## 0.0.131 ### Patch Changes - update readme - Updated dependencies - @monicon/core@0.0.131 ## 0.0.130 ### Patch Changes - add postinstall script - Updated dependencies - @monicon/core@0.0.130 ## 0.0.129 ### Patch Changes - change resolve name as @monicon/runtime - Updated dependencies - @monicon/core@0.0.129 ## 0.0.128 ### Patch Changes - change import path - Updated dependencies - @monicon/core@0.0.128 ## 0.0.127 ### Patch Changes - change placeholder package name as icon-runtime - Updated dependencies - @monicon/core@0.0.127 ## 0.0.126 ### Patch Changes - change placeholder package name as monicon-runtime - Updated dependencies - @monicon/core@0.0.126 ## 0.0.125 ### Patch Changes - add placeholder variable back - Updated dependencies - @monicon/core@0.0.125 ## 0.0.124 ### Patch Changes - add docs website - Updated dependencies - @monicon/core@0.0.124 ## 0.0.123 ### Patch Changes - change package name - Updated dependencies - @monicon/core@0.0.123 ================================================ FILE: packages/webpack/package.json ================================================ { "name": "@monicon/webpack", "version": "2.0.8", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "files": [ "dist" ], "publishConfig": { "access": "public" }, "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }, "scripts": { "build": "tsup", "dev": "tsup --watch", "clean": "rm -rf dist" }, "devDependencies": { "@monicon/typescript-config": "*", "tsup": "^8.0.1", "typescript": "^5.3.3", "webpack": "^5.0.0" }, "dependencies": { "@monicon/core": "*" }, "peerDependencies": { "webpack": "^5.0.0" } } ================================================ FILE: packages/webpack/src/index.ts ================================================ import { MoniconConfig, bootstrap } from "@monicon/core"; import { Compiler } from "webpack"; const pluginName = "webpack-monicon"; export class MoniconPlugin { name = pluginName; private readonly config: MoniconConfig = {}; private bootstrapPromise: Promise | null = null; constructor(config?: MoniconConfig) { this.config = config ?? {}; } async apply(compiler: Compiler) { const watch = compiler.options.watch === true; compiler.hooks.beforeCompile.tap("MoniconWebpackPlugin", async () => { if (!this.bootstrapPromise) this.bootstrapPromise = bootstrap({ watch, ...this.config }); await this.bootstrapPromise; }); } } export default MoniconPlugin; ================================================ FILE: packages/webpack/tsconfig.json ================================================ { "extends": "@monicon/typescript-config/react-native-library", "include": ["."], "exclude": ["dist", "build", "node_modules"], "compilerOptions": { "strict": true } } ================================================ FILE: packages/webpack/tsup.config.ts ================================================ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: { index: "src/index.ts", }, clean: true, format: ["cjs", "esm"], external: ["react"], dts: true, ...options, })); ================================================ FILE: turbo.json ================================================ { "$schema": "https://turbo.build/schema.json", "ui": "tui", "tasks": { "build": { "inputs": ["$TURBO_DEFAULT$", ".env*"], "outputs": ["dist/**", ".next/**", "!.next/cache/**", "build/**"], "dependsOn": ["^build"] }, "cli#build": { "dependsOn": ["core#build"] }, "vite#build": { "dependsOn": ["core#build"] }, "metro#build": { "dependsOn": ["core#build"] }, "webpack#build": { "dependsOn": ["core#build"] }, "rollup#build": { "dependsOn": ["vite#build"] }, "esbuild#build": { "dependsOn": ["core#build"] }, "rspack#build": { "dependsOn": ["webpack#build"] }, "nuxt#build": { "dependsOn": ["core#build"] }, "react-native-app#build": { "dependsOn": ["metro#build"] }, "next#build": { "dependsOn": ["webpack#build"] }, "remix#build": { "dependsOn": ["vite#build"] }, "vite-react#build": { "dependsOn": ["vite#build"] }, "rspack-react#build": { "dependsOn": ["rspack#build"] }, "rollup-react#build": { "dependsOn": ["rollup#build"] }, "vite-vue#build": { "dependsOn": ["vite#build"] }, "nuxt-app#prepare": {}, "nuxt-app#build": { "dependsOn": ["nuxt-app#prepare", "nuxt#build"] }, "svelte-app#build": { "dependsOn": [] }, "qwik-app#build": { "dependsOn": [] }, "docs#build": { "dependsOn": ["core#build", "vite#build"] }, "dev": { "cache": false, "persistent": true }, "lint": {}, "clean": { "cache": false } } }