@skbkontur/markdown 1.4.0 → 1.5.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.
Files changed (86) hide show
  1. package/package.json +10 -8
  2. package/index.d.ts +0 -11
  3. package/index.js +0 -9
  4. package/src/Markdown/Files/Files.logic.d.ts +0 -13
  5. package/src/Markdown/Files/Files.logic.js +0 -123
  6. package/src/Markdown/Markdown.creevey.d.ts +0 -1
  7. package/src/Markdown/Markdown.creevey.js +0 -169
  8. package/src/Markdown/Markdown.d.ts +0 -21
  9. package/src/Markdown/Markdown.js +0 -148
  10. package/src/Markdown/Markdown.styled.d.ts +0 -3475
  11. package/src/Markdown/Markdown.styled.js +0 -72
  12. package/src/Markdown/MarkdownActions.d.ts +0 -19
  13. package/src/Markdown/MarkdownActions.js +0 -64
  14. package/src/Markdown/MarkdownEditor.d.ts +0 -13
  15. package/src/Markdown/MarkdownEditor.js +0 -42
  16. package/src/Markdown/MarkdownFormat.d.ts +0 -18
  17. package/src/Markdown/MarkdownFormat.js +0 -19
  18. package/src/Markdown/MarkdownHelpItems.d.ts +0 -30
  19. package/src/Markdown/MarkdownHelpItems.js +0 -243
  20. package/src/Markdown/MarkdownHelpers/MarkdownButton.d.ts +0 -10
  21. package/src/Markdown/MarkdownHelpers/MarkdownButton.js +0 -10
  22. package/src/Markdown/MarkdownHelpers/MarkdownCombination.d.ts +0 -8
  23. package/src/Markdown/MarkdownHelpers/MarkdownCombination.js +0 -15
  24. package/src/Markdown/MarkdownHelpers/MarkdownFormatButton.d.ts +0 -8
  25. package/src/Markdown/MarkdownHelpers/MarkdownFormatButton.js +0 -11
  26. package/src/Markdown/MarkdownHelpers/markdownHelpers.d.ts +0 -10
  27. package/src/Markdown/MarkdownHelpers/markdownHelpers.js +0 -107
  28. package/src/Markdown/MarkdownHelpers/markdownMentionHelpers.d.ts +0 -7
  29. package/src/Markdown/MarkdownHelpers/markdownMentionHelpers.js +0 -44
  30. package/src/Markdown/MarkdownHelpers/markdownTextareaHelpers.d.ts +0 -11
  31. package/src/Markdown/MarkdownHelpers/markdownTextareaHelpers.js +0 -86
  32. package/src/Markdown/MarkdownMention.d.ts +0 -11
  33. package/src/Markdown/MarkdownMention.js +0 -88
  34. package/src/Markdown/constants.d.ts +0 -3
  35. package/src/Markdown/constants.js +0 -3
  36. package/src/Markdown/types.d.ts +0 -37
  37. package/src/Markdown/types.js +0 -5
  38. package/src/Markdown/utils/guid.d.ts +0 -6
  39. package/src/Markdown/utils/guid.js +0 -23
  40. package/src/Markdown/utils/htmlToMd.d.ts +0 -2
  41. package/src/Markdown/utils/htmlToMd.js +0 -5
  42. package/src/Markdown/utils/isMacintosh.d.ts +0 -1
  43. package/src/Markdown/utils/isMacintosh.js +0 -3
  44. package/src/Markdown/utils/requestStatus.d.ts +0 -6
  45. package/src/Markdown/utils/requestStatus.js +0 -7
  46. package/src/Markdown/utils/saveFile.d.ts +0 -1
  47. package/src/Markdown/utils/saveFile.js +0 -9
  48. package/src/MarkdownIcons/AttachLink.d.ts +0 -2
  49. package/src/MarkdownIcons/AttachLink.js +0 -5
  50. package/src/MarkdownIcons/AttachPaperclip.d.ts +0 -2
  51. package/src/MarkdownIcons/AttachPaperclip.js +0 -3
  52. package/src/MarkdownIcons/CheckedList.d.ts +0 -2
  53. package/src/MarkdownIcons/CheckedList.js +0 -8
  54. package/src/MarkdownIcons/Collapse.d.ts +0 -2
  55. package/src/MarkdownIcons/Collapse.js +0 -4
  56. package/src/MarkdownIcons/Expand.d.ts +0 -2
  57. package/src/MarkdownIcons/Expand.js +0 -4
  58. package/src/MarkdownIcons/EyeOpen.d.ts +0 -2
  59. package/src/MarkdownIcons/EyeOpen.js +0 -4
  60. package/src/MarkdownIcons/List.d.ts +0 -2
  61. package/src/MarkdownIcons/List.js +0 -8
  62. package/src/MarkdownIcons/MarkdownIcons.styled.d.ts +0 -260
  63. package/src/MarkdownIcons/MarkdownIcons.styled.js +0 -7
  64. package/src/MarkdownIcons/NumberedList.d.ts +0 -2
  65. package/src/MarkdownIcons/NumberedList.js +0 -6
  66. package/src/MarkdownIcons/Table.d.ts +0 -2
  67. package/src/MarkdownIcons/Table.js +0 -3
  68. package/src/MarkdownIcons/ToolPencil.d.ts +0 -2
  69. package/src/MarkdownIcons/ToolPencil.js +0 -3
  70. package/src/MarkdownViewer/Helpers/MarkdownImage.d.ts +0 -6
  71. package/src/MarkdownViewer/Helpers/MarkdownImage.js +0 -7
  72. package/src/MarkdownViewer/Helpers/MarkdownLink.d.ts +0 -3
  73. package/src/MarkdownViewer/Helpers/MarkdownLink.js +0 -5
  74. package/src/MarkdownViewer/MarkdownViewer.d.ts +0 -12
  75. package/src/MarkdownViewer/MarkdownViewer.js +0 -67
  76. package/src/MarkdownViewer/MarkdownViewer.styles.d.ts +0 -1826
  77. package/src/MarkdownViewer/MarkdownViewer.styles.js +0 -16
  78. package/src/MarkdownViewer/index.d.ts +0 -1
  79. package/src/MarkdownViewer/index.js +0 -1
  80. package/src/MarkdownViewer/types.d.ts +0 -7
  81. package/src/MarkdownViewer/types.js +0 -1
  82. package/src/styles/styled.d.ts +0 -6
  83. package/src/styles/theme.d.ts +0 -11
  84. package/src/styles/theme.js +0 -13
  85. package/src/styles/types.d.ts +0 -15
  86. package/src/styles/types.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/markdown",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -10,6 +10,7 @@
