@progress/kendo-vue-editor 3.5.4 → 3.6.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.
package/dist/es/Editor.js CHANGED
@@ -65,6 +65,8 @@ import { Pdf } from './tools/pdf';
65
65
  import { Print } from './tools/print';
66
66
  import { FindAndReplace } from './tools/findReplace';
67
67
  import { ApplyColor } from './tools/applyColor';
68
+ import { messages, keys } from './messages/main';
69
+ import { provideLocalizationService } from '@progress/kendo-vue-intl';
68
70
  /** @hidden */
69
71
 
70
72
  export var allTools = {
@@ -247,6 +249,11 @@ var EditorVue2 = {
247
249
  loaded: null,
248
250
  execute: null
249
251
  },
252
+ inject: {
253
+ kendoLocalizationService: {
254
+ default: null
255
+ }
256
+ },
250
257
  props: {
251
258
  defaultContent: String,
252
259
  value: [Object, String],
@@ -273,7 +280,10 @@ var EditorVue2 = {
273
280
  }
274
281
  },
275
282
  pasteHtml: Function,
276
- extendView: Function
283
+ extendView: Function,
284
+ ariaDescribedBy: String,
285
+ ariaLabelledBy: String,
286
+ ariaLabel: String
277
287
  },
278
288
  data: function data() {
279
289
  return {
@@ -361,6 +371,7 @@ var EditorVue2 = {
361
371
  preserveWhitespace = _d === void 0 ? 'full' : _d,
362
372
  style = _a.style;
363
373
  var view = this.getView();
374
+ var ls = provideLocalizationService(this);
364
375
 
365
376
  if (this.view) {
366
377
  var editorProps = editorPropsKey.getState(this.view.state);
@@ -476,15 +487,27 @@ var EditorVue2 = {
476
487
  ref: setRef(this, 'iframe'),
477
488
  frameborder: "0",
478
489
  attrs: this.v3 ? undefined : {
479
- frameborder: "0"
490
+ frameborder: "0",
491
+ title: ls.toLanguageString(keys.iframeTitle, messages[keys.iframeTitle])
480
492
  },
493
+ title: ls.toLanguageString(keys.iframeTitle, messages[keys.iframeTitle]),
481
494
  style: contentStyle,
482
495
  "class": "k-iframe"
483
496
  })]) : h("div", {
484
497
  style: contentStyle,
485
498
  "class": "k-editor-content"
486
499
  }, [h("div", {
487
- ref: setRef(this, 'contentElement')
500
+ ref: setRef(this, 'contentElement'),
501
+ role: "textbox",
502
+ attrs: this.v3 ? undefined : {
503
+ role: "textbox",
504
+ "aria-labelledby": this.$props.ariaLabelledBy,
505
+ "aria-describedby": this.$props.ariaDescribedBy,
506
+ "aria-label": this.$props.ariaLabel
507
+ },
508
+ "aria-labelledby": this.$props.ariaLabelledBy,
509
+ "aria-describedby": this.$props.ariaDescribedBy,
510
+ "aria-label": this.$props.ariaLabel
488
511
  })]), renderDialog.call(this)]);
489
512
  },
