@atlaskit/renderer
Version:
Renderer component
159 lines (158 loc) • 6.07 kB
TypeScript
import type { GetPMNodeHeight } from '@atlaskit/editor-common/extensibility';
import type { Fragment, Mark, Node } from '@atlaskit/editor-prosemirror/model';
import type { AnalyticsEventPayload } from '../analytics/events';
import type { Serializer } from '../serializer';
import type { HeadingAnchorLinksProps, NodeComponentsProps, RendererAppearance, RendererContentMode, StickyHeaderConfig } from '../ui/Renderer/types';
import type { ExtensionHandlers, ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
import type { EventHandlers } from '@atlaskit/editor-common/ui';
import type { EmojiResourceConfig } from '@atlaskit/emoji/resource';
import type { MediaOptions } from '../types/mediaOptions';
import type { SmartLinksOptions } from '../types/smartLinksOptions';
import type { ExtensionViewportSize, RendererContext, TextHighlighter } from './types';
export interface ReactSerializerInit {
allowAltTextOnImages?: boolean;
allowAnnotations?: boolean;
allowColumnSorting?: boolean;
allowCopyToClipboard?: boolean;
allowCustomPanels?: boolean;
allowFixedColumnWidthOption?: boolean;
allowHeadingAnchorLinks?: HeadingAnchorLinksProps;
allowMediaLinking?: boolean;
allowPlaceholderText?: boolean;
allowSelectAllTrap?: boolean;
allowTableAlignment?: boolean;
allowTableResizing?: boolean;
allowWindowedCodeBlock?: boolean;
allowWrapCodeBlock?: boolean;
appearance?: RendererAppearance;
contentMode?: RendererContentMode;
disableActions?: boolean;
disableHeadingIDs?: boolean;
disableTableOverflowShadow?: boolean;
emojiResourceConfig?: EmojiResourceConfig;
eventHandlers?: EventHandlers;
extensionHandlers?: ExtensionHandlers;
extensionViewportSizes?: ExtensionViewportSize[];
fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
getExtensionHeight?: GetPMNodeHeight;
isInsideOfInlineExtension?: boolean;
isPresentational?: boolean;
media?: MediaOptions;
nodeComponents?: NodeComponentsProps;
objectContext?: RendererContext;
onSetLinkTarget?: (url: string) => '_blank' | undefined;
portal?: HTMLElement;
providers?: ProviderFactory;
shouldDisplayExtensionAsInline?: (extensionParams: ExtensionParams<Parameters>) => boolean;
shouldOpenMediaViewer?: boolean;
smartLinks?: SmartLinksOptions;
/**
* Used for to set positions on nodes for annotations.
*
* When not provided defaults to 1.
*/
startPos?: number;
stickyHeaders?: StickyHeaderConfig;
surroundTextNodesWithTextWrapper?: boolean;
textHighlighter?: TextHighlighter;
}
interface ParentInfo {
parentIsIncompleteTask: boolean;
path: Array<Node>;
pos: number;
}
export default class ReactSerializer implements Serializer<JSX.Element> {
private providers?;
private eventHandlers?;
private extensionHandlers?;
private portal?;
private rendererContext?;
private appearance?;
private contentMode?;
private disableHeadingIDs?;
private disableActions?;
private headingIds;
/**
* The reason we have this extra array here is because we need to generate the same unique
* heading id for 2 different nodes: headers and expands (check the implementation of
* `getUniqueHeadingId` for more info).
*
* We will eventually need to refactor the current approach to generate unique ids
* for headers under this ticket -> https://product-fabric.atlassian.net/browse/ED-9668
*/
private expandHeadingIds;
private allowHeadingAnchorLinks?;
private allowColumnSorting?;
private allowCopyToClipboard?;
private allowWrapCodeBlock?;
private allowPlaceholderText?;
private allowCustomPanels?;
private fireAnalyticsEvent?;
private shouldOpenMediaViewer?;
private allowAltTextOnImages?;
private stickyHeaders?;
private allowMediaLinking?;
private initStartPos;
private startPos;
private surroundTextNodesWithTextWrapper;
private media?;
private emojiResourceConfig?;
private smartLinks?;
private extensionViewportSizes?;
private getExtensionHeight?;
private allowAnnotations;
private allowSelectAllTrap?;
private nodeComponents?;
private allowWindowedCodeBlock?;
private isInsideOfInlineExtension?;
private textHighlighter?;
private allowTableAlignment?;
private allowTableResizing?;
private allowFixedColumnWidthOption?;
private isPresentational?;
private disableTableOverflowShadow?;
private standaloneBackgroundColorMarks;
private onSetLinkTarget?;
private shouldDisplayExtensionAsInline?;
private inlinePositions;
constructor(init: ReactSerializerInit);
private resetState;
private getNodeProps;
serializeFragment(fragment: Fragment, props?: any, target?: any, key?: string, parentInfo?: ParentInfo): JSX.Element | null;
private serializeFragmentChild;
private withMediaMarkProps;
private serializeTextWrapper;
private serializeMark;
private renderNode;
private renderMark;
private getTableChildrenProps;
private getTableProps;
private getDateProps;
private getMediaSingleProps;
private getMediaProps;
private getExtensionProps;
private getEmojiProps;
private getEmbedCardProps;
private getBlockCardProps;
private getInlineCardProps;
private getMediaGroupProps;
private getMediaInlineProps;
private getTaskItemProps;
private getHardBreakProps;
private getCodeBlockProps;
private getPanelProps;
private getUnsupportedContentProps;
private getProps;
private headingAnchorSupported;
private getHeadingProps;
private getExpandProps;
private getHeadingId;
private getUniqueHeadingId;
private getAnnotationMarkProps;
private getMarkProps;
private getChildNodes;
static getMarks(node: Node): Mark[];
static buildMarkStructure(content: Node[]): Mark[];
}
export {};