10
10
  "license": "UNLICENSED",
11
11
  "author": "tsypilov",
12
12
  "dependencies": {
13
+ "@types/styled-components": "5.1.26",
13
14
  "@types/turndown": "^5.0.1",
14
15
  "@types/uuid": "^9.0.1",
15
16
  "react-dropzone": "^14.2.3",
@@ -19,7 +20,7 @@
19
20
  "rehype-sanitize": "5.0.1",
20
21
  "remark-breaks": "^3.0.3",
21
22
  "remark-gfm": "^3.0.1",
22
- "styled-components": "6.1.1",
23
+ "styled-components": "5.3.11",
23
24
  "turndown": "^7.1.2",
24
25
  "turndown-plugin-gfm": "^1.0.2",
25
26
  "uuid": "^9.0.0"
@@ -28,10 +29,11 @@
28
29
  "push": "git push --follow-tag",
29
30
  "bump": "lerna version",
30
31
  "build": "yarn tsc",
32
+ "clean": "tsc --build -clean",
31
33
  "lint-staged": "lint-staged",
32
34
  "lint": "eslint --ext=ts,tsx src && yarn stylelint",
33
35
  "lint:fix": "eslint --ext=.ts,tsx src --fix",
34
- "stylelint": "stylelint \"src/**/*.{tsx,ts}\"",
36
+ "stylelint": "stylelint \"src/**/*.styled.{tsx,ts}\"",
35
37
  "prepare": "husky install .husky",
36
38
  "storybook": "start-storybook -p 6007 -s public",
37
39
  "build-storybook": "build-storybook --quiet",
@@ -92,14 +94,14 @@
92
94
  "jest-environment-jsdom": "29.5.0",
93
95
  "jest-teamcity-reporter": "0.9.0",
94
96
  "lerna": "5.0.0",
95
- "lint-staged": "^12.3.4",
96
- "postcss": "8",
97
- "postcss-styled-syntax": "0.5.0",
97
+ "lint-staged": "12.3.4",
98
98
  "prettier": "2.2.1",
99
99
  "react": "16.9.0",
100
100
  "react-dom": "16.9.0",
101
- "stylelint": "15.11.0",
102
- "stylelint-config-standard": "34.0.0",
101
+ "stylelint": "13.13.1",
102
+ "stylelint-config-standard": "22.0.0",
103
+ "stylelint-config-styled-components": "^0.1.1",
104
+ "stylelint-processor-styled-components": "^1.10.0",
103
105
  "typescript": "4.9.4"
104
106
  },
