@skbkontur/markdown 2.6.3 → 2.7.0-alpha.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 (61) hide show
  1. package/package.json +2 -2
  2. package/src/Markdown/Emoji/Emoji.logic.js +4 -4
  3. package/src/Markdown/Emoji/Emoji.styled.js +14 -21
  4. package/src/Markdown/Emoji/EmojiDropdown.js +6 -11
  5. package/src/Markdown/Emoji/helpers.js +4 -4
  6. package/src/Markdown/Files/Files.logic.js +46 -108
  7. package/src/Markdown/Markdown.creevey.js +73 -221
  8. package/src/Markdown/Markdown.js +62 -86
  9. package/src/Markdown/Markdown.styled.js +251 -90
  10. package/src/Markdown/MarkdownActions/AIActionsDropdown/AIActionsDropdown.js +45 -111
  11. package/src/Markdown/MarkdownActions/AIActionsDropdown/AIActionsDropdown.styled.js +16 -8
  12. package/src/Markdown/MarkdownActions/AIActionsDropdown/constants.js +2 -2
  13. package/src/Markdown/MarkdownActions/MarkdownActions.js +24 -37
  14. package/src/Markdown/MarkdownActions/MarkdownDropdown/MarkdownDropdown.js +3 -7
  15. package/src/Markdown/MarkdownActions/MarkdownDropdown/MarkdownDropdown.styled.js +8 -6
  16. package/src/Markdown/MarkdownEditor.js +6 -28
  17. package/src/Markdown/MarkdownHelpItems.js +61 -63
  18. package/src/Markdown/MarkdownHelpers/EmptyPreview.js +1 -1
  19. package/src/Markdown/MarkdownHelpers/MarkdownFormatButton.js +6 -7
  20. package/src/Markdown/MarkdownHelpers/constants.js +2 -2
  21. package/src/Markdown/MarkdownHelpers/markdownHelpers.d.ts +1 -0
  22. package/src/Markdown/MarkdownHelpers/markdownHelpers.js +50 -47
  23. package/src/Markdown/MarkdownHelpers/markdownListEnterHelpers.d.ts +2 -0
  24. package/src/Markdown/MarkdownHelpers/markdownListEnterHelpers.js +45 -0
  25. package/src/Markdown/MarkdownHelpers/markdownMentionHelpers.js +12 -12
  26. package/src/Markdown/MarkdownHelpers/markdownTextareaHelpers.js +34 -36
  27. package/src/Markdown/MarkdownMention.js +18 -64
  28. package/src/Markdown/constants.js +6 -6
  29. package/src/Markdown/utils/guid.js +13 -18
  30. package/src/Markdown/utils/htmlToMd.js +2 -2
  31. package/src/Markdown/utils/onInsertText.d.ts +1 -0
  32. package/src/Markdown/utils/onInsertText.js +3 -0
  33. package/src/Markdown/utils/saveFile.js +4 -4
  34. package/src/MarkdownCombination/MarkdownCombination.js +8 -9
  35. package/src/MarkdownCombination/MarkdownCombination.styled.js +7 -6
  36. package/src/MarkdownIcons/AttachLink.js +2 -2
  37. package/src/MarkdownIcons/AttachPaperclip.js +2 -2
  38. package/src/MarkdownIcons/CheckboxCheckedIcon.js +2 -2
  39. package/src/MarkdownIcons/CheckboxUncheckedIcon.js +2 -2
  40. package/src/MarkdownIcons/CheckedList.js +2 -2
  41. package/src/MarkdownIcons/Collapse.js +2 -2
  42. package/src/MarkdownIcons/Copy.js +1 -1
  43. package/src/MarkdownIcons/DocIcon.js +2 -2
  44. package/src/MarkdownIcons/EmojiFace.js +2 -2
  45. package/src/MarkdownIcons/EmptyPrviewArrow.js +1 -1
  46. package/src/MarkdownIcons/Expand.js +2 -2
  47. package/src/MarkdownIcons/EyeOpen.js +2 -2
  48. package/src/MarkdownIcons/List.js +2 -2
  49. package/src/MarkdownIcons/MarkdownIcons.styled.js +3 -6
  50. package/src/MarkdownIcons/NatureFxSparkleA2.js +1 -1
  51. package/src/MarkdownIcons/NumberedList.js +2 -2
  52. package/src/MarkdownIcons/SplitView.js +1 -1
  53. package/src/MarkdownIcons/Table.js +2 -2
  54. package/src/MarkdownIcons/ToolPencil.js +2 -2
  55. package/src/MarkdownViewer/Helpers/MarkdownImage.js +1 -2
  56. package/src/MarkdownViewer/Helpers/MarkdownLink.js +1 -4
  57. package/src/MarkdownViewer/Helpers/MarkdownTable.js +1 -2
  58. package/src/MarkdownViewer/MarkdownViewer.js +18 -26
  59. package/src/MarkdownViewer/MarkdownViewer.styles.js +163 -19
  60. package/src/styles/styled-components.js +1 -1
  61. package/src/styles/theme.js +5 -5
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@skbkontur/markdown",
3
- "version": "2.6.3",
3
+ "version": "2.7.0-alpha.0",
4
+ "packageManager": "yarn@4.13.0",
4
5
  "publishConfig": {
5
6
  "registry": "https://registry.npmjs.org/",
6
7
  "access": "public"
7
8
  },
