Skip to content

Commit

Permalink
feat: migrate to @egoist/tailwindcss-icons
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamincanac committed Feb 17, 2023
1 parent b1d9e01 commit ee33522
Show file tree
Hide file tree
Showing 22 changed files with 178 additions and 180 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ jobs:
- name: Lint
run: yarn lint

# - name: Typecheck
# run: yarn typecheck
- name: Typecheck
run: yarn typecheck

- name: Build
run: yarn build
Expand Down
6 changes: 3 additions & 3 deletions docs/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
</NuxtLink>
</div>

<div class="flex items-center gap-3">
<div class="flex items-center">
<ColorScheme placeholder="" tag="span">
<UButton variant="transparent" :icon="colorMode.value === 'dark' ? 'heroicons-outline:moon' : 'heroicons-outline:sun'" @click="toggleDark" />
<UButton variant="transparent" :icon="colorMode.value === 'dark' ? 'i-heroicons-moon' : 'i-heroicons-sun'" @click="toggleDark" />
</ColorScheme>
<UButton to="https://github.com/nuxtlabs/ui" target="_blank" variant="transparent" icon="fa-brands:github" />
<UButton to="https://github.com/nuxtlabs/ui" target="_blank" variant="transparent" icon="i-mdi-github" />
</div>
</div>
</UContainer>
Expand Down
1 change: 1 addition & 0 deletions docs/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export default defineNuxtConfig({
},
preset: {
},
icons: ['heroicons', 'mdi'],
tailwindcss: {
theme: {
extend: {
Expand Down
26 changes: 14 additions & 12 deletions docs/pages/components/[component].vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<UButton
class="absolute top-0 right-0"
:icon="copied ? 'heroicons-outline:clipboard-check' : 'heroicons-outline:clipboard-copy'"
:icon="copied ? 'i-heroicons-clipboard-document-check' : 'i-heroicons-clipboard-document'"
variant="transparent"
size="sm"
:custom-class="copied ? '!text-green-500' : ''"
Expand Down Expand Up @@ -132,7 +132,9 @@ const defaultProps = {
title: 'A new software update is available. See what’s new in version 2.0.4.'
},
AlertDialog: {
title: 'Are you sure you want to close this modal?',
icon: 'i-heroicons-exclamation-triangle',
title: 'Deactivate account',
description: 'Are you sure you want to deactivate your account? All of your data will be permanently removed from our servers forever. This action cannot be undone.',
modelValue: alertDialog,
'onUpdate:modelValue': (v) => { alertDialog.value = v },
component: {
Expand All @@ -154,44 +156,44 @@ const defaultProps = {
items: [
[{
label: 'Edit',
icon: 'heroicons-solid:pencil'
icon: 'i-heroicons-pencil-square-20-solid'
}, {
label: 'Duplicate',
icon: 'heroicons-solid:duplicate'
icon: 'i-heroicons-document-duplicate-20-solid'
}],
[{
label: 'Archive',
icon: 'heroicons-solid:archive'
icon: 'i-heroicons-archive-box-20-solid'
}, {
label: 'Move',
icon: 'heroicons-solid:external-link'
icon: 'i-heroicons-arrow-right-circle-20-solid'
}],
[{
label: 'Delete',
icon: 'heroicons-solid:trash'
icon: 'i-heroicons-trash-20-solid'
}]
]
},
VerticalNavigation: {
links: [
{
label: 'Home',
icon: 'heroicons-outline:home',
icon: 'i-heroicons-home',
to: '/'
},
{
label: 'Examples',
icon: 'heroicons-outline:book-open',
icon: 'i-heroicons-book-open',
to: '/examples'
},
{
label: 'Migration',
icon: 'heroicons-outline:refresh',
icon: 'i-heroicons-arrow-path',
to: '/migration'
},
{
label: 'External link',
icon: 'heroicons-outline:external-link',
icon: 'i-heroicons-link',
to: 'https://google.fr',
target: '_blank'
}
Expand All @@ -207,7 +209,7 @@ const defaultProps = {
}]
},
Icon: {
name: 'heroicons-outline:bell'
name: 'i-heroicons-bell'
},
Input: {
name: 'input',
Expand Down
30 changes: 15 additions & 15 deletions docs/pages/examples.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
Button:
</div>

<UButton variant="primary" icon="heroicons-outline:mail">
<UButton variant="primary" icon="i-heroicons-envelope">
Button text
</UButton>
</div>
Expand All @@ -43,7 +43,7 @@
<UModal v-model="isModalOpen" @submit.prevent="onSubmit">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10">
<IconCSS name="heroicons-outline:exclamation" class="h-6 w-6 text-red-600" aria-hidden="true" />
<UIcon name="i-heroicons-exclamation" class="h-6 w-6 text-red-600" aria-hidden="true" />
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium u-text-gray-900">
Expand Down Expand Up @@ -73,7 +73,7 @@
</div>

<UDropdown v-slot="{ open }" :items="dropdownItems" placement="bottom-start">
<UButton variant="white" :icon="open ? 'heroicons-solid:chevron-up' : 'heroicons-solid:chevron-down'" trailing icon-class="transition">
<UButton variant="white" :icon="open ? 'i-heroicons-chevron-up-20-solid' : 'i-heroicons-chevron-down-20-solid'" trailing icon-class="transition">
Open menu!
</UButton>
</UDropdown>
Expand All @@ -98,7 +98,7 @@

<UPopover wrapper-class="inline-block relative">
<template #default="{ open }">
<UButton variant="secondary" :icon="open ? 'heroicons-solid:chevron-up' : 'heroicons-solid:chevron-down'" trailing icon-class="transition">
<UButton variant="secondary" :icon="open ? 'i-heroicons-chevron-up-20-solid-20' : 'i-heroicons-chevron-down-20-solid'" trailing icon-class="transition">
Open popover!
</UButton>
</template>
Expand All @@ -117,15 +117,15 @@
</div>

<UTooltip text="Hello tooltip!" :shortcuts="['', 'G']">
<IconCSS name="heroicons-outline:information-circle" class="w-6 h-6 u-text-gray-900 cursor-pointer" />
<UIcon name="i-heroicons-information-circle" class="w-6 h-6 u-text-gray-900 cursor-pointer" />
</UTooltip>
</div>

<div>
<div class="font-medium text-sm mb-1 u-text-gray-700">
Notifications:
</div>
<UButton icon="heroicons-outline:bell" variant="red" label="Trigger an error" @click="onNotificationClick" />
<UButton icon="i-heroicons-bell" variant="red" label="Trigger an error" @click="onNotificationClick" />
</div>

<div>
Expand Down Expand Up @@ -174,7 +174,7 @@
<UCard body-class="flex">
<div class="flex-1 px-4 py-5 sm:p-6 space-y-3">
<UFormGroup label="Email" name="email" required>
<UInput v-model="form.email" type="email" name="email" required icon="heroicons-outline:mail" />
<UInput v-model="form.email" type="email" name="email" required icon="i-heroicons-mail" />
</UFormGroup>

<UFormGroup label="Description" name="description">
Expand All @@ -189,7 +189,7 @@
placeholder="Select a person"
text-attribute="name"
value-attribute="id"
icon="heroicons-outline:user"
icon="i-heroicons-user"
/>
</UFormGroup>

Expand All @@ -198,7 +198,7 @@
</UFormGroup>

<UFormGroup label="Toggle" name="toggle">
<UToggle v-model="form.toggle" name="toggle" icon-off="heroicons-solid:x" icon-on="heroicons-solid:check" />
<UToggle v-model="form.toggle" name="toggle" icon-off="i-heroicons-x-mark-20-solid" icon-on="i-heroicons-check-20-solid" />
</UFormGroup>

<UFormGroup label="Notifications" label-class="text-base font-medium u-text-gray-900" description="How do you prefer to receive notifications?">
Expand Down Expand Up @@ -302,27 +302,27 @@ function onSubmit () {
const dropdownItems = [
[{
label: 'Edit',
icon: 'heroicons-solid:pencil',
icon: 'i-heroicons-pencil-square-20-solid',
click: (e) => {
e.preventDefault()
onClick()
}
}, {
label: 'Duplicate',
icon: 'heroicons-solid:duplicate'
icon: 'i-heroicons-document-duplicate-20-solid'
}],
[{
label: 'Archive',
icon: 'heroicons-solid:archive'
icon: 'i-heroicons-archive-box-20-solid'
}, {
label: 'Move',
icon: 'heroicons-solid:external-link',
icon: 'i-heroicons-arrow-right-circle-20-solid',
to: 'https://www.google.fr',
target: '_blank'
}],
[{
label: 'Delete',
icon: 'heroicons-solid:trash'
icon: 'i-heroicons-trash-20-solid'
}]
]
Expand All @@ -335,7 +335,7 @@ const customDropdownItems = [
}],
[{
label: 'About',
icon: 'heroicons-solid:plus',
icon: 'i-heroicons-plus-20-solid',
to: '/about'
}]
]
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@
"release": "yarn lint && standard-version && git push --follow-tags"
},
"dependencies": {
"@egoist/tailwindcss-icons": "^1.0.3",
"@headlessui/vue": "^1.7.10",
"@iconify/vue": "^4.1.0",
"@iconify-json/heroicons": "^1.1.9",
"@nuxt/kit": "^3.2.0",
"@nuxtjs/color-mode": "^3.2.0",
"@nuxtjs/tailwindcss": "^6.4.0",
Expand All @@ -40,10 +41,10 @@
"defu": "^6.1.2",
"fuse.js": "^6.6.2",
"lodash-es": "^4.17.21",
"nuxt-icon": "^0.3.2",
"tailwindcss": "^3.2.6"
},
"devDependencies": {
"@iconify-json/mdi": "^1.1.47",
"@nuxt/module-builder": "^0.2.1",
"@nuxtjs/eslint-config-typescript": "^12.0.0",
"@types/lodash-es": "^4.17.6",
Expand Down
12 changes: 8 additions & 4 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { defineNuxtModule, installModule, addComponentsDir, addImportsDir, addTe
import { defu } from 'defu'
import colors from 'tailwindcss/colors.js'
import type { Config } from 'tailwindcss'
import { iconsPlugin, getIconCollections } from '@egoist/tailwindcss-icons'
import { name, version } from '../package.json'
import { colorsAsRegex, excludeColors } from './runtime/utils/colors'
import defaultPreset from './runtime/presets/default'
Expand Down Expand Up @@ -39,6 +40,8 @@ export interface ModuleOptions {

colors?: ColorsOptions

icons: string[]

tailwindcss?: Partial<Config>
}

Expand All @@ -49,6 +52,7 @@ const defaults = {
primary: 'indigo',
gray: 'gray'
},
icons: ['heroicons'],
tailwindcss: {
theme: {}
}
Expand All @@ -72,7 +76,7 @@ export default defineNuxtModule<ModuleOptions>({
// Transpile runtime
const runtimeDir = resolve('./runtime')
nuxt.options.build.transpile.push(runtimeDir)
nuxt.options.build.transpile.push('@popperjs/core', '@headlessui/vue', '@iconify/vue')
nuxt.options.build.transpile.push('@popperjs/core', '@headlessui/vue')

// @ts-ignore
nuxt.hook('tailwindcss:config', function (tailwindConfig: TailwindConfig) {
Expand Down Expand Up @@ -108,6 +112,9 @@ export default defineNuxtModule<ModuleOptions>({
variants: ['focus']
}])

tailwindConfig.plugins = tailwindConfig.plugins || []
tailwindConfig.plugins.push(iconsPlugin({ collections: getIconCollections(options.icons) }))

const ui: object = defu(preset, defaultPreset(variantColors))

addTemplate({
Expand All @@ -121,9 +128,6 @@ export default defineNuxtModule<ModuleOptions>({
})
})

nuxt.options.appConfig.nuxtIcon = defu(nuxt.options.appConfig.nuxtIcon, { size: false })

await installModule('nuxt-icon')
await installModule('@nuxtjs/color-mode', { classSuffix: '' })
await installModule('@nuxtjs/tailwindcss', {
viewer: false,
Expand Down
5 changes: 3 additions & 2 deletions src/runtime/components/elements/Button.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
:aria-label="ariaLabel"
v-bind="buttonProps"
>
<IconCSS v-if="isLeading && leadingIconName" :name="leadingIconName" :class="leadingIconClass" aria-hidden="true" />
<Icon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="leadingIconClass" aria-hidden="true" />
<slot>
<span :class="[truncate ? 'text-left break-all line-clamp-1' : '', compact ? 'hidden sm:block' : '']">
<span :class="[labelCompact && 'hidden sm:block']">{{ label }}</span>
<span v-if="labelCompact" class="sm:hidden">{{ labelCompact }}</span>
</span>
</slot>
<IconCSS v-if="isTrailing && trailingIconName" :name="trailingIconName" :class="trailingIconClass" aria-hidden="true" />
<Icon v-if="isTrailing && trailingIconName" :name="trailingIconName" :class="trailingIconClass" aria-hidden="true" />
</component>
</template>

Expand All @@ -22,6 +22,7 @@ import { ref, computed, useSlots } from 'vue'
import type { PropType } from 'vue'
import type { RouteLocationNormalized, RouteLocationRaw } from 'vue-router'
import NuxtLink from '#app/components/nuxt-link'
import Icon from '../elements/Icon.vue'
import { classNames } from '../../utils'
import $ui from '#build/ui'
Expand Down
3 changes: 2 additions & 1 deletion src/runtime/components/elements/Dropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@click="item.click"
>
<slot :name="item.slot" :item="item">
<IconCSS v-if="item.icon" :name="item.icon" :class="[itemIconClass, item.iconClass]" />
<Icon v-if="item.icon" :name="item.icon" :class="[itemIconClass, item.iconClass]" />
<Avatar v-if="item.avatar" v-bind="{ size: 'xxs', ...item.avatar }" :class="itemAvatarClass" />

<span class="truncate">{{ item.label }}</span>
Expand Down Expand Up @@ -57,6 +57,7 @@ import type { RouteLocationNormalized } from 'vue-router'
import { ref, computed, onMounted } from 'vue'
import { defu } from 'defu'
import NuxtLink from '#app/components/nuxt-link'
import Icon from '../elements/Icon.vue'
import Avatar from '../elements/Avatar.vue'
import { classNames, omit } from '../../utils'
import { usePopper } from '../../composables/usePopper'
Expand Down
16 changes: 16 additions & 0 deletions src/runtime/components/elements/Icon.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<template>
<span :class="name" />
</template>

<script setup lang="ts">
defineProps({
name: {
type: String,
required: true
}
})
</script>

<script lang="ts">
export default { name: 'UIcon' }
</script>
Loading

1 comment on commit ee33522

@vercel
Copy link

@vercel vercel bot commented on ee33522 Feb 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

ui – ./

ui-git-dev-nuxtlabs.vercel.app
nuxthq-ui.vercel.app
ui-nuxtlabs.vercel.app

Please sign in to comment.