{"version":3,"file":"index.mjs","sources":["../../../src/shared/useDefault/index.ts"],"sourcesContent":["import { computed, ref, watchEffect, WritableComputedRef } from 'vue';\nimport camelCase from 'lodash/camelCase';\n\nfunction getDefaultName(key: string): string {\n  const str = camelCase(key);\n  return `default${str[0].toLocaleUpperCase() + str.slice(1)}`;\n}\n\n// eventName is keybase, change -> onChange; visible-change -> onVisibleChange\nfunction getEventPropsName(eventName: string): string {\n  const str = camelCase(eventName);\n  return `on${str[0].toLocaleUpperCase()}${str.slice(1)}`;\n}\n\n/**\n * 受控和非受控逻辑处理，包含 value / modelValue / events\n * @param props 属性\n * @param emit 触发方法，context.emit\n * @param key 受控属性名称\n * @param eventName 事件名称\n * @example const [value, setValue] = useDefault();\n * @returns [value, setValue]\n */\nexport function useDefault<V, T>(props: T, emit: (...args: any[]) => void, key: string, eventName: string) {\n  const modelValue = 'modelValue';\n  const defaultName = getDefaultName(String(key));\n\n  const isUsedModelValue = props[modelValue] !== undefined;\n  const isUsedKey = props[key] !== undefined;\n\n  const innerValue = ref<V>();\n\n  if (isUsedKey) {\n    innerValue.value = props[key];\n  } else if (isUsedModelValue) {\n    innerValue.value = props[modelValue];\n  } else {\n    innerValue.value = props[defaultName];\n  }\n  watchEffect(() => {\n    if (isUsedModelValue) {\n      innerValue.value = props[modelValue];\n    }\n    if (isUsedKey) {\n      innerValue.value = props[key];\n    }\n  });\n\n  function emitEvents<T extends Array<any>>(value: V, ...arg: T) {\n    const updateKeys = [`update:${key}`];\n    if (isUsedModelValue) {\n      updateKeys.push(`update:modelValue`);\n    }\n    // Props Event exists in Vue3. `props.onChange()` is equal `context.emit('change')`\n    updateKeys.forEach((updateKey) => {\n      emit(updateKey, value, ...arg);\n    });\n    const propsEventName = getEventPropsName(eventName);\n    props[propsEventName]?.(value, ...arg);\n  }\n\n  function setInnerValue<M extends Array<any>>(value: V, ...arg: M) {\n    if (!isUsedKey && !isUsedModelValue) {\n      innerValue.value = value;\n    }\n    emitEvents<M>(value, ...arg);\n  }\n\n  const innerValueRef = computed<V>({\n    get() {\n      return innerValue.value as V;\n    },\n    set(value: V) {\n      setInnerValue(value);\n    },\n  });\n\n  return [innerValueRef, setInnerValue] as [WritableComputedRef<V>, typeof setInnerValue];\n}\n"],"names":["getDefaultName","key","str","camelCase","concat","toLocaleUpperCase","slice","getEventPropsName","eventName","useDefault","props","emit","modelValue","defaultName","String","isUsedModelValue","isUsedKey","innerValue","ref","value","watchEffect","emitEvents","_props$propsEventName","_len","arguments","length","arg","Array","_key","updateKeys","push","forEach","updateKey","apply","propsEventName","call","setInnerValue","_len2","_key2","innerValueRef","computed","get","set"],"mappings":"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"}