{"version":3,"file":"field.mjs","sources":["../../../../../../../packages/components/field/src/field.tsx"],"sourcesContent":["import {\n  type ExtractPropTypes,\n  type HTMLAttributes,\n  type PropType,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\n\n// Utils\nimport {\n  type ComponentInstance,\n  addUnit,\n  clamp,\n  createNamespace,\n  extend,\n  formatNumber,\n  isDef,\n  makeNumericProp,\n  makeObjectProp,\n  makeStringProp,\n  numericProp,\n  preventDefault,\n  resetScroll,\n  toArray,\n  unknownProp,\n} from '@xzx-design/utils'\n\nimport { FORM_KEY } from '@xzx-design/components/form/src/types'\nimport {\n  Cell,\n  Icon,\n  type IconsComponent,\n  Loading,\n  cellSharedProps,\n} from '@xzx-design/components'\nimport {\n  CUSTOM_FIELD_INJECTION_KEY,\n  useEventListener,\n  useExpose,\n  useId,\n  useParent,\n} from '@xzx-design/hooks'\n\nimport { CloseOneFilled } from '@xzx-design/icons-vue'\nimport {\n  cutString,\n  endComposing,\n  getRuleMessage,\n  getStringLength,\n  isEmptyValue,\n  mapInputType,\n  resizeTextarea,\n  runRuleValidator,\n  runSyncRule,\n  startComposing,\n} from './utils'\n\n// Types\nimport type {\n  FieldAutosizeConfig,\n  FieldClearTrigger,\n  FieldExpose,\n  FieldFormSharedProps,\n  FieldFormatTrigger,\n  FieldRule,\n  FieldTextAlign,\n  FieldType,\n  FieldValidateError,\n  FieldValidateTrigger,\n  FieldValidationStatus,\n} from './types'\n\nconst [name, bem] = createNamespace('field')\n\n// provide to Search component to inherit\nexport const fieldSharedProps = {\n  id: String,\n  name: String,\n  leftIcon: makeObjectProp<IconsComponent>(null),\n  rightIcon: makeObjectProp<IconsComponent>(null),\n  autofocus: Boolean,\n  clearable: Boolean,\n  loading: Boolean,\n  maxlength: numericProp,\n  max: Number,\n  min: Number,\n  formatter: Function as PropType<(value: string) => string>,\n  clearIcon: makeObjectProp<IconsComponent>(CloseOneFilled),\n  modelValue: makeNumericProp(''),\n  inputAlign: String as PropType<FieldTextAlign>,\n  placeholder: String,\n  autocomplete: String,\n  autocapitalize: String,\n  autocorrect: String,\n  errorMessage: String,\n  enterkeyhint: String,\n  clearTrigger: makeStringProp<FieldClearTrigger>('focus'),\n  formatTrigger: makeStringProp<FieldFormatTrigger>('onChange'),\n  spellcheck: {\n    type: Boolean,\n    default: null,\n  },\n  error: {\n    type: Boolean,\n    default: null,\n  },\n  disabled: {\n    type: Boolean,\n    default: null,\n  },\n  readonly: {\n    type: Boolean,\n    default: null,\n  },\n  inputmode: String as PropType<HTMLAttributes['inputmode']>,\n}\n\nexport const fieldProps = extend({}, cellSharedProps, fieldSharedProps, {\n  rows: numericProp,\n  type: makeStringProp<FieldType>('text'),\n  rules: Array as PropType<FieldRule[]>,\n  autosize: [Boolean, Object] as PropType<boolean | FieldAutosizeConfig>,\n  labelWidth: numericProp,\n  labelClass: unknownProp,\n  labelAlign: String as PropType<FieldTextAlign>,\n  showWordLimit: Boolean,\n  errorMessageAlign: String as PropType<FieldTextAlign>,\n  colon: {\n    type: Boolean,\n    default: null,\n  },\n})\n\nexport type FieldProps = ExtractPropTypes<typeof fieldProps>\n\nexport default defineComponent({\n  name,\n\n  props: fieldProps,\n\n  emits: [\n    'blur',\n    'focus',\n    'clear',\n    'keypress',\n    'clickInput',\n    'endValidate',\n    'startValidate',\n    'clickLeftIcon',\n    'clickRightIcon',\n    'update:modelValue',\n  ],\n\n  setup(props, { emit, slots }) {\n    const id = useId()\n    const state = reactive({\n      status: 'unvalidated' as FieldValidationStatus,\n      focused: false,\n      validateMessage: '',\n    })\n\n    const inputRef = ref<HTMLInputElement>()\n    const clearIconRef = ref<ComponentInstance>()\n    const customValue = ref<() => unknown>()\n\n    const { parent: form } = useParent(FORM_KEY)\n\n    const getModelValue = () => String(props.modelValue ?? '')\n\n    const getProp = <T extends FieldFormSharedProps>(key: T) => {\n      if (isDef(props[key])) {\n        return props[key]\n      }\n      if (form && isDef(form.props[key])) {\n        return form.props[key]\n      }\n    }\n\n    const showClear = computed(() => {\n      const readonly = getProp('readonly')\n\n      if (props.clearable && !readonly) {\n        const hasValue = getModelValue() !== ''\n        const trigger =\n          props.clearTrigger === 'always' ||\n          (props.clearTrigger === 'focus' && state.focused)\n\n        return hasValue && trigger\n      }\n      return false\n    })\n\n    const formValue = computed(() => {\n      if (customValue.value && slots.input) {\n        return customValue.value()\n      }\n      return props.modelValue\n    })\n\n    const showRequiredMark = computed(() => {\n      const required = getProp('required')\n      if (required === 'auto') {\n        return props.rules?.some((rule: FieldRule) => rule.required)\n      }\n      return required\n    })\n\n    const runRules = (rules: FieldRule[]) =>\n      rules.reduce(\n        (promise, rule) =>\n          promise.then(() => {\n            if (state.status === 'failed') {\n              return\n            }\n\n            let { value } = formValue\n\n            if (rule.formatter) {\n              value = rule.formatter(value, rule)\n            }\n\n            if (!runSyncRule(value, rule)) {\n              state.status = 'failed'\n              state.validateMessage = getRuleMessage(value, rule)\n              return\n            }\n\n            if (rule.validator) {\n              if (isEmptyValue(value) && rule.validateEmpty === false) {\n                return\n              }\n\n              return runRuleValidator(value, rule).then((result) => {\n                if (result && typeof result === 'string') {\n                  state.status = 'failed'\n                  state.validateMessage = result\n                } else if (result === false) {\n                  state.status = 'failed'\n                  state.validateMessage = getRuleMessage(value, rule)\n                }\n              })\n            }\n          }),\n        Promise.resolve()\n      )\n\n    const resetValidation = () => {\n      state.status = 'unvalidated'\n      state.validateMessage = ''\n    }\n\n    const endValidate = () =>\n      emit('endValidate', {\n        status: state.status,\n        message: state.validateMessage,\n      })\n\n    const validate = (rules = props.rules) =>\n      new Promise<FieldValidateError | void>((resolve) => {\n        resetValidation()\n        if (rules) {\n          emit('startValidate')\n          runRules(rules).then(() => {\n            if (state.status === 'failed') {\n              resolve({\n                name: props.name,\n                message: state.validateMessage,\n              })\n              endValidate()\n            } else {\n              state.status = 'passed'\n              resolve()\n              endValidate()\n            }\n          })\n        } else {\n          resolve()\n        }\n      })\n\n    const validateWithTrigger = (trigger: FieldValidateTrigger) => {\n      if (form && props.rules) {\n        const { validateTrigger } = form.props\n        const defaultTrigger = toArray(validateTrigger).includes(trigger)\n        const rules = props.rules.filter((rule) => {\n          if (rule.trigger) {\n            return toArray(rule.trigger).includes(trigger)\n          }\n          return defaultTrigger\n        })\n\n        if (rules.length) {\n          validate(rules)\n        }\n      }\n    }\n\n    // native maxlength have incorrect line-break counting\n    // see: https://github.com/vant-ui/vant/issues/5033\n    const limitValueLength = (value: string) => {\n      const { maxlength } = props\n      if (isDef(maxlength) && getStringLength(value) > +maxlength) {\n        const modelValue = getModelValue()\n        if (modelValue && getStringLength(modelValue) === +maxlength) {\n          return modelValue\n        }\n        // Remove redundant interpolated values,\n        // make it consistent with the native input maxlength behavior.\n        const selectionEnd = inputRef.value?.selectionEnd\n        if (state.focused && selectionEnd) {\n          const valueArr = [...value]\n          const exceededLength = valueArr.length - +maxlength\n          valueArr.splice(selectionEnd - exceededLength, exceededLength)\n          return valueArr.join('')\n        }\n        return cutString(value, +maxlength)\n      }\n      return value\n    }\n\n    const updateValue = (\n      value: string,\n      trigger: FieldFormatTrigger = 'onChange'\n    ) => {\n      const originalValue = value\n      value = limitValueLength(value)\n      // When the value length exceeds maxlength,\n      // record the excess length for correcting the cursor position.\n      // https://github.com/youzan/vant/issues/11289\n      const limitDiffLen =\n        getStringLength(originalValue) - getStringLength(value)\n\n      // https://github.com/youzan/vant/issues/13058\n      if (props.type === 'number' || props.type === 'digit') {\n        const isNumber = props.type === 'number'\n        value = formatNumber(value, isNumber, isNumber)\n\n        if (\n          trigger === 'onBlur' &&\n          value !== '' &&\n          (props.min !== undefined || props.max !== undefined)\n        ) {\n          const adjustedValue = clamp(\n            +value,\n            props.min ?? Number.NEGATIVE_INFINITY,\n            props.max ?? Number.POSITIVE_INFINITY\n          )\n\n          if (+value !== adjustedValue) {\n            value = adjustedValue.toString()\n          }\n        }\n      }\n\n      let formatterDiffLen = 0\n      if (props.formatter && trigger === props.formatTrigger) {\n        const { formatter, maxlength } = props\n        value = formatter(value)\n        // The length of the formatted value may exceed maxlength.\n        if (isDef(maxlength) && getStringLength(value) > +maxlength) {\n          value = cutString(value, +maxlength)\n        }\n        if (inputRef.value && state.focused) {\n          const { selectionEnd } = inputRef.value\n          // The value before the cursor of the original value.\n          const bcoVal = cutString(originalValue, selectionEnd!)\n          // Record the length change of `bcoVal` after formatting,\n          // which is used to correct the cursor position.\n          formatterDiffLen =\n            getStringLength(formatter(bcoVal)) - getStringLength(bcoVal)\n        }\n      }\n\n      if (inputRef.value && inputRef.value.value !== value) {\n        // When the input is focused, correct the cursor position.\n        if (state.focused) {\n          let { selectionStart, selectionEnd } = inputRef.value\n          inputRef.value.value = value\n\n          if (isDef(selectionStart) && isDef(selectionEnd)) {\n            const valueLen = getStringLength(value)\n\n            if (limitDiffLen) {\n              selectionStart -= limitDiffLen\n              selectionEnd -= limitDiffLen\n            } else if (formatterDiffLen) {\n              selectionStart += formatterDiffLen\n              selectionEnd += formatterDiffLen\n            }\n\n            inputRef.value.setSelectionRange(\n              Math.min(selectionStart, valueLen),\n              Math.min(selectionEnd, valueLen)\n            )\n          }\n        } else {\n          inputRef.value.value = value\n        }\n      }\n\n      if (value !== props.modelValue) {\n        emit('update:modelValue', value)\n      }\n    }\n\n    const onInput = (event: Event) => {\n      // skip update value when composing\n      if (!event.target!.composing) {\n        updateValue((event.target as HTMLInputElement).value)\n      }\n    }\n\n    const blur = () => inputRef.value?.blur()\n    const focus = () => inputRef.value?.focus()\n\n    const adjustTextareaSize = () => {\n      const input = inputRef.value\n      if (props.type === 'textarea' && props.autosize && input) {\n        resizeTextarea(input, props.autosize)\n      }\n    }\n\n    const onFocus = (event: Event) => {\n      state.focused = true\n      emit('focus', event)\n      nextTick(adjustTextareaSize)\n\n      // readonly not work in legacy mobile safari\n      if (getProp('readonly')) {\n        blur()\n      }\n    }\n\n    const onBlur = (event: Event) => {\n      state.focused = false\n      updateValue(getModelValue(), 'onBlur')\n      emit('blur', event)\n\n      if (getProp('readonly')) {\n        return\n      }\n\n      validateWithTrigger('onBlur')\n      nextTick(adjustTextareaSize)\n      resetScroll()\n    }\n\n    const onClickInput = (event: MouseEvent) => emit('clickInput', event)\n\n    const onClickLeftIcon = (event: MouseEvent) => emit('clickLeftIcon', event)\n\n    const onClickRightIcon = (event: MouseEvent) =>\n      emit('clickRightIcon', event)\n\n    const onClear = (event: Event) => {\n      preventDefault(event)\n      emit('update:modelValue', '')\n      emit('clear', event)\n    }\n\n    // eslint-disable-next-line vue/return-in-computed-property\n    const showError = computed(() => {\n      if (typeof props.error === 'boolean') {\n        return props.error\n      }\n      if (form && form.props.showError && state.status === 'failed') {\n        return true\n      }\n    })\n\n    // eslint-disable-next-line vue/return-in-computed-property\n    const labelStyle = computed(() => {\n      const labelWidth = getProp('labelWidth')\n      const labelAlign = getProp('labelAlign')\n      if (labelWidth && labelAlign !== 'top') {\n        return { width: addUnit(labelWidth) }\n      }\n    })\n\n    const onKeypress = (event: KeyboardEvent) => {\n      const ENTER_CODE = 13\n\n      if (event.keyCode === ENTER_CODE) {\n        const submitOnEnter = form && form.props.submitOnEnter\n        if (!submitOnEnter && props.type !== 'textarea') {\n          preventDefault(event)\n        }\n\n        // trigger blur after click keyboard search button\n        if (props.type === 'search') {\n          blur()\n        }\n      }\n\n      emit('keypress', event)\n    }\n\n    const getInputId = () => props.id || `${id}-input`\n\n    const getValidationStatus = () => state.status\n\n    const renderInput = () => {\n      const controlClass = bem('control', [\n        getProp('inputAlign'),\n        {\n          error: showError.value,\n          custom: !!slots.input,\n          'min-height': props.type === 'textarea' && !props.autosize,\n        },\n      ])\n\n      if (slots.input) {\n        return (\n          <div class={controlClass} onClick={onClickInput}>\n            {slots.input()}\n          </div>\n        )\n      }\n\n      const inputAttrs = {\n        id: getInputId(),\n        ref: inputRef,\n        name: props.name,\n        rows: props.rows !== undefined ? +props.rows : undefined,\n        class: controlClass,\n        disabled: getProp('disabled'),\n        readonly: getProp('readonly'),\n        autofocus: props.autofocus,\n        placeholder: props.placeholder,\n        autocomplete: props.autocomplete,\n        autocapitalize: props.autocapitalize,\n        autocorrect: props.autocorrect,\n        enterkeyhint: props.enterkeyhint,\n        spellcheck: props.spellcheck,\n        'aria-labelledby': props.label ? `${id}-label` : undefined,\n        'data-allow-mismatch': 'attribute',\n        onBlur,\n        onFocus,\n        onInput,\n        onClick: onClickInput,\n        onChange: endComposing,\n        onKeypress,\n        onCompositionend: endComposing,\n        onCompositionstart: startComposing,\n      }\n\n      if (props.type === 'textarea') {\n        return <textarea {...inputAttrs} inputmode={props.inputmode} />\n      }\n\n      return (\n        <input {...mapInputType(props.type, props.inputmode)} {...inputAttrs} />\n      )\n    }\n\n    const renderLeftIcon = () => {\n      const leftIconSlot = slots['left-icon']\n\n      if (props.leftIcon || leftIconSlot) {\n        return (\n          <div class={bem('left-icon')} onClick={onClickLeftIcon}>\n            {leftIconSlot ? (\n              leftIconSlot()\n            ) : (\n              <Icon classPrefix={props.iconPrefix}>\n                <props.leftIcon />\n              </Icon>\n            )}\n          </div>\n        )\n      }\n    }\n\n    const renderRightIcon = () => {\n      const rightIconSlot = slots['right-icon']\n\n      if (props.rightIcon || rightIconSlot) {\n        return (\n          <div class={bem('right-icon')} onClick={onClickRightIcon}>\n            {rightIconSlot ? (\n              rightIconSlot()\n            ) : (\n              <Icon classPrefix={props.iconPrefix}>\n                <props.rightIcon />\n              </Icon>\n            )}\n          </div>\n        )\n      }\n    }\n\n    const renderWordLimit = () => {\n      if (props.showWordLimit && props.maxlength) {\n        const count = getStringLength(getModelValue())\n        return (\n          <div class={bem('word-limit')}>\n            <span class={bem('word-num')}>{count}</span>/{props.maxlength}\n          </div>\n        )\n      }\n    }\n\n    const renderMessage = () => {\n      if (form && form.props.showErrorMessage === false) {\n        return\n      }\n\n      const message = props.errorMessage || state.validateMessage\n\n      if (message) {\n        const slot = slots['error-message']\n        const errorMessageAlign = getProp('errorMessageAlign')\n        return (\n          <div class={bem('error-message', errorMessageAlign)}>\n            {slot ? slot({ message }) : message}\n          </div>\n        )\n      }\n    }\n\n    const renderLabel = () => {\n      const labelWidth = getProp('labelWidth')\n      const labelAlign = getProp('labelAlign')\n      const colon = getProp('colon') ? ':' : ''\n\n      if (slots.label) {\n        return [slots.label(), colon]\n      }\n      if (props.label) {\n        return (\n          <label\n            id={`${id}-label`}\n            for={slots.input ? undefined : getInputId()}\n            data-allow-mismatch=\"attribute\"\n            onClick={(event: MouseEvent) => {\n              // https://github.com/youzan/vant/issues/11831\n              preventDefault(event)\n              focus()\n            }}\n            style={\n              labelAlign === 'top' && labelWidth\n                ? { width: addUnit(labelWidth) }\n                : undefined\n            }\n          >\n            {props.label + colon}\n          </label>\n        )\n      }\n    }\n\n    const renderFieldBody = () => [\n      <div class={bem('body')}>\n        {renderInput()}\n        {(showClear.value || props.loading) &&\n          (props.loading ? (\n            <Loading />\n          ) : (\n            <Icon ref={clearIconRef} class={bem('clear')}>\n              <props.clearIcon />\n            </Icon>\n          ))}\n        {renderRightIcon()}\n        {slots.button && <div class={bem('button')}>{slots.button()}</div>}\n      </div>,\n      renderWordLimit(),\n      renderMessage(),\n    ]\n\n    useExpose<FieldExpose>({\n      blur,\n      focus,\n      validate,\n      formValue,\n      resetValidation,\n      getValidationStatus,\n    })\n\n    provide(CUSTOM_FIELD_INJECTION_KEY, {\n      customValue,\n      resetValidation,\n      validateWithTrigger,\n    })\n\n    watch(\n      () => props.modelValue,\n      () => {\n        updateValue(getModelValue())\n        resetValidation()\n        validateWithTrigger('onChange')\n        nextTick(adjustTextareaSize)\n      }\n    )\n\n    onMounted(() => {\n      updateValue(getModelValue(), props.formatTrigger)\n      nextTick(adjustTextareaSize)\n    })\n\n    // useEventListener will set passive to `false` to eliminate the warning of Chrome\n    useEventListener('touchstart', onClear, {\n      target: computed(() => clearIconRef.value?.$el),\n    })\n\n    useEventListener('mousedown', onClear, {\n      target: computed(() => clearIconRef.value?.$el),\n    })\n\n    return () => {\n      const disabled = getProp('disabled')\n      const labelAlign = getProp('labelAlign')\n      const LeftIcon = renderLeftIcon()\n\n      const renderTitle = () => {\n        const Label = renderLabel()\n        if (labelAlign === 'top') {\n          return [LeftIcon, Label].filter(Boolean)\n        }\n        return Label || []\n      }\n\n      return (\n        <Cell\n          v-slots={{\n            icon: LeftIcon && labelAlign !== 'top' ? () => LeftIcon : null,\n            title: renderTitle,\n            value: renderFieldBody,\n            extra: slots.extra,\n          }}\n          size={props.size}\n          class={bem({\n            error: showError.value,\n            disabled,\n            [`label-${labelAlign}`]: labelAlign,\n          })}\n          disabled={props.disabled}\n          center={props.center}\n          border={props.border}\n          isLink={props.isLink}\n          clickable={props.clickable}\n          titleStyle={labelStyle.value}\n          valueClass={bem('value')}\n          titleClass={[\n            bem('label', [labelAlign, { required: showRequiredMark.value }]),\n            props.labelClass,\n          ]}\n          arrowDirection={props.arrowDirection}\n        />\n      )\n    }\n  },\n})\n"],"names":["name","bem","createNamespace","fieldSharedProps","id","String","leftIcon","makeObjectProp","rightIcon","autofocus","Boolean","clearable","loading","maxlength","numericProp","max","Number","min","formatter","Function","clearIcon","CloseOneFilled","modelValue","makeNumericProp","inputAlign","placeholder","autocomplete","autocapitalize","autocorrect","errorMessage","enterkeyhint","clearTrigger","makeStringProp","formatTrigger","spellcheck","type","default","error","disabled","readonly","inputmode","fieldProps","extend","cellSharedProps","rows","rules","Array","autosize","Object","labelWidth","labelClass","unknownProp","labelAlign","showWordLimit","errorMessageAlign","colon","defineComponent","props","emits","setup","emit","slots","useId","state","reactive","status","focused","validateMessage","inputRef","ref","clearIconRef","customValue","parent","form","useParent","FORM_KEY","getModelValue","getProp","key","isDef","showClear","computed","hasValue","trigger","formValue","value","input","showRequiredMark","required","some","rule","runRules","reduce","promise","then","runSyncRule","getRuleMessage","validator","isEmptyValue","validateEmpty","runRuleValidator","result","Promise","resolve","resetValidation","endValidate","message","validate","validateWithTrigger","validateTrigger","defaultTrigger","toArray","includes","filter","length","limitValueLength","getStringLength","selectionEnd","valueArr","exceededLength","splice","join","cutString","updateValue","originalValue","limitDiffLen","isNumber","formatNumber","undefined","adjustedValue","clamp","NEGATIVE_INFINITY","POSITIVE_INFINITY","toString","formatterDiffLen","bcoVal","selectionStart","valueLen","setSelectionRange","Math","onInput","event","target","composing","blur","focus","adjustTextareaSize","resizeTextarea","onFocus","nextTick","onBlur","resetScroll","onClickInput","onClickLeftIcon","onClickRightIcon","onClear","preventDefault","showError","labelStyle","width","addUnit","onKeypress","ENTER_CODE","keyCode","submitOnEnter","getInputId","getValidationStatus","renderInput","controlClass","custom","_createVNode","inputAttrs","class","label","onClick","onChange","endComposing","onCompositionend","onCompositionstart","startComposing","_mergeProps","mapInputType","renderLeftIcon","leftIconSlot","Icon","iconPrefix","renderRightIcon","rightIconSlot","renderWordLimit","count","_createTextVNode","renderMessage","showErrorMessage","slot","renderLabel","renderFieldBody","Loading","button","useExpose","provide","CUSTOM_FIELD_INJECTION_KEY","watch","onMounted","useEventListener","$el","LeftIcon","renderTitle","Label","Cell","size","center","border","isLink","clickable","arrowDirection","icon","title","extra"],"mappings":"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"}