@atlaskit/editor-plugin-text-formatting 0.1.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 (140) hide show
  1. package/.eslintrc.js +7 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE.md +13 -0
  4. package/README.md +9 -0
  5. package/dist/cjs/actions.js +188 -0
  6. package/dist/cjs/commands/clear-formatting.js +111 -0
  7. package/dist/cjs/commands/text-formatting.js +143 -0
  8. package/dist/cjs/commands/transform-to-code.js +68 -0
  9. package/dist/cjs/index.js +12 -0
  10. package/dist/cjs/plugin.js +133 -0
  11. package/dist/cjs/pm-plugins/clear-formatting-keymap.js +21 -0
  12. package/dist/cjs/pm-plugins/clear-formatting.js +36 -0
  13. package/dist/cjs/pm-plugins/cursor.js +55 -0
  14. package/dist/cjs/pm-plugins/input-rule.js +274 -0
  15. package/dist/cjs/pm-plugins/keymap.js +52 -0
  16. package/dist/cjs/pm-plugins/main.js +113 -0
  17. package/dist/cjs/pm-plugins/plugin-key.js +9 -0
  18. package/dist/cjs/pm-plugins/smart-input-rule.js +176 -0
  19. package/dist/cjs/ui/Toolbar/constants.js +19 -0
  20. package/dist/cjs/ui/Toolbar/dropdown-menu.js +86 -0
  21. package/dist/cjs/ui/Toolbar/hooks/clear-formatting-icon.js +55 -0
  22. package/dist/cjs/ui/Toolbar/hooks/formatting-icons.js +227 -0
  23. package/dist/cjs/ui/Toolbar/hooks/menu-state.js +23 -0
  24. package/dist/cjs/ui/Toolbar/hooks/responsive-toolbar-buttons.js +60 -0
  25. package/dist/cjs/ui/Toolbar/index.js +183 -0
  26. package/dist/cjs/ui/Toolbar/more-button.js +42 -0
  27. package/dist/cjs/ui/Toolbar/single-toolbar-buttons.js +49 -0
  28. package/dist/cjs/ui/Toolbar/types.js +17 -0
  29. package/dist/cjs/utils/cell-selection.js +12 -0
  30. package/dist/cjs/utils.js +86 -0
  31. package/dist/cjs/version.json +5 -0
  32. package/dist/es2019/actions.js +161 -0
  33. package/dist/es2019/commands/clear-formatting.js +105 -0
  34. package/dist/es2019/commands/text-formatting.js +144 -0
  35. package/dist/es2019/commands/transform-to-code.js +71 -0
  36. package/dist/es2019/index.js +1 -0
  37. package/dist/es2019/plugin.js +124 -0
  38. package/dist/es2019/pm-plugins/clear-formatting-keymap.js +10 -0
  39. package/dist/es2019/pm-plugins/clear-formatting.js +26 -0
  40. package/dist/es2019/pm-plugins/cursor.js +52 -0
  41. package/dist/es2019/pm-plugins/input-rule.js +242 -0
  42. package/dist/es2019/pm-plugins/keymap.js +43 -0
  43. package/dist/es2019/pm-plugins/main.js +110 -0
  44. package/dist/es2019/pm-plugins/plugin-key.js +2 -0
  45. package/dist/es2019/pm-plugins/smart-input-rule.js +155 -0
  46. package/dist/es2019/ui/Toolbar/constants.js +20 -0
  47. package/dist/es2019/ui/Toolbar/dropdown-menu.js +66 -0
  48. package/dist/es2019/ui/Toolbar/hooks/clear-formatting-icon.js +44 -0
  49. package/dist/es2019/ui/Toolbar/hooks/formatting-icons.js +212 -0
  50. package/dist/es2019/ui/Toolbar/hooks/menu-state.js +11 -0
  51. package/dist/es2019/ui/Toolbar/hooks/responsive-toolbar-buttons.js +48 -0
  52. package/dist/es2019/ui/Toolbar/index.js +168 -0
  53. package/dist/es2019/ui/Toolbar/more-button.js +34 -0
  54. package/dist/es2019/ui/Toolbar/single-toolbar-buttons.js +39 -0
  55. package/dist/es2019/ui/Toolbar/types.js +10 -0
  56. package/dist/es2019/utils/cell-selection.js +5 -0
  57. package/dist/es2019/utils.js +74 -0
  58. package/dist/es2019/version.json +5 -0
  59. package/dist/esm/actions.js +168 -0
  60. package/dist/esm/commands/clear-formatting.js +101 -0
  61. package/dist/esm/commands/text-formatting.js +134 -0
  62. package/dist/esm/commands/transform-to-code.js +61 -0
  63. package/dist/esm/index.js +1 -0
  64. package/dist/esm/plugin.js +125 -0
  65. package/dist/esm/pm-plugins/clear-formatting-keymap.js +10 -0
  66. package/dist/esm/pm-plugins/clear-formatting.js +28 -0
  67. package/dist/esm/pm-plugins/cursor.js +48 -0
  68. package/dist/esm/pm-plugins/input-rule.js +257 -0
  69. package/dist/esm/pm-plugins/keymap.js +43 -0
  70. package/dist/esm/pm-plugins/main.js +99 -0
  71. package/dist/esm/pm-plugins/plugin-key.js +2 -0
  72. package/dist/esm/pm-plugins/smart-input-rule.js +169 -0
  73. package/dist/esm/ui/Toolbar/constants.js +8 -0
  74. package/dist/esm/ui/Toolbar/dropdown-menu.js +75 -0
  75. package/dist/esm/ui/Toolbar/hooks/clear-formatting-icon.js +47 -0
  76. package/dist/esm/ui/Toolbar/hooks/formatting-icons.js +215 -0
  77. package/dist/esm/ui/Toolbar/hooks/menu-state.js +15 -0
  78. package/dist/esm/ui/Toolbar/hooks/responsive-toolbar-buttons.js +50 -0
  79. package/dist/esm/ui/Toolbar/index.js +174 -0
  80. package/dist/esm/ui/Toolbar/more-button.js +33 -0
  81. package/dist/esm/ui/Toolbar/single-toolbar-buttons.js +38 -0
  82. package/dist/esm/ui/Toolbar/types.js +10 -0
  83. package/dist/esm/utils/cell-selection.js +5 -0
  84. package/dist/esm/utils.js +75 -0
  85. package/dist/esm/version.json +5 -0
  86. package/dist/types/actions.d.ts +22 -0
  87. package/dist/types/commands/clear-formatting.d.ts +6 -0
  88. package/dist/types/commands/text-formatting.d.ts +5 -0
  89. package/dist/types/commands/transform-to-code.d.ts +2 -0
  90. package/dist/types/index.d.ts +3 -0
  91. package/dist/types/plugin.d.ts +17 -0
  92. package/dist/types/pm-plugins/clear-formatting-keymap.d.ts +4 -0
  93. package/dist/types/pm-plugins/clear-formatting.d.ts +8 -0
  94. package/dist/types/pm-plugins/cursor.d.ts +3 -0
  95. package/dist/types/pm-plugins/input-rule.d.ts +23 -0
  96. package/dist/types/pm-plugins/keymap.d.ts +4 -0
  97. package/dist/types/pm-plugins/main.d.ts +7 -0
  98. package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
  99. package/dist/types/pm-plugins/smart-input-rule.d.ts +3 -0
  100. package/dist/types/ui/Toolbar/constants.d.ts +6 -0
  101. package/dist/types/ui/Toolbar/dropdown-menu.d.ts +15 -0
  102. package/dist/types/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
  103. package/dist/types/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
  104. package/dist/types/ui/Toolbar/hooks/menu-state.d.ts +1 -0
  105. package/dist/types/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
  106. package/dist/types/ui/Toolbar/index.d.ts +25 -0
  107. package/dist/types/ui/Toolbar/more-button.d.ts +14 -0
  108. package/dist/types/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
  109. package/dist/types/ui/Toolbar/types.d.ts +32 -0
  110. package/dist/types/utils/cell-selection.d.ts +3 -0
  111. package/dist/types/utils.d.ts +11 -0
  112. package/dist/types-ts4.5/actions.d.ts +22 -0
  113. package/dist/types-ts4.5/commands/clear-formatting.d.ts +6 -0
  114. package/dist/types-ts4.5/commands/text-formatting.d.ts +5 -0
  115. package/dist/types-ts4.5/commands/transform-to-code.d.ts +2 -0
  116. package/dist/types-ts4.5/index.d.ts +3 -0
  117. package/dist/types-ts4.5/plugin.d.ts +19 -0
  118. package/dist/types-ts4.5/pm-plugins/clear-formatting-keymap.d.ts +4 -0
  119. package/dist/types-ts4.5/pm-plugins/clear-formatting.d.ts +8 -0
  120. package/dist/types-ts4.5/pm-plugins/cursor.d.ts +3 -0
  121. package/dist/types-ts4.5/pm-plugins/input-rule.d.ts +23 -0
  122. package/dist/types-ts4.5/pm-plugins/keymap.d.ts +4 -0
  123. package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
  124. package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
  125. package/dist/types-ts4.5/pm-plugins/smart-input-rule.d.ts +3 -0
  126. package/dist/types-ts4.5/ui/Toolbar/constants.d.ts +6 -0
  127. package/dist/types-ts4.5/ui/Toolbar/dropdown-menu.d.ts +15 -0
  128. package/dist/types-ts4.5/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
  129. package/dist/types-ts4.5/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
  130. package/dist/types-ts4.5/ui/Toolbar/hooks/menu-state.d.ts +5 -0
  131. package/dist/types-ts4.5/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
  132. package/dist/types-ts4.5/ui/Toolbar/index.d.ts +25 -0
  133. package/dist/types-ts4.5/ui/Toolbar/more-button.d.ts +14 -0
  134. package/dist/types-ts4.5/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
  135. package/dist/types-ts4.5/ui/Toolbar/types.d.ts +32 -0
  136. package/dist/types-ts4.5/utils/cell-selection.d.ts +3 -0
  137. package/dist/types-ts4.5/utils.d.ts +11 -0
  138. package/package.json +93 -0
  139. package/report.api.md +66 -0
  140. package/tmp/api-report-tmp.d.ts +39 -0
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.textFormattingPlugin = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _adfSchema = require("@atlaskit/adf-schema");
10
+ var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
11
+ var _actions = require("./actions");
12
+ var _clearFormatting = require("./pm-plugins/clear-formatting");
13
+ var _clearFormattingKeymap = _interopRequireDefault(require("./pm-plugins/clear-formatting-keymap"));
14
+ var _cursor = _interopRequireDefault(require("./pm-plugins/cursor"));
15
+ var _inputRule = _interopRequireDefault(require("./pm-plugins/input-rule"));
16
+ var _keymap = _interopRequireDefault(require("./pm-plugins/keymap"));
17
+ var _main = require("./pm-plugins/main");
18
+ var _smartInputRule = _interopRequireDefault(require("./pm-plugins/smart-input-rule"));
19
+ var _Toolbar = _interopRequireDefault(require("./ui/Toolbar"));
20
+ var textFormattingPlugin = function textFormattingPlugin() {
21
+ var _api$dependencies$ana7, _api$dependencies$ana8, _api$dependencies$ana9, _api$dependencies$ana10, _api$dependencies$ana11, _api$dependencies$ana12, _api$dependencies$ana13;
22
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
23
+ var api = arguments.length > 1 ? arguments[1] : undefined;
24
+ return {
25
+ name: 'textFormatting',
26
+ marks: function marks() {
27
+ return [{
28
+ name: 'em',
29
+ mark: _adfSchema.em
30
+ }, {
31
+ name: 'strong',
32
+ mark: _adfSchema.strong
33
+ }, {
34
+ name: 'strike',
35
+ mark: _adfSchema.strike
36
+ }].concat(options.disableCode ? [] : {
37
+ name: 'code',
38
+ mark: _adfSchema.code
39
+ }).concat(options.disableSuperscriptAndSubscript ? [] : {
40
+ name: 'subsup',
41
+ mark: _adfSchema.subsup
42
+ }).concat(options.disableUnderline ? [] : {
43
+ name: 'underline',
44
+ mark: _adfSchema.underline
45
+ });
46
+ },
47
+ pmPlugins: function pmPlugins() {
48
+ return [{
49
+ name: 'textFormatting',
50
+ plugin: function plugin(_ref) {
51
+ var _api$dependencies$ana;
52
+ var dispatch = _ref.dispatch;
53
+ return (0, _main.plugin)(dispatch, api === null || api === void 0 ? void 0 : (_api$dependencies$ana = api.dependencies.analytics) === null || _api$dependencies$ana === void 0 ? void 0 : _api$dependencies$ana.actions);
54
+ }
55
+ }, {
56
+ name: 'textFormattingCursor',
57
+ plugin: function plugin() {
58
+ return _cursor.default;
59
+ }
60
+ }, {
61
+ name: 'textFormattingInputRule',
62
+ plugin: function plugin(_ref2) {
63
+ var _api$dependencies$ana2;
64
+ var schema = _ref2.schema;
65
+ return (0, _inputRule.default)(schema, api === null || api === void 0 ? void 0 : (_api$dependencies$ana2 = api.dependencies.analytics) === null || _api$dependencies$ana2 === void 0 ? void 0 : _api$dependencies$ana2.actions);
66
+ }
67
+ }, {
68
+ name: 'textFormattingSmartRule',
69
+ plugin: function plugin() {
70
+ var _api$dependencies$ana3;
71
+ return !options.disableSmartTextCompletion ? (0, _smartInputRule.default)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana3 = api.dependencies.analytics) === null || _api$dependencies$ana3 === void 0 ? void 0 : _api$dependencies$ana3.actions) : undefined;
72
+ }
73
+ }, {
74
+ name: 'textFormattingClear',
75
+ plugin: function plugin(_ref3) {
76
+ var dispatch = _ref3.dispatch;
77
+ return (0, _clearFormatting.plugin)(dispatch);
78
+ }
79
+ }, {
80
+ name: 'textFormattingClearKeymap',
81
+ plugin: function plugin() {
82
+ var _api$dependencies$ana4;
83
+ return (0, _clearFormattingKeymap.default)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana4 = api.dependencies.analytics) === null || _api$dependencies$ana4 === void 0 ? void 0 : _api$dependencies$ana4.actions);
84
+ }
85
+ }, {
86
+ name: 'textFormattingKeymap',
87
+ plugin: function plugin(_ref4) {
88
+ var _api$dependencies$ana5;
89
+ var schema = _ref4.schema;
90
+ return (0, _keymap.default)(schema, api === null || api === void 0 ? void 0 : (_api$dependencies$ana5 = api.dependencies.analytics) === null || _api$dependencies$ana5 === void 0 ? void 0 : _api$dependencies$ana5.actions);
91
+ }
92
+ }];
93
+ },
94
+ primaryToolbarComponent: function primaryToolbarComponent(_ref5) {
95
+ var editorView = _ref5.editorView,
96
+ popupsMountPoint = _ref5.popupsMountPoint,
97
+ popupsScrollableElement = _ref5.popupsScrollableElement,
98
+ isToolbarReducedSpacing = _ref5.isToolbarReducedSpacing,
99
+ toolbarSize = _ref5.toolbarSize,
100
+ disabled = _ref5.disabled;
101
+ return /*#__PURE__*/_react.default.createElement(_withPluginState.WithPluginState, {
102
+ plugins: {
103
+ textFormattingState: _main.pluginKey,
104
+ clearFormattingPluginState: _clearFormatting.pluginKey
105
+ },
106
+ render: function render() {
107
+ var _api$dependencies$ana6;
108
+ return /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
109
+ editorState: editorView.state,
110
+ popupsMountPoint: popupsMountPoint,
111
+ popupsScrollableElement: popupsScrollableElement,
112
+ toolbarSize: toolbarSize,
113
+ isReducedSpacing: isToolbarReducedSpacing,
114
+ editorView: editorView,
115
+ isToolbarDisabled: disabled,
116
+ shouldUseResponsiveToolbar: Boolean(options.responsiveToolbarMenu),
117
+ editorAnalyticsAPI: api === null || api === void 0 ? void 0 : (_api$dependencies$ana6 = api.dependencies.analytics) === null || _api$dependencies$ana6 === void 0 ? void 0 : _api$dependencies$ana6.actions
118
+ });
119
+ }
120
+ });
121
+ },
122
+ actions: {
123
+ toggleSuperscript: (0, _actions.toggleSuperscriptWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana7 = api.dependencies.analytics) === null || _api$dependencies$ana7 === void 0 ? void 0 : _api$dependencies$ana7.actions),
124
+ toggleSubscript: (0, _actions.toggleSubscriptWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana8 = api.dependencies.analytics) === null || _api$dependencies$ana8 === void 0 ? void 0 : _api$dependencies$ana8.actions),
125
+ toggleStrike: (0, _actions.toggleStrikeWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana9 = api.dependencies.analytics) === null || _api$dependencies$ana9 === void 0 ? void 0 : _api$dependencies$ana9.actions),
126
+ toggleCode: (0, _actions.toggleCodeWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana10 = api.dependencies.analytics) === null || _api$dependencies$ana10 === void 0 ? void 0 : _api$dependencies$ana10.actions),
127
+ toggleUnderline: (0, _actions.toggleUnderlineWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana11 = api.dependencies.analytics) === null || _api$dependencies$ana11 === void 0 ? void 0 : _api$dependencies$ana11.actions),
128
+ toggleEm: (0, _actions.toggleEmWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana12 = api.dependencies.analytics) === null || _api$dependencies$ana12 === void 0 ? void 0 : _api$dependencies$ana12.actions),
129
+ toggleStrong: (0, _actions.toggleStrongWithAnalytics)(api === null || api === void 0 ? void 0 : (_api$dependencies$ana13 = api.dependencies.analytics) === null || _api$dependencies$ana13 === void 0 ? void 0 : _api$dependencies$ana13.actions)
130
+ }
131
+ };
132
+ };
133
+ exports.textFormattingPlugin = textFormattingPlugin;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ exports.keymapPlugin = keymapPlugin;
9
+ var _analytics = require("@atlaskit/editor-common/analytics");
10
+ var keymaps = _interopRequireWildcard(require("@atlaskit/editor-common/keymaps"));
11
+ var _keymap = require("@atlaskit/editor-prosemirror/keymap");
12
+ var _clearFormatting = require("../commands/clear-formatting");
13
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ function keymapPlugin(editorAnalyticsAPI) {
16
+ var list = {};
17
+ keymaps.bindKeymapWithCommand(keymaps.clearFormatting.common, (0, _clearFormatting.clearFormattingWithAnalytics)(_analytics.INPUT_METHOD.SHORTCUT, editorAnalyticsAPI), list);
18
+ return (0, _keymap.keymap)(list);
19
+ }
20
+ var _default = keymapPlugin;
21
+ exports.default = _default;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pluginKey = exports.plugin = void 0;
7
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
8
+ var _state = require("@atlaskit/editor-prosemirror/state");
9
+ var _utils = require("../utils");
10
+ var pluginKey = new _state.PluginKey('clearFormattingPlugin');
11
+ exports.pluginKey = pluginKey;
12
+ var plugin = function plugin(dispatch) {
13
+ return new _safePlugin.SafePlugin({
14
+ state: {
15
+ init: function init(_config, state) {
16
+ return {
17
+ formattingIsPresent: (0, _utils.checkFormattingIsPresent)(state)
18
+ };
19
+ },
20
+ apply: function apply(_tr, pluginState, _oldState, newState) {
21
+ var formattingIsPresent = (0, _utils.checkFormattingIsPresent)(newState);
22
+ if (formattingIsPresent !== pluginState.formattingIsPresent) {
23
+ dispatch(pluginKey, {
24
+ formattingIsPresent: formattingIsPresent
25
+ });
26
+ return {
27
+ formattingIsPresent: formattingIsPresent
28
+ };
29
+ }
30
+ return pluginState;
31
+ }
32
+ },
33
+ key: pluginKey
34
+ });
35
+ };
36
+ exports.plugin = plugin;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
8
+ var _state = require("@atlaskit/editor-prosemirror/state");
9
+ var _default = new _safePlugin.SafePlugin({
10
+ props: {
11
+ handleClick: function handleClick(view, clickPos, event) {
12
+ // Don't apply in Edge as per ED-4546
13
+ if (navigator && /Edge\/\d/.test(navigator.userAgent)) {
14
+ return false;
15
+ }
16
+
17
+ // @see ED-6231
18
+ if (clickPos > view.state.doc.content.size) {
19
+ return false;
20
+ }
21
+ var code = view.state.schema.marks.code;
22
+ var paragraph = view.state.schema.nodes.paragraph;
23
+ var $click = view.state.doc.resolve(clickPos);
24
+ var clickWasAtEdgeOfATextNode = ($click.nodeBefore ? $click.nodeBefore.isInline : $click.nodeAfter) && ($click.nodeAfter ? $click.nodeAfter.isInline : $click.nodeBefore) && $click.textOffset === 0;
25
+ var clickWasNearACodeMark = code && ($click.nodeBefore && code.isInSet($click.nodeBefore.marks) || $click.nodeAfter && code.isInSet($click.nodeAfter.marks));
26
+
27
+ // Find the starting position of the clicked dom-element
28
+ // TODO: Remove calls to private API
29
+ var clickedDOMElementPosition = event.target && event.target instanceof Node && view.posAtDOM(event.target);
30
+ var clickNode = view.state.doc.nodeAt(clickPos);
31
+ var clickWasAtTextNode = !!(clickNode && clickNode.isText);
32
+ var clickWasAtEndOfAParagraphNode = $click.parent.type === paragraph && $click.textOffset === 0 && $click.nodeAfter === null;
33
+ if (clickWasAtEdgeOfATextNode && clickWasNearACodeMark && clickedDOMElementPosition && (
34
+ // if click did not occur at a text node or end of paragraph, then
35
+ // it was at a directly adjacent non-text node, so we skip this manual
36
+ // text selection logic to preserve that non-text node's selection
37
+ clickWasAtTextNode || clickWasAtEndOfAParagraphNode)) {
38
+ var clickWasInsideNodeDOM = event.target.parentNode === view.domAtPos(clickedDOMElementPosition).node && code.isInSet(view.state.doc.resolve(clickedDOMElementPosition).nodeAfter.marks);
39
+ var nodeNextToClick = $click.nodeBefore && code.isInSet($click.nodeBefore.marks) ? $click.nodeAfter : $click.nodeBefore;
40
+
41
+ // Need to set the selection here to allow clicking between [code('text'),{<>},emoji()]
42
+ var tr = view.state.tr.setSelection(_state.TextSelection.near($click));
43
+ if (clickWasInsideNodeDOM) {
44
+ tr.setStoredMarks([code.create()]);
45
+ } else {
46
+ tr.setStoredMarks(nodeNextToClick ? nodeNextToClick.marks : []);
47
+ }
48
+ view.dispatch(tr);
49
+ return true;
50
+ }
51
+ return false;
52
+ }
53
+ }
54
+ });
55
+ exports.default = _default;
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.codeRegex = exports.ValidCombinations = void 0;
8
+ exports.inputRulePlugin = inputRulePlugin;
9
+ exports.strongRegex2 = exports.strongRegex1 = exports.strikeRegex = exports.italicRegex2 = exports.italicRegex1 = void 0;
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
16
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
18
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
+ var _analytics = require("@atlaskit/editor-common/analytics");
20
+ var _mark = require("@atlaskit/editor-common/mark");
21
+ var _utils = require("@atlaskit/editor-common/utils");
22
+ var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
23
+ var _ValidCombinations;
24
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
25
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
26
+ var ValidAutoformatChars = /*#__PURE__*/function (ValidAutoformatChars) {
27
+ ValidAutoformatChars["STRONG"] = "__";
28
+ ValidAutoformatChars["STRIKE"] = "~~";
29
+ ValidAutoformatChars["STRONG_MARKDOWN"] = "**";
30
+ ValidAutoformatChars["ITALIC_MARKDOWN"] = "*";
31
+ ValidAutoformatChars["ITALIC"] = "_";
32
+ ValidAutoformatChars["CODE"] = "`";
33
+ return ValidAutoformatChars;
34
+ }(ValidAutoformatChars || {});
35
+ var ValidCombinations = (_ValidCombinations = {}, (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.STRIKE, [
36
+ // e.g: _~~lol~~_
37
+ ValidAutoformatChars.ITALIC,
38
+ // e.g: __~~lol~~__
39
+ ValidAutoformatChars.STRONG,
40
+ // e.g: **~~lol~~**
41
+ ValidAutoformatChars.STRONG_MARKDOWN,
42
+ // e.g: *~~lol~~*
43
+ ValidAutoformatChars.ITALIC_MARKDOWN]), (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.STRONG, [
44
+ // e.g: ~~__lol__~~
45
+ ValidAutoformatChars.STRIKE,
46
+ // e.g: *__lol__*
47
+ ValidAutoformatChars.ITALIC_MARKDOWN]), (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.STRONG_MARKDOWN, [
48
+ // e.g: _**lol**_
49
+ ValidAutoformatChars.ITALIC,
50
+ // e.g: ~~**lol**~~
51
+ ValidAutoformatChars.STRIKE]), (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.ITALIC_MARKDOWN, [
52
+ // e.g: ~~*lol*~~
53
+ ValidAutoformatChars.STRIKE,
54
+ // e.g: __*lol*__
55
+ ValidAutoformatChars.STRONG]), (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.ITALIC, [
56
+ // e.g: ~~_lol_~~
57
+ ValidAutoformatChars.STRIKE,
58
+ // e.g: **_lol_**
59
+ ValidAutoformatChars.STRONG_MARKDOWN]), (0, _defineProperty2.default)(_ValidCombinations, ValidAutoformatChars.CODE, [
60
+ // e.g: loko (`some code`
61
+ '( ']), _ValidCombinations);
62
+ exports.ValidCombinations = ValidCombinations;
63
+ function addMark(markType, schema, char) {
64
+ return function (state, match, start, end) {
65
+ var _schema$marks, _schema$marks$code;
66
+ var doc = state.doc,
67
+ schema = state.schema,
68
+ tr = state.tr;
69
+ var textPrefix = state.doc.textBetween(start, start + char.length);
70
+
71
+ // fixes the following case: my `*name` is *
72
+ // expected result: should ignore special characters inside "code"
73
+ if (textPrefix !== char || schema !== null && schema !== void 0 && (_schema$marks = schema.marks) !== null && _schema$marks !== void 0 && (_schema$marks$code = _schema$marks.code) !== null && _schema$marks$code !== void 0 && _schema$marks$code.isInSet(doc.resolve(start + 1).marks())) {
74
+ return null;
75
+ }
76
+
77
+ // Prevent autoformatting across hardbreaks
78
+ var containsHardBreak;
79
+ doc.nodesBetween(start, end, function (node) {
80
+ if (node.type === schema.nodes.hardBreak) {
81
+ containsHardBreak = true;
82
+ return false;
83
+ }
84
+ return !containsHardBreak;
85
+ });
86
+ if (containsHardBreak) {
87
+ return null;
88
+ }
89
+
90
+ // fixes autoformatting in heading nodes: # Heading *bold*
91
+ // expected result: should not autoformat *bold*; <h1>Heading *bold*</h1>
92
+ var startPosResolved = doc.resolve(start);
93
+ var endPosResolved = doc.resolve(end);
94
+ if (startPosResolved.sameParent(endPosResolved) && !startPosResolved.parent.type.allowsMarkType(markType)) {
95
+ return null;
96
+ }
97
+ if (markType.name === 'code') {
98
+ (0, _mark.transformSmartCharsMentionsAndEmojis)(tr.mapping.map(start), tr.mapping.map(end), tr);
99
+ }
100
+ var mappedStart = tr.mapping.map(start);
101
+ var mappedEnd = tr.mapping.map(end);
102
+ tr.addMark(mappedStart, mappedEnd, markType.create());
103
+ var textSuffix = tr.doc.textBetween(mappedEnd - char.length, mappedEnd);
104
+ if (textSuffix === char) {
105
+ tr.delete(mappedEnd - char.length, mappedEnd);
106
+ }
107
+ if (textPrefix === char) {
108
+ tr.delete(mappedStart, mappedStart + char.length);
109
+ }
110
+ return tr.removeStoredMark(markType);
111
+ };
112
+ }
113
+ var ReverseRegexExp = /*#__PURE__*/function (_RegExp) {
114
+ (0, _inherits2.default)(ReverseRegexExp, _RegExp);
115
+ var _super = _createSuper(ReverseRegexExp);
116
+ function ReverseRegexExp() {
117
+ (0, _classCallCheck2.default)(this, ReverseRegexExp);
118
+ return _super.apply(this, arguments);
119
+ }
120
+ (0, _createClass2.default)(ReverseRegexExp, [{
121
+ key: "exec",
122
+ value: function exec(str) {
123
+ if (!str) {
124
+ return null;
125
+ }
126
+ var reverseStr = (0, _toConsumableArray2.default)(str).reverse().join('');
127
+ var result = (0, _get2.default)((0, _getPrototypeOf2.default)(ReverseRegexExp.prototype), "exec", this).call(this, reverseStr);
128
+ if (!result) {
129
+ return null;
130
+ }
131
+ for (var i = 0; i < result.length; i++) {
132
+ if (result[i] && typeof result[i] === 'string') {
133
+ result[i] = (0, _toConsumableArray2.default)(result[i]).reverse().join('');
134
+ }
135
+ }
136
+ if (result.input && typeof result.input === 'string') {
137
+ result.input = (0, _toConsumableArray2.default)(result.input).reverse().join('');
138
+ }
139
+ if (result.input && result[0]) {
140
+ result.index = result.input.length - result[0].length;
141
+ }
142
+ return result;
143
+ }
144
+ }]);
145
+ return ReverseRegexExp;
146
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(RegExp));
147
+ var buildRegex = function buildRegex(char) {
148
+ var escapedChar = char.replace(/(\W)/g, '\\$1');
149
+ var combinations = ValidCombinations[char].map(function (c) {
150
+ return c.replace(/(\W)/g, '\\$1');
151
+ }).join('|');
152
+
153
+ // Single X - https://regex101.com/r/McT3yq/14/
154
+ // Double X - https://regex101.com/r/pQUgjx/1/
155
+ var baseRegex = '^X(?=[^X\\s]).*?[^\\sX]X(?=[\\sOBJECT_REPLACEMENT_CHARACTER]COMBINATIONS|$)'.replace('OBJECT_REPLACEMENT_CHARACTER', _prosemirrorInputRules.leafNodeReplacementCharacter).replace('COMBINATIONS', combinations ? "|".concat(combinations) : '');
156
+ var replacedRegex = String.prototype.hasOwnProperty('replaceAll') ? baseRegex.replaceAll('X', escapedChar) : baseRegex.replace(/X/g, escapedChar);
157
+ return new ReverseRegexExp(replacedRegex);
158
+ };
159
+ var strongRegex1 = buildRegex(ValidAutoformatChars.STRONG);
160
+ exports.strongRegex1 = strongRegex1;
161
+ var strongRegex2 = buildRegex(ValidAutoformatChars.STRONG_MARKDOWN);
162
+ exports.strongRegex2 = strongRegex2;
163
+ var italicRegex1 = buildRegex(ValidAutoformatChars.ITALIC);
164
+ exports.italicRegex1 = italicRegex1;
165
+ var italicRegex2 = buildRegex(ValidAutoformatChars.ITALIC_MARKDOWN);
166
+ exports.italicRegex2 = italicRegex2;
167
+ var strikeRegex = buildRegex(ValidAutoformatChars.STRIKE);
168
+ exports.strikeRegex = strikeRegex;
169
+ var codeRegex = buildRegex(ValidAutoformatChars.CODE);
170
+
171
+ /**
172
+ * Create input rules for strong mark
173
+ *
174
+ * @param {Schema} schema
175
+ * @returns {InputRuleWrapper[]}
176
+ */
177
+ exports.codeRegex = codeRegex;
178
+ function getStrongInputRules(schema, editorAnalyticsAPI) {
179
+ var ruleWithStrongAnalytics = (0, _utils.inputRuleWithAnalytics)({
180
+ action: _analytics.ACTION.FORMATTED,
181
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
182
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_STRONG,
183
+ eventType: _analytics.EVENT_TYPE.TRACK,
184
+ attributes: {
185
+ inputMethod: _analytics.INPUT_METHOD.FORMATTING
186
+ }
187
+ }, editorAnalyticsAPI);
188
+ // **string** or __strong__ should bold the text
189
+ var doubleUnderscoreRule = (0, _prosemirrorInputRules.createRule)(strongRegex1, addMark(schema.marks.strong, schema, ValidAutoformatChars.STRONG));
190
+ var doubleAsterixRule = (0, _prosemirrorInputRules.createRule)(strongRegex2, addMark(schema.marks.strong, schema, ValidAutoformatChars.STRONG_MARKDOWN));
191
+ return [ruleWithStrongAnalytics(doubleUnderscoreRule), ruleWithStrongAnalytics(doubleAsterixRule)];
192
+ }
193
+
194
+ /**
195
+ * Create input rules for em mark
196
+ *
197
+ * @param {Schema} schema
198
+ * @returns {InputRuleWrapper[]}
199
+ */
200
+ function getItalicInputRules(schema, editorAnalyticsAPI) {
201
+ var ruleWithItalicAnalytics = (0, _utils.inputRuleWithAnalytics)({
202
+ action: _analytics.ACTION.FORMATTED,
203
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
204
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_ITALIC,
205
+ eventType: _analytics.EVENT_TYPE.TRACK,
206
+ attributes: {
207
+ inputMethod: _analytics.INPUT_METHOD.FORMATTING
208
+ }
209
+ }, editorAnalyticsAPI);
210
+ var underscoreRule = (0, _prosemirrorInputRules.createRule)(italicRegex1, addMark(schema.marks.em, schema, ValidAutoformatChars.ITALIC));
211
+ var asterixRule = (0, _prosemirrorInputRules.createRule)(italicRegex2, addMark(schema.marks.em, schema, ValidAutoformatChars.ITALIC_MARKDOWN));
212
+ return [ruleWithItalicAnalytics(underscoreRule), ruleWithItalicAnalytics(asterixRule)];
213
+ }
214
+
215
+ /**
216
+ * Create input rules for strike mark
217
+ *
218
+ * @param {Schema} schema
219
+ * @returns {InputRuleWrapper[]}
220
+ */
221
+ function getStrikeInputRules(schema, editorAnalyticsAPI) {
222
+ var ruleWithStrikeAnalytics = (0, _utils.inputRuleWithAnalytics)({
223
+ action: _analytics.ACTION.FORMATTED,
224
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
225
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_STRIKE,
226
+ eventType: _analytics.EVENT_TYPE.TRACK,
227
+ attributes: {
228
+ inputMethod: _analytics.INPUT_METHOD.FORMATTING
229
+ }
230
+ }, editorAnalyticsAPI);
231
+ var doubleTildeRule = (0, _prosemirrorInputRules.createRule)(strikeRegex, addMark(schema.marks.strike, schema, ValidAutoformatChars.STRIKE));
232
+ return [ruleWithStrikeAnalytics(doubleTildeRule)];
233
+ }
234
+
235
+ /**
236
+ * Create input rules for code mark
237
+ *
238
+ * @param {Schema} schema
239
+ * @returns {InputRuleWrapper[]}
240
+ */
241
+ function getCodeInputRules(schema, editorAnalyticsAPI) {
242
+ var ruleWithCodeAnalytics = (0, _utils.inputRuleWithAnalytics)({
243
+ action: _analytics.ACTION.FORMATTED,
244
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
245
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_CODE,
246
+ eventType: _analytics.EVENT_TYPE.TRACK,
247
+ attributes: {
248
+ inputMethod: _analytics.INPUT_METHOD.FORMATTING
249
+ }
250
+ }, editorAnalyticsAPI);
251
+ var backTickRule = (0, _prosemirrorInputRules.createRule)(codeRegex, addMark(schema.marks.code, schema, ValidAutoformatChars.CODE));
252
+ return [ruleWithCodeAnalytics(backTickRule)];
253
+ }
254
+ function inputRulePlugin(schema, editorAnalyticsAPI) {
255
+ var rules = [];
256
+ if (schema.marks.strong) {
257
+ rules.push.apply(rules, (0, _toConsumableArray2.default)(getStrongInputRules(schema, editorAnalyticsAPI)));
258
+ }
259
+ if (schema.marks.em) {
260
+ rules.push.apply(rules, (0, _toConsumableArray2.default)(getItalicInputRules(schema, editorAnalyticsAPI)));
261
+ }
262
+ if (schema.marks.strike) {
263
+ rules.push.apply(rules, (0, _toConsumableArray2.default)(getStrikeInputRules(schema, editorAnalyticsAPI)));
264
+ }
265
+ if (schema.marks.code) {
266
+ rules.push.apply(rules, (0, _toConsumableArray2.default)(getCodeInputRules(schema, editorAnalyticsAPI)));
267
+ }
268
+ if (rules.length !== 0) {
269
+ return (0, _prosemirrorInputRules.createPlugin)('text-formatting', rules);
270
+ }
271
+ return;
272
+ }
273
+ var _default = inputRulePlugin;
274
+ exports.default = _default;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = keymapPlugin;
8
+ var _analytics = require("@atlaskit/editor-common/analytics");
9
+ var keymaps = _interopRequireWildcard(require("@atlaskit/editor-common/keymaps"));
10
+ var _keymap = require("@atlaskit/editor-prosemirror/keymap");
11
+ var _actions = require("../actions");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ function keymapPlugin(schema, editorAnalyticsAPI) {
15
+ var list = {};
16
+ if (schema.marks.strong) {
17
+ keymaps.bindKeymapWithCommand(keymaps.toggleBold.common, (0, _actions.toggleStrongWithAnalytics)(editorAnalyticsAPI)({
18
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
19
+ }), list);
20
+ }
21
+ if (schema.marks.em) {
22
+ keymaps.bindKeymapWithCommand(keymaps.toggleItalic.common, (0, _actions.toggleEmWithAnalytics)(editorAnalyticsAPI)({
23
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
24
+ }), list);
25
+ }
26
+ if (schema.marks.code) {
27
+ keymaps.bindKeymapWithCommand(keymaps.toggleCode.common, (0, _actions.toggleCodeWithAnalytics)(editorAnalyticsAPI)({
28
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
29
+ }), list);
30
+ }
31
+ if (schema.marks.strike) {
32
+ keymaps.bindKeymapWithCommand(keymaps.toggleStrikethrough.common, (0, _actions.toggleStrikeWithAnalytics)(editorAnalyticsAPI)({
33
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
34
+ }), list);
35
+ }
36
+ if (schema.marks.subsup) {
37
+ keymaps.bindKeymapWithCommand(keymaps.toggleSubscript.common, (0, _actions.toggleSubscriptWithAnalytics)(editorAnalyticsAPI)({
38
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
39
+ }), list);
40
+ }
41
+ if (schema.marks.subsup) {
42
+ keymaps.bindKeymapWithCommand(keymaps.toggleSuperscript.common, (0, _actions.toggleSuperscriptWithAnalytics)(editorAnalyticsAPI)({
43
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
44
+ }), list);
45
+ }
46
+ if (schema.marks.underline) {
47
+ keymaps.bindKeymapWithCommand(keymaps.toggleUnderline.common, (0, _actions.toggleUnderlineWithAnalytics)(editorAnalyticsAPI)({
48
+ inputMethod: _analytics.INPUT_METHOD.SHORTCUT
49
+ }), list);
50
+ }
51
+ return (0, _keymap.keymap)(list);
52
+ }