@apolitical/component-library 4.1.13 → 4.2.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/constants/discussion.d.ts +1 -0
- package/constants/index.d.ts +2 -0
- package/constants/regex.d.ts +2 -0
- package/discussion/components/form/form.d.ts +9 -2
- package/discussion/components/post/post.d.ts +11 -2
- package/discussion/components/post/post.helpers.d.ts +2 -1
- package/discussion/components/post/post.mock.d.ts +3 -0
- package/discussion/feeds/activities-feed/activities-feed.d.ts +3 -0
- package/discussion/feeds/replies-feed/nested-replies-feed/nested-replies-feed.d.ts +4 -1
- package/discussion/feeds/replies-feed/replies-feed.d.ts +3 -0
- package/discussion/index.d.ts +1 -0
- package/discussion/sections/activity-section/activity-section.d.ts +2 -0
- package/form/components/rich-text-editor/components/context/context.d.ts +3 -1
- package/form/components/rich-text-editor/components/editor/index.d.ts +1 -0
- package/form/components/rich-text-editor/components/editor/mention-popover/index.d.ts +1 -0
- package/form/components/rich-text-editor/components/editor/mention-popover/mention-popover.d.ts +2 -0
- package/form/components/rich-text-editor/helpers/ast-types/ast-types.d.ts +4 -1
- package/form/components/rich-text-editor/helpers/index.d.ts +1 -0
- package/form/components/rich-text-editor/helpers/mentions/index.d.ts +2 -0
- package/form/components/rich-text-editor/helpers/mentions/insert-mention.d.ts +5 -0
- package/form/components/rich-text-editor/helpers/mentions/should-show-mentions-popover.d.ts +5 -0
- package/form/components/rich-text-editor/helpers/transform/transform.d.ts +3 -3
- package/form/components/rich-text-editor/index.d.ts +1 -0
- package/form/components/rich-text-editor/plugins/index.d.ts +1 -0
- package/form/components/rich-text-editor/plugins/with-mentions/index.d.ts +1 -0
- package/form/components/rich-text-editor/plugins/with-mentions/with-mentions.d.ts +6 -0
- package/form/components/rich-text-editor/rich-text-editor.const.d.ts +11 -0
- package/form/components/rich-text-editor/rich-text-editor.d.ts +10 -2
- package/form/components/rich-text-editor/rich-text-editor.types.d.ts +28 -2
- package/general/index.d.ts +1 -0
- package/general/popover/index.d.ts +1 -0
- package/general/popover/popover.d.ts +11 -0
- package/helpers/cases.d.ts +1 -0
- package/helpers/index.d.ts +1 -0
- package/helpers/replace-mention-data.d.ts +9 -0
- package/index.js +51 -51
- package/index.mjs +7522 -7236
- package/package.json +1 -1
- package/style.css +1 -1
- package/styles/variables/colors/theme/_discussion.scss +1 -0
- package/styles/variables/colors/theme/_form.scss +1 -0
- package/styles/variables/colors/theme/_general.scss +3 -0
- package/user/member/member.d.ts +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GET_STREAM_USER_PREFIX = "SU:";
|
package/constants/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type ListMembers } from '../../../form';
|
|
2
|
+
import { DiscussionCreateContentFunction, IDiscussionContent, IMentions } from './../../discussion';
|
|
2
3
|
export interface IDiscussionForm {
|
|
3
4
|
/** A unique ID for the form */
|
|
4
5
|
id?: string;
|
|
@@ -38,16 +39,22 @@ export interface IDiscussionForm {
|
|
|
38
39
|
handleSaveEdit?: ((arg?: string) => Promise<void>) | (() => void);
|
|
39
40
|
handleCancel?: () => void;
|
|
40
41
|
callback?: (args: void) => void;
|
|
42
|
+
listMembers?: ListMembers;
|
|
41
43
|
props?: {
|
|
42
44
|
create: {
|
|
43
45
|
projectNames: ['questions-answers'];
|
|
44
46
|
};
|
|
45
47
|
};
|
|
46
48
|
};
|
|
49
|
+
/** Data to be passed into the rich text editor */
|
|
50
|
+
data?: {
|
|
51
|
+
/** Mentions data */
|
|
52
|
+
mentions?: IMentions;
|
|
53
|
+
};
|
|
47
54
|
/** The context for GTM */
|
|
48
55
|
gtmContext?: string;
|
|
49
56
|
/** The language to use for the text */
|
|
50
57
|
locale?: string;
|
|
51
58
|
}
|
|
52
|
-
declare const Form: ({ id, content, userHasPermissions, meta, placeholder, maxLength, forceShow, functions, gtmContext, }: IDiscussionForm) => import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
declare const Form: ({ id, content, userHasPermissions, meta, placeholder, maxLength, forceShow, functions, data, gtmContext, }: IDiscussionForm) => import("react/jsx-runtime").JSX.Element;
|
|
53
60
|
export default Form;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { type ListMembers } from '../../../form';
|
|
2
3
|
import { DiscussionCreateContentFunction, DiscussionCreateLikeFunction, DiscussionDeleteLikeFunction, IForceHide, IFullDiscussionContent } from '../../discussion';
|
|
4
|
+
interface PostContent extends IFullDiscussionContent {
|
|
5
|
+
/** The post body */
|
|
6
|
+
postBody?: string;
|
|
7
|
+
}
|
|
3
8
|
interface Props {
|
|
4
9
|
/** The element that will render around the content */
|
|
5
10
|
element?: 'li' | 'div' | 'section' | 'article';
|
|
6
11
|
/** Information about the content being posted */
|
|
7
|
-
content:
|
|
12
|
+
content: PostContent;
|
|
8
13
|
/** If the user has permission to interact with the post box and content, e.g. if they're a member of the community */
|
|
9
14
|
userHasPermissions?: boolean;
|
|
10
15
|
/** If the post is still loading */
|
|
@@ -33,6 +38,10 @@ interface Props {
|
|
|
33
38
|
/** Open comments on a post */
|
|
34
39
|
openComments?: () => void;
|
|
35
40
|
};
|
|
41
|
+
mentions: {
|
|
42
|
+
/** Get data to hydrate mentions */
|
|
43
|
+
listMembers: ListMembers;
|
|
44
|
+
};
|
|
36
45
|
};
|
|
37
46
|
/** Optional `href`s for the card to link to */
|
|
38
47
|
links?: {
|
|
@@ -50,5 +59,5 @@ interface Props {
|
|
|
50
59
|
/** If the post content is truncated */
|
|
51
60
|
isTruncated?: boolean;
|
|
52
61
|
}
|
|
53
|
-
declare const Post: ({ element, content, userHasPermissions, isLoading, originalAuthorId, forceHide, functions: { content: { createContent, deleteContent, updateContent }, likes: { createLike, deleteLike }, comments: { openComments }, }, links, className, gtmContext, children, isTruncated, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
declare const Post: ({ element, content, userHasPermissions, isLoading, originalAuthorId, forceHide, functions: { content: { createContent, deleteContent, updateContent }, likes: { createLike, deleteLike }, comments: { openComments }, mentions: { listMembers }, }, links, className, gtmContext, children, isTruncated, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
54
63
|
export default Post;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { IMentions } from './../../discussion';
|
|
2
|
-
|
|
2
|
+
import { ListMembers } from '../../../form';
|
|
3
|
+
export declare const getPostBody: (body: string, isTruncated: boolean, mentions?: IMentions, listMembers?: ListMembers) => Promise<string>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import type { IMentionsFns } from '../../../discussion/discussion.d';
|
|
2
3
|
import type { IQueryFns } from './cache';
|
|
3
4
|
interface Props {
|
|
4
5
|
/** The base path, used for slugs */
|
|
@@ -11,6 +12,8 @@ interface Props {
|
|
|
11
12
|
functions: {
|
|
12
13
|
/** Query functions for the activities */
|
|
13
14
|
activities: IQueryFns;
|
|
15
|
+
/** Query functions for the mentions */
|
|
16
|
+
mentions: IMentionsFns;
|
|
14
17
|
/** Function to join the community */
|
|
15
18
|
join: () => Promise<void>;
|
|
16
19
|
/** Function to leave the community */
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import type { IMentionsFns } from '../../../../discussion/discussion.d';
|
|
2
3
|
import type { IQueryFns } from './../cache';
|
|
4
|
+
interface NestedRepliesFunctions extends IQueryFns, IMentionsFns {
|
|
5
|
+
}
|
|
3
6
|
interface Props {
|
|
4
7
|
/** The base path, used for slugs */
|
|
5
8
|
basePath: string;
|
|
@@ -12,7 +15,7 @@ interface Props {
|
|
|
12
15
|
/** Whether the user is a member of the community */
|
|
13
16
|
isMember: boolean;
|
|
14
17
|
/** Functions for the replies query */
|
|
15
|
-
functions:
|
|
18
|
+
functions: NestedRepliesFunctions;
|
|
16
19
|
}
|
|
17
20
|
declare const NestedRepliesFeed: React.FC<Props>;
|
|
18
21
|
export default NestedRepliesFeed;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import type { IMentionsFns } from './../../discussion';
|
|
2
3
|
import type { IQueryFns } from './cache';
|
|
3
4
|
interface Props {
|
|
4
5
|
/** The base path, used for slugs */
|
|
@@ -13,6 +14,8 @@ interface Props {
|
|
|
13
14
|
functions: {
|
|
14
15
|
/** Query functions for the replies */
|
|
15
16
|
reactions: IQueryFns;
|
|
17
|
+
/** Query functions for the mentions */
|
|
18
|
+
mentions: IMentionsFns;
|
|
16
19
|
/** Function to join the community */
|
|
17
20
|
join: () => Promise<void>;
|
|
18
21
|
/** Function to leave the community */
|
package/discussion/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { IRepliesFeedQueryFns } from '../../../discussion/feeds';
|
|
3
|
+
import type { IMentionsFns } from './../../discussion.d';
|
|
3
4
|
import type { IQueryFns } from './cache';
|
|
4
5
|
interface IActivitySectionQueryFns extends IQueryFns {
|
|
5
6
|
remove: () => Promise<void>;
|
|
@@ -12,6 +13,7 @@ interface Props {
|
|
|
12
13
|
functions: {
|
|
13
14
|
activities: IActivitySectionQueryFns;
|
|
14
15
|
reactions: IRepliesFeedQueryFns;
|
|
16
|
+
mentions: IMentionsFns;
|
|
15
17
|
join: () => Promise<void>;
|
|
16
18
|
leave: () => Promise<void>;
|
|
17
19
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Dispatch } from 'react';
|
|
2
2
|
import { Point } from 'slate';
|
|
3
|
-
import { ReportError } from './../../rich-text-editor.types';
|
|
3
|
+
import { ReportError, IMentionPopOver } from './../../rich-text-editor.types';
|
|
4
4
|
declare const RichTextEditorContext: import("react").Context<{
|
|
5
5
|
/** The id of the editor */
|
|
6
6
|
id: string;
|
|
@@ -12,6 +12,8 @@ declare const RichTextEditorContext: import("react").Context<{
|
|
|
12
12
|
openTooltip: string | null;
|
|
13
13
|
/** Whether the link editor is open */
|
|
14
14
|
showLinkEditor: boolean;
|
|
15
|
+
/** The data for the mention popover, including if it's showing, the selected user for the popover, and the possible users */
|
|
16
|
+
mentionPopover: IMentionPopOver;
|
|
15
17
|
/** The last anchor point (used for Slate to know where the cursor is) */
|
|
16
18
|
lastAnchor: Point | null;
|
|
17
19
|
/** The function to update the state */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MentionPopover } from './mention-popover';
|
|
@@ -7,6 +7,7 @@ export interface NodeTypes {
|
|
|
7
7
|
[Formatting.ul]: string;
|
|
8
8
|
[Formatting.ol]: string;
|
|
9
9
|
[Formatting.li]: string;
|
|
10
|
+
[Formatting.mention]: string;
|
|
10
11
|
[Formatting.heading]: {
|
|
11
12
|
1: string;
|
|
12
13
|
2: string;
|
|
@@ -28,6 +29,7 @@ export declare enum MdastNodes {
|
|
|
28
29
|
list = "list",
|
|
29
30
|
listItem = "listItem",
|
|
30
31
|
link = "link",
|
|
32
|
+
mention = "mention",
|
|
31
33
|
image = "image",
|
|
32
34
|
blockquote = "blockquote",
|
|
33
35
|
code = "code",
|
|
@@ -39,7 +41,7 @@ export declare enum MdastNodes {
|
|
|
39
41
|
thematicBreak = "thematicBreak",
|
|
40
42
|
text = "text"
|
|
41
43
|
}
|
|
42
|
-
export type MdastNodeType = MdastNodes.paragraph | MdastNodes.heading | MdastNodes.list | MdastNodes.listItem | MdastNodes.link | MdastNodes.image | MdastNodes.blockquote | MdastNodes.code | MdastNodes.html | MdastNodes.emphasis | MdastNodes.strong | MdastNodes.delete | MdastNodes.inlineCode | MdastNodes.thematicBreak | MdastNodes.text;
|
|
44
|
+
export type MdastNodeType = MdastNodes.paragraph | MdastNodes.heading | MdastNodes.list | MdastNodes.listItem | MdastNodes.link | MdastNodes.mention | MdastNodes.image | MdastNodes.blockquote | MdastNodes.code | MdastNodes.html | MdastNodes.emphasis | MdastNodes.strong | MdastNodes.delete | MdastNodes.inlineCode | MdastNodes.thematicBreak | MdastNodes.text;
|
|
43
45
|
export declare const defaultNodeTypes: NodeTypes;
|
|
44
46
|
export interface LeafType {
|
|
45
47
|
text: string;
|
|
@@ -53,6 +55,7 @@ export interface BlockType {
|
|
|
53
55
|
type: string;
|
|
54
56
|
parentType?: string;
|
|
55
57
|
link?: string;
|
|
58
|
+
mention?: string;
|
|
56
59
|
caption?: string;
|
|
57
60
|
language?: string;
|
|
58
61
|
break?: boolean;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Dispatch } from 'react';
|
|
2
|
+
import { BaseEditor } from 'slate';
|
|
3
|
+
import { IMentionPopOver } from './../../rich-text-editor.types';
|
|
4
|
+
declare const insertMention: (editor: BaseEditor, mentionPopover: IMentionPopOver, dispatch: Dispatch<any>) => void;
|
|
5
|
+
export default insertMention;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Dispatch } from 'react';
|
|
2
|
+
import { BaseEditor } from 'slate';
|
|
3
|
+
import { type ListMembers } from './../../rich-text-editor.types';
|
|
4
|
+
declare const shouldShowMentionsPopover: (editor: BaseEditor, isShowing: boolean, listMembers: ListMembers | undefined, dispatch: Dispatch<any>) => Promise<void>;
|
|
5
|
+
export default shouldShowMentionsPopover;
|
|
@@ -7,12 +7,12 @@ export default function transform<T extends InputNodeTypes>(node: MdastNode, opt
|
|
|
7
7
|
}[];
|
|
8
8
|
} | {
|
|
9
9
|
value?: string | undefined;
|
|
10
|
-
position?: any;
|
|
11
|
-
url?: string | undefined;
|
|
12
10
|
alt?: string | undefined;
|
|
11
|
+
url?: string | undefined;
|
|
12
|
+
position?: any;
|
|
13
13
|
checked?: any;
|
|
14
14
|
ordered?: boolean | undefined;
|
|
15
|
-
depth?: 1 | 2 | 3 | 4 |
|
|
15
|
+
depth?: 1 | 2 | 3 | 4 | 6 | 5 | undefined;
|
|
16
16
|
lang?: string | undefined;
|
|
17
17
|
spread?: any;
|
|
18
18
|
indent?: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as withMentions } from './with-mentions';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseEditor } from 'slate';
|
|
2
|
+
import { HistoryEditor } from 'slate-history';
|
|
3
|
+
import { ReactEditor } from 'slate-react';
|
|
4
|
+
import { ReportError } from './../../rich-text-editor.types';
|
|
5
|
+
declare const withMentions: (editor: BaseEditor & ReactEditor & HistoryEditor, reportError: ReportError) => BaseEditor & ReactEditor & HistoryEditor;
|
|
6
|
+
export default withMentions;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IMentions } from '../../../discussion/discussion';
|
|
2
|
+
import { ListMembers, ReportError } from './rich-text-editor.types';
|
|
2
3
|
interface Props {
|
|
3
4
|
/** The id of the rich text editor */
|
|
4
5
|
id?: string;
|
|
@@ -10,6 +11,8 @@ interface Props {
|
|
|
10
11
|
maxLength?: number;
|
|
11
12
|
/** Optional functions */
|
|
12
13
|
functions?: {
|
|
14
|
+
/** An optional function to get a filtered list of members when the user starts typing a mention */
|
|
15
|
+
listMembers?: ListMembers;
|
|
13
16
|
/** An optional event handler, called when the rich text editor is changed */
|
|
14
17
|
onChange?: (value: string) => void;
|
|
15
18
|
/** An optional event handler, called when the rich text editor reports an error */
|
|
@@ -21,6 +24,11 @@ interface Props {
|
|
|
21
24
|
'aria-invalid'?: boolean;
|
|
22
25
|
/** Optional aria error message */
|
|
23
26
|
'aria-errormessage'?: string;
|
|
27
|
+
/** Optional data for the editor */
|
|
28
|
+
data?: {
|
|
29
|
+
/** Optional mentions */
|
|
30
|
+
mentions?: IMentions;
|
|
31
|
+
};
|
|
24
32
|
}
|
|
25
|
-
declare const RichTextEditor: ({ id, value, placeholder, maxLength, functions, autoFocus, ...props }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
33
|
+
declare const RichTextEditor: ({ id, value, placeholder, maxLength, functions, autoFocus, data, ...props }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
26
34
|
export default RichTextEditor;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { BaseElement, BaseText, Descendant } from 'slate';
|
|
1
|
+
import { BaseElement, BaseText, Descendant, Range } from 'slate';
|
|
2
|
+
import type { MemberDetailsProps } from '../../../user';
|
|
2
3
|
export declare enum Formatting {
|
|
3
4
|
blockquote = "block_quote",
|
|
4
5
|
bold = "bold",
|
|
@@ -10,6 +11,7 @@ export declare enum Formatting {
|
|
|
10
11
|
italic = "italic",
|
|
11
12
|
li = "list_item",
|
|
12
13
|
link = "link",
|
|
14
|
+
mention = "mention",
|
|
13
15
|
ol = "ol_list",
|
|
14
16
|
paragraph = "paragraph",
|
|
15
17
|
ul = "ul_list",
|
|
@@ -26,10 +28,15 @@ export interface BaseProps {
|
|
|
26
28
|
className?: string;
|
|
27
29
|
[key: string]: unknown;
|
|
28
30
|
}
|
|
29
|
-
export type BlockOptionType = Formatting.blockquote | Formatting.link | Formatting.li | Formatting.ol | Formatting.ul | Formatting.paragraph | Formatting.span;
|
|
31
|
+
export type BlockOptionType = Formatting.blockquote | Formatting.link | Formatting.li | Formatting.mention | Formatting.ol | Formatting.ul | Formatting.paragraph | Formatting.span;
|
|
30
32
|
export interface TypeElement extends BaseElement {
|
|
31
33
|
type: BlockOptionType;
|
|
32
34
|
}
|
|
35
|
+
export interface MentionElement extends BaseElement {
|
|
36
|
+
type: Formatting.mention;
|
|
37
|
+
id: string;
|
|
38
|
+
name?: string;
|
|
39
|
+
}
|
|
33
40
|
export type MarkOptionType = Formatting.bold | Formatting.italic | Formatting.strikethrough;
|
|
34
41
|
export interface TypeText extends BaseText {
|
|
35
42
|
[Formatting.bold]?: boolean;
|
|
@@ -46,3 +53,22 @@ export type LinkElement = {
|
|
|
46
53
|
children: Descendant[];
|
|
47
54
|
};
|
|
48
55
|
export type ReportError = (error: string) => void;
|
|
56
|
+
export interface IMention {
|
|
57
|
+
id: string;
|
|
58
|
+
creator?: boolean;
|
|
59
|
+
role?: string;
|
|
60
|
+
createdAt?: string;
|
|
61
|
+
updatedAt?: string;
|
|
62
|
+
userId?: string;
|
|
63
|
+
user: MemberDetailsProps;
|
|
64
|
+
}
|
|
65
|
+
export type ListMembers = ({ id, name, }: {
|
|
66
|
+
id?: string;
|
|
67
|
+
name?: string;
|
|
68
|
+
}) => Promise<IMention[]>;
|
|
69
|
+
export interface IMentionPopOver {
|
|
70
|
+
show: boolean;
|
|
71
|
+
selectedUser: number;
|
|
72
|
+
possibleUsers: IMention[];
|
|
73
|
+
position: Range | null;
|
|
74
|
+
}
|
package/general/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Popover } from './popover';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
/** Additional className */
|
|
4
|
+
className?: string;
|
|
5
|
+
/** The content of the popover */
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/** Optional keydown event */
|
|
8
|
+
onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const Popover: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLElement | null>>;
|
|
11
|
+
export default Popover;
|
package/helpers/cases.d.ts
CHANGED
package/helpers/index.d.ts
CHANGED
|
@@ -9,5 +9,6 @@ export * from './intl';
|
|
|
9
9
|
export * from './numbers';
|
|
10
10
|
export { default as passPropsToChildren } from './pass-props-to-children';
|
|
11
11
|
export * from './prerender';
|
|
12
|
+
export { default as replaceMentionData } from './replace-mention-data';
|
|
12
13
|
export * from './urls';
|
|
13
14
|
export * from './validation';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IMentions } from '../discussion';
|
|
2
|
+
import { ListMembers } from '../form';
|
|
3
|
+
declare const replaceMentionData: ({ text, template, mentions, listMembers, }: {
|
|
4
|
+
text: string;
|
|
5
|
+
template: string;
|
|
6
|
+
mentions?: IMentions | undefined;
|
|
7
|
+
listMembers: ListMembers;
|
|
8
|
+
}) => Promise<string>;
|
|
9
|
+
export default replaceMentionData;
|