{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-empty-values/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, ref } from 'vue-demi'\nimport { buildProps, debugWarn, isFunction } from '@xzx-design/utils'\n\nimport type { ExtractPropTypes, InjectionKey, Ref } from 'vue-demi'\n\ntype EmptyValuesContext = ExtractPropTypes<typeof useEmptyValuesProps>\n\nexport const emptyValuesContextKey: InjectionKey<Ref<EmptyValuesContext>> =\n  Symbol('emptyValuesContextKey')\nexport const SCOPE = 'use-empty-values'\nexport const DEFAULT_EMPTY_VALUES = ['', undefined, null]\nexport const DEFAULT_VALUE_ON_CLEAR = undefined\n\nexport const useEmptyValuesProps = buildProps({\n  /**\n   * @description empty values supported by the component\n   */\n  emptyValues: Array,\n  /**\n   * @description return value when cleared, if you want to set `undefined`, use `() => undefined`\n   */\n  valueOnClear: {\n    type: [String, Number, Boolean, Function],\n    default: undefined,\n    validator: (val: any) => (isFunction(val) ? !val() : !val),\n  },\n} as const)\n\nexport const useEmptyValues = (\n  props: EmptyValuesContext,\n  defaultValue?: null | undefined\n) => {\n  const config = getCurrentInstance()\n    ? inject(emptyValuesContextKey, ref<EmptyValuesContext>({}))\n    : ref<EmptyValuesContext>({})\n\n  const emptyValues = computed(\n    () => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES\n  )\n\n  const valueOnClear = computed(() => {\n    // function is used for undefined cause undefined can't be a value of prop\n    if (isFunction(props.valueOnClear)) {\n      return props.valueOnClear()\n    } else if (props.valueOnClear !== undefined) {\n      return props.valueOnClear\n    } else if (isFunction(config.value.valueOnClear)) {\n      return config.value.valueOnClear()\n    } else if (config.value.valueOnClear !== undefined) {\n      return config.value.valueOnClear\n    }\n    return defaultValue !== undefined ? defaultValue : DEFAULT_VALUE_ON_CLEAR\n  })\n\n  const isEmptyValue = (value: any) => {\n    return emptyValues.value.includes(value)\n  }\n\n  if (!emptyValues.value.includes(valueOnClear.value)) {\n    debugWarn(SCOPE, 'value-on-clear should be a value of empty-values')\n  }\n\n  return {\n    emptyValues,\n    valueOnClear,\n    isEmptyValue,\n  }\n}\n"],"names":[],"mappings":";;;;;;;AAOa,MAAA,qBAAA,GACX,OAAO,uBAAuB,EAAA;AACzB,MAAM,KAAQ,GAAA,mBAAA;AACd,MAAM,oBAAuB,GAAA,CAAC,EAAI,EAAA,KAAA,CAAA,EAAW,IAAI,EAAA;AACjD,MAAM,sBAAyB,GAAA,KAAA,EAAA;AAE/B,MAAM,sBAAsB,UAAW,CAAA;AAAA,EAI5C,WAAa,EAAA,KAAA;AAAA,EAIb,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,CAAC,MAAQ,EAAA,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAAA,IACxC,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,SAAA,EAAW,CAAC,GAAc,KAAA,UAAA,CAAW,GAAG,CAAI,GAAA,CAAC,GAAI,EAAA,GAAI,CAAC,GAAA;AAAA,GACxD;AACF,CAAU,EAAA;AAEG,MAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,YACG,KAAA;AACH,EAAA,MAAM,MAAS,GAAA,kBAAA,EACX,GAAA,MAAA,CAAO,qBAAuB,EAAA,GAAA,CAAwB,EAAE,CAAC,CAAA,GACzD,GAAwB,CAAA,EAAE,CAAA,CAAA;AAE9B,EAAA,MAAM,WAAc,GAAA,QAAA;AAAA,IAClB,MAAM,KAAA,CAAM,WAAe,IAAA,MAAA,CAAO,MAAM,WAAe,IAAA,oBAAA;AAAA,GACzD,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,SAAS,MAAM;AAElC,IAAI,IAAA,UAAA,CAAW,KAAM,CAAA,YAAY,CAAG,EAAA;AAClC,MAAA,OAAO,MAAM,YAAa,EAAA,CAAA;AAAA,KAC5B,MAAA,IAAW,KAAM,CAAA,YAAA,KAAiB,KAAW,CAAA,EAAA;AAC3C,MAAA,OAAO,KAAM,CAAA,YAAA,CAAA;AAAA,KACJ,MAAA,IAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AAChD,MAAO,OAAA,MAAA,CAAO,MAAM,YAAa,EAAA,CAAA;AAAA,KACxB,MAAA,IAAA,MAAA,CAAO,KAAM,CAAA,YAAA,KAAiB,KAAW,CAAA,EAAA;AAClD,MAAA,OAAO,OAAO,KAAM,CAAA,YAAA,CAAA;AAAA,KACtB;AACA,IAAO,OAAA,YAAA,KAAiB,SAAY,YAAe,GAAA,sBAAA,CAAA;AAAA,GACpD,CAAA,CAAA;AAED,EAAM,MAAA,YAAA,GAAe,CAAC,KAAe,KAAA;AACnC,IAAO,OAAA,WAAA,CAAY,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,GACzC,CAAA;AAEA,EAAA,IAAI,CAAC,WAAY,CAAA,KAAA,CAAM,QAAS,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACnD,IAAA,SAAA,CAAU,OAAO,kDAAkD,CAAA,CAAA;AAAA,GACrE;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AACF;;;;"}