Files
element-plus/packages/components/select/src/token.ts
Delyan Haralanov c17161e21c Feat/remove mitt (#3356)
* feat(components): collapse use provide/inject instead of mitt events

# Conflicts:
#	packages/components/collapse/src/collapse-item.vue
#	packages/components/collapse/src/collapse.vue

* feat(components): menu use provide/inject instead of mitt events

# Conflicts:
#	packages/components/menu/src/menu.ts

* feat(components): form use provide/inject instead of mitt events

# Conflicts:
#	packages/components/checkbox/src/checkbox-group.vue
#	packages/components/checkbox/src/useCheckbox.ts
#	packages/components/form/src/form-item.vue
#	packages/components/form/src/form.vue
#	packages/components/input/src/index.vue
#	packages/components/radio/src/radio-group.vue
#	packages/components/select/src/useSelect.ts
#	packages/components/slider/src/index.vue
#	packages/components/time-picker/src/common/picker.vue
#	packages/components/transfer/src/index.vue
#	packages/tokens/form.ts

* feat(components): tree use provide/inject instead of mitt events

# Conflicts:
#	packages/components/tree/src/model/useDragNode.ts
#	packages/components/tree/src/tree-node.vue

* feat(components): select use provide/inject instead of mitt events

# Conflicts:
#	packages/components/select/src/option-group.vue
#	packages/components/select/src/select.vue
#	packages/components/select/src/useOption.ts
#	packages/components/select/src/useSelect.ts

* feat: remove mitt from packages dependencies

# Conflicts:
#	packages/components/package.json
#	packages/element-plus/package.json
#	packages/tokens/package.json

* feat: remove mitt from webpack.config.js

* refactor: change imports order

* refactor: import types separately

* fix: revert removing mitt from webpack.config.js

This config is not related to the build so no need to remove mitt here
2021-09-16 21:19:27 +08:00

56 lines
1.4 KiB
TypeScript

import type { InjectionKey, Ref } from 'vue'
interface SelectGroupContext {
disabled: boolean
}
export interface QueryChangeCtx {
query: string
}
export interface SelectContext {
props: {
multiple?: boolean
multipleLimit?: number
valueKey?: string
modelValue?: string | number | unknown | unknown[]
popperClass?: string
remote?: boolean
}
queryChange: Ref<QueryChangeCtx>
groupQueryChange: Ref<string>
selectWrapper: HTMLElement
cachedOptions: Map<any, any>
hoverIndex: number
optionsCount: number
filteredOptionsCount: number
options: Map<any, any>
optionsArray: any[]
selected: any | any[]
setSelected(): void
onOptionCreate(vm: SelectOptionProxy): void
onOptionDestroy(key: number | string | Record<string, any>): void
handleOptionSelect(vm: unknown, byClick: boolean): void
}
// For individual build sharing injection key, we had to make `Symbol` to string
export const selectGroupKey =
'ElSelectGroup' as unknown as InjectionKey<SelectGroupContext>
export const selectKey = 'ElSelect' as unknown as InjectionKey<SelectContext>
export interface SelectOptionProxy {
value: string | number | Record<string, string>
label: string | number
created: boolean
disabled: boolean
currentLabel: string
itemSelected: boolean
isDisabled: boolean
select: SelectContext
hoverItem: () => void
visible: boolean
hover: boolean
selectOptionClick: () => void
}