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