Skip to content
API 风格:

Popconfirm 確認バルーン ​

軽量な二次確認:トリガーの近くに確認バルーンをポップアップし、ダイアログを開く必要がありません。セマンティクスはブロッキング確認(role="alertdialog")で、開いたときフォーカスは「確認」ボタンに落ち、Tab は 2 つのボタンの間をループし、Escape はキャンセルとみなされます。

基本的な使い方 ​

削除確認
vue
<template>
  <LhPopconfirm title="このレコードを削除してもよろしいですか?" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">削除</LhButton>
  </LhPopconfirm>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const action = ref('')
function onConfirm() {
  action.value = '確認済み'
}
function onCancel() {
  action.value = 'キャンセル済み'
}
const pcVisible = ref(false)
</script>
vue
<script>
export default {
  data() {
    return { action: '', pcVisible: false }
  },
  methods: {
    onConfirm() {
      this.action = '確認済み'
    },
    onCancel() {
      this.action = 'キャンセル済み'
    },
  },
}
</script>

<template>
  <LhPopconfirm title="このレコードを削除してもよろしいですか?" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">削除</LhButton>
  </LhPopconfirm>
</template>

3 種類のニュアンス ​

info / warning / danger
vue
<script setup lang="ts">
</script>

<template>
  <!-- 情報ニュアンス -->
  <LhPopconfirm type="info" title="このレコードのアクセス履歴を表示しますか?">
    <LhButton>情報</LhButton>
  </LhPopconfirm>
  <!-- 警告ニュアンス -->
  <LhPopconfirm type="warning" title="この操作はすべてのメンバーに通知されます。">
    <LhButton type="warning">警告</LhButton>
  </LhPopconfirm>
  <!-- 危険ニュアンス -->
  <LhPopconfirm type="danger" title="削除後は復元できません。">
    <LhButton type="danger">危険</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- 情報ニュアンス -->
  <LhPopconfirm type="info" title="このレコードのアクセス履歴を表示しますか?">
    <LhButton>情報</LhButton>
  </LhPopconfirm>
  <!-- 警告ニュアンス -->
  <LhPopconfirm type="warning" title="この操作はすべてのメンバーに通知されます。">
    <LhButton type="warning">警告</LhButton>
  </LhPopconfirm>
  <!-- 危険ニュアンス -->
  <LhPopconfirm type="danger" title="削除後は復元できません。">
    <LhButton type="danger">危険</LhButton>
  </LhPopconfirm>
</template>

カスタムテキストと配置 ​

テキスト / 配置 / トリガー方式
vue
<script setup lang="ts">
</script>

<template>
  <!-- カスタムテキストと配置 -->
  <LhPopconfirm
    title="アーカイブ後はゴミ箱から復元できます。"
    confirm-text="アーカイブ"
    cancel-text="やめておく"
    placement="right"
  >
    <LhButton>カスタムテキスト</LhButton>
  </LhPopconfirm>
  <!-- ホバーでトリガー -->
  <LhPopconfirm title="ホバーするだけで確認できます。" trigger="hover" :show-after="0" placement="bottom">
    <LhButton>ホバーでトリガー</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- カスタムテキストと配置 -->
  <LhPopconfirm
    title="アーカイブ後はゴミ箱から復元できます。"
    confirm-text="アーカイブ"
    cancel-text="やめておく"
    placement="right"
  >
    <LhButton>カスタムテキスト</LhButton>
  </LhPopconfirm>
  <!-- ホバーでトリガー -->
  <LhPopconfirm title="ホバーするだけで確認できます。" trigger="hover" :show-after="0" placement="bottom">
    <LhButton>ホバーでトリガー</LhButton>
  </LhPopconfirm>
</template>

ボタンテキストはデフォルトで言語パック popconfirm.confirm / popconfirm.cancel を使用し、confirm-text / cancel-text で上書きできます。

アイコン、確認ボタンタイプと挙動スイッチ ​

show-icon で警告アイコンを表示、confirm-button-type で確認ボタンのメインタイプを変更;disabled でトリガーを無効化;v-model:visible で表示を制御;hide-after で遅延自動折りたたみ;popper-class / teleport-target でポップアップ層をカスタマイズ。

アイコンとボタンタイプ
vue
<script setup lang="ts">
import { ref } from 'vue'
const pcVisible = ref(false)
</script>

<template>
  <!-- アイコンと確認ボタンタイプ -->
  <LhPopconfirm title="このレコードを削除してもよろしいですか?" show-icon confirm-button-type="primary">
    <LhButton type="danger">アイコン付き</LhButton>
  </LhPopconfirm>
  <!-- 無効なトリガー -->
  <LhPopconfirm title="この操作は使用できません。" disabled>
    <LhButton disabled>無効</LhButton>
  </LhPopconfirm>
  <!-- 制御された表示と遅延折りたたみ -->
  <LhPopconfirm v-model:visible="pcVisible" title="制御されたバルーン" :hide-after="1000">
    <LhButton>{{ pcVisible ? '閉じる' : '開く' }}</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {
  data() {
    return { pcVisible: false }
  },
}
</script>

<template>
  <!-- アイコンと確認ボタンタイプ -->
  <LhPopconfirm title="このレコードを削除してもよろしいですか?" show-icon confirm-button-type="primary">
    <LhButton type="danger">アイコン付き</LhButton>
  </LhPopconfirm>
  <!-- 無効なトリガー -->
  <LhPopconfirm title="この操作は使用できません。" disabled>
    <LhButton disabled>無効</LhButton>
  </LhPopconfirm>
  <!-- 制御された表示と遅延折りたたみ -->
  <LhPopconfirm v-model:visible="pcVisible" title="制御されたバルーン" :hide-after="1000">
    <LhButton>{{ pcVisible ? '閉じる' : '開く' }}</LhButton>
  </LhPopconfirm>
