Skip to content

Button

🌏 Translated with the assistance of DeepSeek and ChatGPT

A common button, a control to trigger functions.

Button Themes

The button offers six themes: 'primary' (default), 'success', 'warning', 'danger', 'info', and 'sakura'.

<template>
	<px-space>
		<px-button>Primary</px-button>
		<px-button theme="success">Success</px-button>
		<px-button theme="warning">Warning</px-button>
		<px-button theme="danger">Danger</px-button>
		<px-button theme="info">Info</px-button>
		<px-button theme="sakura">Sakura</px-button>
	</px-space>
</template>

Button Variants

The button is available in four style variants: 'primary' (default), 'plain', 'outline', and 'text'.

<template>
	<px-space direction="vertical">
		<px-space v-for="variant in variants" :key="variant" style="margin-bottom: 8px">
			<px-button
				v-for="theme in themes"
				:key="theme"
				:variant="variant !== 'default' ? variant : undefined"
				:theme="theme !== 'default' ? theme : undefined"
				style="margin-right: 8px"
			>
				{{ variantLabels[variant] }}
			</px-button>
		</px-space>
	</px-space>
</template>

<script setup>
const variants = ['default', 'plain', 'outline', 'text']
const themes = ['default', 'success', 'warning', 'danger', 'info', 'sakura']
const variantLabels = {
	default: 'Primary',
	plain: 'Plain',
	outline: 'Outline',
	text: 'Text'
}
</script>

Button Shapes

The button comes in four shapes: 'default' (default), 'round', 'circle', and 'square'.

<template>
	<px-space>
		<px-button>Default</px-button>
		<px-button shape="round">Round</px-button>
		<px-button shape="circle">C</px-button>
		<px-button shape="square">S</px-button>
	</px-space>
</template>

Button Sizes

The button's style can be adjusted using the size prop, which offers three options: 'default' (default), 'small', and 'large'.

<template>
	<px-space>
		<px-button size="small">Small</px-button>
		<px-button>Default</px-button>
		<px-button size="large">Large</px-button>
	</px-space>
</template>

Disabled Status

disabled prop can disables the button.

<template>
	<px-button disabled>No Allow</px-button>
</template>

Loading Status

loading sets whether the button is in a loading state. When true, the button's native disabled attribute becomes "true" and the button will not respond to click events.

<template>
	<px-space>
		<px-button style="margin-right: 8px" loading>Loading</px-button>
		<px-button loading disabled>Loading</px-button>
	</px-space>
</template>

Button Icon

Set the button icon via the icon slot.

<template>
	<px-button>
		<template #icon>
			<IconMinds></IconMinds>
		</template>
		Icon
	</px-button>
</template>
<script setup lang="ts">
import { IconMinds } from '@pixelium/web-vue/icon-hn/es'
</script>

Full Width

Setting the block property makes the button take up the full line.

<template>
	<px-button block>Block</px-button>
</template>

Custom Color

Custom primary color: the component will generate a complete color palette based on it, and this palette takes precedence over the preset palettes provided by theme. It supports CSS-like strings such as 'rgb(r, g, b)' and 'rgba(r, g, b, a)', as well as 3-, 4-, 6-, and 8-digit hexadecimal values.

<template>
	<px-space>
		<px-button color="#409EFF">#409EFF</px-button>
		<px-button color="#FAE13C">#FAE13C</px-button>
		<px-button color="#E956AE">#E956AE</px-button>
		<px-button color="#909399">#909399</px-button>
	</px-space>
</template>

Rounded Corner Border

borderRadius sets the button's rounded corners, has a higher priority than shape, and behaves consistently with CSS border-radius.

Due to limited time and technical resources, custom border-radius still needs optimization, but it does not affect overall usability.

  • A single value or an array of length 1 → applies to all four corners simultaneously;
  • An array of length 2 → [top-left & bottom-right, top-right & bottom-left];
  • An array of length 3 → [top-left, top-right & bottom-left, bottom-right];
  • An array of length 4 → applies to the four corners in a clockwise order.
<template>
	<px-space>
		<px-button :border-radius="12">12</px-button>
		<px-button :border-radius="[12, 8]">[12, 8]</px-button>
		<px-button :border-radius="[12, 8, 20]">[12, 8, 20]</px-button>
		<px-button :border-radius="[20, 8, 20, 16]">[20, 8, 20, 16]</px-button>
	</px-space>
</template>

Button Group

Use the ButtonGroup component to group buttons together like this.

