Nuxt Icon Tailwind
100,000以上のすぐに使えるアイコンを、Iconifyをベースに、Nuxtアプリケーションに追加します。
@nuxt/iconとの違い
- 各アイコンのAPI呼び出しではなく、ローカルで読み込むためにTailwind CSS Iconsに基づいています。
- ローカルにインストールされたIconifyパッケージに加え、JSONファイルからカスタムコレクションを追加できます。
- CSSを内部で処理するのではなく、Tailwindを使用して管理します。
- Tailwindを使用しているため、特定の
<Icon />
コンポーネント以外でもアイコンを提供でき、PrimeVueのような他のコンポーネントでも動作します。
機能 ✨
- Iconify JSONパッケージによるTailwind CSSアイコン
- カスタムローカルIconCollection JSONファイル
- Nuxt 3対応
- Iconifyを介した100,000以上のオープンソースベクターアイコンのサポート
- 絵文字サポート
- カスタムSVGサポート(Vueコンポーネント経由)
- ローカルにロードされていないコレクションの場合は、API呼び出しにフォールバック
セットアップ ⛓️
プロジェクトにnuxt-icon-tw
依存関係を追加します(もちろんTailwindが必要です)
npx nuxi@latest module add icon-tw
npx nuxi@latest module add tailwindcss
nuxt.config.ts
のmodules
配列に追加します。
import { defineNuxtConfig } from 'nuxt'
export default defineNuxtConfig({
modules: ['nuxt-icon-tw', '@nuxtjs/tailwindcss'],
})
このパッケージのIconコンポーネントが最初に使われるように、@nuxt/iconを取り込む可能性のある他のモジュールの前に配置してください。
Tailwind CSSを介して使用したいIconify JSONパッケージをインストールします。
npm install --save-dev @iconify-json/mdi
# Using yarn
yarn add --dev @iconify-jsom/mdi
これらはTailwind CSSプラグインによって自動的に認識されます。
<Icon />
は、i-prefix
で始まるすべてのアイコン、つまりi-mdi-home
をロードするためにTailwindを使用します。i-other-icon
を使用し、それがローカルにインストールされていないセットの場合、アイコンはIconify API SVGロードにフォールバックします。
:
区切り文字を使用するアイコン(例:i-mdi:home
またはmdi:home
)は、Tailwindがクラスに:を許可しないため、Iconify SVGのままになります。
これにより、既存のプロジェクトにTailwindアイコンを追加する場合、NuxtIconTwをNuxtIconの代替としてドロップインすることができます(ちなみに、これが私がこれを作成した理由です)
以上で、コンポーネントで<Icon />
を使用できるようになりました!
✨ VS Codeを使用している場合は、@antfuによるIconify IntelliSense拡張機能を使用できます。
使い方 👌
プロパティ
name
(必須): アイコン名、絵文字、またはグローバルコンポーネント名size
: アイコンサイズ(デフォルト:1em
)
属性:
Iconifyのアイコンを使用する場合、<svg>
が作成されます。ネイティブ要素のすべての属性を指定できます。
<Icon name="uil:github" color="black" />
その他のコンポーネント:
<Icon />
- ロードされたコレクションに基づいて、TailwindまたはIconify SVGに自動的に設定されます<IconTw />
- Tailwindによってのみアイコンを作成します。指定された名前がロードされていない場合、空白になります<IconSvg />
- Iconify Svgによってのみアイコンを作成します。ただし、カスタムファイルはここでは機能しません
Iconifyデータセット
https://icones.js.orgコレクションの任意の名前を使用できます
<Icon name="uil:github" />
i-
プレフィックスをサポートしています(例:i-uil-github
)。
カスタムアイコンコレクション
カスタムアイコンJSONファイルの場所を指定して、Tailwind CSSに含めることができます
import { createResolver } from '@nuxt/kit'
const { resolve } = createResolver(import.meta.url)
export default defineNuxtConfig({
icon: {
customCollections: resolve('./custom.json'),
},
modules: ['nuxt-icon-tw', '@nuxtjs/tailwindcss'],
})
VS Code Iconifyにこれらを表示することもできます。
{
// set from root of the project
"iconify.customCollectionJsonPaths": ["./playground/custom.json"]
}
絵文字
<Icon name="🚀" />
Vueコンポーネント
<Icon name="NuxtIcon" />
NuxtIcon
はcomponents/global/
フォルダー内にある必要があることに注意してください(例を参照)。
Tailwindアイコン構成
プレフィックス
Tailwindアイコンクラスで使用するプレフィックスを指定できます。これは、他のTailwindアイコンプラグインとの後方互換性のため、デフォルトでi
になっています。ただし、プレフィックスをまったく必要としないように、空(''
)に設定することもできます。
コレクション
含めるIconifyセットを指定します
string[]
:export default defineNuxtConfig({ icon: { collections: ['mdi', 'ph'], }, modules: ['nuxt-icon-tw', '@nuxtjs/tailwindcss'], })
[]
: 自動解決を完全にオフにします'all'
: Iconify JSON全体をロードすることを明確にオプトインします。警告:時間がかかる場合がありますIconCollection
: 自動化を完全にオーバーライドしますexport default defineNuxtConfig({ icon: { collections: { foo: { icons: { 'arrow-left': { body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"/>', width: 20, height: 20, }, }, }, }, }, modules: ['nuxt-icon-tw', '@nuxtjs/tailwindcss'], })
Tailwindの強制
Tailwindアイコンのみを許可し、Iconify APIアイコンをまったく許可しないようにする必要がある場合は、これをtrueに設定します。
export default defineNuxtConfig({
icon: {
forceTailwind: true,
},
modules: ['nuxt-icon-tw', '@nuxtjs/tailwindcss'],
})
構成 ⚙️
<Icon />
のデフォルトサイズ(1em
)を更新するには、iconTw.size
プロパティを使用してapp.config.ts
を作成します。
app.config.ts
はnuxt.config.ts
のサイズ設定をオーバーライドします
ヘッドレスアイコンの場合は、iconTw.class: ''
と設定するだけで、<Icon />
のデフォルトクラス(.icon
)をiconTw.class
プロパティで更新します。
iconTw.aliases
プロパティを利用して、アイコンの入れ替えを簡単にするエイリアスを定義することもできます。
// app.config.ts
export default defineAppConfig({
iconTw: {
size: '24px', // default <Icon> size applied
class: 'icon', // default <Icon> class applied
aliases: {
nuxt: 'logos:nuxt-icon',
},
},
})
アイコンのデフォルトサイズは24px
になり、nuxt
アイコンが利用可能になります。
<Icon name="nuxt" />
デフォルトでは、このモジュールは公式Iconify APIからアイコンを取得します。 iconTw.iconifyApiOptions.url
プロパティを独自のIconify APIに設定することで、この動作を変更できます。
iconTw.iconifyApiOptions.publicApiFallback
をtrue
に設定して、パブリックAPIをフォールバックとして使用することもできます(<Icon>
コンポーネントのみ、<IconCSS>
コンポーネントは対象外)
// app.config.ts
export default defineAppConfig({
iconTw: {
// ...
iconifyApiOptions: {
url: 'https://<your-api-url>',
publicApiFallback: true, // default: false
},
},
})
レンダリング関数
レンダリング関数(関数型コンポーネントを作成する場合に便利)でIcon
コンポーネントを使用できます。これを行うには、#components
からインポートします。
import { Icon } from '#components'
<MyIcon>
コンポーネントの例を参照してください
<script setup>
import { Icon } from '#components'
const MyIcon = h(Icon, { name: 'uil:twitter' })
</script>
<template>
<p><MyIcon /></p>
</template>
貢献 🙏
- このリポジトリをクローンします
pnpm install
を使用して依存関係をインストールします(corepack enable
でpnpm
をインストールします。詳細についてはこちらを参照してください)npm run dev:prepare
を実行して、タイプスタブを生成します。npm run dev
を使用して、開発モードでプレイグラウンドを開始します。
クレジット 💌
- オリジナルのNuxt Icon
- @egoist 氏のTailwind CSSアイコンプラグイン
- 以前のTailwindアイコンプラグインの試み(動作しましたが遅かった)
- 初期バージョンを作成した@benjamincanac氏
- Iconifyを作成した@cyberalien氏