105
107
  "files": [
package/index.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { MarkdownThemeConsumerType, MarkdownThemeProviderType } from './src/styles/types';
2
- declare const MarkdownThemeProvider: MarkdownThemeProviderType;
3
- declare const MarkdownThemeConsumer: MarkdownThemeConsumerType;
4
- export { Markdown, MarkdownProps } from './src/Markdown/Markdown';
5
- export { MarkdownCombination } from './src/Markdown/MarkdownHelpers/MarkdownCombination';
6
- export { markdownHelpItems, markdownHelpFiles, markdownHelpLists, markdownHelpOther, } from './src/Markdown/MarkdownHelpItems';
7
- export { MarkdownViewer } from './src/MarkdownViewer/MarkdownViewer';
8
- export { MarkdownTheme } from './src/styles/theme';
9
- export { MarkdownApi, RefItem, User, Token, HorizontalPaddings, ViewMode } from '././src/Markdown/types';
10
- export { ThemeMode, ColorScheme } from './src/styles/types';
11
- export { MarkdownThemeProvider, MarkdownThemeConsumer };
package/index.js DELETED
@@ -1,9 +0,0 @@
1
- import { ThemeProvider, ThemeConsumer } from 'styled-components';
2
- var MarkdownThemeProvider = ThemeProvider;
3
- var MarkdownThemeConsumer = ThemeConsumer;
4
- export { Markdown } from './src/Markdown/Markdown';
5
- export { MarkdownCombination } from './src/Markdown/MarkdownHelpers/MarkdownCombination';
6
- export { markdownHelpItems, markdownHelpFiles, markdownHelpLists, markdownHelpOther, } from './src/Markdown/MarkdownHelpItems';
7
- export { MarkdownViewer } from './src/MarkdownViewer/MarkdownViewer';
8
- export { ViewMode } from '././src/Markdown/types';
9
- export { MarkdownThemeProvider, MarkdownThemeConsumer };
@@ -1,13 +0,0 @@
1
- import { Textarea } from '@skbkontur/react-ui';
2
- import { Nullable, RefItem } from '../types';
3
- import { RequestStatus } from '../utils/requestStatus';
4
- export declare const useFileLogic: (fileUploadApi?: ((file: File) => Promise<RefItem>) | undefined, fileDownloadApi?: ((id: string) => Promise<File>) | undefined, fileApiUrl?: string, textarea?: Nullable<Textarea>, cursorPosition?: number | null, disabled?: boolean) => {
5
- requestStatus: RequestStatus;
6
- error: boolean;
7
- getRootProps: <T extends import("react-dropzone").DropzoneRootProps>(props?: T | undefined) => T;
8
- isDragActive: boolean;
9
- open: () => void;
10
- uploadFile: (file: File) => Promise<void>;
11
- downloadFile: (id: string) => Promise<void>;
12
- onResetError: () => void;
13
- };
@@ -1,123 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { Toast } from '@skbkontur/react-ui';
38
- import { useState } from 'react';
39
- import { useDropzone } from 'react-dropzone';
40
- import { MarkdownFormat } from '../MarkdownFormat';
41
- import { setMarkdownFiles } from '../MarkdownHelpers/markdownHelpers';
42
- import { RequestStatus } from '../utils/requestStatus';
43
- import { saveFile } from '../utils/saveFile';
44
- var PARENTHESES_REGEXP = /[()[\]]/gm;
45
- export var useFileLogic = function (fileUploadApi, fileDownloadApi, fileApiUrl, textarea, cursorPosition, disabled) {
46
- var _a = useDropzone({
47
- multiple: false,
48
- noClick: true,
49
- disabled: disabled || !fileUploadApi || !fileDownloadApi,
50
- onDrop: function (files) { return void uploadFile(files[0]); },
51
- }), getRootProps = _a.getRootProps, isDragActive = _a.isDragActive, open = _a.open;
52
- var _b = useState(RequestStatus.Default), requestStatus = _b[0], setRequestStatus = _b[1];
53
- var _c = useState(false), error = _c[0], setError = _c[1];
54
- function uploadFile(file) {
55
- return __awaiter(this, void 0, void 0, function () {
56
- var response, isImage, e_1;
57
- return __generator(this, function (_a) {
58
- switch (_a.label) {
59
- case 0:
60
- if (!fileUploadApi) return [3 /*break*/, 4];
61
- if (file.size / Math.pow(1024, 2) >= 10) {
62
- setError(true);
63
- return [2 /*return*/];
64
- }
65
- setRequestStatus(RequestStatus.isFetching);
66
- _a.label = 1;
67
- case 1:
68
- _a.trys.push([1, 3, , 4]);
69
- setError(false);
70
- return [4 /*yield*/, fileUploadApi(new File([file], file.name.replace(PARENTHESES_REGEXP, '')))];
71
- case 2:
72
- response = _a.sent();
73
- isImage = file.type.includes('image');
74
- if (response && textarea) {
75
- setMarkdownFiles(response, textarea, isImage ? MarkdownFormat.image : MarkdownFormat.file, cursorPosition, fileApiUrl);
76
- }
77
- setRequestStatus(RequestStatus.isLoaded);
78
- return [3 /*break*/, 4];
79
- case 3:
80
- e_1 = _a.sent();
81
- Toast.push('Ошибка загрузки файла');
82
- setRequestStatus(RequestStatus.isFailed);
83
- return [3 /*break*/, 4];
84
- case 4: return [2 /*return*/];
85
- }
86
- });
87
- });
88
- }
89
- function downloadFile(id) {
90
- return __awaiter(this, void 0, void 0, function () {
91
- var response, e_2;
92
- return __generator(this, function (_a) {
93
- switch (_a.label) {
94
- case 0:
95
- if (!fileDownloadApi) return [3 /*break*/, 4];
96
- _a.label = 1;
97
- case 1:
98
- _a.trys.push([1, 3, , 4]);
99
- return [4 /*yield*/, fileDownloadApi(id)];
100
- case 2:
101
- response = _a.sent();
102
- saveFile(response);
103
- return [3 /*break*/, 4];
104
- case 3:
105
- e_2 = _a.sent();
106
- Toast.push('Ошибка скачивания файла');
107
- return [3 /*break*/, 4];
108
- case 4: return [2 /*return*/];
109
- }
110
- });
111
- });
112
- }
113
- return {
114
- requestStatus: requestStatus,
115
- error: error,
116
- getRootProps: getRootProps,
117
- isDragActive: isDragActive,
118
- open: open,
119
- uploadFile: uploadFile,
120
- downloadFile: downloadFile,
121
- onResetError: function () { return setError(false); },
122
- };
123
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,169 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { story, kind, test } from 'creevey';
38
- kind('Markdown', function () {
39
- story('WithActions', function (_a) {
40
- var setStoryParameters = _a.setStoryParameters;
41
- setStoryParameters({ skip: !!process.env.STORYBOOK_TEAMCITY_VERSION });
42
- test('withPreview', function () {
43
- var _a, _b;
44
- return __awaiter(this, void 0, void 0, function () {
45
- var buttons, idle, preview;
46
- return __generator(this, function (_c) {
47
- switch (_c.label) {
48
- case 0: return [4 /*yield*/, this.browser.findElements({ css: 'button[class*="react-ui"]' })];
49
- case 1:
50
- buttons = _c.sent();
51
- return [4 /*yield*/, ((_a = this.captureElement) === null || _a === void 0 ? void 0 : _a.takeScreenshot())];
52
- case 2:
53
- idle = _c.sent();
54
- return [4 /*yield*/, this.browser
55
- .actions()
56
- .click(buttons[buttons.length - 2])
57
- .perform()];
58
- case 3:
59
- _c.sent();
60
- return [4 /*yield*/, ((_b = this.captureElement) === null || _b === void 0 ? void 0 : _b.takeScreenshot())];
61
- case 4:
62
- preview = _c.sent();
63
- return [4 /*yield*/, this.expect({ idle: idle, preview: preview }).to.matchImages()];
64
- case 5:
65
- _c.sent();
66
- return [2 /*return*/];
67
- }
68
- });
69
- });
70
- });
71
- });
72
- story('Editable', function (_a) {
73
- var setStoryParameters = _a.setStoryParameters;
74
- setStoryParameters({ skip: !!process.env.STORYBOOK_TEAMCITY_VERSION });
75
- test('markdownTests', function () {
76
- var _a, _b, _c, _d, _e;
77
- return __awaiter(this, void 0, void 0, function () {
78
- var textarea, buttons, openedDropdown, newButtons, h1FromButton, h1FromKeyboard, boldFromButton, boldFromKeyboard;
79
- return __generator(this, function (_f) {
80
- switch (_f.label) {
81
- case 0: return [4 /*yield*/, this.browser.findElement({ tagName: 'textarea' })];
82
- case 1:
83
- textarea = _f.sent();
84
- return [4 /*yield*/, this.browser.findElements({ css: 'button[class*="react-ui"]' })];
85
- case 2:
86
- buttons = _f.sent();
87
- return [4 /*yield*/, this.browser.actions().click(textarea).perform()];
88
- case 3:
89
- _f.sent();
90
- return [4 /*yield*/, this.browser.actions().sendKeys('Заголовок').keyDown(this.keys.CONTROL).sendKeys('a').perform()];
91
- case 4:
92
- _f.sent();
93
- return [4 /*yield*/, this.browser.actions().click(buttons[0]).perform()];
94
- case 5:
95
- _f.sent();
96
- return [4 /*yield*/, ((_a = this.captureElement) === null || _a === void 0 ? void 0 : _a.takeScreenshot())];
97
- case 6:
98
- openedDropdown = _f.sent();
99
- return [4 /*yield*/, this.browser.findElements({ css: 'button[class*="react-ui"]' })];
100
- case 7:
101
- newButtons = _f.sent();
102
- return [4 /*yield*/, this.browser.actions().click(newButtons[1]).perform()];
103
- case 8:
104
- _f.sent();
105
- return [4 /*yield*/, ((_b = this.captureElement) === null || _b === void 0 ? void 0 : _b.takeScreenshot())];
106
- case 9:
107
- h1FromButton = _f.sent();
108
- return [4 /*yield*/, this.browser
109
- .actions()
110
- .keyDown(this.keys.CONTROL)
111
- .sendKeys('a')
112
- .sendKeys('Заголовок')
113
- .keyDown(this.keys.CONTROL)
114
- .sendKeys('a')
115
- .keyDown(this.keys.CONTROL)
116
- .keyDown(this.keys.ALT)
117
- .sendKeys('1')
118
- .perform()];
119
- case 10:
120
- _f.sent();
121
- return [4 /*yield*/, ((_c = this.captureElement) === null || _c === void 0 ? void 0 : _c.takeScreenshot())];
122
- case 11:
123
- h1FromKeyboard = _f.sent();
124
- return [4 /*yield*/, this.browser
125
- .actions()
126
- .keyDown(this.keys.CONTROL)
127
- .sendKeys('a')
128
- .sendKeys('Жирный')
129
- .keyDown(this.keys.CONTROL)
130
- .sendKeys('a')
131
- .click(buttons[1])
132
- .perform()];
133
- case 12:
134
- _f.sent();
135
- return [4 /*yield*/, ((_d = this.captureElement) === null || _d === void 0 ? void 0 : _d.takeScreenshot())];
136
- case 13:
137
- boldFromButton = _f.sent();
138
- return [4 /*yield*/, this.browser
139
- .actions()
140
- .keyDown(this.keys.CONTROL)
141
- .sendKeys('a')
142
- .sendKeys('Жирный')
143
- .keyDown(this.keys.CONTROL)
144
- .sendKeys('a')
145
- .keyDown(this.keys.CONTROL)
146
- .keyDown(this.keys.ALT)
147
- .sendKeys('b')
148
- .perform()];
149
- case 14:
150
- _f.sent();
151
- return [4 /*yield*/, ((_e = this.captureElement) === null || _e === void 0 ? void 0 : _e.takeScreenshot())];
152
- case 15:
153
- boldFromKeyboard = _f.sent();
154
- return [4 /*yield*/, this.expect({
155
- openedDropdown: openedDropdown,
156
- h1FromButton: h1FromButton,
157
- h1FromKeyboard: h1FromKeyboard,
158
- boldFromButton: boldFromButton,
159
- boldFromKeyboard: boldFromKeyboard,
160
- }).to.matchImages()];
161
- case 16:
162
- _f.sent();
163
- return [2 /*return*/];
164
- }
165
- });
166
- });
167
- });
168
- });
169
- });
@@ -1,21 +0,0 @@
1
- import { FC, ReactNode } from 'react';
2
- import { MarkdownEditorProps } from './MarkdownEditor';
3
- import { HorizontalPaddings, MarkdownApi } from './types';
4
- export interface MarkdownProps extends MarkdownEditorProps {
5
- /** Методы апи для загрузки/скачивания файлов и меншена */
6
- api?: MarkdownApi;
7
- /** Url апи для файлов */
8
- fileApiUrl?: string;
9
- /** Render валидации файла, если она нужна, максимальный размер файла = 10mb */
10
- hideHeadersSelect?: boolean;
11
- /** Скрыть панель действий (кнопки помощи форматирования текста) */
12
- hideMarkdownActions?: boolean;
13
- /** Превьювер мардауна, по умолчанию используется MarkdownViewer */
14
- markdownViewer?: (value: string) => ReactNode;
15
- /** Padding markdownActions (кнопки помощи форматирования текста), включает режим panel */
16
- panelHorizontalPadding?: number;
17
- /** Url для профиля сотрудника */
18
- profileUrl?: string;
19
- renderFilesValidation?: (horizontalPadding: HorizontalPaddings, onReset: () => void) => ReactNode;
20
- }
21
- export declare const Markdown: FC<MarkdownProps>;
@@ -1,148 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __rest = (this && this.__rest) || function (s, e) {
13
- var t = {};
14
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
- t[p] = s[p];
16
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
- t[p[i]] = s[p[i]];
20
- }
21
- return t;
22
- };
23
- import { SidePage, ThemeContext } from '@skbkontur/react-ui';
24
- import { HideBodyVerticalScroll } from '@skbkontur/react-ui/internal/HideBodyVerticalScroll';
25
- import React, { useEffect, useLayoutEffect, useRef, useState, } from 'react';
26
- import Foco from 'react-foco/lib';
27
- import { ThemeConsumer, ThemeProvider } from 'styled-components';
28
- import { MENTION_WRAPPER_ID_POSTFIX } from './constants';
29
- import { useFileLogic } from './Files/Files.logic';
30
- import { DroppablePlaceholder, getMarkdownReactUiTheme, MarkdownEditorBlock, MarkdownPreview, MentionWrapper, Wrapper, } from './Markdown.styled';
31
- import { MarkdownActions } from './MarkdownActions';
32
- import { MarkdownEditor } from './MarkdownEditor';
33
- import { usePasteFromClipboard } from './MarkdownHelpers/markdownHelpers';
34
- import { getMentionValue, mentionActions } from './MarkdownHelpers/markdownMentionHelpers';
35
- import { getCursorCoordinates, getFullscreenHorizontalPadding, useListenTextareaScroll, } from './MarkdownHelpers/markdownTextareaHelpers';
36
- import { MarkdownMention } from './MarkdownMention';
37
- import { ViewMode } from './types';
38
- import { Guid } from './utils/guid';
39
- import { RequestStatus } from './utils/requestStatus';
40
- import { MarkdownViewer } from '../MarkdownViewer';
41
- import { DEFAULT_MARKDOWN_THEME } from '../styles/theme';
42
- export var Markdown = function (props) {
43
- var _a;
44
- var panelHorizontalPadding = props.panelHorizontalPadding, hideMarkdownActions = props.hideMarkdownActions, onClick = props.onClick, onChange = props.onChange, onSelect = props.onSelect, markdownViewer = props.markdownViewer, renderFilesValidation = props.renderFilesValidation, fileApiUrl = props.fileApiUrl, profileUrl = props.profileUrl, api = props.api, hideHeadersSelect = props.hideHeadersSelect, textareaProps = __rest(props, ["panelHorizontalPadding", "hideMarkdownActions", "onClick", "onChange", "onSelect", "markdownViewer", "renderFilesValidation", "fileApiUrl", "profileUrl", "api", "hideHeadersSelect"]);
45
- var textareaRef = useRef(null);
46
- var _b = useState(), mention = _b[0], setMention = _b[1];
47
- var _c = useState(ViewMode.Edit), viewMode = _c[0], setViewMode = _c[1];
48
- var _d = useState(false), fullscreen = _d[0], setFullScreen = _d[1];
49
- var _e = useState(0), initialWidth = _e[0], setInitialWidth = _e[1];
50
- var _f = useState(), selectionStart = _f[0], setSelectionStart = _f[1];
51
- var _g = useState(), selectionEnd = _g[0], setSelectionEnd = _g[1];
52
- var guid = useRef(new Guid().generate()).current;
53
- var isEditMode = viewMode === ViewMode.Edit;
54
- var _h = useFileLogic(api === null || api === void 0 ? void 0 : api.fileUploadApi, api === null || api === void 0 ? void 0 : api.fileDownloadApi, fileApiUrl, textareaRef.current, selectionStart, !isEditMode), getRootProps = _h.getRootProps, isDragActive = _h.isDragActive, requestStatus = _h.requestStatus, open = _h.open, error = _h.error, onResetError = _h.onResetError;
55
- usePasteFromClipboard(textareaRef.current, api === null || api === void 0 ? void 0 : api.fileUploadApi, api === null || api === void 0 ? void 0 : api.fileDownloadApi, fileApiUrl);
56
- useListenTextareaScroll(resetMention, textareaRef.current);
57
- useLayoutEffect(function () {
58
- var _a;
59
- var textareaNode = (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.node;
60
- setInitialWidth(textareaNode.getBoundingClientRect().width);
61
- }, []);
62
- useEffect(function () {
63
- var _a;
64
- if (fullscreen && isEditMode) {
65
- var textareaNode = (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.node;
66
- textareaNode.focus();
67
- textareaNode.selectionStart = selectionStart !== null && selectionStart !== void 0 ? selectionStart : 0;
68
- textareaNode.selectionEnd = selectionEnd !== null && selectionEnd !== void 0 ? selectionEnd : 0;
69
- }
70
- }, [fullscreen, isEditMode, selectionEnd, selectionStart]);
71
- var fullscreenTextareaPadding = getFullscreenHorizontalPadding(fullscreen, initialWidth);
72
- var horizontalPaddings = {
73
- panelPadding: panelHorizontalPadding,
74
- fullscreenPadding: fullscreenTextareaPadding,
75
- };
76
- var content = (React.createElement(Foco, { component: "div", onClickOutside: resetStates },
77
- React.createElement(Wrapper, __assign({}, getRootProps()),
78
- !hideMarkdownActions && (React.createElement(MarkdownActions, { textAreaRef: textareaRef, viewMode: viewMode, loadingFile: requestStatus === RequestStatus.isFetching, fullscreen: fullscreen, hideHeadersSelect: hideHeadersSelect, selectionStart: selectionStart, selectionEnd: selectionEnd, horizontalPaddings: horizontalPaddings, hasFilesApi: !!(api === null || api === void 0 ? void 0 : api.fileDownloadApi) && !!(api === null || api === void 0 ? void 0 : api.fileUploadApi), onOpenFileDialog: open, onChangeViewMode: setViewMode, onClickFullscreen: handleClickFullscreen })),
79
- isEditMode && error && (api === null || api === void 0 ? void 0 : api.getUsersApi) && (renderFilesValidation === null || renderFilesValidation === void 0 ? void 0 : renderFilesValidation(horizontalPaddings, onResetError)),
80
- isEditMode && renderEditContainer(),
81
- isDragActive && isEditMode && React.createElement(DroppablePlaceholder, __assign({}, horizontalPaddings))),
82
- !isEditMode && (React.createElement(MarkdownPreview, __assign({}, horizontalPaddings), (markdownViewer === null || markdownViewer === void 0 ? void 0 : markdownViewer(props.value)) || (React.createElement(MarkdownViewer, { source: (_a = props.value) !== null && _a !== void 0 ? _a : '', downloadFileApi: api === null || api === void 0 ? void 0 : api.fileDownloadApi, fileApiUrl: fileApiUrl, profileUrl: profileUrl }))))));
83
- return (React.createElement(ThemeConsumer, null, function (theme) {
84
- var defaultTheme = theme !== null && theme !== void 0 ? theme : DEFAULT_MARKDOWN_THEME;
85
- var reactUiTheme = getMarkdownReactUiTheme(defaultTheme, theme === null || theme === void 0 ? void 0 : theme.reactUiTheme, panelHorizontalPadding, fullscreenTextareaPadding);
86
- return (React.createElement(ThemeProvider, { theme: defaultTheme },
87
- React.createElement(ThemeContext.Provider, { value: reactUiTheme }, fullscreen ? renderFullScreen() : content)));
88
- }));
89
- function renderFullScreen() {
90
- return (React.createElement(SidePage, { disableAnimations: true, width: "100vw", onClose: function () { return setFullScreen(false); } },
91
- React.createElement(HideBodyVerticalScroll, null),
92
- React.createElement(SidePage.Body, null,
93
- React.createElement(SidePage.Container, null, content))));
94
- }
95
- function renderEditContainer() {
96
- var showMention = !!mention && !!getMentionValue(mention);
97
- return (React.createElement(MarkdownEditorBlock, null,
98
- React.createElement(MentionWrapper, { id: "".concat(guid).concat(MENTION_WRAPPER_ID_POSTFIX) }),
99
- showMention && renderMentions(),
100
- React.createElement(MarkdownEditor, __assign({}, textareaProps, { width: fullscreen ? "100%" : textareaProps === null || textareaProps === void 0 ? void 0 : textareaProps.width, textareaRef: textareaRef, onChange: listenChange, onSelect: listenSelection, onClick: listenClick }))));
101
- }
102
- function renderMentions() {
103
- var _a;
104
- if (textareaRef.current && mention && (api === null || api === void 0 ? void 0 : api.getUsersApi)) {
105
- var textareaNode = (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.node;
106
- var position = getCursorCoordinates(textareaNode, guid);
107
- return (React.createElement(MarkdownMention, { value: getMentionValue(mention), getUsersApi: api.getUsersApi, y: position.y, x: position.x, onUserSelect: handleSelectUser }));
108
- }
109
- }
110
- function handleSelectUser(login, name) {
111
- if (textareaRef.current && mention) {
112
- var htmlTextArea = textareaRef.current;
113
- htmlTextArea.setSelectionRange(mention.positions[0] ? mention.positions[0] - 1 : 0, mention.positions[1]);
114
- document.execCommand('insertText', false, "[".concat(name, "](@").concat(login, ")"));
115
- resetMention();
116
- }
117
- }
118
- function listenSelection(event) {
119
- var _a = event.currentTarget, textSelectionStart = _a.selectionStart, textSelectionEnd = _a.selectionEnd;
120
- setSelectionStart(textSelectionStart);
121
- setSelectionEnd(textSelectionEnd);
122
- onSelect && onSelect(event);
123
- checkMention(event);
124
- }
125
- function listenChange(event) {
126
- onChange && onChange(event);
127
- checkMention(event);
128
- }
129
- function listenClick(event) {
130
- onClick && onClick(event);
131
- checkMention(event);
132
- }
133
- function checkMention(event) {
134
- if (api === null || api === void 0 ? void 0 : api.getUsersApi)
135
- mentionActions(event, setMention);
136
- }
137
- function resetStates() {
138
- resetMention();
139
- setSelectionStart(undefined);
140
- setSelectionEnd(undefined);
141
- }
142
- function resetMention() {
143
- setMention(undefined);
144
- }
145
- function handleClickFullscreen() {
146
- setFullScreen(!fullscreen);
147
- }
148
- };