@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
JavaScript
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;
;