490
513
  methods: {
@@ -178,5 +178,18 @@ export interface EditorProps {
178
178
  * Defaults to `full`.
179
179
  */
180
180
  preserveWhitespace?: boolean | 'full' | string;
181
+ /**
182
+ * Identifies the element(s) which will describe the component, similar
183
+ * to [HTML aria-describedby attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute).
184
+ */
185
+ ariaDescribedBy?: string;
186
+ /**
187
+ * Identifies the element(s) which will label the component.
188
+ */
189
+ ariaLabelledBy?: string;
190
+ /**
191
+ * The accessible label of the component.
192
+ */
193
+ ariaLabel?: string;
181
194
  }
182
195
  export {};
@@ -80,6 +80,7 @@ export declare const messages: {
80
80
  "editor.findReplace-prevMatch": string;
81
81
  "editor.findReplace-nextMatch": string;
82
82
  "editor.findReplace-matches": string;
83
+ "editor.iframeTitle": string;
83
84
  };
84
85
  /**
85
86
  * @hidden
@@ -163,4 +164,5 @@ export declare const keys: {
163
164
  findReplacePrevMatch: string;
164
165
  findReplaceNextMatch: string;
165
166
  findReplaceMatches: string;
167
+ iframeTitle: string;
166
168
  };
@@ -311,6 +311,10 @@ var findReplaceNextMatch = 'editor.findReplace-nextMatch';
311
311
  * @hidden
312
312
  */
313
313
  var findReplaceMatches = 'editor.findReplace-matches';
314
+ /**
315
+ * @hidden
316
+ */
317
+ var iframeTitle = 'editor.iframeTitle';
314
318
  /**
315
319
  * @hidden
316
320
  */
@@ -399,6 +403,7 @@ export var messages = (_a = {},
399
403
  _a[findReplacePrevMatch] = 'Prev',
400
404
  _a[findReplaceNextMatch] = 'Next',
401
405
  _a[findReplaceMatches] = '{0} of {1} matches',
406
+ _a[iframeTitle] = 'Editable area. Press Alt + F10 for toolbar.',
402
407
  _a);
403
408
  /**
404
409
  * @hidden
@@ -481,5 +486,6 @@ export var keys = {
481
486
  findReplaceUseRegExp: findReplaceUseRegExp,
482
487
  findReplacePrevMatch: findReplacePrevMatch,
483
488
  findReplaceNextMatch: findReplaceNextMatch,
484
- findReplaceMatches: findReplaceMatches
489
+ findReplaceMatches: findReplaceMatches,
490
+ iframeTitle: iframeTitle
485
491
  };
@@ -5,7 +5,7 @@ export var packageMetadata = {
5
5
  name: '@progress/kendo-vue-editor',
6
6
  productName: 'Kendo UI for Vue',
7
7
  productCodes: ['KENDOUIVUE', 'KENDOUICOMPLETE'],
8
- publishDate: 1662729240,
8
+ publishDate: 1663078152,
9
9
  version: '',
10
10
  licensingDocsUrl: 'https://www.telerik.com/kendo-vue-ui/my-license/?utm_medium=product&utm_source=kendovue&utm_campaign=kendo-ui-vue-purchase-license-keys-warning'
11
11
  };
@@ -112,7 +112,8 @@ var FontNameVue2 = {
112
112
  itemRender: this.customItemRender,
113
113
  textField: 'text',
114
114
  dataItemKey: 'value',
115
- leftRightKeysNavigation: false
115
+ leftRightKeysNavigation: false,
116
+ title: defaultItem.text
116
117
  }), settings.props);
117
118
 
118
119
  var dropdown = h(DropDownList, __assign({
@@ -112,7 +112,8 @@ var FormatBlockVue2 = {
112
112
  leftRightKeysNavigation: false,
113
113
  popupSettings: {
114
114
  width: '170px'
115
- }
115
+ },
116
+ title: defaultItem.text
116
117
  }), settings.props);
117
118
 
118
119
  var dropdown = h(DropDownList, __assign({
@@ -65,6 +65,8 @@ import { Pdf } from './tools/pdf.js';
65
65
  import { Print } from './tools/print.js';
66
66
  import { FindAndReplace } from './tools/findReplace.js';
67
67
  import { ApplyColor } from './tools/applyColor.js';
68
+ import { messages, keys } from './messages/main.js';
69
+ import { provideLocalizationService } from '@progress/kendo-vue-intl';
68
70
  /** @hidden */
69
71
 
70
72
  export var allTools = {
@@ -247,6 +249,11 @@ var EditorVue2 = {
247
249
  loaded: null,
248
250
  execute: null
249
251
  },
252
+ inject: {
253
+ kendoLocalizationService: {
254
+ default: null
255
+ }
256
+ },
250
257
  props: {
251
258
  defaultContent: String,
252
259
  value: [Object, String],
@@ -273,7 +280,10 @@ var EditorVue2 = {
273
280
  }
274
281
  },
275
282
  pasteHtml: Function,
276
- extendView: Function
283
+ extendView: Function,
284
+ ariaDescribedBy: String,
285
+ ariaLabelledBy: String,
286
+ ariaLabel: String
277
287
  },
278
288
  data: function data() {
279
289
  return {
@@ -361,6 +371,7 @@ var EditorVue2 = {
361
371
  preserveWhitespace = _d === void 0 ? 'full' : _d,
362
372
  style = _a.style;
363
373
  var view = this.getView();
374
+ var ls = provideLocalizationService(this);
364
375
 
365
376
  if (this.view) {
366
377
  var editorProps = editorPropsKey.getState(this.view.state);
@@ -476,15 +487,27 @@ var EditorVue2 = {
476
487
  ref: setRef(this, 'iframe'),
477
488
  frameborder: "0",
478
489
  attrs: this.v3 ? undefined : {
479
- frameborder: "0"
490
+ frameborder: "0",
491
+ title: ls.toLanguageString(keys.iframeTitle, messages[keys.iframeTitle])
480
492
  },
493
+ title: ls.toLanguageString(keys.iframeTitle, messages[keys.iframeTitle]),
481
494
  style: contentStyle,
482
495
  "class": "k-iframe"
483
496
  })]) : h("div", {
484
497
  style: contentStyle,
485
498
  "class": "k-editor-content"
486
499
  }, [h("div", {
487
- ref: setRef(this, 'contentElement')
500
+ ref: setRef(this, 'contentElement'),
501
+ role: "textbox",
502
+ attrs: this.v3 ? undefined : {
503
+ role: "textbox",
504
+ "aria-labelledby": this.$props.ariaLabelledBy,
505
+ "aria-describedby": this.$props.ariaDescribedBy,
506
+ "aria-label": this.$props.ariaLabel
507
+ },
508
+ "aria-labelledby": this.$props.ariaLabelledBy,
509
+ "aria-describedby": this.$props.ariaDescribedBy,
510
+ "aria-label": this.$props.ariaLabel
488
511
  })]), renderDialog.call(this)]);
