UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 4.76 kB
{"version":3,"file":"proxiedModel.mjs","names":["computed","ref","toRaw","watch","getCurrentInstance","toKebabCase","useToggleScope","useProxiedModel","props","prop","defaultValue","transformIn","v","transformOut","vm","internal","undefined","kebabProp","checkKebab","isControlled","vnode","hasOwnProperty","value","val","model","get","set","internalValue","newValue","emit","Object","defineProperty"],"sources":["../../src/composables/proxiedModel.ts"],"sourcesContent":["// Utilities\nimport { computed, ref, toRaw, watch } from 'vue'\nimport { getCurrentInstance, toKebabCase } from '@/util'\nimport { useToggleScope } from '@/composables/toggleScope'\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 & { [key in Prop as `onUpdate:${Prop}`]: ((val: any) => void) | undefined },\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(props[prop] !== undefined ? props[prop] : defaultValue) 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) || vm.vnode.props?.hasOwnProperty(kebabProp)) &&\n (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) || vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`))\n )\n })\n : computed(() => {\n void props[prop]\n return !!(vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`))\n })\n\n useToggleScope(() => !isControlled.value, () => {\n watch(() => props[prop], val => {\n internal.value = val\n })\n })\n\n const model = computed({\n get (): any {\n return transformIn(isControlled.value ? props[prop] : 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":"AAAA;AACA,SAASA,QAAQ,EAAEC,GAAG,EAAEC,KAAK,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,kBAAkB,EAAEC,WAAW;AAAA,SAC/BC,cAAc,6BAEvB;AAKA;AACA,OAAO,SAASC,eAAe,CAK7BC,KAAY,EACZC,IAAU,EACVC,YAA0B,EAG1B;EAAA,IAFAC,WAA2C,uEAAIC,CAAM,IAAKA,CAAC;EAAA,IAC3DC,YAA2C,uEAAID,CAAM,IAAKA,CAAC;EAE3D,MAAME,EAAE,GAAGV,kBAAkB,CAAC,iBAAiB,CAAC;EAChD,MAAMW,QAAQ,GAAGd,GAAG,CAACO,KAAK,CAACC,IAAI,CAAC,KAAKO,SAAS,GAAGR,KAAK,CAACC,IAAI,CAAC,GAAGC,YAAY,CAAqB;EAChG,MAAMO,SAAS,GAAGZ,WAAW,CAACI,IAAI,CAAC;EACnC,MAAMS,UAAU,GAAGD,SAAS,KAAKR,IAAI;EAErC,MAAMU,YAAY,GAAGD,UAAU,GAC3BlB,QAAQ,CAAC,MAAM;IACf,KAAKQ,KAAK,CAACC,IAAI,CAAC;IAChB,OAAO,CAAC,EACN,CAACK,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAACZ,IAAI,CAAC,IAAIK,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAACJ,SAAS,CAAC,MACjFH,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAAE,YAAWZ,IAAK,EAAC,CAAC,IAAIK,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAAE,YAAWJ,SAAU,EAAC,CAAC,CAAC,CAChH;EACH,CAAC,CAAC,GACAjB,QAAQ,CAAC,MAAM;IACf,KAAKQ,KAAK,CAACC,IAAI,CAAC;IAChB,OAAO,CAAC,EAAEK,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAACZ,IAAI,CAAC,IAAIK,EAAE,CAACM,KAAK,CAACZ,KAAK,EAAEa,cAAc,CAAE,YAAWZ,IAAK,EAAC,CAAC,CAAC;EACvG,CAAC,CAAC;EAEJH,cAAc,CAAC,MAAM,CAACa,YAAY,CAACG,KAAK,EAAE,MAAM;IAC9CnB,KAAK,CAAC,MAAMK,KAAK,CAACC,IAAI,CAAC,EAAEc,GAAG,IAAI;MAC9BR,QAAQ,CAACO,KAAK,GAAGC,GAAG;IACtB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMC,KAAK,GAAGxB,QAAQ,CAAC;IACrByB,GAAG,GAAS;MACV,OAAOd,WAAW,CAACQ,YAAY,CAACG,KAAK,GAAGd,KAAK,CAACC,IAAI,CAAC,GAAGM,QAAQ,CAACO,KAAK,CAAC;IACvE,CAAC;IACDI,GAAG,CAAEC,aAAa,EAAE;MAClB,MAAMC,QAAQ,GAAGf,YAAY,CAACc,aAAa,CAAC;MAC5C,MAAML,KAAK,GAAGpB,KAAK,CAACiB,YAAY,CAACG,KAAK,GAAGd,KAAK,CAACC,IAAI,CAAC,GAAGM,QAAQ,CAACO,KAAK,CAAC;MACtE,IAAIA,KAAK,KAAKM,QAAQ,IAAIjB,WAAW,CAACW,KAAK,CAAC,KAAKK,aAAa,EAAE;QAC9D;MACF;MACAZ,QAAQ,CAACO,KAAK,GAAGM,QAAQ;MACzBd,EAAE,EAAEe,IAAI,CAAE,UAASpB,IAAK,EAAC,EAAEmB,QAAQ,CAAC;IACtC;EACF,CAAC,CAA0E;EAE3EE,MAAM,CAACC,cAAc,CAACP,KAAK,EAAE,eAAe,EAAE;IAC5CC,GAAG,EAAE,MAAMN,YAAY,CAACG,KAAK,GAAGd,KAAK,CAACC,IAAI,CAAC,GAAGM,QAAQ,CAACO;EACzD,CAAC,CAAC;EAEF,OAAOE,KAAK;AACd"}