Skip to content
API 风格:

Badge バッジ ​

LhBadge は未読メッセージ数やステータスマークを表示するために使用します。

基本的な使い方 ​

基本的な使い方
5
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge :value="5">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge :value="5">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>

最大値のカスタマイズ ​

最大値のカスタマイズ
99+
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge
    :value="100"
    :max="99"
  >
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge
    :value="100"
    :max="99"
  >
    <div>対象コンテンツ</div>
  </LhBadge>
</template>

ドット ​

is-dot は小さな赤いドットのみを表示し、具体的な数値は表示しません。「更新あり」タイプのヒントに適しており、type で色を変えられます。

ドット
メッセージ
タスク
vue
<script setup lang="ts">
</script>

<template>
  <!-- ドット -->
  <LhBadge is-dot>
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- ドット(警告色) -->
  <LhBadge is-dot type="warning">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- ドット -->
  <LhBadge is-dot>
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- ドット(警告色) -->
  <LhBadge is-dot type="warning">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>

オフセット・ゼロ値・カスタム内容 ​

offset はバッジの位置を微調整します([x, y] のピクセルオフセット)。show-zero はゼロ値も表示します。content は数値の代わりにカスタムテキストを表示します。

オフセット / ゼロ値 / カスタム内容
offset
5
show-zero
0
content
新
vue
<script setup lang="ts">
</script>

<template>
  <!-- オフセット -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- ゼロ値も表示 -->
  <LhBadge :value="0" show-zero>
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- カスタム内容 -->
  <LhBadge value="新" content="新">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- オフセット -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- ゼロ値も表示 -->
  <LhBadge :value="0" show-zero>
    <div>対象コンテンツ</div>
  </LhBadge>
  <!-- カスタム内容 -->
  <LhBadge value="新" content="新">
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
ドット
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge is-dot>
    <div>対象コンテンツ</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge is-dot>
    <div>対象コンテンツ</div>
  </LhBadge>
</template>

タイプ ​

タイプ
2
1
1
1
vue
<script setup lang="ts">
</script>

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

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

サイズ ​

サイズ
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>

表示・非表示の制御 ​

表示・非表示の制御
10
vue
<script setup lang="ts">
import { ref } from 'vue'

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

<template>
  <LhBadge
    :value="badgeValue"
    :hidden="isHidden"
  >
    <div>対象コンテンツ</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? '表示' : '非表示' }}
  </LhButton>
</template>
vue
<script>
import { ref } from 'vue'

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

<template>
  <LhBadge
    :value="badgeValue"
    :hidden="isHidden"
  >
    <div>対象コンテンツ</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? '表示' : '非表示' }}
  </LhButton>
</template>

型定義 ​

このコンポーネントが外部にエクスポートする TypeScript の型構造を以下に示します(packages/components/badge/src/types.ts および @lh-ui/share/core/* のソースから自動抽出。各エントリーをクリックすると完全な定義が表示されます。プロパティの説明は下の Props 表を参照してください):

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 クイックレイアウトプロパティ */
  sx?: LhSxProps
}
LhBadgeSize
ts
export type LhBadgeSize = LhComponentSize
LhBadgeOffset
ts
export type LhBadgeOffset = [number, number]
LhBadgeType (@lh-ui/share/core/badge より)
ts
export type LhBadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default'
LhComponentSize (@lh-ui/share/core/shared より)
ts
export type LhComponentSize = (typeof LH_SIZE_CONST)[keyof typeof LH_SIZE_CONST]

国際化 ​

バッジのテキストは LhConfigProvider と言語パックを組み合わせることで国際化切り替えを実現できます。

国際化
Messages
5
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhBadge, LhButton } from '@lh-ui/vue3'
import { jaJP } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

const locale = ref('ja-JP')
</script>

<template>
  <!-- ConfigProvider で言語パックを切り替え -->
  <LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
    <LhBadge :value="5">
      <div>{{ locale === 'zh-CN' ? '消息' : 'Messages' }}</div>
    </LhBadge>
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>
vue
<script>
import { LhConfigProvider, LhBadge, LhButton } from '@lh-ui/vue3'
import { jaJP } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

export default {
  components: { LhConfigProvider, LhBadge, LhButton },
  data() {
    return {
      locale: 'ja-JP',
      jaJP: jaJP,
      enUS: enUS,
    }
  },
}
</script>

<template>
  <!-- ConfigProvider で言語パックを切り替え -->
  <LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
    <LhBadge :value="5">
      <div>{{ locale === 'zh-CN' ? '消息' : 'Messages' }}</div>
    </LhBadge>
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>

API ​

プロパティ説明型デフォルト値
typeバッジのタイプ"primary" | "success" | "warning" | "danger" | "info" | "default"'danger'
value表示値string | number—
sizeサイズ"small" | "medium" | "large" | "mini" | "x-large"'medium'
max最大値number99
isDotドットモードbooleanfalse
hidden非表示にするかどうかbooleanfalse
offsetオフセット量[number, number]—
showZero0 を表示するかどうかbooleanfalse
contentカスタム内容string—
sxクイックレイアウトプロパティ(例: { mt: 2, w: '50%' })。インラインスタイルに変換されてルート要素に適用されますLhSxProps—

アクセシビリティ ​

  • ドットモード(is-dot)のバッジは純粋な装飾です。aria-hidden を付けてアクセシビリティツリーに入れません
  • 数値モードはテキスト内容を保持し、スクリーンリーダーが「99+」などのカウントを読み上げられます

国風の美で、コードの基を築く