489
512
  },
490
513
  methods: {
@@ -178,5 +178,18 @@ export interface EditorProps {
178
178
  * Defaults to `full`.
179
179
  */
180
180
  preserveWhitespace?: boolean | 'full' | string;
181
+ /**
182
+ * Identifies the element(s) which will describe the component, similar
183
+ * to [HTML aria-describedby attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute).
184
+ */
185
+ ariaDescribedBy?: string;
186
+ /**
187
+ * Identifies the element(s) which will label the component.
188
+ */
189
+ ariaLabelledBy?: string;
190
+ /**
191
+ * The accessible label of the component.
192
+ */
193
+ ariaLabel?: string;
181
194
  }
182
195
  export {};
@@ -80,6 +80,7 @@ export declare const messages: {
80
80
  "editor.findReplace-prevMatch": string;
81
81
  "editor.findReplace-nextMatch": string;
82
82
  "editor.findReplace-matches": string;
83
+ "editor.iframeTitle": string;
83
84
  };
84
85
  /**
85
86
  * @hidden
@@ -163,4 +164,5 @@ export declare const keys: {
163
164
  findReplacePrevMatch: string;
164
165
  findReplaceNextMatch: string;
165
166
  findReplaceMatches: string;
167
+ iframeTitle: string;
166
168
  };
@@ -311,6 +311,10 @@ var findReplaceNextMatch = 'editor.findReplace-nextMatch';
311
311
  * @hidden
312
312
  */
313
313
  var findReplaceMatches = 'editor.findReplace-matches';
314
+ /**
315
+ * @hidden
316
+ */
317
+ var iframeTitle = 'editor.iframeTitle';
314
318
  /**
315
319
  * @hidden
316
320
  */
@@ -399,6 +403,7 @@ export var messages = (_a = {},
399
403
  _a[findReplacePrevMatch] = 'Prev',
400
404
  _a[findReplaceNextMatch] = 'Next',
401
405
  _a[findReplaceMatches] = '{0} of {1} matches',
406
+ _a[iframeTitle] = 'Editable area. Press Alt + F10 for toolbar.',
402
407
  _a);
403
408
  /**
404
409
  * @hidden
@@ -481,5 +486,6 @@ export var keys = {
481
486
  findReplaceUseRegExp: findReplaceUseRegExp,
482
487
  findReplacePrevMatch: findReplacePrevMatch,
483
488
  findReplaceNextMatch: findReplaceNextMatch,
484
- findReplaceMatches: findReplaceMatches
489
+ findReplaceMatches: findReplaceMatches,
490
+ iframeTitle: iframeTitle
485
491
  };
@@ -5,7 +5,7 @@ export var packageMetadata = {
5
5
  name: '@progress/kendo-vue-editor',
6
6
  productName: 'Kendo UI for Vue',
7
7
  productCodes: ['KENDOUIVUE', 'KENDOUICOMPLETE'],
8
- publishDate: 1662729240,
8
+ publishDate: 1663078152,
9
9
  version: '',
10
10
  licensingDocsUrl: 'https://www.telerik.com/kendo-vue-ui/my-license/?utm_medium=product&utm_source=kendovue&utm_campaign=kendo-ui-vue-purchase-license-keys-warning'
11
11
  };
@@ -112,7 +112,8 @@ var FontNameVue2 = {
112
112
  itemRender: this.customItemRender,
113
113
  textField: 'text',
114
114
  dataItemKey: 'value',
115
- leftRightKeysNavigation: false
115
+ leftRightKeysNavigation: false,
116
+ title: defaultItem.text
116
117
  }), settings.props);
117
118
 
118
119
  var dropdown = h(DropDownList, __assign({
@@ -112,7 +112,8 @@ var FormatBlockVue2 = {
112
112
  leftRightKeysNavigation: false,
113
113
  popupSettings: {
114
114
  width: '170px'
115
- }
115
+ },
116
+ title: defaultItem.text
116
117
  }), settings.props);
117
118
 
118
119
  var dropdown = h(DropDownList, __assign({
@@ -104,6 +104,10 @@ var print_1 = require("./tools/print");
104
104
  var findReplace_1 = require("./tools/findReplace");
105
105
 
106
106
  var applyColor_1 = require("./tools/applyColor");
107
+
108
+ var main_2 = require("./messages/main");
109
+
110
+ var kendo_vue_intl_1 = require("@progress/kendo-vue-intl");
107
111
  /** @hidden */
108
112
 
109
113
 
@@ -287,6 +291,11 @@ var EditorVue2 = {
287
291
  loaded: null,
288
292
  execute: null
289
293
  },
294
+ inject: {
295
+ kendoLocalizationService: {
296
+ default: null
297
+ }
298
+ },
290
299
  props: {
291
300
  defaultContent: String,
292
301
  value: [Object, String],
@@ -313,7 +322,10 @@ var EditorVue2 = {
313
322
  }
314
323
  },
315
324
  pasteHtml: Function,
316
- extendView: Function
325
+ extendView: Function,
326
+ ariaDescribedBy: String,
327
+ ariaLabelledBy: String,
328
+ ariaLabel: String
317
329
  },
