{"version":3,"file":"Select.mjs","sources":["../../../../../../packages/vue-components/vc-select/src/Select.tsx"],"sourcesContent":["/**\n * To match accessibility requirement, we always provide an input in the component.\n * Other element will not set `tabindex` to avoid `onBlur` sequence problem.\n * For focused select, we set `aria-live=\"polite\"` to update the accessibility content.\n *\n * ref:\n * - keyboard: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#Keyboard_interactions\n *\n * New api:\n * - listHeight\n * - listItemHeight\n * - component\n *\n * Remove deprecated api:\n * - multiple\n * - tags\n * - combobox\n * - firstActiveValue\n * - dropdownMenuStyle\n * - openClassName (Not list in api)\n *\n * Update:\n * - `backfill` only support `combobox` mode\n * - `combobox` mode not support `labelInValue` since it's meaningless\n * - `getInputElement` only support `combobox` mode\n * - `onChange` return OptionData instead of ReactNode\n * - `filterOption` `onChange` `onSelect` accept OptionData instead of ReactNode\n * - `combobox` mode trigger `onChange` will get `undefined` if no `value` match in Option\n * - `combobox` mode not support `optionLabelProp`\n */\n\nimport type { Key, VueNode } from '@antdv/types';\nimport type { ExtractPropTypes, PropType } from 'vue';\nimport type { BaseSelectProps, BaseSelectRef, DisplayValueType } from './BaseSelect';\nimport type { SelectContextProps } from './SelectContext';\nimport { useMergedState, useState } from '@antdv/hooks';\nimport { initDefaultProps, omit, PropTypes, toReactive } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  ref,\n  shallowRef,\n  toRef,\n  watchEffect,\n} from 'vue';\nimport BaseSelect, { baseSelectPropsWithoutPrivate, isMultiple } from './BaseSelect';\nimport useCache from './hooks/useCache';\nimport useFilterOptions from './hooks/useFilterOptions';\nimport useId from './hooks/useId';\nimport useOptions from './hooks/useOptions';\nimport OptionList from './OptionList';\nimport { useProvideSelectProps } from './SelectContext';\nimport { toArray } from './utils/commonUtil';\nimport { fillFieldNames, flattenOptions, injectPropsWithOption } from './utils/valueUtil';\nimport warningProps from './utils/warningPropsUtil';\n\nconst OMIT_DOM_PROPS = ['inputValue'];\n\ntype ArrayElementType<T> = T extends Array<infer E> ? E : T;\nexport type OnActiveValue = (\n  active: RawValueType,\n  index: number,\n  info?: { source?: 'keyboard' | 'mouse' },\n) => void;\n\nexport type OnInternalSelect = (value: RawValueType, info: { selected: boolean }) => void;\n\nexport type RawValueType = string | number;\nexport interface LabelInValueType {\n  label: any;\n  originLabel?: any;\n  value: RawValueType;\n  /** @deprecated `key` is useless since it should always same as `value` */\n  key?: Key;\n}\n\nexport type DraftValueType =\n  | RawValueType\n  | LabelInValueType\n  | DisplayValueType\n  | Array<RawValueType | LabelInValueType | DisplayValueType>;\n\nexport type FilterFunc<OptionType> = (inputValue: string, option?: OptionType) => boolean;\n\nexport interface FieldNames {\n  value?: string;\n  label?: string;\n  options?: string;\n}\n\nexport interface BaseOptionType {\n  disabled?: boolean;\n  [name: string]: any;\n}\n\nexport interface DefaultOptionType extends BaseOptionType {\n  label?: any;\n  value?: string | number | null;\n  children?: Array<Omit<DefaultOptionType, 'children'>>;\n}\n\nexport type SelectHandler<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> =\n  | ((value: RawValueType | LabelInValueType, option: OptionType) => void)\n  | ((value: ValueType, option: OptionType) => void);\n\nexport function selectProps<\n  ValueType = any,\n  OptionType extends BaseOptionType = DefaultOptionType,\n>() {\n  return {\n    ...baseSelectPropsWithoutPrivate(),\n    prefixCls: String,\n    id: String,\n\n    backfill: { type: Boolean, default: undefined },\n\n    // >>> Field Names\n    fieldNames: Object as PropType<FieldNames>,\n\n    // >>> Search\n    /** @deprecated Use `searchValue` instead */\n    inputValue: String,\n    searchValue: String,\n    onSearch: Function as PropType<(value: string) => void>,\n    autoClearSearchValue: { type: Boolean, default: undefined },\n\n    // >>> Select\n    onSelect: Function as PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>,\n    onDeselect: Function as PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>,\n\n    // >>> Options\n    /**\n     * In Select, `false` means do nothing.\n     * In TreeSelect, `false` will highlight match item.\n     * It's by design.\n     */\n    filterOption: {\n      type: [Boolean, Function] as PropType<boolean | FilterFunc<OptionType>>,\n      default: undefined,\n    },\n    filterSort: Function as PropType<(optionA: OptionType, optionB: OptionType) => number>,\n    optionFilterProp: String,\n    optionLabelProp: String,\n    options: Array as PropType<OptionType[]>,\n    defaultActiveFirstOption: { type: Boolean, default: undefined },\n    virtual: { type: Boolean, default: undefined },\n    listHeight: Number,\n    listItemHeight: Number,\n\n    // >>> Icon\n    menuItemSelectedIcon: PropTypes.any,\n\n    mode: String as PropType<'combobox' | 'multiple' | 'tags'>,\n    labelInValue: { type: Boolean, default: undefined },\n    value: PropTypes.any,\n    defaultValue: PropTypes.any,\n    onChange: Function as PropType<(value: ValueType, option: OptionType | OptionType[]) => void>,\n    children: Array as PropType<VueNode[]>,\n  };\n}\n\nexport type SelectProps = Partial<ExtractPropTypes<ReturnType<typeof selectProps>>>;\n\nfunction isRawValue(value: DraftValueType): value is RawValueType {\n  return !value || typeof value !== 'object';\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'VcSelect',\n  inheritAttrs: false,\n  props: initDefaultProps(selectProps(), {\n    prefixCls: 'vc-select',\n    autoClearSearchValue: true,\n    listHeight: 200,\n    listItemHeight: 20,\n    dropdownMatchSelectWidth: true,\n  }),\n  setup(props, { expose, attrs, slots }) {\n    const mergedId = useId(toRef(props, 'id'));\n    const multiple = computed(() => isMultiple(props.mode));\n    const childrenAsData = computed(() => !!(!props.options && props.children));\n\n    const mergedFilterOption = computed(() => {\n      if (props.filterOption === undefined && props.mode === 'combobox')\n        return false;\n\n      return props.filterOption;\n    });\n\n    // ========================= FieldNames =========================\n    const mergedFieldNames = computed(() => fillFieldNames(props.fieldNames, childrenAsData.value));\n\n    // =========================== Search ===========================\n    const [mergedSearchValue, setSearchValue] = useMergedState('', {\n      value: computed(() =>\n        props.searchValue !== undefined ? props.searchValue : props.inputValue,\n      ),\n      postState: search => search || '',\n    });\n\n    // =========================== Option ===========================\n    const parsedOptions = useOptions(\n      toRef(props, 'options'),\n      toRef(props, 'children'),\n      mergedFieldNames,\n    );\n    const { valueOptions, labelOptions, options: mergedOptions } = parsedOptions;\n\n    // ========================= Wrap Value =========================\n    const convert2LabelValues = (draftValues: DraftValueType) => {\n      // Convert to array\n      const valueList = toArray(draftValues);\n\n      // Convert to labelInValue type\n      return valueList.map((val) => {\n        let rawValue: RawValueType;\n        let rawLabel: any;\n        let rawKey: Key;\n        let rawDisabled: boolean | undefined;\n\n        // Fill label & value\n        if (isRawValue(val)) {\n          rawValue = val;\n        } else {\n          rawKey = val.key;\n          rawLabel = val.label;\n          rawValue = val.value ?? rawKey;\n        }\n\n        const option = valueOptions.value.get(rawValue);\n        if (option) {\n          // Fill missing props\n          if (rawLabel === undefined)\n            rawLabel = option?.[props.optionLabelProp || mergedFieldNames.value.label];\n          if (rawKey === undefined) rawKey = option?.key ?? rawValue;\n          rawDisabled = option?.disabled;\n\n          // Warning if label not same as provided\n          // if (process.env.NODE_ENV !== 'production' && !isRawValue(val)) {\n          //   const optionLabel = option?.[mergedFieldNames.value.label];\n          //   if (optionLabel !== undefined && optionLabel !== rawLabel) {\n          //     warning(false, '`label` of `value` is not same as `label` in Select options.');\n          //   }\n          // }\n        } else {\n          rawKey = rawValue;\n        }\n\n        return {\n          label: rawLabel,\n          value: rawValue,\n          key: rawKey,\n          disabled: rawDisabled,\n          option,\n        };\n      });\n    };\n\n    // =========================== Values ===========================\n    const [internalValue, setInternalValue] = useMergedState(props.defaultValue, {\n      value: toRef(props, 'value'),\n    });\n\n    // Merged value with LabelValueType\n    const rawLabeledValues = computed(() => {\n      const values = convert2LabelValues(internalValue.value);\n\n      // combobox no need save value when it's empty\n      if (props.mode === 'combobox' && !values[0]?.value)\n        return [];\n\n      return values;\n    });\n\n    // Fill label with cache to avoid option remove\n    const [mergedValues, getMixedOption] = useCache(rawLabeledValues, valueOptions);\n\n    const displayValues = computed(() => {\n      // `null` need show as placeholder instead\n      // https://github.com/ant-design/ant-design/issues/25057\n      if (!props.mode && mergedValues.value.length === 1) {\n        const firstValue = mergedValues.value[0];\n        if (\n          firstValue.value === null\n          && (firstValue.label === null || firstValue.label === undefined)\n        ) {\n          return [];\n        }\n      }\n\n      return mergedValues.value.map(item => ({\n        ...item,\n        label: (typeof item.label === 'function' ? item.label() : item.label) ?? item.value,\n      }));\n    });\n\n    /** Convert `displayValues` to raw value type set */\n    const rawValues = computed(() => new Set(mergedValues.value.map(val => val.value)));\n\n    watchEffect(\n      () => {\n        if (props.mode === 'combobox') {\n          const strValue = mergedValues.value[0]?.value;\n\n          if (strValue !== undefined && strValue !== null)\n            setSearchValue(String(strValue));\n        }\n      },\n      { flush: 'post' },\n    );\n\n    // ======================= Display Option =======================\n    // Create a placeholder item if not exist in `options`\n    const createTagOption = (val: RawValueType, label?: any) => {\n      const mergedLabel = label ?? val;\n      return {\n        [mergedFieldNames.value.value]: val,\n        [mergedFieldNames.value.label]: mergedLabel,\n      } as DefaultOptionType;\n    };\n\n    // Fill tag as option if mode is `tags`\n    const filledTagOptions = shallowRef();\n    watchEffect(() => {\n      if (props.mode !== 'tags') {\n        filledTagOptions.value = mergedOptions.value;\n        return;\n      }\n\n      // >>> Tag mode\n      const cloneOptions = mergedOptions.value.slice();\n\n      // Check if value exist in options (include new patch item)\n      const existOptions = (val: RawValueType) => valueOptions.value.has(val);\n\n      // Fill current value as option\n      [...mergedValues.value]\n        .sort((a, b) => (a.value < b.value ? -1 : 1))\n        .forEach((item) => {\n          const val = item.value;\n\n          if (!existOptions(val))\n            cloneOptions.push(createTagOption(val, item.label));\n        });\n\n      filledTagOptions.value = cloneOptions;\n    });\n\n    const filteredOptions = useFilterOptions(\n      filledTagOptions,\n      mergedFieldNames,\n      mergedSearchValue,\n      mergedFilterOption,\n      toRef(props, 'optionFilterProp'),\n    );\n\n    // Fill options with search value if needed\n    const filledSearchOptions = computed(() => {\n      if (\n        props.mode !== 'tags'\n        || !mergedSearchValue.value\n        || filteredOptions.value.some(\n          item => item[props.optionFilterProp || 'value'] === mergedSearchValue.value,\n        )\n      ) {\n        return filteredOptions.value;\n      }\n\n      // Fill search value as option\n      return [createTagOption(mergedSearchValue.value), ...filteredOptions.value];\n    });\n\n    const orderedFilteredOptions = computed(() => {\n      if (!props.filterSort)\n        return filledSearchOptions.value;\n\n      return [...filledSearchOptions.value].sort((a, b) => props.filterSort(a, b));\n    });\n\n    const displayOptions = computed(() =>\n      flattenOptions(orderedFilteredOptions.value, {\n        fieldNames: mergedFieldNames.value,\n        childrenAsData: childrenAsData.value,\n      }),\n    );\n\n    // =========================== Change ===========================\n    const triggerChange = (values: DraftValueType) => {\n      const labeledValues = convert2LabelValues(values);\n      setInternalValue(labeledValues);\n\n      if (\n        props.onChange\n        // Trigger event only when value changed\n        && (labeledValues.length !== mergedValues.value.length\n          || labeledValues.some((newVal, index) => mergedValues.value[index]?.value !== newVal?.value))\n      ) {\n        const returnValues = props.labelInValue\n          ? labeledValues.map((v) => {\n              return {\n                ...v,\n                originLabel: v.label,\n                label: typeof v.label === 'function' ? v.label() : v.label,\n              };\n            })\n          : labeledValues.map(v => v.value);\n        const returnOptions = labeledValues.map(v =>\n          injectPropsWithOption(getMixedOption(v.value)),\n        );\n\n        props.onChange(\n          // Value\n          multiple.value ? returnValues : returnValues[0],\n          // Option\n          multiple.value ? returnOptions : returnOptions[0],\n        );\n      }\n    };\n\n    // ======================= Accessibility ========================\n    const [activeValue, setActiveValue] = useState<string>(null);\n    const [accessibilityIndex, setAccessibilityIndex] = useState(0);\n    const mergedDefaultActiveFirstOption = computed(() =>\n      props.defaultActiveFirstOption !== undefined\n        ? props.defaultActiveFirstOption\n        : props.mode !== 'combobox',\n    );\n\n    const onActiveValue: OnActiveValue = (active, index, { source = 'keyboard' } = {}) => {\n      setAccessibilityIndex(index);\n\n      if (props.backfill && props.mode === 'combobox' && active !== null && source === 'keyboard')\n        setActiveValue(String(active));\n    };\n\n    // ========================= OptionList =========================\n    const triggerSelect = (val: RawValueType, selected: boolean) => {\n      const getSelectEnt = (): [RawValueType | LabelInValueType, DefaultOptionType] => {\n        const option = getMixedOption(val);\n        const originLabel = option?.[mergedFieldNames.value.label];\n        return [\n          props.labelInValue\n            ? {\n                label: typeof originLabel === 'function' ? originLabel() : originLabel,\n                originLabel,\n                value: val,\n                key: option?.key ?? val,\n              }\n            : val,\n          injectPropsWithOption(option),\n        ];\n      };\n\n      if (selected && props.onSelect) {\n        const [wrappedValue, option] = getSelectEnt();\n        props.onSelect(wrappedValue, option);\n      } else if (!selected && props.onDeselect) {\n        const [wrappedValue, option] = getSelectEnt();\n        props.onDeselect(wrappedValue, option);\n      }\n    };\n\n    // Used for OptionList selection\n    const onInternalSelect = (val, info) => {\n      let cloneValues: Array<RawValueType | DisplayValueType>;\n\n      // Single mode always trigger select only with option list\n      const mergedSelect = multiple.value ? info.selected : true;\n\n      if (mergedSelect)\n        cloneValues = multiple.value ? [...mergedValues.value, val] : [val];\n      else\n        cloneValues = mergedValues.value.filter(v => v.value !== val);\n\n      triggerChange(cloneValues);\n      triggerSelect(val, mergedSelect);\n\n      // Clean search value if single or configured\n      if (props.mode === 'combobox') {\n        // setSearchValue(String(val));\n        setActiveValue('');\n      } else if (!multiple.value || props.autoClearSearchValue) {\n        setSearchValue('');\n        setActiveValue('');\n      }\n    };\n\n    // ======================= Display Change =======================\n    // BaseSelect display values change\n    const onDisplayValuesChange: BaseSelectProps['onDisplayValuesChange'] = (nextValues, info) => {\n      triggerChange(nextValues);\n\n      if (info.type === 'remove' || info.type === 'clear') {\n        info.values.forEach((item) => {\n          triggerSelect(item.value, false);\n        });\n      }\n    };\n\n    // =========================== Search ===========================\n    const onInternalSearch: BaseSelectProps['onSearch'] = (searchText, info) => {\n      setSearchValue(searchText);\n      setActiveValue(null);\n\n      // [Submit] Tag mode should flush input\n      if (info.source === 'submit') {\n        const formatted = (searchText || '').trim();\n        // prevent empty tags from appearing when you click the Enter button\n        if (formatted) {\n          const newRawValues = Array.from(new Set<RawValueType>([...rawValues.value, formatted]));\n          triggerChange(newRawValues);\n          triggerSelect(formatted, true);\n          setSearchValue('');\n        }\n\n        return;\n      }\n\n      if (info.source !== 'blur') {\n        if (props.mode === 'combobox')\n          triggerChange(searchText);\n\n        props.onSearch?.(searchText);\n      }\n    };\n\n    const onInternalSearchSplit: BaseSelectProps['onSearchSplit'] = (words) => {\n      let patchValues: RawValueType[] = words;\n\n      if (props.mode !== 'tags') {\n        patchValues = words\n          .map((word) => {\n            const opt = labelOptions.value.get(word);\n            return opt?.value;\n          })\n          .filter(val => val !== undefined);\n      }\n\n      const newRawValues = Array.from(new Set<RawValueType>([...rawValues.value, ...patchValues]));\n      triggerChange(newRawValues);\n      newRawValues.forEach((newRawValue) => {\n        triggerSelect(newRawValue, true);\n      });\n    };\n    const realVirtual = computed(\n      () => props.virtual !== false && props.dropdownMatchSelectWidth !== false,\n    );\n    useProvideSelectProps(\n      toReactive({\n        ...parsedOptions,\n        flattenOptions: displayOptions,\n        onActiveValue,\n        defaultActiveFirstOption: mergedDefaultActiveFirstOption,\n        onSelect: onInternalSelect,\n        menuItemSelectedIcon: toRef(props, 'menuItemSelectedIcon'),\n        rawValues,\n        fieldNames: mergedFieldNames,\n        virtual: realVirtual,\n        listHeight: toRef(props, 'listHeight'),\n        listItemHeight: toRef(props, 'listItemHeight'),\n        childrenAsData,\n      } as unknown as SelectContextProps),\n    );\n\n    // ========================== Warning ===========================\n    if (process.env.NODE_ENV !== 'production') {\n      watchEffect(\n        () => {\n          warningProps(props);\n        },\n        { flush: 'post' },\n      );\n    }\n    const selectRef = ref<BaseSelectRef>();\n    expose({\n      focus() {\n        selectRef.value?.focus();\n      },\n      blur() {\n        selectRef.value?.blur();\n      },\n      scrollTo(arg) {\n        selectRef.value?.scrollTo(arg);\n      },\n    } as BaseSelectRef);\n    const pickProps = computed(() => {\n      return omit(props, [\n        'id',\n        'mode',\n        'prefixCls',\n        'backfill',\n        'fieldNames',\n\n        // Search\n        'inputValue',\n        'searchValue',\n        'onSearch',\n        'autoClearSearchValue',\n\n        // Select\n        'onSelect',\n        'onDeselect',\n        'dropdownMatchSelectWidth',\n\n        // Options\n        'filterOption',\n        'filterSort',\n        'optionFilterProp',\n        'optionLabelProp',\n        'options',\n        'children',\n        'defaultActiveFirstOption',\n        'menuItemSelectedIcon',\n        'virtual',\n        'listHeight',\n        'listItemHeight',\n\n        // Value\n        'value',\n        'defaultValue',\n        'labelInValue',\n        'onChange',\n      ]);\n    });\n    return () => {\n      return (\n        <BaseSelect\n          {...pickProps.value}\n          {...attrs}\n          // >>> MISC\n          id={mergedId}\n          prefixCls={props.prefixCls}\n          ref={selectRef}\n          omitDomProps={OMIT_DOM_PROPS}\n          mode={props.mode}\n          // >>> Values\n          displayValues={displayValues.value}\n          onDisplayValuesChange={onDisplayValuesChange}\n          // >>> Search\n          searchValue={mergedSearchValue.value}\n          onSearch={onInternalSearch}\n          onSearchSplit={onInternalSearchSplit}\n          dropdownMatchSelectWidth={props.dropdownMatchSelectWidth}\n          // >>> OptionList\n          OptionList={OptionList}\n          emptyOptions={!displayOptions.value.length}\n          // >>> Accessibility\n          activeValue={activeValue.value}\n          activeDescendantId={`${mergedId}_list_${accessibilityIndex.value}`}\n          v-slots={slots}\n        />\n      );\n    };\n  },\n});\n"],"names":["OMIT_DOM_PROPS","selectProps","baseSelectPropsWithoutPrivate","prefixCls","String","id","backfill","type","Boolean","default","undefined","fieldNames","Object","inputValue","searchValue","onSearch","Function","autoClearSearchValue","onSelect","onDeselect","filterOption","filterSort","optionFilterProp","optionLabelProp","options","Array","defaultActiveFirstOption","virtual","listHeight","Number","listItemHeight","menuItemSelectedIcon","PropTypes","any","mode","labelInValue","value","defaultValue","onChange","children","isRawValue","compatConfig","MODE","name","inheritAttrs","props","initDefaultProps","dropdownMatchSelectWidth","setup","expose","attrs","slots","mergedId","useId","toRef","multiple","computed","isMultiple","childrenAsData","mergedFilterOption","mergedFieldNames","fillFieldNames","mergedSearchValue","setSearchValue","useMergedState","postState","search","parsedOptions","useOptions","valueOptions","labelOptions","mergedOptions","convert2LabelValues","draftValues","valueList","toArray","map","val","rawValue","rawLabel","rawKey","rawDisabled","key","label","option","get","disabled","internalValue","setInternalValue","rawLabeledValues","values","mergedValues","getMixedOption","useCache","displayValues","length","firstValue","item","rawValues","Set","watchEffect","strValue","flush","createTagOption","mergedLabel","filledTagOptions","shallowRef","cloneOptions","slice","existOptions","has","sort","a","b","forEach","push","filteredOptions","useFilterOptions","filledSearchOptions","some","orderedFilteredOptions","displayOptions","flattenOptions","triggerChange","labeledValues","newVal","index","returnValues","v","originLabel","returnOptions","injectPropsWithOption","activeValue","setActiveValue","useState","accessibilityIndex","setAccessibilityIndex","mergedDefaultActiveFirstOption","onActiveValue","active","source","triggerSelect","selected","getSelectEnt","wrappedValue","onInternalSelect","info","cloneValues","mergedSelect","filter","onDisplayValuesChange","nextValues","onInternalSearch","searchText","formatted","trim","newRawValues","from","onInternalSearchSplit","words","patchValues","word","opt","newRawValue","realVirtual","useProvideSelectProps","toReactive","process","env","NODE_ENV","warningProps","selectRef","ref","focus","blur","scrollTo","arg","pickProps","omit","_createVNode","BaseSelect","OptionList"],"mappings":"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"}