8
9
  "repository": "https://github.com/skbkontur/markdown",
9
- "private": false,
10
10
  "license": "UNLICENSED",
11
11
  "author": "tsypilov",
12
12
  "dependencies": {
@@ -1,12 +1,12 @@
1
1
  import { setMarkdownPastedHtml } from '../MarkdownHelpers/markdownHelpers';
2
- export var useEmojiLogic = function (textarea) {
3
- var onSelectEmoji = function (emoji) {
2
+ export const useEmojiLogic = (textarea) => {
3
+ const onSelectEmoji = (emoji) => {
4
4
  if (textarea) {
5
- var textareaNode = textarea.node;
5
+ const textareaNode = textarea.node;
6
6
  setMarkdownPastedHtml(emoji.native, textareaNode);
7
7
  }
8
8
  };
9
9
  return {
10
- onSelectEmoji: onSelectEmoji,
10
+ onSelectEmoji,
11
11
  };
12
12
  };
@@ -1,7 +1,3 @@
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
1
  import { getColor } from './helpers';
6
2
  import styled from '../../styles/styled-components';
7
3
  /**
@@ -9,20 +5,17 @@ import styled from '../../styles/styled-components';
9
5
  * https://github.com/missive/emoji-mart/blob/main/packages/emoji-mart-website/example-custom-styles.html
10
6
  */
11
7
  /* stylelint-disable function-name-case */
12
- export var EmojiPickerWrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n em-emoji-picker {\n --font-family: inherit;\n --shadow: unset;\n --rgb-accent: ", ";\n --color-border: ", ";\n --rgb-background: ", ";\n --rgb-input: ", ";\n --rgb-color: ", ";\n\n max-height: 300px;\n width: 100%;\n }\n"], ["\n em-emoji-picker {\n --font-family: inherit;\n --shadow: unset;\n --rgb-accent: ", ";\n --color-border: ", ";\n --rgb-background: ", ";\n --rgb-input: ", ";\n --rgb-color: ", ";\n\n max-height: 300px;\n width: 100%;\n }\n"])), function (_a) {
13
- var theme = _a.theme;
14
- return getColor(theme.colors.brand);
15
- }, function (_a) {
16
- var theme = _a.theme;
17
- return getColor(theme.colors.grayDefault);
18
- }, function (_a) {
19
- var theme = _a.theme;
20
- return getColor(theme.colors.emojiPickerBackgroundRGBColor);
21
- }, function (_a) {
22
- var theme = _a.theme;
23
- return getColor(theme.colors.emojiPickerBackgroundRGBColor);
24
- }, function (_a) {
25
- var theme = _a.theme;
26
- return getColor(theme.colors.text);
27
- });
28
- var templateObject_1;
8
+ export const EmojiPickerWrapper = styled.div `
9
+ em-emoji-picker {
10
+ --font-family: inherit;
11
+ --shadow: unset;
12
+ --rgb-accent: ${({ theme }) => getColor(theme.colors.brand)};
13
+ --color-border: ${({ theme }) => getColor(theme.colors.grayDefault)};
14
+ --rgb-background: ${({ theme }) => getColor(theme.colors.emojiPickerBackgroundRGBColor)};
15
+ --rgb-input: ${({ theme }) => getColor(theme.colors.emojiPickerBackgroundRGBColor)};
16
+ --rgb-color: ${({ theme }) => getColor(theme.colors.text)};
17
+
18
+ max-height: 300px;
19
+ width: 100%;
20
+ }
21
+ `;
@@ -9,21 +9,16 @@ import { DEFAULT_MARKDOWN_THEME, MarkdownThemeConsumer } from '../../styles/them
9
9
  import { MarkdownFormatButton } from '../MarkdownHelpers/MarkdownFormatButton';
10
10
  import { MarkdownTids } from '../MarkdownTids';
11
11
  emojiLocale.search = 'Поиск на английском';
12
- export var EmojiDropdown = function (_a) {
13
- var isPreviewMode = _a.isPreviewMode, showShortKey = _a.showShortKey, onSelect = _a.onSelect, showActionHint = _a.showActionHint;
14
- var dropdownMenuRef = useRef(null);
15
- return (React.createElement(MarkdownThemeConsumer, null, function (theme) {
16
- var currentTheme = theme !== null && theme !== void 0 ? theme : DEFAULT_MARKDOWN_THEME;
17
- return (React.createElement(DropdownMenu, { ref: dropdownMenuRef, caption: function (_a) {
18
- var toggleMenu = _a.toggleMenu;
19
- return (React.createElement(MarkdownFormatButton, { dataTid: MarkdownTids.Emoji, showShortKey: showShortKey, showActionHint: showActionHint, hintText: "Emoji", disabled: isPreviewMode, icon: React.createElement(EmojiFace, null), text: "Emoji", onClick: toggleMenu }));
20
- }, menuWidth: 300, positions: ['bottom right', 'bottom left', 'top right', 'top right'] },
12
+ export const EmojiDropdown = ({ isPreviewMode, showShortKey, onSelect, showActionHint }) => {
13
+ const dropdownMenuRef = useRef(null);
14
+ return (React.createElement(MarkdownThemeConsumer, null, theme => {
15
+ const currentTheme = theme ?? DEFAULT_MARKDOWN_THEME;
16
+ return (React.createElement(DropdownMenu, { ref: dropdownMenuRef, caption: ({ toggleMenu }) => (React.createElement(MarkdownFormatButton, { dataTid: MarkdownTids.Emoji, showShortKey: showShortKey, showActionHint: showActionHint, hintText: "Emoji", disabled: isPreviewMode, icon: React.createElement(EmojiFace, null), text: "Emoji", onClick: toggleMenu })), menuWidth: 300, positions: ['bottom right', 'bottom left', 'top right', 'top right'] },
21
17
  React.createElement(EmojiPickerWrapper, null,
22
18
  React.createElement(EmojiPicker, { dynamicWidth: true, data: data, i18n: emojiLocale, locale: "ru", theme: currentTheme.themeMode, skinTonePosition: "none", previewPosition: "none", onEmojiSelect: handleSelectEmoji }))));
23
19
  }));
24
20
  function handleSelectEmoji(data) {
25
- var _a;
26
21
  onSelect(data);
27
- (_a = dropdownMenuRef.current) === null || _a === void 0 ? void 0 : _a.close();
22
+ dropdownMenuRef.current?.close();
28
23
  }
29
24
  };
@@ -1,4 +1,4 @@
1
- var RGB_KEY = 'rgb';
2
- var regExp = /\((.*)\)/;
3
- var rgbDefaultWhite = '255, 255, 255';
4
- export var getColor = function (color) { var _a, _b; return color.startsWith(RGB_KEY) ? (_b = (_a = color.match(regExp)) === null || _a === void 0 ? void 0 : _a.pop()) !== null && _b !== void 0 ? _b : rgbDefaultWhite : "from ".concat(color, " r g b / 1"); };
1
+ const RGB_KEY = 'rgb';
2
+ const regExp = /\((.*)\)/;
3
+ const rgbDefaultWhite = '255, 255, 255';
4
+ export const getColor = (color) => color.startsWith(RGB_KEY) ? color.match(regExp)?.pop() ?? rgbDefaultWhite : `from ${color} r g b / 1`;
@@ -1,39 +1,3 @@
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
1
  import { Toast } from '@skbkontur/react-ui';
38
2
  import { useState } from 'react';
39
3
  import { useDropzone } from 'react-dropzone';
@@ -41,84 +5,58 @@ import { MarkdownFormat } from '../MarkdownFormat';
41
5
  import { setMarkdownFiles } from '../MarkdownHelpers/markdownHelpers';
42
6
  import { RequestStatus } from '../utils/requestStatus';
43
7
  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({
8
+ const PARENTHESES_REGEXP = /[()[\]]/gm;
9
+ export const useFileLogic = (fileUploadApi, fileDownloadApi, fileApiUrl, textarea, cursorPosition, disabled) => {
10
+ const { getRootProps, getInputProps, isDragActive, open } = useDropzone({
47
11
  multiple: false,
48
12
  noClick: true,
49
13
  disabled: disabled || !fileUploadApi || !fileDownloadApi,
50
- onDrop: function (files) { return void uploadFile(files[0]); },
51
- }), getRootProps = _a.getRootProps, getInputProps = _a.getInputProps, 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*/];
14
+ onDrop: files => void uploadFile(files[0]),
15
+ });
16
+ const [requestStatus, setRequestStatus] = useState(RequestStatus.Default);
17
+ const [error, setError] = useState(false);
18
+ async function uploadFile(file) {
19
+ if (fileUploadApi) {
20
+ if (file.size / Math.pow(1024, 2) >= 10) {
21
+ setError(true);
22
+ return;
23
+ }
24
+ setRequestStatus(RequestStatus.isFetching);
25
+ try {
26
+ setError(false);
27
+ const response = await fileUploadApi(new File([file], file.name.replace(PARENTHESES_REGEXP, '')));
28
+ const isImage = file.type.includes('image');
29
+ if (response && textarea) {
30
+ setMarkdownFiles(response, textarea, isImage ? MarkdownFormat.image : MarkdownFormat.file, cursorPosition, fileApiUrl);
85
31
  }
86
- });
87
- });
32
+ setRequestStatus(RequestStatus.isLoaded);
33
+ }
34
+ catch (e) {
35
+ Toast.push('Ошибка загрузки файла');
36
+ setRequestStatus(RequestStatus.isFailed);
37
+ }
38
+ }
88
39
  }
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
- });
40
+ async function downloadFile(id) {
41
+ if (fileDownloadApi) {
42
+ try {
43
+ const response = await fileDownloadApi(id);
44
+ saveFile(response);
45
+ }
46
+ catch (e) {
47
+ Toast.push('Ошибка скачивания файла');
48
+ }
49
+ }
112
50
  }
113
51
  return {
114
- requestStatus: requestStatus,
115
- error: error,
116
- getRootProps: getRootProps,
117
- getInputProps: getInputProps,
118
- isDragActive: isDragActive,
119
- open: open,
120
- uploadFile: uploadFile,
121
- downloadFile: downloadFile,
122
- onResetError: function () { return setError(false); },
52
+ requestStatus,
53
+ error,
54
+ getRootProps,
55
+ getInputProps,
56
+ isDragActive,
57
+ open,
58
+ uploadFile,
59
+ downloadFile,
60
+ onResetError: () => setError(false),
123
61
  };
124
62
  };
