@prismai/prism-ladle
Version:
Enhanced component development environment based on Ladle, with multi-project support
310 lines (283 loc) • 6.33 kB
text/typescript
import { PrismTheme } from "prism-react-renderer";
import type { UserConfig as ViteUserConfig } from "vite";
type RecursivePartial<T> = {
[P in keyof T]?: RecursivePartial<T[P]>;
};
export type ActionState = any[];
export type StoryOrder = string[] | ((stories: string[]) => string[]);
export enum ModeState {
Full = "full",
Preview = "preview",
}
export enum ThemeState {
Light = "light",
Dark = "dark",
Auto = "auto",
}
export enum ControlType {
Boolean = "boolean",
String = "string",
Number = "number",
Complex = "complex",
Function = "function",
Radio = "radio",
InlineRadio = "inline-radio",
Select = "select",
MultiSelect = "multi-select",
Check = "check",
InlineCheck = "inline-check",
Action = "action",
Range = "range",
Background = "background",
}
export type ControlState = {
[key: string]: {
name?: string;
description?: string;
defaultValue?: any;
max?: number;
min?: number;
step?: number;
options?: string[];
value: any;
type?: ControlType;
labels?: { [key: string]: string };
};
};
export enum ActionType {
UpdateAll = "update-all",
UpdateMode = "update-mode",
UpdateAction = "update-action",
UpdateRtl = "update-rtl",
UpdateSource = "update-source",
UpdateStory = "update-story",
UpdateTheme = "update-theme",
UpdateWidth = "update-width",
UpdateControl = "update-control",
UpdateControlIntialized = "update-control-initialized",
UpdateHotkeys = "update-hotkeys",
}
export type GlobalAction =
| {
type: ActionType.UpdateAll;
value: GlobalState;
}
| {
type: ActionType.UpdateMode;
value: ModeState;
}
| {
type: ActionType.UpdateAction;
clear: boolean;
value: any;
}
| {
type: ActionType.UpdateRtl;
value: boolean;
}
| {
type: ActionType.UpdateSource;
value: boolean;
}
| {
type: ActionType.UpdateWidth;
value: number;
}
| {
type: ActionType.UpdateStory;
value: string;
}
| {
type: ActionType.UpdateTheme;
value: ThemeState;
}
| {
type: ActionType.UpdateHotkeys;
value: boolean;
}
| {
type: ActionType.UpdateControlIntialized;
value: boolean;
}
| {
type: ActionType.UpdateControl;
value: ControlState;
};
export type GlobalState = {
mode: ModeState;
theme: ThemeState;
action: ActionState;
story: string;
rtl: boolean;
source: boolean;
control: ControlState;
controlInitialized: boolean;
width: number;
hotkeys: boolean;
};
export type UpdateStory = (story: string) => void;
export type AddonProps = {
dispatch: React.Dispatch<GlobalAction>;
globalState: GlobalState;
};
export type StoryProps = {
dispatch: React.Dispatch<GlobalAction>;
globalState: GlobalState;
parameters: { [key: string]: any };
args: { [key: string]: any };
argTypes: { [key: string]: any };
};
export type StoryDecorator<P = {}> = (
Story: React.FC<Partial<P>>,
context: StoryProps,
) => React.ReactElement;
export type StoryTreeItem = {
id: string;
subId: string;
name: string;
isLinkable: boolean;
isExpanded: boolean;
isFocused: boolean;
children: StoryTree;
};
export type StoryTree = StoryTreeItem[];
export type GeneratedStories = {
[key: string]: {
component: React.FC;
};
};
export type CLIParams = Partial<Config> & {
theme?: ThemeState;
config?: string;
};
export type PluginOptions = {
storyGlob: string;
configFolder: string;
};
export type Config = {
stories: string;
defaultStory: string;
storyOrder: StoryOrder;
appendToHead: string;
disableHttp2: boolean;
viteConfig?: string;
host?: string;
port: number;
previewHost?: string;
previewPort: number;
hmrHost?: string;
hmrPort?: number;
outDir: string;
base?: string;
mode?: string;
expandStoryTree?: boolean;
noWatch: boolean;
hotkeys: {
fullscreen: string[];
search: string[];
nextStory: string[];
previousStory: string[];
nextComponent: string[];
previousComponent: string[];
control: string[];
width: string[];
rtl: string[];
a11y: string[];
source: string[];
darkMode: string[];
};
onDevServerStart: (serverUrl: string) => void;
i18n: { [key: string]: string };
addons: {
control: {
enabled: boolean;
defaultState: ControlState;
};
theme: {
enabled: boolean;
defaultState: ThemeState;
};
mode: {
enabled: boolean;
defaultState: ModeState;
};
action: {
enabled: boolean;
defaultState: ActionState;
};
rtl: {
enabled: boolean;
defaultState: boolean;
};
source: {
enabled: boolean;
defaultState: boolean;
themeLight: PrismTheme;
themeDark: PrismTheme;
};
a11y: {
enabled: boolean;
};
msw: {
enabled: boolean;
};
ladle: {
enabled: boolean;
};
width: {
enabled: boolean;
options: { [key: string]: number };
defaultState: number;
};
};
};
export type UserConfig = RecursivePartial<Config>;
export type StoryEntry = {
storyId: string;
componentName: string;
namedExport: string;
locStart: number;
locEnd: number;
};
export type ParsedStoriesResult = {
entry: string;
stories: StoryEntry[];
exportDefaultProps: {
title?: string;
meta: any;
};
namedExportToMeta: { [key: string]: any };
namedExportToStoryName: { [key: string]: string };
storyParams: { [key: string]: { title?: string; meta: any } };
fileId: string;
storySource: string;
};
export type GetUserViteConfig = {
userViteConfig: ViteUserConfig;
hasReactPlugin: boolean;
hasReactSwcPlugin: boolean;
hasTSConfigPathPlugin: boolean;
};
export type EntryData = {
[key: string]: ParsedStoriesResult;
};
export type MetaJson<M extends KnownMeta = KnownMeta> = {
about: {
homepage: string;
github: string;
version: number;
};
stories: { [key: string]: MetaJsonStory<M> };
};
export type MetaJsonStory<M extends KnownMeta = KnownMeta> = {
name: string;
levels: string[];
meta: M;
locStart: number;
locEnd: number;
};
export interface KnownMeta {
iframed?: boolean;
width?: string | number | "xsmall" | "small" | "medium" | "large";
mockDate?: string;
}