dumi
Version:
📖 Documentation Generator of React Component
320 lines (315 loc) • 8.67 kB
TypeScript
import type {
AtomAsset,
AtomComponentAsset,
ExampleBlockAsset,
ExamplePresetAsset,
} from 'dumi-assets-types';
import type { TypeMap } from 'dumi-assets-types/typings/atom/props/types';
import type {
FC,
ComponentType as ReactComponentType,
ReactNode,
RefObject,
} from 'react';
export {
FormattedDate,
FormattedDateParts,
FormattedDisplayName,
FormattedList,
FormattedMessage,
FormattedNumber,
FormattedNumberParts,
FormattedPlural,
FormattedRelativeTime,
FormattedTime,
FormattedTimeParts,
IntlContext,
IntlProvider,
RawIntlProvider,
createIntlCache,
defineMessages,
injectIntl,
useIntl,
} from 'react-intl';
export interface IPreviewerProps {
title?: string;
description?: string;
filename?: string;
iframe?: boolean | number;
debug?: boolean;
defaultShowCode?: boolean;
demoUrl: string;
compact?: boolean;
transform?: boolean;
background?: string;
asset: ExampleBlockAsset;
children: ReactNode;
_live_in_iframe?: boolean;
[key: string]: any;
}
export interface IRouteMeta {
frontmatter: {
title: string;
description?: string;
keywords?: string[];
nav?:
| string
| {
title?: string;
order?: number;
second?: Omit<IRouteMeta['frontmatter']['nav'], 'second'>;
};
group?: string | { title?: string; order?: number };
order?: number;
hero?: {
title?: string;
description?: string;
background?: string;
actions?: { text: string; link: string }[];
[key: string]: any;
};
features?: {
emoji?: string;
title?: string;
link?: string;
description?: string;
[key: string]: any;
}[];
toc?: boolean | 'content' | 'menu';
demo?: {
cols?: number;
tocDepth?: number;
};
atomId?: string;
filename?: string;
lastUpdated?: number;
debug?: boolean;
sidebar?: boolean;
[key: string]: any;
};
toc: { id: string; depth: number; title: string; _debug_demo?: boolean }[];
texts: {
type?: 'content';
value: string;
paraId: number;
tocIndex?: number;
}[];
tabs?: {
key: string;
title?: string;
titleIntlId?: string;
components: {
default: ReactComponentType;
Extra: ReactComponentType;
Action: ReactComponentType;
};
meta: {
frontmatter: Omit<
IRouteMeta['frontmatter'],
'description' | 'keywords' | 'nav' | 'group' | 'hero' | 'features'
>;
toc: IRouteMeta['toc'];
texts: IRouteMeta['texts'];
[key: string]: any;
};
}[];
_atom_route?: boolean;
}
type IBasicLocale = { id: string; name: string };
export type ILocale =
| (IBasicLocale & { base: string })
| (IBasicLocale & { suffix: string });
export type ILocalesConfig = ILocale[];
export interface INavItem {
title: string;
link?: string;
order?: number;
activePath?: string;
[key: string]: any;
}
export interface ISidebarItem {
title: string;
link: string;
order?: number;
frontmatter?: IRouteMeta['frontmatter'];
[key: string]: any;
}
export interface ISidebarGroup {
title?: string;
children: ISidebarItem[];
[key: string]: any;
}
export type SocialTypes =
| 'github'
| 'weibo'
| 'twitter'
| 'x'
| 'gitlab'
| 'facebook'
| 'zhihu'
| 'yuque'
| 'linkedin';
export type INavItems = (INavItem & { children?: INavItem[] })[];
export type IUserNavItem = Pick<INavItem, 'title' | 'link' | 'activePath'>;
export type IUserNavMode = 'override' | 'append' | 'prepend';
export type IUserNavItems = (IUserNavItem & { children?: IUserNavItem[] })[];
export type IUserNavValue = IUserNavItems | Record<string, IUserNavItems>;
export type NavWithMode<T extends IUserNavValue> = {
mode: IUserNavMode;
value: T;
};
export interface IThemeConfig {
name?: string;
logo?: string | false;
nav?: IUserNavValue | NavWithMode<IUserNavValue>;
sidebar?: Record<string, ISidebarGroup[]>;
footer?: string | false;
showLineNum?: boolean;
prefersColor: {
default: 'light' | 'dark' | 'auto';
switch: boolean;
};
nprogress?: boolean;
socialLinks?: { [key in SocialTypes]?: string };
editLink?: boolean | string;
sourceLink?: boolean | string;
lastUpdated?: boolean;
[key: string]: any;
}
export type IRoutesById = Record<
string,
{
path?: string;
parentId?: string;
meta?: IRouteMeta;
id: string;
redirect?: string;
[key: string]: any;
}
>;
export type AgnosticComponentModule = { default?: any; [key: string]: any };
export type AgnosticComponentType =
| Promise<AgnosticComponentModule>
| AgnosticComponentModule;
export type IDemoCompileFn = (
code: string,
opts: { filename: string },
) => Promise<string>;
export type IDemoCancelableFn = (
canvas: HTMLElement,
component: AgnosticComponentModule,
) => (() => void) | Promise<() => void>;
export type IDemoPreflightFn = (
component: AgnosticComponentModule,
) => Promise<void>;
export type IDemoData = {
component: ReactComponentType | AgnosticComponentType;
asset: IPreviewerProps['asset'];
routeId: string;
context?: Record<string, unknown>;
renderOpts?: {
compile?: IDemoCompileFn;
renderer?: IDemoCancelableFn;
preflight?: IDemoPreflightFn;
};
};
export interface ISiteContext {
pkg: Record<string, any>;
historyType: 'browser' | 'hash' | 'memory';
entryExports: Record<string, any>;
demos: Record<string, IDemoData>;
components: Record<string, AtomComponentAsset>;
locales: ILocalesConfig;
themeConfig: IThemeConfig;
hostname?: string;
loading: boolean;
setLoading: (status: boolean) => void;
_2_level_nav_available: boolean;
[key: string]: any;
}
export interface IDumiDemoProps {
demo: { id: string; inline?: boolean };
previewerProps: Omit<IPreviewerProps, 'asset' | 'children'>;
}
export interface IDumiDemoGridProps {
items: IDumiDemoProps[];
demoRender?: (item: IDumiDemoProps) => ReactNode;
}
export type IColorValue = 'light' | 'dark';
export type IPrefersColorValue = IColorValue | 'auto';
export interface IHighlightText {
highlighted?: boolean;
text: string;
}
export interface ISearchNavResult {
title?: string;
priority: number;
hints: {
type: 'page' | 'title' | 'demo' | 'content';
link: string;
priority: number;
pageTitle: string;
highlightTitleTexts: IHighlightText[];
highlightTexts: IHighlightText[];
}[];
}
export type ISearchResult = ISearchNavResult[];
export interface IAtomRendererProps {
type: AtomAsset['type'];
value: ExamplePresetAsset['value'];
processor?: (
entity: TypeMap['element'] | TypeMap['function'] | TypeMap['dom'],
entryExports: Record<string, any>,
) => any;
}
export declare const AtomRenderer: FC<IAtomRendererProps>;
export declare const DumiDemo: FC<IDumiDemoProps>;
export declare const DumiDemoGrid: FC<IDumiDemoGridProps>;
export declare const DumiPage: FC<{ children: ReactNode }>;
export declare const useSiteData: () => ISiteContext;
export declare const useAtomAssets: () => {
components: Record<string, AtomComponentAsset>;
};
export declare const useLiveDemo: (
id: string,
opts?: { containerRef?: RefObject<HTMLElement>; iframe?: boolean },
) => {
node: ReactNode;
loading: boolean;
error: Error | null;
setSource: (source: Record<string, string>) => void;
};
export declare const useLocale: () => ILocale;
export declare const useNavData: () => INavItems;
export declare const usePrefersColor: () => [
IColorValue,
IPrefersColorValue,
(value: IPrefersColorValue) => void,
];
export declare const useMatchedRoute: () => IRoutesById[string];
export declare const useRouteMeta: () => IRouteMeta;
export declare const useFullSidebarData: () => NonNullable<
IThemeConfig['sidebar']
>;
export declare const useSidebarData: () => ISidebarGroup[];
export declare const useSiteSearch: () => {
keywords: string;
setKeywords: (keywords: string) => void;
result: ISearchResult;
loading: boolean;
load: () => Promise<void>;
};
export declare const useTabMeta: () =>
| NonNullable<IRouteMeta['tabs']>[number]['meta']
| undefined;
export declare const openCodeSandbox: (data: IPreviewerProps) => void;
export declare const openStackBlitz: (data: IPreviewerProps) => void;
export declare function useDemo(id: string): IDemoData | undefined;
export declare function getFullDemos(): Promise<Record<string, IDemoData>>;
export declare function getRouteMetaById<T extends { syncOnly?: boolean }>(
id: string,
opts?: T,
): T extends { syncOnly: true } ? IRouteMeta | undefined : Promise<IRouteMeta>;
export declare function getFullRoutesMeta(): Promise<
Record<string, IRouteMeta>
>;