import { computed, ref, toValue, type MaybeRefOrGetter } from 'vue'; const serializeDirtyValue = (value: T): string => JSON.stringify(toValue(value)); export const useDirtyState = (source: MaybeRefOrGetter) => { const snapshot = ref(''); const markClean = (): void => { snapshot.value = serializeDirtyValue(toValue(source)); }; const isDirty = computed(() => { return snapshot.value !== serializeDirtyValue(toValue(source)); }); return { isDirty, markClean, }; };