{"version":3,"file":"proxiedModel.mjs","names":["useToggleScope","computed","ref","toRaw","watch","getCurrentInstance","toKebabCase","useProxiedModel","props","prop","defaultValue","transformIn","arguments","length","undefined","v","transformOut","vm","internal","kebabProp","checkKebab","isControlled","_vm$vnode$props","_vm$vnode$props2","_vm$vnode$props3","_vm$vnode$props4","vnode","hasOwnProperty","concat","_vm$vnode$props5","_vm$vnode$props6","value","val","model","get","externalValue","set","internalValue","newValue","emit","Object","defineProperty"],"sources":["../../src/composables/proxiedModel.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, ref, toRaw, watch } from 'vue'\nimport { getCurrentInstance, toKebabCase } from '@/utils'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype InnerVal<T> = T extends any[] ? Readonly<T> : T\n\n// Composables\nexport function useProxiedModel<\n  Props extends object & {\n    [key in Prop as `onUpdate:${Prop}`]: ((val: any) => void) | undefined\n  },\n  Prop extends Extract<keyof Props, string>,\n  Inner = Props[Prop]\n>(\n  props: Props,\n  prop: Prop,\n  defaultValue?: Props[Prop],\n  transformIn: (value?: Props[Prop]) => Inner = (v: any) => v,\n  transformOut: (value: Inner) => Props[Prop] = (v: any) => v\n) {\n  const vm = getCurrentInstance('useProxiedModel')\n  const internal = ref(\n    props[prop] !== undefined ? props[prop] : defaultValue\n  ) as Ref<Props[Prop]>\n  const kebabProp = toKebabCase(prop)\n  const checkKebab = kebabProp !== prop\n\n  const isControlled = checkKebab\n    ? computed(() => {\n        void props[prop]\n        return !!(\n          (vm.vnode.props?.hasOwnProperty(prop) ||\n            vm.vnode.props?.hasOwnProperty(kebabProp)) &&\n          (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) ||\n            vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`))\n        )\n      })\n    : computed(() => {\n        void props[prop]\n        return !!(\n          vm.vnode.props?.hasOwnProperty(prop) &&\n          vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`)\n        )\n      })\n\n  useToggleScope(\n    () => !isControlled.value,\n    () => {\n      watch(\n        () => props[prop],\n        (val) => {\n          internal.value = val\n        }\n      )\n    }\n  )\n\n  const model = computed({\n    get(): any {\n      const externalValue = props[prop]\n      return transformIn(isControlled.value ? externalValue : internal.value)\n    },\n    set(internalValue) {\n      const newValue = transformOut(internalValue)\n      const value = toRaw(isControlled.value ? props[prop] : internal.value)\n      if (value === newValue || transformIn(value) === internalValue) {\n        return\n      }\n      internal.value = newValue\n      vm?.emit(`update:${prop}`, newValue)\n    },\n  }) as any as Ref<InnerVal<Inner>> & { readonly externalValue: Props[Prop] }\n\n  Object.defineProperty(model, 'externalValue', {\n    get: () => (isControlled.value ? props[prop] : internal.value),\n  })\n\n  return model\n}\n"],"mappings":"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"}