jodit 4.14.2 → 4.14.4

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 (71) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +13 -13
  4. package/es2015/jodit.js +692 -540
  5. package/es2015/jodit.min.js +13 -13
  6. package/es2015/plugins/debug/debug.css +1 -1
  7. package/es2015/plugins/debug/debug.js +2 -2
  8. package/es2015/plugins/debug/debug.min.js +2 -2
  9. package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
  10. package/es2015/plugins/speech-recognize/speech-recognize.js +50 -50
  11. package/es2015/plugins/speech-recognize/speech-recognize.min.js +2 -2
  12. package/es2018/jodit.fat.min.js +13 -13
  13. package/es2018/jodit.min.js +13 -13
  14. package/es2018/plugins/debug/debug.min.js +2 -2
  15. package/es2018/plugins/speech-recognize/speech-recognize.min.js +2 -2
  16. package/es2021/jodit.css +1 -1
  17. package/es2021/jodit.fat.min.js +16 -16
  18. package/es2021/jodit.js +679 -531
  19. package/es2021/jodit.min.js +15 -15
  20. package/es2021/plugins/debug/debug.css +1 -1
  21. package/es2021/plugins/debug/debug.js +2 -2
  22. package/es2021/plugins/debug/debug.min.js +2 -2
  23. package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
  24. package/es2021/plugins/speech-recognize/speech-recognize.js +50 -50
  25. package/es2021/plugins/speech-recognize/speech-recognize.min.js +2 -2
  26. package/es2021.en/jodit.css +1 -1
  27. package/es2021.en/jodit.fat.min.js +14 -14
  28. package/es2021.en/jodit.js +457 -296
  29. package/es2021.en/jodit.min.js +14 -14
  30. package/es2021.en/plugins/debug/debug.css +1 -1
  31. package/es2021.en/plugins/debug/debug.js +2 -2
  32. package/es2021.en/plugins/debug/debug.min.js +2 -2
  33. package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
  34. package/es2021.en/plugins/speech-recognize/speech-recognize.js +2 -2
  35. package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +2 -2
  36. package/es5/jodit.css +2 -2
  37. package/es5/jodit.fat.min.js +2 -2
  38. package/es5/jodit.js +915 -609
  39. package/es5/jodit.min.css +2 -2
  40. package/es5/jodit.min.js +2 -2
  41. package/es5/plugins/debug/debug.css +1 -1
  42. package/es5/plugins/debug/debug.js +2 -2
  43. package/es5/plugins/debug/debug.min.js +2 -2
  44. package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
  45. package/es5/plugins/speech-recognize/speech-recognize.js +50 -50
  46. package/es5/plugins/speech-recognize/speech-recognize.min.js +2 -2
  47. package/es5/polyfills.fat.min.js +2 -2
  48. package/es5/polyfills.js +32 -57
  49. package/es5/polyfills.min.js +2 -2
  50. package/esm/core/constants.js +1 -1
  51. package/esm/core/selection/helpers/index.js +5 -2
  52. package/esm/core/selection/selection.d.ts +8 -5
  53. package/esm/core/selection/selection.js +267 -159
  54. package/esm/core/selection/style/api/extract.js +1 -3
  55. package/esm/core/selection/style/api/is-same-attributes.js +5 -2
  56. package/esm/core/selection/style/api/toggle-attributes.js +27 -10
  57. package/esm/core/selection/style/api/unwrap-children.js +39 -33
  58. package/esm/core/selection/style/apply-style.js +23 -25
  59. package/esm/core/selection/style/commit-style.js +3 -0
  60. package/esm/core/selection/style/transactions.js +2 -1
  61. package/esm/langs/az.d.ts +223 -0
  62. package/esm/langs/az.js +240 -0
  63. package/esm/languages.js +2 -0
  64. package/esm/modules/history/snapshot.js +45 -20
  65. package/esm/types/style.d.ts +2 -2
  66. package/esm/types/types.d.ts +3 -0
  67. package/package.json +1 -1
  68. package/types/core/selection/selection.d.ts +8 -5
  69. package/types/langs/az.d.ts +223 -0
  70. package/types/types/style.d.ts +2 -2
  71. package/types/types/types.d.ts +3 -0
