Иконка-кнопка
Отображает кнопку только с иконкой для компактных действий.
Установка
npx alixan-ui-nuxt add icon-buttonИспользование
IconButton использует ту же систему variant и color, что и Button, но сохраняет квадратную форму для действий только с иконкой.
Заполненный
Контурный
Прозрачный
<script setup lang="ts">
import { ArrowUpRight } from '@lucide/vue'
import IconButton from '@/components/ui/icon-button/IconButton.vue'
</script>
<template>
<div class="space-y-4">
<div class="flex flex-wrap items-center gap-2">
<IconButton variant="filled" color="default">
<ArrowUpRight />
</IconButton>
<IconButton variant="filled" color="primary">
<ArrowUpRight />
</IconButton>
<IconButton variant="filled" color="secondary">
<ArrowUpRight />
</IconButton>
<IconButton variant="filled" color="destructive">
<ArrowUpRight />
</IconButton>
</div>
<div class="flex flex-wrap items-center gap-2">
<IconButton variant="outlined" color="default">
<ArrowUpRight />
</IconButton>
<IconButton variant="outlined" color="primary">
<ArrowUpRight />
</IconButton>
<IconButton variant="outlined" color="secondary">
<ArrowUpRight />
</IconButton>
<IconButton variant="outlined" color="destructive">
<ArrowUpRight />
</IconButton>
</div>
<div class="flex flex-wrap items-center gap-2">
<IconButton variant="ghost" color="default">
<ArrowUpRight />
</IconButton>
<IconButton variant="ghost" color="primary">
<ArrowUpRight />
</IconButton>
<IconButton variant="ghost" color="secondary">
<ArrowUpRight />
</IconButton>
<IconButton variant="ghost" color="destructive">
<ArrowUpRight />
</IconButton>
</div>
</div>
</template>Размер
<script setup lang="ts">
import { ArrowUpRight } from '@lucide/vue'
import IconButton from '@/components/ui/icon-button/IconButton.vue'
</script>
<template>
<div class="flex items-center gap-2">
<IconButton size="sm">
<ArrowUpRight />
</IconButton>
<IconButton>
<ArrowUpRight />
</IconButton>
<IconButton size="lg">
<ArrowUpRight />
</IconButton>
</div>
</template>Загрузка
IconButton не включает inline spinner. Inline loading может оставить пользователю возможность уйти со страницы и потерять контекст действия. Используйте global loader, когда операция должна восприниматься как одно блокирующее действие.
<script setup lang="ts">
import { ArrowUpRight } from '@lucide/vue'
const loader = useGlobalLoader()
const save = () => {
loader.show({ label: 'Saving action...' })
window.setTimeout(() => {
loader.hide()
}, 3000)
}
</script>
<template>
<IconButton @click="save">
<ArrowUpRight />
</IconButton>
</template>Отключенное состояние
Не делайте действие с иконкой тихо недоступным. Оставьте его активным, а затем покажите warning dialog с объяснением, что нужно сделать пользователю.
<script setup lang="ts">
import { ArrowUpRight } from '@lucide/vue'
const dialog = useDialog()
const openAlert = () => {
dialog.open(AlertDialog, {
width: '360px',
height: '280px',
data: {
title: 'componentDocs.iconButton.actionUnavailable',
description: 'componentDocs.iconButton.exportUnavailable',
buttonLabel: 'componentDocs.iconButton.gotIt',
},
})
}
</script>
<template>
<IconButton variant="outlined" @click="openAlert">
<ArrowUpRight />
</IconButton>
</template>Справочник API
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
| variant | 'filled' | 'outlined' | 'ghost' | 'ghost' | Визуальный стиль icon button. Ghost используется по умолчанию. |
| color | 'default' | 'primary' | 'secondary' | 'destructive' | 'default' | Цветовой intent. |
| size | 'sm' | 'md' | 'lg' | 'md' | Управляет квадратным размером и размером иконки. |
| to | RouteLocationRaw | - | Отображает icon button как NuxtLink, если значение передано. |
| href | string | - | Отображает icon button как нативную ссылку, если значение передано. |
| target | '_blank' | '_self' | '_parent' | '_top' | - | Target ссылки. Работает с href-ссылками. |
| tooltip | string | - | Контент tooltip. Значения могут быть ключами переводов. |