@foblex/flow 18.2.0 → 18.2.1

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/README.md CHANGED
@@ -19,14 +19,18 @@
19
19
  <strong>Angular-native node-based UI library for building node editors, workflow builders, and interactive graph interfaces.</strong>
20
20
  </p>
21
21
 
22
- Foblex Flow gives Angular teams the primitives for building graph-based products without adopting a React-first mental model. Use it to create workflow builders, AI low-code tools, call-flow editors, UML diagrams, internal back-office tools, and other node-based interfaces while keeping your own state, validation, persistence, and domain logic.
22
+ Foblex Flow gives Angular teams a simple way to start building graph-based products without adopting a React-first mental model. Begin with `f-flow`, `f-canvas`, nodes, and connections, then add richer editor features only when your product needs them.
23
+
24
+ Use it to create workflow builders, AI low-code tools, call-flow editors, UML diagrams, internal back-office tools, and other node-based interfaces while keeping your own state, validation, persistence, and domain logic.
23
25
 
24
26
  It works with Angular 15+, SSR, standalone components, and zoneless-friendly application setups.
25
27
 
26
28
  ## Why Foblex Flow
27
29
 
30
+ - Easy starting path: most editors begin with `f-flow`, `f-canvas`, nodes, connectors, and connections.
28
31
  - Angular-first API that fits Angular apps instead of wrapping a React-style state model.
29
32
  - Built for real editor interactions: drag to connect, drag to reassign, selection, zoom, minimap, snapping, alignment helpers, and waypoints.
33
+ - Advanced modules are optional: caching, virtualization, and the connection worker are scaling tools, not day-one requirements.
30
34
  - Custom nodes, connectors, and connections for domain-specific graph UIs.
31
35
  - Your app stays in control of graph state, validation rules, permissions, and persistence.
32
36
  - Suitable for both lightweight diagrams and full workflow-builder products.
@@ -91,6 +95,12 @@ npm install @foblex/flow
91
95
  </f-flow>
