@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 +11 -1
- package/esm2022/f-flow/f-flow.component.mjs +8 -5
- package/esm2022/f-storage/f-components-store.mjs +17 -1
- package/esm2022/f-virtual/f-virtual-for.mjs +33 -3
- package/f-flow/f-flow.component.d.ts +1 -0
- package/f-storage/f-components-store.d.ts +5 -0
- package/f-virtual/f-virtual-for.d.ts +8 -2
- package/fesm2022/foblex-flow.mjs +52 -4
- package/fesm2022/foblex-flow.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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,
|
|
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.
|
|
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,
|
|
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,
|
|
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
|
}
|
package/fesm2022/foblex-flow.mjs
CHANGED
|
@@ -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.
|
|
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
|
}
|