47ce522db555266d6c80182cb8015aeb3121f982701a28b7b973532747fad04dad9fdd7b5835f440b6e5bbf02c1f99df840d3481b6e096179f9c5e55df1c28 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import type { ComponentInternalInstance, ComponentPublicInstance, ComputedRef, ExtractPropTypes, Ref, __ExtractPublicPropTypes } from 'vue';
  2. import type { SelectProps } from './select';
  3. import type { optionProps } from './option';
  4. export interface SelectGroupContext {
  5. disabled: boolean;
  6. }
  7. export interface SelectContext {
  8. props: SelectProps;
  9. states: SelectStates;
  10. selectRef: HTMLElement | undefined;
  11. optionsArray: OptionPublicInstance[];
  12. setSelected(): void;
  13. onOptionCreate(vm: OptionPublicInstance): void;
  14. onOptionDestroy(key: OptionValue, vm: OptionPublicInstance): void;
  15. handleOptionSelect(vm: OptionPublicInstance): void;
  16. }
  17. export type SelectStates = {
  18. inputValue: string;
  19. options: Map<OptionValue, OptionPublicInstance>;
  20. cachedOptions: Map<OptionValue, OptionPublicInstance>;
  21. optionValues: OptionValue[];
  22. selected: OptionBasic[];
  23. hoveringIndex: number;
  24. inputHovering: boolean;
  25. selectionWidth: number;
  26. collapseItemWidth: number;
  27. previousQuery: string | null;
  28. selectedLabel: string;
  29. menuVisibleOnFocus: boolean;
  30. isBeforeHide: boolean;
  31. };
  32. export type OptionProps = ExtractPropTypes<typeof optionProps>;
  33. export type OptionPropsPublic = __ExtractPublicPropTypes<typeof optionProps>;
  34. export interface OptionStates {
  35. index: number;
  36. groupDisabled: boolean;
  37. visible: boolean;
  38. hover: boolean;
  39. }
  40. export interface OptionExposed {
  41. ns: unknown;
  42. id: unknown;
  43. containerKls: unknown;
  44. currentLabel: ComputedRef<string | number | boolean>;
  45. itemSelected: ComputedRef<boolean>;
  46. isDisabled: ComputedRef<boolean>;
  47. visible: Ref<boolean>;
  48. hover: Ref<boolean>;
  49. states: OptionStates;
  50. select: SelectContext;
  51. hoverItem: () => void;
  52. updateOption: (query: string) => void;
  53. selectOptionClick: () => void;
  54. }
  55. export type OptionPublicInstance = ComponentPublicInstance<OptionProps, OptionExposed>;
  56. export type OptionInternalInstance = ComponentInternalInstance & {
  57. proxy: OptionPublicInstance;
  58. };
  59. export type OptionValue = OptionProps['value'];
  60. export type OptionBasic = {
  61. index: number;
  62. value: OptionValue;
  63. currentLabel: OptionPublicInstance['currentLabel'];
  64. isDisabled?: OptionPublicInstance['isDisabled'];
  65. };