{"version":3,"file":"Mentions.cjs","sources":["../../../../../../packages/vue-components/vc-mentions/src/Mentions.tsx"],"sourcesContent":["import type { EventHandler } from '@antdv/types';\nimport type { BaseInputExpose } from '@antdv/vue-components/vc-input/src/BaseInputCore';\nimport type { CSSProperties, ExtractPropTypes } from 'vue';\nimport type { OptionProps } from './Option';\nimport { classNames, initDefaultProps, KeyCode, omit } from '@antdv/utils';\nimport BaseInputCore from '@antdv/vue-components/vc-input/src/BaseInputCore';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onUpdated,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watchEffect,\n} from 'vue';\nimport KeywordTrigger from './KeywordTrigger';\nimport MentionsContextKey from './MentionsContext';\nimport { defaultProps, vcMentionsProps } from './mentionsProps';\nimport { getBeforeSelectionText, getLastMeasureIndex, replaceWithMeasure, setInputSelection } from './util';\n\nexport type MentionsProps = Partial<ExtractPropTypes<typeof vcMentionsProps>>;\n\nfunction noop() {}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'Mentions',\n  inheritAttrs: false,\n  props: initDefaultProps(vcMentionsProps, defaultProps),\n  emits: ['change', 'select', 'search', 'focus', 'blur', 'pressenter'],\n  setup(props, { emit, attrs, expose, slots }) {\n    const measure = ref(null);\n    const textarea = ref<BaseInputExpose>(null);\n    const focusId = ref();\n    const state = reactive({\n      value: props.value || '',\n      measuring: false,\n      measureLocation: 0,\n      measureText: null,\n      measurePrefix: '',\n      activeIndex: 0,\n      isFocus: false,\n    });\n\n    watchEffect(() => {\n      state.value = props.value;\n    });\n\n    const triggerChange = (val: string) => {\n      emit('change', val);\n    };\n\n    const onChange: EventHandler = ({ target: { value } }) => {\n      triggerChange(value);\n    };\n\n    const startMeasure = (measureText: string, measurePrefix: string, measureLocation: number) => {\n      Object.assign(state, {\n        measuring: true,\n        measureText,\n        measurePrefix,\n        measureLocation,\n        activeIndex: 0,\n      });\n    };\n    const stopMeasure = (callback?: () => void) => {\n      Object.assign(state, {\n        measuring: false,\n        measureLocation: 0,\n        measureText: null,\n      });\n      callback?.();\n    };\n\n    const onKeyDown = (event: KeyboardEvent) => {\n      const { which } = event;\n      // Skip if not measuring\n      if (!state.measuring)\n        return;\n\n      if (which === KeyCode.UP || which === KeyCode.DOWN) {\n        // Control arrow function\n        const optionLen = options.value.length;\n        const offset = which === KeyCode.UP ? -1 : 1;\n        const newActiveIndex = (state.activeIndex + offset + optionLen) % optionLen;\n        state.activeIndex = newActiveIndex;\n        event.preventDefault();\n      } else if (which === KeyCode.ESC) {\n        stopMeasure();\n      } else if (which === KeyCode.ENTER) {\n        // Measure hit\n        event.preventDefault();\n        if (!options.value.length) {\n          stopMeasure();\n          return;\n        }\n        const option = options.value[state.activeIndex];\n        selectOption(option);\n      }\n    };\n\n    const onKeyUp = (event: KeyboardEvent) => {\n      const { key, which } = event;\n      const { measureText: prevMeasureText, measuring } = state;\n      const { prefix, validateSearch } = props;\n      const target = event.target as HTMLTextAreaElement;\n      if ((target as any).composing)\n        return;\n\n      const selectionStartText = getBeforeSelectionText(target);\n      const { location: measureIndex, prefix: measurePrefix } = getLastMeasureIndex(\n        selectionStartText,\n        prefix,\n      );\n\n      // Skip if match the white key list\n      if ([KeyCode.ESC, KeyCode.UP, KeyCode.DOWN, KeyCode.ENTER].includes(which))\n        return;\n\n      if (measureIndex !== -1) {\n        const measureText = selectionStartText.slice(measureIndex + measurePrefix.length);\n        const validateMeasure = validateSearch(measureText, props);\n        const matchOption = !!getOptions(measureText).length;\n\n        if (validateMeasure) {\n          if (\n            key === measurePrefix\n            || key === 'Shift'\n            || measuring\n            || (measureText !== prevMeasureText && matchOption)\n          ) {\n            startMeasure(measureText, measurePrefix, measureIndex);\n          }\n        } else if (measuring) {\n          // Stop if measureText is invalidate\n          stopMeasure();\n        }\n\n        /**\n         * We will trigger `onSearch` to developer since they may use for async update.\n         * If met `space` means user finished searching.\n         */\n        if (validateMeasure)\n          emit('search', measureText, measurePrefix);\n      } else if (measuring) {\n        stopMeasure();\n      }\n    };\n    const onPressEnter = (event) => {\n      if (!state.measuring)\n        emit('pressenter', event);\n    };\n\n    const onInputFocus = (event: Event) => {\n      onFocus(event);\n    };\n    const onInputBlur = (event: Event) => {\n      onBlur(event);\n    };\n    const onFocus = (event: Event) => {\n      clearTimeout(focusId.value);\n      const { isFocus } = state;\n      if (!isFocus && event)\n        emit('focus', event);\n\n      state.isFocus = true;\n    };\n    const onBlur = (event: Event) => {\n      focusId.value = setTimeout(() => {\n        state.isFocus = false;\n        stopMeasure();\n        emit('blur', event);\n      }, 100);\n    };\n    const selectOption = (option: OptionProps) => {\n      const { split } = props;\n      const { value: mentionValue = '' } = option;\n      const { text, selectionLocation } = replaceWithMeasure(state.value, {\n        measureLocation: state.measureLocation,\n        targetText: mentionValue,\n        prefix: state.measurePrefix,\n        selectionStart: textarea.value.getSelectionStart(),\n        split,\n      });\n      triggerChange(text);\n      stopMeasure(() => {\n        // We need restore the selection position\n        setInputSelection(textarea.value.input as HTMLTextAreaElement, selectionLocation);\n      });\n\n      emit('select', option, state.measurePrefix);\n    };\n    const setActiveIndex = (activeIndex: number) => {\n      state.activeIndex = activeIndex;\n    };\n\n    const getOptions = (measureText?: string) => {\n      const targetMeasureText = measureText || state.measureText || '';\n      const { filterOption } = props;\n      const list = props.options.filter((option: OptionProps) => {\n        /** Return all result if `filterOption` is false. */\n        if (!!filterOption === false)\n          return true;\n\n        return (filterOption as Function)(targetMeasureText, option);\n      });\n      return list;\n    };\n    const options = computed(() => {\n      return getOptions();\n    });\n\n    const focus = () => {\n      textarea.value.focus();\n    };\n    const blur = () => {\n      textarea.value.blur();\n    };\n    expose({ blur, focus });\n    provide(MentionsContextKey, {\n      activeIndex: toRef(state, 'activeIndex'),\n      setActiveIndex,\n      selectOption,\n      onFocus,\n      onBlur,\n      loading: toRef(props, 'loading'),\n    });\n    onUpdated(() => {\n      nextTick(() => {\n        if (state.measuring)\n          measure.value.scrollTop = textarea.value.getScrollTop();\n      });\n    });\n    return () => {\n      const { measureLocation, measurePrefix, measuring } = state;\n      const { prefixCls, placement, transitionName, getPopupContainer, direction, ...restProps }\n        = props;\n\n      const { class: className, style, ...otherAttrs } = attrs;\n\n      const inputProps = omit(restProps, [\n        'value',\n        'prefix',\n        'split',\n        'validateSearch',\n        'filterOption',\n        'options',\n        'loading',\n      ]);\n\n      const textareaProps = {\n        ...inputProps,\n        ...otherAttrs,\n        onChange: noop,\n        onSelect: noop,\n        value: state.value,\n        onInput: onChange,\n        onBlur: onInputBlur,\n        onKeydown: onKeyDown,\n        onKeyup: onKeyUp,\n        onFocus: onInputFocus,\n        onPressenter: onPressEnter,\n      };\n      return (\n        <div class={classNames(prefixCls, className)} style={style as CSSProperties}>\n          <BaseInputCore {...textareaProps} ref={textarea} tag=\"textarea\"></BaseInputCore>\n          {measuring && (\n            <div ref={measure} class={`${prefixCls}-measure`}>\n              {state.value.slice(0, measureLocation)}\n              <KeywordTrigger\n                prefixCls={prefixCls}\n                transitionName={transitionName}\n                dropdownClassName={props.dropdownClassName}\n                placement={placement}\n                options={measuring ? options.value : []}\n                visible\n                direction={direction}\n                getPopupContainer={getPopupContainer}\n                v-slots={{ notFoundContent: slots.notFoundContent, option: slots.option }}\n              >\n                <span>{measurePrefix}</span>\n              </KeywordTrigger>\n              {state.value.slice(measureLocation + measurePrefix.length)}\n            </div>\n          )}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["noop","defineComponent","compatConfig","MODE","name","inheritAttrs","props","initDefaultProps","vcMentionsProps","defaultProps","emits","setup","emit","attrs","expose","slots","measure","ref","textarea","focusId","state","reactive","value","measuring","measureLocation","measureText","measurePrefix","activeIndex","isFocus","watchEffect","triggerChange","val","onChange","target","startMeasure","Object","assign","stopMeasure","callback","onKeyDown","event","which","KeyCode","UP","DOWN","optionLen","options","length","offset","newActiveIndex","preventDefault","ESC","ENTER","option","selectOption","onKeyUp","key","prevMeasureText","prefix","validateSearch","composing","selectionStartText","getBeforeSelectionText","location","measureIndex","getLastMeasureIndex","includes","slice","validateMeasure","matchOption","getOptions","onPressEnter","onInputFocus","onFocus","onInputBlur","onBlur","clearTimeout","setTimeout","split","mentionValue","text","selectionLocation","replaceWithMeasure","targetText","selectionStart","getSelectionStart","setInputSelection","input","setActiveIndex","targetMeasureText","filterOption","list","filter","computed","focus","blur","provide","MentionsContextKey","toRef","loading","onUpdated","nextTick","scrollTop","getScrollTop","prefixCls","placement","transitionName","getPopupContainer","direction","restProps","class","className","style","otherAttrs","inputProps","omit","textareaProps","onSelect","onInput","onKeydown","onKeyup","onPressenter","_createVNode","classNames","BaseInputCore","KeywordTrigger","dropdownClassName","default","notFoundContent"],"mappings":"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"}