index.d.mts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import * as vue from 'vue';
  2. import { ComponentPropsOptions, ExtractPropTypes, VNodeChild, VNode, Ref, PropType } from 'vue';
  3. type SlotsToProps<U extends RawSlots, T = MakeInternalSlots<U>> = {
  4. $children?: (VNodeChild | (T extends {
  5. default: infer V;
  6. } ? V : {}) | {
  7. [K in keyof T]?: T[K];
  8. });
  9. 'v-slots'?: {
  10. [K in keyof T]?: T[K] | false;
  11. };
  12. } & {
  13. [K in keyof T as `v-slot:${K & string}`]?: T[K] | false;
  14. };
  15. type RawSlots = Record<string, unknown>;
  16. type Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild;
  17. type VueSlot<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[];
  18. type MakeInternalSlots<T extends RawSlots> = {
  19. [K in keyof T]: Slot<T[K]>;
  20. };
  21. type MakeSlots<T extends RawSlots> = {
  22. [K in keyof T]: VueSlot<T[K]>;
  23. };
  24. type GenericProps<Props, Slots extends Record<string, unknown>> = {
  25. $props: Props & SlotsToProps<Slots>;
  26. $slots: MakeSlots<Slots>;
  27. };
  28. interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions>, Props = ExtractPropTypes<PropsOptions>> {
  29. filterProps<T extends Partial<Props>, U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>>(props: T): Partial<Pick<T, U>>;
  30. }
  31. type ClassValue = any;
  32. interface VVirtualScrollSlot<T> {
  33. item: T;
  34. index: number;
  35. }
  36. declare const VVirtualScroll: {
  37. new (...args: any[]): vue.CreateComponentPublicInstance<{
  38. style: vue.StyleValue;
  39. itemHeight: string | number;
  40. } & {
  41. height?: string | number | undefined;
  42. width?: string | number | undefined;
  43. maxHeight?: string | number | undefined;
  44. maxWidth?: string | number | undefined;
  45. minHeight?: string | number | undefined;
  46. minWidth?: string | number | undefined;
  47. class?: any;
  48. }, {
  49. calculateVisibleItems: () => void;
  50. scrollToIndex: (index: number) => void;
  51. }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slots" | "v-slot:default" | "items" | "renderless">, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
  52. style: vue.StyleValue;
  53. itemHeight: string | number;
  54. } & {
  55. height?: string | number | undefined;
  56. width?: string | number | undefined;
  57. maxHeight?: string | number | undefined;
  58. maxWidth?: string | number | undefined;
  59. minHeight?: string | number | undefined;
  60. minWidth?: string | number | undefined;
  61. class?: any;
  62. }, {
  63. style: vue.StyleValue;
  64. itemHeight: string | number;
  65. }, true, {}, vue.SlotsType<Partial<{
  66. default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
  67. itemRef: Ref<HTMLElement | undefined>;
  68. })) => vue.VNode[];
  69. }>>, {
  70. P: {};
  71. B: {};
  72. D: {};
  73. C: {};
  74. M: {};
  75. Defaults: {};
  76. }, {
  77. style: vue.StyleValue;
  78. itemHeight: string | number;
  79. } & {
  80. height?: string | number | undefined;
  81. width?: string | number | undefined;
  82. maxHeight?: string | number | undefined;
  83. maxWidth?: string | number | undefined;
  84. minHeight?: string | number | undefined;
  85. minWidth?: string | number | undefined;
  86. class?: any;
  87. }, {
  88. calculateVisibleItems: () => void;
  89. scrollToIndex: (index: number) => void;
  90. }, {}, {}, {}, {
  91. style: vue.StyleValue;
  92. itemHeight: string | number;
  93. }>;
  94. __isFragment?: never;
  95. __isTeleport?: never;
  96. __isSuspense?: never;
  97. } & vue.ComponentOptionsBase<{
  98. style: vue.StyleValue;
  99. itemHeight: string | number;
  100. } & {
  101. height?: string | number | undefined;
  102. width?: string | number | undefined;
  103. maxHeight?: string | number | undefined;
  104. maxWidth?: string | number | undefined;
  105. minHeight?: string | number | undefined;
  106. minWidth?: string | number | undefined;
  107. class?: any;
  108. }, {
  109. calculateVisibleItems: () => void;
  110. scrollToIndex: (index: number) => void;
  111. }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slots" | "v-slot:default" | "items" | "renderless">, string, {
  112. style: vue.StyleValue;
  113. itemHeight: string | number;
  114. }, {}, string, vue.SlotsType<Partial<{
  115. default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
  116. itemRef: Ref<HTMLElement | undefined>;
  117. })) => vue.VNode[];
  118. }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T, Renderless extends boolean = false>(props: {
  119. items?: readonly T[];
  120. renderless?: Renderless;
  121. }, slots: {
  122. default: VVirtualScrollSlot<T> & (Renderless extends true ? {
  123. itemRef: Ref<HTMLElement | undefined>;
  124. } : {});
  125. }) => GenericProps<typeof props, typeof slots>) & FilterPropsOptions<{
  126. height: (StringConstructor | NumberConstructor)[];
  127. maxHeight: (StringConstructor | NumberConstructor)[];
  128. maxWidth: (StringConstructor | NumberConstructor)[];
  129. minHeight: (StringConstructor | NumberConstructor)[];
  130. minWidth: (StringConstructor | NumberConstructor)[];
  131. width: (StringConstructor | NumberConstructor)[];
  132. class: PropType<ClassValue>;
  133. style: {
  134. type: PropType<vue.StyleValue>;
  135. default: null;
  136. };
  137. itemHeight: {
  138. type: (StringConstructor | NumberConstructor)[];
  139. default: null;
  140. };
  141. items: {
  142. type: PropType<readonly unknown[]>;
  143. default: () => never[];
  144. };
  145. renderless: BooleanConstructor;
  146. }, vue.ExtractPropTypes<{
  147. height: (StringConstructor | NumberConstructor)[];
  148. maxHeight: (StringConstructor | NumberConstructor)[];
  149. maxWidth: (StringConstructor | NumberConstructor)[];
  150. minHeight: (StringConstructor | NumberConstructor)[];
  151. minWidth: (StringConstructor | NumberConstructor)[];
  152. width: (StringConstructor | NumberConstructor)[];
  153. class: PropType<ClassValue>;
  154. style: {
  155. type: PropType<vue.StyleValue>;
  156. default: null;
  157. };
  158. itemHeight: {
  159. type: (StringConstructor | NumberConstructor)[];
  160. default: null;
  161. };
  162. items: {
  163. type: PropType<readonly unknown[]>;
  164. default: () => never[];
  165. };
  166. renderless: BooleanConstructor;
  167. }>>;
  168. type VVirtualScroll = InstanceType<typeof VVirtualScroll>;
  169. export { VVirtualScroll };