92
96
  ```
93
97
 
98
+ ## Quick FAQ
99
+
100
+ - **Is Foblex Flow hard to use?** No. The core setup is small and Angular-native.
101
+ - **Do I need caching, virtualization, or the connection worker?** No. Most editors do not need them on day one. They are optional scaling tools for larger scenes.
102
+ - **Who is it for?** Angular teams building node editors, workflow builders, interactive diagrams, and other graph-based product UIs.
103
+
94
104
  ## Resources
95
105
 
96
106
  - [Get Started](https://flow.foblex.com/docs/get-started)
@@ -3,9 +3,9 @@ import { F_FLOW, FFlowBase } from './f-flow-base';
3
3
  import { AddFlowToStoreRequest, CalculateFlowStateRequest, CalculateNodesBoundingBoxNormalizedPositionRequest, ClearSelectionRequest, COMMON_PROVIDERS, GetCurrentSelectionRequest, GetNormalizedPointRequest, IsDragStartedRequest, RedrawConnectionsRequest, RemoveFlowFromStoreRequest, SelectAllRequest, SelectRequest, SortItemLayersRequest, } from '../domain';
4
4
  import { FMediator } from '@foblex/mediator';
5
5
  import { F_DRAGGABLE_PROVIDERS, FDraggableDataContext } from '../f-draggable';
6
- import { EmitConnectionsChangesRequest, F_STORAGE_PROVIDERS, ListenConnectionsChangesRequest, ListenNodesChangesRequest, } from '../f-storage';
6
+ import { EmitConnectionsChangesRequest, FComponentsStore, F_STORAGE_PROVIDERS, ListenConnectionsChangesRequest, } from '../f-storage';
7
7
  import { BrowserService } from '@foblex/platform';
8
- import { afterNextPaint, debounceTime, notifyOnStart, takeOne } from '../reactivity';
8
+ import { afterNextPaint, debounceTime, FChannelHub, notifyOnStart, takeOne } from '../reactivity';
9
9
  import { ConnectionBehaviourBuilder, ConnectionLineBuilder } from '../f-connection-v2';
10
10
  import { F_CACHE_OPTIONS } from '../f-cache';
11
11
  import { F_CONNECTION_WORKER_FEATURES, FConnectionWorker } from '../f-connection-worker';
@@ -16,6 +16,7 @@ export class FFlowComponent extends FFlowBase {
16
16
  _destroyRef = inject(DestroyRef);
17
17
  _mediator = inject(FMediator);
18
18
  _browser = inject(BrowserService);
19
+ _componentsStore = inject(FComponentsStore);
19
20
  _cache = inject(F_CACHE_OPTIONS);
20
21
  _injector = inject(Injector);
21
22
  _worker = inject(FConnectionWorker);
@@ -41,13 +42,15 @@ export class FFlowComponent extends FFlowBase {
41
42
  }, { injector: this._injector });
42
43
  }
43
44
  _listenNodesChanges() {
44
- this._mediator
45
- .execute(new ListenNodesChangesRequest())
45
+ new FChannelHub(this._componentsStore.nodesChanges$, this._componentsStore.progressiveRenderChanges$)
46
46
  .pipe(notifyOnStart(), debounceTime(SORT_ITEM_LAYERS_DEBOUNCE_MS), afterNextPaint())
47
47
  .listen(this._destroyRef, () => {
48
48
  if (this._mediator.execute(new IsDragStartedRequest())) {
49
49
  return;
50
50
  }
51
+ if (this._componentsStore.hasPendingProgressiveRender) {
52
+ return;
53
+ }
51
54
  this._mediator.execute(new SortItemLayersRequest());
52
55
  this._mediator.execute(new EmitConnectionsChangesRequest());
53
56
  this._emitLoaded();
@@ -153,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
153
156
  { provide: F_FLOW, useExisting: FFlowComponent },
154
157
  ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"/>\n\n <ng-content select=\"f-background\"/>\n\n <ng-content select=\"f-line-alignment\"/>\n\n <ng-content select=\"f-canvas\"/>\n\n <ng-content select=\"f-selection-area\"/>\n\n <ng-content/>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:absolute;left:0;top:0;pointer-events:all;transform-origin:50% 50%}::ng-deep .f-node,::ng-deep .f-group{position:absolute!important;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0!important;top:0!important}::ng-deep .f-group{z-index:1}::ng-deep .f-connection-content{z-index:3}::ng-deep .f-node{z-index:4}.hidden{opacity:0}\n"] }]
155
158
  }] });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi1mbG93L2YtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZmxvdy9mLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixrREFBa0QsRUFDbEQscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBR3pCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQiwrQkFBK0IsRUFDL0IseUJBQXlCLEdBQzFCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBZSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FB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WUFDMUIsR0FBRyxnQkFBZ0I7WUFDbkIscUJBQXFCO1lBQ3JCLEdBQUcscUJBQXFCO1lBQ3hCLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO1NBQ2pELGlEQ3RFSCxpUkFhQTs7NEZENERhLGNBQWM7a0JBdEIxQixTQUFTOytCQUNFLFFBQVEsY0FHTixJQUFJLFFBQ1Y7d0JBQ0osV0FBVyxFQUFFLE9BQU87d0JBQ3BCLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLGFBQ1U7d0JBQ1QsU0FBUzt3QkFDVCxHQUFHLG1CQUFtQjt3QkFDdEIsR0FBRyw0QkFBNEI7d0JBQy9CLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQixHQUFHLGdCQUFnQjt3QkFDbkIscUJBQXFCO3dCQUNyQixHQUFHLHFCQUFxQjt3QkFDeEIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsZ0JBQWdCLEVBQUU7cUJBQ2pELG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGX0ZMT1csIEZGbG93QmFzZSB9IGZyb20gJy4vZi1mbG93LWJhc2UnO1xuaW1wb3J0IHtcbiAgQWRkRmxvd1RvU3RvcmVSZXF1ZXN0LFxuICBDYWxjdWxhdGVGbG93U3RhdGVSZXF1ZXN0LFxuICBDYWxjdWxhdGVOb2Rlc0JvdW5kaW5nQm94Tm9ybWFsaXplZFBvc2l0aW9uUmVxdWVzdCxcbiAgQ2xlYXJTZWxlY3Rpb25SZXF1ZXN0LFxuICBDT01NT05fUFJPVklERVJTLFxuICBHZXRDdXJyZW50U2VsZWN0aW9uUmVxdWVzdCxcbiAgR2V0Tm9ybWFsaXplZFBvaW50UmVxdWVzdCxcbiAgSUN1cnJlbnRTZWxlY3Rpb24sXG4gIElGRmxvd1N0YXRlLFxuICBJc0RyYWdTdGFydGVkUmVxdWVzdCxcbiAgUmVkcmF3Q29ubmVjdGlvbnNSZXF1ZXN0LFxuICBSZW1vdmVGbG93RnJvbVN0b3JlUmVxdWVzdCxcbiAgU2VsZWN0QWxsUmVxdWVzdCxcbiAgU2VsZWN0UmVxdWVzdCxcbiAgU29ydEl0ZW1MYXllcnNSZXF1ZXN0LFxufSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgSVBvaW50LCBJUmVjdCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGX0RSQUdHQUJMRV9QUk9WSURFUlMsIEZEcmFnZ2FibGVEYXRhQ29udGV4dCB9IGZyb20gJy4uL2YtZHJhZ2dhYmxlJztcbmltcG9ydCB7XG4gIEVtaXRDb25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0LFxuICBGX1NUT1JBR0VfUFJPVklERVJTLFxuICBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0LFxuICBMaXN0ZW5Ob2Rlc0NoYW5nZXNSZXF1ZXN0LFxufSBmcm9tICcuLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgQnJvd3NlclNlcnZpY2UgfSBmcm9tICdAZm9ibGV4L3BsYXRmb3JtJztcbmltcG9ydCB7IGFmdGVyTmV4dFBhaW50LCBkZWJvdW5jZVRpbWUsIEZDaGFubmVsSHViLCBub3RpZnlPblN0YXJ0LCB0YWtlT25lIH0gZnJvbSAnLi4vcmVhY3Rpdml0eSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQmVoYXZpb3VyQnVpbGRlciwgQ29ubmVjdGlvbkxpbmVCdWlsZGVyIH0gZnJvbSAnLi4vZi1jb25uZWN0aW9uLXYyJztcbmltcG9ydCB7IEZfQ0FDSEVfT1BUSU9OUyB9IGZyb20gJy4uL2YtY2FjaGUnO1xuaW1wb3J0IHsgRl9DT05ORUNUSU9OX1dPUktFUl9GRUFUVVJFUywgRkNvbm5lY3Rpb25Xb3JrZXIgfSBmcm9tICcuLi9mLWNvbm5lY3Rpb24td29ya2VyJztcblxubGV0IHVuaXF1ZUlkID0gMDtcbmNvbnN0IFNPUlRfSVRFTV9MQVlFUlNfREVCT1VOQ0VfTVMgPSAxMjA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2YtZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mLWZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdbYXR0ci5pZF0nOiAnZklkKCknLFxuICAgIGNsYXNzOiAnZi1jb21wb25lbnQgZi1mbG93JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRk1lZGlhdG9yLFxuICAgIC4uLkZfU1RPUkFHRV9QUk9WSURFUlMsXG4gICAgLi4uRl9DT05ORUNUSU9OX1dPUktFUl9GRUFUVVJFUyxcbiAgICBDb25uZWN0aW9uTGluZUJ1aWxkZXIsXG4gICAgQ29ubmVjdGlvbkJlaGF2aW91ckJ1aWxkZXIsXG4gICAgLi4uQ09NTU9OX1BST1ZJREVSUyxcbiAgICBGRHJhZ2dhYmxlRGF0YUNvbnRleHQsXG4gICAgLi4uRl9EUkFHR0FCTEVfUFJPVklERVJTLFxuICAgIHsgcHJvdmlkZTogRl9GTE9XLCB1c2VFeGlzdGluZzogRkZsb3dDb21wb25lbnQgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZGbG93Q29tcG9uZW50IGV4dGVuZHMgRkZsb3dCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icm93c2VyID0gaW5qZWN0KEJyb3dzZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGUgPSBpbmplY3QoRl9DQUNIRV9PUFRJT05TKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrZXIgPSBpbmplY3QoRkNvbm5lY3Rpb25Xb3JrZXIpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBmSWQgPSBpbnB1dDxzdHJpbmc+KGBmLWZsb3ctJHt1bmlxdWVJZCsrfWAsIHsgYWxpYXM6ICdmRmxvd0lkJyB9KTtcbiAgcHVibGljIG92ZXJyaWRlIGZDYWNoZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVhZG9ubHkgaG9zdEVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICBwdWJsaWMgb3ZlcnJpZGUgZkxvYWRlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShuZXcgQWRkRmxvd1RvU3RvcmVSZXF1ZXN0KHRoaXMpKTtcbiAgICB0aGlzLl9saXN0ZW5DYWNoZUNoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9icm93c2VyLmlzQnJvd3NlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2xpc3Rlbk5vZGVzQ2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlbkNvbm5lY3Rpb25zQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIF9saXN0ZW5DYWNoZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLl9jYWNoZS5lbmFibGVkID0gdGhpcy5mQ2FjaGUoKTtcbiAgICAgIH0sXG4gICAgICB7IGluamVjdG9yOiB0aGlzLl9pbmplY3RvciB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Ob2Rlc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVkaWF0b3JcbiAgICAgIC5leGVjdXRlPEZDaGFubmVsSHViPihuZXcgTGlzdGVuTm9kZXNDaGFuZ2VzUmVxdWVzdCgpKVxuICAgICAgLnBpcGUobm90aWZ5T25TdGFydCgpLCBkZWJvdW5jZVRpbWUoU09SVF9JVEVNX0xBWUVSU19ERUJPVU5DRV9NUyksIGFmdGVyTmV4dFBhaW50KCkpXG4gICAgICAubGlzdGVuKHRoaXMuX2Rlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IElzRHJhZ1N0YXJ0ZWRSZXF1ZXN0KCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShuZXcgU29ydEl0ZW1MYXllcnNSZXF1ZXN0KCkpO1xuICAgICAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlPHZvaWQ+KG5ldyBFbWl0Q29ubmVjdGlvbnNDaGFuZ2VzUmVxdWVzdCgpKTtcblxuICAgICAgICB0aGlzLl9lbWl0TG9hZGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkNvbm5lY3Rpb25zQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZShhZnRlck5leHRQYWludCgpKVxuICAgICAgLmxpc3Rlbih0aGlzLl9kZXN0cm95UmVmLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBJc0RyYWdTdGFydGVkUmVxdWVzdCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IFJlZHJhd0Nvbm5lY3Rpb25zUmVxdWVzdCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdExvYWRlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzTG9hZGVkKSB7XG4gICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZMb2FkZWQuZW1pdCh0aGlzLmZJZCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IEVtaXRDb25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTG9hZGVkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZXNCb3VuZGluZ0JveCgpOiBJUmVjdCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlPElSZWN0IHwgbnVsbD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlTm9kZXNCb3VuZGluZ0JveE5vcm1hbGl6ZWRQb3NpdGlvblJlcXVlc3QoKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBJQ3VycmVudFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGU8SUN1cnJlbnRTZWxlY3Rpb24+KG5ldyBHZXRDdXJyZW50U2VsZWN0aW9uUmVxdWVzdCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQb3NpdGlvbkluRmxvdyhwb3NpdGlvbjogSVBvaW50KTogSVJlY3Qge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBHZXROb3JtYWxpemVkUG9pbnRSZXF1ZXN0KHBvc2l0aW9uKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdGUoKTogSUZGbG93U3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBDYWxjdWxhdGVGbG93U3RhdGVSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZSh0YWtlT25lKCkpXG4gICAgICAubGlzdGVuKHRoaXMuX2Rlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTx2b2lkPihuZXcgU2VsZWN0QWxsUmVxdWVzdCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgc2VsZWN0cyBub2RlcyBhbmQgY29ubmVjdGlvbnMgYnkgdGhlaXIgSURzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZXh0ZXJuYWwgY29tcG9uZW50cyB0byBjb250cm9sIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGNhbnZhcy5cbiAgICogU2VsZWN0ZWQgZWxlbWVudHMgd2lsbCBhcHBlYXIgdmlzdWFsbHkgaGlnaGxpZ2h0ZWQuIElmIGBpc1NlbGVjdGVkQ2hhbmdlZGAgaXMgdHJ1ZSxcbiAgICogdGhlIG5leHQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiwgY2xpY2tpbmcgdGhlIGNhbnZhcykgd2lsbCBlbWl0IGEgc2VsZWN0aW9uIGNoYW5nZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGVzIC0gQW4gYXJyYXkgb2Ygbm9kZSBJRHMgdG8gc2VsZWN0LlxuICAgKiBAcGFyYW0gY29ubmVjdGlvbnMgLSBBbiBhcnJheSBvZiBjb25uZWN0aW9uIElEcyB0byBzZWxlY3QuXG4gICAqIEBwYXJhbSBpc1NlbGVjdGVkQ2hhbmdlZCAtIE9wdGlvbmFsLiBJZiB0cnVlIChkZWZhdWx0KSwgbWFya3MgdGhlIHNlbGVjdGlvbiBzdGF0ZSBhcyBjaGFuZ2VkLFxuICAgKiB0cmlnZ2VyaW5nIGEgYGZTZWxlY3Rpb25DaGFuZ2VgIGV2ZW50IG9uIHRoZSBuZXh0IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0KG5vZGVzOiBzdHJpbmdbXSwgY29ubmVjdGlvbnM6IHN0cmluZ1tdLCBpc1NlbGVjdGVkQ2hhbmdlZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZSh0YWtlT25lKCkpXG4gICAgICAubGlzdGVuKHRoaXMuX2Rlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTx2b2lkPihuZXcgU2VsZWN0UmVxdWVzdChub2RlcywgY29ubmVjdGlvbnMsIGlzU2VsZWN0ZWRDaGFuZ2VkKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlPHZvaWQ+KG5ldyBDbGVhclNlbGVjdGlvblJlcXVlc3QoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fd29ya2VyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBSZW1vdmVGbG93RnJvbVN0b3JlUmVxdWVzdCgpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZEZWZpbml0aW9uc11cIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1iYWNrZ3JvdW5kXCIvPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImYtbGluZS1hbGlnbm1lbnRcIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1jYW52YXNcIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1zZWxlY3Rpb24tYXJlYVwiLz5cblxuICA8bmctY29udGVudC8+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi1mbG93L2YtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZmxvdy9mLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixrREFBa0QsRUFDbEQscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBR3pCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsK0JBQStCLEdBQ2hDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVB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QVMsQ0FBQyxPQUFPLENBQUMsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQzt3R0FqSlUsY0FBYzs0RkFBZCxjQUFjLHVhQWJkO1lBQ1QsU0FBUztZQUNULEdBQUcsbUJBQW1CO1lBQ3RCLEdBQUcsNEJBQTRCO1lBQy9CLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsR0FBRyxnQkFBZ0I7WUFDbkIscUJBQXFCO1lBQ3JCLEdBQUcscUJBQXFCO1lBQ3hCLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO1NBQ2pELGlEQ3RFSCxpUkFhQTs7NEZENERhLGNBQWM7a0JBdEIxQixTQUFTOytCQUNFLFFBQVEsY0FHTixJQUFJLFFBQ1Y7d0JBQ0osV0FBVyxFQUFFLE9BQU87d0JBQ3BCLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLGFBQ1U7d0JBQ1QsU0FBUzt3QkFDVCxHQUFHLG1CQUFtQjt3QkFDdEIsR0FBRyw0QkFBNEI7d0JBQy9CLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQixHQUFHLGdCQUFnQjt3QkFDbkIscUJBQXFCO3dCQUNyQixHQUFHLHFCQUFxQjt3QkFDeEIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsZ0JBQWdCLEVBQUU7cUJBQ2pELG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGX0ZMT1csIEZGbG93QmFzZSB9IGZyb20gJy4vZi1mbG93LWJhc2UnO1xuaW1wb3J0IHtcbiAgQWRkRmxvd1RvU3RvcmVSZXF1ZXN0LFxuICBDYWxjdWxhdGVGbG93U3RhdGVSZXF1ZXN0LFxuICBDYWxjdWxhdGVOb2Rlc0JvdW5kaW5nQm94Tm9ybWFsaXplZFBvc2l0aW9uUmVxdWVzdCxcbiAgQ2xlYXJTZWxlY3Rpb25SZXF1ZXN0LFxuICBDT01NT05fUFJPVklERVJTLFxuICBHZXRDdXJyZW50U2VsZWN0aW9uUmVxdWVzdCxcbiAgR2V0Tm9ybWFsaXplZFBvaW50UmVxdWVzdCxcbiAgSUN1cnJlbnRTZWxlY3Rpb24sXG4gIElGRmxvd1N0YXRlLFxuICBJc0RyYWdTdGFydGVkUmVxdWVzdCxcbiAgUmVkcmF3Q29ubmVjdGlvbnNSZXF1ZXN0LFxuICBSZW1vdmVGbG93RnJvbVN0b3JlUmVxdWVzdCxcbiAgU2VsZWN0QWxsUmVxdWVzdCxcbiAgU2VsZWN0UmVxdWVzdCxcbiAgU29ydEl0ZW1MYXllcnNSZXF1ZXN0LFxufSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgSVBvaW50LCBJUmVjdCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGX0RSQUdHQUJMRV9QUk9WSURFUlMsIEZEcmFnZ2FibGVEYXRhQ29udGV4dCB9IGZyb20gJy4uL2YtZHJhZ2dhYmxlJztcbmltcG9ydCB7XG4gIEVtaXRDb25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0LFxuICBGQ29tcG9uZW50c1N0b3JlLFxuICBGX1NUT1JBR0VfUFJPVklERVJTLFxuICBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0LFxufSBmcm9tICcuLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgQnJvd3NlclNlcnZpY2UgfSBmcm9tICdAZm9ibGV4L3BsYXRmb3JtJztcbmltcG9ydCB7IGFmdGVyTmV4dFBhaW50LCBkZWJvdW5jZVRpbWUsIEZDaGFubmVsSHViLCBub3RpZnlPblN0YXJ0LCB0YWtlT25lIH0gZnJvbSAnLi4vcmVhY3Rpdml0eSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQmVoYXZpb3VyQnVpbGRlciwgQ29ubmVjdGlvbkxpbmVCdWlsZGVyIH0gZnJvbSAnLi4vZi1jb25uZWN0aW9uLXYyJztcbmltcG9ydCB7IEZfQ0FDSEVfT1BUSU9OUyB9IGZyb20gJy4uL2YtY2FjaGUnO1xuaW1wb3J0IHsgRl9DT05ORUNUSU9OX1dPUktFUl9GRUFUVVJFUywgRkNvbm5lY3Rpb25Xb3JrZXIgfSBmcm9tICcuLi9mLWNvbm5lY3Rpb24td29ya2VyJztcblxubGV0IHVuaXF1ZUlkID0gMDtcbmNvbnN0IFNPUlRfSVRFTV9MQVlFUlNfREVCT1VOQ0VfTVMgPSAxMjA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2YtZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mLWZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdbYXR0ci5pZF0nOiAnZklkKCknLFxuICAgIGNsYXNzOiAnZi1jb21wb25lbnQgZi1mbG93JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRk1lZGlhdG9yLFxuICAgIC4uLkZfU1RPUkFHRV9QUk9WSURFUlMsXG4gICAgLi4uRl9DT05ORUNUSU9OX1dPUktFUl9GRUFUVVJFUyxcbiAgICBDb25uZWN0aW9uTGluZUJ1aWxkZXIsXG4gICAgQ29ubmVjdGlvbkJlaGF2aW91ckJ1aWxkZXIsXG4gICAgLi4uQ09NTU9OX1BST1ZJREVSUyxcbiAgICBGRHJhZ2dhYmxlRGF0YUNvbnRleHQsXG4gICAgLi4uRl9EUkFHR0FCTEVfUFJPVklERVJTLFxuICAgIHsgcHJvdmlkZTogRl9GTE9XLCB1c2VFeGlzdGluZzogRkZsb3dDb21wb25lbnQgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZGbG93Q29tcG9uZW50IGV4dGVuZHMgRkZsb3dCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icm93c2VyID0gaW5qZWN0KEJyb3dzZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50c1N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZSA9IGluamVjdChGX0NBQ0hFX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtlciA9IGluamVjdChGQ29ubmVjdGlvbldvcmtlcik7XG5cbiAgcHVibGljIG92ZXJyaWRlIGZJZCA9IGlucHV0PHN0cmluZz4oYGYtZmxvdy0ke3VuaXF1ZUlkKyt9YCwgeyBhbGlhczogJ2ZGbG93SWQnIH0pO1xuICBwdWJsaWMgb3ZlcnJpZGUgZkNhY2hlID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSBob3N0RWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuXG4gIHB1YmxpYyBvdmVycmlkZSBmTG9hZGVkID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIF9pc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBBZGRGbG93VG9TdG9yZVJlcXVlc3QodGhpcykpO1xuICAgIHRoaXMuX2xpc3RlbkNhY2hlQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Jyb3dzZXIuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGlzdGVuTm9kZXNDaGFuZ2VzKCk7XG4gICAgdGhpcy5fbGlzdGVuQ29ubmVjdGlvbnNDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgX2xpc3RlbkNhY2hlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlLmVuYWJsZWQgPSB0aGlzLmZDYWNoZSgpO1xuICAgICAgfSxcbiAgICAgIHsgaW5qZWN0b3I6IHRoaXMuX2luamVjdG9yIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk5vZGVzQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBuZXcgRkNoYW5uZWxIdWIoXG4gICAgICB0aGlzLl9jb21wb25lbnRzU3RvcmUubm9kZXNDaGFuZ2VzJCxcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNTdG9yZS5wcm9ncmVzc2l2ZVJlbmRlckNoYW5nZXMkLFxuICAgIClcbiAgICAgIC5waXBlKG5vdGlmeU9uU3RhcnQoKSwgZGVib3VuY2VUaW1lKFNPUlRfSVRFTV9MQVlFUlNfREVCT1VOQ0VfTVMpLCBhZnRlck5leHRQYWludCgpKVxuICAgICAgLmxpc3Rlbih0aGlzLl9kZXN0cm95UmVmLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBJc0RyYWdTdGFydGVkUmVxdWVzdCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRzU3RvcmUuaGFzUGVuZGluZ1Byb2dyZXNzaXZlUmVuZGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShuZXcgU29ydEl0ZW1MYXllcnNSZXF1ZXN0KCkpO1xuICAgICAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlPHZvaWQ+KG5ldyBFbWl0Q29ubmVjdGlvbnNDaGFuZ2VzUmVxdWVzdCgpKTtcblxuICAgICAgICB0aGlzLl9lbWl0TG9hZGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkNvbm5lY3Rpb25zQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZShhZnRlck5leHRQYWludCgpKVxuICAgICAgLmxpc3Rlbih0aGlzLl9kZXN0cm95UmVmLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBJc0RyYWdTdGFydGVkUmVxdWVzdCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IFJlZHJhd0Nvbm5lY3Rpb25zUmVxdWVzdCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdExvYWRlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzTG9hZGVkKSB7XG4gICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZMb2FkZWQuZW1pdCh0aGlzLmZJZCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IEVtaXRDb25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTG9hZGVkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZXNCb3VuZGluZ0JveCgpOiBJUmVjdCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlPElSZWN0IHwgbnVsbD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlTm9kZXNCb3VuZGluZ0JveE5vcm1hbGl6ZWRQb3NpdGlvblJlcXVlc3QoKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBJQ3VycmVudFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGU8SUN1cnJlbnRTZWxlY3Rpb24+KG5ldyBHZXRDdXJyZW50U2VsZWN0aW9uUmVxdWVzdCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQb3NpdGlvbkluRmxvdyhwb3NpdGlvbjogSVBvaW50KTogSVJlY3Qge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBHZXROb3JtYWxpemVkUG9pbnRSZXF1ZXN0KHBvc2l0aW9uKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdGUoKTogSUZGbG93U3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBDYWxjdWxhdGVGbG93U3RhdGVSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZSh0YWtlT25lKCkpXG4gICAgICAubGlzdGVuKHRoaXMuX2Rlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTx2b2lkPihuZXcgU2VsZWN0QWxsUmVxdWVzdCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgc2VsZWN0cyBub2RlcyBhbmQgY29ubmVjdGlvbnMgYnkgdGhlaXIgSURzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZXh0ZXJuYWwgY29tcG9uZW50cyB0byBjb250cm9sIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGNhbnZhcy5cbiAgICogU2VsZWN0ZWQgZWxlbWVudHMgd2lsbCBhcHBlYXIgdmlzdWFsbHkgaGlnaGxpZ2h0ZWQuIElmIGBpc1NlbGVjdGVkQ2hhbmdlZGAgaXMgdHJ1ZSxcbiAgICogdGhlIG5leHQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiwgY2xpY2tpbmcgdGhlIGNhbnZhcykgd2lsbCBlbWl0IGEgc2VsZWN0aW9uIGNoYW5nZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGVzIC0gQW4gYXJyYXkgb2Ygbm9kZSBJRHMgdG8gc2VsZWN0LlxuICAgKiBAcGFyYW0gY29ubmVjdGlvbnMgLSBBbiBhcnJheSBvZiBjb25uZWN0aW9uIElEcyB0byBzZWxlY3QuXG4gICAqIEBwYXJhbSBpc1NlbGVjdGVkQ2hhbmdlZCAtIE9wdGlvbmFsLiBJZiB0cnVlIChkZWZhdWx0KSwgbWFya3MgdGhlIHNlbGVjdGlvbiBzdGF0ZSBhcyBjaGFuZ2VkLFxuICAgKiB0cmlnZ2VyaW5nIGEgYGZTZWxlY3Rpb25DaGFuZ2VgIGV2ZW50IG9uIHRoZSBuZXh0IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0KG5vZGVzOiBzdHJpbmdbXSwgY29ubmVjdGlvbnM6IHN0cmluZ1tdLCBpc1NlbGVjdGVkQ2hhbmdlZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvclxuICAgICAgLmV4ZWN1dGU8RkNoYW5uZWxIdWI+KG5ldyBMaXN0ZW5Db25uZWN0aW9uc0NoYW5nZXNSZXF1ZXN0KCkpXG4gICAgICAucGlwZSh0YWtlT25lKCkpXG4gICAgICAubGlzdGVuKHRoaXMuX2Rlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTx2b2lkPihuZXcgU2VsZWN0UmVxdWVzdChub2RlcywgY29ubmVjdGlvbnMsIGlzU2VsZWN0ZWRDaGFuZ2VkKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlPHZvaWQ+KG5ldyBDbGVhclNlbGVjdGlvblJlcXVlc3QoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fd29ya2VyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBSZW1vdmVGbG93RnJvbVN0b3JlUmVxdWVzdCgpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZEZWZpbml0aW9uc11cIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1iYWNrZ3JvdW5kXCIvPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImYtbGluZS1hbGlnbm1lbnRcIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1jYW52YXNcIi8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZi1zZWxlY3Rpb24tYXJlYVwiLz5cblxuICA8bmctY29udGVudC8+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -12,12 +12,17 @@ export class FComponentsStore {
12
12
  _connectionsRevision = 0;
13
13
  nodesChanges$ = new FChannel();
14
14
  _nodesRevision = 0;
15
+ progressiveRenderChanges$ = new FChannel();
16
+ _pendingProgressiveRenderCount = 0;
15
17
  get connectionsRevision() {
16
18
  return this._connectionsRevision;
17
19
  }
18
20
  get nodesRevision() {
19
21
  return this._nodesRevision;
20
22
  }
23
+ get hasPendingProgressiveRender() {
24
+ return this._pendingProgressiveRenderCount > 0;
25
+ }
21
26
  get flowHost() {
22
27
  return this.fFlow?.hostElement;
23
28
  }
@@ -42,6 +47,17 @@ export class FComponentsStore {
42
47
  this._connectionsRevision++;
43
48
  this.connectionsChanges$.notify();
44
49
  }
50
+ beginProgressiveRender() {
51
+ this._pendingProgressiveRenderCount++;
52
+ this.progressiveRenderChanges$.notify();
53
+ }
54
+ endProgressiveRender() {
55
+ if (!this._pendingProgressiveRenderCount) {
56
+ return;
57
+ }
58
+ this._pendingProgressiveRenderCount--;
59
+ this.progressiveRenderChanges$.notify();
60
+ }
45
61
  transformChanged() {
46
62
  this.transformChanges$.notify();
47
63
  }
@@ -65,4 +81,4 @@ export const INSTANCES = {
65
81
  // eslint-disable-next-line @typescript-eslint/naming-convention
66
82
  MINIMAP: fInstanceKey('minimap'),
67
83
  };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1jb21wb25lbnRzLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLXN0b3JhZ2UvZi1jb21wb25lbnRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUNYLGlCQUFpQixHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFFbkMsbUJBQW1CLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUM3QyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFFakIsYUFBYSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDdkMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUUzQixJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxXQUEwQixDQUFDO0lBQ2hELENBQUM7SUFFTSxLQUFLLENBQXdCO0lBRTdCLE9BQU8sQ0FBMEI7SUFFeEMsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUE0QixDQUFDO0lBQ3BELENBQUM7SUFFZSxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM1QixXQUFXLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hDLGlCQUFpQixHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUVwRCxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FBa0IsUUFBUSxDQUFDLENBQUM7SUFDNUQsTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQWlCLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFrQixRQUFRLENBQUMsQ0FBQztJQUU1RCxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBRS9DLFVBQVUsQ0FBNkI7SUFFdkMsZUFBZTtRQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0scUJBQXFCO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3dHQXJEVSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7QUF5RFgsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLGdFQUFnRTtJQUNoRSxjQUFjLEVBQUUsWUFBWSxDQUFxQixnQkFBZ0IsQ0FBQztJQUVsRSxnRUFBZ0U7SUFDaEUsY0FBYyxFQUFFLFlBQVksQ0FBcUIsZ0JBQWdCLENBQUM7SUFFbEUsZ0VBQWdFO0lBQ2hFLElBQUksRUFBRSxZQUFZLENBQVksZUFBZSxDQUFDO0lBRTlDLGdFQUFnRTtJQUNoRSxVQUFVLEVBQUUsWUFBWSxDQUFrQixZQUFZLENBQUM7SUFFdkQsZ0VBQWdFO0lBQ2hFLGNBQWMsRUFBRSxZQUFZLENBQXFCLGdCQUFnQixDQUFDO0lBRWxFLGdFQUFnRTtJQUNoRSxPQUFPLEVBQUUsWUFBWSxDQUFlLFNBQVMsQ0FBQztDQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkZsb3dCYXNlIH0gZnJvbSAnLi4vZi1mbG93JztcbmltcG9ydCB7IEZDYW52YXNCYXNlIH0gZnJvbSAnLi4vZi1jYW52YXMnO1xuaW1wb3J0IHsgRkJhY2tncm91bmRCYXNlIH0gZnJvbSAnLi4vZi1iYWNrZ3JvdWQnO1xuaW1wb3J0IHsgRk5vZGVJbnB1dEJhc2UsIEZOb2RlT3V0bGV0QmFzZSwgRk5vZGVPdXRwdXRCYXNlIH0gZnJvbSAnLi4vZi1jb25uZWN0b3JzJztcbmltcG9ydCB7IEZEcmFnZ2FibGVCYXNlIH0gZnJvbSAnLi4vZi1kcmFnZ2FibGUnO1xuaW1wb3J0IHsgRkNoYW5uZWwgfSBmcm9tICcuLi9yZWFjdGl2aXR5JztcbmltcG9ydCB7IElUcmFuc2Zvcm1Nb2RlbCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgRkNvbm5lY3RvclJlZ2lzdHJ5IH0gZnJvbSAnLi9mLWNvbm5lY3Rvci1yZWdpc3RyeSc7XG5pbXBvcnQgeyBGTm9kZVJlZ2lzdHJ5IH0gZnJvbSAnLi9mLW5vZGUtcmVnaXN0cnknO1xuaW1wb3J0IHsgRkNvbm5lY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4vZi1jb25uZWN0aW9uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IEZDb25uZWN0aW9uTWFya2VyUmVnaXN0cnkgfSBmcm9tICcuL2YtY29ubmVjdGlvbi1tYXJrZXItcmVnaXN0cnknO1xuaW1wb3J0IHsgZkluc3RhbmNlS2V5LCBGU2luZ2xlUmVnaXN0cnlCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEZab29tQmFzZSB9IGZyb20gJy4uL2Ytem9vbSc7XG5pbXBvcnQgeyBGU2VsZWN0aW9uQXJlYUJhc2UgfSBmcm9tICcuLi9mLXNlbGVjdGlvbi1hcmVhJztcbmltcG9ydCB7IEZNYWduZXRpY0xpbmVzQmFzZSB9IGZyb20gJy4uL2YtbWFnbmV0aWMtbGluZXMnO1xuaW1wb3J0IHsgRk1hZ25ldGljUmVjdHNCYXNlIH0gZnJvbSAnLi4vZi1tYWduZXRpYy1yZWN0cyc7XG5pbXBvcnQgeyBGTWluaW1hcEJhc2UgfSBmcm9tICcuLi9mLW1pbmltYXAnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRkNvbXBvbmVudHNTdG9yZSB7XG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2Zvcm1DaGFuZ2VzJCA9IG5ldyBGQ2hhbm5lbCgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uc0NoYW5nZXMkID0gbmV3IEZDaGFubmVsKCk7XG4gIHByaXZhdGUgX2Nvbm5lY3Rpb25zUmV2aXNpb24gPSAwO1xuXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZXMkID0gbmV3IEZDaGFubmVsKCk7XG4gIHByaXZhdGUgX25vZGVzUmV2aXNpb24gPSAwO1xuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbnNSZXZpc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uc1JldmlzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBub2Rlc1JldmlzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVzUmV2aXNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZsb3dIb3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5mRmxvdz8uaG9zdEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgZkZsb3c6IEZGbG93QmFzZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZkNhbnZhczogRkNhbnZhc0Jhc2UgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCB0cmFuc2Zvcm0oKTogSVRyYW5zZm9ybU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5mQ2FudmFzPy50cmFuc2Zvcm0gYXMgSVRyYW5zZm9ybU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzID0gbmV3IEZOb2RlUmVnaXN0cnkoKTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IEZDb25uZWN0aW9uUmVnaXN0cnkoKTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25NYXJrZXJzID0gbmV3IEZDb25uZWN0aW9uTWFya2VyUmVnaXN0cnkoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0cyA9IG5ldyBGQ29ubmVjdG9yUmVnaXN0cnk8Rk5vZGVPdXRwdXRCYXNlPignT3V0cHV0Jyk7XG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHMgPSBuZXcgRkNvbm5lY3RvclJlZ2lzdHJ5PEZOb2RlSW5wdXRCYXNlPignSW5wdXQnKTtcbiAgcHVibGljIHJlYWRvbmx5IG91dGxldHMgPSBuZXcgRkNvbm5lY3RvclJlZ2lzdHJ5PEZOb2RlT3V0bGV0QmFzZT4oJ091dGxldCcpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZXMgPSBuZXcgRlNpbmdsZVJlZ2lzdHJ5QmFzZSgpO1xuXG4gIHB1YmxpYyBmRHJhZ2dhYmxlOiBGRHJhZ2dhYmxlQmFzZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZW1pdE5vZGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX25vZGVzUmV2aXNpb24rKztcbiAgICB0aGlzLm5vZGVzQ2hhbmdlcyQubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdENvbm5lY3Rpb25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25zUmV2aXNpb24rKztcbiAgICB0aGlzLmNvbm5lY3Rpb25zQ2hhbmdlcyQubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zZm9ybUNoYW5nZXMkLm5vdGlmeSgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBJTlNUQU5DRVMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgTUFHTkVUSUNfTElORVM6IGZJbnN0YW5jZUtleTxGTWFnbmV0aWNMaW5lc0Jhc2U+KCdtYWduZXRpYy1saW5lcycpLFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgTUFHTkVUSUNfUkVDVFM6IGZJbnN0YW5jZUtleTxGTWFnbmV0aWNSZWN0c0Jhc2U+KCdtYWduZXRpYy1yZWN0cycpLFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgWk9PTTogZkluc3RhbmNlS2V5PEZab29tQmFzZT4oJ3pvb20tY29udHJvbHMnKSxcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIEJBQ0tHUk9VTkQ6IGZJbnN0YW5jZUtleTxGQmFja2dyb3VuZEJhc2U+KCdiYWNrZ3JvdW5kJyksXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBTRUxFQ1RJT05fQVJFQTogZkluc3RhbmNlS2V5PEZTZWxlY3Rpb25BcmVhQmFzZT4oJ3NlbGVjdGlvbi1hcmVhJyksXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBNSU5JTUFQOiBmSW5zdGFuY2VLZXk8Rk1pbmltYXBCYXNlPignbWluaW1hcCcpLFxufSBhcyBjb25zdDtcbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1jb21wb25lbnRzLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLXN0b3JhZ2UvZi1jb21wb25lbnRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUNYLGlCQUFpQixHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFFbkMsbUJBQW1CLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUM3QyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFFakIsYUFBYSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDdkMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUVYLHlCQUF5QixHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDbkQsOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNwQyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBMEIsQ0FBQztJQUNoRCxDQUFDO0lBRU0sS0FBSyxDQUF3QjtJQUU3QixPQUFPLENBQTBCO0lBRXhDLElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBNEIsQ0FBQztJQUNwRCxDQUFDO0lBRWUsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDNUIsV0FBVyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUN4QyxpQkFBaUIsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7SUFFcEQsT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQWtCLFFBQVEsQ0FBQyxDQUFDO0lBQzVELE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFpQixPQUFPLENBQUMsQ0FBQztJQUN6RCxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FBa0IsUUFBUSxDQUFDLENBQUM7SUFFNUQsU0FBUyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUUvQyxVQUFVLENBQTZCO0lBRXZDLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLG9CQUFvQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDekMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQzt3R0ExRVUsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7O0FBOEVYLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN2QixnRUFBZ0U7SUFDaEUsY0FBYyxFQUFFLFlBQVksQ0FBcUIsZ0JBQWdCLENBQUM7SUFFbEUsZ0VBQWdFO0lBQ2hFLGNBQWMsRUFBRSxZQUFZLENBQXFCLGdCQUFnQixDQUFDO0lBRWxFLGdFQUFnRTtJQUNoRSxJQUFJLEVBQUUsWUFBWSxDQUFZLGVBQWUsQ0FBQztJQUU5QyxnRUFBZ0U7SUFDaEUsVUFBVSxFQUFFLFlBQVksQ0FBa0IsWUFBWSxDQUFDO0lBRXZELGdFQUFnRTtJQUNoRSxjQUFjLEVBQUUsWUFBWSxDQUFxQixnQkFBZ0IsQ0FBQztJQUVsRSxnRUFBZ0U7SUFDaEUsT0FBTyxFQUFFLFlBQVksQ0FBZSxTQUFTLENBQUM7Q0FDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZGbG93QmFzZSB9IGZyb20gJy4uL2YtZmxvdyc7XG5pbXBvcnQgeyBGQ2FudmFzQmFzZSB9IGZyb20gJy4uL2YtY2FudmFzJztcbmltcG9ydCB7IEZCYWNrZ3JvdW5kQmFzZSB9IGZyb20gJy4uL2YtYmFja2dyb3VkJztcbmltcG9ydCB7IEZOb2RlSW5wdXRCYXNlLCBGTm9kZU91dGxldEJhc2UsIEZOb2RlT3V0cHV0QmFzZSB9IGZyb20gJy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBGRHJhZ2dhYmxlQmFzZSB9IGZyb20gJy4uL2YtZHJhZ2dhYmxlJztcbmltcG9ydCB7IEZDaGFubmVsIH0gZnJvbSAnLi4vcmVhY3Rpdml0eSc7XG5pbXBvcnQgeyBJVHJhbnNmb3JtTW9kZWwgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IEZDb25uZWN0b3JSZWdpc3RyeSB9IGZyb20gJy4vZi1jb25uZWN0b3ItcmVnaXN0cnknO1xuaW1wb3J0IHsgRk5vZGVSZWdpc3RyeSB9IGZyb20gJy4vZi1ub2RlLXJlZ2lzdHJ5JztcbmltcG9ydCB7IEZDb25uZWN0aW9uUmVnaXN0cnkgfSBmcm9tICcuL2YtY29ubmVjdGlvbi1yZWdpc3RyeSc7XG5pbXBvcnQgeyBGQ29ubmVjdGlvbk1hcmtlclJlZ2lzdHJ5IH0gZnJvbSAnLi9mLWNvbm5lY3Rpb24tbWFya2VyLXJlZ2lzdHJ5JztcbmltcG9ydCB7IGZJbnN0YW5jZUtleSwgRlNpbmdsZVJlZ2lzdHJ5QmFzZSB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBGWm9vbUJhc2UgfSBmcm9tICcuLi9mLXpvb20nO1xuaW1wb3J0IHsgRlNlbGVjdGlvbkFyZWFCYXNlIH0gZnJvbSAnLi4vZi1zZWxlY3Rpb24tYXJlYSc7XG5pbXBvcnQgeyBGTWFnbmV0aWNMaW5lc0Jhc2UgfSBmcm9tICcuLi9mLW1hZ25ldGljLWxpbmVzJztcbmltcG9ydCB7IEZNYWduZXRpY1JlY3RzQmFzZSB9IGZyb20gJy4uL2YtbWFnbmV0aWMtcmVjdHMnO1xuaW1wb3J0IHsgRk1pbmltYXBCYXNlIH0gZnJvbSAnLi4vZi1taW5pbWFwJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZDb21wb25lbnRzU3RvcmUge1xuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNmb3JtQ2hhbmdlcyQgPSBuZXcgRkNoYW5uZWwoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnNDaGFuZ2VzJCA9IG5ldyBGQ2hhbm5lbCgpO1xuICBwcml2YXRlIF9jb25uZWN0aW9uc1JldmlzaW9uID0gMDtcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2VzJCA9IG5ldyBGQ2hhbm5lbCgpO1xuICBwcml2YXRlIF9ub2Rlc1JldmlzaW9uID0gMDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvZ3Jlc3NpdmVSZW5kZXJDaGFuZ2VzJCA9IG5ldyBGQ2hhbm5lbCgpO1xuICBwcml2YXRlIF9wZW5kaW5nUHJvZ3Jlc3NpdmVSZW5kZXJDb3VudCA9IDA7XG5cbiAgcHVibGljIGdldCBjb25uZWN0aW9uc1JldmlzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zUmV2aXNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vZGVzUmV2aXNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZXNSZXZpc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzUGVuZGluZ1Byb2dyZXNzaXZlUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUHJvZ3Jlc3NpdmVSZW5kZXJDb3VudCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZsb3dIb3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5mRmxvdz8uaG9zdEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgZkZsb3c6IEZGbG93QmFzZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZkNhbnZhczogRkNhbnZhc0Jhc2UgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCB0cmFuc2Zvcm0oKTogSVRyYW5zZm9ybU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5mQ2FudmFzPy50cmFuc2Zvcm0gYXMgSVRyYW5zZm9ybU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzID0gbmV3IEZOb2RlUmVnaXN0cnkoKTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IEZDb25uZWN0aW9uUmVnaXN0cnkoKTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25NYXJrZXJzID0gbmV3IEZDb25uZWN0aW9uTWFya2VyUmVnaXN0cnkoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0cyA9IG5ldyBGQ29ubmVjdG9yUmVnaXN0cnk8Rk5vZGVPdXRwdXRCYXNlPignT3V0cHV0Jyk7XG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHMgPSBuZXcgRkNvbm5lY3RvclJlZ2lzdHJ5PEZOb2RlSW5wdXRCYXNlPignSW5wdXQnKTtcbiAgcHVibGljIHJlYWRvbmx5IG91dGxldHMgPSBuZXcgRkNvbm5lY3RvclJlZ2lzdHJ5PEZOb2RlT3V0bGV0QmFzZT4oJ091dGxldCcpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZXMgPSBuZXcgRlNpbmdsZVJlZ2lzdHJ5QmFzZSgpO1xuXG4gIHB1YmxpYyBmRHJhZ2dhYmxlOiBGRHJhZ2dhYmxlQmFzZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZW1pdE5vZGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX25vZGVzUmV2aXNpb24rKztcbiAgICB0aGlzLm5vZGVzQ2hhbmdlcyQubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdENvbm5lY3Rpb25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25zUmV2aXNpb24rKztcbiAgICB0aGlzLmNvbm5lY3Rpb25zQ2hhbmdlcyQubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgYmVnaW5Qcm9ncmVzc2l2ZVJlbmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9wZW5kaW5nUHJvZ3Jlc3NpdmVSZW5kZXJDb3VudCsrO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVSZW5kZXJDaGFuZ2VzJC5ub3RpZnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmRQcm9ncmVzc2l2ZVJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BlbmRpbmdQcm9ncmVzc2l2ZVJlbmRlckNvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVuZGluZ1Byb2dyZXNzaXZlUmVuZGVyQ291bnQtLTtcbiAgICB0aGlzLnByb2dyZXNzaXZlUmVuZGVyQ2hhbmdlcyQubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zZm9ybUNoYW5nZXMkLm5vdGlmeSgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBJTlNUQU5DRVMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgTUFHTkVUSUNfTElORVM6IGZJbnN0YW5jZUtleTxGTWFnbmV0aWNMaW5lc0Jhc2U+KCdtYWduZXRpYy1saW5lcycpLFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgTUFHTkVUSUNfUkVDVFM6IGZJbnN0YW5jZUtleTxGTWFnbmV0aWNSZWN0c0Jhc2U+KCdtYWduZXRpYy1yZWN0cycpLFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgWk9PTTogZkluc3RhbmNlS2V5PEZab29tQmFzZT4oJ3pvb20tY29udHJvbHMnKSxcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIEJBQ0tHUk9VTkQ6IGZJbnN0YW5jZUtleTxGQmFja2dyb3VuZEJhc2U+KCdiYWNrZ3JvdW5kJyksXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBTRUxFQ1RJT05fQVJFQTogZkluc3RhbmNlS2V5PEZTZWxlY3Rpb25BcmVhQmFzZT4oJ3NlbGVjdGlvbi1hcmVhJyksXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBNSU5JTUFQOiBmSW5zdGFuY2VLZXk8Rk1pbmltYXBCYXNlPignbWluaW1hcCcpLFxufSBhcyBjb25zdDtcbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Directive, inject, Input, NgZone, TemplateRef, ViewContainerRef, } from '@angular/core';
2
+ import { FComponentsStore } from '../f-storage';
2
3
  import * as i0 from "@angular/core";
3
4
  export class FVirtualFor {
4
5
  fVirtualForOf = [];
@@ -6,20 +7,32 @@ export class FVirtualFor {
6
7
  _vc = inject(ViewContainerRef);
7
8
  _tpl = inject(TemplateRef);
8
9
  _zone = inject(NgZone);
10
+ _componentsStore = inject(FComponentsStore, { optional: true });
9
11
  _views = [];
12
+ _rafId = null;
13
+ _isProgressiveRenderActive = false;
10
14
  ngOnChanges(changes) {
11
15
  if (changes['fVirtualForOf']) {
12
16
  this._reset();
13
17
  this._renderProgressively();
14
18
  }
15
19
  }
20
+ ngOnDestroy() {
21
+ this._reset();
22
+ }
16
23
  _reset() {
24
+ if (this._rafId !== null) {
25
+ cancelAnimationFrame(this._rafId);
26
+ this._rafId = null;
27
+ }
28
+ this._finishProgressiveRender();
17
29
  this._vc.clear();
18
30
  this._views.length = 0;
19
31
  }
20
32
  _renderProgressively() {
21
33
  const FRAME_BUDGET = 10; // ms
22
34
  let index = 0;
35
+ this._startProgressiveRender();
23
36
  this._zone.runOutsideAngular(() => {
24
37
  const pump = () => {
25
38
  const start = performance.now();
@@ -33,12 +46,29 @@ export class FVirtualFor {
33
46
  index++;
34
47
  }
35
48
  if (index < this.fVirtualForOf.length) {
36
- requestAnimationFrame(pump);
49
+ this._rafId = requestAnimationFrame(pump);
50
+ return;
37
51
  }
52
+ this._rafId = null;
53
+ this._finishProgressiveRender();
38
54
  };
39
- requestAnimationFrame(pump);
55
+ this._rafId = requestAnimationFrame(pump);
40
56
  });
41
57
  }
58
+ _startProgressiveRender() {
59
+ if (this._isProgressiveRenderActive) {
60
+ return;
61
+ }
62
+ this._isProgressiveRenderActive = true;
63
+ this._componentsStore?.beginProgressiveRender();
64
+ }
65
+ _finishProgressiveRender() {
66
+ if (!this._isProgressiveRenderActive) {
67
+ return;
68
+ }
69
+ this._isProgressiveRenderActive = false;
70
+ this._componentsStore?.endProgressiveRender();
71
+ }
42
72
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FVirtualFor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
43
73
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FVirtualFor, isStandalone: true, selector: "[fVirtualFor][fVirtualForOf]", inputs: { fVirtualForOf: "fVirtualForOf", fVirtualForTrackBy: "fVirtualForTrackBy" }, usesOnChanges: true, ngImport: i0 });
44
74
  }
@@ -53,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
53
83
  }], fVirtualForTrackBy: [{
54
84
  type: Input
55
85
  }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi12aXJ0dWFsLWZvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi12aXJ0dWFsL2YtdmlydHVhbC1mb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDOztBQVd2QixNQUFNLE9BQU8sV0FBVztJQUNiLGFBQWEsR0FBaUIsRUFBRSxDQUFDO0lBQ2pDLGtCQUFrQixDQUF1QztJQUVqRCxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0IsSUFBSSxHQUFHLE1BQU0sQ0FBa0MsV0FBVyxDQUFDLENBQUM7SUFDNUQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQTBDLEVBQUUsQ0FBQztJQUUzRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUs7UUFDOUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBRWhDLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7b0JBQ3JGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDbEQsU0FBUyxFQUFFLElBQUk7d0JBQ2YsS0FBSztxQkFDTixDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLEtBQUssRUFBRSxDQUFDO2dCQUNWLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBakRVLFdBQVc7NEZBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFKdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBRVUsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIEZWaXJ0dWFsQ29udGV4dDxUPiB7XG4gICRpbXBsaWNpdDogVDtcbiAgaW5kZXg6IG51bWJlcjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZWaXJ0dWFsRm9yXVtmVmlydHVhbEZvck9mXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZWaXJ0dWFsRm9yPFQ+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZlZpcnR1YWxGb3JPZjogcmVhZG9ubHkgVFtdID0gW107XG4gIEBJbnB1dCgpIGZWaXJ0dWFsRm9yVHJhY2tCeT86IChpbmRleDogbnVtYmVyLCBpdGVtOiBUKSA9PiB1bmtub3duO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZjID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90cGwgPSBpbmplY3Q8VGVtcGxhdGVSZWY8RlZpcnR1YWxDb250ZXh0PFQ+Pj4oVGVtcGxhdGVSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSBfdmlld3M6IEVtYmVkZGVkVmlld1JlZjxGVmlydHVhbENvbnRleHQ8VD4+W10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2ZWaXJ0dWFsRm9yT2YnXSkge1xuICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIHRoaXMuX3JlbmRlclByb2dyZXNzaXZlbHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl92Yy5jbGVhcigpO1xuICAgIHRoaXMuX3ZpZXdzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJQcm9ncmVzc2l2ZWx5KCk6IHZvaWQge1xuICAgIGNvbnN0IEZSQU1FX0JVREdFVCA9IDEwOyAvLyBtc1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IHB1bXAgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgdGhpcy5mVmlydHVhbEZvck9mLmxlbmd0aCAmJiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0IDwgRlJBTUVfQlVER0VUKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZlZpcnR1YWxGb3JPZltpbmRleF07XG5cbiAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fdmMuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RwbCwge1xuICAgICAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKHZpZXcpO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmZWaXJ0dWFsRm9yT2YubGVuZ3RoKSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHB1bXApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHVtcCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi12aXJ0dWFsLWZvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi12aXJ0dWFsL2YtdmlydHVhbC1mb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFJTixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFXaEQsTUFBTSxPQUFPLFdBQVc7SUFDYixhQUFhLEdBQWlCLEVBQUUsQ0FBQztJQUNqQyxrQkFBa0IsQ0FBdUM7SUFFakQsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9CLElBQUksR0FBRyxNQUFNLENBQWtDLFdBQVcsQ0FBQyxDQUFDO0lBQzVELEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFekUsTUFBTSxHQUEwQyxFQUFFLENBQUM7SUFDbkQsTUFBTSxHQUFrQixJQUFJLENBQUM7SUFDN0IsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBRTNDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSztRQUM5QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7Z0JBQ2hCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFFaEMsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQztvQkFDckYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNsRCxTQUFTLEVBQUUsSUFBSTt3QkFDZixLQUFLO3FCQUNOLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQztnQkFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUUxQyxPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNoRCxDQUFDO3dHQXRGVSxXQUFXOzRGQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBSnZCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVVLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZDb21wb25lbnRzU3RvcmUgfSBmcm9tICcuLi9mLXN0b3JhZ2UnO1xuXG5pbnRlcmZhY2UgRlZpcnR1YWxDb250ZXh0PFQ+IHtcbiAgJGltcGxpY2l0OiBUO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZlZpcnR1YWxGb3JdW2ZWaXJ0dWFsRm9yT2ZdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRlZpcnR1YWxGb3I8VD4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGZWaXJ0dWFsRm9yT2Y6IHJlYWRvbmx5IFRbXSA9IFtdO1xuICBASW5wdXQoKSBmVmlydHVhbEZvclRyYWNrQnk/OiAoaW5kZXg6IG51bWJlciwgaXRlbTogVCkgPT4gdW5rbm93bjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92YyA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHBsID0gaW5qZWN0PFRlbXBsYXRlUmVmPEZWaXJ0dWFsQ29udGV4dDxUPj4+KFRlbXBsYXRlUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb21wb25lbnRzU3RvcmUgPSBpbmplY3QoRkNvbXBvbmVudHNTdG9yZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIF92aWV3czogRW1iZWRkZWRWaWV3UmVmPEZWaXJ0dWFsQ29udGV4dDxUPj5bXSA9IFtdO1xuICBwcml2YXRlIF9yYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2lzUHJvZ3Jlc3NpdmVSZW5kZXJBY3RpdmUgPSBmYWxzZTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2ZWaXJ0dWFsRm9yT2YnXSkge1xuICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIHRoaXMuX3JlbmRlclByb2dyZXNzaXZlbHkoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JhZklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWZJZCk7XG4gICAgICB0aGlzLl9yYWZJZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZmluaXNoUHJvZ3Jlc3NpdmVSZW5kZXIoKTtcbiAgICB0aGlzLl92Yy5jbGVhcigpO1xuICAgIHRoaXMuX3ZpZXdzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJQcm9ncmVzc2l2ZWx5KCk6IHZvaWQge1xuICAgIGNvbnN0IEZSQU1FX0JVREdFVCA9IDEwOyAvLyBtc1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgdGhpcy5fc3RhcnRQcm9ncmVzc2l2ZVJlbmRlcigpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBwdW1wID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IHRoaXMuZlZpcnR1YWxGb3JPZi5sZW5ndGggJiYgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydCA8IEZSQU1FX0JVREdFVCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZWaXJ0dWFsRm9yT2ZbaW5kZXhdO1xuXG4gICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX3ZjLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90cGwsIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5fdmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5mVmlydHVhbEZvck9mLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX3JhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHB1bXApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmFmSWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5pc2hQcm9ncmVzc2l2ZVJlbmRlcigpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHVtcCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydFByb2dyZXNzaXZlUmVuZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc1Byb2dyZXNzaXZlUmVuZGVyQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNQcm9ncmVzc2l2ZVJlbmRlckFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5fY29tcG9uZW50c1N0b3JlPy5iZWdpblByb2dyZXNzaXZlUmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9maW5pc2hQcm9ncmVzc2l2ZVJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzUHJvZ3Jlc3NpdmVSZW5kZXJBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1Byb2dyZXNzaXZlUmVuZGVyQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5fY29tcG9uZW50c1N0b3JlPy5lbmRQcm9ncmVzc2l2ZVJlbmRlcigpO1xuICB9XG59XG4iXX0=
@@ -7,6 +7,7 @@ export declare class FFlowComponent extends FFlowBase implements OnInit, AfterCo
7
7
  private readonly _destroyRef;
8
8
  private readonly _mediator;
9
9
  private readonly _browser;
10
+ private readonly _componentsStore;
10
11
  private readonly _cache;
11
12
  private readonly _injector;
12
13
  private readonly _worker;
@@ -22,8 +22,11 @@ export declare class FComponentsStore {
22
22
  private _connectionsRevision;
23
23
  readonly nodesChanges$: FChannel;
24
24
  private _nodesRevision;
25
+ readonly progressiveRenderChanges$: FChannel;
26
+ private _pendingProgressiveRenderCount;
25
27
  get connectionsRevision(): number;
26
28
  get nodesRevision(): number;
29
+ get hasPendingProgressiveRender(): boolean;
27
30
  get flowHost(): HTMLElement;
28
31
  fFlow: FFlowBase | undefined;
29
32
  fCanvas: FCanvasBase | undefined;
@@ -38,6 +41,8 @@ export declare class FComponentsStore {
38
41
  fDraggable: FDraggableBase | undefined;
39
42
  emitNodeChanges(): void;
40
43
  emitConnectionChanges(): void;
44
+ beginProgressiveRender(): void;
45
+ endProgressiveRender(): void;
41
46
  transformChanged(): void;
42
47
  static ɵfac: i0.ɵɵFactoryDeclaration<FComponentsStore, never>;
43
48
  static ɵprov: i0.ɵɵInjectableDeclaration<FComponentsStore>;
@@ -1,15 +1,21 @@
1
- import { OnChanges, SimpleChanges } from '@angular/core';
1
+ import { OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class FVirtualFor<T> implements OnChanges {
3
+ export declare class FVirtualFor<T> implements OnChanges, OnDestroy {
4
4
  fVirtualForOf: readonly T[];
5
5
  fVirtualForTrackBy?: (index: number, item: T) => unknown;
6
6
  private readonly _vc;
7
7
  private readonly _tpl;
8
8
  private readonly _zone;
9
+ private readonly _componentsStore;
9
10
  private _views;
11
+ private _rafId;
12
+ private _isProgressiveRenderActive;
10
13
  ngOnChanges(changes: SimpleChanges): void;
14
+ ngOnDestroy(): void;
11
15
  private _reset;
12
16
  private _renderProgressively;
17
+ private _startProgressiveRender;
18
+ private _finishProgressiveRender;
13
19
  static ɵfac: i0.ɵɵFactoryDeclaration<FVirtualFor<any>, never>;
14
20
  static ɵdir: i0.ɵɵDirectiveDeclaration<FVirtualFor<any>, "[fVirtualFor][fVirtualForOf]", never, { "fVirtualForOf": { "alias": "fVirtualForOf"; "required": false; }; "fVirtualForTrackBy": { "alias": "fVirtualForTrackBy"; "required": false; }; }, {}, never, never, true, never>;
15
21
  }
@@ -512,12 +512,17 @@ class FComponentsStore {
512
512
  _connectionsRevision = 0;
513
513
  nodesChanges$ = new FChannel();
514
514
  _nodesRevision = 0;
515
+ progressiveRenderChanges$ = new FChannel();
516
+ _pendingProgressiveRenderCount = 0;
515
517
  get connectionsRevision() {
516
518
  return this._connectionsRevision;
517
519
  }
518
520
  get nodesRevision() {
519
521
  return this._nodesRevision;
520
522
  }
523
+ get hasPendingProgressiveRender() {
524
+ return this._pendingProgressiveRenderCount > 0;
525
+ }
521
526
  get flowHost() {
522
527
  return this.fFlow?.hostElement;
523
528
  }
@@ -542,6 +547,17 @@ class FComponentsStore {
542
547
  this._connectionsRevision++;
543
548
  this.connectionsChanges$.notify();
544
549
  }
550
+ beginProgressiveRender() {
551
+ this._pendingProgressiveRenderCount++;
552
+ this.progressiveRenderChanges$.notify();
553
+ }
554
+ endProgressiveRender() {
555
+ if (!this._pendingProgressiveRenderCount) {
556
+ return;
557
+ }
558
+ this._pendingProgressiveRenderCount--;
559
+ this.progressiveRenderChanges$.notify();
560
+ }
545
561
  transformChanged() {
546
562
  this.transformChanges$.notify();
547
563
  }
@@ -16053,6 +16069,7 @@ class FFlowComponent extends FFlowBase {
16053
16069
  _destroyRef = inject(DestroyRef);
16054
16070
  _mediator = inject(FMediator);
16055
16071
  _browser = inject(BrowserService);
16072
+ _componentsStore = inject(FComponentsStore);
16056
16073
  _cache = inject(F_CACHE_OPTIONS);
16057
16074
  _injector = inject(Injector);
16058
16075
  _worker = inject(FConnectionWorker);
@@ -16078,13 +16095,15 @@ class FFlowComponent extends FFlowBase {
16078
16095
  }, { injector: this._injector });
16079
16096
  }
16080
16097
  _listenNodesChanges() {
16081
- this._mediator
16082
- .execute(new ListenNodesChangesRequest())
16098
+ new FChannelHub(this._componentsStore.nodesChanges$, this._componentsStore.progressiveRenderChanges$)
16083
16099
  .pipe(notifyOnStart(), debounceTime(SORT_ITEM_LAYERS_DEBOUNCE_MS), afterNextPaint())
16084
16100
  .listen(this._destroyRef, () => {
16085
16101
  if (this._mediator.execute(new IsDragStartedRequest())) {
16086
16102
  return;
16087
16103
  }
16104
+ if (this._componentsStore.hasPendingProgressiveRender) {
16105
+ return;
16106
+ }
16088
16107
  this._mediator.execute(new SortItemLayersRequest());
16089
16108
  this._mediator.execute(new EmitConnectionsChangesRequest());
16090
16109
  this._emitLoaded();
@@ -16201,20 +16220,32 @@ class FVirtualFor {
16201
16220
  _vc = inject(ViewContainerRef);
16202
16221
  _tpl = inject(TemplateRef);
16203
16222
  _zone = inject(NgZone);
16223
+ _componentsStore = inject(FComponentsStore, { optional: true });
16204
16224
  _views = [];
16225
+ _rafId = null;
16226
+ _isProgressiveRenderActive = false;
16205
16227
  ngOnChanges(changes) {
16206
16228
  if (changes['fVirtualForOf']) {
16207
16229
  this._reset();
16208
16230
  this._renderProgressively();
16209
16231
  }
16210
16232
  }
16233
+ ngOnDestroy() {
16234
+ this._reset();
16235
+ }
16211
16236
  _reset() {
16237
+ if (this._rafId !== null) {
16238
+ cancelAnimationFrame(this._rafId);
16239
+ this._rafId = null;
16240
+ }
16241
+ this._finishProgressiveRender();
16212
16242
  this._vc.clear();
16213
16243
  this._views.length = 0;
16214
16244
  }
16215
16245
  _renderProgressively() {
16216
16246
  const FRAME_BUDGET = 10; // ms
16217
16247
  let index = 0;
16248
+ this._startProgressiveRender();
16218
16249
  this._zone.runOutsideAngular(() => {
16219
16250
  const pump = () => {
16220
16251
  const start = performance.now();
@@ -16228,12 +16259,29 @@ class FVirtualFor {
16228
16259
  index++;
16229
16260
  }
16230
16261
  if (index < this.fVirtualForOf.length) {
16231
- requestAnimationFrame(pump);
16262
+ this._rafId = requestAnimationFrame(pump);
16263
+ return;
16232
16264
  }
16265
+ this._rafId = null;
16266
+ this._finishProgressiveRender();
16233
16267
  };
16234
- requestAnimationFrame(pump);
16268
+ this._rafId = requestAnimationFrame(pump);
16235
16269
  });
16236
16270
  }
16271
+ _startProgressiveRender() {
16272
+ if (this._isProgressiveRenderActive) {
16273
+ return;
16274
+ }
16275
+ this._isProgressiveRenderActive = true;
16276
+ this._componentsStore?.beginProgressiveRender();
16277
+ }
16278
+ _finishProgressiveRender() {
16279
+ if (!this._isProgressiveRenderActive) {
16280
+ return;
16281
+ }
16282
+ this._isProgressiveRenderActive = false;
16283
+ this._componentsStore?.endProgressiveRender();
16284
+ }
16237
16285
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FVirtualFor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
16238
16286
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FVirtualFor, isStandalone: true, selector: "[fVirtualFor][fVirtualForOf]", inputs: { fVirtualForOf: "fVirtualForOf", fVirtualForTrackBy: "fVirtualForTrackBy" }, usesOnChanges: true, ngImport: i0 });
16239
16287
  }