Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
2763196
update to Angular 20
GoodDayForSurf Feb 4, 2026
b0a17d4
update TS in core after update to Angular 20
GoodDayForSurf Feb 4, 2026
86b6762
update TS after update to Angular 20
GoodDayForSurf Feb 4, 2026
76f0e96
fix TS config
GoodDayForSurf Feb 4, 2026
1308846
fix TS config
GoodDayForSurf Feb 4, 2026
b58f604
fix TS config
GoodDayForSurf Feb 4, 2026
8857e4e
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 4, 2026
82f23b5
fix TS config
GoodDayForSurf Feb 4, 2026
9572a91
fix TS after update to Angular 20
GoodDayForSurf Feb 5, 2026
b56d6e6
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 5, 2026
54351ae
update lock and merge upstream
GoodDayForSurf Feb 5, 2026
a15ee6a
fix exports for correct ts creating *.d.ts while build
GoodDayForSurf Feb 9, 2026
3bd73a9
update devextreme-angular generation
GoodDayForSurf Feb 11, 2026
97c90f4
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 11, 2026
bda9330
regenerate devextreme-angular by new generator
GoodDayForSurf Feb 12, 2026
b5cc316
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 12, 2026
519586a
update lock
GoodDayForSurf Feb 12, 2026
cf3fb61
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 12, 2026
069e2e2
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 12, 2026
056be5a
update lock
GoodDayForSurf Feb 12, 2026
15a12d4
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 12, 2026
1516b0c
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 12, 2026
b9140d5
update branch and regenerate devextreme-angular
GoodDayForSurf Feb 12, 2026
998bd3b
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 12, 2026
dd0ccf6
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 12, 2026
fb8eaa7
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 12, 2026
d693500
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 12, 2026
fdc15c5
fix devextreme-angular integration
GoodDayForSurf Feb 12, 2026
bee6137
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 12, 2026
0e8b4b4
fix devextreme-angular tests
GoodDayForSurf Feb 12, 2026
d8ea31e
fix devextreme-angular tests
GoodDayForSurf Feb 13, 2026
e9cbf4f
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 13, 2026
7508c92
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 13, 2026
34f5518
fix lock
GoodDayForSurf Feb 13, 2026
4d11978
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 13, 2026
8309ef2
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 17, 2026
89f8a34
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 17, 2026
c38fec1
regenerate all
GoodDayForSurf Feb 17, 2026
63612a3
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 17, 2026
511df3e
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 17, 2026
5f451f6
update to upstream
GoodDayForSurf Feb 17, 2026
6b0bf76
update lock
GoodDayForSurf Feb 17, 2026
64b9016
revert gregeneration for react and vue
GoodDayForSurf Feb 17, 2026
3d7db2b
regenerate devextreme-angular
GoodDayForSurf Feb 17, 2026
ed44a64
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 17, 2026
090aded
regenerate devextreme-react and devextreme-vue
GoodDayForSurf Feb 17, 2026
3308471
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 17, 2026
68db269
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 18, 2026
f1ec49a
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 18, 2026
cdc96cd
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 18, 2026
acb4c7e
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 18, 2026
4acb27a
revert devextreme-vue
GoodDayForSurf Feb 18, 2026
3825ce5
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 18, 2026
2aa7f28
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 18, 2026
e3cd83c
Revert "revert devextreme-vue"
GoodDayForSurf Feb 18, 2026
fd80950
revert devextreme-vue
GoodDayForSurf Feb 18, 2026
1fdc79b
fix demos
GoodDayForSurf Feb 18, 2026
e5b9193
fix demos bundles
GoodDayForSurf Feb 18, 2026
a781581
fix demos bundles
GoodDayForSurf Feb 18, 2026
cbfe184
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 19, 2026
8ae2942
fix formatting
GoodDayForSurf Feb 19, 2026
9bd4215
fix regenerated
GoodDayForSurf Feb 19, 2026
659200d
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Feb 19, 2026
f114686
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 19, 2026
46ed807
regenerate root index
GoodDayForSurf Feb 19, 2026
a45d488
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 19, 2026
03487d9
regenerate root index
GoodDayForSurf Feb 19, 2026
a2f5fb3
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Feb 19, 2026
33f5f4e
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Feb 20, 2026
8115502
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 2, 2026
af4696a
Merge branch '26_1_upd_angular20' of https://github.com/GoodDayForSur…
GoodDayForSurf Mar 2, 2026
1419521
regenerate wrappers
GoodDayForSurf Mar 3, 2026
2261a9f
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 3, 2026
e623867
regenerate wrappers
GoodDayForSurf Mar 3, 2026
22e0f75
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 3, 2026
c49ac11
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 25, 2026
d191cff
use udpated devextreme-internal-tools for generation
GoodDayForSurf Mar 25, 2026
f6cdb0c
use udpated devextreme-internal-tools for generation devextreme
GoodDayForSurf Mar 25, 2026
ff1e047
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 25, 2026
21d51f0
revert @types/node
GoodDayForSurf Mar 26, 2026
8126157
Merge remote-tracking branch 'my/26_1_upd_angular20' into 26_1_upd_an…
GoodDayForSurf Mar 26, 2026
d0f18e6
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 26, 2026
3d5bce8
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 26, 2026
b06a2aa
update lock
GoodDayForSurf Mar 26, 2026
bd9fa6b
regenerate index in devextreme-angular
GoodDayForSurf Mar 26, 2026
d201734
remove unnecessary changes
GoodDayForSurf Mar 26, 2026
84ebdf2
regenerate index
GoodDayForSurf Mar 26, 2026
bb703bc
update lock
GoodDayForSurf Mar 26, 2026
86c8ab4
Revert "remove unnecessary changes"
GoodDayForSurf Mar 26, 2026
79545d0
regenerate index
GoodDayForSurf Mar 26, 2026
5cbbe00
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 27, 2026
092d14a
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 27, 2026
9271f1f
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into …
GoodDayForSurf Mar 27, 2026
6a997b8
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 27, 2026
d6737c7
update lock
GoodDayForSurf Mar 27, 2026
62af07c
Merge remote-tracking branch 'my/26_1_upd_angular20' into 26_1_upd_an…
GoodDayForSurf Mar 27, 2026
a727379
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 27, 2026
16546e4
Merge branch '26_1' into 26_1_upd_angular20
GoodDayForSurf Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions packages/devextreme-angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
"author": "Developer Express Inc.",
"license": "MIT",
"peerDependencies": {
"@angular/common": ">=19.0.0",
"@angular/core": ">=19.0.0",
"@angular/forms": ">=19.0.0",
"@angular/common": ">=20.0.0",
"@angular/core": ">=20.0.0",
"@angular/forms": ">=20.0.0",
"devextreme": "workspace:*"
},
"devDependencies": {
Expand All @@ -40,8 +40,8 @@
"@eslint/eslintrc": "catalog:",
"@eslint-stylistic/metadata": "catalog:",
"@stylistic/eslint-plugin": "catalog:",
"@types/jasmine": "2.8.24",
"@types/node": "20.11.17",
"@types/jasmine": "~6.0.0",
"@types/node": "~20.19.0",
"@typescript-eslint/eslint-plugin": "catalog:",
"@typescript-eslint/parser": "catalog:",
"@webcomponents/custom-elements": "1.6.0",
Expand All @@ -65,7 +65,7 @@
"reflect-metadata": "0.1.13",
"stream-browserify": "3.0.0",
"style-loader": "3.3.4",
"tslib": "2.6.3",
"tslib": "2.8.1",
"typescript": "catalog:angular",
"webpack": "5.105.4",
"yargs": "17.7.2",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export {
export type {
GroupItem,
isGroupItemsArray,
isItemsArray,
Expand Down
14 changes: 10 additions & 4 deletions packages/devextreme-angular/src/core/integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@ import eventsEngine from 'devextreme/common/core/events/core/events_engine';
const outsideZoneEvents = ['mousemove', 'mouseover', 'mouseout'];
const insideZoneEvents = ['mouseup', 'click', 'mousedown', 'transitionend', 'wheel'];

let originalAdd;
let callbacks = [];
let readyCallbackAdd = function (callback) {
type ReadyCallback = () => void;
type ReadyCallbackAdd = (callback: ReadyCallback) => void;
interface ReadyCallbackAddContext {
callBase: ReadyCallbackAdd;
}

let originalAdd: ReadyCallbackAdd;
let callbacks: ReadyCallback[] = [];
let readyCallbackAdd = function (this: ReadyCallbackAddContext, callback: ReadyCallback) {
if (!originalAdd) {
originalAdd = this.callBase.bind(this);
}
Expand All @@ -36,7 +42,7 @@ let doInjections = (document: any, ngZone: NgZone, xhrFactory: XhrFactory) => {
domAdapter.inject({
_document: document,

listen(...args) {
listen(this: { callBase: (...args: any[]) => any }, ...args) {
const eventName = args[1];
if (outsideZoneEvents.includes(eventName)) {
return ngZone.runOutsideAngular(() => this.callBase.apply(this, args));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export class IterableDifferHelper {
if (value && Array.isArray(value)) {
if (!this._propertyDiffers[prop]) {
try {
this._propertyDiffers[prop] = this._differs.find(value).create(null);
this._propertyDiffers[prop] = this._differs.find(value).create(undefined);
return true;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (e) { }
Expand Down
9 changes: 6 additions & 3 deletions packages/devextreme-angular/src/core/nested-option.ts
Original file line number Diff line number Diff line change
Expand Up @@ -220,14 +220,17 @@ export interface IOptionWithTemplate extends BaseNestedOption {
template: any;
}

const triggerShownEvent = function (element) {
const changeHandlers = [];
const triggerShownEvent = function (element: Element) {
const changeHandlers: Element[] = [];

if (!render(element).hasClass(VISIBILITY_CHANGE_SELECTOR)) {
changeHandlers.push(element);
}

changeHandlers.push.apply(changeHandlers, element.querySelectorAll(`.${VISIBILITY_CHANGE_SELECTOR}`));
const nestedHandlers = Array.prototype.slice.call(
element.querySelectorAll(`.${VISIBILITY_CHANGE_SELECTOR}`),
) as Element[];
changeHandlers.push(...nestedHandlers);

for (let i = 0; i < changeHandlers.length; i++) {
triggerHandler(changeHandlers[i], 'dxshown');
Expand Down
3 changes: 2 additions & 1 deletion packages/devextreme-angular/src/core/watcher-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export class WatcherHelper {
return value;
}

private _checkObjectsFields(checkingFromObject: object, checkingToObject: object) {
private _checkObjectsFields(checkingFromObject: Record<string, any>, checkingToObject: Record<string, any>) {
for (const field in checkingFromObject) {
const oldValue = this._toComparable(checkingFromObject[field]);
const newValue = this._toComparable(checkingToObject[field]);
Expand All @@ -72,6 +72,7 @@ export class WatcherHelper {
return true;
}
}
return false;
}

checkWatchers() {
Expand Down
266 changes: 265 additions & 1 deletion packages/devextreme-angular/src/index.ts

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions packages/devextreme-angular/tests/src/server/ssr-ajax.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ describe('Universal', () => {
});
// spec
it('should set state and remove data from the state when the request is repeated', () => {
const platformId = TestBed.get(PLATFORM_ID);
const platformId = TestBed.inject(PLATFORM_ID);
if (isPlatformServer(platformId)) {
sendRequest.apply(mockSendRequest, [{ url: 'someurl' }]);
const transferState: TransferState = TestBed.get(TransferState);
const transferState: TransferState = TestBed.inject(TransferState);
const key = makeStateKey('0urlsomeurl');

expect(transferState.hasKey(key)).toBe(true);
Expand All @@ -74,11 +74,11 @@ describe('Universal', () => {
});

it('should generate complex key', () => {
const platformId = TestBed.get(PLATFORM_ID);
const platformId = TestBed.inject(PLATFORM_ID);
if (isPlatformServer(platformId)) {
sendRequest.apply(mockSendRequest, [{ url: 'someurl', data: { filter: { name: 'test' }, select: ['name'] } }]);
const key = makeStateKey('0urlsomeurldatafilternametestselect0name');
const transferState: TransferState = TestBed.get(TransferState);
const transferState: TransferState = TestBed.inject(TransferState);

expect(transferState.hasKey(key)).toBe(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ describe('Universal', () => {
template: '<dx-data-grid></dx-data-grid>',
},
});
const platformID = TestBed.get(PLATFORM_ID);
const platformID = TestBed.inject(PLATFORM_ID);
if (isPlatformServer(platformID)) {
const fixture = TestBed.createComponent(TestContainerComponent);
fixture.detectChanges();

const transferState: TransferState = TestBed.get(TransferState);
const transferState: TransferState = TestBed.inject(TransferState);

expect(transferState.hasKey(getServerStateKey())).toBe(true);
expect(transferState.get(getServerStateKey(), null as any)).toEqual(true);
Expand All @@ -70,7 +70,7 @@ describe('Universal', () => {
});

const fixture = TestBed.createComponent(TestContainerComponent);
const transferState: TransferState = TestBed.get(TransferState);
const transferState: TransferState = TestBed.inject(TransferState);

transferState.set(getServerStateKey(), true as any);

Expand Down
6 changes: 3 additions & 3 deletions packages/devextreme-angular/tests/src/ui/data-grid.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ describe('DxDataGrid slow tests', () => {

fixture.detectChanges();

for (let i = 0; i < 100; i++) {
for (let i = 0; i < 500; i++) {
document.body.click();
fixture.detectChanges();
}
Expand All @@ -600,7 +600,7 @@ describe('DxDataGrid slow tests', () => {

const memoryBefore = await (performance as any).measureUserAgentSpecificMemory();

for (let i = 0; i < 100; i++) {
for (let i = 0; i < 500; i++) {
document.body.click();
fixture.detectChanges();
}
Expand All @@ -610,6 +610,6 @@ describe('DxDataGrid slow tests', () => {
const memoryAfter = await (performance as any).measureUserAgentSpecificMemory();
const memoryDiff = Math.round((memoryAfter.bytes - memoryBefore.bytes) / 1024);

expect(memoryDiff).toBeLessThan(40);
expect(memoryDiff).toBeLessThan(100);
});
});
2 changes: 1 addition & 1 deletion packages/devextreme-angular/tests/src/ui/list.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ describe('DxList', () => {
testComponent.items.push(2);
fixture.detectChanges();

expect(instance.option).toHaveBeenCalledWith('items', [1, 2]);
expect(optionSpy as jasmine.Spy).toHaveBeenCalledWith('items', [1, 2]);
optionSpy.calls.reset();
});

Expand Down
31 changes: 28 additions & 3 deletions packages/devextreme-angular/tsconfig.lib.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,44 @@
{
"extends": "./node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
"extends": "../../tsconfig.json",
"angularCompilerOptions": {
"compilationMode": "partial",
"strictTemplates": true,
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"enableResourceInlining": true
},
"compilerOptions": {
"noUnusedLocals": false,
"skipDefaultLibCheck": true,
"baseUrl": ".",
"moduleResolution": "node",
"outDir": "AUTOGENERATED",
"declaration": true,
"declarationDir": "AUTOGENERATED",
"declarationMap": true,
"inlineSourceMap": true,
"inlineSources": true,
"emitDecoratorMetadata": false,
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
"useDefineForClassFields": false,
"strictNullChecks": false,
"verbatimModuleSyntax": false,
"lib": [
"ES2022",
"dom",
"dom.iterable"
],
"skipLibCheck": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"typeRoots": [
"./node_modules/@types",
"../../node_modules/@types"
]
},
"files": []
"files": [],
"exclude": ["node_modules", "dist", "**/*.shim.ts", "**/*.spec.ts"]
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ export async function generateAngularComponents(
});
logger.verbose('✓ Module facades generated');

logger.verbose('🔗 Generating common reexports...');
AngularCommonReexportsGenerator.generate({
outputPath: path.dirname(componentsDir),
metadata: metaData,
templatingOptions: config.templatingOptions,
});
logger.verbose('✓ Common reexports generated');

logger.verbose('📋 Generating index facades...');
const facadeGenerator = new AngularFacadeGenerator();
facadeGenerator.generate({
Expand All @@ -83,15 +91,8 @@ export async function generateAngularComponents(
},
},
commonImports: ['./common', './common/grids', './common/charts'],
commonReexports: metaData?.commonReexports,
templatingOptions: config.templatingOptions,
});
logger.verbose('✓ Index facades generated');

logger.verbose('🔗 Generating common reexports...');
AngularCommonReexportsGenerator.generate({
outputPath: path.dirname(componentsDir),
metadata: metaData,
templatingOptions: config.templatingOptions,
});
logger.verbose('✓ Common reexports generated');
}
Loading
Loading