318
330
  data: function data() {
319
331
  return {
@@ -401,6 +413,7 @@ var EditorVue2 = {
401
413
  preserveWhitespace = _d === void 0 ? 'full' : _d,
402
414
  style = _a.style;
403
415
  var view = this.getView();
416
+ var ls = (0, kendo_vue_intl_1.provideLocalizationService)(this);
404
417
 
405
418
  if (this.view) {
406
419
  var editorProps = props_key_1.editorPropsKey.getState(this.view.state);
@@ -516,15 +529,27 @@ var EditorVue2 = {
516
529
  ref: (0, kendo_vue_common_1.setRef)(this, 'iframe'),
517
530
  frameborder: "0",
518
531
  attrs: this.v3 ? undefined : {
519
- frameborder: "0"
532
+ frameborder: "0",
533
+ title: ls.toLanguageString(main_2.keys.iframeTitle, main_2.messages[main_2.keys.iframeTitle])
520
534
  },
535
+ title: ls.toLanguageString(main_2.keys.iframeTitle, main_2.messages[main_2.keys.iframeTitle]),
521
536
  style: contentStyle,
522
537
  "class": "k-iframe"
523
538
  })]) : h("div", {
524
539
  style: contentStyle,
525
540
  "class": "k-editor-content"
526
541
  }, [h("div", {
527
- ref: (0, kendo_vue_common_1.setRef)(this, 'contentElement')
542
+ ref: (0, kendo_vue_common_1.setRef)(this, 'contentElement'),
543
+ role: "textbox",
544
+ attrs: this.v3 ? undefined : {
545
+ role: "textbox",
546
+ "aria-labelledby": this.$props.ariaLabelledBy,
547
+ "aria-describedby": this.$props.ariaDescribedBy,
548
+ "aria-label": this.$props.ariaLabel
549
+ },
550
+ "aria-labelledby": this.$props.ariaLabelledBy,
551
+ "aria-describedby": this.$props.ariaDescribedBy,
552
+ "aria-label": this.$props.ariaLabel
528
553
  })]), renderDialog.call(this)]);
