mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
* 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
56 lines
1.4 KiB
TypeScript
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
|
|
}
|