{"version":3,"file":"VConfirmEdit.mjs","names":["VBtn","useLocale","useProxiedModel","computed","ref","toRaw","watchEffect","deepEqual","genericComponent","propsFactory","useRender","makeVConfirmEditProps","modelValue","color","String","cancelText","type","default","okText","VConfirmEdit","name","props","emits","cancel","save","value","setup","_ref","emit","slots","model","internalModel","structuredClone","t","isPristine","actionsUsed","actions","_createVNode","_Fragment"],"sources":["../../../src/components/VConfirmEdit/VConfirmEdit.tsx"],"sourcesContent":["// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useLocale } from '@/composables'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, toRaw, watchEffect } from 'vue'\nimport { deepEqual, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Ref, VNode } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport type VConfirmEditSlots<T> = {\n  default: {\n    model: Ref<T>\n    save: () => void\n    cancel: () => void\n    isPristine: boolean\n    get actions (): VNode\n  }\n}\n\nexport const makeVConfirmEditProps = propsFactory({\n  modelValue: null,\n  color: String,\n  cancelText: {\n    type: String,\n    default: '$vuetify.confirmEdit.cancel',\n  },\n  okText: {\n    type: String,\n    default: '$vuetify.confirmEdit.ok',\n  },\n}, 'VConfirmEdit')\n\nexport const VConfirmEdit = genericComponent<new <T> (\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n    'onSave'?: (value: T) => void\n  },\n  slots: VConfirmEditSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VConfirmEdit',\n\n  props: makeVConfirmEditProps(),\n\n  emits: {\n    cancel: () => true,\n    save: (value: any) => true,\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const internalModel = ref()\n    watchEffect(() => {\n      internalModel.value = structuredClone(toRaw(model.value))\n    })\n\n    const { t } = useLocale()\n\n    const isPristine = computed(() => {\n      return deepEqual(model.value, internalModel.value)\n    })\n\n    function save () {\n      model.value = internalModel.value\n      emit('save', internalModel.value)\n    }\n\n    function cancel () {\n      internalModel.value = structuredClone(toRaw(model.value))\n      emit('cancel')\n    }\n\n    let actionsUsed = false\n    useRender(() => {\n      const actions = (\n        <>\n          <VBtn\n            disabled={ isPristine.value }\n            variant=\"text\"\n            color={ props.color }\n            onClick={ cancel }\n            text={ t(props.cancelText) }\n          />\n\n          <VBtn\n            disabled={ isPristine.value }\n            variant=\"text\"\n            color={ props.color }\n            onClick={ save }\n            text={ t(props.okText) }\n          />\n        </>\n      )\n      return (\n        <>\n          {\n            slots.default?.({\n              model: internalModel,\n              save,\n              cancel,\n              isPristine: isPristine.value,\n              get actions () {\n                actionsUsed = true\n                return actions\n              },\n            })\n          }\n\n          { !actionsUsed && actions }\n        </>\n      )\n    })\n\n    return {\n      save,\n      cancel,\n      isPristine,\n    }\n  },\n})\n\nexport type VConfirmEdit = InstanceType<typeof VConfirmEdit>\n"],"mappings":";AAAA;AAAA,SACSA,IAAI,6BAEb;AAAA,SACSC,SAAS;AAAA,SACTC,eAAe,8CAExB;AACA,SAASC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAAA,SAC9CC,SAAS,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAE7D;AAcA,OAAO,MAAMC,qBAAqB,GAAGF,YAAY,CAAC;EAChDG,UAAU,EAAE,IAAI;EAChBC,KAAK,EAAEC,MAAM;EACbC,UAAU,EAAE;IACVC,IAAI,EAAEF,MAAM;IACZG,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNF,IAAI,EAAEF,MAAM;IACZG,OAAO,EAAE;EACX;AACF,CAAC,EAAE,cAAc,CAAC;AAElB,OAAO,MAAME,YAAY,GAAGX,gBAAgB,CAOG,CAAC,CAAC;EAC/CY,IAAI,EAAE,cAAc;EAEpBC,KAAK,EAAEV,qBAAqB,CAAC,CAAC;EAE9BW,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAM,IAAI;IAClBC,IAAI,EAAGC,KAAU,IAAK,IAAI;IAC1B,mBAAmB,EAAGA,KAAU,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEL,KAAK,EAAAM,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,KAAK,GAAG5B,eAAe,CAACmB,KAAK,EAAE,YAAY,CAAC;IAClD,MAAMU,aAAa,GAAG3B,GAAG,CAAC,CAAC;IAC3BE,WAAW,CAAC,MAAM;MAChByB,aAAa,CAACN,KAAK,GAAGO,eAAe,CAAC3B,KAAK,CAACyB,KAAK,CAACL,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM;MAAEQ;IAAE,CAAC,GAAGhC,SAAS,CAAC,CAAC;IAEzB,MAAMiC,UAAU,GAAG/B,QAAQ,CAAC,MAAM;MAChC,OAAOI,SAAS,CAACuB,KAAK,CAACL,KAAK,EAAEM,aAAa,CAACN,KAAK,CAAC;IACpD,CAAC,CAAC;IAEF,SAASD,IAAIA,CAAA,EAAI;MACfM,KAAK,CAACL,KAAK,GAAGM,aAAa,CAACN,KAAK;MACjCG,IAAI,CAAC,MAAM,EAAEG,aAAa,CAACN,KAAK,CAAC;IACnC;IAEA,SAASF,MAAMA,CAAA,EAAI;MACjBQ,aAAa,CAACN,KAAK,GAAGO,eAAe,CAAC3B,KAAK,CAACyB,KAAK,CAACL,KAAK,CAAC,CAAC;MACzDG,IAAI,CAAC,QAAQ,CAAC;IAChB;IAEA,IAAIO,WAAW,GAAG,KAAK;IACvBzB,SAAS,CAAC,MAAM;MACd,MAAM0B,OAAO,GAAAC,YAAA,CAAAC,SAAA,SAAAD,YAAA,CAAArC,IAAA;QAAA,YAGIkC,UAAU,CAACT,KAAK;QAAA;QAAA,SAEnBJ,KAAK,CAACR,KAAK;QAAA,WACTU,MAAM;QAAA,QACTU,CAAC,CAACZ,KAAK,CAACN,UAAU;MAAC,UAAAsB,YAAA,CAAArC,IAAA;QAAA,YAIfkC,UAAU,CAACT,KAAK;QAAA;QAAA,SAEnBJ,KAAK,CAACR,KAAK;QAAA,WACTW,IAAI;QAAA,QACPS,CAAC,CAACZ,KAAK,CAACH,MAAM;MAAC,UAG3B;MACD,OAAAmB,YAAA,CAAAC,SAAA,SAGMT,KAAK,CAACZ,OAAO,GAAG;QACda,KAAK,EAAEC,aAAa;QACpBP,IAAI;QACJD,MAAM;QACNW,UAAU,EAAEA,UAAU,CAACT,KAAK;QAC5B,IAAIW,OAAOA,CAAA,EAAI;UACbD,WAAW,GAAG,IAAI;UAClB,OAAOC,OAAO;QAChB;MACF,CAAC,CAAC,EAGF,CAACD,WAAW,IAAIC,OAAO;IAG/B,CAAC,CAAC;IAEF,OAAO;MACLZ,IAAI;MACJD,MAAM;MACNW;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}