Skip to content
API 风格:

Badge ​

LhBadge displays a number or status dot in the top-right corner of an element.

Basic Usage ​

Basic Usage
5
vue
<script setup lang="ts">
import { LhBadge } from '@lh-ui/vue3'
</script>

<template>
  <LhBadge :value="5">
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
import { LhBadge } from '@lh-ui/vue3'

export default {
  components: { LhBadge },
}
</script>

<template>
  <LhBadge :value="5">
    <div>Target</div>
  </LhBadge>
</template>

Max Value ​

Custom Max Value
99+
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge :value="100" :max="99">
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge :value="100" :max="99">
    <div>Target</div>
  </LhBadge>
</template>

Dot Mode ​

is-dot shows a small dot instead of the value — useful for "has updates" hints. Use type to change its color.

Dot Mode
Messages
Todos
vue
<script setup lang="ts">
</script>

<template>
  <!-- Dot -->
  <LhBadge is-dot>
    <div>Target</div>
  </LhBadge>
  <!-- Dot (warning color) -->
  <LhBadge is-dot type="warning">
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Dot -->
  <LhBadge is-dot>
    <div>Target</div>
  </LhBadge>
  <!-- Dot (warning color) -->
  <LhBadge is-dot type="warning">
    <div>Target</div>
  </LhBadge>
</template>

Types ​

type switches the badge color scheme.

Types
primary
1
success
1
warning
1
info
1
vue
<script setup lang="ts">
</script>

<template>
  <!-- Primary -->
  <LhBadge :value="1" type="primary">
    <div>Target</div>
  </LhBadge>
  <!-- Success -->
  <LhBadge :value="1" type="success">
    <div>Target</div>
  </LhBadge>
  <!-- Warning -->
  <LhBadge :value="1" type="warning">
    <div>Target</div>
  </LhBadge>
  <!-- Info -->
  <LhBadge :value="1" type="info">
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Primary -->
  <LhBadge :value="1" type="primary">
    <div>Target</div>
  </LhBadge>
  <!-- Success -->
  <LhBadge :value="1" type="success">
    <div>Target</div>
  </LhBadge>
  <!-- Warning -->
  <LhBadge :value="1" type="warning">
    <div>Target</div>
  </LhBadge>
  <!-- Info -->
  <LhBadge :value="1" type="info">
    <div>Target</div>
  </LhBadge>
</template>

Offset, Zero and Custom Content ​

offset fine-tunes the badge position ([x, y] pixels); show-zero renders the badge even at zero; content replaces the number with custom text.

Offset / Zero / Content
offset
5
show-zero
0
content
New
vue
<script setup lang="ts">
</script>

<template>
  <!-- Offset -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>Target</div>
  </LhBadge>
  <!-- Show zero -->
  <LhBadge :value="0" show-zero>
    <div>Target</div>
  </LhBadge>
  <!-- Custom content -->
  <LhBadge value="New" content="New">
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Offset -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>Target</div>
  </LhBadge>
  <!-- Show zero -->
  <LhBadge :value="0" show-zero>
    <div>Target</div>
  </LhBadge>
  <!-- Custom content -->
  <LhBadge value="New" content="New">
    <div>Target</div>
  </LhBadge>
</template>
Dot Mode
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge is-dot>
    <div>Target</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge is-dot>
    <div>Target</div>
  </LhBadge>
</template>

Size ​

Size
5
5
5
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge size="small" :value="5">
    <div>Small</div>
  </LhBadge>
  <LhBadge size="medium" :value="5">
    <div>Medium</div>
  </LhBadge>
  <LhBadge size="large" :value="5">
    <div>Large</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge size="small" :value="5">
    <div>Small</div>
  </LhBadge>
  <LhBadge size="medium" :value="5">
    <div>Medium</div>
  </LhBadge>
  <LhBadge size="large" :value="5">
    <div>Large</div>
  </LhBadge>
</template>

Toggle Visibility ​

Toggle Visibility
10
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhBadge, LhButton } from '@lh-ui/vue3'

const badgeValue = ref(10)
const isHidden = ref(false)
</script>

<template>
  <LhBadge :value="badgeValue" :hidden="isHidden">
    <div>Target</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? 'Show' : 'Hide' }}
  </LhButton>
</template>
vue
<script>
import { LhBadge, LhButton } from '@lh-ui/vue3'

export default {
  components: { LhBadge, LhButton },
  data() {
    return {
      badgeValue: 10,
      isHidden: false,
    }
  },
}
</script>

<template>
  <LhBadge :value="badgeValue" :hidden="isHidden">
    <div>Target</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? 'Show' : 'Hide' }}
  </LhButton>
</template>

Type Definitions ​

The TypeScript type structures exported by this component (auto-extracted from packages/components/badge/src/types.ts and @lh-ui/share/core/* sources; click each entry to expand; see the Props table above for attribute descriptions):

LhBadgeProps
ts
export interface LhBadgeProps {
  type?: LhBadgeType
  value?: string | number
  size?: LhBadgeSize
  max?: number
  isDot?: boolean
  hidden?: boolean
  offset?: [number, number]
  showZero?: boolean
  content?: string
  sx?: LhSxProps
}
LhBadgeSize
ts
export type LhBadgeSize = LhComponentSize
LhBadgeOffset
ts
export type LhBadgeOffset = [number, number]
LhBadgeType (from @lh-ui/share/core/badge)
ts
export type LhBadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default'
LhComponentSize (from @lh-ui/share/core/shared)
ts
export type LhComponentSize = (typeof LH_SIZE_CONST)[keyof typeof LH_SIZE_CONST]

Props ​

PropDescriptionTypeDefault
typeBadge type"primary" | "success" | "warning" | "danger" | "info" | "default"'danger'
valueDisplay valuestring | number—
sizeSize"small" | "medium" | "large" | "mini" | "x-large"'medium'
maxMax valuenumber99
isDotDot modebooleanfalse
hiddenHiddenbooleanfalse
offsetOffset[number, number]—
showZeroShow zerobooleanfalse
contentCustom contentstring—
sxShorthand layout props (e.g. { mt: 2, w: '50%' }), applied as inline styles on the root elementLhSxProps—

Slots ​

SlotDescription
defaultTarget element

Accessibility ​

  • In dot mode (is-dot) the badge is purely decorative: it is marked aria-hidden and leaves the accessibility tree
  • In value mode the text stays in the tree, so screen readers can announce counts such as "99+"

Beauty of tradition, foundation of code