@atlaskit/editor-core 187.18.0 → 187.18.2

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 (100) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/labs/next/presets/universal.js +2 -1
  3. package/dist/cjs/plugins/help-dialog/ui/index.js +26 -27
  4. package/dist/cjs/plugins/index.js +0 -7
  5. package/dist/cjs/plugins/list/index.js +5 -5
  6. package/dist/cjs/plugins/list/transforms.js +1 -223
  7. package/dist/cjs/plugins/paste/commands.js +224 -2
  8. package/dist/cjs/plugins/paste/pm-plugins/main.js +5 -9
  9. package/dist/cjs/plugins/toolbar-lists-indentation/ui/Toolbar.js +3 -3
  10. package/dist/cjs/plugins/toolbar-lists-indentation/ui/ToolbarDropdown.js +4 -4
  11. package/dist/cjs/utils/clipboard.js +5 -27
  12. package/dist/cjs/version-wrapper.js +1 -1
  13. package/dist/cjs/version.json +1 -1
  14. package/dist/es2019/labs/next/presets/universal.js +2 -1
  15. package/dist/es2019/plugins/help-dialog/ui/index.js +1 -2
  16. package/dist/es2019/plugins/index.js +0 -1
  17. package/dist/es2019/plugins/list/index.js +1 -1
  18. package/dist/es2019/plugins/list/transforms.js +2 -210
  19. package/dist/es2019/plugins/paste/commands.js +210 -2
  20. package/dist/es2019/plugins/paste/pm-plugins/main.js +3 -3
  21. package/dist/es2019/plugins/toolbar-lists-indentation/ui/Toolbar.js +1 -1
  22. package/dist/es2019/plugins/toolbar-lists-indentation/ui/ToolbarDropdown.js +1 -1
  23. package/dist/es2019/utils/clipboard.js +0 -16
  24. package/dist/es2019/version-wrapper.js +1 -1
  25. package/dist/es2019/version.json +1 -1
  26. package/dist/esm/labs/next/presets/universal.js +2 -1
  27. package/dist/esm/plugins/help-dialog/ui/index.js +1 -2
  28. package/dist/esm/plugins/index.js +0 -1
  29. package/dist/esm/plugins/list/index.js +1 -1
  30. package/dist/esm/plugins/list/transforms.js +2 -219
  31. package/dist/esm/plugins/paste/commands.js +218 -1
  32. package/dist/esm/plugins/paste/pm-plugins/main.js +3 -3
  33. package/dist/esm/plugins/toolbar-lists-indentation/ui/Toolbar.js +1 -1
  34. package/dist/esm/plugins/toolbar-lists-indentation/ui/ToolbarDropdown.js +1 -1
  35. package/dist/esm/utils/clipboard.js +4 -23
  36. package/dist/esm/version-wrapper.js +1 -1
  37. package/dist/esm/version.json +1 -1
  38. package/dist/types/plugins/index.d.ts +0 -1
  39. package/dist/types/plugins/insert-block/index.d.ts +1 -1
  40. package/dist/types/plugins/list/transforms.d.ts +0 -13
  41. package/dist/types/plugins/paste/commands.d.ts +14 -0
  42. package/dist/types/plugins/paste/index.d.ts +2 -0
  43. package/dist/types/utils/clipboard.d.ts +0 -3
  44. package/dist/types-ts4.5/plugins/index.d.ts +0 -1
  45. package/dist/types-ts4.5/plugins/insert-block/index.d.ts +1 -1
  46. package/dist/types-ts4.5/plugins/list/transforms.d.ts +0 -13
  47. package/dist/types-ts4.5/plugins/paste/commands.d.ts +14 -0
  48. package/dist/types-ts4.5/plugins/paste/index.d.ts +2 -0
  49. package/dist/types-ts4.5/utils/clipboard.d.ts +0 -3
  50. package/package.json +4 -3
  51. package/dist/cjs/plugins/image-upload/index.js +0 -45
  52. package/dist/cjs/plugins/image-upload/pm-plugins/actions.js +0 -19
  53. package/dist/cjs/plugins/image-upload/pm-plugins/commands-toolbar.js +0 -19
  54. package/dist/cjs/plugins/image-upload/pm-plugins/commands.js +0 -40
  55. package/dist/cjs/plugins/image-upload/pm-plugins/input-rule.js +0 -31
  56. package/dist/cjs/plugins/image-upload/pm-plugins/main.js +0 -194
  57. package/dist/cjs/plugins/image-upload/pm-plugins/plugin-key.js +0 -9
  58. package/dist/cjs/plugins/image-upload/types.js +0 -5
  59. package/dist/cjs/plugins/image-upload/utils.js +0 -40
  60. package/dist/cjs/utils/drag-drop.js +0 -19
  61. package/dist/es2019/plugins/image-upload/index.js +0 -34
  62. package/dist/es2019/plugins/image-upload/pm-plugins/actions.js +0 -8
  63. package/dist/es2019/plugins/image-upload/pm-plugins/commands-toolbar.js +0 -12
  64. package/dist/es2019/plugins/image-upload/pm-plugins/commands.js +0 -28
  65. package/dist/es2019/plugins/image-upload/pm-plugins/input-rule.js +0 -25
  66. package/dist/es2019/plugins/image-upload/pm-plugins/main.js +0 -159
  67. package/dist/es2019/plugins/image-upload/pm-plugins/plugin-key.js +0 -2
  68. package/dist/es2019/plugins/image-upload/types.js +0 -1
  69. package/dist/es2019/plugins/image-upload/utils.js +0 -38
  70. package/dist/es2019/utils/drag-drop.js +0 -9
  71. package/dist/esm/plugins/image-upload/index.js +0 -37
  72. package/dist/esm/plugins/image-upload/pm-plugins/actions.js +0 -12
  73. package/dist/esm/plugins/image-upload/pm-plugins/commands-toolbar.js +0 -12
  74. package/dist/esm/plugins/image-upload/pm-plugins/commands.js +0 -32
  75. package/dist/esm/plugins/image-upload/pm-plugins/input-rule.js +0 -23
  76. package/dist/esm/plugins/image-upload/pm-plugins/main.js +0 -186
  77. package/dist/esm/plugins/image-upload/pm-plugins/plugin-key.js +0 -2
  78. package/dist/esm/plugins/image-upload/types.js +0 -1
  79. package/dist/esm/plugins/image-upload/utils.js +0 -31
  80. package/dist/esm/utils/drag-drop.js +0 -11
  81. package/dist/types/plugins/image-upload/index.d.ts +0 -16
  82. package/dist/types/plugins/image-upload/pm-plugins/actions.d.ts +0 -3
  83. package/dist/types/plugins/image-upload/pm-plugins/commands-toolbar.d.ts +0 -3
  84. package/dist/types/plugins/image-upload/pm-plugins/commands.d.ts +0 -5
  85. package/dist/types/plugins/image-upload/pm-plugins/input-rule.d.ts +0 -5
  86. package/dist/types/plugins/image-upload/pm-plugins/main.d.ts +0 -4
  87. package/dist/types/plugins/image-upload/pm-plugins/plugin-key.d.ts +0 -3
  88. package/dist/types/plugins/image-upload/types.d.ts +0 -18
  89. package/dist/types/plugins/image-upload/utils.d.ts +0 -5
  90. package/dist/types/utils/drag-drop.d.ts +0 -2
  91. package/dist/types-ts4.5/plugins/image-upload/index.d.ts +0 -16
  92. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/actions.d.ts +0 -3
  93. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/commands-toolbar.d.ts +0 -3
  94. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/commands.d.ts +0 -5
  95. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/input-rule.d.ts +0 -5
  96. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/main.d.ts +0 -4
  97. package/dist/types-ts4.5/plugins/image-upload/pm-plugins/plugin-key.d.ts +0 -3
  98. package/dist/types-ts4.5/plugins/image-upload/types.d.ts +0 -18
  99. package/dist/types-ts4.5/plugins/image-upload/utils.d.ts +0 -5
  100. package/dist/types-ts4.5/utils/drag-drop.d.ts +0 -2