529
554
  },
530
555
  methods: {
@@ -178,5 +178,18 @@ export interface EditorProps {
178
178
  * Defaults to `full`.
179
179
  */
180
180
  preserveWhitespace?: boolean | 'full' | string;
181
+ /**
182
+ * Identifies the element(s) which will describe the component, similar
183
+ * to [HTML aria-describedby attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute).
184
+ */
185
+ ariaDescribedBy?: string;
186
+ /**
187
+ * Identifies the element(s) which will label the component.
188
+ */
189
+ ariaLabelledBy?: string;
190
+ /**
191
+ * The accessible label of the component.
192
+ */
193
+ ariaLabel?: string;
181
194
  }
182
195
  export {};
@@ -80,6 +80,7 @@ export declare const messages: {
80
80
  "editor.findReplace-prevMatch": string;
81
81
  "editor.findReplace-nextMatch": string;
82
82
  "editor.findReplace-matches": string;
83
+ "editor.iframeTitle": string;
83
84
  };
84
85
  /**
85
86
  * @hidden
@@ -163,4 +164,5 @@ export declare const keys: {
163
164
  findReplacePrevMatch: string;
164
165
  findReplaceNextMatch: string;
165
166
  findReplaceMatches: string;
167
+ iframeTitle: string;
166
168
  };
@@ -314,6 +314,10 @@ var findReplaceNextMatch = 'editor.findReplace-nextMatch';
314
314
  * @hidden
315
315
  */
316
316
  var findReplaceMatches = 'editor.findReplace-matches';
317
+ /**
318
+ * @hidden
319
+ */
320
+ var iframeTitle = 'editor.iframeTitle';
317
321
  /**
318
322
  * @hidden
319
323
  */
@@ -402,6 +406,7 @@ exports.messages = (_a = {},
402
406
  _a[findReplacePrevMatch] = 'Prev',
403
407
  _a[findReplaceNextMatch] = 'Next',
404
408
  _a[findReplaceMatches] = '{0} of {1} matches',
409
+ _a[iframeTitle] = 'Editable area. Press Alt + F10 for toolbar.',
405
410
  _a);
406
411
  /**
407
412
  * @hidden
@@ -484,5 +489,6 @@ exports.keys = {
484
489
  findReplaceUseRegExp: findReplaceUseRegExp,
485
490
  findReplacePrevMatch: findReplacePrevMatch,
486
491
  findReplaceNextMatch: findReplaceNextMatch,
487
- findReplaceMatches: findReplaceMatches
492
+ findReplaceMatches: findReplaceMatches,
493
+ iframeTitle: iframeTitle
488
494
  };
@@ -8,7 +8,7 @@ exports.packageMetadata = {
8
8
  name: '@progress/kendo-vue-editor',
9
9
  productName: 'Kendo UI for Vue',
10
10
  productCodes: ['KENDOUIVUE', 'KENDOUICOMPLETE'],
11
- publishDate: 1662729240,
11
+ publishDate: 1663078152,
12
12
  version: '',
13
13
  licensingDocsUrl: 'https://www.telerik.com/kendo-vue-ui/my-license/?utm_medium=product&utm_source=kendovue&utm_campaign=kendo-ui-vue-purchase-license-keys-warning'
14
14
  };
@@ -125,7 +125,8 @@ var FontNameVue2 = {
125
125
  itemRender: this.customItemRender,
126
126
  textField: 'text',
127
127
  dataItemKey: 'value',
128
- leftRightKeysNavigation: false
128
+ leftRightKeysNavigation: false,
129
+ title: defaultItem.text
129
130
  }), settings.props);
130
131
 
131
132
  var dropdown = h(kendo_vue_dropdowns_1.DropDownList, __assign({
@@ -125,7 +125,8 @@ var FormatBlockVue2 = {
125
125
  leftRightKeysNavigation: false,
126
126
  popupSettings: {
127
127
  width: '170px'
128
- }
128
+ },
129
+ title: defaultItem.text
129
130
  }), settings.props);
130
131
 
131
132
  var dropdown = h(kendo_vue_dropdowns_1.DropDownList, __assign({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@progress/kendo-vue-editor",
3
3
  "description": "Kendo UI for Vue Editor package",
4
- "version": "3.5.4",
4
+ "version": "3.6.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/telerik/kendo-vue.git"
@@ -37,33 +37,33 @@
37
37
  "peerDependencies": {
38
38
  "@progress/kendo-drawing": "^1.2.0",
39
39
  "@progress/kendo-licensing": "^1.0.1",
40
- "@progress/kendo-vue-buttons": "^3.0.0",
41
- "@progress/kendo-vue-dialogs": "^3.0.0",
42
- "@progress/kendo-vue-dropdowns": "^3.0.0",
43
- "@progress/kendo-vue-inputs": "^3.0.0",
44
- "@progress/kendo-vue-intl": "^3.0.0",
45
- "@progress/kendo-vue-layout": "^3.0.0",
46
- "@progress/kendo-vue-pdf": "^3.0.0",
47
- "@progress/kendo-vue-popup": "^3.0.0",
40
+ "@progress/kendo-vue-buttons": "^3.6.0",
41
+ "@progress/kendo-vue-dialogs": "^3.6.0",
42
+ "@progress/kendo-vue-dropdowns": "^3.6.0",
43
+ "@progress/kendo-vue-inputs": "^3.6.0",
44
+ "@progress/kendo-vue-intl": "^3.6.0",
45
+ "@progress/kendo-vue-layout": "^3.6.0",
46
+ "@progress/kendo-vue-pdf": "^3.6.0",
47
+ "@progress/kendo-vue-popup": "^3.6.0",
48
48
  "vue": "^2.6.12 || ^3.0.2"
49
49
  },
50
50
  "dependencies": {
51
51
  "@progress/kendo-editor-common": "1.8.0",
52
- "@progress/kendo-vue-common": "3.5.4"
52
+ "@progress/kendo-vue-common": "3.6.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@progress/kendo-drawing": "^1.8.0",
56
56
  "@progress/kendo-licensing": "^1.0.1",
57
- "@progress/kendo-vue-buttons": "3.5.4",
58
- "@progress/kendo-vue-dialogs": "3.5.4",
59
- "@progress/kendo-vue-dropdowns": "3.5.4",
60
- "@progress/kendo-vue-form": "3.5.4",
61
- "@progress/kendo-vue-inputs": "3.5.4",
62
- "@progress/kendo-vue-intl": "3.5.4",
63
- "@progress/kendo-vue-layout": "3.5.4",
64
- "@progress/kendo-vue-pdf": "3.5.4",
65
- "@progress/kendo-vue-popup": "3.5.4",
66
- "@progress/kendo-vue-upload": "3.5.4"
57
+ "@progress/kendo-vue-buttons": "3.6.0",
58
+ "@progress/kendo-vue-dialogs": "3.6.0",
59
+ "@progress/kendo-vue-dropdowns": "3.6.0",
60
+ "@progress/kendo-vue-form": "3.6.0",
61
+ "@progress/kendo-vue-inputs": "3.6.0",
62
+ "@progress/kendo-vue-intl": "3.6.0",
63
+ "@progress/kendo-vue-layout": "3.6.0",
64
+ "@progress/kendo-vue-pdf": "3.6.0",
65
+ "@progress/kendo-vue-popup": "3.6.0",
66
+ "@progress/kendo-vue-upload": "3.6.0"
67
67
  },
68
68
  "@progress": {
69
69
  "friendlyName": "Editor",