@@ -5,7 +5,6 @@
5
5
  */
6
6
  import { Dom } from "../../../dom/dom.js";
7
7
  import { isMarker } from "../../../helpers/checker/is-marker.js";
8
- import { trim } from "../../../helpers/string/trim.js";
9
8
  import { call } from "../../../helpers/utils/utils.js";
10
9
  /**
11
10
  * If the selection area is inside an element that matches the commit (suitable relative),
@@ -44,8 +43,7 @@ export function extractSelectedPart(wrapper, font, jodit) {
44
43
  */
45
44
  function extractAndMove(wrapper, range, left) {
46
45
  const fragment = range.extractContents();
47
- if ((!fragment.textContent || !trim(fragment.textContent).length) &&
48
- fragment.firstChild) {
46
+ if (Dom.isEmpty(fragment) && fragment.firstChild) {
49
47
  Dom.unwrap(fragment.firstChild);
50
48
  }
51
49
  if (wrapper.parentNode) {
@@ -20,13 +20,16 @@ export function isSameAttributes(elm, attrs) {
20
20
  }
21
21
  assert(attrs, 'Attrs must be a non-empty object');
22
22
  return Object.keys(attrs).every(key => {
23
+ var _a;
23
24
  if (key === 'class' || key === 'className') {
24
- return elm.classList.contains(attrs[key]);
25
+ const classes = (_a = String(attrs[key]).match(/[^\t\n\f\r ]+/g)) !== null && _a !== void 0 ? _a : [];
26
+ return classes.every(name => elm.classList.contains(name));
25
27
  }
26
28
  if (key === 'style') {
27
29
  return hasSameStyle(elm, attrs[key]);
28
30
  }
29
- return attr(elm, key) === attrs[key];
31
+ const value = attrs[key];
32
+ return attr(elm, key) === (value == null ? value : String(value));
30
33
  });
31
34
  }
32
35
  export function elementsEqualAttributes(elm1, elm2) {
@@ -29,7 +29,7 @@ export function toggleAttributes(commitStyle, elm, jodit, mode, dry = false) {
29
29
  const value = attributes[key];
30
30
  switch (key) {
31
31
  case 'style': {
32
- mode = toggleStyle(commitStyle, jodit, value, elm, dry, mode);
32
+ mode = toggleStyle(jodit, value, elm, dry, mode);
33
33
  break;
34
34
  }
35
35
  case 'className':
@@ -41,9 +41,13 @@ export function toggleAttributes(commitStyle, elm, jodit, mode, dry = false) {
41
41
  }
42
42
  });
43
43
  }
44
- return mode;
44
+ // Cleanup belongs to the complete attribute transaction. Removing a
45
+ // wrapper between CSS rules would apply the remaining rules to a detached node.
46
+ return !dry && (attributes === null || attributes === void 0 ? void 0 : attributes.style)
47
+ ? removeExtraStyleAttribute(commitStyle, elm, mode)
48
+ : mode;
45
49
  }
46
- function toggleStyle(commitStyle, jodit, style, elm, dry, mode) {
50
+ function toggleStyle(jodit, style, elm, dry, mode) {
47
51
  assert(isPlainObject(style) && size(style), 'Style must be an object');
48
52
  Object.keys(style).forEach((rule) => {
49
53
  const inlineValue = cssInline(elm, rule);
@@ -51,6 +55,15 @@ function toggleStyle(commitStyle, jodit, style, elm, dry, mode) {
51
55
  if (inlineValue === '' && newValue == null) {
52
56
  return;
53
57
  }
58
+ if (newValue == null || newValue === '') {
59
+ if (inlineValue) {
60
+ !dry && css(elm, rule, null);
61
+ // An explicit reset changes a style; it is not a toggle of
62
+ // the owning element (notably when resetting list-style-type).
63
+ mode = CHANGE;
64
+ }
65
+ return;
66
+ }
54
67
  if (getNativeCSSValue(jodit, elm, rule) ===
55
68
  normalizeCssValue(rule, newValue)) {
56
69
  if (!inlineValue) {
@@ -58,34 +71,37 @@ function toggleStyle(commitStyle, jodit, style, elm, dry, mode) {
58
71
  }
59
72
  !dry && css(elm, rule, null);
60
73
  mode = UNSET;
61
- mode = removeExtraStyleAttribute(commitStyle, elm, mode);
62
74
  return;
63
75
  }
64
76
  mode = CHANGE;
65
77
  if (!dry) {
66
78
  css(elm, rule, newValue);
67
- mode = removeExtraStyleAttribute(commitStyle, elm, mode);
68
79
  }
69
80
  });
70
81
  return mode;
71
82
  }
72
83
  function toggleClass(jodit, value, elm, mode, dry) {
84
+ var _a;
73
85
  assert(isString(value), 'Class name must be a string');
86
+ const classes = (_a = value.match(/[^\t\n\f\r ]+/g)) !== null && _a !== void 0 ? _a : [];
87
+ if (!classes.length) {
88
+ return mode;
89
+ }
74
90
  const hook = jodit.e.fire.bind(jodit.e, `${_PREFIX}AfterToggleAttribute`);
75
- if (elm.classList.contains(value.toString())) {
91
+ if (classes.every(name => elm.classList.contains(name))) {
76
92
  mode = UNSET;
77
93
  if (!dry) {
78
- elm.classList.remove(value);
94
+ elm.classList.remove(...classes);
79
95
  if (elm.classList.length === 0) {
80
96
  attr(elm, 'class', null);
81
- hook(mode, elm, 'class', null);
82
97
  }
98
+ hook(mode, elm, 'class', attr(elm, 'class'));
83
99
  }
84
100
  }
85
101
  else {
86
102
  mode = CHANGE;
87
103
  if (!dry) {
88
- elm.classList.add(value);
104
+ elm.classList.add(...classes);
89
105
  hook(mode, elm, 'class', value);
90
106
  }
91
107
  }
@@ -116,7 +132,8 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
116
132
  function removeExtraStyleAttribute(commitStyle, elm, mode) {
117
133
  if (!attr(elm, 'style')) {
118
134
  attr(elm, 'style', null);
119
- if (elm.tagName.toLowerCase() === commitStyle.defaultTag) {
135
+ if (!elm.attributes.length &&
136
+ elm.tagName.toLowerCase() === commitStyle.defaultTag) {
120
137
  Dom.unwrap(elm);
121
138
  mode = UNWRAP;
122
139
  }
@@ -6,7 +6,7 @@
6
6
  import { Dom } from "../../../dom/dom.js";
7
7
  import { attr, css } from "../../../helpers/utils/index.js";
8
8
  import { hasSameStyleKeys } from "./has-same-style.js";
9
- import { isSameStyleChild, isSuitElement } from "./is-suit-element.js";
9
+ import { isSuitElement } from "./is-suit-element.js";
10
10
  /**
11
11
  * Unwrap all suit elements inside
12
12
  * @private
@@ -17,42 +17,48 @@ export function unwrapChildren(style, font) {
17
17
  const needChangeStyle = [];
18
18
  let firstElementSuit;
19
19
  const cssStyle = (_a = style.options.attributes) === null || _a === void 0 ? void 0 : _a.style;
20
- if (font.firstChild) {
21
- const gen = Dom.eachGen(font);
22
- let item = gen.next();
23
- while (!item.done) {
24
- const elm = item.value;
25
- if (isSuitElement(style, elm, true) &&
26
- (!cssStyle || hasSameStyleKeys(elm, cssStyle))) {
27
- if (firstElementSuit === undefined) {
28
- firstElementSuit = true;
29
- }
20
+ const styleKeys = Object.keys(cssStyle !== null && cssStyle !== void 0 ? cssStyle : {});
21
+ const clearedStyle = {};
22
+ styleKeys.forEach(key => {
23
+ clearedStyle[key] = null;
24
+ });
25
+ const clearStyle = (elm) => {
26
+ css(elm, clearedStyle);
27
+ if (!attr(elm, 'style')) {
28
+ attr(elm, 'style', null);
29
+ }
30
+ if (!elm.attributes.length && Dom.isTag(elm, style.element)) {
31
+ needUnwrap.push(elm);
32
+ }
33
+ };
34
+ for (const elm of Dom.eachGen(font)) {
35
+ if (!Dom.isContentEditable(elm, font)) {
36
+ continue;
37
+ }
38
+ if (isSuitElement(style, elm, true) &&
39
+ (!cssStyle || hasSameStyleKeys(elm, cssStyle))) {
40
+ if (firstElementSuit === undefined) {
41
+ firstElementSuit = true;
42
+ }
43
+ if (cssStyle) {
44
+ needChangeStyle.push(() => clearStyle(elm));
45
+ }
46
+ else {
30
47
  needUnwrap.push(elm);
31
48
  }
32
- else if (cssStyle && isSameStyleChild(style, elm)) {
33
- if (firstElementSuit === undefined) {
34
- firstElementSuit = false;
35
- }
36
- needChangeStyle.push(() => {
37
- css(elm, Object.keys(cssStyle).reduce((acc, key) => {
38
- acc[key] = null;
39
- return acc;
40
- }, {}));
41
- if (!attr(elm, 'style')) {
42
- attr(elm, 'style', null);
43
- }
44
- if (!attr(elm, 'style') &&
45
- elm.nodeName.toLowerCase() === style.element) {
46
- needUnwrap.push(elm);
47
- }
48
- });
49
+ }
50
+ else if (cssStyle &&
51
+ Dom.isHTMLElement(elm) &&
52
+ styleKeys.some(key => css(elm, key, true) !== '')) {
53
+ if (firstElementSuit === undefined) {
54
+ firstElementSuit = false;
49
55
  }
50
- else if (!Dom.isEmptyTextNode(elm)) {
51
- if (firstElementSuit === undefined) {
52
- firstElementSuit = false;
53
- }
56
+ needChangeStyle.push(() => clearStyle(elm));
57
+ }
58
+ else if (!Dom.isEmptyTextNode(elm)) {
59
+ if (firstElementSuit === undefined) {
60
+ firstElementSuit = false;
54
61
  }
55
- item = gen.next();
56
62
  }
57
63
  }
58
64
  needChangeStyle.forEach(clb => clb());
@@ -10,33 +10,31 @@ import { states, transactions } from "./transactions.js";
10
10
  export function ApplyStyle(jodit, cs) {
11
11
  var _a;
12
12
  const { s: sel, editor } = jodit;
13
- // sel.save();
14
13
  (_a = editor.firstChild) === null || _a === void 0 ? void 0 : _a.normalize(); // FF fix for test "commandsTest - Exec command "bold"
15
14
  const fakes = sel.fakes();
16
- const gen = jodit.s.wrapInTagGen(fakes);
17
- let font = gen.next();
18
- if (font.done) {
19
- return;
20
- }
21
- let state = {
22
- collapsed: sel.isCollapsed(),
23
- mode: INITIAL,
24
- element: font.value,
25
- next: states.START,
26
- jodit,
27
- style: cs
28
- };
29
- while (font && !font.done) {
30
- const machine = new FiniteStateMachine(states.START, transactions);
31
- state.element = font.value;
32
- // machine.disableSilent();
33
- while (machine.getState() !== states.END) {
34
- // console.log(machine.getState(), state);
35
- state = machine.dispatch('exec', state);
15
+ const collapsed = sel.isCollapsed();
16
+ let mode = INITIAL;
17
+ try {
18
+ // for...of closes the generator on an exception, releasing every
19
+ // temporary wrapper before the selection is restored in finally.
20
+ for (const font of sel.wrapInTagGen(fakes)) {
21
+ let state = {
22
+ collapsed,
23
+ mode,
24
+ element: font,
25
+ next: states.START,
26
+ jodit,
27
+ style: cs
28
+ };
29
+ const machine = new FiniteStateMachine(states.START, transactions);
30
+ while (!jodit.isInDestruct && machine.getState() !== states.END) {
31
+ state = machine.dispatch('exec', state);
32
+ }
33
+ // The first selected fragment determines how later fragments toggle.
34
+ mode = state.mode;
36
35
  }
37
- // console.log('-------------------');
38
- font = gen.next();
39
36
  }
40
- // sel.restore();
41
- sel.restoreFakes(fakes);
37
+ finally {
38
+ sel.restoreFakes(fakes);
39
+ }
42
40
  }
@@ -68,6 +68,9 @@ export class CommitStyle {
68
68
  });
69
69
  this.__applyMap = new WeakMap();
70
70
  }
71
+ if (jodit.isInDestruct) {
72
+ return;
73
+ }
71
74
  jodit.synchronizeValues();
72
75
  jodit.e.fire('afterCommitStyle', this);
73
76
  }
@@ -25,7 +25,8 @@ export const transactions = {
25
25
  [states.START]: {
26
26
  exec(value) {
27
27
  const { element, jodit, style, mode, collapsed } = value;
28
- if (isInsideInvisibleElement(element, jodit.editor) ||
28
+ if (!Dom.isContentEditable(element, jodit.editor) ||
29
+ isInsideInvisibleElement(element, jodit.editor) ||
29
30
  (!collapsed && Dom.isEmptyContent(element))) {
30
31
  return { ...value, next: states.END };
31
32
  }
@@ -0,0 +1,223 @@
1
+ declare const _exports: {
2
+ 'Type something': string;
3
+ Advanced: string;
4
+ 'About Jodit': string;
5
+ 'Jodit Editor': string;
6
+ "Jodit User's Guide": string;
7
+ 'contains detailed help for using': string;
8
+ 'For information about the license, please go to our website:': string;
9
+ 'Buy full version': string;
10
+ 'Copyright \u00A9 XDSoft.net - Chupurnov Valeriy. All rights reserved.': string;
11
+ Anchor: string;
12
+ 'Open in new tab': string;
13
+ 'Open in fullsize': string;
14
+ 'Clear Formatting': string;
15
+ 'Fill color or set the text color': string;
16
+ Redo: string;
17
+ Undo: string;
18
+ Bold: string;
19
+ Italic: string;
20
+ 'Insert Unordered List': string;
21
+ 'Insert Ordered List': string;
22
+ 'Align Center': string;
23
+ 'Align Justify': string;
24
+ 'Align Left': string;
25
+ 'Align Right': string;
26
+ 'Insert Horizontal Line': string;
27
+ 'Insert Image': string;
28
+ 'Insert file': string;
29
+ 'Insert youtube/vimeo video': string;
30
+ 'Insert link': string;
31
+ 'Font size': string;
32
+ 'Font family': string;
33
+ 'Line height': string;
34
+ Spellcheck: string;
35
+ 'Speech Recognize': string;
36
+ newline: string;
37
+ 'Insert format block': string;
38
+ Normal: string;
39
+ 'Heading 1': string;
40
+ 'Heading 2': string;
41
+ 'Heading 3': string;
42
+ 'Heading 4': string;
43
+ Quote: string;
44
+ Code: string;
45
+ Insert: string;
46
+ 'Insert table': string;
47
+ 'Decrease Indent': string;
48
+ 'Increase Indent': string;
49
+ 'Select Special Character': string;
50
+ 'Insert Special Character': string;
51
+ 'Paint format': string;
52
+ 'Change mode': string;
53
+ Margins: string;
54
+ top: string;
55
+ right: string;
56
+ bottom: string;
57
+ left: string;
58
+ Styles: string;
59
+ Classes: string;
60
+ Align: string;
61
+ Right: string;
62
+ Center: string;
63
+ Left: string;
64
+ '--Not Set--': string;
65
+ Src: string;
66
+ Title: string;
67
+ Alternative: string;
68
+ Link: string;
69
+ 'Open link in new tab': string;
70
+ Image: string;
71
+ file: string;
72
+ 'Image properties': string;
73
+ Cancel: string;
74
+ Ok: string;
75
+ 'Your code is similar to HTML. Keep as HTML?': string;
76
+ 'Paste as HTML': string;
77
+ Keep: string;
78
+ Clean: string;
79
+ 'Insert as Text': string;
80
+ 'Word Paste Detected': string;
81
+ 'The pasted content is coming from a Microsoft Word/Excel document. Do you want to keep the format or clean it up?': string;
82
+ 'Insert only Text': string;
83
+ 'File Browser': string;
84
+ 'Error on load list': string;
85
+ 'Error on load folders': string;
86
+ 'Are you sure?': string;
87
+ 'Enter Directory name': string;
88
+ 'Create directory': string;
89
+ 'type name': string;
90
+ 'type dir name': string;
91
+ 'Drop image': string;
92
+ 'Drop file': string;
93
+ 'or click': string;
94
+ 'Alternative text': string;
95
+ Browse: string;
96
+ Upload: string;
97
+ Background: string;
98
+ Text: string;
99
+ Top: string;
100
+ Middle: string;
101
+ Bottom: string;
102
+ 'Insert column before': string;
103
+ 'Insert column after': string;
104
+ 'Insert row above': string;
105
+ 'Insert row below': string;
106
+ 'Delete table': string;
107
+ 'Delete row': string;
108
+ 'Delete column': string;
109
+ 'Empty cell': string;
110
+ Delete: string;
111
+ 'Strike through': string;
112
+ Underline: string;
113
+ Break: string;
114
+ 'Search for': string;
115
+ 'Replace with': string;
116
+ Replace: string;
117
+ Edit: string;
118
+ 'Vertical align': string;
119
+ 'Horizontal align': string;
120
+ Filter: string;
121
+ 'Sort by changed': string;
122
+ 'Sort by name': string;
123
+ 'Sort by size': string;
124
+ 'Add folder': string;
125
+ 'Split vertical': string;
126
+ 'Split horizontal': string;
127
+ Split: string;
128
+ Merge: string;
129
+ 'Add column': string;
130
+ 'Add row': string;
131
+ Border: string;
132
+ 'Embed code': string;
133
+ Update: string;
134
+ superscript: string;
135
+ subscript: string;
136
+ 'Cut selection': string;
137
+ Paste: string;
138
+ 'Choose Content to Paste': string;
139
+ 'Chars: %d': string;
140
+ 'Words: %d': string;
141
+ All: string;
142
+ 'Select %s': string;
143
+ 'Select all': string;
144
+ source: string;
145
+ bold: string;
146
+ italic: string;
147
+ brush: string;
148
+ link: string;
149
+ undo: string;
150
+ redo: string;
151
+ table: string;
152
+ image: string;
153
+ eraser: string;
154
+ paragraph: string;
155
+ fontsize: string;
156
+ video: string;
157
+ font: string;
158
+ about: string;
159
+ print: string;
160
+ underline: string;
161
+ strikethrough: string;
162
+ indent: string;
163
+ outdent: string;
164
+ fullsize: string;
165
+ shrink: string;
166
+ hr: string;
167
+ ul: string;
168
+ ol: string;
169
+ 'Lower Alpha': string;
170
+ 'Upper Alpha': string;
171
+ 'Lower Roman': string;
172
+ 'Upper Roman': string;
173
+ 'Lower Greek': string;
174
+ cut: string;
175
+ selectall: string;
176
+ 'Open link': string;
177
+ 'Edit link': string;
178
+ 'No follow': string;
179
+ Unlink: string;
180
+ Eye: string;
181
+ pencil: string;
182
+ ' URL': string;
183
+ Reset: string;
184
+ Save: string;
185
+ 'Save as ...': string;
186
+ Resize: string;
187
+ Crop: string;
188
+ Width: string;
189
+ Height: string;
190
+ 'Keep Aspect Ratio': string;
191
+ Yes: string;
192
+ No: string;
193
+ Remove: string;
194
+ Select: string;
195
+ 'You can only edit your own images. Download this image on the host?': string;
196
+ 'The image has been successfully uploaded to the host!': string;
197
+ palette: string;
198
+ 'There are no files': string;
199
+ Rename: string;
200
+ 'Enter new name': string;
201
+ preview: string;
202
+ download: string;
203
+ 'Paste from clipboard': string;
204
+ "Your browser doesn't support direct access to the clipboard.": string;
205
+ 'Copy selection': string;
206
+ copy: string;
207
+ 'Border radius': string;
208
+ 'Show all': string;
209
+ Apply: string;
210
+ 'Please fill out this field': string;
211
+ 'Please enter a web address': string;
212
+ Default: string;
213
+ Circle: string;
214
+ Dot: string;
215
+ Quadrate: string;
216
+ Find: string;
217
+ 'Find Previous': string;
218
+ 'Find Next': string;
219
+ 'Insert className': string;
220
+ 'Press Alt for custom resizing': string;
221
+ 'License: %s': string;
222
+ };
223
+ export = _exports;