{"version":3,"file":"index.mjs","sources":["../../../../../src/hooks/use-form-item/index.ts"],"sourcesContent":["import {\r\n  inject,\r\n  ref,\r\n  onMounted,\r\n  watch,\r\n  toRef,\r\n  onUnmounted,\r\n  computed,\r\n} from 'vue';\r\nimport type { WatchStopHandle, ComputedRef, Ref } from 'vue';\r\n\r\n// 生成随机id\r\nimport { useId } from '../use-id';\r\n\r\n// type\r\nimport { FormContextKey } from '../../components/ivue-form/types/form';\r\nimport {\r\n  FormItemContextKey,\r\n  FormItemContext,\r\n} from '../../components/ivue-form/types/form-item';\r\n\r\n// 获取表单 inject\r\nexport const useFormItem = () => {\r\n  const form = inject(FormContextKey, undefined);\r\n  const formItem = inject(FormItemContextKey, undefined);\r\n\r\n  return {\r\n    form,\r\n    formItem,\r\n  };\r\n};\r\n\r\nexport type IUseFormItemInputCommonProps = {\r\n  id?: string;\r\n  label?: string | number | boolean | Record<string, any>;\r\n};\r\n\r\n// 设置表单item输入框id\r\nexport const useFormItemInputId = (\r\n  props: Partial<IUseFormItemInputCommonProps>,\r\n  {\r\n    formItemContext,\r\n    disableIdGeneration,\r\n    disableIdManagement,\r\n  }: {\r\n    formItemContext?: FormItemContext;\r\n    disableIdGeneration?: ComputedRef<boolean> | Ref<boolean>;\r\n    disableIdManagement?: ComputedRef<boolean> | Ref<boolean>;\r\n  },\r\n  slots?\r\n) => {\r\n  // 禁用 ID 生成\r\n  if (!disableIdGeneration) {\r\n    disableIdGeneration = ref<boolean>(false);\r\n  }\r\n\r\n  // 禁用 ID 管理\r\n  if (!disableIdManagement) {\r\n    disableIdManagement = ref<boolean>(false);\r\n  }\r\n\r\n  // 取消watch\r\n  let idUnwatch: WatchStopHandle | undefined = undefined;\r\n\r\n  // data\r\n\r\n  // 输入框id\r\n  const inputId = ref<string>();\r\n\r\n  // computed\r\n\r\n  // 获取表单item的标签名称\r\n  const isLabeledByFormItem = computed<boolean>(() => {\r\n    return !!(\r\n      !props.label &&\r\n      formItemContext &&\r\n      formItemContext.inputIds &&\r\n      formItemContext.inputIds?.length <= 1\r\n    );\r\n  });\r\n\r\n  // onMounted\r\n  // 如果没有作为 prop 提供，则为 IvueFormItem 标签生成 id\r\n  onMounted(() => {\r\n    // 有自定义input插槽\r\n    if (slots && slots.input && slots.input()) {\r\n      return;\r\n    }\r\n\r\n    idUnwatch = watch(\r\n      [toRef(props, 'id')],\r\n      ([id]: [string]) => {\r\n        const newId =\r\n          id ?? (!disableIdGeneration.value ? useId().value : undefined);\r\n\r\n        if (formItemContext?.removeInputId) {\r\n          // 删除输入框id\r\n          inputId.value && formItemContext.removeInputId(inputId.value);\r\n\r\n          // 添加输入框id\r\n          if (\r\n            !disableIdManagement?.value &&\r\n            !disableIdGeneration.value &&\r\n            newId\r\n          ) {\r\n            formItemContext.addInputId(newId);\r\n          }\r\n        }\r\n\r\n        inputId.value = newId;\r\n      },\r\n      {\r\n        immediate: true,\r\n      }\r\n    );\r\n  });\r\n\r\n  // onUnmounted\r\n  onUnmounted(() => {\r\n    idUnwatch && idUnwatch();\r\n\r\n    // 删除输入框id\r\n    if (formItemContext?.removeInputId) {\r\n      inputId.value && formItemContext.removeInputId(inputId.value);\r\n    }\r\n  });\r\n\r\n  return {\r\n    isLabeledByFormItem,\r\n    inputId,\r\n  };\r\n};\r\n"],"names":[],"mappings":";;;;;AAsBO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,IAAA,GAAO,MAAO,CAAA,cAAA,EAAgB,KAAS,CAAA,CAAA,CAAA;AAC7C,EAAM,MAAA,QAAA,GAAW,MAAO,CAAA,kBAAA,EAAoB,KAAS,CAAA,CAAA,CAAA;AAErD,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AACF,EAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,KACA,EAAA;AAAA,EACE,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AACF,CAAA,EAKA,KACG,KAAA;AAEH,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAA,mBAAA,GAAsB,IAAa,KAAK,CAAA,CAAA;AAAA,GAC1C;AAGA,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAA,mBAAA,GAAsB,IAAa,KAAK,CAAA,CAAA;AAAA,GAC1C;AAGA,EAAA,IAAI,SAAyC,GAAA,KAAA,CAAA,CAAA;AAK7C,EAAA,MAAM,UAAU,GAAY,EAAA,CAAA;AAK5B,EAAM,MAAA,mBAAA,GAAsB,SAAkB,MAAM;AAxEtD,IAAA,IAAA,EAAA,CAAA;AAyEI,IAAO,OAAA,CAAC,EACN,CAAC,KAAM,CAAA,KAAA,IACP,eACA,IAAA,eAAA,CAAgB,QAChB,IAAA,CAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,QAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA0B,MAAU,KAAA,CAAA,CAAA,CAAA;AAAA,GAEvC,CAAA,CAAA;AAID,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,KAAS,IAAA,KAAA,CAAM,KAAS,IAAA,KAAA,CAAM,OAAS,EAAA;AACzC,MAAA,OAAA;AAAA,KACF;AAEA,IAAY,SAAA,GAAA,KAAA;AAAA,MACV,CAAC,KAAA,CAAM,KAAO,EAAA,IAAI,CAAC,CAAA;AAAA,MACnB,CAAC,CAAC,EAAE,CAAgB,KAAA;AAClB,QAAA,MAAM,QACJ,EAAO,IAAA,IAAA,GAAA,EAAA,GAAA,CAAC,oBAAoB,KAAQ,GAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA,CAAA,CAAA;AAEtD,QAAA,IAAI,mDAAiB,aAAe,EAAA;AAElC,UAAA,OAAA,CAAQ,KAAS,IAAA,eAAA,CAAgB,aAAc,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAG5D,UAAA,IACE,EAAC,mBAAqB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,KAAA,CAAA,IACtB,CAAC,mBAAA,CAAoB,SACrB,KACA,EAAA;AACA,YAAA,eAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAAA,WAClC;AAAA,SACF;AAEA,QAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA;AAAA,OAClB;AAAA,MACA;AAAA,QACE,SAAW,EAAA,IAAA;AAAA,OACb;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CAAA;AAGD,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,SAAA,IAAa,SAAU,EAAA,CAAA;AAGvB,IAAA,IAAI,mDAAiB,aAAe,EAAA;AAClC,MAAA,OAAA,CAAQ,KAAS,IAAA,eAAA,CAAgB,aAAc,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,KAC9D;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}