<template>
	<px-space direction="vertical">
		<px-button-group>
			<px-button>Primary</px-button>
			<px-button theme="sakura">Sakura</px-button>
			<px-button color="#E956AE" variant="plain">#E956AE</px-button>
			<px-button loading>Loading</px-button>
		</px-button-group>
		<px-button-group shape="round">
			<px-button>Primary</px-button>
			<px-button theme="sakura">Sakura</px-button>
			<px-button color="#E956AE" variant="plain">#E956AE</px-button>
			<px-button loading>Loading</px-button>
		</px-button-group>
		<px-button-group loading>
			<px-button>Primary</px-button>
			<px-button theme="sakura">Sakura</px-button>
			<px-button color="#E956AE" variant="plain">#E956AE</px-button>
			<px-button disabled>Loading</px-button>
		</px-button-group>
		<px-button-group variant="outline">
			<px-button>Primary</px-button>
			<px-button theme="sakura">Sakura</px-button>
			<px-button color="#E956AE" variant="plain">#E956AE</px-button>
			<px-button loading>Loading</px-button>
		</px-button-group>
		<px-button-group :border-radius="[20, 16, 20, 16]">
			<px-button>Primary</px-button>
			<px-button theme="sakura">Sakura</px-button>
			<px-button color="#E956AE" variant="plain">#E956AE</px-button>
			<px-button loading>Loading</px-button>
		</px-button-group>
	</px-space>
</template>

API

ButtonProps

AttributeTypeOptionalDefaultDescriptionVersion
borderRadiusNumberOrPercentage | NumberOrPercentage[]TrueCorner radius, takes precedence over shape and behaves like CSS border-radius. A single value or an array of length 1 → applies to all four corners simultaneously; an array of length 2 → [top-left & bottom-right, top-right & bottom-left]; an array of length 3 → [top-left, top-right & bottom-left, bottom-right]; an array of length 4 → applies to the four corners in a clockwise order.0.0.0-beta
shape'default' | 'round' | 'circle' | 'square'True'default'Button shape.0.0.0-beta
size'medium' | 'large' | 'small'True'medium'Button size.0.0.0-beta
disabledbooleanTruefalseWhether the button is disabled.0.0.0-beta
loadingbooleanTruefalseWhether the button is in a loading state.0.0.0-beta
variant'primary' | 'plain' | 'text' | 'outline'True'primary'Button style variant.0.0.0-beta
theme'primary' | 'sakura' | 'success' | 'warning' | 'danger' | 'info'True'primary'Button theme.0.0.0-beta
colorstringTrue0.0.0-beta
blockbooleanTruefalseWhether to take up the full line.0.0.0-beta
nativeType'button' | 'submit' | 'reset'True'button'Native HTML <button> type attribute.0.0.0-beta
autofocusbooleanTruefalseNative HTML <button> autofocus attribute.0.0.0-beta

ButtonEvents

EventParameterDescriptionVersion
clicke: MouseEventClick event.0.0.0-beta

ButtonSlots

SlotParameterDescriptionVersion
defaultThe button's content.0.0.0-beta
iconThe button's icon.0.0.0-beta

ButtonGroupProps

AttributeTypeOptionalDefaultDescriptionVersion
borderRadiusNumberOrPercentage | NumberOrPercentage[]TrueCorner radius, takes precedence over shape, overrides the borderRadius of Button child components; rounding only affects the outer borders on both sides of Button child components; behaves like CSS border-radius. A single value or an array of length 1 → applies to all four corners simultaneously; an array of length 2 → [top-left & bottom-right, top-right & bottom-left]; an array of length 3 → [top-left, top-right & bottom-left, bottom-right]; an array of length 4 → applies to the four corners in a clockwise order.0.0.0-beta
shape'default' | 'round'True'default'Button shape, overrides the shape of the Button child components, rounding only affects the outer borders on both sides of the Button child components.0.0.0-beta
size'medium' | 'large' | 'small'True'medium'Button size, overrides the size of the Button child components.0.0.0-beta
disabledbooleanTruefalseWhether to disable. The Button sub-component's disabled and this prop are OR-ed to decide if the sub-component is disabled.0.0.0-beta
loadingbooleanTruefalseWhether to show loading state. The Button sub-component's loading and this prop are OR-ed to decide if the sub-component is in loading state.0.0.0-beta
variant'primary' | 'plain' | 'text' | 'outline'TrueButton style variant. The Button sub-component's variant and this prop are OR-ed to decide the style variant of the sub-component.0.0.0-beta

ButtonGroupSlots

SlotParameterDescriptionVersion
defaultThe sub-buttons.0.0.0-beta

NumberOrPercentage

ts
export type NumberOrPercentage = number | `${number}%`