@atlaskit/editor-plugin-code-block 12.1.10 → 12.1.11
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.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/codeBlockPlugin.js +9 -2
- package/dist/cjs/editor-commands/index.js +56 -4
- package/dist/cjs/pm-plugins/actions.js +3 -1
- package/dist/cjs/pm-plugins/auto-detect-state.js +11 -0
- package/dist/cjs/pm-plugins/auto-detect.js +57 -0
- package/dist/cjs/pm-plugins/main.js +1 -1
- package/dist/cjs/pm-plugins/toolbar.js +47 -11
- package/dist/cjs/pm-plugins/utils.js +0 -3
- package/dist/cjs/ui/CodeBlockLanguagePicker.js +15 -8
- package/dist/cjs/ui/LanguagePicker.js +7 -15
- package/dist/cjs/ui/language-picker-options.js +2 -1
- package/dist/cjs/utils/auto-detect-state.js +185 -0
- package/dist/cjs/utils/auto-detect-view.js +127 -0
- package/dist/cjs/utils/language-detect.js +126 -0
- package/dist/es2019/codeBlockPlugin.js +5 -1
- package/dist/es2019/editor-commands/index.js +52 -2
- package/dist/es2019/pm-plugins/actions.js +3 -1
- package/dist/es2019/pm-plugins/auto-detect-state.js +3 -0
- package/dist/es2019/pm-plugins/auto-detect.js +47 -0
- package/dist/es2019/pm-plugins/main.js +1 -1
- package/dist/es2019/pm-plugins/toolbar.js +41 -3
- package/dist/es2019/pm-plugins/utils.js +0 -3
- package/dist/es2019/ui/CodeBlockLanguagePicker.js +15 -8
- package/dist/es2019/ui/LanguagePicker.js +6 -14
- package/dist/es2019/ui/language-picker-options.js +2 -1
- package/dist/es2019/utils/auto-detect-state.js +179 -0
- package/dist/es2019/utils/auto-detect-view.js +108 -0
- package/dist/es2019/utils/language-detect.js +99 -0
- package/dist/esm/codeBlockPlugin.js +9 -2
- package/dist/esm/editor-commands/index.js +55 -3
- package/dist/esm/pm-plugins/actions.js +3 -1
- package/dist/esm/pm-plugins/auto-detect-state.js +5 -0
- package/dist/esm/pm-plugins/auto-detect.js +50 -0
- package/dist/esm/pm-plugins/main.js +1 -1
- package/dist/esm/pm-plugins/toolbar.js +47 -11
- package/dist/esm/pm-plugins/utils.js +0 -3
- package/dist/esm/ui/CodeBlockLanguagePicker.js +15 -8
- package/dist/esm/ui/LanguagePicker.js +7 -15
- package/dist/esm/ui/language-picker-options.js +2 -1
- package/dist/esm/utils/auto-detect-state.js +178 -0
- package/dist/esm/utils/auto-detect-view.js +120 -0
- package/dist/esm/utils/language-detect.js +119 -0
- package/dist/types/editor-commands/index.d.ts +2 -0
- package/dist/types/pm-plugins/actions.d.ts +2 -0
- package/dist/types/pm-plugins/auto-detect-state.d.ts +16 -0
- package/dist/types/pm-plugins/auto-detect.d.ts +5 -0
- package/dist/types/pm-plugins/utils.d.ts +1 -1
- package/dist/types/ui/CodeBlockLanguagePicker.d.ts +7 -1
- package/dist/types/ui/LanguagePicker.d.ts +4 -8
- package/dist/types/utils/auto-detect-state.d.ts +11 -0
- package/dist/types/utils/auto-detect-view.d.ts +8 -0
- package/dist/types/utils/language-detect.d.ts +3 -0
- package/dist/types-ts4.5/editor-commands/index.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/auto-detect-state.d.ts +16 -0
- package/dist/types-ts4.5/pm-plugins/auto-detect.d.ts +5 -0
- package/dist/types-ts4.5/pm-plugins/utils.d.ts +1 -1
- package/dist/types-ts4.5/ui/CodeBlockLanguagePicker.d.ts +7 -1
- package/dist/types-ts4.5/ui/LanguagePicker.d.ts +4 -8
- package/dist/types-ts4.5/utils/auto-detect-state.d.ts +11 -0
- package/dist/types-ts4.5/utils/auto-detect-view.d.ts +8 -0
- package/dist/types-ts4.5/utils/language-detect.d.ts +3 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-code-block
|
|
2
2
|
|
|
3
|
+
## 12.1.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`52a08b0d14e39`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/52a08b0d14e39) -
|
|
8
|
+
Add code block language auto-detection experiment
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
3
11
|
## 12.1.10
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
10
|
var _react = _interopRequireDefault(require("react"));
|
|
10
11
|
var _adfSchema = require("@atlaskit/adf-schema");
|
|
11
12
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
@@ -16,6 +17,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
|
16
17
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
17
18
|
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
18
19
|
var _editorCommands = require("./editor-commands");
|
|
20
|
+
var _autoDetect = require("./pm-plugins/auto-detect");
|
|
19
21
|
var _codeBlockAutoFullStopTransformPlugin = require("./pm-plugins/codeBlockAutoFullStopTransformPlugin");
|
|
20
22
|
var _codeBlockCopySelectionPlugin = require("./pm-plugins/codeBlockCopySelectionPlugin");
|
|
21
23
|
var _ideUx = _interopRequireDefault(require("./pm-plugins/ide-ux"));
|
|
@@ -81,7 +83,12 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
|
|
|
81
83
|
var schema = _ref3.schema;
|
|
82
84
|
return (0, _inputRule.createCodeBlockInputRule)(schema, api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions);
|
|
83
85
|
}
|
|
84
|
-
}, {
|
|
86
|
+
}].concat((0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true) ? [{
|
|
87
|
+
name: 'codeBlockAutoDetect',
|
|
88
|
+
plugin: function plugin() {
|
|
89
|
+
return (0, _autoDetect.createAutoDetectPlugin)(api);
|
|
90
|
+
}
|
|
91
|
+
}] : []), [{
|
|
85
92
|
name: 'codeBlockIDEKeyBindings',
|
|
86
93
|
plugin: function plugin() {
|
|
87
94
|
return (0, _ideUx.default)(api);
|
|
@@ -102,7 +109,7 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
|
|
|
102
109
|
plugin: function plugin() {
|
|
103
110
|
return (0, _codeBlockAutoFullStopTransformPlugin.codeBlockAutoFullStopTransformPlugin)();
|
|
104
111
|
}
|
|
105
|
-
}];
|
|
112
|
+
}]);
|
|
106
113
|
},
|
|
107
114
|
// Workaround for a firefox issue where dom selection is off sync
|
|
108
115
|
// https://product-fabric.atlassian.net/browse/ED-12442
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.copyContentToClipboardWithAnalytics = exports.copyContentToClipboard = exports.changeLanguage = void 0;
|
|
8
8
|
exports.createInsertCodeBlockTransaction = createInsertCodeBlockTransaction;
|
|
9
|
-
exports.ignoreFollowingMutations = void 0;
|
|
9
|
+
exports.ignoreFollowingMutations = exports.detectLanguage = void 0;
|
|
10
10
|
exports.insertCodeBlockWithAnalytics = insertCodeBlockWithAnalytics;
|
|
11
11
|
exports.toggleWordWrapStateForCodeBlockNode = exports.toggleLineNumbersForCodeBlockNodeEditorCommand = exports.toggleLineNumbersForCodeBlockNode = exports.resetShouldIgnoreFollowingMutations = exports.resetCopiedState = exports.removeCodeBlockWithAnalytics = exports.removeCodeBlock = void 0;
|
|
12
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
@@ -21,9 +21,11 @@ var _state = require("@atlaskit/editor-prosemirror/state");
|
|
|
21
21
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
22
22
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
23
23
|
var _actions = require("../pm-plugins/actions");
|
|
24
|
+
var _autoDetectState = require("../pm-plugins/auto-detect-state");
|
|
24
25
|
var _codeBlockCopySelectionPlugin = require("../pm-plugins/codeBlockCopySelectionPlugin");
|
|
25
26
|
var _pluginKey = require("../pm-plugins/plugin-key");
|
|
26
27
|
var _transformToCodeBlock = require("../pm-plugins/transform-to-code-block");
|
|
28
|
+
var _autoDetectState2 = require("../utils/auto-detect-state");
|
|
27
29
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
28
30
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
29
31
|
var removeCodeBlockWithAnalytics = exports.removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) {
|
|
@@ -53,27 +55,40 @@ var removeCodeBlock = exports.removeCodeBlock = function removeCodeBlock(state,
|
|
|
53
55
|
var changeLanguage = exports.changeLanguage = function changeLanguage(editorAnalyticsAPI) {
|
|
54
56
|
return function (language, selectionSource) {
|
|
55
57
|
return function (state, dispatch) {
|
|
56
|
-
var _pluginKey$getState
|
|
58
|
+
var _pluginKey$getState, _autoDetectPluginKey$;
|
|
57
59
|
var codeBlock = state.schema.nodes.codeBlock;
|
|
58
60
|
var pos = (_pluginKey$getState = _pluginKey.pluginKey.getState(state)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.pos;
|
|
59
61
|
if (typeof pos !== 'number') {
|
|
60
62
|
return false;
|
|
61
63
|
}
|
|
62
64
|
var node = state.doc.nodeAt(pos);
|
|
65
|
+
var localId = node === null || node === void 0 ? void 0 : node.attrs.localId;
|
|
66
|
+
var previousAutoDetectEntry = (0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true) ? (_autoDetectPluginKey$ = _autoDetectState.autoDetectPluginKey.getState(state)) === null || _autoDetectPluginKey$ === void 0 ? void 0 : _autoDetectPluginKey$.languageDetectionMap[localId] : undefined;
|
|
63
67
|
var tr = state.tr.setNodeMarkup(pos, codeBlock, _objectSpread(_objectSpread({}, node === null || node === void 0 ? void 0 : node.attrs), {}, {
|
|
64
68
|
language: language
|
|
65
69
|
})).setMeta('scrollIntoView', false);
|
|
70
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true)) {
|
|
71
|
+
tr.setMeta(_autoDetectState.autoDetectPluginKey, {
|
|
72
|
+
type: _actions.ACTIONS.REMOVE_AUTO_DETECT_ENTRY,
|
|
73
|
+
data: {
|
|
74
|
+
localId: localId
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
66
78
|
var selection = (0, _utils.isNodeSelection)(state.selection) ? _state.NodeSelection.create(tr.doc, pos) : tr.selection;
|
|
67
79
|
var result = tr.setSelection(selection);
|
|
68
80
|
if (dispatch) {
|
|
69
81
|
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
|
|
70
82
|
action: _analytics.ACTION.LANGUAGE_SELECTED,
|
|
71
83
|
actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK,
|
|
72
|
-
attributes: _objectSpread({
|
|
84
|
+
attributes: _objectSpread(_objectSpread({
|
|
73
85
|
language: language !== null && language !== void 0 ? language : 'none'
|
|
74
86
|
}, selectionSource ? {
|
|
75
87
|
selectionSource: selectionSource
|
|
76
|
-
} : {}),
|
|
88
|
+
} : {}), {}, {
|
|
89
|
+
autoDetectionResult: previousAutoDetectEntry === null || previousAutoDetectEntry === void 0 ? void 0 : previousAutoDetectEntry.detectionResult,
|
|
90
|
+
autoDetectedLanguage: previousAutoDetectEntry === null || previousAutoDetectEntry === void 0 ? void 0 : previousAutoDetectEntry.autoDetectedLanguage
|
|
91
|
+
}),
|
|
77
92
|
eventType: _analytics.EVENT_TYPE.TRACK
|
|
78
93
|
})(result);
|
|
79
94
|
dispatch(result);
|
|
@@ -82,6 +97,43 @@ var changeLanguage = exports.changeLanguage = function changeLanguage(editorAnal
|
|
|
82
97
|
};
|
|
83
98
|
};
|
|
84
99
|
};
|
|
100
|
+
|
|
101
|
+
/** Queue auto-detection for selected code block. */
|
|
102
|
+
var detectLanguage = exports.detectLanguage = function detectLanguage() {
|
|
103
|
+
return function (state, dispatch) {
|
|
104
|
+
var _pluginKey$getState2;
|
|
105
|
+
var pos = (_pluginKey$getState2 = _pluginKey.pluginKey.getState(state)) === null || _pluginKey$getState2 === void 0 ? void 0 : _pluginKey$getState2.pos;
|
|
106
|
+
if (typeof pos !== 'number') {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
var node = state.doc.nodeAt(pos);
|
|
110
|
+
if (!node) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
var localId = (0, _autoDetectState2.getLocalId)(node);
|
|
114
|
+
if (!localId) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
var autoDetectState = _autoDetectState.autoDetectPluginKey.getState(state);
|
|
118
|
+
var previousEntry = autoDetectState === null || autoDetectState === void 0 ? void 0 : autoDetectState.languageDetectionMap[localId];
|
|
119
|
+
var entry = (0, _autoDetectState2.createAutoDetectEntry)(node, pos, (0, _autoDetectState2.hasEnoughTextForAutoDetection)(node.textContent), previousEntry);
|
|
120
|
+
var tr = state.tr.setNodeMarkup(pos, state.schema.nodes.codeBlock, _objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
121
|
+
language: null
|
|
122
|
+
})).setMeta(_autoDetectState.autoDetectPluginKey, {
|
|
123
|
+
type: _actions.ACTIONS.SET_AUTO_DETECT_ENTRY,
|
|
124
|
+
data: {
|
|
125
|
+
localId: localId,
|
|
126
|
+
entry: entry
|
|
127
|
+
}
|
|
128
|
+
}).setMeta('scrollIntoView', false);
|
|
129
|
+
var selection = (0, _utils.isNodeSelection)(state.selection) ? _state.NodeSelection.create(tr.doc, pos) : tr.selection;
|
|
130
|
+
var result = tr.setSelection(selection);
|
|
131
|
+
if (dispatch) {
|
|
132
|
+
dispatch(result);
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
85
137
|
var copyContentToClipboardWithAnalytics = exports.copyContentToClipboardWithAnalytics = function copyContentToClipboardWithAnalytics(editorAnalyticsAPI) {
|
|
86
138
|
return function (state, dispatch) {
|
|
87
139
|
var nodes = state.schema.nodes,
|
|
@@ -7,5 +7,7 @@ exports.ACTIONS = void 0;
|
|
|
7
7
|
var ACTIONS = exports.ACTIONS = {
|
|
8
8
|
SET_COPIED_TO_CLIPBOARD: 'SET_COPIED_TO_CLIPBOARD',
|
|
9
9
|
SET_SHOULD_IGNORE_FOLLOWING_MUTATIONS: 'SET_SHOULD_IGNORE_FOLLOWING_MUTATIONS',
|
|
10
|
-
SET_IS_WRAPPED: 'SET_IS_WRAPPED'
|
|
10
|
+
SET_IS_WRAPPED: 'SET_IS_WRAPPED',
|
|
11
|
+
SET_AUTO_DETECT_ENTRY: 'SET_AUTO_DETECT_ENTRY',
|
|
12
|
+
REMOVE_AUTO_DETECT_ENTRY: 'REMOVE_AUTO_DETECT_ENTRY'
|
|
11
13
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAutoDetectPluginState = exports.autoDetectPluginKey = void 0;
|
|
7
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
8
|
+
var autoDetectPluginKey = exports.autoDetectPluginKey = new _state.PluginKey('codeBlockAutoDetectPlugin');
|
|
9
|
+
var getAutoDetectPluginState = exports.getAutoDetectPluginState = function getAutoDetectPluginState(state) {
|
|
10
|
+
return autoDetectPluginKey.getState(state);
|
|
11
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createAutoDetectPlugin = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
10
|
+
var _autoDetectState = require("../utils/auto-detect-state");
|
|
11
|
+
var _autoDetectView = require("../utils/auto-detect-view");
|
|
12
|
+
var _actions = require("./actions");
|
|
13
|
+
var _autoDetectState2 = require("./auto-detect-state");
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
var createAutoDetectPlugin = exports.createAutoDetectPlugin = function createAutoDetectPlugin(api) {
|
|
17
|
+
return new _safePlugin.SafePlugin({
|
|
18
|
+
key: _autoDetectState2.autoDetectPluginKey,
|
|
19
|
+
state: {
|
|
20
|
+
init: function init() {
|
|
21
|
+
return {
|
|
22
|
+
languageDetectionMap: {}
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
apply: function apply(tr, pluginState) {
|
|
26
|
+
var meta = tr.getMeta(_autoDetectState2.autoDetectPluginKey);
|
|
27
|
+
var languageDetectionMap = tr.docChanged ? (0, _autoDetectState.updateAutoDetectState)(tr, pluginState) : pluginState.languageDetectionMap;
|
|
28
|
+
if ((meta === null || meta === void 0 ? void 0 : meta.type) === _actions.ACTIONS.SET_AUTO_DETECT_ENTRY) {
|
|
29
|
+
languageDetectionMap = _objectSpread(_objectSpread({}, languageDetectionMap), {}, (0, _defineProperty2.default)({}, meta.data.localId, meta.data.entry));
|
|
30
|
+
} else if ((meta === null || meta === void 0 ? void 0 : meta.type) === _actions.ACTIONS.REMOVE_AUTO_DETECT_ENTRY) {
|
|
31
|
+
languageDetectionMap = (0, _autoDetectState.removeAutoDetection)(languageDetectionMap, meta.data.localId);
|
|
32
|
+
}
|
|
33
|
+
if (languageDetectionMap === pluginState.languageDetectionMap) {
|
|
34
|
+
return pluginState;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
languageDetectionMap: languageDetectionMap
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
view: function view(_view) {
|
|
42
|
+
var timers = new Map();
|
|
43
|
+
return {
|
|
44
|
+
update: function update() {
|
|
45
|
+
(0, _autoDetectView.syncPendingDetectionTimers)(_view, timers, api);
|
|
46
|
+
},
|
|
47
|
+
destroy: function destroy() {
|
|
48
|
+
timers.forEach(function (_ref) {
|
|
49
|
+
var timer = _ref.timer;
|
|
50
|
+
return clearTimeout(timer);
|
|
51
|
+
});
|
|
52
|
+
timers.clear();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
@@ -109,11 +109,11 @@ var createPlugin = exports.createPlugin = function createPlugin(_ref) {
|
|
|
109
109
|
}
|
|
110
110
|
if (tr.docChanged) {
|
|
111
111
|
var _node = (0, _transforms.findCodeBlock)(newState, tr.selection);
|
|
112
|
+
var codeBlockNodes = (0, _utils.getAllChangedCodeBlocksInTransaction)(tr);
|
|
112
113
|
|
|
113
114
|
// Updates mapping position of all existing decorations to new positions
|
|
114
115
|
// specifically used for updating word wrap node decorators (does not cover drag & drop, validateWordWrappedDecorators does).
|
|
115
116
|
var updatedDecorationSet = pluginState.decorations.map(tr.mapping, tr.doc);
|
|
116
|
-
var codeBlockNodes = (0, _utils.getAllChangedCodeBlocksInTransaction)(tr);
|
|
117
117
|
if (codeBlockNodes) {
|
|
118
118
|
(0, _codeBlock.updateCodeBlockWrappedStateNodeKeys)(codeBlockNodes, _oldState);
|
|
119
119
|
// Disabled when using advanced code block for performance reasons
|
|
@@ -23,12 +23,41 @@ var _editorCommands = require("../editor-commands");
|
|
|
23
23
|
var _CodeBlockLanguagePicker = require("../ui/CodeBlockLanguagePicker");
|
|
24
24
|
var _WrapIcon = require("../ui/icons/WrapIcon");
|
|
25
25
|
var _languagePickerOptions = require("../ui/language-picker-options");
|
|
26
|
+
var _autoDetectState = require("./auto-detect-state");
|
|
26
27
|
var _codeBlockCopySelectionPlugin = require("./codeBlockCopySelectionPlugin");
|
|
27
28
|
var _languageList = require("./language-list");
|
|
28
29
|
var _pluginKey = require("./plugin-key");
|
|
29
30
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
30
31
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
32
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
33
|
+
var getAutoDetectPickerValue = function getAutoDetectPickerValue(_ref) {
|
|
34
|
+
var autoDetectEntry = _ref.autoDetectEntry,
|
|
35
|
+
formatMessage = _ref.formatMessage,
|
|
36
|
+
language = _ref.language,
|
|
37
|
+
languagePickerOptions = _ref.languagePickerOptions;
|
|
38
|
+
var defaultPickerValue = language ? languagePickerOptions.find(function (option) {
|
|
39
|
+
return language === _languagePickerOptions.NONE_LANGUAGE_VALUE ? option.value === _languagePickerOptions.PLAIN_TEXT_LANGUAGE_VALUE : option.value === language || option.alias.includes(language);
|
|
40
|
+
}) : undefined;
|
|
41
|
+
|
|
42
|
+
// A weak re-detection records noneDetected but can leave a previously auto-detected
|
|
43
|
+
// language on the node. Keep showing "(detected)" only while that preserved language
|
|
44
|
+
// still matches the node language, so manual language changes do not inherit the label.
|
|
45
|
+
if (defaultPickerValue && ((autoDetectEntry === null || autoDetectEntry === void 0 ? void 0 : autoDetectEntry.detectionResult) === 'detected' || (autoDetectEntry === null || autoDetectEntry === void 0 ? void 0 : autoDetectEntry.detectionResult) === 'noneDetected' && autoDetectEntry.autoDetectedLanguage === language)) {
|
|
46
|
+
return _objectSpread(_objectSpread({}, defaultPickerValue), {}, {
|
|
47
|
+
label: formatMessage(_messages.codeBlockButtonMessages.detectedLanguage, {
|
|
48
|
+
language: defaultPickerValue.label
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if ((autoDetectEntry === null || autoDetectEntry === void 0 ? void 0 : autoDetectEntry.detectionResult) === 'noneDetected' && !language) {
|
|
53
|
+
return {
|
|
54
|
+
alias: [],
|
|
55
|
+
label: formatMessage(_messages.codeBlockButtonMessages.noneDetected),
|
|
56
|
+
value: _languagePickerOptions.NONE_LANGUAGE_VALUE
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return defaultPickerValue;
|
|
60
|
+
};
|
|
32
61
|
var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
33
62
|
var allowCopyToClipboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
34
63
|
var api = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -45,12 +74,12 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
45
74
|
alias: lang.alias
|
|
46
75
|
};
|
|
47
76
|
});
|
|
48
|
-
return function (state,
|
|
49
|
-
var _api$editorViewMode, _api$decorations$acti, _api$decorations, _api$analytics, _codeBlockState$pos, _node$attrs;
|
|
50
|
-
var formatMessage =
|
|
77
|
+
return function (state, _ref2) {
|
|
78
|
+
var _api$editorViewMode, _api$decorations$acti, _api$decorations, _api$analytics, _codeBlockState$pos, _node$attrs, _node$attrs2;
|
|
79
|
+
var formatMessage = _ref2.formatMessage;
|
|
51
80
|
var isViewMode = (api === null || api === void 0 || (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 || (_api$editorViewMode = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode === void 0 ? void 0 : _api$editorViewMode.mode) === 'view';
|
|
52
|
-
var
|
|
53
|
-
hoverDecoration =
|
|
81
|
+
var _ref3 = (_api$decorations$acti = api === null || api === void 0 || (_api$decorations = api.decorations) === null || _api$decorations === void 0 ? void 0 : _api$decorations.actions) !== null && _api$decorations$acti !== void 0 ? _api$decorations$acti : {},
|
|
82
|
+
hoverDecoration = _ref3.hoverDecoration;
|
|
54
83
|
var editorAnalyticsAPI = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions;
|
|
55
84
|
var codeBlockState = _pluginKey.pluginKey.getState(state);
|
|
56
85
|
var pos = (_codeBlockState$pos = codeBlockState === null || codeBlockState === void 0 ? void 0 : codeBlockState.pos) !== null && _codeBlockState$pos !== void 0 ? _codeBlockState$pos : null;
|
|
@@ -65,6 +94,10 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
65
94
|
var isWrapped = (0, _codeBlock.isCodeBlockWordWrapEnabled)(node);
|
|
66
95
|
var areLineNumbersVisible = (0, _codeBlock.areCodeBlockLineNumbersVisible)(node);
|
|
67
96
|
var language = node === null || node === void 0 || (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.language;
|
|
97
|
+
var localId = node === null || node === void 0 || (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.localId;
|
|
98
|
+
var autoDetectState = _autoDetectState.autoDetectPluginKey.getState(state);
|
|
99
|
+
var autoDetectEntry = (0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true) && typeof localId === 'string' ? autoDetectState === null || autoDetectState === void 0 ? void 0 : autoDetectState.languageDetectionMap[localId] : undefined;
|
|
100
|
+
|
|
68
101
|
// Keep fresh option objects for the legacy toolbar select so reopening it
|
|
69
102
|
// continues to start from the top rather than preserving the previously
|
|
70
103
|
// focused option by reference.
|
|
@@ -90,9 +123,12 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
90
123
|
};
|
|
91
124
|
var languagePicker;
|
|
92
125
|
if ((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button')) {
|
|
93
|
-
var
|
|
94
|
-
|
|
95
|
-
|
|
126
|
+
var autoDetectPickerValue = getAutoDetectPickerValue({
|
|
127
|
+
autoDetectEntry: autoDetectEntry,
|
|
128
|
+
formatMessage: formatMessage,
|
|
129
|
+
language: language,
|
|
130
|
+
languagePickerOptions: languagePickerOptions
|
|
131
|
+
});
|
|
96
132
|
languagePicker = {
|
|
97
133
|
type: 'custom',
|
|
98
134
|
fallback: [],
|
|
@@ -102,7 +138,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
102
138
|
}
|
|
103
139
|
return /*#__PURE__*/_react.default.createElement(_CodeBlockLanguagePicker.CodeBlockLanguagePicker, {
|
|
104
140
|
api: api,
|
|
105
|
-
defaultValue:
|
|
141
|
+
defaultValue: autoDetectPickerValue,
|
|
106
142
|
editorView: view,
|
|
107
143
|
filterOption: languageListFilter,
|
|
108
144
|
formatMessage: formatMessage,
|
|
@@ -234,8 +270,8 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
|
|
|
234
270
|
var languageListFilter = exports.languageListFilter = function languageListFilter(option, rawInput) {
|
|
235
271
|
// Ignored via go/ees005
|
|
236
272
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
237
|
-
var
|
|
238
|
-
data =
|
|
273
|
+
var _ref4 = option,
|
|
274
|
+
data = _ref4.data;
|
|
239
275
|
var searchString = rawInput.toLowerCase();
|
|
240
276
|
return data.label.toLowerCase().includes(searchString) || data.alias.some(function (alias) {
|
|
241
277
|
return alias.toLowerCase() === searchString;
|
|
@@ -8,10 +8,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.CodeBlockLanguagePicker = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
12
|
+
var _editorCommands = require("../editor-commands");
|
|
13
|
+
var _languagePickerOptions = require("./language-picker-options");
|
|
11
14
|
var _LanguagePicker = require("./LanguagePicker");
|
|
12
15
|
var _recentLanguages = require("./recent-languages");
|
|
13
16
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
14
17
|
var CodeBlockLanguagePicker = exports.CodeBlockLanguagePicker = function CodeBlockLanguagePicker(_ref) {
|
|
18
|
+
var _api$analytics2;
|
|
15
19
|
var api = _ref.api,
|
|
16
20
|
defaultValue = _ref.defaultValue,
|
|
17
21
|
editorView = _ref.editorView,
|
|
@@ -27,19 +31,22 @@ var CodeBlockLanguagePicker = exports.CodeBlockLanguagePicker = function CodeBlo
|
|
|
27
31
|
var refreshRecentLanguages = (0, _react.useCallback)(function () {
|
|
28
32
|
setRecentLanguageValues((0, _recentLanguages.getRecentLanguages)());
|
|
29
33
|
}, []);
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
var handleSelection = (0, _react.useCallback)(function (option, selectionSource) {
|
|
35
|
+
var _api$analytics;
|
|
36
|
+
var command = option.value === _languagePickerOptions.DETECT_LANGUAGE_VALUE && (0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true) ? (0, _editorCommands.detectLanguage)() : (0, _editorCommands.changeLanguage)(api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions)(option.value, selectionSource);
|
|
37
|
+
var commandSucceeded = command(editorView.state, editorView.dispatch);
|
|
38
|
+
if (commandSucceeded && option.value !== _languagePickerOptions.DETECT_LANGUAGE_VALUE) {
|
|
39
|
+
(0, _recentLanguages.saveRecentLanguage)(option.value);
|
|
40
|
+
setRecentLanguageValues((0, _recentLanguages.getRecentLanguages)());
|
|
41
|
+
}
|
|
42
|
+
}, [api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions, editorView]);
|
|
34
43
|
return /*#__PURE__*/_react.default.createElement(_LanguagePicker.LanguagePicker, {
|
|
35
|
-
api: api,
|
|
36
44
|
defaultValue: defaultValue,
|
|
37
|
-
editorView: editorView,
|
|
38
45
|
filterOption: filterOption,
|
|
39
46
|
formatMessage: formatMessage,
|
|
40
47
|
languagePickerOptions: languagePickerOptions,
|
|
41
48
|
recentLanguageValues: recentLanguageValues,
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
onMenuOpen: refreshRecentLanguages,
|
|
50
|
+
onSelection: handleSelection
|
|
44
51
|
});
|
|
45
52
|
};
|
|
@@ -17,7 +17,6 @@ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
|
17
17
|
var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/core/chevron-down"));
|
|
18
18
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
19
19
|
var _select = require("@atlaskit/select");
|
|
20
|
-
var _editorCommands = require("../editor-commands");
|
|
21
20
|
var _languagePickerOptions = require("./language-picker-options");
|
|
22
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
23
22
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
@@ -81,18 +80,15 @@ var getRecentlyUsedLanguages = function getRecentlyUsedLanguages(recentLanguageV
|
|
|
81
80
|
return recentlyUsedLanguages;
|
|
82
81
|
};
|
|
83
82
|
var LanguagePicker = exports.LanguagePicker = function LanguagePicker(_ref) {
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
defaultValue = _ref.defaultValue,
|
|
87
|
-
editorView = _ref.editorView,
|
|
83
|
+
var _defaultValue$label;
|
|
84
|
+
var defaultValue = _ref.defaultValue,
|
|
88
85
|
filterOption = _ref.filterOption,
|
|
89
86
|
formatMessage = _ref.formatMessage,
|
|
90
87
|
languagePickerOptions = _ref.languagePickerOptions,
|
|
91
88
|
_ref$recentLanguageVa = _ref.recentLanguageValues,
|
|
92
89
|
recentLanguageValues = _ref$recentLanguageVa === void 0 ? [] : _ref$recentLanguageVa,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
var editorAnalyticsAPI = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions;
|
|
90
|
+
onMenuOpen = _ref.onMenuOpen,
|
|
91
|
+
onSelection = _ref.onSelection;
|
|
96
92
|
var label = (_defaultValue$label = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.label) !== null && _defaultValue$label !== void 0 ? _defaultValue$label : formatMessage(_messages.codeBlockButtonMessages.selectLanguage);
|
|
97
93
|
var selectLanguageLabel = formatMessage(_messages.codeBlockButtonMessages.selectLanguage);
|
|
98
94
|
var _useState = (0, _react.useState)(false),
|
|
@@ -127,11 +123,8 @@ var LanguagePicker = exports.LanguagePicker = function LanguagePicker(_ref) {
|
|
|
127
123
|
}
|
|
128
124
|
var isSearchSelection = inputValueRef.current.trim().length > 0;
|
|
129
125
|
var selectionSource = isSearchSelection ? 'search' : (_option$selectionSour = option.selectionSource) !== null && _option$selectionSour !== void 0 ? _option$selectionSour : 'all';
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
onLanguageSelect === null || onLanguageSelect === void 0 || onLanguageSelect(option.value);
|
|
133
|
-
}
|
|
134
|
-
}, [editorAnalyticsAPI, editorView, onLanguageSelect]);
|
|
126
|
+
onSelection(option, selectionSource);
|
|
127
|
+
}, [onSelection]);
|
|
135
128
|
var handleInputChange = (0, _react.useCallback)(function (newInputValue, actionMeta) {
|
|
136
129
|
// React-select clears the input as part of selecting a value before onChange fires.
|
|
137
130
|
// Keep the last user-typed query so handleChange can report search selections correctly.
|
|
@@ -156,10 +149,9 @@ var LanguagePicker = exports.LanguagePicker = function LanguagePicker(_ref) {
|
|
|
156
149
|
appearance: "subtle",
|
|
157
150
|
isSelected: isOpen,
|
|
158
151
|
"aria-controls": ariaControls,
|
|
159
|
-
"aria-label": selectLanguageLabel,
|
|
160
152
|
testId: "code-block-language-picker-trigger"
|
|
161
153
|
}, label));
|
|
162
|
-
}, [label
|
|
154
|
+
}, [label]);
|
|
163
155
|
return /*#__PURE__*/_react.default.createElement(_select.PopupSelect, {
|
|
164
156
|
components: popupSelectComponents,
|
|
165
157
|
filterOption: filterOption,
|
|
@@ -8,6 +8,7 @@ exports.getDetectLanguageOption = exports.createGroupedLanguageOptions = exports
|
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _messages = require("@atlaskit/editor-common/messages");
|
|
11
|
+
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
11
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
13
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
14
|
var NONE_LANGUAGE_VALUE = exports.NONE_LANGUAGE_VALUE = 'none';
|
|
@@ -35,7 +36,7 @@ var createGroupedLanguageOptions = exports.createGroupedLanguageOptions = functi
|
|
|
35
36
|
var plainTextOption = languages.find(function (language) {
|
|
36
37
|
return language.value === PLAIN_TEXT_LANGUAGE_VALUE;
|
|
37
38
|
});
|
|
38
|
-
var pinnedOptions = [getDetectLanguageOption(formatMessage)];
|
|
39
|
+
var pinnedOptions = (0, _expValEquals.expValEquals)('platform_editor_code_block_auto_detection', 'isEnabled', true) ? [getDetectLanguageOption(formatMessage)] : [];
|
|
39
40
|
if (plainTextOption) {
|
|
40
41
|
pinnedOptions.push(_objectSpread(_objectSpread({}, plainTextOption), {}, {
|
|
41
42
|
selectionSource: 'pinned'
|