UNPKG

@ark-ui/vue

Version:

A collection of unstyled, accessible UI components for Vue, utilizing state machines for seamless interaction.

103 lines (98 loc) 3.6 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const collection = require('@zag-js/collection'); const vue = require('vue'); function useListSelection(props) { const resolvedProps = vue.computed(() => { const { collection, selectionMode = "single", deselectable = true, initialSelectedValues = [], resetOnCollectionChange = false } = vue.toValue(props); return { collection, selectionMode, deselectable, initialSelectedValues, resetOnCollectionChange }; }); const createSelection = (values = []) => { const { selectionMode, deselectable } = resolvedProps.value; const selection2 = new collection.Selection(values); selection2.selectionMode = selectionMode; selection2.deselectable = deselectable; return selection2; }; const init = () => { const { initialSelectedValues } = resolvedProps.value; return createSelection(initialSelectedValues); }; const selection = vue.shallowRef(init()); vue.watch( [() => resolvedProps.value.collection.getValues(), () => resolvedProps.value.resetOnCollectionChange], ([, resetOnCollectionChange]) => { if (resetOnCollectionChange) { selection.value = createSelection(); } } ); const selectedValues = vue.computed(() => Array.from(selection.value)); const isEmpty = vue.computed(() => selection.value.isEmpty()); const firstSelectedValue = vue.computed(() => { const { collection } = resolvedProps.value; return selection.value.firstSelectedValue(collection); }); const lastSelectedValue = vue.computed(() => { const { collection } = resolvedProps.value; return selection.value.lastSelectedValue(collection); }); return { selectedValues, isEmpty, firstSelectedValue, lastSelectedValue, isSelected: (value) => { return selection.value.isSelected(value); }, isAllSelected: () => { const { collection } = resolvedProps.value; const allValues = collection.getValues(); return allValues.length > 0 && allValues.every((value) => selection.value.isSelected(value)); }, isSomeSelected: () => { const { collection } = resolvedProps.value; const allValues = collection.getValues(); return allValues.some((value) => selection.value.isSelected(value)); }, canSelect: (value) => { const { collection } = resolvedProps.value; return selection.value.canSelect(collection, value); }, select: (value, forceToggle) => { const { collection } = resolvedProps.value; selection.value = selection.value.select(collection, value, forceToggle); }, deselect: (value) => { selection.value = selection.value.deselect(value); }, toggle: (value) => { const { collection } = resolvedProps.value; selection.value = selection.value.toggleSelection(collection, value); }, replace: (value) => { const { collection } = resolvedProps.value; selection.value = selection.value.replaceSelection(collection, value); }, extend: (anchorValue, targetValue) => { const { collection } = resolvedProps.value; selection.value = selection.value.extendSelection(collection, anchorValue, targetValue); }, setSelectedValues: (values) => { selection.value = selection.value.setSelection(values); }, clear: () => { selection.value = selection.value.clearSelection(); }, resetSelection: () => { selection.value = createSelection(); } }; } exports.useListSelection = useListSelection;