</template>

Popconfirm API ​

Props ​

プロパティ説明型デフォルト値
type確認ニュアンス"info" | "warning" | "danger"'warning'
placement表示位置"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end"'top'
triggerトリガー方式"click" | "hover" | "focus" | "manual"'click'
title確認内容(content スロットでも可)string—
confirmText確認ボタンのテキスト(未指定時は言語パック popconfirm.confirm を使用)string—
cancelTextキャンセルボタンのテキスト(未指定時は言語パック popconfirm.cancel を使用)string—
confirmButtonType確認ボタンのタイプ"default" | "primary"'primary'
visible手動で制御する表示状態(v-model:visible)boolean—
disabled無効にするかboolean—
showIconニュアンスアイコンを表示するかbooleantrue
popperClassポップアップ層のカスタムクラス名string—
teleportTargetTeleport 先(セレクタまたは要素、デフォルトは body)string | HTMLElement'body'
showAfter遅延表示時間(ms)number—
hideAfter遅延非表示時間(ms)number—
themeVarsコンポーネントレベルのテーマ変数。ConfigProvider の設定を上書き{ [x: string]: string; }—
bgPatternコンポーネントレベルの背景紋様。ConfigProvider の設定を上書きstring—
sxsx クイックレイアウトプロパティ(トリガーのルート要素に作用)LhSxProps—

Events ​

イベント説明パラメータ
confirm確認ボタンをクリックしたあとに発生—
cancelキャンセルボタンをクリック、または Escape を押したあとに発生—
update:visible表示状態の変化(value: boolean)
show表示後に発生—
hide非表示後に発生—

Slots ​

スロット説明
defaultトリガーの内容
contentカスタム確認内容

Methods ​

メソッド説明
showプログラムによる表示
hideプログラムによる非表示
toggleプログラムによる切り替え

アクセシビリティ ​

  • ポップアップ層は role="alertdialog" + aria-modal="true"、トリガーに aria-haspopup / aria-expanded を付与
  • 開いたときフォーカスは「確認」ボタンに落ち、Tab は 2 つの操作ボタンの間をループし、閉じたあとトリガーにフォーカスを戻す
  • Escape はキャンセルとみなす(WAI-ARIA の alertdialog に準拠:Escape で閉じて否定と扱う)
  • 確認内容は aria-labelledby で紐付け;ニュアンスアイコンは装飾的(aria-hidden)

型定義 ​

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

LhPopconfirmProps
ts
/**
 * Popconfirm コンポーネント Props
 */
export interface LhPopconfirmProps {
  /** 確認ニュアンス */
  type?: LhPopconfirmType
  /** 表示位置 */
  placement?: LhPlacement
  /** トリガー方式 */
  trigger?: LhPopconfirmTrigger
  /** 確認内容(content スロットでも可) */
  title?: string
  /** 確認ボタンのテキスト(未指定時は言語パック popconfirm.confirm を使用) */
  confirmText?: string
  /** キャンセルボタンのテキスト(未指定時は言語パック popconfirm.cancel を使用) */
  cancelText?: string
  /** 確認ボタンのタイプ */
  confirmButtonType?: 'default' | 'primary'
  /** 手動で制御する表示状態(v-model:visible) */
  visible?: boolean
  /** 無効にするか */
  disabled?: boolean
  /** ニュアンスアイコンを表示するか */
  showIcon?: boolean
  /** ポップアップ層のカスタムクラス名 */
  popperClass?: string
  /** Teleport 先(セレクタまたは要素、デフォルトは body) */
  teleportTarget?: string | HTMLElement
  /** 遅延表示時間(ms) */
  showAfter?: number
  /** 遅延非表示時間(ms) */
  hideAfter?: number
  /** コンポーネントレベルのテーマ変数。ConfigProvider の設定を上書き */
  themeVars?: Record<string, string>
  /** コンポーネントレベルの背景紋様。ConfigProvider の設定を上書き */
  bgPattern?: string
  /** sx クイックレイアウトプロパティ(トリガーのルート要素に作用) */
  sx?: LhSxProps
}
LhPopconfirmPlacement (@lh-ui/share/core/shared/popper から)
ts
/**
 * Popper 配置エンジン(純関数、フレームワーク非依存)
 *
 * ポップアップ層(Tooltip / Popover / Popconfirm / Dropdown など)が共有する幾何計算:
 * 12 種類の placement 配置、主軸溢れ反転(flip)、交差軸の押し戻し(shift)。
 * 入力はすべて rect リテラルで DOM に触れず、そのまま単体テスト可能。
 */

/** ポップアップ層の方位(方向 + 整列) */
export type LhPlacement =
  | 'top'
  | 'top-start'
  | 'top-end'
  | 'bottom'
  | 'bottom-start'
  | 'bottom-end'
  | 'left'
  | 'left-start'
  | 'left-end'
  | 'right'
  | 'right-start'
  | 'right-end'
LhPopconfirmTrigger (@lh-ui/share/core/popconfirm (logic.ts) から)
ts
/** トリガー方式 */
export type LhPopconfirmTrigger = 'click' | 'hover' | 'focus' | 'manual'
LhPopconfirmType (@lh-ui/share/core/popconfirm (logic.ts) から)
ts
/** 確認ニュアンス */
export type LhPopconfirmType = 'info' | 'warning' | 'danger'

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