solid-markdown
Version:
Markdown renderer for solid-js
111 lines (106 loc) • 3.99 kB
TypeScript
import { Component, JSX } from 'solid-js';
import { PluggableList } from 'unified';
import { Position } from 'unist';
import { ElementContent, Text, Element, Root } from 'hast';
interface SolidMarkdownProps {
node: Element;
children: Component[];
/**
* Passed when `options.rawSourcePos` is given
*/
sourcePosition?: Position;
/**
* Passed when `options.includeElementIndex` is given
*/
index?: number;
/**
* Passed when `options.includeElementIndex` is given
*/
siblingCount?: number;
}
type NormalComponents = {
[TagName in keyof JSX.IntrinsicElements]: keyof JSX.IntrinsicElements | Component<JSX.IntrinsicElements[TagName] & SolidMarkdownProps>;
};
type TransformLink = (href: string, children: ElementContent[], title?: string) => string;
type TransformImage = (src: string, alt: string, title?: string) => string;
type TransformLinkTargetType = "_self" | "_blank" | "_parent" | "_top" | (string & {});
type TransformLinkTarget = (href: string, children: ElementContent[], title?: string) => TransformLinkTargetType | undefined;
type SolidMarkdownNames = keyof JSX.IntrinsicElements;
type CodeComponent = Component<JSX.IntrinsicElements["code"] & SolidMarkdownProps & {
inline?: boolean;
}>;
type HeadingComponent = Component<JSX.IntrinsicElements["h1"] & SolidMarkdownProps & {
level: number;
}>;
type LiComponent = Component<JSX.IntrinsicElements["li"] & SolidMarkdownProps & {
checked: boolean | null;
index: number;
ordered: boolean;
}>;
type OrderedListComponent = Component<JSX.IntrinsicElements["ol"] & SolidMarkdownProps & {
depth: number;
ordered: true;
}>;
type TableCellComponent = Component<JSX.IntrinsicElements["table"] & SolidMarkdownProps & {
style?: Record<string, unknown>;
isHeader: boolean;
}>;
type TableRowComponent = Component<JSX.IntrinsicElements["tr"] & SolidMarkdownProps & {
isHeader: boolean;
}>;
type UnorderedListComponent = Component<JSX.IntrinsicElements["ul"] & SolidMarkdownProps & {
depth: number;
ordered: false;
}>;
type SpecialComponents = {
code: CodeComponent | SolidMarkdownNames;
h1: HeadingComponent | SolidMarkdownNames;
h2: HeadingComponent | SolidMarkdownNames;
h3: HeadingComponent | SolidMarkdownNames;
h4: HeadingComponent | SolidMarkdownNames;
h5: HeadingComponent | SolidMarkdownNames;
h6: HeadingComponent | SolidMarkdownNames;
li: LiComponent | SolidMarkdownNames;
ol: OrderedListComponent | SolidMarkdownNames;
td: TableCellComponent | SolidMarkdownNames;
th: TableCellComponent | SolidMarkdownNames;
tr: TableRowComponent | SolidMarkdownNames;
ul: UnorderedListComponent | SolidMarkdownNames;
};
type Components = Omit<Partial<Omit<NormalComponents, keyof SpecialComponents>> & Partial<SpecialComponents>, "text"> & {
text?: Component<{
node: Text;
}>;
};
type Options$1 = {
sourcePos: boolean;
rawSourcePos: boolean;
skipHtml: boolean;
includeElementIndex: boolean;
transformLinkUri: null | false | TransformLink;
transformImageUri?: TransformImage;
linkTarget: TransformLinkTargetType | TransformLinkTarget;
components: Components;
};
type AllowElement = (element: Element, index: number, parent: Element | Root) => boolean | undefined;
type Options = {
allowedElements?: string[];
disallowedElements?: string[];
allowElement?: AllowElement;
unwrapDisallowed: boolean;
};
type CoreOptions = {
children: string;
renderingStrategy: "memo" | "reconcile";
};
type PluginOptions = {
remarkPlugins: PluggableList;
rehypePlugins: PluggableList;
};
type LayoutOptions = {
class: string;
};
type SolidMarkdownOptions = CoreOptions & PluginOptions & LayoutOptions & Options & Options$1;
type SolidMarkdownComponents = Options$1["components"];
declare const SolidMarkdown: Component<Partial<SolidMarkdownOptions>>;
export { SolidMarkdown, SolidMarkdownComponents, SolidMarkdownOptions };