Иконка-кнопка

Отображает кнопку только с иконкой для компактных действий.

Установка

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'Управляет квадратным размером и размером иконки.
toRouteLocationRaw-Отображает icon button как NuxtLink, если значение передано.
hrefstring-Отображает icon button как нативную ссылку, если значение передано.
target'_blank' | '_self' | '_parent' | '_top'-Target ссылки. Работает с href-ссылками.
tooltipstring-Контент tooltip. Значения могут быть ключами переводов.