Документация/API
makeSelectionArea
Рамка выделения, которая выделяет перетаскиваемые элементы, которых касается, — потащите один из них, и поедет всё выделение.
Страница переведена ИИ и может содержать неточности. Читать английский оригинал
function makeSelectionArea( target: MaybeElementRef, options?: SelectionAreaOptions,): SelectionAreaReturn;Делает элемент областью выделения рамкой для перетаскиваемых элементов внутри него. Рамку рендерите сами: <div v-if="isSelecting" class="band" :style="style" />.
<script setup lang="ts">
const area = useTemplateRef<HTMLElement>('area');
const { isSelecting, style } = makeSelectionArea(area);
</script>
<template>
<div ref="area" class="area">
<!-- items -->
<div v-if="isSelecting" class="band" :style="style" />
</div>
</template>
Нажатие на пустом месте области начинает рамку. См. мульти-драг и выделение.
Загружаем демо…
<script setup lang="ts">
import { DnDProvider } from '@vue-dnd-kit/core';
import ShapeBoard from './ShapeBoard.vue';
</script>
<template>
<DnDProvider>
<ShapeBoard />
</DnDProvider>
</template>Опции
Опции makeSelectionArea. Рамка выделяет в выделение провайдера — то, которое читают мульти-драг и selected (useDnD().selection). modifier, strategy, accept и disabled принимают значение, ref или геттер (accept — значение или ref: функция здесь — это правило) и читаются, когда нажатие начинает рамку. Включение disabled также отменяет уже идущую рамку.
SelectionModifierзначение · ref · геттерКлавиши, которые должны быть зажаты, чтобы нажатие рисовало рамку. По умолчанию: никаких, рамку рисует любое нажатие на пустом месте.
SelectionStrategyзначение · ref · геттерПо умолчанию 'toggle'.
AcceptRuleзначение · refКакие перетаскиваемые элементы выделяет рамка; матчер такой же, как у целей.
booleanзначение · ref · геттерtrue: нажатия не рисуют рамку.
(ids: Key[]) => voidРамка закончилась: получает все id, выделенные сейчас.
Возвращает
Что возвращает makeSelectionArea.
ComputedRef<boolean>Рамка рисуется: в это время рендерите её.
ComputedRef<Record<string, string>>Стили для элемента прямоугольника выделения (absolute, относительно контейнера).
Значения
'toggle': элементы, которые пересекает рамка, меняют состояние на обратное тому, что было до рамки;'select': выделены только элементы внутри рамки.
type SelectionStrategy = 'toggle' | 'select'Клавиши (KeyboardEvent.key или .code), которые нужно удерживать, чтобы нажатие рисовало рамку: все до одной или 'some' — хотя бы одну из них.