@skbkontur/markdown 1.0.3
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/README.md +11 -0
- package/index.d.ts +5 -0
- package/index.js +3 -0
- package/package.json +105 -0
- package/src/Markdown/Files/Files.logic.d.ts +13 -0
- package/src/Markdown/Files/Files.logic.js +123 -0
- package/src/Markdown/Markdown.d.ts +20 -0
- package/src/Markdown/Markdown.js +148 -0
- package/src/Markdown/Markdown.styled.d.ts +69 -0
- package/src/Markdown/Markdown.styled.js +72 -0
- package/src/Markdown/MarkdownActions.d.ts +18 -0
- package/src/Markdown/MarkdownActions.js +64 -0
- package/src/Markdown/MarkdownEditor.d.ts +13 -0
- package/src/Markdown/MarkdownEditor.js +42 -0
- package/src/Markdown/MarkdownFormat.d.ts +18 -0
- package/src/Markdown/MarkdownFormat.js +19 -0
- package/src/Markdown/MarkdownHelpItems.d.ts +25 -0
- package/src/Markdown/MarkdownHelpItems.js +219 -0
- package/src/Markdown/MarkdownHelpers/MarkdownButton.d.ts +10 -0
- package/src/Markdown/MarkdownHelpers/MarkdownButton.js +10 -0
- package/src/Markdown/MarkdownHelpers/MarkdownCombination.d.ts +8 -0
- package/src/Markdown/MarkdownHelpers/MarkdownCombination.js +15 -0
- package/src/Markdown/MarkdownHelpers/MarkdownFormatButton.d.ts +8 -0
- package/src/Markdown/MarkdownHelpers/MarkdownFormatButton.js +11 -0
- package/src/Markdown/MarkdownHelpers/markdownHelpers.d.ts +10 -0
- package/src/Markdown/MarkdownHelpers/markdownHelpers.js +103 -0
- package/src/Markdown/MarkdownHelpers/markdownMentionHelpers.d.ts +7 -0
- package/src/Markdown/MarkdownHelpers/markdownMentionHelpers.js +44 -0
- package/src/Markdown/MarkdownHelpers/markdownTextareaHelpers.d.ts +11 -0
- package/src/Markdown/MarkdownHelpers/markdownTextareaHelpers.js +86 -0
- package/src/Markdown/MarkdownMention.d.ts +11 -0
- package/src/Markdown/MarkdownMention.js +88 -0
- package/src/Markdown/constants.d.ts +3 -0
- package/src/Markdown/constants.js +3 -0
- package/src/Markdown/types/turndownPluginGfm.d.ts +1 -0
- package/src/Markdown/types.d.ts +39 -0
- package/src/Markdown/types.js +5 -0
- package/src/Markdown/utils/guid.d.ts +6 -0
- package/src/Markdown/utils/guid.js +23 -0
- package/src/Markdown/utils/htmlToMd.d.ts +2 -0
- package/src/Markdown/utils/htmlToMd.js +5 -0
- package/src/Markdown/utils/isMacintosh.d.ts +1 -0
- package/src/Markdown/utils/isMacintosh.js +3 -0
- package/src/Markdown/utils/requestStatus.d.ts +6 -0
- package/src/Markdown/utils/requestStatus.js +7 -0
- package/src/Markdown/utils/saveFile.d.ts +1 -0
- package/src/Markdown/utils/saveFile.js +9 -0
- package/src/MarkdownIcons/AttachLink.d.ts +1 -0
- package/src/MarkdownIcons/AttachLink.js +5 -0
- package/src/MarkdownIcons/AttachPaperclip.d.ts +1 -0
- package/src/MarkdownIcons/AttachPaperclip.js +3 -0
- package/src/MarkdownIcons/CheckedList.d.ts +1 -0
- package/src/MarkdownIcons/CheckedList.js +8 -0
- package/src/MarkdownIcons/Collapse.d.ts +1 -0
- package/src/MarkdownIcons/Collapse.js +4 -0
- package/src/MarkdownIcons/Expand.d.ts +1 -0
- package/src/MarkdownIcons/Expand.js +4 -0
- package/src/MarkdownIcons/EyeOpen.d.ts +1 -0
- package/src/MarkdownIcons/EyeOpen.js +4 -0
- package/src/MarkdownIcons/List.d.ts +1 -0
- package/src/MarkdownIcons/List.js +8 -0
- package/src/MarkdownIcons/MarkdownIcons.styled.d.ts +2 -0
- package/src/MarkdownIcons/MarkdownIcons.styled.js +8 -0
- package/src/MarkdownIcons/NumberedList.d.ts +1 -0
- package/src/MarkdownIcons/NumberedList.js +6 -0
- package/src/MarkdownIcons/Table.d.ts +1 -0
- package/src/MarkdownIcons/Table.js +3 -0
- package/src/MarkdownIcons/ToolPencil.d.ts +1 -0
- package/src/MarkdownIcons/ToolPencil.js +3 -0
- package/src/MarkdownViewer/Helpers/MarkdownImage.d.ts +6 -0
- package/src/MarkdownViewer/Helpers/MarkdownImage.js +6 -0
- package/src/MarkdownViewer/Helpers/MarkdownLink.d.ts +2 -0
- package/src/MarkdownViewer/Helpers/MarkdownLink.js +5 -0
- package/src/MarkdownViewer/MarkdownViewer.d.ts +12 -0
- package/src/MarkdownViewer/MarkdownViewer.js +64 -0
- package/src/MarkdownViewer/MarkdownViewer.styles.d.ts +8 -0
- package/src/MarkdownViewer/MarkdownViewer.styles.js +15 -0
- package/src/MarkdownViewer/index.d.ts +1 -0
- package/src/MarkdownViewer/index.js +1 -0
- package/src/MarkdownViewer/types.d.ts +7 -0
- package/src/MarkdownViewer/types.js +1 -0
- package/src/styles/styled-components.d.ts +5 -0
- package/src/styles/styled-components.js +4 -0
- package/src/styles/theme.d.ts +11 -0
- package/src/styles/theme.js +13 -0
- package/src/styles/types.d.ts +9 -0
- package/src/styles/types.js +1 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Checkbox } from '@skbkontur/react-ui';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import ReactMarkdown from 'react-markdown';
|
|
4
|
+
import rehypeRaw from 'rehype-raw';
|
|
5
|
+
import remarkBreaks from 'remark-breaks';
|
|
6
|
+
import gfm from 'remark-gfm';
|
|
7
|
+
import { MarkdownImage } from './Helpers/MarkdownImage';
|
|
8
|
+
import { MarkdownLink } from './Helpers/MarkdownLink';
|
|
9
|
+
import { BlockQuote, checkboxStyle, FileButtonWrapper, getListStyle, ListItem, Paragraph, Wrapper, } from './MarkdownViewer.styles';
|
|
10
|
+
import { useFileLogic } from '../Markdown/Files/Files.logic';
|
|
11
|
+
import { AttachPaperclip } from '../MarkdownIcons/AttachPaperclip';
|
|
12
|
+
export var MarkdownViewer = function (_a) {
|
|
13
|
+
var source = _a.source, _b = _a.fileApiUrl, fileApiUrl = _b === void 0 ? '' : _b, _c = _a.profileUrl, profileUrl = _c === void 0 ? '' : _c, downloadFileApi = _a.downloadFileApi;
|
|
14
|
+
var downloadFile = useFileLogic(undefined, downloadFileApi).downloadFile;
|
|
15
|
+
if (!source) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return (React.createElement(Wrapper, { "aria-label": "\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442" },
|
|
19
|
+
React.createElement(ReactMarkdown, { components: getCustomComponents(), remarkPlugins: [gfm, remarkBreaks], rehypePlugins: [rehypeRaw], linkTarget: "_blank" }, source)));
|
|
20
|
+
function getCustomComponents() {
|
|
21
|
+
return {
|
|
22
|
+
a: renderLink,
|
|
23
|
+
li: renderListItem,
|
|
24
|
+
input: renderInput,
|
|
25
|
+
ul: renderList,
|
|
26
|
+
ol: renderOrderedList,
|
|
27
|
+
blockquote: function (props) { return React.createElement(BlockQuote, null, props.children); },
|
|
28
|
+
p: function (props) { return React.createElement(Paragraph, null, props.children); },
|
|
29
|
+
img: function (props) { var _a; return React.createElement(MarkdownImage, { src: (_a = props.src) !== null && _a !== void 0 ? _a : '' }); },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function renderListItem(props) {
|
|
33
|
+
var children = props.children;
|
|
34
|
+
if (props.ordered)
|
|
35
|
+
return React.createElement("li", null, children);
|
|
36
|
+
return checkIfChecklistItem(props) ? getCheckListItem(children) : React.createElement("li", null, children);
|
|
37
|
+
}
|
|
38
|
+
function renderLink(props) {
|
|
39
|
+
var _a = props.href, href = _a === void 0 ? '' : _a, children = props.children;
|
|
40
|
+
if (href.startsWith(fileApiUrl)) {
|
|
41
|
+
var id_1 = href.replace(fileApiUrl, '');
|
|
42
|
+
return (React.createElement(FileButtonWrapper, null,
|
|
43
|
+
React.createElement(AttachPaperclip, null),
|
|
44
|
+
"\u00A0",
|
|
45
|
+
React.createElement("button", { "aria-label": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B ".concat(children), onClick: function () { return downloadFile(id_1); } }, children)));
|
|
46
|
+
}
|
|
47
|
+
return href.startsWith('@') ? (React.createElement(MarkdownLink, { href: profileUrl + href.replace('@', '/') }, children)) : (React.createElement(MarkdownLink, { href: href }, children));
|
|
48
|
+
}
|
|
49
|
+
function checkIfChecklistItem(props) {
|
|
50
|
+
return props.checked !== null || props.className === 'task-list-item';
|
|
51
|
+
}
|
|
52
|
+
function getCheckListItem(children) {
|
|
53
|
+
return React.createElement(ListItem, null, children);
|
|
54
|
+
}
|
|
55
|
+
function renderInput(props) {
|
|
56
|
+
return (React.createElement(Checkbox, { style: checkboxStyle, checked: props.checked }, props.children));
|
|
57
|
+
}
|
|
58
|
+
function renderList(props) {
|
|
59
|
+
return React.createElement("ul", { style: getListStyle(!!props.depth) }, props.children);
|
|
60
|
+
}
|
|
61
|
+
function renderOrderedList(props) {
|
|
62
|
+
return React.createElement("ol", { style: getListStyle(!!(props === null || props === void 0 ? void 0 : props.depth)) }, props.children);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
export declare const Wrapper: import("styled-components").StyledComponent<"div", import("../..").MarkdownTheme, {}, never>;
|
|
3
|
+
export declare const ListItem: import("styled-components").StyledComponent<"li", import("../..").MarkdownTheme, {}, never>;
|
|
4
|
+
export declare const Paragraph: import("styled-components").StyledComponent<"p", import("../..").MarkdownTheme, {}, never>;
|
|
5
|
+
export declare const BlockQuote: import("styled-components").StyledComponent<"blockquote", import("../..").MarkdownTheme, {}, never>;
|
|
6
|
+
export declare const FileButtonWrapper: import("styled-components").StyledComponent<"div", import("../..").MarkdownTheme, {}, never>;
|
|
7
|
+
export declare const checkboxStyle: CSSProperties;
|
|
8
|
+
export declare function getListStyle(depth: boolean): CSSProperties;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import styled from '../styles/styled-components';
|
|
6
|
+
export var Wrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n overflow-wrap: break-word;\n word-wrap: break-word;\n\n word-break: break-word;\n\n p,\n table,\n blockquote {\n margin-bottom: 16px;\n }\n\n ul,\n ol {\n p {\n margin-bottom: 0;\n }\n }\n\n h1,\n h2,\n h3,\n h4,\n h5 {\n margin-bottom: 8px;\n }\n\n img {\n max-width: 100%;\n }\n\n button {\n text-align: left;\n color: ", ";\n }\n\n table {\n background: transparent;\n }\n"], ["\n overflow-wrap: break-word;\n word-wrap: break-word;\n\n word-break: break-word;\n\n p,\n table,\n blockquote {\n margin-bottom: 16px;\n }\n\n ul,\n ol {\n p {\n margin-bottom: 0;\n }\n }\n\n h1,\n h2,\n h3,\n h4,\n h5 {\n margin-bottom: 8px;\n }\n\n img {\n max-width: 100%;\n }\n\n button {\n text-align: left;\n color: ", ";\n }\n\n table {\n background: transparent;\n }\n"])), function (p) { var _a, _b; return (_b = (_a = p.theme) === null || _a === void 0 ? void 0 : _a.colors) === null || _b === void 0 ? void 0 : _b.link; });
|
|
7
|
+
export var ListItem = styled.li(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n list-style: none;\n margin-inline-start: -20px;\n"], ["\n list-style: none;\n margin-inline-start: -20px;\n"])));
|
|
8
|
+
export var Paragraph = styled.p(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin: 0;\n"], ["\n margin: 0;\n"])));
|
|
9
|
+
export var BlockQuote = styled.blockquote(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n margin: 0;\n padding-left: 8px;\n border-left: 4px solid ", ";\n"], ["\n margin: 0;\n padding-left: 8px;\n border-left: 4px solid ", ";\n"])), function (p) { var _a, _b; return (_b = (_a = p.theme) === null || _a === void 0 ? void 0 : _a.colors) === null || _b === void 0 ? void 0 : _b.grayDefault; });
|
|
10
|
+
export var FileButtonWrapper = styled.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n"], ["\n display: flex;\n"])));
|
|
11
|
+
export var checkboxStyle = { marginLeft: 4 };
|
|
12
|
+
export function getListStyle(depth) {
|
|
13
|
+
return depth ? { marginTop: 4 } : { marginBottom: 16 };
|
|
14
|
+
}
|
|
15
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MarkdownViewer } from './MarkdownViewer';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MarkdownViewer } from './MarkdownViewer';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AnchorHTMLAttributes, InputHTMLAttributes, PropsWithChildren } from 'react';
|
|
2
|
+
import { LiProps, SpecialComponents } from 'react-markdown/lib/ast-to-react';
|
|
3
|
+
import { NormalComponents } from 'react-markdown/lib/complex-types';
|
|
4
|
+
export type MarkdownLinkProps = PropsWithChildren<AnchorHTMLAttributes<HTMLAnchorElement>>;
|
|
5
|
+
export type MarkdownInputProps = PropsWithChildren<InputHTMLAttributes<HTMLInputElement>>;
|
|
6
|
+
export type MarkdownLiProps = PropsWithChildren<LiProps>;
|
|
7
|
+
export type CustomComponentsProps = Partial<Omit<NormalComponents, keyof SpecialComponents> & SpecialComponents> | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as styledComponents from 'styled-components';
|
|
2
|
+
import { MarkdownTheme } from './theme';
|
|
3
|
+
declare const styled: styledComponents.ThemedStyledInterface<MarkdownTheme>, css: styledComponents.ThemedCssFunction<MarkdownTheme>, MarkdownThemeProvider: styledComponents.ThemeProviderComponent<MarkdownTheme, MarkdownTheme>, MarkdownThemeConsumer: import("react").Consumer<MarkdownTheme>;
|
|
4
|
+
export { css, MarkdownThemeProvider, MarkdownThemeConsumer };
|
|
5
|
+
export default styled;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as styledComponents from 'styled-components';
|
|
2
|
+
var _a = styledComponents, styled = _a.default, css = _a.css, MarkdownThemeProvider = _a.ThemeProvider, MarkdownThemeConsumer = _a.ThemeConsumer;
|
|
3
|
+
export { css, MarkdownThemeProvider, MarkdownThemeConsumer };
|
|
4
|
+
export default styled;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { THEME_2022 } from '@skbkontur/react-ui';
|
|
2
|
+
import { ColorScheme, ThemeMode } from './types';
|
|
3
|
+
export interface MarkdownTheme {
|
|
4
|
+
colors: ColorScheme;
|
|
5
|
+
elementsFontSize: string;
|
|
6
|
+
elementsLineHeight: string;
|
|
7
|
+
themeMode: ThemeMode;
|
|
8
|
+
droppablePlaceholderBgImage?: string;
|
|
9
|
+
reactUiTheme?: typeof THEME_2022;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_MARKDOWN_THEME: MarkdownTheme;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export var DEFAULT_MARKDOWN_THEME = {
|
|
2
|
+
colors: {
|
|
3
|
+
white: '#fff',
|
|
4
|
+
brand: '#e76f57',
|
|
5
|
+
grayDefault: '#858585',
|
|
6
|
+
disabledButton: '#adadad',
|
|
7
|
+
panelBg: '#d6d6d6',
|
|
8
|
+
link: '#51adff',
|
|
9
|
+
},
|
|
10
|
+
elementsFontSize: '16px',
|
|
11
|
+
elementsLineHeight: '24px',
|
|
12
|
+
themeMode: 'light',
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|