@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
package/.eslintrc.js ADDED
@@ -0,0 +1,7 @@
1
+ module.exports = {
2
+ rules: {
3
+ '@typescript-eslint/consistent-type-imports': 'warn',
4
+ 'no-duplicate-imports': 'off',
5
+ '@typescript-eslint/no-duplicate-imports': 'error',
6
+ },
7
+ };
package/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ # @atlaskit/editor-plugin-text-formatting
package/LICENSE.md ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Atlassian Pty Ltd
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # EditorPluginTextFormatting
2
+
3
+ Text-formatting plugin for @atlaskit/editor-core
4
+
5
+ ## Usage
6
+
7
+ `import EditorPluginTextFormatting from '@atlaskit/editor-plugin-text-formatting';`
8
+
9
+ Detailed docs and example usage can be found [here](https://atlaskit.atlassian.com/packages/editor/editor-plugin-text-formatting).
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toggleUnderlineWithAnalytics = exports.toggleUnderline = exports.toggleSuperscriptWithAnalytics = exports.toggleSuperscript = exports.toggleSubscriptWithAnalytics = exports.toggleSubscript = exports.toggleStrongWithAnalytics = exports.toggleStrong = exports.toggleStrikeWithAnalytics = exports.toggleStrike = exports.toggleEmWithAnalytics = exports.toggleEm = exports.toggleCodeWithAnalytics = exports.toggleCode = void 0;
7
+ var _analytics = require("@atlaskit/editor-common/analytics");
8
+ var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
9
+ var _mark = require("@atlaskit/editor-common/mark");
10
+ var toggleEm = function toggleEm() {
11
+ return function (state, dispatch) {
12
+ var em = state.schema.marks.em;
13
+ if (em) {
14
+ return (0, _mark.toggleMark)(em)(state, dispatch);
15
+ }
16
+ return false;
17
+ };
18
+ };
19
+ exports.toggleEm = toggleEm;
20
+ var toggleEmWithAnalytics = function toggleEmWithAnalytics(editorAnalyticsAPI) {
21
+ return function (_ref) {
22
+ var inputMethod = _ref.inputMethod;
23
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
24
+ action: _analytics.ACTION.FORMATTED,
25
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
26
+ eventType: _analytics.EVENT_TYPE.TRACK,
27
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_ITALIC,
28
+ attributes: {
29
+ inputMethod: inputMethod
30
+ }
31
+ })(toggleEm());
32
+ };
33
+ };
34
+ exports.toggleEmWithAnalytics = toggleEmWithAnalytics;
35
+ var toggleStrike = function toggleStrike() {
36
+ return function (state, dispatch) {
37
+ var strike = state.schema.marks.strike;
38
+ if (strike) {
39
+ return (0, _mark.toggleMark)(strike)(state, dispatch);
40
+ }
41
+ return false;
42
+ };
43
+ };
44
+ exports.toggleStrike = toggleStrike;
45
+ var toggleStrikeWithAnalytics = function toggleStrikeWithAnalytics(editorAnalyticsAPI) {
46
+ return function (_ref2) {
47
+ var inputMethod = _ref2.inputMethod;
48
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
49
+ action: _analytics.ACTION.FORMATTED,
50
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
51
+ eventType: _analytics.EVENT_TYPE.TRACK,
52
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_STRIKE,
53
+ attributes: {
54
+ inputMethod: inputMethod
55
+ }
56
+ })(toggleStrike());
57
+ };
58
+ };
59
+ exports.toggleStrikeWithAnalytics = toggleStrikeWithAnalytics;
60
+ var toggleStrong = function toggleStrong() {
61
+ return function (state, dispatch) {
62
+ var strong = state.schema.marks.strong;
63
+ if (strong) {
64
+ return (0, _mark.toggleMark)(strong)(state, dispatch);
65
+ }
66
+ return false;
67
+ };
68
+ };
69
+ exports.toggleStrong = toggleStrong;
70
+ var toggleStrongWithAnalytics = function toggleStrongWithAnalytics(editorAnalyticsAPI) {
71
+ return function (_ref3) {
72
+ var inputMethod = _ref3.inputMethod;
73
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
74
+ action: _analytics.ACTION.FORMATTED,
75
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
76
+ eventType: _analytics.EVENT_TYPE.TRACK,
77
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_STRONG,
78
+ attributes: {
79
+ inputMethod: inputMethod
80
+ }
81
+ })(toggleStrong());
82
+ };
83
+ };
84
+ exports.toggleStrongWithAnalytics = toggleStrongWithAnalytics;
85
+ var toggleUnderline = function toggleUnderline() {
86
+ return function (state, dispatch) {
87
+ var underline = state.schema.marks.underline;
88
+ if (underline) {
89
+ return (0, _mark.toggleMark)(underline)(state, dispatch);
90
+ }
91
+ return false;
92
+ };
93
+ };
94
+ exports.toggleUnderline = toggleUnderline;
95
+ var toggleUnderlineWithAnalytics = function toggleUnderlineWithAnalytics(editorAnalyticsAPI) {
96
+ return function (_ref4) {
97
+ var inputMethod = _ref4.inputMethod;
98
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
99
+ action: _analytics.ACTION.FORMATTED,
100
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
101
+ eventType: _analytics.EVENT_TYPE.TRACK,
102
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_UNDERLINE,
103
+ attributes: {
104
+ inputMethod: inputMethod
105
+ }
106
+ })(toggleUnderline());
107
+ };
108
+ };
109
+ exports.toggleUnderlineWithAnalytics = toggleUnderlineWithAnalytics;
110
+ var toggleSuperscript = function toggleSuperscript() {
111
+ return function (state, dispatch) {
112
+ var subsup = state.schema.marks.subsup;
113
+ if (subsup) {
114
+ return (0, _mark.toggleMark)(subsup, {
115
+ type: 'sup'
116
+ })(state, dispatch);
117
+ }
118
+ return false;
119
+ };
120
+ };
121
+ exports.toggleSuperscript = toggleSuperscript;
122
+ var toggleSuperscriptWithAnalytics = function toggleSuperscriptWithAnalytics(editorAnalyticsAPI) {
123
+ return function (_ref5) {
124
+ var inputMethod = _ref5.inputMethod;
125
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
126
+ action: _analytics.ACTION.FORMATTED,
127
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
128
+ eventType: _analytics.EVENT_TYPE.TRACK,
129
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_SUPER,
130
+ attributes: {
131
+ inputMethod: inputMethod
132
+ }
133
+ })(toggleSuperscript());
134
+ };
135
+ };
136
+ exports.toggleSuperscriptWithAnalytics = toggleSuperscriptWithAnalytics;
137
+ var toggleSubscript = function toggleSubscript() {
138
+ return function (state, dispatch) {
139
+ var subsup = state.schema.marks.subsup;
140
+ if (subsup) {
141
+ return (0, _mark.toggleMark)(subsup, {
142
+ type: 'sub'
143
+ })(state, dispatch);
144
+ }
145
+ return false;
146
+ };
147
+ };
148
+ exports.toggleSubscript = toggleSubscript;
149
+ var toggleSubscriptWithAnalytics = function toggleSubscriptWithAnalytics(editorAnalyticsAPI) {
150
+ return function (_ref6) {
151
+ var inputMethod = _ref6.inputMethod;
152
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
153
+ action: _analytics.ACTION.FORMATTED,
154
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
155
+ eventType: _analytics.EVENT_TYPE.TRACK,
156
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_SUB,
157
+ attributes: {
158
+ inputMethod: inputMethod
159
+ }
160
+ })(toggleSubscript());
161
+ };
162
+ };
163
+ exports.toggleSubscriptWithAnalytics = toggleSubscriptWithAnalytics;
164
+ var toggleCode = function toggleCode() {
165
+ return function (state, dispatch) {
166
+ var code = state.schema.marks.code;
167
+ if (code) {
168
+ return (0, _mark.toggleMark)(code)(state, dispatch);
169
+ }
170
+ return false;
171
+ };
172
+ };
173
+ exports.toggleCode = toggleCode;
174
+ var toggleCodeWithAnalytics = function toggleCodeWithAnalytics(editorAnalyticsAPI) {
175
+ return function (_ref7) {
176
+ var inputMethod = _ref7.inputMethod;
177
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
178
+ action: _analytics.ACTION.FORMATTED,
179
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
180
+ eventType: _analytics.EVENT_TYPE.TRACK,
181
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_CODE,
182
+ attributes: {
183
+ inputMethod: inputMethod
184
+ }
185
+ })(toggleCode());
186
+ };
187
+ };
188
+ exports.toggleCodeWithAnalytics = toggleCodeWithAnalytics;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FORMATTING_NODE_TYPES = exports.FORMATTING_MARK_TYPES = void 0;
7
+ exports.clearFormatting = clearFormatting;
8
+ exports.clearFormattingWithAnalytics = clearFormattingWithAnalytics;
9
+ var _analytics = require("@atlaskit/editor-common/analytics");
10
+ var _transform = require("@atlaskit/editor-prosemirror/transform");
11
+ var _cellSelection = require("@atlaskit/editor-tables/cell-selection");
12
+ var _cellSelection2 = require("../utils/cell-selection");
13
+ var FORMATTING_NODE_TYPES = ['heading', 'blockquote'];
14
+ exports.FORMATTING_NODE_TYPES = FORMATTING_NODE_TYPES;
15
+ var FORMATTING_MARK_TYPES = ['em', 'code', 'strike', 'strong', 'underline', 'textColor', 'subsup'];
16
+ exports.FORMATTING_MARK_TYPES = FORMATTING_MARK_TYPES;
17
+ var formatTypes = {
18
+ em: _analytics.ACTION_SUBJECT_ID.FORMAT_ITALIC,
19
+ code: _analytics.ACTION_SUBJECT_ID.FORMAT_CODE,
20
+ strike: _analytics.ACTION_SUBJECT_ID.FORMAT_STRIKE,
21
+ strong: _analytics.ACTION_SUBJECT_ID.FORMAT_STRONG,
22
+ underline: _analytics.ACTION_SUBJECT_ID.FORMAT_UNDERLINE,
23
+ textColor: _analytics.ACTION_SUBJECT_ID.FORMAT_COLOR,
24
+ subsup: 'subsup'
25
+ };
26
+ function clearFormattingWithAnalytics(inputMethod, editorAnalyticsAPI) {
27
+ return clearFormatting(inputMethod, editorAnalyticsAPI);
28
+ }
29
+ function clearNodeFormattingOnSelection(state, tr, formattedNodeType, nodeName, formattingCleared) {
30
+ return function (node, pos) {
31
+ if (node.type === formattedNodeType) {
32
+ if (formattedNodeType.isTextblock) {
33
+ tr.setNodeMarkup(pos, state.schema.nodes.paragraph);
34
+ formattingCleared.push(nodeName);
35
+ return false;
36
+ } else {
37
+ // In case of panel or blockquote
38
+ var fromPos = tr.doc.resolve(pos + 1);
39
+ var toPos = tr.doc.resolve(pos + node.nodeSize - 1);
40
+ var nodeRange = fromPos.blockRange(toPos);
41
+ if (nodeRange) {
42
+ var targetLiftDepth = (0, _transform.liftTarget)(nodeRange);
43
+ if (targetLiftDepth || targetLiftDepth === 0) {
44
+ formattingCleared.push(nodeName);
45
+ tr.lift(nodeRange, targetLiftDepth);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return true;
51
+ };
52
+ }
53
+ function clearFormatting(inputMethod, editorAnalyticsAPI) {
54
+ return function (state, dispatch) {
55
+ var tr = state.tr;
56
+ var formattingCleared = [];
57
+ FORMATTING_MARK_TYPES.forEach(function (mark) {
58
+ var _tr$selection = tr.selection,
59
+ from = _tr$selection.from,
60
+ to = _tr$selection.to;
61
+ var markType = state.schema.marks[mark];
62
+ if (!markType) {
63
+ return;
64
+ }
65
+ if (tr.selection instanceof _cellSelection.CellSelection) {
66
+ (0, _cellSelection2.cellSelectionNodesBetween)(tr.selection, tr.doc, function (node, pos) {
67
+ var isTableCell = node.type === state.schema.nodes.tableCell || node.type === state.schema.nodes.tableHeader;
68
+ if (!isTableCell) {
69
+ return true;
70
+ }
71
+ if (tr.doc.rangeHasMark(pos, pos + node.nodeSize, markType)) {
72
+ formattingCleared.push(formatTypes[mark]);
73
+ tr.removeMark(pos, pos + node.nodeSize, markType);
74
+ }
75
+ return false;
76
+ });
77
+ } else if (tr.doc.rangeHasMark(from, to, markType)) {
78
+ formattingCleared.push(formatTypes[mark]);
79
+ tr.removeMark(from, to, markType);
80
+ }
81
+ });
82
+ FORMATTING_NODE_TYPES.forEach(function (nodeName) {
83
+ var formattedNodeType = state.schema.nodes[nodeName];
84
+ var _tr$selection2 = tr.selection,
85
+ $from = _tr$selection2.$from,
86
+ $to = _tr$selection2.$to;
87
+ if (tr.selection instanceof _cellSelection.CellSelection) {
88
+ (0, _cellSelection2.cellSelectionNodesBetween)(tr.selection, tr.doc, clearNodeFormattingOnSelection(state, tr, formattedNodeType, nodeName, formattingCleared));
89
+ } else {
90
+ tr.doc.nodesBetween($from.pos, $to.pos, clearNodeFormattingOnSelection(state, tr, formattedNodeType, nodeName, formattingCleared));
91
+ }
92
+ });
93
+ tr.setStoredMarks([]);
94
+ if (formattingCleared.length && inputMethod) {
95
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
96
+ action: _analytics.ACTION.FORMATTED,
97
+ eventType: _analytics.EVENT_TYPE.TRACK,
98
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
99
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_CLEAR,
100
+ attributes: {
101
+ inputMethod: inputMethod,
102
+ formattingCleared: formattingCleared
103
+ }
104
+ })(tr);
105
+ }
106
+ if (dispatch) {
107
+ dispatch(tr);
108
+ }
109
+ return true;
110
+ };
111
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.moveRight = exports.moveLeft = exports.createInlineCodeFromTextInputWithAnalytics = void 0;
7
+ var _analytics = require("@atlaskit/editor-common/analytics");
8
+ var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
9
+ var _mark = require("@atlaskit/editor-common/mark");
10
+ var _state = require("@atlaskit/editor-prosemirror/state");
11
+ var _utils = require("../utils");
12
+ var moveRight = function moveRight() {
13
+ return function (state, dispatch) {
14
+ var code = state.schema.marks.code;
15
+ var _ref = state.selection,
16
+ empty = _ref.empty,
17
+ $cursor = _ref.$cursor;
18
+ if (!empty || !$cursor) {
19
+ return false;
20
+ }
21
+ var storedMarks = state.tr.storedMarks;
22
+ if (code) {
23
+ var insideCode = (0, _utils.markActive)(state, code.create());
24
+ var currentPosHasCode = state.doc.rangeHasMark($cursor.pos, $cursor.pos, code);
25
+ var nextPosHasCode = state.doc.rangeHasMark($cursor.pos, $cursor.pos + 1, code);
26
+ var exitingCode = !currentPosHasCode && !nextPosHasCode && (!storedMarks || !!storedMarks.length);
27
+ var enteringCode = !currentPosHasCode && nextPosHasCode && (!storedMarks || !storedMarks.length);
28
+
29
+ // entering code mark (from the left edge): don't move the cursor, just add the mark
30
+ if (!insideCode && enteringCode) {
31
+ if (dispatch) {
32
+ dispatch(state.tr.addStoredMark(code.create()));
33
+ }
34
+ return true;
35
+ }
36
+
37
+ // exiting code mark: don't move the cursor, just remove the mark
38
+ if (insideCode && exitingCode) {
39
+ if (dispatch) {
40
+ dispatch(state.tr.removeStoredMark(code));
41
+ }
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ };
47
+ };
48
+ exports.moveRight = moveRight;
49
+ var moveLeft = function moveLeft() {
50
+ return function (state, dispatch) {
51
+ var code = state.schema.marks.code;
52
+ var _ref2 = state.selection,
53
+ empty = _ref2.empty,
54
+ $cursor = _ref2.$cursor;
55
+ if (!empty || !$cursor) {
56
+ return false;
57
+ }
58
+ var storedMarks = state.tr.storedMarks;
59
+ if (code) {
60
+ var insideCode = code && (0, _utils.markActive)(state, code.create());
61
+ var currentPosHasCode = (0, _utils.hasCode)(state, $cursor.pos);
62
+ var nextPosHasCode = (0, _utils.hasCode)(state, $cursor.pos - 1);
63
+ var nextNextPosHasCode = (0, _utils.hasCode)(state, $cursor.pos - 2);
64
+ var exitingCode = currentPosHasCode && !nextPosHasCode && Array.isArray(storedMarks);
65
+ var atLeftEdge = nextPosHasCode && !nextNextPosHasCode && (storedMarks === null || Array.isArray(storedMarks) && !!storedMarks.length);
66
+ var atRightEdge = (exitingCode && Array.isArray(storedMarks) && !storedMarks.length || !exitingCode && storedMarks === null) && !nextPosHasCode && nextNextPosHasCode;
67
+ var enteringCode = !currentPosHasCode && nextPosHasCode && Array.isArray(storedMarks) && !storedMarks.length;
68
+
69
+ // at the right edge: remove code mark and move the cursor to the left
70
+ if (!insideCode && atRightEdge) {
71
+ var tr = state.tr.setSelection(_state.Selection.near(state.doc.resolve($cursor.pos - 1)));
72
+ if (dispatch) {
73
+ dispatch(tr.removeStoredMark(code));
74
+ }
75
+ return true;
76
+ }
77
+
78
+ // entering code mark (from right edge): don't move the cursor, just add the mark
79
+ if (!insideCode && enteringCode) {
80
+ if (dispatch) {
81
+ dispatch(state.tr.addStoredMark(code.create()));
82
+ }
83
+ return true;
84
+ }
85
+
86
+ // at the left edge: add code mark and move the cursor to the left
87
+ if (insideCode && atLeftEdge) {
88
+ var _tr = state.tr.setSelection(_state.Selection.near(state.doc.resolve($cursor.pos - 1)));
89
+ if (dispatch) {
90
+ dispatch(_tr.addStoredMark(code.create()));
91
+ }
92
+ return true;
93
+ }
94
+
95
+ // exiting code mark (or at the beginning of the line): don't move the cursor, just remove the mark
96
+ var isFirstChild = $cursor.index($cursor.depth - 1) === 0;
97
+ if (insideCode && (exitingCode || !$cursor.nodeBefore && isFirstChild)) {
98
+ if (dispatch) {
99
+ dispatch(state.tr.removeStoredMark(code));
100
+ }
101
+ return true;
102
+ }
103
+ }
104
+ return false;
105
+ };
106
+ };
107
+ exports.moveLeft = moveLeft;
108
+ var createInlineCodeFromTextInput = function createInlineCodeFromTextInput(from, to, text) {
109
+ return function (state, dispatch) {
110
+ if (state.selection.empty) {
111
+ var _state$doc$resolve = state.doc.resolve(from),
112
+ before = _state$doc$resolve.nodeBefore;
113
+ var _state$doc$resolve2 = state.doc.resolve(to),
114
+ after = _state$doc$resolve2.nodeAfter;
115
+ var hasTickBefore = before && before.text && before.text.endsWith('`');
116
+ var hasTickAfter = after && after.text && after.text.startsWith('`');
117
+ if (hasTickBefore && hasTickAfter) {
118
+ var tr = state.tr.replaceRangeWith(from - 1, to + 1, state.schema.text(text));
119
+ if (dispatch) {
120
+ var codeMark = state.schema.marks.code.create();
121
+ tr = (0, _mark.applyMarkOnRange)(tr.mapping.map(from - 1), tr.mapping.map(to + 1), false, codeMark, tr).setStoredMarks([codeMark]);
122
+ dispatch(tr);
123
+ }
124
+ return true;
125
+ }
126
+ }
127
+ return false;
128
+ };
129
+ };
130
+ var createInlineCodeFromTextInputWithAnalytics = function createInlineCodeFromTextInputWithAnalytics(editorAnalyticsAPI) {
131
+ return function (from, to, text) {
132
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
133
+ action: _analytics.ACTION.FORMATTED,
134
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
135
+ eventType: _analytics.EVENT_TYPE.TRACK,
136
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.FORMAT_CODE,
137
+ attributes: {
138
+ inputMethod: _analytics.INPUT_METHOD.FORMATTING
139
+ }
140
+ })(createInlineCodeFromTextInput(from, to, text));
141
+ };
142
+ };
143
+ exports.createInlineCodeFromTextInputWithAnalytics = createInlineCodeFromTextInputWithAnalytics;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformSmartCharsMentionsAndEmojis = void 0;
7
+ var _mark = require("@atlaskit/editor-common/mark");
8
+ var SMART_TO_ASCII = {
9
+ '…': '...',
10
+ '→': '->',
11
+ '←': '<-',
12
+ '–': '--',
13
+ '“': '"',
14
+ '”': '"',
15
+ '‘': "'",
16
+ '’': "'"
17
+ };
18
+ var FIND_SMART_CHAR = new RegExp("[".concat(Object.keys(SMART_TO_ASCII).join(''), "]"), 'g');
19
+ var replaceMentionOrEmojiForTextContent = function replaceMentionOrEmojiForTextContent(position, nodeSize, textContent, tr) {
20
+ var currentPos = tr.mapping.map(position);
21
+ var schema = tr.doc.type.schema;
22
+ tr.replaceWith(currentPos, currentPos + nodeSize, schema.text(textContent));
23
+ };
24
+ var replaceSmartCharsToAscii = function replaceSmartCharsToAscii(position, textContent, tr) {
25
+ var schema = tr.doc.type.schema;
26
+ var match;
27
+ while (match = FIND_SMART_CHAR.exec(textContent)) {
28
+ var _match = match,
29
+ smartChar = _match[0],
30
+ offset = _match.index;
31
+ var replacePos = tr.mapping.map(position + offset);
32
+ var replacementText = schema.text(SMART_TO_ASCII[smartChar]);
33
+ tr.replaceWith(replacePos, replacePos + smartChar.length, replacementText);
34
+ }
35
+ };
36
+ var isNodeTextBlock = function isNodeTextBlock(schema) {
37
+ var _schema$nodes = schema.nodes,
38
+ mention = _schema$nodes.mention,
39
+ text = _schema$nodes.text,
40
+ emoji = _schema$nodes.emoji;
41
+ return function (node, _, parent) {
42
+ if (node.type === mention || node.type === emoji || node.type === text) {
43
+ return parent === null || parent === void 0 ? void 0 : parent.isTextblock;
44
+ }
45
+ return;
46
+ };
47
+ };
48
+ var transformSmartCharsMentionsAndEmojis = function transformSmartCharsMentionsAndEmojis(from, to, tr) {
49
+ var schema = tr.doc.type.schema;
50
+ var _schema$nodes2 = schema.nodes,
51
+ mention = _schema$nodes2.mention,
52
+ text = _schema$nodes2.text,
53
+ emoji = _schema$nodes2.emoji;
54
+ // Traverse through all the nodes within the range and replace them with their plaintext counterpart
55
+ var children = (0, _mark.filterChildrenBetween)(tr.doc, from, to, isNodeTextBlock(schema));
56
+ children.forEach(function (_ref) {
57
+ var node = _ref.node,
58
+ pos = _ref.pos;
59
+ if (node.type === mention || node.type === emoji) {
60
+ replaceMentionOrEmojiForTextContent(pos, node.nodeSize, node.attrs.text, tr);
61
+ } else if (node.type === text && node.text) {
62
+ var replacePosition = pos > from ? pos : from;
63
+ var textToReplace = pos > from ? node.text : node.text.substr(from - pos);
64
+ replaceSmartCharsToAscii(replacePosition, textToReplace, tr);
65
+ }
66
+ });
67
+ };
68
+ exports.transformSmartCharsMentionsAndEmojis = transformSmartCharsMentionsAndEmojis;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "textFormattingPlugin", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _plugin.textFormattingPlugin;
10
+ }
11
+ });
12
+ var _plugin = require("./plugin");