Components/Transfer
Universal Component

Transfer

Move and filter items between two lists

This page was migrated by AI, please review carefully

Migration is complete, but please validate against source code and manual review.

Transfer

TxTransfer moves entries between a source list and a target list. It is useful for permission assignment, channel selection, and member grouping. The component is controlled, so the host keeps selected keys through v-model.

Basic Usage

Filterable transfer

When filterable is enabled, both panels show a filter input. Use emptyText to localize the empty state.

Demo will load when visible.
<script setup lang="ts">
import { ref } from 'vue'

const selected = ref<Array<string | number>>(['release'])
const data = [
  { key: 'release', label: 'Release channel' },
  { key: 'beta', label: 'Beta channel' },
  { key: 'snapshot', label: 'Snapshot channel' },
  { key: 'internal', label: 'Internal rollout', disabled: true },
]
</script>

<template>
  <TxTransfer
    v-model="selected"
    :data="data"
    :titles="['Available channels', 'Selected']"
    filterable
    filter-placeholder="Filter channels"
    empty-text="No items"
    add-aria-label="Add selected channels"
    remove-aria-label="Remove selected channels"
  />
</template>

API (Lite)

PropertyTypeDefaultDescription
modelValueKeys shown in the target list
dataComplete item list with key, label, and optional disabled
titlesSource and target panel titles
filterableWhether to show filter inputs
filterPlaceholderPlaceholder for the filter input
emptyTextText shown when a panel is empty
addAriaLabelAccessible label for the add action button
removeAriaLabelAccessible label for the remove action button
targetOrderoriginalpushSort target items by original data order or append order

Events

EventPayloadDescription
update:modelValueArray<string | number>Selected keys update
changeArray<string | number>Selected keys changed

Source

View source
packages/tuffex/packages/components/src/transfer/index.ts