{"version":3,"sources":["jsdelivr-header.js","/npm/vue-imask@7.6.1/src/props.ts","/npm/vue-imask@7.6.1/src/composable.ts","/npm/vue-imask@7.6.1/src/utils.ts","/npm/vue-imask@7.6.1/src/component3-composition.ts","/npm/vue-imask@7.6.1/src/component2.ts","/npm/vue-imask@7.6.1/src/component.ts","/npm/vue-imask@7.6.1/src/directive.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,4XCHA,EAAe,CAEb,UAAM,EACN,QAAS,SACT,YAAa,SACb,SAAU,SACV,OAAQ,SACR,UAAW,CACT,KAAM,QACN,UAAU,EACV,aAAS,GAEX,MAAO,CACL,UAAU,EACV,aAAS,EACT,UAAY,GAAmB,CAAC,SAAU,UAAU,SAAS,IAAqC,kBAAV,GAE1F,YAAa,CAAE,KAAM,QAAS,UAAU,EAAO,aAAS,GAGxD,gBAAiB,OACjB,YAAa,OACb,KAAM,CAAE,KAAM,QAAS,UAAU,EAAO,aAAS,GACjD,YAAa,OACb,OAAQ,OAGR,KAAM,MAGN,UAAW,OACX,KAAM,OACN,GAAI,OAGJ,QAAS,OACT,OAAQ,SACR,MAAO,SACP,QAAS,CACP,UAAU,EACV,aAAS,EACT,UAAY,GAA6B,QAAV,GAAoC,kBAAV,GAI3D,MAAO,OACP,mBAAoB,OACpB,WAAY,MACZ,MAAO,OACP,eAAgB,CACd,KAAM,QACN,UAAU,EACV,aAAS,GAEX,mBAAoB,CAClB,KAAM,QACN,UAAU,EACV,aAAS,GAEX,IAAK,CAAC,OAAQ,MACd,IAAK,CAAC,OAAQ,MAGd,SAAU,UCtCZ,SAAS,EAGN,EAAuB,GAQxB,IAR0B,KACxB,EAAI,SAAE,EAAQ,WAAE,EAAU,aAAE,EAAY,qBAAE,EAAoB,kBAAE,QACzC,IAAA,EAAC,GAAE,EAO5B,MAAM,EAAU,QAAM,GAAS,EAAQ,MAAI,GACrC,EAAmC,QACnC,EAAyC,QACzC,EAAwC,MAAI,IAC5C,EAAkD,MAAI,IACtD,EAA4C,QAClD,IAAI,EACA,EAA2D,EAAO,MAClE,EAA2E,EAAS,MACpF,EAAqE,EAAM,MAE/E,SAAS,IACP,EAA0B,EAAM,MAAS,EAAK,MAA0B,WACxE,EAA6B,EAAS,MAAS,EAAK,MAA0B,cAC9E,EAAqB,EAAO,MAAS,EAAK,MAA0B,KACtE,CAEA,SAAS,EAAW,GAClB,IAEI,IACF,EAAK,SAAU,EAAO,MAAO,GAC7B,EAAK,gBAAiB,EAAO,MAAO,GACpC,EAAK,eAAgB,EAAM,MAAO,GAClC,EAAK,kBAAmB,EAAS,MAAO,IAE1C,WAAW,EACb,CAEA,SAAS,EAAa,GAChB,IACF,EAAK,WAAa,EAAK,MAA0B,MAAO,GACxD,EAAK,kBAAoB,EAAK,MAA0B,MAAO,GAC/D,EAAK,iBAAmB,EAAK,MAA0B,WAAY,GACnE,EAAK,oBAAsB,EAAK,MAA0B,cAAe,IAE3E,WAAa,EACf,CAEA,MAAM,EAAsB,KACrB,EAAK,YAA4B,IAAnB,EAAS,QAExB,IAA+B,EAAS,QAC1C,EAAK,MAAM,cAAgB,EAAS,MAChC,EAAK,MAAM,gBAAkB,EAAS,OAAO,KAEnD,OAA6B,EAAS,EAExC,QAAM,EAAU,GAEhB,MAAM,EAAoB,KACnB,EAAK,YAA0B,IAAjB,EAAO,QAEtB,IAAuB,EAAO,QAChC,EAAK,MAAM,MAAQ,EAAO,MACtB,EAAK,MAAM,QAAU,EAAO,OAAO,KAEzC,OAAqB,EAAS,EAEhC,QAAM,EAAQ,GAEd,MAAM,EAAmB,KAClB,EAAK,YAAyB,IAAhB,EAAM,QAErB,IAA4B,EAAM,QACpC,EAAK,MAAM,WAAa,EAAM,MACzB,EAAK,MAAM,OAAO,iBAAiB,EAAM,QAAQ,KAExD,OAA0B,EAAS,EAKrC,SAAS,IACP,EAAM,EAAG,MACT,MAAM,EAAS,EAAO,MAEjB,GAAQ,WAAQ,OAErB,EAAK,MAAQ,UAAM,EAAK,QAEH,IAAjB,IAA4B,EAAO,MAAQ,QAClB,IAAzB,IAAoC,EAAS,MAAQ,QAC/B,IAAtB,IAAiC,EAAM,MAAQ,GAEnD,IACA,IACA,IAEA,IAEA,EAAK,MAAM,GAAG,SAAU,GAAW,GAAG,WAAY,GACpD,CAEA,SAAS,IAAgB,IAAA,EACb,OAAV,EAAA,EAAK,QAAL,EAAY,UACZ,EAAK,WAAQ,CACf,CAmBA,OA9CA,QAAM,EAAO,GA6Bb,YAAU,GACV,cAAY,GAEZ,QAAM,CAAC,EAAI,IAAS,KAClB,MAAM,EAAS,EAAG,MACZ,EAAS,EAAO,MAEjB,WAAQ,MAAQ,IAAW,GAAK,IACjC,IACG,EAAK,MAGR,EAAK,MAAM,cAAc,GAFzB,IAIJ,IAGK,CACL,KACA,KAAM,WAAS,GACf,SACA,WACA,QAEJ,CClKA,SAAS,EAGN,EAAc,GASf,OARA,EAAQ,IAAI,GAGX,OAAO,KAAK,GACV,SAAQ,UACa,IAAhB,EAAM,IAAuB,EAAQ,SAAS,YAAc,EAAM,EAAK,IAGxE,CACT,CCEA,MAAM,EAAc,CAAC,QAAS,WAAY,QAAS,cAGnD,IAAA,EAAe,kBAA2B,CACxC,KAAM,cACN,cAAc,EAEd,MAAO,CAEL,WAAY,OACZ,MAAO,OACP,SAAU,OACV,MAAO,CAAE,UAAW,KAAM,MAEvB,GAGL,MAAO,CACL,oBACA,gBACA,eACA,kBACA,eACA,SACA,eACA,gBACA,kBACA,eACA,WACA,iBACA,kBACA,oBACA,kBAGF,MAAO,EAAK,GAAmB,IAAjB,MAAE,EAAK,KAAE,GAAM,EAC3B,MAAM,GAAE,EAAE,KAAE,EAAI,OAAE,EAAM,SAAE,EAAQ,MAAE,GAAU,EAAS,EAAwB,EAAoB,GAA6B,CAC9H,OACA,SAAW,IAET,MAAM,EAAI,EAAO,MACjB,EAAK,eAAgB,EAAG,GACxB,EAAK,eAAgB,EAAG,GACxB,EAAK,gBAAiB,EAAG,GACzB,EAAK,oBAAqB,EAAG,GAE7B,EAAK,kBAAmB,EAAS,MAAO,GACxC,EAAK,eAAgB,EAAM,MAAO,EAAM,EAE1C,WAAa,IACX,EAAK,iBAAkB,EAAO,MAAO,EAAM,IAIzC,EAAS,QAAM,EAAO,SACtB,EAAc,QAAM,EAAO,cAC3B,EAAY,QAAM,EAAO,YACzB,EAAS,QAAM,EAAO,SAW5B,OATA,EAAO,MAAQ,EAAY,OAAS,EAAO,OAAS,GACpD,EAAS,MAAQ,EAAU,OAAS,GACpC,EAAM,MAAQ,EAAO,MAErB,QAAM,GAAQ,GAAK,EAAO,MAAQ,IAClC,QAAM,GAAa,GAAK,EAAO,MAAQ,IACvC,QAAM,GAAW,GAAK,EAAS,MAAQ,IACvC,QAAM,GAAQ,GAAK,EAAM,MAAQ,IAE1B,KAEL,MAAM,EAA4B,IAC7B,EACH,MAAsB,MAAf,EAAM,MAAgB,EAAM,MACb,MAApB,EAAM,WAAqB,EAAM,WACjC,EAAK,MAAQ,EAAK,MAAM,aACxB,GACF,IAAK,GAUP,OAPK,EAAM,OACT,EAAK,QAAW,IACd,EAAK,oBAAsB,EAAM,OAA4B,OAC7D,EAAK,eAAiB,EAAM,OAA4B,MAAM,GAI3D,IAAE,QAAS,EAAK,CAE3B,IClGF,EAAmB,MAAJ,YAAI,EAAJ,OAAM,OAAO,CAC1B,KAAM,cAEN,KAAI,KACK,IAGT,OAAQ,GACN,MAAM,EAAO,CACX,SAAU,CACR,MAAO,KAAK,QAAU,KAAK,QAAQ,MAAQ,KAAK,OAElD,GAAI,IAAI,KAAK,aAUf,OANK,KAAK,OAAO,YAGR,EAAK,GAAG,MAFf,EAAK,GAAG,MAAS,GAAsB,KAAK,MAAM,QAAU,EAAM,OAA4B,OAKzF,EAAc,QAAS,E,EAGhC,UACO,KAAK,OAAO,MAEjB,KAAK,W,EAGP,YACE,KAAK,c,EAGP,SAAU,CACR,cACE,OAAO,EAAwB,KAAK,OAAQ,CAAC,QAAS,UACxD,GAGF,MAAO,CACL,OAAU,CACR,QAAS,GACP,MAAM,EAAc,KAAK,YACrB,EAAY,KACV,KAAK,SACP,KAAK,QAAQ,cAAc,GACvB,UAAW,GAAO,KAAK,iBAE3B,KAAK,UAAU,GACX,EAAM,QAAU,KAAK,cAAc,KAAK,cAG9C,KAAK,eACD,UAAW,IAAQ,KAAK,IAAyB,MAAQ,EAAM,O,EAGvE,MAAM,IAIV,QAAS,CACP,aAAmB,IAAA,EAAA,EAAA,EACjB,MAAoB,UAAhB,KAAK,OAA2B,OAAP,EAAO,KAAK,cAAL,IAAc,WAC9C,KAAK,OAAe,OAAP,EAAO,KAAK,cAAL,IAAc,cAC/B,OAAP,EAAO,KAAK,cAAL,IAAc,K,EAGvB,eACE,IAAK,KAAK,QAAS,OAEnB,MAAM,EAAsB,MAAd,KAAK,OAAiC,UAAhB,KAAK,OAAqB,GAAK,KAAK,MACpD,UAAhB,KAAK,OAAoB,KAAK,QAAQ,WAAa,EAC9C,KAAK,OAAQ,KAAK,QAAQ,cAAgB,EAC9C,KAAK,QAAQ,MAAQ,C,EAG5B,YACE,MAAM,EAAM,KAAK,aACjB,KAAK,MAAM,QAAS,GACpB,KAAK,MAAM,SAAU,E,EAGvB,cACE,KAAK,MAAM,WAAY,KAAK,a,EAG9B,UAAW,GACJ,IAAa,EAAc,KAAK,aAErC,KAAK,QAAU,UAAO,KAAK,IAA0B,GAClD,GAAG,SAAU,KAAK,UAAU,KAAK,OACjC,GAAG,WAAY,KAAK,YAAY,KAAK,OACxC,KAAK,c,EAGP,eACM,KAAK,UACP,KAAK,QAAQ,iBACN,KAAK,QAEhB,GAGF,MAAO,CACL,MAAO,GACP,OAAQ,CACN,UAAY,GAAoB,UAAV,GAAsC,kBAAV,MAEjD,KC9GP,EAAe,SAAS,EAAa,ECArC,EAAe,CACb,KAAM,QAEN,CAAC,SAAS,cAAgB,QAAS,CAA0B,EAA8B,KAA0C,IAAtC,MAAO,GAA0B,EACzH,GAEL,EAAS,EAAI,EAAQ,EAGvB,CAAC,SAAS,UAAY,UAAW,CAA0B,EAA8B,KAA6D,IAAzD,MAAO,GAA6C,EAC3I,EACE,EAAG,SACL,EAAG,QAAQ,cAAc,GACrB,EAAG,QAAU,EAAG,QAAQ,OAAO,EAAG,QAAQ,aAE3C,EAAS,EAAI,GAElB,EAAY,EACd,EAGF,CAAC,SAAS,YAAc,UAAqC,IAC3D,EAAY,EAAG,GAInB,SAAS,EAAoC,EAAgC,EAAmB,GAC9F,MAAM,EAAI,SAAS,YAAY,eAC/B,EAAE,gBAAgB,GAAW,GAAM,EAAM,GACzC,EAAG,cAAc,EACnB,CAEA,SAAS,EAAmC,EAAgC,GAC1E,EAAG,QAAU,UAAM,EAAI,GACpB,GAAG,UAAU,IAAM,EAAU,EAAI,SAAU,EAAG,WAC9C,GAAG,YAAY,IAAM,EAAU,EAAI,WAAY,EAAG,UACvD,CAEA,SAAS,EAAsC,GACzC,EAAG,UACL,EAAG,QAAQ,iBACJ,EAAG,QAEd,C","file":"/npm/vue-imask@7.6.1/dist/vue-imask.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/vue-imask@7.6.1/dist/vue-imask.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { type PropType } from 'vue-demi';\nimport { type FactoryOpts, type MaskedDynamicOptions } from 'imask';\n\nexport default {\n  // common\n  mask: undefined as unknown as PropType<FactoryOpts['mask']>,\n  prepare: Function as PropType<FactoryOpts['prepare']>,\n  prepareChar: Function as PropType<FactoryOpts['prepareChar']>,\n  validate: Function as PropType<FactoryOpts['validate']>,\n  commit: Function as PropType<FactoryOpts['commit']>,\n  overwrite: {\n    type: Boolean,\n    required: false,\n    default: undefined,\n  },\n  eager: {\n    required: false,\n    default: undefined,\n    validator: (value: unknown) => ['append', 'remove'].includes(value as string) || typeof value === 'boolean',\n  },\n  skipInvalid: { type: Boolean, required: false, default: undefined },\n\n  // pattern\n  placeholderChar: String,\n  displayChar: String,\n  lazy: { type: Boolean, required: false, default: undefined },\n  definitions: Object,\n  blocks: Object,\n\n  // enum\n  enum: Array,\n\n  // range\n  maxLength: Number,\n  from: Number,\n  to: Number,\n\n  // date\n  pattern: String,\n  format: Function as PropType<FactoryOpts['format']>,\n  parse: Function as PropType<FactoryOpts['parse']>,\n  autofix: {\n    required: false,\n    default: undefined,\n    validator: (value: unknown) => value === 'pad' || typeof value === 'boolean',\n  },\n\n  // number\n  radix: String,\n  thousandsSeparator: String,\n  mapToRadix: Array,\n  scale: Number,\n  normalizeZeros: {\n    type: Boolean,\n    required: false,\n    default: undefined,\n  },\n  padFractionalZeros: {\n    type: Boolean,\n    required: false,\n    default: undefined,\n  },\n  min: [Number, Date],\n  max: [Number, Date],\n\n  // dynamic\n  dispatch: Function as PropType<MaskedDynamicOptions['dispatch']>\n};\n","import { ref, readonly, isRef, watch, onMounted, onUnmounted, type DeepReadonly, type Ref } from 'vue-demi';\nimport IMask, { type FactoryOpts, type InputMaskElement, type InputMask } from 'imask';\n\nexport\ntype ComposableEmitEventBase = 'accept' | 'complete';\n\nexport\ntype ComposableEmitEvent = ComposableEmitEventBase | `${ComposableEmitEventBase}:masked` | `${ComposableEmitEventBase}:typed` | `${ComposableEmitEventBase}:unmasked`;\n\nexport\ntype ComposableEmitValue<E extends ComposableEmitEvent, Opts extends FactoryOpts> =\n  E extends ComposableEmitEventBase | `${ComposableEmitEventBase}:masked` ? InputMask<Opts>['value'] :\n  E extends `${ComposableEmitEventBase}:unmasked` ? InputMask<Opts>['unmaskedValue'] :\n  E extends `${ComposableEmitEventBase}:typed` ? InputMask<Opts>['typedValue'] :\n  never\n;\n\nexport\ntype ComposableParams<Opts extends FactoryOpts> = {\n  emit?: <E extends ComposableEmitEvent>(eventName: E, value: ComposableEmitValue<E, Opts>, e?: InputEvent) => void,\n  onAccept?: (e?: InputEvent) => void,\n  onComplete?: (e?: InputEvent) => void,\n  defaultValue?: InputMask<Opts>['value'],\n  defaultUnmaskedValue?: InputMask<Opts>['unmaskedValue'],\n  defaultTypedValue?: InputMask<Opts>['typedValue'],\n}\n\nexport default\nfunction useIMask<\n  MaskElement extends InputMaskElement,\n  Opts extends FactoryOpts\n> (props: Opts | Ref<Opts>, {\n    emit, onAccept, onComplete, defaultValue, defaultUnmaskedValue, defaultTypedValue,\n  }: ComposableParams<Opts>={}): {\n  el: Ref<MaskElement | undefined>,\n  mask: DeepReadonly<Ref<InputMask<Opts> | undefined>>,\n  masked: Ref<InputMask<Opts>['value']>,\n  unmasked: Ref<InputMask<Opts>['unmaskedValue']>,\n  typed: Ref<InputMask<Opts>['typedValue']>,\n} {\n  const _props = (isRef(props) ? props : ref(props)) as Ref<Opts>;\n  const el: Ref<MaskElement | undefined> = ref();\n  const mask: Ref<InputMask<Opts> | undefined> = ref();\n  const masked: Ref<InputMask<Opts>['value']> = ref('');\n  const unmasked: Ref<InputMask<Opts>['unmaskedValue']> = ref('');\n  const typed: Ref<InputMask<Opts>['typedValue']> = ref();\n  let $el: MaskElement | undefined;\n  let $lastAcceptedValue: InputMask<Opts>['value'] | undefined = masked.value;\n  let $lastAcceptedUnmaskedValue: InputMask<Opts>['unmaskedValue'] | undefined = unmasked.value;\n  let $lastAcceptedTypedValue: InputMask<Opts>['typedValue'] | undefined = typed.value;\n\n  function storeLastAcceptedValues () {\n    $lastAcceptedTypedValue = typed.value = (mask.value as InputMask<Opts>).typedValue;\n    $lastAcceptedUnmaskedValue = unmasked.value = (mask.value as InputMask<Opts>).unmaskedValue;\n    $lastAcceptedValue = masked.value = (mask.value as InputMask<Opts>).value;\n  }\n\n  function _onAccept (event?: InputEvent) {\n    storeLastAcceptedValues();\n\n    if (emit) {\n      emit('accept', masked.value, event);\n      emit('accept:masked', masked.value, event);\n      emit('accept:typed', typed.value, event);\n      emit('accept:unmasked', unmasked.value, event);\n    }\n    onAccept?.(event);\n  }\n\n  function _onComplete (event?: InputEvent) {\n    if (emit) {\n      emit('complete', (mask.value as InputMask<Opts>).value, event);\n      emit('complete:masked', (mask.value as InputMask<Opts>).value, event);\n      emit('complete:typed', (mask.value as InputMask<Opts>).typedValue, event);\n      emit('complete:unmasked', (mask.value as InputMask<Opts>).unmaskedValue, event);\n    }\n    onComplete?.(event);\n  }\n\n  const updateUnmaskedValue = () => {\n    if (!mask.value || unmasked.value === undefined) return;\n\n    if ($lastAcceptedUnmaskedValue !== unmasked.value) {\n      mask.value.unmaskedValue = unmasked.value;\n      if (mask.value.unmaskedValue !== unmasked.value) _onAccept();\n    }\n    $lastAcceptedUnmaskedValue = undefined;\n  };\n  watch(unmasked, updateUnmaskedValue);\n\n  const updateMaskedValue = () => {\n    if (!mask.value || masked.value === undefined) return;\n\n    if ($lastAcceptedValue !== masked.value) {\n      mask.value.value = masked.value;\n      if (mask.value.value !== masked.value) _onAccept();\n    }\n    $lastAcceptedValue = undefined;\n  };\n  watch(masked, updateMaskedValue);\n\n  const updateTypedValue = () => {\n    if (!mask.value || typed.value === undefined) return;\n\n    if ($lastAcceptedTypedValue !== typed.value) {\n      mask.value.typedValue = typed.value;\n      if (!mask.value.masked.typedValueEquals(typed.value)) _onAccept();\n    }\n    $lastAcceptedTypedValue = undefined;\n  }\n  watch(typed, updateTypedValue);\n\n\n  function _initMask () {\n    $el = el.value;\n    const $props = _props.value;\n\n    if (!$el || !$props?.mask) return;\n\n    mask.value = IMask($el, $props);\n\n    if (defaultValue !== undefined) masked.value = defaultValue;\n    if (defaultUnmaskedValue !== undefined) unmasked.value = defaultUnmaskedValue;\n    if (defaultTypedValue !== undefined) typed.value = defaultTypedValue;\n\n    updateUnmaskedValue();\n    updateMaskedValue();\n    updateTypedValue();\n\n    storeLastAcceptedValues();\n\n    mask.value.on('accept', _onAccept).on('complete', _onComplete);\n  }\n\n  function _destroyMask () {\n    mask.value?.destroy();\n    mask.value = undefined;\n  }\n\n  onMounted(_initMask);\n  onUnmounted(_destroyMask);\n\n  watch([el, _props], () => {\n    const $newEl = el.value;\n    const $props = _props.value;\n\n    if (!$props?.mask || $newEl !== $el) _destroyMask();\n    if ($newEl) {\n      if (!mask.value) {\n        _initMask();\n      } else {\n        mask.value.updateOptions($props as any);\n      }\n    }\n  });\n\n  return {\n    el,\n    mask: readonly(mask),\n    masked,\n    unmasked,\n    typed,\n  };\n}\n","export\nfunction extractOptionsFromProps<\n  Props extends Record<string, any>,\n  ExcludeProps extends keyof Props\n> (props: Props, exclude: Readonly<ExcludeProps[]>): Omit<Props, ExcludeProps> {\n  props = {...props};\n\n  // keep only defined props\n  (Object.keys(props) as Array<ExcludeProps>)\n    .forEach(prop => {\n      if (props[prop] === undefined || exclude.includes(prop)) delete props[prop];\n    });\n\n  return props;\n}\n","import { type FactoryOpts } from 'imask';\nimport { h, watch, toRef, defineComponent, PropType } from 'vue-demi';\nimport props from './props';\nimport useIMask, { type ComposableParams } from './composable';\nimport { extractOptionsFromProps } from './utils';\n\n\nexport\ntype MaskProps = FactoryOpts & {\n  modelValue: string,\n  value: string,\n  unmasked: string,\n  typed: any,\n}\n\n// order does matter = priority\nconst VALUE_PROPS = ['typed', 'unmasked', 'value', 'modelValue'] as const; \n\n\nexport default defineComponent<MaskProps>({\n  name: 'imask-input',\n  inheritAttrs: false,\n\n  props: {\n    // plugin\n    modelValue: String,\n    value: String,\n    unmasked: String,\n    typed: { validator: () => true } as unknown as PropType<any>,\n\n    ...props,\n  },\n\n  emits: [\n    'update:modelValue',\n    'update:masked',\n    'update:value',\n    'update:unmasked',\n    'update:typed',\n    'accept',\n    'accept:value',\n    'accept:masked',\n    'accept:unmasked',\n    'accept:typed',\n    'complete',\n    'complete:value',\n    'complete:masked',\n    'complete:unmasked',\n    'complete:typed',\n  ],\n\n  setup (props, { attrs, emit }) {\n    const { el, mask, masked, unmasked, typed } = useIMask(extractOptionsFromProps(props as MaskProps, VALUE_PROPS) as FactoryOpts, {\n      emit,\n      onAccept: (event?: InputEvent) => {\n        // emit more events\n        const v = masked.value;\n        emit('accept:value', v, event);\n        emit('update:value', v, event);\n        emit('update:masked', v, event);\n        emit('update:modelValue', v, event);\n\n        emit('update:unmasked', unmasked.value, event);\n        emit('update:typed', typed.value, event);\n      },\n      onComplete: (event?: InputEvent) => {\n        emit('complete:value', masked.value, event);\n      },\n    } as ComposableParams<MaskProps>);\n\n    const pvalue = toRef(props, 'value');\n    const pmodelValue = toRef(props, 'modelValue');\n    const punmasked = toRef(props, 'unmasked');\n    const ptyped = toRef(props, 'typed');\n\n    masked.value = pmodelValue.value || pvalue.value || '';\n    unmasked.value = punmasked.value || '';\n    typed.value = ptyped.value;\n\n    watch(pvalue, v => masked.value = v);\n    watch(pmodelValue, v => masked.value = v);\n    watch(punmasked, v => unmasked.value = v);\n    watch(ptyped, v => typed.value = v);\n\n    return () => {\n      // TODO type?\n      const data: Record<string, any> = {\n        ...attrs,\n        value: props.value != null ? props.value :\n          props.modelValue != null ? props.modelValue :\n          mask.value ? mask.value.displayValue :\n          '',\n        ref: el,\n      };\n\n      if (!props.mask) {\n        data.onInput = (event: InputEvent) => {\n          emit('update:modelValue', (event.target as HTMLInputElement).value);\n          emit('update:value', (event.target as HTMLInputElement).value);\n        }\n      }\n\n      return h('input', data);\n    };\n  },\n});\n","import { Vue2, type VNode } from 'vue-demi';\nimport IMask, { type InputMask, type FactoryOpts } from 'imask';\nimport props from './props';\nimport { extractOptionsFromProps } from './utils';\n\n\nexport default Vue2?.extend({\n  name: 'imask-input',\n\n  data () {\n    return {} as { maskRef?: InputMask<FactoryOpts> };\n  },\n\n  render (createElement): VNode {\n    const data = {\n      domProps: {\n        value: this.maskRef ? this.maskRef.value : this.value\n      },\n      on: {...this.$listeners},\n    };\n\n    // if there is no mask use default input event\n    if (!this.$props.mask) {\n      data.on.input = (event: InputEvent) => this.$emit('input', (event.target as HTMLInputElement).value);\n    } else {\n      delete data.on.input;\n    }\n\n    return createElement('input', data);\n  },\n\n  mounted () {\n    if (!this.$props.mask) return;\n\n    this._initMask();\n  },\n\n  destroyed () {\n    this._destroyMask();\n  },\n\n  computed: {\n    maskOptions (): FactoryOpts {\n      return extractOptionsFromProps(this.$props, ['value', 'unmask']) as FactoryOpts;\n    },\n  },\n\n  watch: {\n    '$props': {\n      handler (props) {\n        const maskOptions = this.maskOptions;\n        if (maskOptions.mask) {\n          if (this.maskRef) {\n            this.maskRef.updateOptions(maskOptions);\n            if ('value' in props) this._updateValue();\n          } else {\n            this._initMask(maskOptions);\n            if (props.value !== this._maskValue()) this._onAccept();\n          }\n        } else {\n          this._destroyMask();\n          if ('value' in props) (this.$el as HTMLInputElement).value = props.value;\n        }\n      },\n      deep: true\n    }\n  },\n\n  methods: {\n    _maskValue (): any {\n      if (this.unmask === 'typed') return this.maskRef?.typedValue;\n      if (this.unmask) return this.maskRef?.unmaskedValue;\n      return this.maskRef?.value;\n    },\n\n    _updateValue (): void {\n      if (!this.maskRef) return;\n\n      const value = this.value == null && this.unmask !== 'typed' ? '' : this.value;\n      if (this.unmask === 'typed') this.maskRef.typedValue = value;\n      else if (this.unmask) this.maskRef.unmaskedValue = value as string;\n      else this.maskRef.value = value as string;\n    },\n\n    _onAccept (): void {\n      const val = this._maskValue();\n      this.$emit('input', val);\n      this.$emit('accept', val);\n    },\n\n    _onComplete (): void {\n      this.$emit('complete', this._maskValue());\n    },\n\n    _initMask (maskOptions?: FactoryOpts): void {\n      if (!maskOptions) maskOptions = this.maskOptions;\n\n      this.maskRef = IMask((this.$el as HTMLInputElement), maskOptions)\n        .on('accept', this._onAccept.bind(this))\n        .on('complete', this._onComplete.bind(this));\n      this._updateValue();\n    },\n\n    _destroyMask (): void {\n      if (this.maskRef) {\n        this.maskRef.destroy();\n        delete this.maskRef;\n      }\n    }\n  },\n\n  props: {\n    value: {},\n    unmask: {\n      validator: (value) => value === 'typed' || typeof value === 'boolean',\n    },\n    ...props,\n  },\n});\n","import { isVue3 } from 'vue-demi';\n\nimport Component3 from './component3-composition';\nimport Component2 from './component2';\n\n\nexport default isVue3 ? Component3 : Component2;\n","import IMask, { type InputElement, type InputMask, type FactoryArg, type UpdateOpts } from 'imask';\nimport { isVue3 } from 'vue-demi';\n\n\ntype DirectiveMaskElement<Opts extends FactoryArg> = InputElement & { maskRef?: InputMask<Opts> }\n\nexport default {\n  name: 'imask',\n\n  [isVue3 ? 'beforeMount' : 'bind']: <Opts extends FactoryArg>(el: DirectiveMaskElement<Opts>, { value: options }: { value: Opts }) => {\n    if (!options) return;\n\n    initMask(el, options);\n  },\n\n  [isVue3 ? 'updated' : 'update']: <Opts extends FactoryArg>(el: DirectiveMaskElement<Opts>, { value: options }: { value: Opts | UpdateOpts<Opts> }) => {\n    if (options) {\n      if (el.maskRef) {\n        el.maskRef.updateOptions(options as UpdateOpts<Opts>);\n        if (el.value !== el.maskRef.value) el.maskRef._onChange();\n      }\n      else initMask(el, options as Opts);\n    } else {\n      destroyMask(el);\n    }\n  },\n\n  [isVue3 ? 'unmounted' : 'unbind']: <Opts extends FactoryArg>(el: DirectiveMaskElement<Opts>) => {\n    destroyMask(el);\n  }\n};\n\nfunction fireEvent<Opts extends FactoryArg> (el: DirectiveMaskElement<Opts>, eventName: string, data: InputMask<Opts>) {\n  const e = document.createEvent('CustomEvent');\n  e.initCustomEvent(eventName, true, true, data);\n  el.dispatchEvent(e);\n}\n\nfunction initMask<Opts extends FactoryArg> (el: DirectiveMaskElement<Opts>, opts: Opts) {\n  el.maskRef = IMask(el, opts)\n    .on('accept', () => fireEvent(el, 'accept', el.maskRef as InputMask<Opts>))\n    .on('complete', () => fireEvent(el, 'complete', el.maskRef as InputMask<Opts>));\n}\n\nfunction destroyMask <Opts extends FactoryArg>(el: DirectiveMaskElement<Opts>) {\n  if (el.maskRef) {\n    el.maskRef.destroy();\n    delete el.maskRef;\n  }\n}\n"]}