{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/vue-components/vc-select/src/Selector/index.tsx"],"sourcesContent":["/**\n * Cursor rule:\n * 1. Only `showSearch` enabled\n * 2. Only `open` is `true`\n * 3. When typing, set `open` to `true` which hit rule of 2\n *\n * Accessibility:\n * - https://www.w3.org/TR/wai-aria-practices/examples/combobox/aria1.1pattern/listbox-combo.html\n */\n\nimport type { EventHandler, VueNode } from '@antdv/types';\nimport type { PropType } from 'vue';\nimport type { ScrollTo } from '../../../vc-virtual-list/src/List';\nimport type { CustomTagProps, DisplayValueType, Mode, RenderNode } from '../BaseSelect';\nimport { createRef, KeyCode, PropTypes } from '@antdv/utils';\nimport { defineComponent, ref } from 'vue';\nimport useLock from '../hooks/useLock';\nimport { isValidateOpenKey } from '../utils/keyUtil';\nimport MultipleSelector from './MultipleSelector';\nimport SingleSelector from './SingleSelector';\n\nexport interface SelectorProps {\n  id: string;\n  prefixCls: string;\n  showSearch?: boolean;\n  open: boolean;\n  values: DisplayValueType[];\n  multiple?: boolean;\n  mode: Mode;\n  searchValue: string;\n  activeValue: string;\n  inputElement: VueNode;\n\n  autofocus?: boolean;\n  activeDescendantId?: string;\n  tabindex?: number | string;\n  disabled?: boolean;\n  placeholder?: VueNode;\n  removeIcon?: RenderNode;\n\n  // Tags\n  maxTagCount?: number | 'responsive';\n  maxTagTextLength?: number;\n  maxTagPlaceholder?: VueNode | ((omittedValues: DisplayValueType[]) => VueNode);\n  tagRender?: (props: CustomTagProps) => VueNode;\n  optionLabelRender?: (props: Record<string, any>) => VueNode;\n\n  /** Check if `tokenSeparators` contains `\\n` or `\\r\\n` */\n  tokenWithEnter?: boolean;\n\n  // Motion\n  choiceTransitionName?: string;\n\n  onToggleOpen: (open?: boolean) => void | any;\n  /** `onSearch` returns go next step boolean to check if need do toggle open */\n  onSearch: (searchText: string, fromTyping: boolean, isCompositing: boolean) => boolean;\n  onSearchSubmit: (searchText: string) => void;\n  onRemove: (value: DisplayValueType) => void;\n  onInputKeyDown?: (e: KeyboardEvent) => void;\n\n  /**\n   * @private get real dom for trigger align.\n   * This may be removed after React provides replacement of `findDOMNode`\n   */\n  domRef: () => HTMLDivElement;\n}\nexport interface RefSelectorProps {\n  focus: () => void;\n  blur: () => void;\n  scrollTo?: ScrollTo;\n}\n\nconst Selector = defineComponent<SelectorProps>({\n  name: 'Selector',\n  inheritAttrs: false,\n  props: {\n    id: String,\n    prefixCls: String,\n    showSearch: { type: Boolean, default: undefined },\n    open: { type: Boolean, default: undefined },\n    /** Display in the Selector value, it's not same as `value` prop */\n    values: PropTypes.array,\n    multiple: { type: Boolean, default: undefined },\n    mode: String,\n    searchValue: String,\n    activeValue: String,\n    inputElement: PropTypes.any,\n\n    autofocus: { type: Boolean, default: undefined },\n    activeDescendantId: String,\n    tabindex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    disabled: { type: Boolean, default: undefined },\n    placeholder: PropTypes.any,\n    removeIcon: PropTypes.any,\n\n    // Tags\n    maxTagCount: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    maxTagTextLength: Number,\n    maxTagPlaceholder: PropTypes.any,\n    tagRender: Function,\n    optionLabelRender: Function,\n\n    /** Check if `tokenSeparators` contains `\\n` or `\\r\\n` */\n    tokenWithEnter: { type: Boolean, default: undefined },\n\n    // Motion\n    choiceTransitionName: String,\n\n    onToggleOpen: { type: Function as PropType<(open?: boolean) => void> },\n    /** `onSearch` returns go next step boolean to check if need do toggle open */\n    onSearch: Function,\n    onSearchSubmit: Function,\n    onRemove: Function,\n    onInputKeyDown: { type: Function as PropType<EventHandler> },\n\n    /**\n     * @private get real dom for trigger align.\n     * This may be removed after React provides replacement of `findDOMNode`\n     */\n    domRef: Function,\n  } as any,\n  setup(props, { expose }) {\n    const inputRef = createRef();\n    const compositionStatus = ref(false);\n\n    // ====================== Input ======================\n    const [getInputMouseDown, setInputMouseDown] = useLock(0);\n\n    const onInternalInputKeyDown = (event: KeyboardEvent) => {\n      const { which } = event;\n\n      if (which === KeyCode.UP || which === KeyCode.DOWN)\n        event.preventDefault();\n\n      if (props.onInputKeyDown)\n        props.onInputKeyDown(event);\n\n      if (\n        which === KeyCode.ENTER\n        && props.mode === 'tags'\n        && !compositionStatus.value\n        && !props.open\n      ) {\n        // When menu isn't open, OptionList won't trigger a value change\n        // So when enter is pressed, the tag's input value should be emitted here to let selector know\n        props.onSearchSubmit((event.target as HTMLInputElement).value);\n      }\n\n      if (isValidateOpenKey(which))\n        props.onToggleOpen(true);\n    };\n\n    /**\n     * We can not use `findDOMNode` sine it will get warning,\n     * have to use timer to check if is input element.\n     */\n    const onInternalInputMouseDown = () => {\n      setInputMouseDown(true);\n    };\n\n    // When paste come, ignore next onChange\n    let pastedText = null;\n\n    const triggerOnSearch = (value: string) => {\n      if (props.onSearch(value, true, compositionStatus.value) !== false)\n        props.onToggleOpen(true);\n    };\n\n    const onInputCompositionStart = () => {\n      compositionStatus.value = true;\n    };\n\n    const onInputCompositionEnd = (e: InputEvent) => {\n      compositionStatus.value = false;\n      // Trigger search again to support `tokenSeparators` with typewriting\n      if (props.mode !== 'combobox')\n        triggerOnSearch((e.target as HTMLInputElement).value);\n    };\n\n    const onInputChange = (event: { target: { value: any } }) => {\n      let {\n        target: { value },\n      } = event;\n\n      // Pasted text should replace back to origin content\n      if (props.tokenWithEnter && pastedText && /[\\r\\n]/.test(pastedText)) {\n        // CRLF will be treated as a single space for input element\n        const replacedText = pastedText\n          .replace(/[\\r\\n]+$/, '')\n          .replace(/\\r\\n/g, ' ')\n          .replace(/[\\r\\n]/g, ' ');\n        value = value.replace(replacedText, pastedText);\n      }\n\n      pastedText = null;\n\n      triggerOnSearch(value);\n    };\n\n    const onInputPaste = (e: ClipboardEvent) => {\n      const { clipboardData } = e;\n      const value = clipboardData.getData('text');\n\n      pastedText = value;\n    };\n\n    const onClick = ({ target }) => {\n      if (target !== inputRef.current) {\n        // Should focus input if click the selector\n        const isIE = (document.body.style as any).msTouchAction !== undefined;\n        if (isIE) {\n          setTimeout(() => {\n            inputRef.current.focus();\n          });\n        } else {\n          inputRef.current.focus();\n        }\n      }\n    };\n\n    const onMousedown = (event: MouseEvent) => {\n      const inputMouseDown = getInputMouseDown();\n      if (event.target !== inputRef.current && !inputMouseDown)\n        event.preventDefault();\n\n      if ((props.mode !== 'combobox' && (!props.showSearch || !inputMouseDown)) || !props.open) {\n        if (props.open)\n          props.onSearch('', true, false);\n\n        props.onToggleOpen();\n      }\n    };\n    expose({\n      focus: () => {\n        inputRef.current.focus();\n      },\n      blur: () => {\n        inputRef.current.blur();\n      },\n    });\n\n    return () => {\n      const { prefixCls, domRef, mode } = props as SelectorProps;\n      const sharedProps = {\n        inputRef,\n        onInputKeyDown: onInternalInputKeyDown,\n        onInputMouseDown: onInternalInputMouseDown,\n        onInputChange,\n        onInputPaste,\n        onInputCompositionStart,\n        onInputCompositionEnd,\n        compositionStatus: compositionStatus.value,\n      };\n      const selectNode\n        = mode === 'multiple' || mode === 'tags'\n          ? (\n              <MultipleSelector {...props} {...sharedProps} />\n            )\n          : (\n              <SingleSelector {...props} {...sharedProps} />\n            );\n      return (\n        <div\n          ref={domRef}\n          class={`${prefixCls}-selector`}\n          onClick={onClick}\n          onMousedown={onMousedown}\n        >\n          {selectNode}\n        </div>\n      );\n    };\n  },\n});\n\nexport default Selector;\n"],"names":["Selector","name","inheritAttrs","props","id","String","prefixCls","showSearch","type","Boolean","default","undefined","open","values","PropTypes","array","multiple","mode","searchValue","activeValue","inputElement","any","autofocus","activeDescendantId","tabindex","oneOfType","number","string","disabled","placeholder","removeIcon","maxTagCount","maxTagTextLength","Number","maxTagPlaceholder","tagRender","Function","optionLabelRender","tokenWithEnter","choiceTransitionName","onToggleOpen","onSearch","onSearchSubmit","onRemove","onInputKeyDown","domRef","setup","expose","inputRef","createRef","compositionStatus","ref","getInputMouseDown","setInputMouseDown","useLock","onInternalInputKeyDown","event","which","KeyCode","UP","DOWN","preventDefault","ENTER","value","target","isValidateOpenKey","onInternalInputMouseDown","pastedText","triggerOnSearch","onInputCompositionStart","onInputCompositionEnd","e","onInputChange","test","replacedText","replace","onInputPaste","clipboardData","getData","onClick","current","isIE","document","body","style","msTouchAction","setTimeout","focus","onMousedown","inputMouseDown","blur","sharedProps","onInputMouseDown","selectNode","_createVNode","MultipleSelector","SingleSelector"],"mappings":"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"}