@@ -1,234 +1,86 @@
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
1
  import { delay } from '@skbkontur/react-ui/lib/utils';
38
2
  import { story, kind, test } from 'creevey';
39
3
  import { MarkdownTids } from './MarkdownTids';
40
- var getByTid = function (tid) { return "[data-tid=\"".concat(tid, "\"]"); };
41
- kind('Markdown', function () {
42
- story('CustomWidth', function (_a) {
43
- var setStoryParameters = _a.setStoryParameters;
4
+ const getByTid = (tid) => `[data-tid="${tid}"]`;
5
+ kind('Markdown', () => {
6
+ story('CustomWidth', ({ setStoryParameters }) => {
44
7
  setStoryParameters({ skip: !!process.env.STORYBOOK_TEAMCITY_VERSION });
45
- test('withPreview', function (context) { return __awaiter(void 0, void 0, void 0, function () {
46
- var previewButton, idle, preview;
47
- return __generator(this, function (_a) {
48
- switch (_a.label) {
49
- case 0:
50
- previewButton = context.webdriver.locator(getByTid(MarkdownTids.PreviewView));
51
- return [4 /*yield*/, context.takeScreenshot()];
52
- case 1:
53
- idle = _a.sent();
54
- return [4 /*yield*/, previewButton.click()];
55
- case 2:
56
- _a.sent();
57
- return [4 /*yield*/, context.takeScreenshot()];
58
- case 3:
59
- preview = _a.sent();
60
- return [4 /*yield*/, context.matchImages({ idle: idle, preview: preview })];
61
- case 4:
62
- _a.sent();
63
- return [2 /*return*/];
64
- }
65
- });
66
- }); });
67
- test('withFullscreen', function (context) { return __awaiter(void 0, void 0, void 0, function () {
68
- var fullscreenButton, previewButton, editButton, fullscreenSplit, fullscreenPreview, fullscreenEdit;
69
- return __generator(this, function (_a) {
70
- switch (_a.label) {
71
- case 0:
72
- fullscreenButton = context.webdriver.locator(getByTid(MarkdownTids.FullscreenToggle));
73
- previewButton = context.webdriver.locator(getByTid(MarkdownTids.PreviewView));
74
- editButton = context.webdriver.locator(getByTid(MarkdownTids.EditView));
75
- return [4 /*yield*/, fullscreenButton.click()];
76
- case 1:
77
- _a.sent();
78
- return [4 /*yield*/, context.takeScreenshot()];
79
- case 2:
80
- fullscreenSplit = _a.sent();
81
- return [4 /*yield*/, previewButton.click()];
82
- case 3:
83
- _a.sent();
84
- return [4 /*yield*/, context.takeScreenshot()];
85
- case 4:
86
- fullscreenPreview = _a.sent();
87
- return [4 /*yield*/, editButton.click()];
88
- case 5:
89
- _a.sent();
90
- return [4 /*yield*/, context.takeScreenshot()];
91
- case 6:
92
- fullscreenEdit = _a.sent();
93
- return [4 /*yield*/, context.matchImages({
94
- fullscreenSplit: fullscreenSplit,
95
- fullscreenPreview: fullscreenPreview,
96
- fullscreenEdit: fullscreenEdit,
97
- })];
98
- case 7:
99
- _a.sent();
100
- return [2 /*return*/];
101
- }
8
+ test('withPreview', async (context) => {
9
+ const previewButton = context.webdriver.locator(getByTid(MarkdownTids.PreviewView));
10
+ const idle = await context.takeScreenshot();
11
+ await previewButton.click();
12
+ const preview = await context.takeScreenshot();
13
+ await context.matchImages({ idle, preview });
14
+ });
15
+ test('withFullscreen', async (context) => {
16
+ const fullscreenButton = context.webdriver.locator(getByTid(MarkdownTids.FullscreenToggle));
17
+ const previewButton = context.webdriver.locator(getByTid(MarkdownTids.PreviewView));
18
+ const editButton = context.webdriver.locator(getByTid(MarkdownTids.EditView));
19
+ await fullscreenButton.click();
20
+ const fullscreenSplit = await context.takeScreenshot();
21
+ await previewButton.click();
22
+ const fullscreenPreview = await context.takeScreenshot();
23
+ await editButton.click();
24
+ const fullscreenEdit = await context.takeScreenshot();
25
+ await context.matchImages({
26
+ fullscreenSplit,
27
+ fullscreenPreview,
28
+ fullscreenEdit,
102
29
  });
103
- }); });
30
+ });
104
31
  });
105
- for (var _i = 0, _a = ['WithoutHints', 'WithActionHint', 'WithShortKeyHint', 'WithActionAndShortKeyHints']; _i < _a.length; _i++) {
106
- var storyName = _a[_i];
107
- story(storyName, function (_a) {
108
- var setStoryParameters = _a.setStoryParameters;
32
+ for (const storyName of ['WithoutHints', 'WithActionHint', 'WithShortKeyHint', 'WithActionAndShortKeyHints']) {
33
+ story(storyName, ({ setStoryParameters }) => {
109
34
  setStoryParameters({ skip: !!process.env.STORYBOOK_TEAMCITY_VERSION });
110
- test('hint', function (context) { return __awaiter(void 0, void 0, void 0, function () {
111
- var boldButton, hint;
112
- return __generator(this, function (_a) {
113
- switch (_a.label) {
114
- case 0:
115
- boldButton = context.webdriver.locator(getByTid(MarkdownTids.Bold));
116
- return [4 /*yield*/, boldButton.hover()];
117
- case 1:
118
- _a.sent();
119
- return [4 /*yield*/, delay(500)];
120
- case 2:
121
- _a.sent();
122
- return [4 /*yield*/, context.takeScreenshot()];
123
- case 3:
124
- hint = _a.sent();
125
- return [4 /*yield*/, context.matchImages({ hint: hint })];
126
- case 4:
127
- _a.sent();
128
- return [2 /*return*/];
129
- }
130
- });
131
- }); });
35
+ test('hint', async (context) => {
36
+ const boldButton = context.webdriver.locator(getByTid(MarkdownTids.Bold));
37
+ await boldButton.hover();
38
+ await delay(500);
39
+ const hint = await context.takeScreenshot();
40
+ await context.matchImages({ hint });
41
+ });
132
42
  });
133
43
  }
134
- story('Editable', function (_a) {
135
- var setStoryParameters = _a.setStoryParameters;
44
+ story('Editable', ({ setStoryParameters }) => {
136
45
  setStoryParameters({ skip: !!process.env.STORYBOOK_TEAMCITY_VERSION });
137
- test('markdownTests', function (context) { return __awaiter(void 0, void 0, void 0, function () {
138
- var textarea, headingDropdown, headingH2, boldButton, emojiButton, openedDropdown, h2FromButton, h2FromKeyboard, boldFromButton, boldFromKeyboard, openedEmojiPicker;
139
- return __generator(this, function (_a) {
140
- switch (_a.label) {
141
- case 0:
142
- textarea = context.webdriver.locator('textarea').nth(0);
143
- headingDropdown = context.webdriver.locator(getByTid(MarkdownTids.HeadingDropdown));
144
- headingH2 = context.webdriver.locator(getByTid(MarkdownTids.HeadingH2));
145
- boldButton = context.webdriver.locator(getByTid(MarkdownTids.Bold));
146
- emojiButton = context.webdriver.locator(getByTid(MarkdownTids.Emoji));
147
- return [4 /*yield*/, textarea.click()];
148
- case 1:
149
- _a.sent();
150
- return [4 /*yield*/, textarea.type('Заголовок')];
151
- case 2:
152
- _a.sent();
153
- return [4 /*yield*/, textarea.press('Control+A')];
154
- case 3:
155
- _a.sent();
156
- return [4 /*yield*/, headingDropdown.click()];
157
- case 4:
158
- _a.sent();
159
- return [4 /*yield*/, context.takeScreenshot()];
160
- case 5:
161
- openedDropdown = _a.sent();
162
- return [4 /*yield*/, headingH2.click()];
163
- case 6:
164
- _a.sent();
165
- return [4 /*yield*/, context.takeScreenshot()];
166
- case 7:
167
- h2FromButton = _a.sent();
168
- return [4 /*yield*/, textarea.press('Control+A')];
169
- case 8:
170
- _a.sent();
171
- return [4 /*yield*/, textarea.type('Заголовок')];
172
- case 9:
173
- _a.sent();
174
- return [4 /*yield*/, textarea.press('Control+A')];
175
- case 10:
176
- _a.sent();
177
- return [4 /*yield*/, textarea.press('Control+Shift+2')];
178
- case 11:
179
- _a.sent();
180
- return [4 /*yield*/, context.takeScreenshot()];
181
- case 12:
182
- h2FromKeyboard = _a.sent();
183
- return [4 /*yield*/, textarea.press('Control+A')];
184
- case 13:
185
- _a.sent();
186
- return [4 /*yield*/, textarea.type('Жирный')];
187
- case 14:
188
- _a.sent();
189
- return [4 /*yield*/, textarea.press('Control+A')];
190
- case 15:
191
- _a.sent();
192
- return [4 /*yield*/, boldButton.click()];
193
- case 16:
194
- _a.sent();
195
- return [4 /*yield*/, context.takeScreenshot()];
196
- case 17:
197
- boldFromButton = _a.sent();
198
- return [4 /*yield*/, textarea.press('Control+A')];
199
- case 18:
200
- _a.sent();
201
- return [4 /*yield*/, textarea.type('Жирный')];
202
- case 19:
203
- _a.sent();
204
- return [4 /*yield*/, textarea.press('Control+A')];
205
- case 20:
206
- _a.sent();
207
- return [4 /*yield*/, textarea.press('Control+B')];
208
- case 21:
209
- _a.sent();
210
- return [4 /*yield*/, context.takeScreenshot()];
211
- case 22:
212
- boldFromKeyboard = _a.sent();
213
- return [4 /*yield*/, emojiButton.click()];
214
- case 23:
215
- _a.sent();
216
- return [4 /*yield*/, context.takeScreenshot()];
217
- case 24:
218
- openedEmojiPicker = _a.sent();
219
- return [4 /*yield*/, context.matchImages({
220
- openedDropdown: openedDropdown,
221
- h2FromButton: h2FromButton,
222
- h2FromKeyboard: h2FromKeyboard,
223
- boldFromButton: boldFromButton,
224
- boldFromKeyboard: boldFromKeyboard,
225
- openedEmojiPicker: openedEmojiPicker,
226
- })];
227
- case 25:
228
- _a.sent();
229
- return [2 /*return*/];
230
- }
46
+ test('markdownTests', async (context) => {
47
+ const textarea = context.webdriver.locator('textarea').nth(0);
48
+ const headingDropdown = context.webdriver.locator(getByTid(MarkdownTids.HeadingDropdown));
49
+ const headingH2 = context.webdriver.locator(getByTid(MarkdownTids.HeadingH2));
50
+ const boldButton = context.webdriver.locator(getByTid(MarkdownTids.Bold));
51
+ const emojiButton = context.webdriver.locator(getByTid(MarkdownTids.Emoji));
52
+ await textarea.click();
53
+ await textarea.type('Заголовок');
54
+ await textarea.press('Control+A');
55
+ await headingDropdown.click();
56
+ const openedDropdown = await context.takeScreenshot();
57
+ await headingH2.click();
58
+ const h2FromButton = await context.takeScreenshot();
59
+ await textarea.press('Control+A');
60
+ await textarea.type('Заголовок');
61
+ await textarea.press('Control+A');
62
+ await textarea.press('Control+Shift+2');
63
+ const h2FromKeyboard = await context.takeScreenshot();
64
+ await textarea.press('Control+A');
65
+ await textarea.type('Жирный');
66
+ await textarea.press('Control+A');
67
+ await boldButton.click();
68
+ const boldFromButton = await context.takeScreenshot();
69
+ await textarea.press('Control+A');
70
+ await textarea.type('Жирный');
71
+ await textarea.press('Control+A');
72
+ await textarea.press('Control+B');
73
+ const boldFromKeyboard = await context.takeScreenshot();
74
+ await emojiButton.click();
75
+ const openedEmojiPicker = await context.takeScreenshot();
76
+ await context.matchImages({
77
+ openedDropdown,
78
+ h2FromButton,
79
+ h2FromKeyboard,
80
+ boldFromButton,
81
+ boldFromKeyboard,
82
+ openedEmojiPicker,
231
83
  });
232
- }); });
84
+ });
233
85
  });
234
86
  });