import debounce from 'lodash-es/debounce'; import { watch, reactive, computed, defineAsyncComponent, } from 'vue'; import { useBlockSizing, } from '/@components/TreeElement'; import SbButton from './Button'; import './BlockOrdering.scss'; export default defineAsyncComponent({ name: 'sb-block-ordering', props: { sortable: { type: String, default: null, }, eventRemoveBlock: { type: Function, default: () => {} }, eventMoveUp: { type: Function, default: () => {} }, eventMoveDown: { type: Function, default: () => {} }, }, setup(props) { const styles = reactive({ top: '', right: '', }); const classes = computed(() => ({ 'sb-block-ordering': true, [`sb-block-ordering_${props.sortable}`]: !!props.sortable, })); const { editorDimensions, blockDimensions } = useBlockSizing(); const resetStyles = debounce(() => { if (!editorDimensions.value || !blockDimensions.value) { return; } const right = editorDimensions.value.width - blockDimensions.value.left; styles.top = `${blockDimensions.value.top}px`; styles.right = `${right}px`; }); watch(editorDimensions, resetStyles); watch(blockDimensions, resetStyles); watch(() => props.sortable, resetStyles); return () => (