@@ -1,5 +1,5 @@
1
1
  import type { NextEditorPlugin, OptionalPlugin } from '@atlaskit/editor-common/types';
2
- import type { ImageUploadPlugin } from '../image-upload';
2
+ import type { ImageUploadPlugin } from '@atlaskit/editor-plugin-image-upload';
3
3
  import type datePlugin from '../date';
4
4
  import type { tablesPlugin } from '@atlaskit/editor-plugin-table';
5
5
  import type { hyperlinkPlugin } from '@atlaskit/editor-plugin-hyperlink';
@@ -1,17 +1,4 @@
1
- import type { Schema, Mark } from '@atlaskit/editor-prosemirror/model';
2
- import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
3
1
  import type { Transaction, Selection } from '@atlaskit/editor-prosemirror/state';
4
2
  export declare function liftFollowingList(from: number, to: number, rootListDepth: number, tr: Transaction): Transaction;
5
3
  export declare function liftNodeSelectionList(selection: Selection, tr: Transaction): Transaction;
6
4
  export declare function liftTextSelectionList(selection: Selection, tr: Transaction): Transaction;
7
- /**
8
- * Walks the slice, creating paragraphs that were previously separated by hardbreaks.
9
- * Returns the original paragraph node (as a fragment), or a fragment containing multiple nodes.
10
- */
11
- export declare const splitIntoParagraphs: ({ fragment, blockMarks, schema, }: {
12
- fragment: Fragment;
13
- blockMarks?: readonly Mark[] | undefined;
14
- schema: Schema;
15
- }) => Fragment;
16
- export declare const splitParagraphs: (slice: Slice, schema: Schema) => Slice;
17
- export declare const upgradeTextToLists: (slice: Slice, schema: Schema) => Slice;
@@ -1,3 +1,6 @@
1
+ import type { Schema } from '@atlaskit/editor-prosemirror/model';
2
+ import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
3
+ import type { Mark } from '@atlaskit/editor-prosemirror/model';
1
4
  /**
2
5
  * Use this to register macro link positions during a paste operation, that you
3
6
  * want to track in a document over time, through any document changes.
@@ -14,3 +17,14 @@ export declare const startTrackingPastedMacroPositions: (pastedMacroPositions: {
14
17
  [key: string]: number;
15
18
  }) => import("@atlaskit/editor-common/types").Command;
16
19
  export declare const stopTrackingPastedMacroPositions: (pastedMacroPositionKeys: string[]) => import("@atlaskit/editor-common/types").Command;
20
+ export declare const upgradeTextToLists: (slice: Slice, schema: Schema) => Slice;
21
+ export declare const splitParagraphs: (slice: Slice, schema: Schema) => Slice;
22
+ /**
23
+ * Walks the slice, creating paragraphs that were previously separated by hardbreaks.
24
+ * Returns the original paragraph node (as a fragment), or a fragment containing multiple nodes.
25
+ */
26
+ export declare const splitIntoParagraphs: ({ fragment, blockMarks, schema, }: {
27
+ fragment: Fragment;
28
+ blockMarks?: readonly Mark[] | undefined;
29
+ schema: Schema;
30
+ }) => Fragment;
@@ -3,6 +3,7 @@ import type { CardOptions } from '@atlaskit/editor-common/card';
3
3
  import type featureFlagsPlugin from '@atlaskit/editor-plugin-feature-flags';
