devexpress-richedit 24.2.2-beta → 24.2.3

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DevExpress WebRichEdit (index.d.ts)
3
- * Version: 24.2.2
3
+ * Version: 24.2.3
4
4
  * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
5
5
  * License: https://www.devexpress.com/Support/EULAs
6
6
  */
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DevExpress WebRichEdit (index.js)
3
- * Version: 24.2.2
3
+ * Version: 24.2.3
4
4
  * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
5
5
  * License: https://www.devexpress.com/Support/EULAs
6
6
  */
@@ -61,8 +61,8 @@ export class ClientRichEdit {
61
61
  this.rawDataSource = settings.rawDataSource;
62
62
  this.contextMenuSettings = settings.contextMenuSettings;
63
63
  this.fullScreenHelper = new FullScreenHelper(element);
64
- if ("eyJsaWNlbnNlS2V5IjoiZXdvZ0lDSm1iM0p0WVhRaU9pQXhMQW9nSUNKcGJuUmxjbTVoYkZWellXZGxTV1FpT2lBaWFUbHhVemQxYzBSQ01HVlpTbDlrVGkxb2FYaGtVU0lLZlE9PS5INTlJcG94ZC90cWdVcE1leVdhamhubjl2NnFtMkFrQmc2MW0yU05ZUHIreFBrdnRLUm04Wm4rU08rUVQ3NEt3MVpWQ0pGeEJYV1dJRlNyRG1EZlVqYmV6N2RzTnpJbTR6S1A5M2l4amVQR0Jnb2o4eG9VSmZvNldmZzNMblpTUlNLcHFpZz09In0=")
65
- config(JSON.parse(atob("eyJsaWNlbnNlS2V5IjoiZXdvZ0lDSm1iM0p0WVhRaU9pQXhMQW9nSUNKcGJuUmxjbTVoYkZWellXZGxTV1FpT2lBaWFUbHhVemQxYzBSQ01HVlpTbDlrVGkxb2FYaGtVU0lLZlE9PS5INTlJcG94ZC90cWdVcE1leVdhamhubjl2NnFtMkFrQmc2MW0yU05ZUHIreFBrdnRLUm04Wm4rU08rUVQ3NEt3MVpWQ0pGeEJYV1dJRlNyRG1EZlVqYmV6N2RzTnpJbTR6S1A5M2l4amVQR0Jnb2o4eG9VSmZvNldmZzNMblpTUlNLcHFpZz09In0=")));
64
+ if ("eyJsaWNlbnNlS2V5IjoiZXdvZ0lDSm1iM0p0WVhRaU9pQXhMQW9nSUNKcGJuUmxjbTVoYkZWellXZGxTV1FpT2lBaWFIaHFVV1ZWV0RGWFJVZFJTM1ZrTFU1bVQxbE5aeUlLZlE9PS5VMEV0VjZRMUNKaDR1WDIzbXZzcEl1d1prYVhDbzZKQittWFJqQTNZZ3pHOWxIL3dCQ2hNeDJ3RFdxdG1BQnpzYXdJc3hqME0yN2FDaFRCMTlJamR2L2ozRzE2Rk9zQTdJampEOTZjcGpWS29VZnkvS1I4K2dVcDFHSTEybnF3czZDWGNFdz09In0=")
65
+ config(JSON.parse(atob("eyJsaWNlbnNlS2V5IjoiZXdvZ0lDSm1iM0p0WVhRaU9pQXhMQW9nSUNKcGJuUmxjbTVoYkZWellXZGxTV1FpT2lBaWFIaHFVV1ZWV0RGWFJVZFJTM1ZrTFU1bVQxbE5aeUlLZlE9PS5VMEV0VjZRMUNKaDR1WDIzbXZzcEl1d1prYVhDbzZKQittWFJqQTNZZ3pHOWxIL3dCQ2hNeDJ3RFdxdG1BQnpzYXdJc3hqME0yN2FDaFRCMTlJamR2L2ozRzE2Rk9zQTdJampEOTZjcGpWS29VZnkvS1I4K2dVcDFHSTEybnF3czZDWGNFdz09In0=")));
66
66
  this.prepareElement(element, settings);
67
67
  this.initDefaultFontsAndStyles();
68
68
  this.initBars(settings.ribbon, settings.fonts);
@@ -11,8 +11,11 @@ export declare class MailMergeCommand extends CommandBase<SimpleCommandState> {
11
11
  executeCore(_state: SimpleCommandState, options: CommandSimpleOptions<MailMergeCommandParameters>): boolean;
12
12
  prepareMergedDocument(modelManager: IModelManager, param: MailMergeCommandParameters): void;
13
13
  private getDataSource;
14
- private replaceMergeFieldsInModel;
14
+ private replaceFieldsInModel;
15
+ private processFieldsInSubDocument;
15
16
  private replaceMergeFieldsInSubDocument;
17
+ private replaceIfFieldsInSubDocument;
18
+ private replaceFieldWithText;
16
19
  private getResultByFieldName;
17
20
  private insertSeparator;
18
21
  private createModelManager;
@@ -24,6 +24,7 @@ import { DocxExporter } from '../formats/docx/export/exporter';
24
24
  import { Importer } from '../formats/docx/import/importer';
25
25
  import { ImporterOptions } from '../formats/docx/import/importer-options';
26
26
  import { exportModelToBlob } from '../model-api/formats/exporter';
27
+ import { FieldCodeParserIf } from '../../common/model/fields/parsers/field-code-parser-if';
27
28
  export class MailMergeCommand extends CommandBase {
28
29
  getState() {
29
30
  var state = new SimpleCommandState(this.isEnabled());
@@ -34,8 +35,10 @@ export class MailMergeCommand extends CommandBase {
34
35
  return true;
35
36
  }
36
37
  isEnabled() {
37
- return super.isEnabled() && ControlOptions.isEnabled(this.control.modelManager.richOptions.control.fields) &&
38
- this.control.modelManager.model.mainSubDocument.getDocumentEndPosition() > 1 && !!this.getDataSource();
38
+ return (super.isEnabled() &&
39
+ ControlOptions.isEnabled(this.control.modelManager.richOptions.control.fields) &&
40
+ this.control.modelManager.model.mainSubDocument.getDocumentEndPosition() > 1 &&
41
+ !!this.getDataSource());
39
42
  }
40
43
  canModify() {
41
44
  return true;
@@ -58,7 +61,7 @@ export class MailMergeCommand extends CommandBase {
58
61
  throw new Error(Errors.InternalException);
59
62
  const param = options.param;
60
63
  this.prepareMergedDocument(exportModelOptions.modelManager, param);
61
- exportModelToBlob(exportModelOptions, blob => param.callback(blob));
64
+ exportModelToBlob(exportModelOptions, (blob) => param.callback(blob));
62
65
  }, 3000);
63
66
  formatImagesImporter.import(exportModelOptions.modelManager.modelManipulator);
64
67
  }, () => { });
@@ -79,7 +82,7 @@ export class MailMergeCommand extends CommandBase {
79
82
  if (index > param.exportFrom)
80
83
  rangeCopy.insertTo(modelManager.modelManipulator, new SubDocumentPosition(subDoc, subDoc.getDocumentEndPosition() - 1));
81
84
  const record = dataSource.items()[index];
82
- this.replaceMergeFieldsInModel(modelManager, record, lastProcessedPositionInMainSubDocument, processedSubDocIds);
85
+ this.replaceFieldsInModel(modelManager, record, lastProcessedPositionInMainSubDocument, processedSubDocIds);
83
86
  if (index < exportToIndex)
84
87
  this.insertSeparator(modelManager, param.mergeMode);
85
88
  lastProcessedPositionInMainSubDocument = subDoc.getDocumentEndPosition() - 1;
@@ -88,41 +91,71 @@ export class MailMergeCommand extends CommandBase {
88
91
  getDataSource() {
89
92
  return this.control.owner.dataSource;
90
93
  }
91
- replaceMergeFieldsInModel(modelManager, record, lastProcessedPositionInMainSubDocument, processedSubDocIds) {
94
+ replaceFieldsInModel(modelManager, record, lastProcessedPositionInMainSubDocument, processedSubDocIds) {
92
95
  NumberMapUtils.forEach(modelManager.model.subDocuments, (subDoc) => {
93
- if (!ListUtils.anyOf(processedSubDocIds, id => id === subDoc.id)) {
96
+ if (!ListUtils.anyOf(processedSubDocIds, (id) => id === subDoc.id)) {
94
97
  this.replaceMergeFieldsInSubDocument(modelManager, record, lastProcessedPositionInMainSubDocument, subDoc);
98
+ this.replaceIfFieldsInSubDocument(modelManager, lastProcessedPositionInMainSubDocument, subDoc);
95
99
  if (!subDoc.isMain())
96
100
  processedSubDocIds.push(subDoc.id);
97
101
  }
98
102
  });
99
103
  }
100
- replaceMergeFieldsInSubDocument(modelManager, record, lastProcessedPositionInMainSubDocument, subDoc) {
104
+ processFieldsInSubDocument(modelManager, lastProcessedPositionInMainSubDocument, subDoc, processField) {
101
105
  for (let i = subDoc.fields.length - 1; i >= 0; i--) {
102
106
  const field = subDoc.fields[i];
103
- if (subDoc.isMain() && field.getFieldStartPosition() < lastProcessedPositionInMainSubDocument)
107
+ if (subDoc.isMain() && field.getFieldStartPosition() < lastProcessedPositionInMainSubDocument) {
104
108
  return;
109
+ }
105
110
  const parser = FieldsWaitingForUpdate.getParser(modelManager, null, null, subDoc, field);
106
111
  if (parser) {
107
- if (parser instanceof FieldCodeParserMailMerge) {
108
- const fieldName = parser.getMergeFieldName();
109
- const pos = field.getFieldStartPosition();
110
- const text = RichUtils.replaceParagraphEndCharsWithLineBreak(this.getResultByFieldName(record, fieldName));
111
- if (!StringUtils.isNullOrEmpty(text)) {
112
- const insertParams = new InsertTextManipulatorParams(new SubDocumentPosition(subDoc, pos), subDoc.getRunByPosition(pos).getCharPropsBundle(modelManager.model), RunType.TextRun, text);
113
- modelManager.modelManipulator.text.insertTextInner(insertParams);
112
+ try {
113
+ const text = processField(parser);
114
+ if (text !== null) {
115
+ this.replaceFieldWithText(modelManager, subDoc, field, text);
114
116
  }
115
- modelManager.modelManipulator.range.removeIntervalWithoutHistory(subDoc, field.getAllFieldInterval(), false);
116
117
  }
117
- parser.destructor();
118
+ finally {
119
+ parser.destructor();
120
+ }
118
121
  }
119
122
  }
120
123
  }
124
+ replaceMergeFieldsInSubDocument(modelManager, record, lastProcessedPositionInMainSubDocument, subDoc) {
125
+ const processField = (parser) => {
126
+ if (parser instanceof FieldCodeParserMailMerge) {
127
+ const fieldName = parser.getMergeFieldName();
128
+ return RichUtils.replaceParagraphEndCharsWithLineBreak(this.getResultByFieldName(record, fieldName));
129
+ }
130
+ return null;
131
+ };
132
+ this.processFieldsInSubDocument(modelManager, lastProcessedPositionInMainSubDocument, subDoc, processField);
133
+ }
134
+ replaceIfFieldsInSubDocument(modelManager, lastProcessedPositionInMainSubDocument, subDoc) {
135
+ const processField = (parser) => {
136
+ if (parser instanceof FieldCodeParserIf) {
137
+ parser.parseSwitchesAndArgs();
138
+ return parser.getResult();
139
+ }
140
+ return null;
141
+ };
142
+ this.processFieldsInSubDocument(modelManager, lastProcessedPositionInMainSubDocument, subDoc, processField);
143
+ }
144
+ replaceFieldWithText(modelManager, subDoc, field, text) {
145
+ if (!StringUtils.isNullOrEmpty(text)) {
146
+ const pos = field.getFieldStartPosition();
147
+ const runProps = subDoc.getRunByPosition(pos).getCharPropsBundle(modelManager.model);
148
+ const insertParams = new InsertTextManipulatorParams(new SubDocumentPosition(subDoc, pos), runProps, RunType.TextRun, text);
149
+ modelManager.modelManipulator.text.insertTextInner(insertParams);
150
+ }
151
+ modelManager.modelManipulator.range.removeIntervalWithoutHistory(subDoc, field.getAllFieldInterval(), false);
152
+ }
121
153
  getResultByFieldName(record, fieldName) {
122
154
  const keys = Object.keys(record);
123
- for (let i = 0, key; key = keys[i]; i++)
155
+ for (let i = 0, key; (key = keys[i]); i++) {
124
156
  if (key.toLowerCase() == fieldName.toLowerCase())
125
157
  return record[key] + '';
158
+ }
126
159
  return '';
127
160
  }
128
161
  insertSeparator(modelManager, mergeMode) {
@@ -4,8 +4,13 @@ export declare class StylesExporter extends ExporterBaseWithRootElement {
4
4
  get rootElement(): string;
5
5
  get rootNSPrefix(): string;
6
6
  get rootNSValue(): string;
7
+ private styleNameToIndex;
8
+ private sortedStyleIndexes;
9
+ private processedStyleNames;
7
10
  protected fillWriter(): void;
8
11
  private exportDocumentDefaults;
9
12
  private exportDocumentCharacterDefaults;
10
13
  private exportDocumentParagraphDefaults;
14
+ private getSortedStyleIndexes;
15
+ private sortStyleIndexRecursive;
11
16
  }
@@ -3,13 +3,20 @@ import { ListUtils } from '@devexpress/utils/lib/utils/list';
3
3
  import { DocxNsType } from '../../utils/constants';
4
4
  import { ExporterBaseWithRootElement } from './base';
5
5
  export class StylesExporter extends ExporterBaseWithRootElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.styleNameToIndex = new Map();
9
+ this.sortedStyleIndexes = [];
10
+ this.processedStyleNames = new Set();
11
+ }
6
12
  get filePath() { return 'word/styles.xml'; }
7
13
  get rootElement() { return 'styles'; }
8
14
  get rootNSPrefix() { return this.data.constants.namespaces[DocxNsType.WordProcessing].prefix; }
9
15
  get rootNSValue() { return this.data.constants.namespaces[DocxNsType.WordProcessing].namespace; }
10
16
  fillWriter() {
11
17
  this.exportDocumentDefaults();
12
- ListUtils.forEach(this.data.model.paragraphStyles, (style, index) => this.data.parStyleExporter.export(style, index));
18
+ const paragraphStyleIndexes = this.getSortedStyleIndexes();
19
+ ListUtils.forEach(paragraphStyleIndexes, (index) => this.data.parStyleExporter.export(this.data.model.paragraphStyles[index], index));
13
20
  ListUtils.forEach(this.data.model.characterStyles, (style, index) => this.data.charStyleExporter.export(style, index));
14
21
  ListUtils.forEach(this.data.model.tableStyles, (style, index) => this.data.tblStyleExporter.export(style, index));
15
22
  }
@@ -33,4 +40,26 @@ export class StylesExporter extends ExporterBaseWithRootElement {
33
40
  this.writer.endElement();
34
41
  this.writer.endElement();
35
42
  }
43
+ getSortedStyleIndexes() {
44
+ this.styleNameToIndex = new Map();
45
+ this.sortedStyleIndexes = [];
46
+ this.processedStyleNames = new Set();
47
+ const styles = this.data.model.paragraphStyles;
48
+ styles.forEach((style, index) => this.styleNameToIndex.set(style.styleName, index));
49
+ for (let index = 0; index < styles.length; index++)
50
+ this.sortStyleIndexRecursive(index);
51
+ return this.sortedStyleIndexes;
52
+ }
53
+ sortStyleIndexRecursive(index) {
54
+ const styles = this.data.model.paragraphStyles;
55
+ const style = styles[index];
56
+ if (this.processedStyleNames.has(style.styleName))
57
+ return;
58
+ this.processedStyleNames.add(style.styleName);
59
+ if (style.parent) {
60
+ const parentIndex = this.styleNameToIndex.get(style.parent.styleName);
61
+ this.sortStyleIndexRecursive(parentIndex);
62
+ }
63
+ this.sortedStyleIndexes.push(index);
64
+ }
36
65
  }
@@ -1,5 +1,5 @@
1
- import * as DxLocDate from 'devextreme/localization/date';
2
- import * as DxLocNumber from 'devextreme/localization/number';
1
+ import * as DxLocDate from 'devextreme/common/core/localization/date';
2
+ import * as DxLocNumber from 'devextreme/common/core/localization/number';
3
3
  export class ClientFormattersOptions {
4
4
  get locDate() { var _a; return (_a = DxLocDate.default) !== null && _a !== void 0 ? _a : DxLocDate; }
5
5
  get locNumber() { var _a; return (_a = DxLocNumber.default) !== null && _a !== void 0 ? _a : DxLocNumber; }
@@ -1,4 +1,5 @@
1
1
  import { IntervalAlgorithms } from '@devexpress/utils/lib/intervals/algorithms';
2
+ import { Comparers } from '@devexpress/utils/lib/utils/comparers';
2
3
  import { ListUtils } from '@devexpress/utils/lib/utils/list';
3
4
  export function findRangePermissionsByIntervals(sourceCollection, intervals) {
4
5
  const permissions = [];
@@ -19,5 +20,6 @@ export function findRangePermissions(sourceCollection, check) {
19
20
  }
20
21
  export function findRangePermission(sourceCollection, coreInterval, userName, group) {
21
22
  const intervals = findRangePermissionsByIntervals(sourceCollection, [coreInterval]);
22
- return ListUtils.elementBy(intervals, (permission) => permission.userName == userName && permission.group == group);
23
+ return ListUtils.elementBy(intervals, (permission) => Comparers.stringIgnoreCase(permission.userName, userName) == 0 &&
24
+ Comparers.stringIgnoreCase(permission.group, group) == 0);
23
25
  }
@@ -10,6 +10,7 @@ import { ModelParametersChecker } from '../api-utils/model-parameter-checker';
10
10
  import { findRangePermission, findRangePermissions, findRangePermissionsByIntervals } from '../api-utils/range-permission-finder';
11
11
  import { RangePermissionApi } from '../range-permission';
12
12
  import { Collection } from './collection';
13
+ import { Comparers } from '@devexpress/utils/lib/utils/comparers';
13
14
  export class RangePermissionCollection extends Collection {
14
15
  constructor(processor, subDocument) {
15
16
  super(processor);
@@ -81,13 +82,13 @@ function findByPosition(position, canBeUndefined, sourceCollection) {
81
82
  }
82
83
  function findByUserName(value, permissions) {
83
84
  return ListUtils.map(ApiParametersChecker.check(value, 1, true, [
84
- ApiParametersChecker.stringDescriptor("userName", (userName) => findRangePermissions(permissions, permission => permission.userName == userName), false),
85
+ ApiParametersChecker.stringDescriptor("userName", (userName) => findRangePermissions(permissions, permission => Comparers.stringIgnoreCase(permission.userName, userName) == 0), false),
85
86
  ApiParametersChecker.regExpDescriptor('regexp', (regexp) => findRangePermissions(permissions, permission => regexp.test(permission.userName)))
86
87
  ]), (b) => b);
87
88
  }
88
89
  function findByGroup(value, permissions) {
89
90
  return ListUtils.map(ApiParametersChecker.check(value, 1, true, [
90
- ApiParametersChecker.stringDescriptor("group", (group) => findRangePermissions(permissions, permission => permission.group == group), false),
91
+ ApiParametersChecker.stringDescriptor("group", (group) => findRangePermissions(permissions, permission => Comparers.stringIgnoreCase(permission.group, group) == 0), false),
91
92
  ApiParametersChecker.regExpDescriptor('regexp', (regexp) => findRangePermissions(permissions, permission => regexp.test(permission.group)))
92
93
  ]), (b) => b);
93
94
  }
@@ -4,6 +4,7 @@ import { DXColor } from '../../../../model/color/dx-color';
4
4
  import { ListUtils } from '@devexpress/utils/lib/utils/list';
5
5
  import { NumberMapUtils } from '@devexpress/utils/lib/utils/map/number';
6
6
  import { RtfContentExporter } from '../exporters/rtf-content-exporter';
7
+ import { Comparers } from '@devexpress/utils/lib/utils/comparers';
7
8
  export class RtfExportHelper {
8
9
  constructor() {
9
10
  this.colorCollection = [];
@@ -39,11 +40,11 @@ export class RtfExportHelper {
39
40
  return DXColor.blend(color, DXColor.white);
40
41
  }
41
42
  getUserIndex(rangePermission) {
42
- let index = this.userCollection.indexOf(rangePermission.userName);
43
+ let index = this.userCollection.findIndex((userName) => Comparers.stringIgnoreCase(userName, rangePermission.userName) == 0);
43
44
  if (index >= 0)
44
45
  return index + 1;
45
46
  const predefinedUserGroups = RtfContentExporter.predefinedUserGroups;
46
- const id = NumberMapUtils.keyBy(predefinedUserGroups, (g) => g == rangePermission.group);
47
+ const id = NumberMapUtils.keyBy(predefinedUserGroups, (g) => Comparers.stringIgnoreCase(g, rangePermission.group) == 0);
47
48
  return id != null ? id : 0;
48
49
  }
49
50
  }
@@ -3,6 +3,7 @@ import { FieldCodeParserClientUpdatingBase } from './field-code-parser-client-up
3
3
  export declare class FieldCodeParserIf extends FieldCodeParserClientUpdatingBase {
4
4
  get name(): FieldName;
5
5
  protected fillResult(): boolean;
6
+ getResult(): string;
6
7
  private parseParameters;
7
8
  }
8
9
  export declare class IfExpression {
@@ -6,8 +6,7 @@ export class FieldCodeParserIf extends FieldCodeParserClientUpdatingBase {
6
6
  this.setInputPositionState();
7
7
  let result = null;
8
8
  try {
9
- const expression = this.parseParameters(this.parameterInfoList);
10
- result = expression.evaluate();
9
+ result = this.getResult();
11
10
  }
12
11
  catch (err) {
13
12
  if (err instanceof IfExpressionError) {
@@ -21,6 +20,10 @@ export class FieldCodeParserIf extends FieldCodeParserClientUpdatingBase {
21
20
  return true;
22
21
  }
23
22
  }
23
+ getResult() {
24
+ const expression = this.parseParameters(this.parameterInfoList);
25
+ return expression.evaluate();
26
+ }
24
27
  parseParameters(parameters) {
25
28
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
26
29
  if (parameters.length > 5)
@@ -7,8 +7,8 @@ import { BookmarkBase } from './bookmarks';
7
7
  export class RangePermission extends BookmarkBase {
8
8
  constructor(positionManager, interval, userName, group) {
9
9
  super(positionManager, interval);
10
- this.userName = userName.toLowerCase();
11
- this.group = group.toLowerCase();
10
+ this.userName = userName;
11
+ this.group = group;
12
12
  }
13
13
  isGranted(settings) {
14
14
  return RangePermission.allow(this.group, RangePermission.Everyone_GROUP_NAME) ||
@@ -17,7 +17,7 @@ export class RangePermission extends BookmarkBase {
17
17
  RangePermission.allow(this.group, settings.authenticationGroup);
18
18
  }
19
19
  static allow(permissionValue, settingsValue) {
20
- return settingsValue != "" && permissionValue == settingsValue;
20
+ return settingsValue != "" && Comparers.stringIgnoreCase(permissionValue, settingsValue) == 0;
21
21
  }
22
22
  get end() { return this._interval.end - 1; }
23
23
  get length() { return this.end - this.start; }
@@ -42,7 +42,9 @@ export class RangePermission extends BookmarkBase {
42
42
  return new RangePermission(positionManager, this.interval, this.userName, this.group);
43
43
  }
44
44
  equals(obj) {
45
- return super.equals(obj) && (StringUtils.isNullOrEmpty(this.userName) ? this.group == obj.group : this.userName == obj.userName);
45
+ return super.equals(obj) && (StringUtils.isNullOrEmpty(this.userName) ?
46
+ Comparers.stringIgnoreCase(obj.group, this.group) == 0 :
47
+ Comparers.stringIgnoreCase(obj.userName, this.userName) == 0);
46
48
  }
47
49
  }
48
50
  RangePermission.Everyone_GROUP_NAME = "Everyone".toLowerCase();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devexpress-richedit",
3
- "version": "24.2.2-beta",
3
+ "version": "24.2.3",
4
4
  "homepage": "https://www.devexpress.com/",
5
5
  "bugs": "https://www.devexpress.com/support/",
6
6
  "author": "Developer Express Inc.",
@@ -14,8 +14,8 @@
14
14
  "build-nspell": "webpack --mode production --config=bin/nspell.webpack.config.js"
15
15
  },
16
16
  "peerDependencies": {
17
- "devextreme": "24.2.2-beta",
18
- "devextreme-dist": "24.2.2-beta"
17
+ "devextreme": "24.2.3",
18
+ "devextreme-dist": "24.2.3"
19
19
  },
20
20
  "dependencies": {
21
21
  "jszip": "~3.10.1",