@tanstack/angular-table 8.20.5 → 8.21.0

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.
@@ -0,0 +1,6 @@
1
+ import { inject, InjectionToken } from '@angular/core';
2
+ export const FlexRenderComponentProps = new InjectionToken('[@tanstack/angular-table] Flex render component context props');
3
+ export function injectFlexRenderContext() {
4
+ return inject(FlexRenderComponentProps);
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mbGV4LXJlbmRlci9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXRELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUV4RCwrREFBK0QsQ0FBQyxDQUFBO0FBRWxFLE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxNQUFNLENBQUksd0JBQXdCLENBQUMsQ0FBQTtBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmV4cG9ydCBjb25zdCBGbGV4UmVuZGVyQ29tcG9uZW50UHJvcHMgPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gIE5vbk51bGxhYmxlPHVua25vd24+XG4+KCdbQHRhbnN0YWNrL2FuZ3VsYXItdGFibGVdIEZsZXggcmVuZGVyIGNvbXBvbmVudCBjb250ZXh0IHByb3BzJylcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZsZXhSZW5kZXJDb250ZXh0PFQgZXh0ZW5kcyBOb25OdWxsYWJsZTx1bmtub3duPj4oKTogVCB7XG4gIHJldHVybiBpbmplY3Q8VD4oRmxleFJlbmRlckNvbXBvbmVudFByb3BzKVxufVxuIl19
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Flags used to manage and optimize the rendering lifecycle of content of the cell,
3
+ * while using FlexRenderDirective.
4
+ */
5
+ export var FlexRenderFlags;
6
+ (function (FlexRenderFlags) {
7
+ /**
8
+ * Indicates that the view is being created for the first time or will be cleared during the next update phase.
9
+ * This is the initial state and will transition after the first ngDoCheck.
10
+ */
11
+ FlexRenderFlags[FlexRenderFlags["ViewFirstRender"] = 1] = "ViewFirstRender";
12
+ /**
13
+ * Represents a state where the view is not dirty, meaning no changes require rendering updates.
14
+ */
15
+ FlexRenderFlags[FlexRenderFlags["Pristine"] = 2] = "Pristine";
16
+ /**
17
+ * Indicates the `content` property has been modified or the view requires a complete re-render.
18
+ * When this flag is enabled, the view will be cleared and recreated from scratch.
19
+ */
20
+ FlexRenderFlags[FlexRenderFlags["ContentChanged"] = 4] = "ContentChanged";
21
+ /**
22
+ * Indicates that the `props` property reference has changed.
23
+ * When this flag is enabled, the view context is updated based on the type of the content.
24
+ *
25
+ * For Component view, inputs will be updated and view will be marked as dirty.
26
+ * For TemplateRef and primitive values, view will be marked as dirty
27
+ */
28
+ FlexRenderFlags[FlexRenderFlags["PropsReferenceChanged"] = 8] = "PropsReferenceChanged";
29
+ /**
30
+ * Indicates that the current rendered view needs to be checked for changes.
31
+ */
32
+ FlexRenderFlags[FlexRenderFlags["DirtyCheck"] = 16] = "DirtyCheck";
33
+ /**
34
+ * Indicates that a signal within the `content(props)` result has changed
35
+ */
36
+ FlexRenderFlags[FlexRenderFlags["DirtySignal"] = 32] = "DirtySignal";
37
+ /**
38
+ * Indicates that the first render effect has been checked at least one time.
39
+ */
40
+ FlexRenderFlags[FlexRenderFlags["RenderEffectChecked"] = 64] = "RenderEffectChecked";
41
+ })(FlexRenderFlags || (FlexRenderFlags = {}));
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmxleC1yZW5kZXIvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxDQUFOLElBQVksZUFtQ1g7QUFuQ0QsV0FBWSxlQUFlO0lBQ3pCOzs7T0FHRztJQUNILDJFQUF3QixDQUFBO0lBQ3hCOztPQUVHO0lBQ0gsNkRBQWlCLENBQUE7SUFDakI7OztPQUdHO0lBQ0gseUVBQXVCLENBQUE7SUFDdkI7Ozs7OztPQU1HO0lBQ0gsdUZBQThCLENBQUE7SUFDOUI7O09BRUc7SUFDSCxrRUFBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILG9FQUFvQixDQUFBO0lBQ3BCOztPQUVHO0lBQ0gsb0ZBQTRCLENBQUE7QUFDOUIsQ0FBQyxFQW5DVyxlQUFlLEtBQWYsZUFBZSxRQW1DMUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsYWdzIHVzZWQgdG8gbWFuYWdlIGFuZCBvcHRpbWl6ZSB0aGUgcmVuZGVyaW5nIGxpZmVjeWNsZSBvZiBjb250ZW50IG9mIHRoZSBjZWxsLFxuICogd2hpbGUgdXNpbmcgRmxleFJlbmRlckRpcmVjdGl2ZS5cbiAqL1xuZXhwb3J0IGVudW0gRmxleFJlbmRlckZsYWdzIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGlzIGJlaW5nIGNyZWF0ZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9yIHdpbGwgYmUgY2xlYXJlZCBkdXJpbmcgdGhlIG5leHQgdXBkYXRlIHBoYXNlLlxuICAgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB3aWxsIHRyYW5zaXRpb24gYWZ0ZXIgdGhlIGZpcnN0IG5nRG9DaGVjay5cbiAgICovXG4gIFZpZXdGaXJzdFJlbmRlciA9IDEgPDwgMCxcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBzdGF0ZSB3aGVyZSB0aGUgdmlldyBpcyBub3QgZGlydHksIG1lYW5pbmcgbm8gY2hhbmdlcyByZXF1aXJlIHJlbmRlcmluZyB1cGRhdGVzLlxuICAgKi9cbiAgUHJpc3RpbmUgPSAxIDw8IDEsXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBjb250ZW50YCBwcm9wZXJ0eSBoYXMgYmVlbiBtb2RpZmllZCBvciB0aGUgdmlldyByZXF1aXJlcyBhIGNvbXBsZXRlIHJlLXJlbmRlci5cbiAgICogV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIHZpZXcgd2lsbCBiZSBjbGVhcmVkIGFuZCByZWNyZWF0ZWQgZnJvbSBzY3JhdGNoLlxuICAgKi9cbiAgQ29udGVudENoYW5nZWQgPSAxIDw8IDIsXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYHByb3BzYCBwcm9wZXJ0eSByZWZlcmVuY2UgaGFzIGNoYW5nZWQuXG4gICAqIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSB2aWV3IGNvbnRleHQgaXMgdXBkYXRlZCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgY29udGVudC5cbiAgICpcbiAgICogRm9yIENvbXBvbmVudCB2aWV3LCBpbnB1dHMgd2lsbCBiZSB1cGRhdGVkIGFuZCB2aWV3IHdpbGwgYmUgbWFya2VkIGFzIGRpcnR5LlxuICAgKiBGb3IgVGVtcGxhdGVSZWYgYW5kIHByaW1pdGl2ZSB2YWx1ZXMsIHZpZXcgd2lsbCBiZSBtYXJrZWQgYXMgZGlydHlcbiAgICovXG4gIFByb3BzUmVmZXJlbmNlQ2hhbmdlZCA9IDEgPDwgMyxcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHJlbmRlcmVkIHZpZXcgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgY2hhbmdlcy5cbiAgICovXG4gIERpcnR5Q2hlY2sgPSAxIDw8IDQsXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHNpZ25hbCB3aXRoaW4gdGhlIGBjb250ZW50KHByb3BzKWAgcmVzdWx0IGhhcyBjaGFuZ2VkXG4gICAqL1xuICBEaXJ0eVNpZ25hbCA9IDEgPDwgNSxcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCByZW5kZXIgZWZmZWN0IGhhcyBiZWVuIGNoZWNrZWQgYXQgbGVhc3Qgb25lIHRpbWUuXG4gICAqL1xuICBSZW5kZXJFZmZlY3RDaGVja2VkID0gMSA8PCA2LFxufVxuIl19
@@ -0,0 +1,173 @@
1
+ import { ChangeDetectorRef, inject, Injectable, KeyValueDiffers, OutputEmitterRef, ViewContainerRef, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FlexRenderComponentFactory {
4
+ #viewContainerRef = inject(ViewContainerRef);
5
+ createComponent(flexRenderComponent, componentInjector) {
6
+ const componentRef = this.#viewContainerRef.createComponent(flexRenderComponent.component, {
7
+ injector: componentInjector,
8
+ });
9
+ const view = new FlexRenderComponentRef(componentRef, flexRenderComponent, componentInjector);
10
+ const { inputs, outputs } = flexRenderComponent;
11
+ if (inputs)
12
+ view.setInputs(inputs);
13
+ if (outputs)
14
+ view.setOutputs(outputs);
15
+ return view;
16
+ }
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FlexRenderComponentFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FlexRenderComponentFactory });
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FlexRenderComponentFactory, decorators: [{
21
+ type: Injectable
22
+ }] });
23
+ export class FlexRenderComponentRef {
24
+ componentRef;
25
+ componentInjector;
26
+ #keyValueDiffersFactory;
27
+ #componentData;
28
+ #inputValueDiffer;
29
+ #outputRegistry;
30
+ constructor(componentRef, componentData, componentInjector) {
31
+ this.componentRef = componentRef;
32
+ this.componentInjector = componentInjector;
33
+ this.#componentData = componentData;
34
+ this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers);
35
+ this.#outputRegistry = new FlexRenderComponentOutputManager(this.#keyValueDiffersFactory, this.outputs);
36
+ this.#inputValueDiffer = this.#keyValueDiffersFactory
37
+ .find(this.inputs)
38
+ .create();
39
+ this.#inputValueDiffer.diff(this.inputs);
40
+ this.componentRef.onDestroy(() => this.#outputRegistry.unsubscribeAll());
41
+ }
42
+ get component() {
43
+ return this.#componentData.component;
44
+ }
45
+ get inputs() {
46
+ return this.#componentData.inputs ?? {};
47
+ }
48
+ get outputs() {
49
+ return this.#componentData.outputs ?? {};
50
+ }
51
+ /**
52
+ * Get component input and output diff by the given item
53
+ */
54
+ diff(item) {
55
+ return {
56
+ inputDiff: this.#inputValueDiffer.diff(item.inputs ?? {}),
57
+ outputDiff: this.#outputRegistry.diff(item.outputs ?? {}),
58
+ };
59
+ }
60
+ /**
61
+ *
62
+ * @param compare Whether the current ref component instance is the same as the given one
63
+ */
64
+ eqType(compare) {
65
+ return compare.component === this.component;
66
+ }
67
+ /**
68
+ * Tries to update current component refs input by the new given content component.
69
+ */
70
+ update(content) {
71
+ const eq = this.eqType(content);
72
+ if (!eq)
73
+ return;
74
+ const { inputDiff, outputDiff } = this.diff(content);
75
+ if (inputDiff) {
76
+ inputDiff.forEachAddedItem(item => this.setInput(item.key, item.currentValue));
77
+ inputDiff.forEachChangedItem(item => this.setInput(item.key, item.currentValue));
78
+ inputDiff.forEachRemovedItem(item => this.setInput(item.key, undefined));
79
+ }
80
+ if (outputDiff) {
81
+ outputDiff.forEachAddedItem(item => {
82
+ this.setOutput(item.key, item.currentValue);
83
+ });
84
+ outputDiff.forEachChangedItem(item => {
85
+ if (item.currentValue) {
86
+ this.#outputRegistry.setListener(item.key, item.currentValue);
87
+ }
88
+ else {
89
+ this.#outputRegistry.unsubscribe(item.key);
90
+ }
91
+ });
92
+ outputDiff.forEachRemovedItem(item => {
93
+ this.#outputRegistry.unsubscribe(item.key);
94
+ });
95
+ }
96
+ this.#componentData = content;
97
+ }
98
+ markAsDirty() {
99
+ this.componentRef.injector.get(ChangeDetectorRef).markForCheck();
100
+ }
101
+ setInputs(inputs) {
102
+ for (const prop in inputs) {
103
+ this.setInput(prop, inputs[prop]);
104
+ }
105
+ }
106
+ setInput(key, value) {
107
+ if (this.#componentData.allowedInputNames.includes(key)) {
108
+ this.componentRef.setInput(key, value);
109
+ }
110
+ }
111
+ setOutputs(outputs) {
112
+ this.#outputRegistry.unsubscribeAll();
113
+ for (const prop in outputs) {
114
+ this.setOutput(prop, outputs[prop]);
115
+ }
116
+ }
117
+ setOutput(outputName, emit) {
118
+ if (!this.#componentData.allowedOutputNames.includes(outputName))
119
+ return;
120
+ if (!emit) {
121
+ this.#outputRegistry.unsubscribe(outputName);
122
+ return;
123
+ }
124
+ const hasListener = this.#outputRegistry.hasListener(outputName);
125
+ this.#outputRegistry.setListener(outputName, emit);
126
+ if (hasListener) {
127
+ return;
128
+ }
129
+ const instance = this.componentRef.instance;
130
+ const output = instance[outputName];
131
+ if (output && output instanceof OutputEmitterRef) {
132
+ output.subscribe(value => {
133
+ this.#outputRegistry.getListener(outputName)?.(value);
134
+ });
135
+ }
136
+ }
137
+ }
138
+ class FlexRenderComponentOutputManager {
139
+ #outputSubscribers = {};
140
+ #outputListeners = {};
141
+ #valueDiffer;
142
+ constructor(keyValueDiffers, initialOutputs) {
143
+ this.#valueDiffer = keyValueDiffers.find(initialOutputs).create();
144
+ if (initialOutputs) {
145
+ this.#valueDiffer.diff(initialOutputs);
146
+ }
147
+ }
148
+ hasListener(outputName) {
149
+ return outputName in this.#outputListeners;
150
+ }
151
+ setListener(outputName, callback) {
152
+ this.#outputListeners[outputName] = callback;
153
+ }
154
+ getListener(outputName) {
155
+ return this.#outputListeners[outputName];
156
+ }
157
+ unsubscribeAll() {
158
+ for (const prop in this.#outputSubscribers) {
159
+ this.unsubscribe(prop);
160
+ }
161
+ }
162
+ unsubscribe(outputName) {
163
+ if (outputName in this.#outputSubscribers) {
164
+ this.#outputSubscribers[outputName]?.unsubscribe();
165
+ delete this.#outputSubscribers[outputName];
166
+ delete this.#outputListeners[outputName];
167
+ }
168
+ }
169
+ diff(outputs) {
170
+ return this.#valueDiffer.diff(outputs ?? {});
171
+ }
172
+ }
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1yZW5kZXItY29tcG9uZW50LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mbGV4LXJlbmRlci9mbGV4LXJlbmRlci1jb21wb25lbnQtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsTUFBTSxFQUNOLFVBQVUsRUFHVixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQTs7QUFJdEIsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUU1QyxlQUFlLENBQ2IsbUJBQTJDLEVBQzNDLGlCQUEyQjtRQUUzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUN6RCxtQkFBbUIsQ0FBQyxTQUFTLEVBQzdCO1lBQ0UsUUFBUSxFQUFFLGlCQUFpQjtTQUM1QixDQUNGLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLHNCQUFzQixDQUNyQyxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGlCQUFpQixDQUNsQixDQUFBO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQTtRQUUvQyxJQUFJLE1BQU07WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xDLElBQUksT0FBTztZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFckMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO3dHQXpCVSwwQkFBMEI7NEdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVTs7QUE2QlgsTUFBTSxPQUFPLHNCQUFzQjtJQVF0QjtJQUVBO0lBVEYsdUJBQXVCLENBQWlCO0lBQ2pELGNBQWMsQ0FBd0I7SUFDdEMsaUJBQWlCLENBQWlDO0lB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QUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFzRTtRQUN6RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBpbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdG9yLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBPdXRwdXRFbWl0dGVyUmVmLFxuICBPdXRwdXRSZWZTdWJzY3JpcHRpb24sXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGbGV4UmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9mbGV4LXJlbmRlci1jb21wb25lbnQnXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGbGV4UmVuZGVyQ29tcG9uZW50RmFjdG9yeSB7XG4gICN2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG5cbiAgY3JlYXRlQ29tcG9uZW50PFQ+KFxuICAgIGZsZXhSZW5kZXJDb21wb25lbnQ6IEZsZXhSZW5kZXJDb21wb25lbnQ8VD4sXG4gICAgY29tcG9uZW50SW5qZWN0b3I6IEluamVjdG9yXG4gICk6IEZsZXhSZW5kZXJDb21wb25lbnRSZWY8VD4ge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuI3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgZmxleFJlbmRlckNvbXBvbmVudC5jb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGluamVjdG9yOiBjb21wb25lbnRJbmplY3RvcixcbiAgICAgIH1cbiAgICApXG4gICAgY29uc3QgdmlldyA9IG5ldyBGbGV4UmVuZGVyQ29tcG9uZW50UmVmKFxuICAgICAgY29tcG9uZW50UmVmLFxuICAgICAgZmxleFJlbmRlckNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudEluamVjdG9yXG4gICAgKVxuXG4gICAgY29uc3QgeyBpbnB1dHMsIG91dHB1dHMgfSA9IGZsZXhSZW5kZXJDb21wb25lbnRcblxuICAgIGlmIChpbnB1dHMpIHZpZXcuc2V0SW5wdXRzKGlucHV0cylcbiAgICBpZiAob3V0cHV0cykgdmlldy5zZXRPdXRwdXRzKG91dHB1dHMpXG5cbiAgICByZXR1cm4gdmlld1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbGV4UmVuZGVyQ29tcG9uZW50UmVmPFQ+IHtcbiAgcmVhZG9ubHkgI2tleVZhbHVlRGlmZmVyc0ZhY3Rvcnk6IEtleVZhbHVlRGlmZmVyc1xuICAjY29tcG9uZW50RGF0YTogRmxleFJlbmRlckNvbXBvbmVudDxUPlxuICAjaW5wdXRWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCB1bmtub3duPlxuXG4gIHJlYWRvbmx5ICNvdXRwdXRSZWdpc3RyeTogRmxleFJlbmRlckNvbXBvbmVudE91dHB1dE1hbmFnZXJcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPixcbiAgICBjb21wb25lbnREYXRhOiBGbGV4UmVuZGVyQ29tcG9uZW50PFQ+LFxuICAgIHJlYWRvbmx5IGNvbXBvbmVudEluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLiNjb21wb25lbnREYXRhID0gY29tcG9uZW50RGF0YVxuICAgIHRoaXMuI2tleVZhbHVlRGlmZmVyc0ZhY3RvcnkgPSBjb21wb25lbnRJbmplY3Rvci5nZXQoS2V5VmFsdWVEaWZmZXJzKVxuXG4gICAgdGhpcy4jb3V0cHV0UmVnaXN0cnkgPSBuZXcgRmxleFJlbmRlckNvbXBvbmVudE91dHB1dE1hbmFnZXIoXG4gICAgICB0aGlzLiNrZXlWYWx1ZURpZmZlcnNGYWN0b3J5LFxuICAgICAgdGhpcy5vdXRwdXRzXG4gICAgKVxuXG4gICAgdGhpcy4jaW5wdXRWYWx1ZURpZmZlciA9IHRoaXMuI2tleVZhbHVlRGlmZmVyc0ZhY3RvcnlcbiAgICAgIC5maW5kKHRoaXMuaW5wdXRzKVxuICAgICAgLmNyZWF0ZSgpXG4gICAgdGhpcy4jaW5wdXRWYWx1ZURpZmZlci5kaWZmKHRoaXMuaW5wdXRzKVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWYub25EZXN0cm95KCgpID0+IHRoaXMuI291dHB1dFJlZ2lzdHJ5LnVuc3Vic2NyaWJlQWxsKCkpXG4gIH1cblxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLiNjb21wb25lbnREYXRhLmNvbXBvbmVudFxuICB9XG5cbiAgZ2V0IGlucHV0cygpIHtcbiAgICByZXR1cm4gdGhpcy4jY29tcG9uZW50RGF0YS5pbnB1dHMgPz8ge31cbiAgfVxuXG4gIGdldCBvdXRwdXRzKCkge1xuICAgIHJldHVybiB0aGlzLiNjb21wb25lbnREYXRhLm91dHB1dHMgPz8ge31cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcG9uZW50IGlucHV0IGFuZCBvdXRwdXQgZGlmZiBieSB0aGUgZ2l2ZW4gaXRlbVxuICAgKi9cbiAgZGlmZihpdGVtOiBGbGV4UmVuZGVyQ29tcG9uZW50PFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0RGlmZjogdGhpcy4jaW5wdXRWYWx1ZURpZmZlci5kaWZmKGl0ZW0uaW5wdXRzID8/IHt9KSxcbiAgICAgIG91dHB1dERpZmY6IHRoaXMuI291dHB1dFJlZ2lzdHJ5LmRpZmYoaXRlbS5vdXRwdXRzID8/IHt9KSxcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb21wYXJlIFdoZXRoZXIgdGhlIGN1cnJlbnQgcmVmIGNvbXBvbmVudCBpbnN0YW5jZSBpcyB0aGUgc2FtZSBhcyB0aGUgZ2l2ZW4gb25lXG4gICAqL1xuICBlcVR5cGUoY29tcGFyZTogRmxleFJlbmRlckNvbXBvbmVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb21wYXJlLmNvbXBvbmVudCA9PT0gdGhpcy5jb21wb25lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB0byB1cGRhdGUgY3VycmVudCBjb21wb25lbnQgcmVmcyBpbnB1dCBieSB0aGUgbmV3IGdpdmVuIGNvbnRlbnQgY29tcG9uZW50LlxuICAgKi9cbiAgdXBkYXRlKGNvbnRlbnQ6IEZsZXhSZW5kZXJDb21wb25lbnQ8VD4pIHtcbiAgICBjb25zdCBlcSA9IHRoaXMuZXFUeXBlKGNvbnRlbnQpXG4gICAgaWYgKCFlcSkgcmV0dXJuXG4gICAgY29uc3QgeyBpbnB1dERpZmYsIG91dHB1dERpZmYgfSA9IHRoaXMuZGlmZihjb250ZW50KVxuICAgIGlmIChpbnB1dERpZmYpIHtcbiAgICAgIGlucHV0RGlmZi5mb3JFYWNoQWRkZWRJdGVtKGl0ZW0gPT5cbiAgICAgICAgdGhpcy5zZXRJbnB1dChpdGVtLmtleSwgaXRlbS5jdXJyZW50VmFsdWUpXG4gICAgICApXG4gICAgICBpbnB1dERpZmYuZm9yRWFjaENoYW5nZWRJdGVtKGl0ZW0gPT5cbiAgICAgICAgdGhpcy5zZXRJbnB1dChpdGVtLmtleSwgaXRlbS5jdXJyZW50VmFsdWUpXG4gICAgICApXG4gICAgICBpbnB1dERpZmYuZm9yRWFjaFJlbW92ZWRJdGVtKGl0ZW0gPT4gdGhpcy5zZXRJbnB1dChpdGVtLmtleSwgdW5kZWZpbmVkKSlcbiAgICB9XG4gICAgaWYgKG91dHB1dERpZmYpIHtcbiAgICAgIG91dHB1dERpZmYuZm9yRWFjaEFkZGVkSXRlbShpdGVtID0+IHtcbiAgICAgICAgdGhpcy5zZXRPdXRwdXQoaXRlbS5rZXksIGl0ZW0uY3VycmVudFZhbHVlKVxuICAgICAgfSlcbiAgICAgIG91dHB1dERpZmYuZm9yRWFjaENoYW5nZWRJdGVtKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLiNvdXRwdXRSZWdpc3RyeS5zZXRMaXN0ZW5lcihpdGVtLmtleSwgaXRlbS5jdXJyZW50VmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jb3V0cHV0UmVnaXN0cnkudW5zdWJzY3JpYmUoaXRlbS5rZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBvdXRwdXREaWZmLmZvckVhY2hSZW1vdmVkSXRlbShpdGVtID0+IHtcbiAgICAgICAgdGhpcy4jb3V0cHV0UmVnaXN0cnkudW5zdWJzY3JpYmUoaXRlbS5rZXkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2NvbXBvbmVudERhdGEgPSBjb250ZW50XG4gIH1cblxuICBtYXJrQXNEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpLm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICBzZXRJbnB1dHMoaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBpbnB1dHMpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXQocHJvcCwgaW5wdXRzW3Byb3BdKVxuICAgIH1cbiAgfVxuXG4gIHNldElucHV0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLiNjb21wb25lbnREYXRhLmFsbG93ZWRJbnB1dE5hbWVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgc2V0T3V0cHV0cyhcbiAgICBvdXRwdXRzOiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBPdXRwdXRFbWl0dGVyUmVmPHVua25vd24+WydlbWl0J10gfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgPlxuICApIHtcbiAgICB0aGlzLiNvdXRwdXRSZWdpc3RyeS51bnN1YnNjcmliZUFsbCgpXG4gICAgZm9yIChjb25zdCBwcm9wIGluIG91dHB1dHMpIHtcbiAgICAgIHRoaXMuc2V0T3V0cHV0KHByb3AsIG91dHB1dHNbcHJvcF0pXG4gICAgfVxuICB9XG5cbiAgc2V0T3V0cHV0KFxuICAgIG91dHB1dE5hbWU6IHN0cmluZyxcbiAgICBlbWl0OiBPdXRwdXRFbWl0dGVyUmVmPHVua25vd24+WydlbWl0J10gfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jY29tcG9uZW50RGF0YS5hbGxvd2VkT3V0cHV0TmFtZXMuaW5jbHVkZXMob3V0cHV0TmFtZSkpIHJldHVyblxuICAgIGlmICghZW1pdCkge1xuICAgICAgdGhpcy4jb3V0cHV0UmVnaXN0cnkudW5zdWJzY3JpYmUob3V0cHV0TmFtZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhhc0xpc3RlbmVyID0gdGhpcy4jb3V0cHV0UmVnaXN0cnkuaGFzTGlzdGVuZXIob3V0cHV0TmFtZSlcbiAgICB0aGlzLiNvdXRwdXRSZWdpc3RyeS5zZXRMaXN0ZW5lcihvdXRwdXROYW1lLCBlbWl0KVxuXG4gICAgaWYgKGhhc0xpc3RlbmVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlXG4gICAgY29uc3Qgb3V0cHV0ID0gaW5zdGFuY2Vbb3V0cHV0TmFtZSBhcyBrZXlvZiB0eXBlb2YgaW5zdGFuY2VdXG4gICAgaWYgKG91dHB1dCAmJiBvdXRwdXQgaW5zdGFuY2VvZiBPdXRwdXRFbWl0dGVyUmVmKSB7XG4gICAgICBvdXRwdXQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy4jb3V0cHV0UmVnaXN0cnkuZ2V0TGlzdGVuZXIob3V0cHV0TmFtZSk/Lih2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEZsZXhSZW5kZXJDb21wb25lbnRPdXRwdXRNYW5hZ2VyIHtcbiAgcmVhZG9ubHkgI291dHB1dFN1YnNjcmliZXJzOiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRSZWZTdWJzY3JpcHRpb24+ID0ge31cbiAgcmVhZG9ubHkgI291dHB1dExpc3RlbmVyczogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9IHt9XG5cbiAgcmVhZG9ubHkgI3ZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxcbiAgICBzdHJpbmcsXG4gICAgdW5kZWZpbmVkIHwgbnVsbCB8IE91dHB1dEVtaXR0ZXJSZWY8dW5rbm93bj5bJ2VtaXQnXVxuICA+XG5cbiAgY29uc3RydWN0b3Ioa2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIGluaXRpYWxPdXRwdXRzOiBhbnkpIHtcbiAgICB0aGlzLiN2YWx1ZURpZmZlciA9IGtleVZhbHVlRGlmZmVycy5maW5kKGluaXRpYWxPdXRwdXRzKS5jcmVhdGUoKVxuICAgIGlmIChpbml0aWFsT3V0cHV0cykge1xuICAgICAgdGhpcy4jdmFsdWVEaWZmZXIuZGlmZihpbml0aWFsT3V0cHV0cylcbiAgICB9XG4gIH1cblxuICBoYXNMaXN0ZW5lcihvdXRwdXROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gb3V0cHV0TmFtZSBpbiB0aGlzLiNvdXRwdXRMaXN0ZW5lcnNcbiAgfVxuXG4gIHNldExpc3RlbmVyKG91dHB1dE5hbWU6IHN0cmluZywgY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIHRoaXMuI291dHB1dExpc3RlbmVyc1tvdXRwdXROYW1lXSA9IGNhbGxiYWNrXG4gIH1cblxuICBnZXRMaXN0ZW5lcihvdXRwdXROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy4jb3V0cHV0TGlzdGVuZXJzW291dHB1dE5hbWVdXG4gIH1cblxuICB1bnN1YnNjcmliZUFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy4jb3V0cHV0U3Vic2NyaWJlcnMpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUocHJvcClcbiAgICB9XG4gIH1cblxuICB1bnN1YnNjcmliZShvdXRwdXROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAob3V0cHV0TmFtZSBpbiB0aGlzLiNvdXRwdXRTdWJzY3JpYmVycykge1xuICAgICAgdGhpcy4jb3V0cHV0U3Vic2NyaWJlcnNbb3V0cHV0TmFtZV0/LnVuc3Vic2NyaWJlKClcbiAgICAgIGRlbGV0ZSB0aGlzLiNvdXRwdXRTdWJzY3JpYmVyc1tvdXRwdXROYW1lXVxuICAgICAgZGVsZXRlIHRoaXMuI291dHB1dExpc3RlbmVyc1tvdXRwdXROYW1lXVxuICAgIH1cbiAgfVxuXG4gIGRpZmYob3V0cHV0czogUmVjb3JkPHN0cmluZywgT3V0cHV0RW1pdHRlclJlZjx1bmtub3duPlsnZW1pdCddIHwgdW5kZWZpbmVkPikge1xuICAgIHJldHVybiB0aGlzLiN2YWx1ZURpZmZlci5kaWZmKG91dHB1dHMgPz8ge30pXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { reflectComponentType, } from '@angular/core';
2
+ /**
3
+ * Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.
4
+ *
5
+ * - options object must be passed when the given component instance contains at least one required signal input.
6
+ * - options/inputs is typed with the given component inputs
7
+ * - options/outputs is typed with the given component outputs
8
+ */
9
+ export function flexRenderComponent(component, ...options) {
10
+ const { inputs, injector, outputs } = options?.[0] ?? {};
11
+ return new FlexRenderComponent(component, inputs, injector, outputs);
12
+ }
13
+ /**
14
+ * Wrapper class for a component that will be used as content for {@link FlexRenderDirective}
15
+ *
16
+ * Prefer {@link flexRenderComponent} helper for better type-safety
17
+ */
18
+ export class FlexRenderComponent {
19
+ component;
20
+ inputs;
21
+ injector;
22
+ outputs;
23
+ mirror;
24
+ allowedInputNames = [];
25
+ allowedOutputNames = [];
26
+ constructor(component, inputs, injector, outputs) {
27
+ this.component = component;
28
+ this.inputs = inputs;
29
+ this.injector = injector;
30
+ this.outputs = outputs;
31
+ const mirror = reflectComponentType(component);
32
+ if (!mirror) {
33
+ throw new Error(`[@tanstack-table/angular] The provided symbol is not a component`);
34
+ }
35
+ this.mirror = mirror;
36
+ for (const input of this.mirror.inputs) {
37
+ this.allowedInputNames.push(input.propName);
38
+ }
39
+ for (const output of this.mirror.outputs) {
40
+ this.allowedOutputNames.push(output.propName);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1yZW5kZXItY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ZsZXgtcmVuZGVyL2ZsZXgtcmVuZGVyLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsb0JBQW9CLEdBRXJCLE1BQU0sZUFBZSxDQUFBO0FBNER0Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBS2pDLFNBQTJCLEVBQzNCLEdBQUcsT0FFK0M7SUFFbEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN0RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFNbkI7SUFDQTtJQUNBO0lBQ0E7SUFSRixNQUFNLENBQTZCO0lBQ25DLGlCQUFpQixHQUFhLEVBQUUsQ0FBQTtJQUNoQyxrQkFBa0IsR0FBYSxFQUFFLENBQUE7SUFFMUMsWUFDVyxTQUEyQixFQUMzQixNQUEyQixFQUMzQixRQUFtQixFQUNuQixPQUE2QjtRQUg3QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBRXRDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0MsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudE1pcnJvcixcbiAgSW5qZWN0b3IsXG4gIElucHV0U2lnbmFsLFxuICBPdXRwdXRFbWl0dGVyUmVmLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxudHlwZSBJbnB1dHM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFI+XG4gICAgPyBLXG4gICAgOiBuZXZlcl0/OiBUW0tdIGV4dGVuZHMgSW5wdXRTaWduYWw8aW5mZXIgUj4gPyBSIDogbmV2ZXJcbn1cblxudHlwZSBPdXRwdXRzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIFRbS10gZXh0ZW5kcyBPdXRwdXRFbWl0dGVyUmVmPGluZmVyIFI+XG4gICAgPyBLXG4gICAgOiBuZXZlcl0/OiBUW0tdIGV4dGVuZHMgT3V0cHV0RW1pdHRlclJlZjxpbmZlciBSPlxuICAgID8gT3V0cHV0RW1pdHRlclJlZjxSPlsnZW1pdCddXG4gICAgOiBuZXZlclxufVxuXG50eXBlIE9wdGlvbmFsS2V5czxULCBLID0ga2V5b2YgVD4gPSBLIGV4dGVuZHMga2V5b2YgVFxuICA/IFRbS10gZXh0ZW5kcyBSZXF1aXJlZDxUPltLXVxuICAgID8gdW5kZWZpbmVkIGV4dGVuZHMgVFtLXVxuICAgICAgPyBLXG4gICAgICA6IG5ldmVyXG4gICAgOiBLXG4gIDogbmV2ZXJcblxuaW50ZXJmYWNlIEZsZXhSZW5kZXJSZXF1aXJlZE9wdGlvbnM8XG4gIFRJbnB1dHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUT3V0cHV0cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4+IHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBpbnB1dHMuIFRoZXkgd2lsbCBiZSBzZXQgdmlhIFtjb21wb25lbnRSZWYuc2V0SW5wdXQgQVBJXShodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb3JlL0NvbXBvbmVudFJlZiNzZXRJbnB1dClcbiAgICovXG4gIGlucHV0czogVElucHV0c1xuICAvKipcbiAgICogQ29tcG9uZW50IGluc3RhbmNlIG91dHB1dHMuXG4gICAqL1xuICBvdXRwdXRzPzogVE91dHB1dHNcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHtAbGluayBJbmplY3Rvcn0gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvclxufVxuXG5pbnRlcmZhY2UgRmxleFJlbmRlck9wdGlvbnM8XG4gIFRJbnB1dHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUT3V0cHV0cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4+IHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBpbnB1dHMuIFRoZXkgd2lsbCBiZSBzZXQgdmlhIFtjb21wb25lbnRSZWYuc2V0SW5wdXQgQVBJXShodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb3JlL0NvbXBvbmVudFJlZiNzZXRJbnB1dClcbiAgICovXG4gIGlucHV0cz86IFRJbnB1dHNcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBvdXRwdXRzLlxuICAgKi9cbiAgb3V0cHV0cz86IFRPdXRwdXRzXG4gIC8qKlxuICAgKiBPcHRpb25hbCB7QGxpbmsgSW5qZWN0b3J9IHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGluamVjdG9yPzogSW5qZWN0b3Jcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgW0BsaW5rIEZsZXhSZW5kZXJDb21wb25lbnRdIGluc3RhbmNlLCB3aXRoIGJldHRlciB0eXBlLXNhZmV0eS5cbiAqXG4gKiAtIG9wdGlvbnMgb2JqZWN0IG11c3QgYmUgcGFzc2VkIHdoZW4gdGhlIGdpdmVuIGNvbXBvbmVudCBpbnN0YW5jZSBjb250YWlucyBhdCBsZWFzdCBvbmUgcmVxdWlyZWQgc2lnbmFsIGlucHV0LlxuICogLSBvcHRpb25zL2lucHV0cyBpcyB0eXBlZCB3aXRoIHRoZSBnaXZlbiBjb21wb25lbnQgaW5wdXRzXG4gKiAtIG9wdGlvbnMvb3V0cHV0cyBpcyB0eXBlZCB3aXRoIHRoZSBnaXZlbiBjb21wb25lbnQgb3V0cHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxleFJlbmRlckNvbXBvbmVudDxcbiAgVENvbXBvbmVudCA9IGFueSxcbiAgVElucHV0cyBleHRlbmRzIElucHV0czxUQ29tcG9uZW50PiA9IElucHV0czxUQ29tcG9uZW50PixcbiAgVE91dHB1dHMgZXh0ZW5kcyBPdXRwdXRzPFRDb21wb25lbnQ+ID0gT3V0cHV0czxUQ29tcG9uZW50Pixcbj4oXG4gIGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50PixcbiAgLi4ub3B0aW9uczogT3B0aW9uYWxLZXlzPFRJbnB1dHM+IGV4dGVuZHMgbmV2ZXJcbiAgICA/IFtGbGV4UmVuZGVyT3B0aW9uczxUSW5wdXRzLCBUT3V0cHV0cz4/XVxuICAgIDogW0ZsZXhSZW5kZXJSZXF1aXJlZE9wdGlvbnM8VElucHV0cywgVE91dHB1dHM+XVxuKSB7XG4gIGNvbnN0IHsgaW5wdXRzLCBpbmplY3Rvciwgb3V0cHV0cyB9ID0gb3B0aW9ucz8uWzBdID8/IHt9XG4gIHJldHVybiBuZXcgRmxleFJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIGlucHV0cywgaW5qZWN0b3IsIG91dHB1dHMpXG59XG5cbi8qKlxuICogV3JhcHBlciBjbGFzcyBmb3IgYSBjb21wb25lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgY29udGVudCBmb3Ige0BsaW5rIEZsZXhSZW5kZXJEaXJlY3RpdmV9XG4gKlxuICogUHJlZmVyIHtAbGluayBmbGV4UmVuZGVyQ29tcG9uZW50fSBoZWxwZXIgZm9yIGJldHRlciB0eXBlLXNhZmV0eVxuICovXG5leHBvcnQgY2xhc3MgRmxleFJlbmRlckNvbXBvbmVudDxUQ29tcG9uZW50ID0gYW55PiB7XG4gIHJlYWRvbmx5IG1pcnJvcjogQ29tcG9uZW50TWlycm9yPFRDb21wb25lbnQ+XG4gIHJlYWRvbmx5IGFsbG93ZWRJbnB1dE5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIHJlYWRvbmx5IGFsbG93ZWRPdXRwdXROYW1lczogc3RyaW5nW10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50PixcbiAgICByZWFkb25seSBpbnB1dHM/OiBJbnB1dHM8VENvbXBvbmVudD4sXG4gICAgcmVhZG9ubHkgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgICByZWFkb25seSBvdXRwdXRzPzogT3V0cHV0czxUQ29tcG9uZW50PlxuICApIHtcbiAgICBjb25zdCBtaXJyb3IgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpXG4gICAgaWYgKCFtaXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtAdGFuc3RhY2stdGFibGUvYW5ndWxhcl0gVGhlIHByb3ZpZGVkIHN5bWJvbCBpcyBub3QgYSBjb21wb25lbnRgXG4gICAgICApXG4gICAgfVxuICAgIHRoaXMubWlycm9yID0gbWlycm9yXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLm1pcnJvci5pbnB1dHMpIHtcbiAgICAgIHRoaXMuYWxsb3dlZElucHV0TmFtZXMucHVzaChpbnB1dC5wcm9wTmFtZSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5taXJyb3Iub3V0cHV0cykge1xuICAgICAgdGhpcy5hbGxvd2VkT3V0cHV0TmFtZXMucHVzaChvdXRwdXQucHJvcE5hbWUpXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,102 @@
1
+ import { TemplateRef, Type } from '@angular/core';
2
+ import { FlexRenderComponent } from './flex-render-component';
3
+ export function mapToFlexRenderTypedContent(content) {
4
+ if (content === null || content === undefined) {
5
+ return { kind: 'null' };
6
+ }
7
+ if (typeof content === 'string' || typeof content === 'number') {
8
+ return { kind: 'primitive', content };
9
+ }
10
+ if (content instanceof FlexRenderComponent) {
11
+ return { kind: 'flexRenderComponent', content };
12
+ }
13
+ else if (content instanceof TemplateRef) {
14
+ return { kind: 'templateRef', content };
15
+ }
16
+ else if (content instanceof Type) {
17
+ return { kind: 'component', content };
18
+ }
19
+ else {
20
+ return { kind: 'primitive', content };
21
+ }
22
+ }
23
+ export class FlexRenderView {
24
+ view;
25
+ #previousContent;
26
+ #content;
27
+ constructor(initialContent, view) {
28
+ this.#content = initialContent;
29
+ this.view = view;
30
+ }
31
+ get previousContent() {
32
+ return this.#previousContent ?? { kind: 'null' };
33
+ }
34
+ get content() {
35
+ return this.#content;
36
+ }
37
+ set content(content) {
38
+ this.#previousContent = this.#content;
39
+ this.#content = content;
40
+ }
41
+ }
42
+ export class FlexRenderTemplateView extends FlexRenderView {
43
+ constructor(initialContent, view) {
44
+ super(initialContent, view);
45
+ }
46
+ updateProps(props) {
47
+ this.view.markForCheck();
48
+ }
49
+ dirtyCheck() {
50
+ // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update
51
+ // since this type of content has a proxy as a context, then every time the root component is checked for changes,
52
+ // the property getter will be re-evaluated.
53
+ //
54
+ // If in a future we need to manually mark the view as dirty, just uncomment next line
55
+ // this.view.markForCheck()
56
+ }
57
+ onDestroy(callback) {
58
+ this.view.onDestroy(callback);
59
+ }
60
+ }
61
+ export class FlexRenderComponentView extends FlexRenderView {
62
+ constructor(initialContent, view) {
63
+ super(initialContent, view);
64
+ }
65
+ updateProps(props) {
66
+ switch (this.content.kind) {
67
+ case 'component': {
68
+ this.view.setInputs(props);
69
+ break;
70
+ }
71
+ case 'flexRenderComponent': {
72
+ // No-op. When FlexRenderFlags.PropsReferenceChanged is set,
73
+ // FlexRenderComponent will be updated into `dirtyCheck`.
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ dirtyCheck() {
79
+ switch (this.content.kind) {
80
+ case 'component': {
81
+ // Component context is currently valuated with the cell context. Since it's reference
82
+ // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view.
83
+ // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default
84
+ this.view.markAsDirty();
85
+ break;
86
+ }
87
+ case 'flexRenderComponent': {
88
+ // Given context instance will always have a different reference than the previous one,
89
+ // so instead of recreating the entire view, we will only update the current view
90
+ if (this.view.eqType(this.content.content)) {
91
+ this.view.update(this.content.content);
92
+ }
93
+ this.view.markAsDirty();
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ onDestroy(callback) {
99
+ this.view.componentRef.onDestroy(callback);
100
+ }
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mbGV4LXJlbmRlci92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQVk3RCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLE9BQStCO0lBRS9CLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0QsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUNELElBQUksT0FBTyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUNqRCxDQUFDO1NBQU0sSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDekMsQ0FBQztTQUFNLElBQUksT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3ZDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQWdCLGNBQWM7SUFHekIsSUFBSSxDQUFPO0lB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eFJlbmRlckNvbXBvbmVudFJlZiB9IGZyb20gJy4vZmxleC1yZW5kZXItY29tcG9uZW50LXJlZidcbmltcG9ydCB7IEVtYmVkZGVkVmlld1JlZiwgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBGbGV4UmVuZGVyQ29udGVudCB9IGZyb20gJy4uL2ZsZXgtcmVuZGVyJ1xuaW1wb3J0IHsgRmxleFJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZmxleC1yZW5kZXItY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBGbGV4UmVuZGVyVHlwZWRDb250ZW50ID1cbiAgfCB7IGtpbmQ6ICdudWxsJyB9XG4gIHwge1xuICAgICAga2luZDogJ3ByaW1pdGl2ZSdcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICB9XG4gIHwgeyBraW5kOiAnZmxleFJlbmRlckNvbXBvbmVudCc7IGNvbnRlbnQ6IEZsZXhSZW5kZXJDb21wb25lbnQ8dW5rbm93bj4gfVxuICB8IHsga2luZDogJ3RlbXBsYXRlUmVmJzsgY29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfVxuICB8IHsga2luZDogJ2NvbXBvbmVudCc7IGNvbnRlbnQ6IFR5cGU8dW5rbm93bj4gfVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9GbGV4UmVuZGVyVHlwZWRDb250ZW50KFxuICBjb250ZW50OiBGbGV4UmVuZGVyQ29udGVudDxhbnk+XG4pOiBGbGV4UmVuZGVyVHlwZWRDb250ZW50IHtcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ251bGwnIH1cbiAgfVxuICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB7IGtpbmQ6ICdwcmltaXRpdmUnLCBjb250ZW50IH1cbiAgfVxuICBpZiAoY29udGVudCBpbnN0YW5jZW9mIEZsZXhSZW5kZXJDb21wb25lbnQpIHtcbiAgICByZXR1cm4geyBraW5kOiAnZmxleFJlbmRlckNvbXBvbmVudCcsIGNvbnRlbnQgfVxuICB9IGVsc2UgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIHJldHVybiB7IGtpbmQ6ICd0ZW1wbGF0ZVJlZicsIGNvbnRlbnQgfVxuICB9IGVsc2UgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ2NvbXBvbmVudCcsIGNvbnRlbnQgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGtpbmQ6ICdwcmltaXRpdmUnLCBjb250ZW50IH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmxleFJlbmRlclZpZXc8XG4gIFRWaWV3IGV4dGVuZHMgRmxleFJlbmRlckNvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbCxcbj4ge1xuICByZWFkb25seSB2aWV3OiBUVmlld1xuICAjcHJldmlvdXNDb250ZW50OiBGbGV4UmVuZGVyVHlwZWRDb250ZW50IHwgdW5kZWZpbmVkXG4gICNjb250ZW50OiBGbGV4UmVuZGVyVHlwZWRDb250ZW50XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxDb250ZW50OiBFeGNsdWRlPEZsZXhSZW5kZXJUeXBlZENvbnRlbnQsIHsga2luZDogJ251bGwnIH0+LFxuICAgIHZpZXc6IFRWaWV3XG4gICkge1xuICAgIHRoaXMuI2NvbnRlbnQgPSBpbml0aWFsQ29udGVudFxuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgfVxuXG4gIGdldCBwcmV2aW91c0NvbnRlbnQoKTogRmxleFJlbmRlclR5cGVkQ29udGVudCB7XG4gICAgcmV0dXJuIHRoaXMuI3ByZXZpb3VzQ29udGVudCA/PyB7IGtpbmQ6ICdudWxsJyB9XG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY29udGVudFxuICB9XG5cbiAgc2V0IGNvbnRlbnQoY29udGVudDogRmxleFJlbmRlclR5cGVkQ29udGVudCkge1xuICAgIHRoaXMuI3ByZXZpb3VzQ29udGVudCA9IHRoaXMuI2NvbnRlbnRcbiAgICB0aGlzLiNjb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgYWJzdHJhY3QgdXBkYXRlUHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkXG5cbiAgYWJzdHJhY3QgZGlydHlDaGVjaygpOiB2b2lkXG5cbiAgYWJzdHJhY3Qgb25EZXN0cm95KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWRcbn1cblxuZXhwb3J0IGNsYXNzIEZsZXhSZW5kZXJUZW1wbGF0ZVZpZXcgZXh0ZW5kcyBGbGV4UmVuZGVyVmlldzxcbiAgRW1iZWRkZWRWaWV3UmVmPHVua25vd24+XG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgaW5pdGlhbENvbnRlbnQ6IEV4dHJhY3Q8XG4gICAgICBGbGV4UmVuZGVyVHlwZWRDb250ZW50LFxuICAgICAgeyBraW5kOiAncHJpbWl0aXZlJyB8ICd0ZW1wbGF0ZVJlZicgfVxuICAgID4sXG4gICAgdmlldzogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+XG4gICkge1xuICAgIHN1cGVyKGluaXRpYWxDb250ZW50LCB2aWV3KVxuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlUHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLnZpZXcubWFya0ZvckNoZWNrKClcbiAgfVxuXG4gIG92ZXJyaWRlIGRpcnR5Q2hlY2soKSB7XG4gICAgLy8gQmFzaWNhbGx5IGEgbm8tb3AuIFdoZW4gdGhlIHZpZXcgaXMgY3JlYXRlZCB2aWEgRW1iZWRkZWRWaWV3UmVmLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBtYW51YWwgdXBkYXRlXG4gICAgLy8gc2luY2UgdGhpcyB0eXBlIG9mIGNvbnRlbnQgaGFzIGEgcHJveHkgYXMgYSBjb250ZXh0LCB0aGVuIGV2ZXJ5IHRpbWUgdGhlIHJvb3QgY29tcG9uZW50IGlzIGNoZWNrZWQgZm9yIGNoYW5nZXMsXG4gICAgLy8gdGhlIHByb3BlcnR5IGdldHRlciB3aWxsIGJlIHJlLWV2YWx1YXRlZC5cbiAgICAvL1xuICAgIC8vIElmIGluIGEgZnV0dXJlIHdlIG5lZWQgdG8gbWFudWFsbHkgbWFyayB0aGUgdmlldyBhcyBkaXJ0eSwganVzdCB1bmNvbW1lbnQgbmV4dCBsaW5lXG4gICAgLy8gdGhpcy52aWV3Lm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy52aWV3Lm9uRGVzdHJveShjYWxsYmFjaylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmxleFJlbmRlckNvbXBvbmVudFZpZXcgZXh0ZW5kcyBGbGV4UmVuZGVyVmlldzxcbiAgRmxleFJlbmRlckNvbXBvbmVudFJlZjx1bmtub3duPlxuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxDb250ZW50OiBFeHRyYWN0PFxuICAgICAgRmxleFJlbmRlclR5cGVkQ29udGVudCxcbiAgICAgIHsga2luZDogJ2NvbXBvbmVudCcgfCAnZmxleFJlbmRlckNvbXBvbmVudCcgfVxuICAgID4sXG4gICAgdmlldzogRmxleFJlbmRlckNvbXBvbmVudFJlZjx1bmtub3duPlxuICApIHtcbiAgICBzdXBlcihpbml0aWFsQ29udGVudCwgdmlldylcbiAgfVxuXG4gIG92ZXJyaWRlIHVwZGF0ZVByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgc3dpdGNoICh0aGlzLmNvbnRlbnQua2luZCkge1xuICAgICAgY2FzZSAnY29tcG9uZW50Jzoge1xuICAgICAgICB0aGlzLnZpZXcuc2V0SW5wdXRzKHByb3BzKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnZmxleFJlbmRlckNvbXBvbmVudCc6IHtcbiAgICAgICAgLy8gTm8tb3AuIFdoZW4gRmxleFJlbmRlckZsYWdzLlByb3BzUmVmZXJlbmNlQ2hhbmdlZCBpcyBzZXQsXG4gICAgICAgIC8vIEZsZXhSZW5kZXJDb21wb25lbnQgd2lsbCBiZSB1cGRhdGVkIGludG8gYGRpcnR5Q2hlY2tgLlxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGRpcnR5Q2hlY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLmNvbnRlbnQua2luZCkge1xuICAgICAgY2FzZSAnY29tcG9uZW50Jzoge1xuICAgICAgICAvLyBDb21wb25lbnQgY29udGV4dCBpcyBjdXJyZW50bHkgdmFsdWF0ZWQgd2l0aCB0aGUgY2VsbCBjb250ZXh0LiBTaW5jZSBpdCdzIHJlZmVyZW5jZVxuICAgICAgICAvLyBzaG91bGRuJ3QgY2hhbmdlLCB3ZSBmb3JjZSBtYXJrIHRoZSBjb21wb25lbnQgYXMgZGlydHkgaW4gb3JkZXIgdG8gcmUtZXZhbHVhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiB2aWV3LlxuICAgICAgICAvLyBOT1RFOiB0aGlzIHNob3VsZCBiZWhhdmUgbGlrZSBoYXZpbmcgYSBjb21wb25lbnQgd2l0aCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0XG4gICAgICAgIHRoaXMudmlldy5tYXJrQXNEaXJ0eSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdmbGV4UmVuZGVyQ29tcG9uZW50Jzoge1xuICAgICAgICAvLyBHaXZlbiBjb250ZXh0IGluc3RhbmNlIHdpbGwgYWx3YXlzIGhhdmUgYSBkaWZmZXJlbnQgcmVmZXJlbmNlIHRoYW4gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gc28gaW5zdGVhZCBvZiByZWNyZWF0aW5nIHRoZSBlbnRpcmUgdmlldywgd2Ugd2lsbCBvbmx5IHVwZGF0ZSB0aGUgY3VycmVudCB2aWV3XG4gICAgICAgIGlmICh0aGlzLnZpZXcuZXFUeXBlKHRoaXMuY29udGVudC5jb250ZW50KSkge1xuICAgICAgICAgIHRoaXMudmlldy51cGRhdGUodGhpcy5jb250ZW50LmNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Lm1hcmtBc0RpcnR5KClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy52aWV3LmNvbXBvbmVudFJlZi5vbkRlc3Ryb3koY2FsbGJhY2spXG4gIH1cbn1cbiJdfQ==