{"version":3,"file":"input.mjs","sources":["../../../components/input/input.tsx"],"sourcesContent":["import { Icon } from '@/components/icon'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { Transition, computed, defineComponent, nextTick, ref, renderSlot, toRef, watch } from 'vue'\r\n\r\nimport { useHover } from '@vexip-ui/hooks'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { debounce, isNull, noop, throttle, toNumber } from '@vexip-ui/utils'\r\nimport { inputProps } from './props'\r\n\r\nimport type { ChangeEvent, InputType } from './symbol'\r\n\r\ntype InputEventType = 'input' | 'change'\r\n\r\nconst inputTypes = Object.freeze<InputType[]>(['text', 'password', 'date', 'datetime', 'time'])\r\n\r\nfunction toNotNullString(value: any) {\r\n  return isNull(value) ? '' : String(value)\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Input',\r\n  props: inputProps,\r\n  emits: ['update:value'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const {\r\n      idFor,\r\n      labelId,\r\n      state,\r\n      disabled,\r\n      loading,\r\n      size,\r\n      validateField,\r\n      clearField,\r\n      getFieldValue,\r\n      setFieldValue,\r\n    } = useFieldStore<string | number>(() => inputControl.value?.focus())\r\n\r\n    const props = useProps('input', _props, {\r\n      size: createSizeProp(size),\r\n      state: createStateProp(state),\r\n      locale: null,\r\n      type: {\r\n        default: 'text',\r\n        validator: value => inputTypes.includes(value),\r\n      },\r\n      prefix: createIconProp(),\r\n      prefixColor: '',\r\n      suffix: createIconProp(),\r\n      suffixColor: '',\r\n      formatter: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      value: {\r\n        default: () => getFieldValue(),\r\n        static: true,\r\n      },\r\n      placeholder: null,\r\n      autofocus: false,\r\n      spellcheck: false,\r\n      autocomplete: false,\r\n      readonly: false,\r\n      disabled: () => disabled.value,\r\n      controlClass: null,\r\n      debounce: false,\r\n      delay: null,\r\n      maxLength: 0,\r\n      hideCount: false,\r\n      before: '',\r\n      after: '',\r\n      plainPassword: false,\r\n      clearable: false,\r\n      loading: () => loading.value,\r\n      loadingIcon: createIconProp(),\r\n      loadingLock: false,\r\n      loadingEffect: null,\r\n      transparent: false,\r\n      sync: false,\r\n      controlAttrs: null,\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const initValue = toNotNullString(props.value)\r\n\r\n    const nh = useNameHelper('input')\r\n    const icons = useIcons()\r\n    const focused = ref(false)\r\n    const currentValue = ref(initValue)\r\n    const showPassword = ref(false)\r\n    const currentLength = ref(initValue.length)\r\n    const beforeHover = ref(false)\r\n    const afterHover = ref(false)\r\n    const composing = ref(false)\r\n\r\n    const inputControl = ref<HTMLInputElement>()\r\n\r\n    const { wrapper: control, isHover } = useHover()\r\n    const locale = useLocale('input', toRef(props, 'locale'))\r\n\r\n    let lastValue = props.value\r\n\r\n    const hasBefore = computed(() => {\r\n      return !!(\r\n        slots.before ||\r\n        slots.beforeAction ||\r\n        slots['before-action'] ||\r\n        props.before ||\r\n        props.slots.before ||\r\n        props.slots.beforeAction\r\n      )\r\n    })\r\n    const hasAfter = computed(() => {\r\n      return !!(\r\n        slots.after ||\r\n        slots.afterAction ||\r\n        slots['after-action'] ||\r\n        props.after ||\r\n        props.slots.after ||\r\n        props.slots.afterAction\r\n      )\r\n    })\r\n    const basisClass = computed(() => {\r\n      return {\r\n        [nh.bs('wrapper')]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.size)]: props.size !== 'default',\r\n      }\r\n    })\r\n    const readonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bm(props.type),\r\n        !hasBefore.value && !hasAfter.value && basisClass.value,\r\n        {\r\n          [nh.bm('focused')]: focused.value,\r\n          [nh.bm('disabled')]: props.disabled,\r\n          [nh.bm('readonly')]: readonly.value,\r\n          [nh.bm('loading')]: props.loading,\r\n          [nh.bm(props.state)]: props.state !== 'default',\r\n          [nh.bm('before')]: slots.beforeAction || slots['before-action'] || props.slots.before,\r\n          [nh.bm('after')]: slots.afterAction || slots['after-action'] || props.slots.after,\r\n          [nh.bm('transparent')]: props.transparent,\r\n          [nh.bm('plain-password')]: props.plainPassword,\r\n        },\r\n      ]\r\n    })\r\n    const wrapperClass = computed(() => {\r\n      return {\r\n        ...basisClass.value,\r\n        [nh.bm(`wrapper--${props.size}`)]: props.size !== 'default',\r\n        [nh.bs('wrapper--before-only')]: hasBefore.value && !hasAfter.value,\r\n        [nh.bs('wrapper--after-only')]: !hasBefore.value && hasAfter.value,\r\n        [nh.bm('transparent')]: props.transparent,\r\n      }\r\n    })\r\n    const hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\n    const hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\r\n    const inputType = computed(() => {\r\n      const type = props.type\r\n\r\n      if (type === 'password') {\r\n        return showPassword.value ? 'text' : 'password'\r\n      }\r\n\r\n      if (type === 'datetime') {\r\n        return 'datetime-local'\r\n      }\r\n\r\n      return type\r\n    })\r\n    const formattedValue = computed(() => {\r\n      return typeof props.formatter === 'function'\r\n        ? toNotNullString(props.formatter(currentValue.value))\r\n        : currentValue.value\r\n    })\r\n    const passwordIcon = computed(() =>\r\n      showPassword.value ? icons.value.plainText : icons.value.cipherText,\r\n    )\r\n    const hasValue = computed(() => {\r\n      return !(isNull(currentValue.value) || currentValue.value === '')\r\n    })\r\n    const showClear = computed(() => {\r\n      return (\r\n        !props.disabled && !readonly.value && props.clearable && hasValue.value && isHover.value\r\n      )\r\n    })\r\n    const autoComplete = computed(() => {\r\n      return typeof props.autocomplete === 'boolean'\r\n        ? props.autocomplete\r\n          ? 'on'\r\n          : 'off'\r\n        : props.autocomplete\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        currentValue.value = toNotNullString(value)\r\n        lastValue = currentValue.value\r\n        limitValueLength()\r\n      },\r\n    )\r\n    watch(\r\n      [formattedValue, inputControl],\r\n      () => {\r\n        if (inputControl.value) {\r\n          inputControl.value.value = formattedValue.value\r\n        }\r\n      },\r\n      { immediate: true, flush: 'post' },\r\n    )\r\n\r\n    // Expose api methods.\r\n    // Need to define some same name methods in 'methods' option to support infer types.\r\n    expose({\r\n      idFor,\r\n      labelId,\r\n      focused,\r\n      currentValue,\r\n      showPassword,\r\n      currentLength,\r\n      composing,\r\n      input: inputControl,\r\n      copyValue,\r\n      focus: (options?: FocusOptions) => {\r\n        inputControl.value?.focus(options)\r\n      },\r\n      blur: () => {\r\n        inputControl.value?.blur()\r\n      },\r\n    })\r\n\r\n    function getLatestValue() {\r\n      return typeof props.value === 'number' ? parseFloat(currentValue.value) : currentValue.value\r\n    }\r\n\r\n    function handleFocus(event: FocusEvent) {\r\n      if (!focused.value) {\r\n        focused.value = true\r\n        emitEvent(props.onFocus, event)\r\n      }\r\n    }\r\n\r\n    function handleBlur(event: FocusEvent) {\r\n      if (focused.value) {\r\n        focused.value = false\r\n\r\n        setTimeout(() => {\r\n          if (!focused.value) {\r\n            emitEvent(props.onBlur, event)\r\n            lastValue !== getLatestValue() && emitChangeEvent('change')\r\n          }\r\n        }, 120)\r\n      }\r\n    }\r\n\r\n    function handleChange(event: Event) {\r\n      const type = event.type as InputEventType\r\n\r\n      if (composing.value) {\r\n        if (type === 'input') return\r\n\r\n        composing.value = false\r\n      }\r\n\r\n      currentValue.value = (event.target as HTMLInputElement).value\r\n      limitValueLength()\r\n\r\n      const value = currentValue.value\r\n\r\n      setValue(value, type)\r\n    }\r\n\r\n    function setValue(value: string, type: InputEventType, sync = props.sync) {\r\n      currentValue.value = value\r\n      emitChangeEvent(type, sync)\r\n    }\r\n\r\n    function emitChangeEvent(type: InputEventType, sync = props.sync) {\r\n      type = type === 'input' ? 'input' : 'change'\r\n\r\n      const value = getLatestValue()\r\n\r\n      if (type === 'change') {\r\n        lastValue = value\r\n\r\n        if (!sync) {\r\n          emit('update:value', value)\r\n          setFieldValue(value)\r\n        }\r\n\r\n        emitEvent(props.onChange as ChangeEvent, value)\r\n\r\n        if (!sync) {\r\n          validateField()\r\n        }\r\n      } else {\r\n        if (sync) {\r\n          emit('update:value', value)\r\n          setFieldValue(value)\r\n        }\r\n\r\n        emitEvent(props.onInput as ChangeEvent, value)\r\n\r\n        if (sync) {\r\n          validateField()\r\n        }\r\n      }\r\n    }\r\n\r\n    function limitValueLength() {\r\n      let value = currentValue.value\r\n\r\n      if (isNull(value)) {\r\n        currentLength.value = 0\r\n\r\n        return\r\n      }\r\n\r\n      const maxLength = props.maxLength\r\n\r\n      if (maxLength && value.length > maxLength) {\r\n        value = value.slice(0, maxLength)\r\n      }\r\n\r\n      currentLength.value = value.length\r\n      currentValue.value = value\r\n    }\r\n\r\n    function toggleShowPassword() {\r\n      if (props.disabled) {\r\n        return\r\n      }\r\n\r\n      showPassword.value = !showPassword.value\r\n      nextTick(() => {\r\n        inputControl.value?.focus()\r\n      })\r\n    }\r\n\r\n    function handleClear(event: MouseEvent) {\r\n      if (props.disabled || readonly.value) return\r\n\r\n      event.stopPropagation()\r\n      setValue('', 'change', false)\r\n      emitEvent(props.onClear)\r\n      nextTick(() => clearField(''))\r\n      currentLength.value = 0\r\n      inputControl.value?.focus()\r\n    }\r\n\r\n    function handleEnter() {\r\n      emitEvent(props.onEnter)\r\n    }\r\n\r\n    function handlePrefixClick(event: MouseEvent) {\r\n      emitEvent(props.onPrefixClick, event)\r\n    }\r\n\r\n    function handleSuffixClick(event: MouseEvent) {\r\n      emitEvent(props.onSuffixClick, event)\r\n    }\r\n\r\n    function handleKeyDown(event: KeyboardEvent) {\r\n      emitEvent(props.onKeyDown, event)\r\n    }\r\n\r\n    function handleKeyPress(event: KeyboardEvent) {\r\n      emitEvent(props.onKeyPress, event)\r\n    }\r\n\r\n    function handleKeyUp(event: KeyboardEvent) {\r\n      if (event.key === 'Enter') {\r\n        handleEnter()\r\n      }\r\n\r\n      emitEvent(props.onKeyUp, event)\r\n    }\r\n\r\n    function handleCompositionStart(event: CompositionEvent) {\r\n      composing.value = true\r\n      emitEvent(props.onCompositionStart, event)\r\n    }\r\n\r\n    function handleCompositionEnd(event: CompositionEvent) {\r\n      if (composing.value) {\r\n        composing.value = false\r\n\r\n        if (inputControl.value) {\r\n          inputControl.value.dispatchEvent(new Event('input'))\r\n        }\r\n      }\r\n\r\n      emitEvent(props.onCompositionEnd, event)\r\n    }\r\n\r\n    function copyValue() {\r\n      const input = document.createElement('input')\r\n\r\n      input.style.height = '0'\r\n      input.setAttribute('readonly', 'readonly')\r\n      input.value = currentValue.value\r\n      document.body.appendChild(input)\r\n      input.select()\r\n\r\n      const isSuccess = document.execCommand('copy')\r\n\r\n      document.body.removeChild(input)\r\n\r\n      return isSuccess\r\n    }\r\n\r\n    function preventDefault(event: Event) {\r\n      event.preventDefault()\r\n    }\r\n\r\n    const delay = toNumber(props.delay)\r\n    const handleInput = props.debounce\r\n      ? debounce(handleChange, delay || 100)\r\n      : throttle(handleChange, delay || 16)\r\n\r\n    function renderPrefix() {\r\n      return (\r\n        <div\r\n          class={[nh.be('icon'), nh.be('prefix')]}\r\n          style={{ color: props.prefixColor }}\r\n          onClick={handlePrefixClick}\r\n        >\r\n          {renderSlot(slots, 'prefix', undefined, () => [\r\n            <Renderer renderer={props.slots.prefix}>\r\n              <Icon icon={props.prefix}></Icon>\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderCustomSuffix() {\r\n      if (hasSuffix.value) {\r\n        return (\r\n          <div\r\n            key={'suffix'}\r\n            class={[nh.be('icon'), nh.be('suffix')]}\r\n            style={{\r\n              color: props.suffixColor,\r\n              opacity: showClear.value || props.loading ? '0%' : '',\r\n            }}\r\n            onClick={handleSuffixClick}\r\n          >\r\n            {renderSlot(slots, 'suffix', undefined, () => [\r\n              <Renderer renderer={props.slots.suffix}>\r\n                <Icon icon={props.suffix}></Icon>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      if (props.clearable || props.loading) {\r\n        return (\r\n          <div key={'placeholder'} class={[nh.be('icon'), nh.bem('icon', 'placeholder')]}></div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderSuffixAction() {\r\n      if (showClear.value) {\r\n        return (\r\n          <button\r\n            key={'clear'}\r\n            class={[nh.be('icon'), nh.be('clear')]}\r\n            type={'button'}\r\n            tabindex={-1}\r\n            aria-label={locale.value.ariaLabel.clear}\r\n            onClick={handleClear}\r\n          >\r\n            <Icon {...icons.value.clear} label={'clear'}></Icon>\r\n          </button>\r\n        )\r\n      }\r\n\r\n      if (props.loading) {\r\n        return (\r\n          <div key={'loading'} class={[nh.be('icon'), nh.be('loading')]}>\r\n            <Icon\r\n              {...icons.value.loading}\r\n              effect={props.loadingEffect || icons.value.loading.effect}\r\n              icon={props.loadingIcon || icons.value.loading.icon}\r\n              label={'loading'}\r\n            ></Icon>\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderSuffix() {\r\n      return (\r\n        <div class={nh.be('suffix-wrapper')}>\r\n          {renderCustomSuffix()}\r\n          <Transition name={nh.ns('fade')} appear>\r\n            {renderSuffixAction()}\r\n          </Transition>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderCount() {\r\n      return (\r\n        <div class={nh.be('count')}>\r\n          {renderSlot(slots, 'count', { value: currentValue.value }, () => [\r\n            <Renderer renderer={props.slots.count} data={{ value: currentValue.value }}>\r\n              {props.maxLength === Infinity\r\n                ? currentLength.value\r\n                : `${currentLength.value}/${props.maxLength}`}\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderPlainPassword() {\r\n      if (props.type === 'password' && props.plainPassword) {\r\n        return (\r\n          <div\r\n            key={'password'}\r\n            class={[nh.be('icon'), nh.be('password')]}\r\n            style={{\r\n              color: props.suffixColor,\r\n            }}\r\n            onClick={toggleShowPassword}\r\n          >\r\n            {renderSlot(slots, 'password', { plain: showPassword.value }, () => [\r\n              <Renderer renderer={props.slots.password} data={{ plain: showPassword.value }}>\r\n                <Icon {...passwordIcon.value}></Icon>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderControl() {\r\n      return (\r\n        <div\r\n          id={idFor.value}\r\n          ref={control}\r\n          class={className.value}\r\n          onClick={() => inputControl.value?.focus()}\r\n        >\r\n          {hasPrefix.value && renderPrefix()}\r\n          <input\r\n            {...props.controlAttrs}\r\n            ref={inputControl}\r\n            class={[nh.be('control'), props.controlAttrs?.class, props.controlClass]}\r\n            type={inputType.value}\r\n            autofocus={props.autofocus}\r\n            autocomplete={autoComplete.value}\r\n            spellcheck={props.spellcheck}\r\n            disabled={props.disabled}\r\n            readonly={readonly.value || undefined}\r\n            placeholder={props.placeholder ?? locale.value.placeholder}\r\n            maxlength={props.maxLength > 0 ? props.maxLength : undefined}\r\n            name={props.name || props.controlAttrs?.name}\r\n            aria-labelledby={labelId.value}\r\n            onBlur={handleBlur}\r\n            onFocus={handleFocus}\r\n            onInput={handleInput}\r\n            onChange={handleChange}\r\n            onKeypress={handleKeyPress}\r\n            onKeydown={handleKeyDown}\r\n            onKeyup={handleKeyUp}\r\n            onSubmit={preventDefault}\r\n            onCompositionstart={handleCompositionStart}\r\n            onCompositionend={handleCompositionEnd}\r\n          />\r\n          {renderSuffix()}\r\n          {props.maxLength > 0 && !props.hideCount ? renderCount() : null}\r\n          {renderPlainPassword()}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderAside(type: 'before' | 'after') {\r\n      const buttonSlot =\r\n        slots[`${type}Action`] || slots[`${type}-action`] || props.slots[`${type}Action`]\r\n\r\n      if (buttonSlot) {\r\n        return (\r\n          <div\r\n            class={[nh.be(type), nh.bem(type, 'action')]}\r\n            onMouseenter={() => ((type === 'before' ? beforeHover : afterHover).value = true)}\r\n            onMouseleave={() => ((type === 'before' ? beforeHover : afterHover).value = false)}\r\n          >\r\n            {buttonSlot()}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <div class={nh.be(type)}>\r\n          {slots[type] ? (\r\n            slots[type]!()\r\n          ) : (\r\n            <Renderer renderer={props.slots[type]}>{props[type]}</Renderer>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (hasBefore.value || hasAfter.value) {\r\n        return (\r\n          <div class={wrapperClass.value}>\r\n            {hasBefore.value && renderAside('before')}\r\n            {renderControl()}\r\n            {hasAfter.value && renderAside('after')}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return renderControl()\r\n    }\r\n  },\r\n  methods: {\r\n    focus: noop as (options?: FocusOptions) => void,\r\n    blur: noop as () => void,\r\n  },\r\n})\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","inputTypes","freeze","toNotNullString","value","isNull","String","defineComponent","name","props","inputProps","emits","setup","_props","slots","emit","expose","idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","inputControl","focus","useProps","createSizeProp","createStateProp","locale","type","default","validator","includes","prefix","createIconProp","prefixColor","suffix","suffixColor","formatter","isFunc","static","placeholder","autofocus","spellcheck","autocomplete","readonly","controlClass","debounce","delay","maxLength","hideCount","before","after","plainPassword","clearable","loadingIcon","loadingLock","loadingEffect","transparent","sync","controlAttrs","initValue","nh","useNameHelper","icons","useIcons","focused","ref","currentValue","showPassword","currentLength","length","beforeHover","afterHover","composing","wrapper","control","isHover","useHover","useLocale","toRef","lastValue","hasBefore","computed","beforeAction","hasAfter","afterAction","basisClass","bs","bm","inherit","className","b","wrapperClass","hasPrefix","hasSuffix","inputType","formattedValue","passwordIcon","plainText","cipherText","hasValue","showClear","autoComplete","watch","limitValueLength","immediate","flush","input","copyValue","options","blur","getLatestValue","parseFloat","handleFocus","event","emitEvent","onFocus","handleBlur","setTimeout","onBlur","emitChangeEvent","handleChange","target","setValue","onChange","onInput","slice","toggleShowPassword","nextTick","handleClear","stopPropagation","onClear","handleEnter","onEnter","handlePrefixClick","onPrefixClick","handleSuffixClick","onSuffixClick","handleKeyDown","onKeyDown","handleKeyPress","onKeyPress","handleKeyUp","key","onKeyUp","handleCompositionStart","onCompositionStart","handleCompositionEnd","dispatchEvent","Event","onCompositionEnd","document","createElement","style","height","setAttribute","body","appendChild","select","isSuccess","execCommand","removeChild","preventDefault","toNumber","handleInput","throttle","renderPrefix","_createVNode","be","color","renderSlot","undefined","Renderer","Icon","renderCustomSuffix","opacity","bem","renderSuffixAction","ariaLabel","clear","_mergeProps","effect","icon","renderSuffix","_slot","Transition","ns","renderCount","count","Infinity","renderPlainPassword","plain","password","renderControl","onClick","class","renderAside","buttonSlot","onMouseenter","onMouseleave","methods","noop"],"mappings":"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"}