{"version":3,"file":"form-item.vue2.mjs","sources":["../../../components/form/form-item.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Column } from '@/components/column'\r\nimport { Icon } from '@/components/icon'\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport {\r\n  computed,\r\n  inject,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport {\r\n  makeSentence,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n  useWordSpace,\r\n} from '@vexip-ui/config'\r\nimport { useDisplay } from '@vexip-ui/hooks'\r\nimport { createEventEmitter, isFunction, isNull, isObject } from '@vexip-ui/utils'\r\nimport { formItemProps } from './props'\r\nimport { validate as asyncValidate } from './validator'\r\nimport { getValueByPath, setValueByPath } from './helper'\r\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, type FormItemSlots } from './symbol'\r\n\r\nimport type { ComponentState } from '@vexip-ui/config'\r\nimport type { Rule } from './validator'\r\n\r\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\r\n\r\nconst nh = useNameHelper('form')\r\nconst _props = defineProps(formItemProps)\r\nconst props = useProps('formItem', _props, {\r\n  locale: null,\r\n  label: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  prop: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  rules: () => [],\r\n  labelWidth: null,\r\n  required: false,\r\n  htmlFor: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  errorTransition: () => nh.ns('fade'),\r\n  defaultValue: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  hideErrorTip: false,\r\n  validateAll: null,\r\n  hideAsterisk: null,\r\n  hideLabel: null,\r\n  action: false,\r\n  help: '',\r\n  pure: false,\r\n  manual: false,\r\n  span: 24,\r\n  offset: null,\r\n  push: null,\r\n  pull: null,\r\n  order: null,\r\n  xs: null,\r\n  sm: null,\r\n  md: null,\r\n  lg: null,\r\n  xl: null,\r\n  xxl: null,\r\n  flex: null,\r\n})\r\n\r\nconst slots = defineSlots<FormItemSlots>()\r\n\r\nconst formProps = inject(FORM_PROPS, {})\r\nconst formActions = inject(FORM_ACTIONS, null)\r\nconst formFields = inject(FORM_FIELDS, null)\r\nconst emitter = createEventEmitter()\r\n\r\nconst locale = useLocale('form', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\nconst wordSpace = useWordSpace()\r\n\r\nconst initValue = ref(props.defaultValue)\r\nconst isError = ref(false)\r\nconst errorTip = ref('')\r\nconst validating = ref(false)\r\nconst disabledValidate = ref(false)\r\nconst labelWidth = ref(0)\r\n\r\nconst defaultSlotParams = shallowReadonly(\r\n  reactive({\r\n    isError,\r\n  }),\r\n)\r\n\r\nconst placeholder = useDisplay(() => {\r\n  if (placeholder.value) {\r\n    labelWidth.value = placeholder.value.offsetWidth\r\n  }\r\n})\r\n\r\nconst labelId = useId()\r\nconst isRequired = computed(() => formProps.allRequired || props.required)\r\nconst requiredTip = computed(() => {\r\n  return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\r\n})\r\nconst allRules = computed(() => {\r\n  if (!props.prop) return []\r\n\r\n  const requiredRule: Rule[] = isRequired.value\r\n    ? [{ required: isRequired.value, message: requiredTip.value }]\r\n    : []\r\n  const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\r\n\r\n  let formRules: Rule[] = []\r\n\r\n  if (formProps.rules) {\r\n    formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\r\n  }\r\n\r\n  formRules = Array.isArray(formRules) ? formRules : [formRules]\r\n\r\n  return requiredRule.concat(formRules, selfRules)\r\n})\r\nconst currentValue = computed(getValue)\r\nconst isValidateAll = computed(() => {\r\n  return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\r\n})\r\nconst useAsterisk = computed(() => {\r\n  if (props.hideAsterisk === true || formProps.hideAsterisk) {\r\n    return false\r\n  }\r\n\r\n  for (const rule of allRules.value) {\r\n    if (rule.required) return true\r\n  }\r\n\r\n  return isRequired.value\r\n})\r\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\r\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\r\nconst labelAlign = computed(() => formProps.labelAlign)\r\nconst computedLabelWidth = computed(() => {\r\n  if (labelAlign.value) {\r\n    return getLabelWidth(\r\n      labelAlign.value === 'top'\r\n        ? 0\r\n        : hideLabel.value\r\n          ? 0\r\n          : props.labelWidth || formProps.labelWidth || 80,\r\n    )\r\n  }\r\n\r\n  return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('item')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bem('item', 'inherit')]: formFields || props.inherit,\r\n    [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\r\n    [nh.bem('item', 'error')]: isError.value,\r\n    [nh.bem('item', 'action')]: props.action,\r\n    [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value,\r\n  }\r\n})\r\nconst controlStyle = computed(() => {\r\n  return {\r\n    width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\r\n    marginLeft:\r\n      hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`,\r\n  }\r\n})\r\nconst inputValue = computed(() => {\r\n  const value = currentValue.value\r\n\r\n  if (Array.isArray(value) || isObject(value)) {\r\n    return JSON.stringify(value)\r\n  }\r\n\r\n  return value\r\n})\r\nconst columnFlex = computed(() => {\r\n  return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\r\n})\r\nconst labelWidthDefined = computed(\r\n  () => !!(formProps.labelWidth && formProps.labelWidth !== 'auto') || props.labelWidth > 0,\r\n)\r\n\r\nconst instances = new Set<any>()\r\n\r\nconst fieldObject = Object.freeze({\r\n  prop: computed(() => props.prop),\r\n  idFor: computed(() => props.prop),\r\n  labelId,\r\n  state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\r\n  disabled: computed(() => !!formProps.disabled),\r\n  loading: computed(() => !!formProps.loading),\r\n  size: computed(() => formProps.size || 'default'),\r\n  emitter,\r\n  labelWidth,\r\n  validate,\r\n  clearError,\r\n  reset,\r\n  getValue,\r\n  setValue,\r\n  sync: (instance: any) => {\r\n    if (instances.size) {\r\n      console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\r\n    }\r\n\r\n    instances.add(instance)\r\n  },\r\n  unSync: (instance: any) => {\r\n    instances.delete(instance)\r\n  },\r\n})\r\n\r\nprovide(FIELD_OPTIONS, props.manual ? null : fieldObject)\r\n\r\nwatch(\r\n  () => props.defaultValue,\r\n  value => {\r\n    initValue.value = value\r\n  },\r\n)\r\n\r\nonMounted(() => {\r\n  const value = currentValue.value\r\n\r\n  if (isNull(initValue.value)) {\r\n    initValue.value = Array.isArray(value) ? Array.from(value) : value\r\n  }\r\n\r\n  if (formFields) {\r\n    formFields.add(fieldObject)\r\n  }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  if (formFields) {\r\n    formFields.delete(fieldObject)\r\n  }\r\n})\r\n\r\ndefineExpose({ isError, inputValue, computedLabelWidth })\r\n\r\nfunction getLabelWidth(width: number | 'auto') {\r\n  return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\r\n}\r\n\r\nlet initialized = false\r\n\r\nfunction getValue(defaultValue: unknown = initValue.value) {\r\n  if (!formProps.model || !props.prop) return defaultValue\r\n\r\n  try {\r\n    const value = getValueByPath(formProps.model, props.prop, true)\r\n    initialized = true\r\n\r\n    return value\r\n  } catch (e) {\r\n    if (!initialized) {\r\n      setValueByPath(formProps.model, props.prop, defaultValue, false)\r\n      initialized = true\r\n    }\r\n\r\n    return defaultValue\r\n  }\r\n}\r\n\r\nfunction setValue(value: unknown, strict = false) {\r\n  if (!formProps.model || !props.prop) return\r\n\r\n  try {\r\n    return setValueByPath(formProps.model, props.prop, value, strict)\r\n  } catch (e) {}\r\n}\r\n\r\nfunction validate() {\r\n  return handleValidate()\r\n}\r\n\r\nfunction clearError() {\r\n  isError.value = false\r\n  errorTip.value = ''\r\n}\r\n\r\nfunction reset() {\r\n  clearError()\r\n\r\n  if (!formProps.model || !props.prop) return false\r\n\r\n  const value = currentValue.value\r\n\r\n  let resetValue\r\n\r\n  if (Array.isArray(value)) {\r\n    resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\r\n  } else {\r\n    resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\r\n  }\r\n\r\n  return setValueByPath(formProps.model, props.prop, resetValue, true)\r\n}\r\n\r\nasync function handleValidate() {\r\n  if (disabledValidate.value) {\r\n    disabledValidate.value = false\r\n\r\n    return handleValidateEnd(null)\r\n  }\r\n\r\n  if (!props.prop || !formProps.model || validating.value) {\r\n    return handleValidateEnd(null)\r\n  }\r\n\r\n  validating.value = true\r\n\r\n  const value = currentValue.value\r\n  const useRules = allRules.value\r\n  const model = formProps.model\r\n\r\n  let errors: string[] | null = await asyncValidate(\r\n    useRules,\r\n    value,\r\n    model,\r\n    isValidateAll.value,\r\n    locale.value.validateFail,\r\n  )\r\n\r\n  errors = errors.length ? errors : null\r\n\r\n  return handleValidateEnd(errors)\r\n}\r\n\r\nfunction handleValidateEnd(errors: string[] | null) {\r\n  validating.value = false\r\n\r\n  if (!errors) {\r\n    clearError()\r\n  } else {\r\n    isError.value = true\r\n    errorTip.value = Array.isArray(errors) ? errors[0] : errors\r\n  }\r\n\r\n  return errors\r\n}\r\n\r\nfunction handleLabelClick() {\r\n  emitter.emit('focus')\r\n}\r\n\r\nconst isNative = computed(() => !!(formProps.action && formProps.method))\r\n</script>\r\n\r\n<template>\r\n  <slot v-if=\"props.pure\" v-bind=\"defaultSlotParams\"></slot>\r\n  <Column\r\n    v-else\r\n    v-bind=\"$attrs\"\r\n    :class=\"className\"\r\n    :inherit=\"props.inherit\"\r\n    role=\"group\"\r\n    tag=\"div\"\r\n    :span=\"props.span\"\r\n    :offset=\"props.offset\"\r\n    :push=\"props.push\"\r\n    :pull=\"props.pull\"\r\n    :order=\"props.order\"\r\n    :xs=\"props.xs\"\r\n    :sm=\"props.sm\"\r\n    :md=\"props.md\"\r\n    :lg=\"props.lg\"\r\n    :xl=\"props.xl\"\r\n    :xxl=\"props.xxl\"\r\n    :flex=\"props.flex\"\r\n    :use-flex=\"columnFlex\"\r\n  >\r\n    <input\r\n      v-if=\"isNative\"\r\n      type=\"hidden\"\r\n      :name=\"props.name || props.prop\"\r\n      :value=\"inputValue\"\r\n      style=\"display: none\"\r\n    />\r\n    <span\r\n      v-if=\"hasLabel && labelAlign !== 'top' && !labelWidthDefined\"\r\n      ref=\"placeholder\"\r\n      :class=\"nh.be('placeholder')\"\r\n      role=\"none\"\r\n    >\r\n      <Icon v-if=\"props.help || slots.help\" v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\r\n      <slot name=\"label\">\r\n        {{ props.label + (formProps.labelSuffix || '') }}\r\n      </slot>\r\n    </span>\r\n    <label\r\n      v-if=\"hasLabel\"\r\n      :id=\"labelId\"\r\n      :class=\"nh.be('label')\"\r\n      :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\r\n      :for=\"props.htmlFor || props.prop\"\r\n      @click=\"handleLabelClick\"\r\n    >\r\n      <Tooltip v-if=\"props.help || slots.help\" transfer>\r\n        <template #trigger>\r\n          <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\r\n        </template>\r\n        <slot name=\"help\">\r\n          <div :class=\"nh.be('help-tip')\">\r\n            {{ props.help }}\r\n          </div>\r\n        </slot>\r\n      </Tooltip>\r\n      <slot name=\"label\">\r\n        {{ props.label + (formProps.labelSuffix || '') }}\r\n      </slot>\r\n    </label>\r\n    <div\r\n      :class=\"{\r\n        [nh.be('control')]: true,\r\n        [nh.bem('control', 'no-label')]: !hasLabel,\r\n        [nh.bem('control', 'action')]: props.action\r\n      }\"\r\n      role=\"alert\"\r\n      aria-relevant=\"all\"\r\n      :style=\"controlStyle\"\r\n    >\r\n      <slot v-bind=\"defaultSlotParams\"></slot>\r\n      <Transition :name=\"props.errorTransition\">\r\n        <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\r\n          <slot name=\"error\" :tip=\"errorTip\">\r\n            {{ errorTip }}\r\n          </slot>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n  </Column>\r\n</template>\r\n"],"names":["nh","useNameHelper","props","useProps","__props","slots","_useSlots","formProps","inject","FORM_PROPS","formActions","FORM_ACTIONS","formFields","FORM_FIELDS","emitter","createEventEmitter","locale","useLocale","toRef","icons","useIcons","wordSpace","useWordSpace","initValue","ref","isError","errorTip","validating","disabledValidate","labelWidth","defaultSlotParams","shallowReadonly","reactive","placeholder","useDisplay","labelId","useId","isRequired","computed","requiredTip","makeSentence","allRules","requiredRule","selfRules","formRules","getValueByPath","currentValue","getValue","isValidateAll","isNull","useAsterisk","rule","hideLabel","hasLabel","labelAlign","computedLabelWidth","getLabelWidth","className","controlStyle","inputValue","value","isObject","columnFlex","labelWidthDefined","instances","fieldObject","validate","clearError","reset","setValue","instance","provide","FIELD_OPTIONS","watch","onMounted","onBeforeUnmount","__expose","width","initialized","defaultValue","setValueByPath","strict","handleValidate","resetValue","isFunction","handleValidateEnd","useRules","model","errors","asyncValidate","handleLabelClick","isNative","_unref","_renderSlot","_ctx","_createBlock","Column","_mergeProps","$attrs","_createElementBlock","_normalizeClass","_openBlock","Icon","_createTextVNode","_toDisplayString","_normalizeStyle","Tooltip","_createVNode","_createElementVNode","_Transition"],"mappings":"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"}