nfx-ui 0.7.4 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/apis/index.d.ts +2 -0
- package/dist/src/apis/ip.d.ts +4 -0
- package/dist/src/constants/caches.d.ts +5 -0
- package/dist/src/constants/enums.d.ts +18 -0
- package/dist/src/constants/index.d.ts +9 -0
- package/dist/src/constants/query.itemkeys.d.ts +31 -0
- package/dist/src/constants/query.listkeys.d.ts +30 -0
- package/dist/src/constants/querykeys.d.ts +42 -0
- package/dist/src/designs/animations/BounceLoading/index.d.ts +7 -0
- package/dist/src/designs/animations/ECGLoading/index.d.ts +6 -0
- package/dist/src/designs/animations/LetterGlitch/index.d.ts +12 -0
- package/dist/src/designs/animations/PixelBlast/index.d.ts +28 -0
- package/dist/src/designs/animations/Squares/index.d.ts +13 -0
- package/dist/src/designs/animations/TruckLoading/index.d.ts +6 -0
- package/dist/src/designs/animations/Waves/index.d.ts +18 -0
- package/dist/src/designs/animations/index.d.ts +6 -0
- package/dist/src/designs/components/Button/index.d.ts +20 -0
- package/dist/src/designs/components/Dropdown/index.d.ts +24 -0
- package/dist/src/designs/components/Icon/index.d.ts +9 -0
- package/dist/src/designs/components/Input/index.d.ts +23 -0
- package/dist/src/designs/components/KeyValueEditor/index.d.ts +30 -0
- package/dist/src/designs/components/LayoutSwitcher/index.d.ts +3 -0
- package/dist/src/designs/components/SearchInput/index.d.ts +12 -0
- package/dist/src/designs/components/ShowFilter/index.d.ts +28 -0
- package/dist/src/designs/components/SlideDownSwitcher/index.d.ts +16 -0
- package/dist/src/designs/components/Slider/index.d.ts +26 -0
- package/dist/src/designs/components/Suspense/SuspenseErrorBoundary.d.ts +21 -0
- package/dist/src/designs/components/Suspense/index.d.ts +47 -0
- package/dist/src/designs/components/Textarea/index.d.ts +21 -0
- package/dist/src/designs/components/ThemeSwitcher/index.d.ts +3 -0
- package/dist/src/designs/components/VirtualList/index.d.ts +41 -0
- package/dist/src/designs/components/VirtualWindowList/index.d.ts +41 -0
- package/dist/src/designs/components/index.d.ts +33 -0
- package/dist/src/designs/layouts/components/Background/index.d.ts +11 -0
- package/dist/src/designs/layouts/components/Footer/index.d.ts +5 -0
- package/dist/src/designs/layouts/components/Header/index.d.ts +4 -0
- package/dist/src/designs/layouts/components/LayoutFrame/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/MainWrapper/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/SideHideLayout/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/SideShowLayout/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/Sidebar/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/index.d.ts +8 -0
- package/dist/src/designs/layouts/hooks/index.d.ts +3 -0
- package/dist/src/designs/layouts/hooks/useAction.d.ts +7 -0
- package/dist/src/designs/layouts/hooks/useLayout.d.ts +5 -0
- package/dist/src/designs/layouts/hooks/useSet.d.ts +10 -0
- package/dist/src/designs/layouts/index.d.ts +8 -0
- package/dist/src/designs/layouts/providers/index.d.ts +3 -0
- package/dist/src/designs/layouts/types/components.d.ts +117 -0
- package/dist/src/designs/layouts/types/context.d.ts +12 -0
- package/dist/src/designs/layouts/types/index.d.ts +6 -0
- package/dist/src/designs/layouts/types/layout.d.ts +11 -0
- package/dist/src/designs/layouts/utils/index.d.ts +4 -0
- package/dist/src/designs/layouts/utils/layoutStorage.d.ts +4 -0
- package/dist/src/events/EventEmitter.d.ts +48 -0
- package/dist/src/events/index.d.ts +5 -0
- package/dist/src/hooks/index.d.ts +4 -0
- package/dist/src/hooks/makeCursorFetchFunction.d.ts +84 -0
- package/dist/src/hooks/makeUnifiedInfiniteQuery.d.ts +124 -0
- package/dist/src/hooks/makeUnifiedQuery.d.ts +19 -0
- package/dist/src/hooks/type.d.ts +36 -0
- package/dist/src/icons/index.d.ts +1 -0
- package/dist/src/icons/lucide.d.ts +2 -0
- package/dist/src/languages/hooks/index.d.ts +8 -0
- package/dist/src/languages/hooks/useLanguageLabel.d.ts +6 -0
- package/dist/src/languages/hooks/useLayoutLabel.d.ts +6 -0
- package/dist/src/languages/hooks/usePreferenceLabel.d.ts +6 -0
- package/dist/src/languages/hooks/useThemeLabel.d.ts +6 -0
- package/dist/src/languages/index.d.ts +11 -0
- package/dist/src/languages/languages/i18n.d.ts +8 -0
- package/dist/src/languages/languages/i18nResources.d.ts +13 -0
- package/dist/src/languages/languages/index.d.ts +2 -0
- package/dist/src/languages/providers/index.d.ts +3 -0
- package/dist/src/languages/resources/index.d.ts +8 -0
- package/dist/src/languages/types/components.d.ts +23 -0
- package/dist/src/languages/types/i18n.d.ts +28 -0
- package/dist/src/languages/types/index.d.ts +6 -0
- package/dist/src/languages/types/language.d.ts +13 -0
- package/dist/src/languages/utils/getLocalLanguage.d.ts +2 -0
- package/dist/src/languages/utils/index.d.ts +5 -0
- package/dist/src/languages/utils/languageStorage.d.ts +5 -0
- package/dist/src/navigations/index.d.ts +1 -0
- package/dist/src/navigations/navigation.d.ts +50 -0
- package/dist/src/preference/constants.d.ts +12 -0
- package/dist/src/preference/index.d.ts +35 -0
- package/dist/src/services/imageService.d.ts +6 -0
- package/dist/src/services/index.d.ts +1 -0
- package/dist/src/stores/index.d.ts +1 -0
- package/dist/src/stores/makeStore.d.ts +92 -0
- package/dist/src/themes/hooks/index.d.ts +2 -0
- package/dist/src/themes/hooks/useTheme.d.ts +5 -0
- package/dist/src/themes/hooks/useThemeVariables.d.ts +10 -0
- package/dist/src/themes/index.d.ts +8 -0
- package/dist/src/themes/providers/index.d.ts +3 -0
- package/dist/src/themes/themes/bases/android.d.ts +4 -0
- package/dist/src/themes/themes/bases/default.d.ts +5 -0
- package/dist/src/themes/themes/bases/index.d.ts +7 -0
- package/dist/src/themes/themes/bases/ios.d.ts +4 -0
- package/dist/src/themes/themes/bases/linux.d.ts +4 -0
- package/dist/src/themes/themes/bases/windows.d.ts +4 -0
- package/dist/src/themes/themes/colors/coffee.d.ts +7 -0
- package/dist/src/themes/themes/colors/corporate.d.ts +7 -0
- package/dist/src/themes/themes/colors/cosmic.d.ts +7 -0
- package/dist/src/themes/themes/colors/dark.d.ts +7 -0
- package/dist/src/themes/themes/colors/default.d.ts +7 -0
- package/dist/src/themes/themes/colors/forest.d.ts +7 -0
- package/dist/src/themes/themes/colors/index.d.ts +12 -0
- package/dist/src/themes/themes/colors/light.d.ts +7 -0
- package/dist/src/themes/themes/colors/wheat.d.ts +8 -0
- package/dist/src/themes/themes/colors/wine.d.ts +7 -0
- package/dist/src/themes/themes/index.d.ts +2 -0
- package/dist/src/themes/types/components.d.ts +20 -0
- package/dist/src/themes/types/context.d.ts +16 -0
- package/dist/src/themes/types/index.d.ts +6 -0
- package/dist/src/themes/types/theme.d.ts +209 -0
- package/dist/src/themes/utils/index.d.ts +4 -0
- package/dist/src/themes/utils/themeStorage.d.ts +7 -0
- package/dist/src/types/api.d.ts +75 -0
- package/dist/src/types/index.d.ts +2 -0
- package/dist/src/types/utils.d.ts +83 -0
- package/dist/src/utils/address.d.ts +7 -0
- package/dist/src/utils/apiError.d.ts +16 -0
- package/dist/src/utils/array.d.ts +21 -0
- package/dist/src/utils/colors.d.ts +37 -0
- package/dist/src/utils/email.d.ts +7 -0
- package/dist/src/utils/form.d.ts +14 -0
- package/dist/src/utils/index.d.ts +23 -0
- package/dist/src/utils/lstorage.d.ts +4 -0
- package/dist/src/utils/object.d.ts +10 -0
- package/dist/src/utils/polling.d.ts +12 -0
- package/dist/src/utils/price.d.ts +28 -0
- package/dist/src/utils/promise.d.ts +17 -0
- package/dist/src/utils/result.d.ts +21 -0
- package/dist/src/utils/retry.d.ts +15 -0
- package/dist/src/utils/safe.d.ts +69 -0
- package/dist/src/utils/singleton.d.ts +21 -0
- package/dist/src/utils/suspense.d.ts +10 -0
- package/dist/src/utils/time.d.ts +49 -0
- package/dist/src/utils/types.d.ts +10 -0
- package/package.json +19 -22
- package/dist/animations.d.ts +0 -1
- package/dist/apis.d.ts +0 -1
- package/dist/components.d.ts +0 -1
- package/dist/constants.d.ts +0 -1
- package/dist/events.d.ts +0 -1
- package/dist/hooks.d.ts +0 -1
- package/dist/icons.d.ts +0 -1
- package/dist/languages.d.ts +0 -1
- package/dist/layouts.d.ts +0 -1
- package/dist/navigations.d.ts +0 -1
- package/dist/pixel-blast.d.ts +0 -1
- package/dist/preference.d.ts +0 -1
- package/dist/services.d.ts +0 -1
- package/dist/stores.d.ts +0 -1
- package/dist/themes.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/utils.d.ts +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type PathNode<T> = string & {
|
|
2
|
+
[K in keyof T]: T[K] extends (...args: infer A) => infer R ? R extends object ? (...args: A) => PathNode<R> : (...args: A) => string : T[K] extends object ? PathNode<T[K]> : string;
|
|
3
|
+
};
|
|
4
|
+
export declare const path: <T extends Record<string, unknown>>(base: string, children: T) => PathNode<T>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type EnumMetaMap = Record<string, Record<PropertyKey, unknown>>;
|
|
2
|
+
type DefinedEnum<M extends EnumMetaMap> = {
|
|
3
|
+
Values: readonly (keyof M)[];
|
|
4
|
+
pickMap<P extends keyof M[keyof M]>(prop: P): {
|
|
5
|
+
[K in keyof M]: M[K][P];
|
|
6
|
+
};
|
|
7
|
+
get<K extends keyof M>(key: K): M[K];
|
|
8
|
+
};
|
|
9
|
+
type EnumInferMeta<E> = E extends DefinedEnum<infer M> ? M : never;
|
|
10
|
+
type EnumValue<E extends {
|
|
11
|
+
Values: readonly PropertyKey[];
|
|
12
|
+
}> = E["Values"][number];
|
|
13
|
+
declare function defineEnum<const M extends EnumMetaMap>(metaMap: M): DefinedEnum<M>;
|
|
14
|
+
declare function enumPickMap<M extends EnumMetaMap, P extends keyof M[keyof M]>(e: DefinedEnum<M>, prop: P): {
|
|
15
|
+
[K in keyof M]: M[K][P];
|
|
16
|
+
};
|
|
17
|
+
export { defineEnum, enumPickMap };
|
|
18
|
+
export type { EnumMetaMap, DefinedEnum, EnumInferMeta, EnumValue };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 公用常量:query key 工厂、domain 片段、cache 片段、catalog 限制等
|
|
3
|
+
* Shared constants: query key factories, domain segments, cache segments, catalog limits.
|
|
4
|
+
*/
|
|
5
|
+
export * from './caches';
|
|
6
|
+
export * from './enums';
|
|
7
|
+
export * from './query.itemkeys';
|
|
8
|
+
export * from './query.listkeys';
|
|
9
|
+
export * from './querykeys';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { QueryKey } from '@tanstack/react-query';
|
|
2
|
+
/**
|
|
3
|
+
* 链式单条 key 类型:可调用 (...ids) => QueryKey,且带 withPrefix、getPrefix。
|
|
4
|
+
* Chainable item key type: callable (...ids) => QueryKey, with withPrefix() and getPrefix.
|
|
5
|
+
*/
|
|
6
|
+
type ItemKeyChainable = ((...ids: string[]) => QueryKey) & {
|
|
7
|
+
withPrefix(...prefix: unknown[]): ItemKeyChainable;
|
|
8
|
+
/** 不含 id 的前缀,用于 invalidation 等。Prefix without ids, e.g. for invalidation. */
|
|
9
|
+
getPrefix: QueryKey;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 创建「单条」query key 工厂(可链式 .withPrefix):支持传入一个或多个 id,返回 [domain, CACHE_ITEM, subDomain, ...ids]
|
|
13
|
+
* Creates an item query key factory (chainable .withPrefix): accepts one or more ids, returns [domain, CACHE_ITEM, subDomain, ...ids].
|
|
14
|
+
*
|
|
15
|
+
* @param domain - 域名。Domain name (e.g. "catalog", "auth").
|
|
16
|
+
* @param subDomain - 子域。Sub-domain (e.g. "category", "product").
|
|
17
|
+
* @returns 可调用的 key 工厂,带 withPrefix 可链式加前缀。Callable key factory with withPrefix for chaining.
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const getKey = createItemKey("catalog", "category");
|
|
21
|
+
* getKey("abc");
|
|
22
|
+
* * => ["catalog", "item", "category", "abc"]
|
|
23
|
+
* getKey.getPrefix
|
|
24
|
+
* * => ["catalog", "item", "category"]
|
|
25
|
+
* createItemKey("catalog", "category").withPrefix("api").withPrefix("v1").getPrefix;
|
|
26
|
+
* * => ["v1", "api", "catalog", "item", "category"]
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare function createItemKey(domain: string, subDomain: string): ItemKeyChainable;
|
|
30
|
+
export { createItemKey };
|
|
31
|
+
export type { ItemKeyChainable };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { QueryKey } from '@tanstack/react-query';
|
|
2
|
+
/**
|
|
3
|
+
* 链式列表 key 类型:本身即 QueryKey(数组),且带 withPrefix、getPrefix。
|
|
4
|
+
* Chainable list key type: is a QueryKey (array) and has withPrefix(), getPrefix.
|
|
5
|
+
*/
|
|
6
|
+
type ListKeyChainable = QueryKey & {
|
|
7
|
+
withPrefix(...prefix: unknown[]): ListKeyChainable;
|
|
8
|
+
/** 列表 key 的前缀(即完整 list key,用于 invalidation 等)。Prefix (full list key) for invalidation. */
|
|
9
|
+
getPrefix: QueryKey;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 创建「列表」query key(可链式 .withPrefix):[domain, CACHE_LIST, subDomain]
|
|
13
|
+
* Creates a list query key (chainable .withPrefix): [domain, CACHE_LIST, subDomain].
|
|
14
|
+
*
|
|
15
|
+
* @param domain - 域名。Domain name (e.g. "catalog", "auth").
|
|
16
|
+
* @param subDomain - 子域。Sub-domain (e.g. "category", "product").
|
|
17
|
+
* @returns 列表 query key(数组),带 withPrefix 可链式加前缀。List query key (array) with withPrefix for chaining.
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const key = createListKey("catalog", "category");
|
|
21
|
+
* * key => ["catalog", "list", "category"]
|
|
22
|
+
* key.getPrefix
|
|
23
|
+
* * => ["catalog", "list", "category"]
|
|
24
|
+
* createListKey("catalog", "category").withPrefix("api").withPrefix("v1").getPrefix;
|
|
25
|
+
* * => ["v1", "api", "catalog", "list", "category"]
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
declare function createListKey(domain: string, subDomain: string): ListKeyChainable;
|
|
29
|
+
export { createListKey };
|
|
30
|
+
export type { ListKeyChainable };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { QueryKey } from '@tanstack/react-query';
|
|
2
|
+
import { ItemKeyChainable } from './query.itemkeys';
|
|
3
|
+
import { ListKeyChainable } from './query.listkeys';
|
|
4
|
+
/** 含 list / item 且可链式 withPrefix 的 bundle 类型 */
|
|
5
|
+
type QueryKeysBundle = {
|
|
6
|
+
list: ListKeyChainable;
|
|
7
|
+
item: ItemKeyChainable;
|
|
8
|
+
withPrefix(...prefix: unknown[]): QueryKeysBundle;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* 创建自定义 query key(任意片段,用于 stats 等)
|
|
12
|
+
* Creates a custom query key from arbitrary segments (e.g. for stats).
|
|
13
|
+
*
|
|
14
|
+
* @param segments - 任意片段(字符串或其它)。Arbitrary segments (strings or other).
|
|
15
|
+
* @returns 由片段组成的 query key。Query key composed of the segments.
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const key = createKey("catalog", "stats", "category", "count");
|
|
19
|
+
* * key => ["catalog", "stats", "category", "count"]
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
declare function createKey(...segments: unknown[]): QueryKey;
|
|
23
|
+
/**
|
|
24
|
+
* 根据同一 domain + subDomain 生成 list key 与 item key 工厂
|
|
25
|
+
* Returns both list key and item key factory for the given domain and subDomain.
|
|
26
|
+
*
|
|
27
|
+
* @param domain - 域名。Domain name (e.g. "catalog", "auth").
|
|
28
|
+
* @param subDomain - 子域。Sub-domain (e.g. "category", "product").
|
|
29
|
+
* @returns 含 list、item 及 withPrefix 的 bundle,可链式加前缀。Bundle with list, item, and chainable withPrefix.
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* const { list, item } = createQueryKeys("catalog", "category");
|
|
33
|
+
* * list => ["catalog", "list", "category"]
|
|
34
|
+
* * item("id-1") => ["catalog", "item", "category", "id-1"]
|
|
35
|
+
* const withApi = createQueryKeys("catalog", "category").withPrefix("api");
|
|
36
|
+
* * withApi.list => ["api", "catalog", "list", "category"]
|
|
37
|
+
* * withApi.item("id-1") => ["api", "catalog", "item", "category", "id-1"]
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
declare function createQueryKeys(domain: string, subDomain: string): QueryKeysBundle;
|
|
41
|
+
export { createKey, createQueryKeys };
|
|
42
|
+
export type { QueryKeysBundle };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface BounceLoadingProps {
|
|
2
|
+
size?: "small" | "medium" | "large";
|
|
3
|
+
shape?: "square" | "circle";
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const BounceLoading: import('react').MemoExoticComponent<({ size, shape, className }: BounceLoadingProps) => import("react/jsx-runtime").JSX.Element>;
|
|
7
|
+
export default BounceLoading;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface LetterGlitchProps {
|
|
2
|
+
glitchColors?: string[];
|
|
3
|
+
glitchSpeed?: number;
|
|
4
|
+
centerVignette?: boolean;
|
|
5
|
+
outerVignette?: boolean;
|
|
6
|
+
smooth?: boolean;
|
|
7
|
+
characters?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
}
|
|
11
|
+
declare const LetterGlitchBackground: React.FC<Omit<LetterGlitchProps, "glitchColors">>;
|
|
12
|
+
export default LetterGlitchBackground;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
type PixelBlastVariant = "square" | "circle" | "triangle" | "diamond";
|
|
3
|
+
type PixelBlastProps = {
|
|
4
|
+
variant?: PixelBlastVariant;
|
|
5
|
+
pixelSize?: number;
|
|
6
|
+
color?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
antialias?: boolean;
|
|
10
|
+
patternScale?: number;
|
|
11
|
+
patternDensity?: number;
|
|
12
|
+
liquid?: boolean;
|
|
13
|
+
liquidStrength?: number;
|
|
14
|
+
liquidRadius?: number;
|
|
15
|
+
pixelSizeJitter?: number;
|
|
16
|
+
enableRipples?: boolean;
|
|
17
|
+
rippleIntensityScale?: number;
|
|
18
|
+
rippleThickness?: number;
|
|
19
|
+
rippleSpeed?: number;
|
|
20
|
+
liquidWobbleSpeed?: number;
|
|
21
|
+
autoPauseOffscreen?: boolean;
|
|
22
|
+
speed?: number;
|
|
23
|
+
transparent?: boolean;
|
|
24
|
+
edgeFade?: number;
|
|
25
|
+
noiseAmount?: number;
|
|
26
|
+
};
|
|
27
|
+
declare const PixelBlastBackground: React.FC<Omit<PixelBlastProps, "color">>;
|
|
28
|
+
export default PixelBlastBackground;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
type CanvasStrokeStyle = string | CanvasGradient | CanvasPattern;
|
|
3
|
+
interface SquaresProps {
|
|
4
|
+
direction?: "diagonal" | "up" | "right" | "down" | "left";
|
|
5
|
+
speed?: number;
|
|
6
|
+
borderColor?: CanvasStrokeStyle;
|
|
7
|
+
squareSize?: number;
|
|
8
|
+
hoverFillColor?: CanvasStrokeStyle;
|
|
9
|
+
className?: string;
|
|
10
|
+
style?: React.CSSProperties;
|
|
11
|
+
}
|
|
12
|
+
declare const SquareBackground: React.FC<Omit<SquaresProps, "borderColor" | "hoverFillColor">>;
|
|
13
|
+
export default SquareBackground;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
interface TruckLoadingProps {
|
|
2
|
+
size?: "small" | "medium" | "large";
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
declare const TruckLoading: import('react').MemoExoticComponent<({ size, className }: TruckLoadingProps) => import("react/jsx-runtime").JSX.Element>;
|
|
6
|
+
export default TruckLoading;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { default as React, CSSProperties } from 'react';
|
|
2
|
+
interface WavesProps {
|
|
3
|
+
lineColor?: string;
|
|
4
|
+
backgroundColor?: string;
|
|
5
|
+
waveSpeedX?: number;
|
|
6
|
+
waveSpeedY?: number;
|
|
7
|
+
waveAmpX?: number;
|
|
8
|
+
waveAmpY?: number;
|
|
9
|
+
xGap?: number;
|
|
10
|
+
yGap?: number;
|
|
11
|
+
friction?: number;
|
|
12
|
+
tension?: number;
|
|
13
|
+
maxCursorMove?: number;
|
|
14
|
+
style?: CSSProperties;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
declare const WaveBackground: React.FC<Omit<WavesProps, "lineColor" | "backgroundColor">>;
|
|
18
|
+
export default WaveBackground;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as ECGLoading } from './ECGLoading';
|
|
2
|
+
export { default as TruckLoading } from './TruckLoading';
|
|
3
|
+
export { default as BounceLoading } from './BounceLoading';
|
|
4
|
+
export { default as WaveBackground } from './Waves';
|
|
5
|
+
export { default as SquareBackground } from './Squares';
|
|
6
|
+
export { default as LetterGlitchBackground } from './LetterGlitch';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "size"> {
|
|
3
|
+
variant?: "primary" | "secondary" | "outline" | "ghost" | "danger";
|
|
4
|
+
size?: "small" | "medium" | "large";
|
|
5
|
+
fullWidth?: boolean;
|
|
6
|
+
leftIcon?: ReactNode;
|
|
7
|
+
rightIcon?: ReactNode;
|
|
8
|
+
/** 上方图标。Top icon. */
|
|
9
|
+
topIcon?: ReactNode;
|
|
10
|
+
/** 下方图标。Bottom icon. */
|
|
11
|
+
bottomIcon?: ReactNode;
|
|
12
|
+
/** 仅图标无文案。Icon only, no text. */
|
|
13
|
+
iconOnly?: boolean;
|
|
14
|
+
/** 图标尺寸覆盖。Override icon size. */
|
|
15
|
+
iconSize?: number;
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
declare const Button: import('react').ForwardRefExoticComponent<ButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
export default Button;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface DropdownOption {
|
|
2
|
+
/** 选项值。Option value. */
|
|
3
|
+
value: string;
|
|
4
|
+
/** 选项展示文案。Option label. */
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DropdownProps {
|
|
8
|
+
/** 选项列表。Options list. */
|
|
9
|
+
options: DropdownOption[];
|
|
10
|
+
/** 当前选中值。Current value. */
|
|
11
|
+
value: string;
|
|
12
|
+
/** 选中回调。Change callback. */
|
|
13
|
+
onChange: (value: string) => void;
|
|
14
|
+
/** 占位符。Placeholder. */
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
/** 是否禁用。Disabled. */
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
/** 是否错误态。Error state. */
|
|
19
|
+
error?: boolean;
|
|
20
|
+
/** 容器 className。Container className. */
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
declare const Dropdown: import('react').NamedExoticComponent<DropdownProps>;
|
|
24
|
+
export default Dropdown;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LucideProps } from 'lucide-react';
|
|
2
|
+
import * as LucideIcons from "@/icons/lucide";
|
|
3
|
+
export type IconName = keyof Omit<typeof LucideIcons, "LucideIcon">;
|
|
4
|
+
export interface IconProps extends LucideProps {
|
|
5
|
+
/** 图标名(lucide 注册名)。Icon name (lucide registered name). */
|
|
6
|
+
name: IconName;
|
|
7
|
+
}
|
|
8
|
+
declare const Icon: import('react').MemoExoticComponent<({ name, ...props }: IconProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
9
|
+
export default Icon;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
3
|
+
/** 标签文案。Label text. */
|
|
4
|
+
label?: string;
|
|
5
|
+
/** 错误信息。Error message. */
|
|
6
|
+
error?: string;
|
|
7
|
+
/** 辅助说明。Helper text. */
|
|
8
|
+
helperText?: string;
|
|
9
|
+
/** 左侧图标。Left icon. */
|
|
10
|
+
leftIcon?: ReactNode;
|
|
11
|
+
/** 右侧图标。Right icon. */
|
|
12
|
+
rightIcon?: ReactNode;
|
|
13
|
+
/** 为 true 时 rightIcon 可点击(如密码切换、清除按钮)。When true, right icon is clickable (e.g. password toggle, clear). */
|
|
14
|
+
rightIconInteractive?: boolean;
|
|
15
|
+
/** 尺寸。Size. */
|
|
16
|
+
size?: "small" | "medium" | "large";
|
|
17
|
+
/** 视觉变体。Variant. */
|
|
18
|
+
variant?: "default" | "filled";
|
|
19
|
+
/** 是否占满宽度。Full width. */
|
|
20
|
+
fullWidth?: boolean;
|
|
21
|
+
}
|
|
22
|
+
declare const Input: import('react').ForwardRefExoticComponent<InputProps & import('react').RefAttributes<HTMLInputElement>>;
|
|
23
|
+
export default Input;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface KeyValuePair {
|
|
2
|
+
/** 键。Key. */
|
|
3
|
+
key: string;
|
|
4
|
+
/** 值(字符串或字符串数组)。Value (string or string[]). */
|
|
5
|
+
value: string | string[];
|
|
6
|
+
}
|
|
7
|
+
export interface KeyValueEditorProps {
|
|
8
|
+
/** 表单项标签。Field label. */
|
|
9
|
+
label: string;
|
|
10
|
+
/** 键值对列表。Key-value pairs. */
|
|
11
|
+
pairs: KeyValuePair[];
|
|
12
|
+
/** 列表变化回调。Change callback. */
|
|
13
|
+
onChange: (pairs: KeyValuePair[]) => void;
|
|
14
|
+
/** 值类型:string 或 array。Value type: string or array. */
|
|
15
|
+
valueType?: "string" | "array";
|
|
16
|
+
/** 键占位符。Key placeholder. */
|
|
17
|
+
keyPlaceholder?: string;
|
|
18
|
+
/** 值占位符(string 模式)。Value placeholder (string mode). */
|
|
19
|
+
valuePlaceholder?: string;
|
|
20
|
+
/** 值占位符(array 模式)。Value placeholder (array mode). */
|
|
21
|
+
valueArrayPlaceholder?: string;
|
|
22
|
+
/** 删除按钮 aria-label。Remove button aria-label. */
|
|
23
|
+
removeAriaLabel?: string;
|
|
24
|
+
/** 新增按钮文案。Add button label. */
|
|
25
|
+
addLabel?: string;
|
|
26
|
+
/** 错误信息。Error message. */
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
declare const KeyValueEditor: import('react').MemoExoticComponent<({ label, pairs, onChange, valueType, keyPlaceholder, valuePlaceholder, valueArrayPlaceholder, removeAriaLabel, addLabel, error, }: KeyValueEditorProps) => import("react/jsx-runtime").JSX.Element>;
|
|
30
|
+
export default KeyValueEditor;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { LayoutSwitcherProps } from '../../../../designs/layouts/types';
|
|
2
|
+
declare const LayoutSwitcher: import('react').MemoExoticComponent<({ status, getLayoutDisplayName, handleChangeLayoutMode }: LayoutSwitcherProps) => import("react/jsx-runtime").JSX.Element>;
|
|
3
|
+
export default LayoutSwitcher;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface SearchInputProps {
|
|
2
|
+
/** 当前输入值。Current value. */
|
|
3
|
+
value: string;
|
|
4
|
+
/** 值变化回调。Change callback. */
|
|
5
|
+
onChange: (value: string) => void;
|
|
6
|
+
/** 占位符,由调用方传入。Placeholder; pass from caller. */
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
/** 清除按钮 aria-label;由调用方传入(可来自 i18n)。Clear button aria-label; pass from caller. */
|
|
9
|
+
clearButtonAriaLabel?: string;
|
|
10
|
+
}
|
|
11
|
+
declare const SearchInput: import('react').MemoExoticComponent<({ value, onChange, placeholder, clearButtonAriaLabel }: SearchInputProps) => import("react/jsx-runtime").JSX.Element>;
|
|
12
|
+
export default SearchInput;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ShowFilterValue {
|
|
2
|
+
/** 筛选是否启用。Whether filter is enabled. */
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
/** 显示/隐藏:null=全部,true=显示,false=隐藏。Show/hide: null=all, true=show, false=hide. */
|
|
5
|
+
value: boolean | null;
|
|
6
|
+
}
|
|
7
|
+
export interface ShowFilterProps {
|
|
8
|
+
/** 当前值。Current value. */
|
|
9
|
+
value: ShowFilterValue;
|
|
10
|
+
/** 值变化回调。Change callback. */
|
|
11
|
+
onChange: (value: ShowFilterValue) => void;
|
|
12
|
+
/** 筛选开启时的按钮文案。Label when filter enabled. */
|
|
13
|
+
filterEnabled?: string;
|
|
14
|
+
/** 筛选关闭时的按钮文案。Label when filter disabled. */
|
|
15
|
+
filterDisabled?: string;
|
|
16
|
+
/** 开启筛选按钮的 aria-label。Aria-label for enable filter button. */
|
|
17
|
+
enableFilterAriaLabel?: string;
|
|
18
|
+
/** 关闭筛选按钮的 aria-label。Aria-label for disable filter button. */
|
|
19
|
+
disableFilterAriaLabel?: string;
|
|
20
|
+
/** 「全部」选项文案。Label for "all" option. */
|
|
21
|
+
all?: string;
|
|
22
|
+
/** 「显示」选项文案。Label for "show" option. */
|
|
23
|
+
show?: string;
|
|
24
|
+
/** 「隐藏」选项文案。Label for "hide" option. */
|
|
25
|
+
hide?: string;
|
|
26
|
+
}
|
|
27
|
+
declare const ShowFilter: import('react').MemoExoticComponent<({ value, onChange, filterEnabled, filterDisabled, enableFilterAriaLabel, disableFilterAriaLabel, all, show, hide, }: ShowFilterProps) => import("react/jsx-runtime").JSX.Element>;
|
|
28
|
+
export default ShowFilter;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface SlideDownSwitcherProps<T extends string> {
|
|
2
|
+
/** 当前选中的值(enum 或 string) */
|
|
3
|
+
value: T;
|
|
4
|
+
/** 可选项列表(如 Object.values(SomeEnum)) */
|
|
5
|
+
options: readonly T[];
|
|
6
|
+
/** 选项展示文案 */
|
|
7
|
+
getDisplayName: (value: T) => string;
|
|
8
|
+
/** 选中后回调 */
|
|
9
|
+
onChange: (value: T) => void;
|
|
10
|
+
status?: "primary" | "default";
|
|
11
|
+
}
|
|
12
|
+
declare const SlideDownSwitcherInner: <T extends string>({ value, options, getDisplayName, onChange, status }: SlideDownSwitcherProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare const SlideDownSwitcher: typeof SlideDownSwitcherInner & {
|
|
14
|
+
displayName?: string;
|
|
15
|
+
};
|
|
16
|
+
export default SlideDownSwitcher;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
2
|
+
/** 当前值。Current value. */
|
|
3
|
+
value: number;
|
|
4
|
+
/** 值变化回调。Change callback. */
|
|
5
|
+
onChange: (value: number) => void;
|
|
6
|
+
/** 最小值。Minimum. */
|
|
7
|
+
min?: number;
|
|
8
|
+
/** 最大值。Maximum. */
|
|
9
|
+
max?: number;
|
|
10
|
+
/** 步长。Step. */
|
|
11
|
+
step?: number;
|
|
12
|
+
/** 是否显示数值。Show value. */
|
|
13
|
+
showValue?: boolean;
|
|
14
|
+
/** 是否占满宽度。Full width. */
|
|
15
|
+
fullWidth?: boolean;
|
|
16
|
+
/** 标签文案。Label text. */
|
|
17
|
+
label?: string;
|
|
18
|
+
/** 错误信息。Error message. */
|
|
19
|
+
error?: string;
|
|
20
|
+
/** 辅助说明。Helper text. */
|
|
21
|
+
helperText?: string;
|
|
22
|
+
/** 是否必填。Required. */
|
|
23
|
+
required?: boolean;
|
|
24
|
+
}
|
|
25
|
+
declare const Slider: import('react').NamedExoticComponent<SliderProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
26
|
+
export default Slider;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode, Component } from 'react';
|
|
2
|
+
interface SuspenseErrorBoundaryProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
fallbackRender: (args: {
|
|
5
|
+
error: Error | null;
|
|
6
|
+
retry: () => void;
|
|
7
|
+
}) => ReactNode;
|
|
8
|
+
onReset?: () => void;
|
|
9
|
+
}
|
|
10
|
+
interface SuspenseErrorBoundaryState {
|
|
11
|
+
hasError: boolean;
|
|
12
|
+
error: Error | null;
|
|
13
|
+
}
|
|
14
|
+
declare class SuspenseErrorBoundary extends Component<SuspenseErrorBoundaryProps, SuspenseErrorBoundaryState> {
|
|
15
|
+
state: SuspenseErrorBoundaryState;
|
|
16
|
+
static getDerivedStateFromError(error: Error): SuspenseErrorBoundaryState;
|
|
17
|
+
componentDidCatch(error: Error): void;
|
|
18
|
+
private handleReset;
|
|
19
|
+
render(): ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export default SuspenseErrorBoundary;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { QueryErrorResetBoundaryProps } from '@tanstack/react-query';
|
|
2
|
+
import { ReactNode, SuspenseProps as ReactSuspenseProps } from 'react';
|
|
3
|
+
export interface SuspenseProps extends Omit<ReactSuspenseProps, "fallback">, Omit<QueryErrorResetBoundaryProps, "children"> {
|
|
4
|
+
/** 自定义 fallback。Custom fallback. */
|
|
5
|
+
fallback?: ReactNode;
|
|
6
|
+
/** 测试用:始终挂起。Test: always suspend. */
|
|
7
|
+
test?: boolean;
|
|
8
|
+
/** 加载动画类型。Loading type. */
|
|
9
|
+
loadingType?: "ecg" | "truck" | "bounce";
|
|
10
|
+
/** 加载图形形状。Loading shape. */
|
|
11
|
+
loadingShape?: "square" | "circle";
|
|
12
|
+
/** 加载中文案,由调用方传入。Loading text; pass from caller (e.g. i18n). */
|
|
13
|
+
loadingText?: string;
|
|
14
|
+
/** 加载图尺寸。Loading size. */
|
|
15
|
+
loadingSize?: "small" | "medium" | "large";
|
|
16
|
+
/** 加载容器 className。Loading container className. */
|
|
17
|
+
loadingContainerClassName?: string;
|
|
18
|
+
/** 加载文案 className。Loading text className. */
|
|
19
|
+
loadingTextClassName?: string;
|
|
20
|
+
/** 加载图 className。Loading className. */
|
|
21
|
+
loadingClassName?: string;
|
|
22
|
+
/** 自定义错误 UI。Custom error fallback. */
|
|
23
|
+
errorFallback?: (args: {
|
|
24
|
+
error: Error | null;
|
|
25
|
+
retry: () => void;
|
|
26
|
+
}) => ReactNode;
|
|
27
|
+
/** 错误标题,由调用方传入。Error title; pass from caller. */
|
|
28
|
+
errorTitle?: string;
|
|
29
|
+
/** 错误描述,由调用方传入。Error description; pass from caller. */
|
|
30
|
+
errorDescription?: string;
|
|
31
|
+
/** 重试按钮文案,由调用方传入。Retry text; pass from caller. */
|
|
32
|
+
retryText?: string;
|
|
33
|
+
/** 错误详情折叠文案。Error details text. */
|
|
34
|
+
errorDetailsText?: string;
|
|
35
|
+
/** 清除本地数据按钮文案。Clear local data text. */
|
|
36
|
+
clearLocalDataText?: string;
|
|
37
|
+
/** 点击「清除本地数据」后执行(如跳转登录页),由调用方传入。Called after clear local data (e.g. navigate to login); pass from caller. */
|
|
38
|
+
onClearLocalData?: () => void;
|
|
39
|
+
/** 错误容器 className。Error container className. */
|
|
40
|
+
errorContainerClassName?: string;
|
|
41
|
+
/** 错误详情 className。Error details className. */
|
|
42
|
+
errorDetailsClassName?: string;
|
|
43
|
+
/** 是否展示错误详情。Show error details. */
|
|
44
|
+
showErrorDetails?: boolean;
|
|
45
|
+
}
|
|
46
|
+
declare const Suspense: import('react').MemoExoticComponent<({ fallback, test, loadingType, loadingShape, loadingClassName, loadingText, loadingSize, loadingContainerClassName, loadingTextClassName, children, errorFallback, errorTitle, errorDescription, retryText, errorDetailsText, clearLocalDataText, onClearLocalData, errorContainerClassName, errorDetailsClassName, showErrorDetails, ...restProps }: SuspenseProps) => import("react/jsx-runtime").JSX.Element>;
|
|
47
|
+
export default Suspense;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode, TextareaHTMLAttributes } from 'react';
|
|
2
|
+
export interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "size"> {
|
|
3
|
+
/** 标签文案。Label text. */
|
|
4
|
+
label?: string;
|
|
5
|
+
/** 错误信息。Error message. */
|
|
6
|
+
error?: string;
|
|
7
|
+
/** 辅助说明。Helper text. */
|
|
8
|
+
helperText?: string;
|
|
9
|
+
/** 左侧图标。Left icon. */
|
|
10
|
+
leftIcon?: ReactNode;
|
|
11
|
+
/** 右侧图标。Right icon. */
|
|
12
|
+
rightIcon?: ReactNode;
|
|
13
|
+
/** 尺寸。Size. */
|
|
14
|
+
size?: "small" | "medium" | "large";
|
|
15
|
+
/** 视觉变体。Variant. */
|
|
16
|
+
variant?: "default" | "filled";
|
|
17
|
+
/** 是否占满宽度。Full width. */
|
|
18
|
+
fullWidth?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare const Textarea: import('react').ForwardRefExoticComponent<TextareaProps & import('react').RefAttributes<HTMLTextAreaElement>>;
|
|
21
|
+
export default Textarea;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ThemeSwitcherProps } from '../../../../themes/types';
|
|
2
|
+
declare const ThemeSwitcher: import('react').MemoExoticComponent<({ status, getThemeDisplayName, handleChangeTheme }: ThemeSwitcherProps) => import("react/jsx-runtime").JSX.Element>;
|
|
3
|
+
export default ThemeSwitcher;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { VirtualizerOptions } from '@tanstack/react-virtual';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export interface VirtualListProps<T> extends Partial<Omit<VirtualizerOptions<HTMLDivElement, Element>, "count" | "getScrollElement" | "observeElementRect" | "observeElementOffset" | "scrollToFn" | "getItemKey" | "estimateSize">> {
|
|
4
|
+
/** 数据列表。Data array. */
|
|
5
|
+
data: T[];
|
|
6
|
+
/** 是否有下一页。Has next page. */
|
|
7
|
+
hasNextPage?: boolean;
|
|
8
|
+
/** 是否正在拉取下一页。Is fetching next page. */
|
|
9
|
+
isFetchingNextPage?: boolean;
|
|
10
|
+
/** 拉取下一页。Fetch next page. */
|
|
11
|
+
fetchNextPage?: () => void;
|
|
12
|
+
/** 单项渲染。Render item. */
|
|
13
|
+
renderItem: (item: T, index: number) => ReactNode;
|
|
14
|
+
/** 单项高度估计。Estimate item size. */
|
|
15
|
+
estimateSize?: number | ((index: number) => number);
|
|
16
|
+
/** 列表高度。List height. */
|
|
17
|
+
height?: string | number;
|
|
18
|
+
/** 单项 key。Get item key. */
|
|
19
|
+
getItemKey: (item: T, index: number) => string | number;
|
|
20
|
+
/** 空状态自定义节点。Empty state node. */
|
|
21
|
+
emptyState?: ReactNode;
|
|
22
|
+
/** 加载更多指示器。Loading indicator node. */
|
|
23
|
+
loadingIndicator?: ReactNode;
|
|
24
|
+
/** 列表底指示器。End of list indicator node. */
|
|
25
|
+
endOfListIndicator?: ReactNode;
|
|
26
|
+
/** 当未提供 emptyState 时使用的文案,由调用方传入。Text when no data; used when emptyState not provided. */
|
|
27
|
+
emptyText?: string;
|
|
28
|
+
/** 当未提供 loadingIndicator 时使用的文案。Text when loading more. */
|
|
29
|
+
loadingMoreText?: string;
|
|
30
|
+
/** 当未提供 endOfListIndicator 时使用的文案。Text at end of list. */
|
|
31
|
+
endOfListText?: string;
|
|
32
|
+
/** 列表项容器 className。Flex container class. */
|
|
33
|
+
flexClass?: string;
|
|
34
|
+
/** 外层容器 className。Outer class. */
|
|
35
|
+
outerClass?: string;
|
|
36
|
+
/** 内层容器 className。Inner class. */
|
|
37
|
+
innerClass?: string;
|
|
38
|
+
}
|
|
39
|
+
declare function VirtualListComponent<T>({ data, hasNextPage, isFetchingNextPage, fetchNextPage, renderItem, estimateSize, overscan, height, getItemKey, emptyState, loadingIndicator, endOfListIndicator, emptyText, loadingMoreText, endOfListText, flexClass, outerClass, innerClass, ...virtualizerOptions }: VirtualListProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare const VirtualList: typeof VirtualListComponent;
|
|
41
|
+
export default VirtualList;
|