@progress/kendo-angular-diagrams 25.1.0-develop.3 → 25.1.0-develop.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.
@@ -5,7 +5,7 @@
5
5
  import { placeTooltip, events, convertToDiagramModel, loadTheme, Diagram } from '@progress/kendo-diagram-common';
6
6
  export { ArrowMarker, Circle, CircleMarker, Collate, Connection, Connector, DataInputOutput, DataStorage, Database, Decision, Delay, DirectAccessStorage, Display, Document, Extract, FlowchartShapeType, Group, Image, InternalStorage, Layout, Line, LogicalOr, ManualInputOutput, ManualOperation, MarkerType, Merge, MultiLineTextBlock, MultipleDocuments, OffPageConnector, OnPageConnector, Path, Point, Polyline, PredefinedProcess, Preparation, Process, Rect, Rectangle, Shape, Sort, SummingJunction, Terminator, TextBlock, convertToDiagramModel } from '@progress/kendo-diagram-common';
7
7
  import * as i0 from '@angular/core';
8
- import { Directive, EventEmitter, ContentChild, ViewChild, Output, Input, HostBinding, Component, NgModule } from '@angular/core';
8
+ import { Directive, EventEmitter, signal, effect, ContentChild, ViewChild, Output, Input, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
9
9
  import { validatePackage } from '@progress/kendo-licensing';
10
10
  import { isPresent, getLicenseMessage, shouldShowValidationUI, hasObservers, isDocumentAvailable, WatermarkOverlayComponent } from '@progress/kendo-angular-common';
11
11
  import * as i1 from '@progress/kendo-angular-popup';
@@ -20,8 +20,8 @@ const packageMetadata = {
20
20
  productName: 'Kendo UI for Angular',
21
21
  productCode: 'KENDOUIANGULAR',
22
22
  productCodes: ['KENDOUIANGULAR'],
23
- publishDate: 1787037079,
24
- version: '25.1.0-develop.3',
23
+ publishDate: 1787052849,
24
+ version: '25.1.0-develop.4',
25
25
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning',
26
26
  };
27
27
 
@@ -133,38 +133,74 @@ class DiagramComponent {
133
133
  * Defines the default configuration options applicable to all connections.
134
134
  *
135
135
  */
136
- connectionDefaults;
136
+ set connectionDefaults(value) {
137
+ this._connectionDefaults.set(value);
138
+ }
139
+ get connectionDefaults() {
140
+ return this._connectionDefaults();
141
+ }
137
142
  /**
138
143
  * Defines the connections that render between the shapes in the `Diagram` (see [Connections article](https://www.telerik.com/kendo-angular-ui/components/diagrams/connections)).
139
144
  * Accepts either an array of `ConnectionOptions` or an array of any objects
140
145
  * that will be mapped using the `connectionModelFields` configuration.
141
146
  *
142
147
  */
143
- connections = [];
148
+ set connections(value) {
149
+ this._connections.set(value);
150
+ }
151
+ get connections() {
152
+ return this._connections();
153
+ }
144
154
  /**
145
155
  * Defines the field mapping configuration for connections data binding ([see example](https://www.telerik.com/kendo-angular-ui/components/diagrams/data-binding#field-mapping)).
146
156
  * Maps source object properties to `Diagram` connection properties.
147
157
  * Only used when `connections` is an array of custom objects instead of `ConnectionOptions`.
148
158
  */
149
- connectionModelFields;
159
+ set connectionModelFields(value) {
160
+ this._connectionModelFields.set(value);
161
+ }
162
+ get connectionModelFields() {
163
+ return this._connectionModelFields();
164
+ }
150
165
  /**
151
166
  * A set of settings to configure the `Diagram` behavior when the user attempts to drag, resize, or remove shapes.
152
167
  * Changing the property value dynamically triggers a reinitialization of the `Diagram`.
153
168
  *
154
169
  * @default true
155
170
  */
156
- editable = true;
171
+ set editable(value) {
172
+ this._editable.set(value);
173
+ if (this.diagramWidget) {
174
+ this.options = { ...this.options, editable: value };
175
+ this.diagramWidget.destroy();
176
+ this.init();
177
+ this.bindDiagramEvents();
178
+ }
179
+ }
180
+ get editable() {
181
+ return this._editable();
182
+ }
157
183
  /**
158
184
  * Defines the layout configuration for arranging shapes and connections in the `Diagram` (see [Layout article](https://www.telerik.com/kendo-angular-ui/components/diagrams/layouts)).
159
185
  *
160
186
  */
161
- layout;
187
+ set layout(value) {
188
+ this._layout.set(value);
189
+ }
190
+ get layout() {
191
+ return this._layout();
192
+ }
162
193
  /**
163
194
  * Defines the pannable options. Use this setting to disable `Diagram` pan or change the key that activates the pan behavior.
164
195
  *
165
196
  * @default true
166
197
  */
167
- pannable = true;
198
+ set pannable(value) {
199
+ this._pannable.set(value);
200
+ }
201
+ get pannable() {
202
+ return this._pannable();
203
+ }
168
204
  /**
169
205
  * Defines the `Diagram` selection options.
170
206
  *
@@ -176,48 +212,88 @@ class DiagramComponent {
176
212
  *
177
213
  * @default true
178
214
  */
179
- selectable = true;
215
+ set selectable(value) {
216
+ this._selectable.set(value);
217
+ }
218
+ get selectable() {
219
+ return this._selectable();
220
+ }
180
221
  /**
181
222
  * Defines the default configuration options applicable to all shapes.
182
223
  */
183
- shapeDefaults;
224
+ set shapeDefaults(value) {
225
+ this._shapeDefaults.set(value);
226
+ }
227
+ get shapeDefaults() {
228
+ return this._shapeDefaults();
229
+ }
184
230
  /**
185
231
  * Defines the shapes that render in the `Diagram` (see [Shapes article](https://www.telerik.com/kendo-angular-ui/components/diagrams/shapes)).
186
232
  * Accepts either an array of `ShapeOptions` or an array of any objects
187
233
  * that will be mapped using the `shapeModelFields` configuration.
188
234
  *
189
235
  */
190
- shapes = [];
236
+ set shapes(value) {
237
+ this._shapes.set(value);
238
+ }
239
+ get shapes() {
240
+ return this._shapes();
241
+ }
191
242
  /**
192
243
  * Defines the field mapping configuration for shapes data binding ([see example](https://www.telerik.com/kendo-angular-ui/components/diagrams/data-binding#field-mapping)).
193
244
  * Maps source object properties to `Diagram` shape properties.
194
245
  * Only used when `shapes` is an array of custom objects instead of `ShapeOptions`.
195
246
  */
196
- shapeModelFields;
247
+ set shapeModelFields(value) {
248
+ this._shapeModelFields.set(value);
249
+ }
250
+ get shapeModelFields() {
251
+ return this._shapeModelFields();
252
+ }
197
253
  /**
198
254
  * Defines the zoom level of the `Diagram`.
199
255
  *
200
256
  * @default 1
201
257
  */
202
- zoom = 1;
258
+ set zoom(value) {
259
+ this._zoom.set(value);
260
+ }
261
+ get zoom() {
262
+ return this._zoom();
263
+ }
203
264
  /**
204
265
  * Defines the maximum zoom level of the `Diagram`.
205
266
  *
206
267
  * @default 2
207
268
  */
208
- zoomMax = 2;
269
+ set zoomMax(value) {
270
+ this._zoomMax.set(value);
271
+ }
272
+ get zoomMax() {
273
+ return this._zoomMax();
274
+ }
209
275
  /**
210
276
  * Defines the minimum zoom level of the `Diagram`.
211
277
  *
212
278
  * @default 0.1
213
279
  */
214
- zoomMin = 0.1;
280
+ set zoomMin(value) {
281
+ this._zoomMin.set(value);
282
+ }
283
+ get zoomMin() {
284
+ return this._zoomMin();
285
+ }
215
286
  /**
216
287
  * Defines the zoom rate of the `Diagram`.
217
288
  *
218
289
  * @default 0.1
219
290
  */
220
- zoomRate = 0.1;
291
+ set zoomRate(value) {
292
+ this._zoomRate.set(value);
293
+ }
294
+ get zoomRate() {
295
+ return this._zoomRate();
296
+ }
221
297
  /**
222
298
  * Enables keyboard navigation in the `Diagram`.
223
299
  * When set to `true`, navigate between shapes using arrow keys.
@@ -228,19 +304,16 @@ class DiagramComponent {
228
304
  * @remarks
229
305
  * This property is related to accessibility.
230
306
  */
231
- set navigable(_navigable) {
232
- if (typeof _navigable === 'boolean') {
233
- this._navigable = _navigable ? DEFAULT_NAVIGABLE_OPTIONS : { ...DEFAULT_NAVIGABLE_OPTIONS, enabled: false };
307
+ set navigable(value) {
308
+ if (typeof value === 'boolean') {
309
+ this._navigable.set(value ? DEFAULT_NAVIGABLE_OPTIONS : { ...DEFAULT_NAVIGABLE_OPTIONS, enabled: false });
234
310
  }
235
311
  else {
236
- this._navigable = _navigable;
237
- this._navigable.enabled = isPresent(this._navigable.enabled) ? this._navigable.enabled : true;
312
+ this._navigable.set({ ...value, enabled: isPresent(value.enabled) ? value.enabled : true });
238
313
  }
239
- this.options = { ...this.options, navigation: this.getNormalizedNavigationOptions() };
240
- this.diagramWidget?.setOptions(this.options);
241
314
  }
242
315
  get navigable() {
243
- return this._navigable;
316
+ return this._navigable();
244
317
  }
245
318
  /**
246
319
  * Fires when a shape or connection is created or removed.
@@ -333,20 +406,10 @@ class DiagramComponent {
333
406
  * @hidden
334
407
  */
335
408
  customTemplate;
336
- _navigable = DEFAULT_NAVIGABLE_OPTIONS;
337
- options = {
338
- shapes: this.shapes,
339
- connections: this.connections,
340
- selectable: this.selectable,
341
- editable: this.editable,
342
- zoom: this.zoom,
343
- zoomMax: this.zoomMax,
344
- zoomMin: this.zoomMin,
345
- zoomRate: this.zoomRate,
346
- shapeDefaults: this.shapeDefaults,
347
- connectionDefaults: this.connectionDefaults,
348
- navigation: this.getNormalizedNavigationOptions()
349
- };
409
+ /**
410
+ * Stores the live configuration that is pushed into the Diagram widget and updated by effects.
411
+ */
412
+ options;
350
413
  /**
351
414
  * Stores the converted shapes from user data.
352
415
  */
@@ -359,6 +422,91 @@ class DiagramComponent {
359
422
  * Current popup instance for tooltip.
360
423
  */
361
424
  tooltipPopup;
425
+ _navigable = signal(DEFAULT_NAVIGABLE_OPTIONS, ...(ngDevMode ? [{ debugName: "_navigable" }] : []));
426
+ _connectionDefaults = signal(undefined, ...(ngDevMode ? [{ debugName: "_connectionDefaults" }] : []));
427
+ _connections = signal([], ...(ngDevMode ? [{ debugName: "_connections" }] : []));
428
+ _connectionModelFields = signal(undefined, ...(ngDevMode ? [{ debugName: "_connectionModelFields" }] : []));
429
+ _editable = signal(true, ...(ngDevMode ? [{ debugName: "_editable" }] : []));
430
+ _layout = signal(undefined, ...(ngDevMode ? [{ debugName: "_layout" }] : []));
431
+ _pannable = signal(true, ...(ngDevMode ? [{ debugName: "_pannable" }] : []));
432
+ _selectable = signal(true, ...(ngDevMode ? [{ debugName: "_selectable" }] : []));
433
+ _shapeDefaults = signal(undefined, ...(ngDevMode ? [{ debugName: "_shapeDefaults" }] : []));
434
+ _shapes = signal([], ...(ngDevMode ? [{ debugName: "_shapes" }] : []));
435
+ _shapeModelFields = signal(undefined, ...(ngDevMode ? [{ debugName: "_shapeModelFields" }] : []));
436
+ _zoom = signal(1, ...(ngDevMode ? [{ debugName: "_zoom" }] : []));
437
+ _zoomMax = signal(2, ...(ngDevMode ? [{ debugName: "_zoomMax" }] : []));
438
+ _zoomMin = signal(0.1, ...(ngDevMode ? [{ debugName: "_zoomMin" }] : []));
439
+ _zoomRate = signal(0.1, ...(ngDevMode ? [{ debugName: "_zoomRate" }] : []));
440
+ dataBindingEffect = effect(() => {
441
+ this._shapes();
442
+ this._connections();
443
+ this._shapeModelFields();
444
+ this._connectionModelFields();
445
+ if (!this.diagramWidget) {
446
+ return;
447
+ }
448
+ this.convertUserData();
449
+ this.options = { ...this.options, shapes: this.convertedShapes, connections: this.convertedConnections };
450
+ this.loadOptions(this.options);
451
+ }, ...(ngDevMode ? [{ debugName: "dataBindingEffect" }] : []));
452
+ connectionDefaultsEffect = effect(() => {
453
+ const connectionDefaults = this._connectionDefaults();
454
+ if (!this.diagramWidget || connectionDefaults === undefined) {
455
+ return;
456
+ }
457
+ this.options.connectionDefaults = { ...this.options.connectionDefaults, ...connectionDefaults };
458
+ this.loadOptions(this.options);
459
+ }, ...(ngDevMode ? [{ debugName: "connectionDefaultsEffect" }] : []));
460
+ shapeDefaultsEffect = effect(() => {
461
+ const shapeDefaults = this._shapeDefaults();
462
+ if (!this.diagramWidget || shapeDefaults === undefined) {
463
+ return;
464
+ }
465
+ this.options.shapeDefaults = { ...this.options.shapeDefaults, ...shapeDefaults };
466
+ this.loadOptions(this.options);
467
+ }, ...(ngDevMode ? [{ debugName: "shapeDefaultsEffect" }] : []));
468
+ scalarOptionsEffect = effect(() => {
469
+ const zoomMax = this._zoomMax();
470
+ const zoomMin = this._zoomMin();
471
+ const zoomRate = this._zoomRate();
472
+ const selectable = this._selectable();
473
+ const pannable = this._pannable();
474
+ if (!this.diagramWidget) {
475
+ return;
476
+ }
477
+ this.options.zoomMax = zoomMax;
478
+ this.options.zoomMin = zoomMin;
479
+ this.options.zoomRate = zoomRate;
480
+ this.options.selectable = selectable;
481
+ this.options.pannable = pannable;
482
+ this.diagramWidget?.setOptions(this.options);
483
+ }, ...(ngDevMode ? [{ debugName: "scalarOptionsEffect" }] : []));
484
+ layoutEffect = effect(() => {
485
+ const layout = this._layout();
486
+ if (!this.diagramWidget) {
487
+ return;
488
+ }
489
+ this.options.layout = layout;
490
+ this.diagramWidget?.setOptions(this.options);
491
+ this.diagramWidget?.layout(this.options.layout);
492
+ }, ...(ngDevMode ? [{ debugName: "layoutEffect" }] : []));
493
+ zoomEffect = effect(() => {
494
+ const zoom = this._zoom();
495
+ if (!this.diagramWidget) {
496
+ return;
497
+ }
498
+ this.options.zoom = zoom;
499
+ this.diagramWidget?.setOptions(this.options);
500
+ this.diagramWidget?.zoom(this.diagramWidget?.options.zoom);
501
+ }, ...(ngDevMode ? [{ debugName: "zoomEffect" }] : []));
502
+ navigableEffect = effect(() => {
503
+ this._navigable();
504
+ if (!this.diagramWidget) {
505
+ return;
506
+ }
507
+ this.options = { ...this.options, navigation: this.getNormalizedNavigationOptions() };
508
+ this.diagramWidget?.setOptions(this.options);
509
+ }, ...(ngDevMode ? [{ debugName: "navigableEffect" }] : []));
362
510
  defaultTooltipTemplate;
363
511
  customTooltipTemplate;
364
512
  shapeTooltipTemplate;
@@ -378,60 +526,23 @@ class DiagramComponent {
378
526
  this.licenseMessage = getLicenseMessage(packageMetadata);
379
527
  this.showLicenseWatermark = shouldShowValidationUI(isValid);
380
528
  }
381
- ngOnChanges(changes) {
382
- if (changes['shapes'] || changes['connections'] || changes['shapeModelFields'] || changes['connectionModelFields']) {
383
- this.convertUserData();
384
- this.options = {
385
- ...this.options,
386
- shapes: this.convertedShapes,
387
- connections: this.convertedConnections
388
- };
389
- this.loadOptions(this.options);
390
- }
391
- if (changes['connectionDefaults']) {
392
- this.options.connectionDefaults = { ...this.options.connectionDefaults, ...this.connectionDefaults };
393
- this.loadOptions(this.options);
394
- }
395
- if (changes['shapeDefaults']) {
396
- this.options.shapeDefaults = { ...this.options.shapeDefaults, ...this.shapeDefaults };
397
- this.loadOptions(this.options);
398
- }
399
- if (changes['editable']) {
400
- this.options = { ...this.options, editable: this.editable };
401
- if (this.diagramWidget) {
402
- this.diagramWidget.destroy();
403
- this.init();
404
- this.bindDiagramEvents();
405
- }
406
- }
407
- if (changes['zoomMax']) {
408
- this.updateOptions('zoomMax');
409
- }
410
- if (changes['zoomMin']) {
411
- this.updateOptions('zoomMin');
412
- }
413
- if (changes['zoomRate']) {
414
- this.updateOptions('zoomRate');
415
- }
416
- if (changes['selectable']) {
417
- this.updateOptions('selectable');
418
- }
419
- if (changes['layout']) {
420
- this.updateOptions('layout');
421
- this.diagramWidget?.layout(this.options.layout);
422
- }
423
- if (changes['pannable']) {
424
- this.updateOptions('pannable');
425
- }
426
- if (changes['zoom']) {
427
- this.updateOptions('zoom');
428
- this.diagramWidget?.zoom(this.diagramWidget.options.zoom);
429
- }
430
- }
431
529
  ngAfterViewInit() {
432
530
  this.convertUserData();
433
- this.options.shapes = this.convertedShapes;
434
- this.options.connections = this.convertedConnections;
531
+ this.options = {
532
+ shapes: this.convertedShapes,
533
+ connections: this.convertedConnections,
534
+ selectable: this.selectable,
535
+ editable: this.editable,
536
+ zoom: this.zoom,
537
+ zoomMax: this.zoomMax,
538
+ zoomMin: this.zoomMin,
539
+ zoomRate: this.zoomRate,
540
+ shapeDefaults: this.shapeDefaults,
541
+ connectionDefaults: this.connectionDefaults,
542
+ layout: this.layout,
543
+ pannable: this.pannable,
544
+ navigation: this.getNormalizedNavigationOptions(),
545
+ };
435
546
  this.renderer.setStyle(this.wrapperElement.nativeElement, 'display', 'block');
436
547
  this.init();
437
548
  this.bindDiagramEvents();
@@ -719,8 +830,11 @@ class DiagramComponent {
719
830
  handleTooltipShow(event) {
720
831
  this.hideTooltip();
721
832
  const dataItem = event.item.dataItem;
722
- const isShape = event.item.name === "Shape";
723
- const isConnection = event.item.name === "Connection";
833
+ if (!dataItem) {
834
+ return;
835
+ }
836
+ const isShape = event.item.name === 'Shape';
837
+ const isConnection = event.item.name === 'Connection';
724
838
  this.setCustomTemplate(isShape, isConnection);
725
839
  const defaultsEnabled = isShape
726
840
  ? this.options.shapeDefaults?.tooltip?.visible
@@ -749,19 +863,23 @@ class DiagramComponent {
749
863
  content: content,
750
864
  appendTo: this.viewContainer,
751
865
  popupClass,
752
- animate: false
866
+ animate: false,
753
867
  });
754
868
  const contentElement = this.tooltipPopup.popupElement.querySelector('.k-popup');
755
869
  if (content === this.defaultTooltipTemplate) {
756
870
  this.renderer.addClass(contentElement, 'k-tooltip');
757
871
  }
872
+ // Force the popup to render before reading its dimensions.
873
+ // In zoneless mode NoopNgZone.run() does not trigger CD, so the popup
874
+ // template is not yet stamped when this code runs synchronously.
875
+ this.tooltipPopup.popup.changeDetectorRef.markForCheck();
758
876
  const popupElementRect = contentElement.getBoundingClientRect();
759
877
  const zoom = event.item.diagram.zoom();
760
878
  const pan = event.item.diagram.pan();
761
879
  const diagramRect = this.diagramWidget.element.getBoundingClientRect();
762
880
  const win = this.diagramWidget.element.ownerDocument.defaultView;
763
- const lines = this.diagramWidget.connections.map(con => con.allPoints());
764
- const shapes = this.diagramWidget.shapes.map(shp => shp.bounds());
881
+ const lines = this.diagramWidget.connections.map((con) => con.allPoints());
882
+ const shapes = this.diagramWidget.shapes.map((shp) => shp.bounds());
765
883
  const pos = placeTooltip({
766
884
  hovered: event.item,
767
885
  mouse: event.point,
@@ -771,7 +889,7 @@ class DiagramComponent {
771
889
  zoom: zoom,
772
890
  pan: pan,
773
891
  tooltipSize: { width: popupElementRect.width, height: popupElementRect.height },
774
- viewportBounds: new DOMRect(0, 0, win.innerWidth, win.innerHeight)
892
+ viewportBounds: new DOMRect(0, 0, win.innerWidth, win.innerHeight),
775
893
  });
776
894
  this.tooltipPopup.popup.instance.offset = { left: pos.left + win.scrollX, top: pos.top + win.scrollY };
777
895
  this.tooltipShow.emit({ ...this.dataItem });
@@ -862,20 +980,20 @@ class DiagramComponent {
862
980
  const mapping = {
863
981
  shapes: {
864
982
  source: () => this.shapes || [],
865
- map: this.createFieldMapping(this.shapeModelFields)
983
+ map: this.createFieldMapping(this.shapeModelFields),
866
984
  },
867
985
  connections: {
868
986
  source: () => this.connections || [],
869
- map: this.createFieldMapping(this.connectionModelFields)
870
- }
987
+ map: this.createFieldMapping(this.connectionModelFields),
988
+ },
871
989
  };
872
- const result = convertToDiagramModel({ shapes: this.shapes, connections: this.options.connections }, mapping);
990
+ const result = convertToDiagramModel({ shapes: this.shapes, connections: this.connections }, mapping);
873
991
  this.convertedShapes = this.addDataItemProperty(result.shapes, this.shapes);
874
- this.convertedConnections = this.addDataItemProperty(result.connections, this.connections);
992
+ this.convertedConnections = (this.addDataItemProperty(result.connections, this.connections));
875
993
  }
876
994
  else {
877
995
  this.convertedShapes = this.addDataItemProperty(this.shapes, this.shapes);
878
- this.convertedConnections = this.addDataItemProperty(this.connections, this.connections);
996
+ this.convertedConnections = (this.addDataItemProperty(this.connections, this.connections));
879
997
  }
880
998
  }
881
999
  addDataItemProperty(array, sourceArray) {
@@ -887,7 +1005,7 @@ class DiagramComponent {
887
1005
  }
888
1006
  return array.map((item, index) => ({
889
1007
  ...item,
890
- dataItem: sourceArray[index]
1008
+ dataItem: sourceArray[index],
891
1009
  }));
892
1010
  }
893
1011
  /**
@@ -927,16 +1045,17 @@ class DiagramComponent {
927
1045
  this.diagramWidget?.layout(options);
928
1046
  }
929
1047
  getNormalizedNavigationOptions() {
1048
+ const nav = this._navigable();
930
1049
  return {
931
- disabled: !this._navigable.enabled,
932
- smallStep: this._navigable.smallStep,
933
- largeStep: this._navigable.largeStep
1050
+ disabled: !nav.enabled,
1051
+ smallStep: nav.smallStep,
1052
+ largeStep: nav.largeStep,
934
1053
  };
935
1054
  }
936
1055
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: DiagramComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.PopupService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
937
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.27", type: DiagramComponent, isStandalone: true, selector: "kendo-diagram", inputs: { connectionDefaults: "connectionDefaults", connections: "connections", connectionModelFields: "connectionModelFields", editable: "editable", layout: "layout", pannable: "pannable", selectable: "selectable", shapeDefaults: "shapeDefaults", shapes: "shapes", shapeModelFields: "shapeModelFields", zoom: "zoom", zoomMax: "zoomMax", zoomMin: "zoomMin", zoomRate: "zoomRate", navigable: "navigable" }, outputs: { change: "change", diagramClick: "diagramClick", drag: "drag", dragEnd: "dragEnd", dragStart: "dragStart", shapeBoundsChange: "shapeBoundsChange", mouseEnter: "mouseEnter", mouseLeave: "mouseLeave", onPan: "pan", onSelect: "select", zoomEnd: "zoomEnd", zoomStart: "zoomStart", tooltipShow: "tooltipShow", tooltipHide: "tooltipHide" }, host: { properties: { "class.k-diagram": "this.diagramClass" } }, providers: [PopupService], queries: [{ propertyName: "shapeTooltipTemplate", first: true, predicate: ShapeTooltipTemplateDirective, descendants: true }, { propertyName: "connectionTooltipTemplate", first: true, predicate: ConnectionTooltipTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "defaultTooltipTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "customTooltipTemplate", first: true, predicate: ["customTooltipTemplate"], descendants: true }], exportAs: ["kendoDiagram"], usesOnChanges: true, ngImport: i0, template: `
1056
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.27", type: DiagramComponent, isStandalone: true, selector: "kendo-diagram", inputs: { connectionDefaults: "connectionDefaults", connections: "connections", connectionModelFields: "connectionModelFields", editable: "editable", layout: "layout", pannable: "pannable", selectable: "selectable", shapeDefaults: "shapeDefaults", shapes: "shapes", shapeModelFields: "shapeModelFields", zoom: "zoom", zoomMax: "zoomMax", zoomMin: "zoomMin", zoomRate: "zoomRate", navigable: "navigable" }, outputs: { change: "change", diagramClick: "diagramClick", drag: "drag", dragEnd: "dragEnd", dragStart: "dragStart", shapeBoundsChange: "shapeBoundsChange", mouseEnter: "mouseEnter", mouseLeave: "mouseLeave", onPan: "pan", onSelect: "select", zoomEnd: "zoomEnd", zoomStart: "zoomStart", tooltipShow: "tooltipShow", tooltipHide: "tooltipHide" }, host: { properties: { "class.k-diagram": "this.diagramClass" } }, providers: [PopupService], queries: [{ propertyName: "shapeTooltipTemplate", first: true, predicate: ShapeTooltipTemplateDirective, descendants: true }, { propertyName: "connectionTooltipTemplate", first: true, predicate: ConnectionTooltipTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "defaultTooltipTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "customTooltipTemplate", first: true, predicate: ["customTooltipTemplate"], descendants: true }], exportAs: ["kendoDiagram"], ngImport: i0, template: `
938
1057
  @if (showLicenseWatermark) {
939
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
1058
+ <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
940
1059
  }
941
1060
 
942
1061
  <ng-template #customTooltipTemplate>
@@ -946,7 +1065,7 @@ class DiagramComponent {
946
1065
  <ng-template #defaultTemplate>
947
1066
  {{dataItem?.tooltipText}}
948
1067
  </ng-template>
949
- `, isInline: true, dependencies: [{ kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay], kendo-watermark-overlay", inputs: ["licenseMessage"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
1068
+ `, isInline: true, dependencies: [{ kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay], kendo-watermark-overlay", inputs: ["licenseMessage"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
950
1069
  }
951
1070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: DiagramComponent, decorators: [{
952
1071
  type: Component,
@@ -956,7 +1075,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
956
1075
  selector: 'kendo-diagram',
957
1076
  template: `
958
1077
  @if (showLicenseWatermark) {
959
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
1078
+ <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
960
1079
  }
961
1080
 
962
1081
  <ng-template #customTooltipTemplate>
@@ -966,9 +1085,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
966
1085
  <ng-template #defaultTemplate>
967
1086
  {{dataItem?.tooltipText}}
968
1087
  </ng-template>
969
- `,
1088
+ `,
970
1089
  imports: [WatermarkOverlayComponent, NgTemplateOutlet],
971
- providers: [PopupService]
1090
+ providers: [PopupService],
1091
+ changeDetection: ChangeDetectionStrategy.OnPush,
972
1092
  }]
973
1093
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.PopupService }, { type: i0.ViewContainerRef }], propDecorators: { diagramClass: [{
974
1094
  type: HostBinding,
package/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  import { ConnectionDefaultsBase, ConnectionOptionsBase, ShapeDefaultsBase, NavigationOptions, ShapeOptionsBase, DiagramEditable, DiagramLayout, Pannable, Selectable, DiagramChangeEvent, DiagramDomEvent, DiagramDragEvent, DiagramItemBoundsChangeEvent, DiagramPanEvent, DiagramSelectEvent, DiagramZoomEndEvent, DiagramZoomStartEvent, Diagram, Shape, Connection, DiagramState, Point, Connector, SelectionOptions, Rect, BringIntoViewOptions, Direction } from '@progress/kendo-diagram-common';
6
6
  export { ArrowMarker, BringIntoViewOptions, Circle, CircleMarker, Collate, Connection, ConnectionCap, ConnectionContent, ConnectionDefaultsBase, ConnectionDefaultsEditable, ConnectionEditingPoint, ConnectionMapping, ConnectionOptionsBase, ConnectionPointsEditable, ConnectionRichTextContent, Connector, ConvertResult, Coordinate, DashType, DataInputOutput, DataStorage, Database, Decision, Delay, DiagramChangeEvent, DiagramDomEvent, DiagramDragEvent, DiagramEditable, DiagramItemBoundsChangeEvent, DiagramLayout, DiagramMapping, DiagramPanEvent, DiagramSelectEvent, DiagramState, DiagramZoomEndEvent, DiagramZoomStartEvent, DirectAccessStorage, Direction, Display, Document, EditableDefaults, Extract, Fill, FlowchartShapeType, FromPathOrFn, Group, Image, InlineImage, InternalStorage, Layout, LayoutGrid, Line, LineBreak, LogicalOr, ManualInputOutput, ManualOperation, MapSpec, MarkerType, Merge, MultiLineTextBlock, MultipleDocuments, OffPageConnector, OnPageConnector, Padding, Pannable, Paragraph, ParagraphMargin, Path, Point, Polyline, PredefinedProcess, Preparation, Process, Rect, Rectangle, Selectable, SelectionOptions, Shape, ShapeConnector, ShapeConnectorDefaults, ShapeConnectorHover, ShapeContent, ShapeDefaultsBase, ShapeDefaultsEditable, ShapeEditable, ShapeFill, ShapeFillGradient, ShapeFillGradientStop, ShapeHover, ShapeMapping, ShapeOptionsBase, ShapeRichTextContent, ShapeRotation, ShapeType, Sort, Stroke, SummingJunction, Terminator, TextBlock, TextRun, convertToDiagramModel } from '@progress/kendo-diagram-common';
7
7
  import * as i0 from '@angular/core';
8
- import { TemplateRef, AfterViewInit, OnChanges, OnDestroy, EventEmitter, ElementRef, Renderer2, NgZone, ViewContainerRef, SimpleChanges } from '@angular/core';
8
+ import { TemplateRef, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Renderer2, NgZone, ViewContainerRef } from '@angular/core';
9
9
  import { LicenseMessage } from '@progress/kendo-licensing';
10
10
  import { PopupService } from '@progress/kendo-angular-popup';
11
11
  import { Group } from '@progress/kendo-drawing';
@@ -290,7 +290,7 @@ declare class ConnectionTooltipTemplateDirective {
290
290
  * <kendo-diagram [shapes]="shapesData"></kendo-diagram>
291
291
  * ```
292
292
  */
293
- declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
293
+ declare class DiagramComponent implements AfterViewInit, OnDestroy {
294
294
  private wrapperElement;
295
295
  private renderer;
296
296
  private zone;
@@ -301,38 +301,44 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
301
301
  * Defines the default configuration options applicable to all connections.
302
302
  *
303
303
  */
304
- connectionDefaults?: ConnectionDefaults;
304
+ set connectionDefaults(value: ConnectionDefaults | undefined);
305
+ get connectionDefaults(): ConnectionDefaults | undefined;
305
306
  /**
306
307
  * Defines the connections that render between the shapes in the `Diagram` (see [Connections article](https://www.telerik.com/kendo-angular-ui/components/diagrams/connections)).
307
308
  * Accepts either an array of `ConnectionOptions` or an array of any objects
308
309
  * that will be mapped using the `connectionModelFields` configuration.
309
310
  *
310
311
  */
311
- connections?: any[];
312
+ set connections(value: any[] | undefined);
313
+ get connections(): any[] | undefined;
312
314
  /**
313
315
  * Defines the field mapping configuration for connections data binding ([see example](https://www.telerik.com/kendo-angular-ui/components/diagrams/data-binding#field-mapping)).
314
316
  * Maps source object properties to `Diagram` connection properties.
315
317
  * Only used when `connections` is an array of custom objects instead of `ConnectionOptions`.
316
318
  */
317
- connectionModelFields?: ConnectionModelFields;
319
+ set connectionModelFields(value: ConnectionModelFields | undefined);
320
+ get connectionModelFields(): ConnectionModelFields | undefined;
318
321
  /**
319
322
  * A set of settings to configure the `Diagram` behavior when the user attempts to drag, resize, or remove shapes.
320
323
  * Changing the property value dynamically triggers a reinitialization of the `Diagram`.
321
324
  *
322
325
  * @default true
323
326
  */
324
- editable?: boolean | DiagramEditable;
327
+ set editable(value: boolean | DiagramEditable | undefined);
328
+ get editable(): boolean | DiagramEditable | undefined;
325
329
  /**
326
330
  * Defines the layout configuration for arranging shapes and connections in the `Diagram` (see [Layout article](https://www.telerik.com/kendo-angular-ui/components/diagrams/layouts)).
327
331
  *
328
332
  */
329
- layout?: DiagramLayout;
333
+ set layout(value: DiagramLayout | undefined);
334
+ get layout(): DiagramLayout | undefined;
330
335
  /**
331
336
  * Defines the pannable options. Use this setting to disable `Diagram` pan or change the key that activates the pan behavior.
332
337
  *
333
338
  * @default true
334
339
  */
335
- pannable?: boolean | Pannable;
340
+ set pannable(value: boolean | Pannable | undefined);
341
+ get pannable(): boolean | Pannable | undefined;
336
342
  /**
337
343
  * Defines the `Diagram` selection options.
338
344
  *
@@ -344,48 +350,56 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
344
350
  *
345
351
  * @default true
346
352
  */
347
- selectable?: boolean | Selectable;
353
+ set selectable(value: boolean | Selectable | undefined);
354
+ get selectable(): boolean | Selectable | undefined;
348
355
  /**
349
356
  * Defines the default configuration options applicable to all shapes.
350
357
  */
351
- shapeDefaults?: ShapeDefaults;
358
+ set shapeDefaults(value: ShapeDefaults | undefined);
359
+ get shapeDefaults(): ShapeDefaults | undefined;
352
360
  /**
353
361
  * Defines the shapes that render in the `Diagram` (see [Shapes article](https://www.telerik.com/kendo-angular-ui/components/diagrams/shapes)).
354
362
  * Accepts either an array of `ShapeOptions` or an array of any objects
355
363
  * that will be mapped using the `shapeModelFields` configuration.
356
364
  *
357
365
  */
358
- shapes?: any[];
366
+ set shapes(value: any[] | undefined);
367
+ get shapes(): any[] | undefined;
359
368
  /**
360
369
  * Defines the field mapping configuration for shapes data binding ([see example](https://www.telerik.com/kendo-angular-ui/components/diagrams/data-binding#field-mapping)).
361
370
  * Maps source object properties to `Diagram` shape properties.
362
371
  * Only used when `shapes` is an array of custom objects instead of `ShapeOptions`.
363
372
  */
364
- shapeModelFields?: ShapeModelFields;
373
+ set shapeModelFields(value: ShapeModelFields | undefined);
374
+ get shapeModelFields(): ShapeModelFields | undefined;
365
375
  /**
366
376
  * Defines the zoom level of the `Diagram`.
367
377
  *
368
378
  * @default 1
369
379
  */
370
- zoom?: number;
380
+ set zoom(value: number | undefined);
381
+ get zoom(): number | undefined;
371
382
  /**
372
383
  * Defines the maximum zoom level of the `Diagram`.
373
384
  *
374
385
  * @default 2
375
386
  */
376
- zoomMax?: number;
387
+ set zoomMax(value: number | undefined);
388
+ get zoomMax(): number | undefined;
377
389
  /**
378
390
  * Defines the minimum zoom level of the `Diagram`.
379
391
  *
380
392
  * @default 0.1
381
393
  */
382
- zoomMin?: number;
394
+ set zoomMin(value: number | undefined);
395
+ get zoomMin(): number | undefined;
383
396
  /**
384
397
  * Defines the zoom rate of the `Diagram`.
385
398
  *
386
399
  * @default 0.1
387
400
  */
388
- zoomRate?: number;
401
+ set zoomRate(value: number | undefined);
402
+ get zoomRate(): number | undefined;
389
403
  /**
390
404
  * Enables keyboard navigation in the `Diagram`.
391
405
  * When set to `true`, navigate between shapes using arrow keys.
@@ -396,7 +410,7 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
396
410
  * @remarks
397
411
  * This property is related to accessibility.
398
412
  */
399
- set navigable(_navigable: boolean | DiagramNavigationOptions);
413
+ set navigable(value: boolean | DiagramNavigationOptions);
400
414
  get navigable(): boolean | DiagramNavigationOptions;
401
415
  /**
402
416
  * Fires when a shape or connection is created or removed.
@@ -483,7 +497,9 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
483
497
  * @hidden
484
498
  */
485
499
  customTemplate?: TemplateRef<any>;
486
- private _navigable;
500
+ /**
501
+ * Stores the live configuration that is pushed into the Diagram widget and updated by effects.
502
+ */
487
503
  private options;
488
504
  /**
489
505
  * Stores the converted shapes from user data.
@@ -497,6 +513,28 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
497
513
  * Current popup instance for tooltip.
498
514
  */
499
515
  private tooltipPopup?;
516
+ private _navigable;
517
+ private _connectionDefaults;
518
+ private _connections;
519
+ private _connectionModelFields;
520
+ private _editable;
521
+ private _layout;
522
+ private _pannable;
523
+ private _selectable;
524
+ private _shapeDefaults;
525
+ private _shapes;
526
+ private _shapeModelFields;
527
+ private _zoom;
528
+ private _zoomMax;
529
+ private _zoomMin;
530
+ private _zoomRate;
531
+ private dataBindingEffect;
532
+ private connectionDefaultsEffect;
533
+ private shapeDefaultsEffect;
534
+ private scalarOptionsEffect;
535
+ private layoutEffect;
536
+ private zoomEffect;
537
+ private navigableEffect;
500
538
  defaultTooltipTemplate: TemplateRef<any>;
501
539
  customTooltipTemplate: TemplateRef<any>;
502
540
  shapeTooltipTemplate: ShapeTooltipTemplateDirective;
@@ -507,7 +545,6 @@ declare class DiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
507
545
  */
508
546
  dataItem: any;
509
547
  constructor(wrapperElement: ElementRef<HTMLElement>, renderer: Renderer2, zone: NgZone, popupService: PopupService, viewContainer: ViewContainerRef);
510
- ngOnChanges(changes: SimpleChanges): void;
511
548
  ngAfterViewInit(): void;
512
549
  ngOnDestroy(): void;
513
550
  /**
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1787037079,
11
- "version": "25.1.0-develop.3",
10
+ "publishDate": 1787052849,
11
+ "version": "25.1.0-develop.4",
12
12
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning"
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-diagrams",
3
- "version": "25.1.0-develop.3",
3
+ "version": "25.1.0-develop.4",
4
4
  "description": "Kendo UI Angular diagrams component",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -19,7 +19,7 @@
19
19
  "package": {
20
20
  "productName": "Kendo UI for Angular",
21
21
  "productCode": "KENDOUIANGULAR",
22
- "publishDate": 1787037079,
22
+ "publishDate": 1787052849,
23
23
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning"
24
24
  }
25
25
  },
@@ -29,19 +29,19 @@
29
29
  "@angular/core": "20 - 22",
30
30
  "@angular/platform-browser": "20 - 22",
31
31
  "@progress/kendo-licensing": "^1.11.0",
32
- "@progress/kendo-angular-common": "25.1.0-develop.3",
33
- "@progress/kendo-angular-buttons": "25.1.0-develop.3",
34
- "@progress/kendo-angular-dialog": "25.1.0-develop.3",
35
- "@progress/kendo-angular-dropdowns": "25.1.0-develop.3",
36
- "@progress/kendo-angular-icons": "25.1.0-develop.3",
37
- "@progress/kendo-angular-inputs": "25.1.0-develop.3",
38
- "@progress/kendo-angular-popup": "25.1.0-develop.3",
32
+ "@progress/kendo-angular-common": "25.1.0-develop.4",
33
+ "@progress/kendo-angular-buttons": "25.1.0-develop.4",
34
+ "@progress/kendo-angular-dialog": "25.1.0-develop.4",
35
+ "@progress/kendo-angular-dropdowns": "25.1.0-develop.4",
36
+ "@progress/kendo-angular-icons": "25.1.0-develop.4",
37
+ "@progress/kendo-angular-inputs": "25.1.0-develop.4",
38
+ "@progress/kendo-angular-popup": "25.1.0-develop.4",
39
39
  "rxjs": "^6.5.3 || ^7.0.0"
40
40
  },
41
41
  "dependencies": {
42
42
  "@progress/kendo-diagram-common": "^2.3.2",
43
43
  "tslib": "^2.3.1",
44
- "@progress/kendo-angular-schematics": "25.1.0-develop.3"
44
+ "@progress/kendo-angular-schematics": "25.1.0-develop.4"
45
45
  },
46
46
  "schematics": "./schematics/collection.json",
47
47
  "module": "fesm2022/progress-kendo-angular-diagrams.mjs",