4
4
  import type { cardPlugin } from '@atlaskit/editor-plugin-card';
5
5
  import type betterTypeHistoryPlugin from '../better-type-history';
6
+ import type listPlugin from '../list';
6
7
  export type PastePluginOptions = {
7
8
  cardOptions?: CardOptions;
8
9
  sanitizePrivateContent?: boolean;
@@ -11,6 +12,7 @@ declare const pastePlugin: NextEditorPlugin<'paste', {
11
12
  pluginConfiguration: PastePluginOptions;
12
13
  dependencies: [
13
14
  typeof featureFlagsPlugin,
15
+ OptionalPlugin<typeof listPlugin>,
14
16
  typeof betterTypeHistoryPlugin,
15
17
  OptionalPlugin<typeof cardPlugin>
16
18
  ];
@@ -1,6 +1,3 @@
1
- export declare function checkClipboardTypes(type: DOMStringList | ReadonlyArray<string>, item: string): boolean;
2
- export declare const isClipboardEvent: (event: Event) => event is ClipboardEvent;
3
- export declare function isPastedFile(rawEvent: Event): boolean;
4
1
  export declare const copyToClipboard: (textToCopy: string) => Promise<void>;
5
2
  export declare const copyHTMLToClipboard: (elementToCopy: HTMLElement, plainTextToCopy?: string) => Promise<void>;
6
3
  export declare const copyHTMLToClipboardPolyfill: (elementToCopy: HTMLElement, plainTextToCopy?: string) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-core",
3
- "version": "187.18.0",
3
+ "version": "187.18.2",
4
4
  "description": "A package contains Atlassian editor core functionality",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -50,12 +50,12 @@
50
50
  "@atlaskit/avatar": "^21.3.0",
51
51
  "@atlaskit/avatar-group": "^9.3.0",
52
52
  "@atlaskit/button": "^16.9.0",
53
- "@atlaskit/calendar": "^13.1.0",
53
+ "@atlaskit/calendar": "^13.2.0",
54
54
  "@atlaskit/checkbox": "^12.6.0",
55
55
  "@atlaskit/code": "^14.6.0",
56
56
  "@atlaskit/date": "^0.10.0",
57
57
  "@atlaskit/datetime-picker": "^12.7.0",
58
- "@atlaskit/editor-common": "^74.42.0",
58
+ "@atlaskit/editor-common": "^74.44.0",
59
59
  "@atlaskit/editor-json-transformer": "^8.10.0",
60
60
  "@atlaskit/editor-markdown-transformer": "^5.2.5",
61
61
  "@atlaskit/editor-palette": "1.5.1",
@@ -71,6 +71,7 @@
71
71
  "@atlaskit/editor-plugin-grid": "^0.1.0",
72
72
  "@atlaskit/editor-plugin-guideline": "^0.3.4",
73
73
  "@atlaskit/editor-plugin-hyperlink": "^0.3.0",
74
+ "@atlaskit/editor-plugin-image-upload": "^0.1.0",
74
75
  "@atlaskit/editor-plugin-table": "^2.8.0",
75
76
  "@atlaskit/editor-plugin-text-formatting": "^0.1.0",
76
77
  "@atlaskit/editor-plugin-width": "^0.1.0",
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _main = require("./pm-plugins/main");
9
- var _inputRule = _interopRequireDefault(require("./pm-plugins/input-rule"));
10
- var _pluginKey = require("./pm-plugins/plugin-key");
11
- var _commandsToolbar = require("./pm-plugins/commands-toolbar");
12
- var imageUpload = function imageUpload() {
13
- var uploadHandlerReference = {
14
- current: null
15
- };
16
- return {
17
- name: 'imageUpload',
18
- getSharedState: function getSharedState(editorState) {
19
- if (!editorState) {
20
- return undefined;
21
- }
22
- return _pluginKey.stateKey.getState(editorState);
23
- },
24
- actions: {
25
- startUpload: function startUpload() {
26
- return (0, _commandsToolbar.insertActionForToolbar)(uploadHandlerReference);
27
- }
28
- },
29
- pmPlugins: function pmPlugins() {
30
- return [{
31
- name: 'imageUpload',
32
- plugin: (0, _main.createPlugin)(uploadHandlerReference)
33
- }, {
34
- name: 'imageUploadInputRule',
35
- plugin: function plugin(_ref) {
36
- var schema = _ref.schema,
37
- featureFlags = _ref.featureFlags;
38
- return (0, _inputRule.default)(schema, featureFlags);
39
- }
40
- }];
41
- }
42
- };
43
- };
44
- var _default = imageUpload;
45
- exports.default = _default;
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.startUpload = void 0;
7
- var _pluginKey = require("./plugin-key");
8
- var imageUploadAction = function imageUploadAction(tr, action) {
9
- return tr.setMeta(_pluginKey.stateKey, action);
10
- };
11
- var startUpload = function startUpload(event) {
12
- return function (tr) {
13
- return imageUploadAction(tr, {
14
- name: 'START_UPLOAD',
15
- event: event
16
- });
17
- };
18
- };
19
- exports.startUpload = startUpload;
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.insertActionForToolbar = void 0;
7
- var _commands = require("./commands");
8
- var insertActionForToolbar = function insertActionForToolbar(uploadHandlerReference) {
9
- return function (state, dispatch) {
10
- if (!uploadHandlerReference.current) {
11
- return false;
12
- }
13
- uploadHandlerReference.current(undefined, function (options) {
14
- (0, _commands.insertExternalImage)(options)(state, dispatch);
15
- });
16
- return true;
17
- };
18
- };
19
- exports.insertActionForToolbar = insertActionForToolbar;
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.startImageUpload = exports.insertExternalImage = void 0;
7
- var _utils = require("@atlaskit/editor-prosemirror/utils");
8
- var _utils2 = require("../utils");
9
- var _actions = require("./actions");
10
- var _pluginKey = require("./plugin-key");
11
- var insertExternalImage = function insertExternalImage(options) {
12
- return function (state, dispatch) {
13
- var pluginState = _pluginKey.stateKey.getState(state);
14
- if (!(pluginState !== null && pluginState !== void 0 && pluginState.enabled) || !options.src) {
15
- return false;
16
- }
17
- var mediaNode = (0, _utils2.createExternalMediaNode)(options.src, state.schema);
18
- if (!mediaNode) {
19
- return false;
20
- }
21
- if (dispatch) {
22
- dispatch((0, _utils.safeInsert)(mediaNode, state.selection.$to.pos)(state.tr).scrollIntoView());
23
- }
24
- return true;
25
- };
26
- };
27
- exports.insertExternalImage = insertExternalImage;
28
- var startImageUpload = function startImageUpload(event) {
29
- return function (state, dispatch) {
30
- var pluginState = _pluginKey.stateKey.getState(state);
31
- if (pluginState && !pluginState.enabled) {
32
- return false;
33
- }
34
- if (dispatch) {
35
- dispatch((0, _actions.startUpload)(event)(state.tr));
36
- }
37
- return true;
38
- };
39
- };
40
- exports.startImageUpload = startImageUpload;
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- exports.inputRulePlugin = inputRulePlugin;
8
- var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
9
- var _utils = require("../utils");
10
- function inputRulePlugin(schema, featureFlags) {
11
- if (!schema.nodes.media || !schema.nodes.mediaSingle) {
12
- return;
13
- }
14
-
15
- // ![something](link) should convert to an image
16
- var imageRule = (0, _prosemirrorInputRules.createRule)(/!\[(.*)\]\((\S+)\)$/, function (state, match, start, end) {
17
- var schema = state.schema;
18
- var attrs = {
19
- src: match[2],
20
- alt: match[1]
21
- };
22
- var node = (0, _utils.createExternalMediaNode)(attrs.src, schema);
23
- if (node) {
24
- return state.tr.replaceWith(start, end, node);
25
- }
26
- return null;
27
- });
28
- return (0, _prosemirrorInputRules.createPlugin)('image-upload', [imageRule]);
29
- }
30
- var _default = inputRulePlugin;
31
- exports.default = _default;
@@ -1,194 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.createPlugin = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
- var _clipboard = require("../../../utils/clipboard");
13
- var _dragDrop = require("../../../utils/drag-drop");
14
- var _utils = require("../utils");
15
- var _commands = require("./commands");
16
- var _pluginKey = require("./plugin-key");
17
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
- /**
20
- * Microsoft Office includes a screenshot image when copying text content.
21
- *
22
- * This function determines whether or not we can ignore the image if it
23
- * came from MS Office. We do this by checking for
24
- *
25
- * - plain text
26
- * - HTML text which includes the MS Office namespace
27
- * - the number of files and the file name/type
28
- *
29
- * It is easy to manually verify this using by using Office on Mac
30
- * (or Excel if on Windows) and pasting into
31
- * https://evercoder.github.io/clipboard-inspector/
32
- *
33
- * Note: image content in Word is stored in the `text/html` portion
34
- * of the clipboard, not under `files` attachment like the screenshot.
35
- *
36
- * @returns boolean True if the paste event contains a screenshot from MS Office
37
- */
38
- var hasScreenshotImageFromMSOffice = function hasScreenshotImageFromMSOffice(ev) {
39
- var _ref = ev,
40
- clipboardData = _ref.clipboardData;
41
- if (!clipboardData || clipboardData.files.length !== 1) {
42
- return false;
43
- }
44
- var textPlain = !!clipboardData.getData('text/plain');
45
- var textHtml = clipboardData.getData('text/html');
46
- var isOfficeXMLNamespace = textHtml.includes('urn:schemas-microsoft-com:office:office');
47
- var file = clipboardData.files[0];
48
- var isImagePNG = file.type === 'image/png' && file.name === 'image.png';
49
- return isImagePNG && textPlain && isOfficeXMLNamespace;
50
- };
51
- var createReferenceEventFromEvent = function createReferenceEventFromEvent(event) {
52
- var _event$dataTransfer, _event$clipboardData;
53
- if (!(0, _dragDrop.isDragEvent)(event) && !(0, _clipboard.isClipboardEvent)(event)) {
54
- return null;
55
- }
56
-
57
- // Get files list and early exit if files is undefined
58
- var files = (0, _dragDrop.isDragEvent)(event) ? (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files : (_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.files;
59
- if (!files) {
60
- return null;
61
- }
62
-
63
- // Convert filelist into an array
64
- var filesArray = Array.from(files);
65
-
66
- // Creating a new DataTransfer object should remove any mutation that could be possible from the original event
67
- var dataTransfer = filesArray.reduce(function (acc, value) {
68
- acc.items.add(value);
69
- return acc;
70
- }, new DataTransfer());
71
- return _objectSpread(_objectSpread({
72
- type: (0, _dragDrop.isDragEvent)(event) ? 'drop' : 'paste'
73
- }, (0, _dragDrop.isDragEvent)(event) && {
74
- dataTransfer: dataTransfer
75
- }), (0, _clipboard.isClipboardEvent)(event) && {
76
- clipboardData: dataTransfer
77
- });
78
- };
79
- var createDOMHandler = function createDOMHandler(pred, _eventName, uploadHandlerReference) {
80
- return function (view, event) {
81
- if (!pred(event)) {
82
- return false;
83
- }
84
- var shouldUpload = !hasScreenshotImageFromMSOffice(event);
85
- var referenceEvent = createReferenceEventFromEvent(event);
86
- if (shouldUpload && referenceEvent) {
87
- event.preventDefault();
88
- event.stopPropagation();
89
-
90
- // Insert external image into document
91
- if (uploadHandlerReference.current) {
92
- uploadHandlerReference.current(referenceEvent, function (options) {
93
- (0, _commands.insertExternalImage)(options)(view.state, view.dispatch);
94
- });
95
- }
96
-
97
- // Start image upload
98
- (0, _commands.startImageUpload)(referenceEvent)(view.state, view.dispatch);
99
- }
100
- return shouldUpload;
101
- };
102
- };
103
- var getNewActiveUpload = function getNewActiveUpload(tr, pluginState) {
104
- var meta = tr.getMeta(_pluginKey.stateKey);
105
- if (meta && meta.name === 'START_UPLOAD') {
106
- return {
107
- event: meta.event
108
- };
109
- }
110
- return pluginState.activeUpload;
111
- };
112
- var createPlugin = function createPlugin(uploadHandlerReference) {
113
- return function (_ref2) {
114
- var dispatch = _ref2.dispatch,
115
- providerFactory = _ref2.providerFactory;
116
- return new _safePlugin.SafePlugin({
117
- state: {
118
- init: function init(_config, state) {
119
- return {
120
- active: false,
121
- enabled: (0, _utils.canInsertMedia)(state),
122
- hidden: !state.schema.nodes.media || !state.schema.nodes.mediaSingle
123
- };
124
- },
125
- apply: function apply(tr, pluginState, _oldState, newState) {
126
- var newActive = (0, _utils.isMediaSelected)(newState);
127
- var newEnabled = (0, _utils.canInsertMedia)(newState);
128
- var newActiveUpload = getNewActiveUpload(tr, pluginState);
129
- if (newActive !== pluginState.active || newEnabled !== pluginState.enabled || newActiveUpload !== pluginState.activeUpload) {
130
- var newPluginState = _objectSpread(_objectSpread({}, pluginState), {}, {
131
- active: newActive,
132
- enabled: newEnabled,
133
- activeUpload: newActiveUpload
134
- });
135
- dispatch(_pluginKey.stateKey, newPluginState);
136
- return newPluginState;
137
- }
138
- return pluginState;
139
- }
140
- },
141
- key: _pluginKey.stateKey,
142
- view: function view() {
143
- var handleProvider = /*#__PURE__*/function () {
144
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(name, provider) {
145
- var imageUploadProvider;
146
- return _regenerator.default.wrap(function _callee$(_context) {
147
- while (1) switch (_context.prev = _context.next) {
148
- case 0:
149
- if (!(name !== 'imageUploadProvider' || !provider)) {
150
- _context.next = 2;
151
- break;
152
- }
153
- return _context.abrupt("return");
154
- case 2:
155
- _context.prev = 2;
156
- _context.next = 5;
157
- return provider;
158
- case 5:
159
- imageUploadProvider = _context.sent;
160
- uploadHandlerReference.current = imageUploadProvider;
161
- _context.next = 12;
162
- break;
163
- case 9:
164
- _context.prev = 9;
165
- _context.t0 = _context["catch"](2);
166
- uploadHandlerReference.current = null;
167
- case 12:
168
- case "end":
169
- return _context.stop();
170
- }
171
- }, _callee, null, [[2, 9]]);
172
- }));
173
- return function handleProvider(_x, _x2) {
174
- return _ref3.apply(this, arguments);
175
- };
176
- }();
177
- providerFactory.subscribe('imageUploadProvider', handleProvider);
178
- return {
179
- destroy: function destroy() {
180
- uploadHandlerReference.current = null;
181
- providerFactory.unsubscribe('imageUploadProvider', handleProvider);
182
- }
183
- };
184
- },
185
- props: {
186
- handleDOMEvents: {
187
- drop: createDOMHandler(_dragDrop.isDroppedFile, 'atlassian.editor.image.drop', uploadHandlerReference),
188
- paste: createDOMHandler(_clipboard.isPastedFile, 'atlassian.editor.image.paste', uploadHandlerReference)
189
- }
190
- }
191
- });
192
- };
193
- };
194
- exports.createPlugin = createPlugin;
@@ -1,9 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.stateKey = void 0;
7
- var _state = require("@atlaskit/editor-prosemirror/state");
8
- var stateKey = new _state.PluginKey('imageUploadPlugin');
9
- exports.stateKey = stateKey;
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isMediaSelected = exports.createExternalMediaNode = exports.canInsertMedia = void 0;
7
- var _state = require("@atlaskit/editor-prosemirror/state");
8
- var isMediaSelected = function isMediaSelected(state) {
9
- var media = state.schema.nodes.media;
10
- return state.selection instanceof _state.NodeSelection && state.selection.node.type === media;
11
- };
12
- exports.isMediaSelected = isMediaSelected;
13
- var canInsertMedia = function canInsertMedia(state) {
14
- var mediaSingle = state.schema.nodes.mediaSingle;
15
- var $to = state.selection.$to;
16
- if (mediaSingle) {
17
- for (var d = $to.depth; d >= 0; d--) {
18
- var index = $to.index(d);
19
- if ($to.node(d).canReplaceWith(index, index, mediaSingle)) {
20
- return true;
21
- }
22
- }
23
- }
24
- return false;
25
- };
26
- exports.canInsertMedia = canInsertMedia;
27
- var createExternalMediaNode = function createExternalMediaNode(url, schema) {
28
- var _schema$nodes = schema.nodes,
29
- media = _schema$nodes.media,
30
- mediaSingle = _schema$nodes.mediaSingle;
31
- if (!media || !mediaSingle) {
32
- return null;
33
- }
34
- var mediaNode = media.createChecked({
35
- type: 'external',
36
- url: url
37
- });
38
- return mediaSingle.createChecked({}, mediaNode);
39
- };
40
- exports.createExternalMediaNode = createExternalMediaNode;
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isDragEvent = void 0;
7
- exports.isDroppedFile = isDroppedFile;
8
- // Typeguard Function
9
- var isDragEvent = function isDragEvent(event) {
10
- return 'dataTransfer' in event;
11
- };
12
- exports.isDragEvent = isDragEvent;
13
- function isDroppedFile(rawEvent) {
14
- var e = rawEvent;
15
- if (!e.dataTransfer) {
16
- return false;
17
- }
18
- return Array.prototype.slice.call(e.dataTransfer.types).indexOf('Files') !== -1;
19
- }
@@ -1,34 +0,0 @@
1
- import { createPlugin } from './pm-plugins/main';
2
- import inputRulePlugin from './pm-plugins/input-rule';
3
- import { stateKey } from './pm-plugins/plugin-key';
4
- import { insertActionForToolbar } from './pm-plugins/commands-toolbar';
5
- const imageUpload = () => {
6
- let uploadHandlerReference = {
7
- current: null
8
- };
9
- return {
10
- name: 'imageUpload',
11
- getSharedState(editorState) {
12
- if (!editorState) {
13
- return undefined;
14
- }
15
- return stateKey.getState(editorState);
16
- },
17
- actions: {
18
- startUpload: () => insertActionForToolbar(uploadHandlerReference)
19
- },
20
- pmPlugins() {
21
- return [{
22
- name: 'imageUpload',
23
- plugin: createPlugin(uploadHandlerReference)
24
- }, {
25
- name: 'imageUploadInputRule',
26
- plugin: ({
27
- schema,
28
- featureFlags
29
- }) => inputRulePlugin(schema, featureFlags)
30
- }];
31
- }
32
- };
33
- };
34
- export default imageUpload;
@@ -1,8 +0,0 @@
1
- import { stateKey } from './plugin-key';
2
- const imageUploadAction = (tr, action) => {
3
- return tr.setMeta(stateKey, action);
4
- };
5
- export const startUpload = event => tr => imageUploadAction(tr, {
6
- name: 'START_UPLOAD',
7
- event
8
- });
@@ -1,12 +0,0 @@
1
- import { insertExternalImage } from './commands';
2
- export const insertActionForToolbar = uploadHandlerReference => {
3
- return (state, dispatch) => {
4
- if (!uploadHandlerReference.current) {
5
- return false;
6
- }
7
- uploadHandlerReference.current(undefined, options => {
8
- insertExternalImage(options)(state, dispatch);
9
- });
10
- return true;
11
- };
12
- };
@@ -1,28 +0,0 @@
1
- import { safeInsert } from '@atlaskit/editor-prosemirror/utils';
2
- import { createExternalMediaNode } from '../utils';
3
- import { startUpload } from './actions';
4
- import { stateKey } from './plugin-key';
5
- export const insertExternalImage = options => (state, dispatch) => {
6
- const pluginState = stateKey.getState(state);
7
- if (!(pluginState !== null && pluginState !== void 0 && pluginState.enabled) || !options.src) {
8
- return false;
9
- }
10
- const mediaNode = createExternalMediaNode(options.src, state.schema);
11
- if (!mediaNode) {
12
- return false;
13
- }
14
- if (dispatch) {
15
- dispatch(safeInsert(mediaNode, state.selection.$to.pos)(state.tr).scrollIntoView());
16
- }
17
- return true;
18
- };
19
- export const startImageUpload = event => (state, dispatch) => {
20
- const pluginState = stateKey.getState(state);
21
- if (pluginState && !pluginState.enabled) {
22
- return false;
23
- }
24
- if (dispatch) {
25
- dispatch(startUpload(event)(state.tr));
26
- }
27
- return true;
28
- };
@@ -1,25 +0,0 @@
1
- import { createRule, createPlugin } from '@atlaskit/prosemirror-input-rules';
2
- import { createExternalMediaNode } from '../utils';
3
- export function inputRulePlugin(schema, featureFlags) {
4
- if (!schema.nodes.media || !schema.nodes.mediaSingle) {
5
- return;
6
- }
7
-
8
- // ![something](link) should convert to an image
9
- const imageRule = createRule(/!\[(.*)\]\((\S+)\)$/, (state, match, start, end) => {
10
- const {
11
- schema
12
- } = state;
13
- const attrs = {
14
- src: match[2],
15
- alt: match[1]
16
- };
17
- const node = createExternalMediaNode(attrs.src, schema);
18
- if (node) {
19
- return state.tr.replaceWith(start, end, node);
20
- }
21
- return null;
22
- });
23
- return createPlugin('image-upload', [imageRule]);
24
- }
25
- export default inputRulePlugin;