ngx-reactify 0.0.2 → 0.0.3
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/esm2022/util/angular-to-react.mjs +154 -84
- package/esm2022/util/react-to-angular.mjs +2 -2
- package/fesm2022/ngx-reactify.mjs +155 -85
- package/fesm2022/ngx-reactify.mjs.map +1 -1
- package/package.json +1 -1
- package/util/angular-to-react.d.ts +34 -3
- package/util/angular-to-react.d.ts.map +1 -1
- package/util/react-to-angular.d.ts +2 -2
- package/util/react-to-angular.d.ts.map +1 -1
|
@@ -2,13 +2,14 @@ import { createComponent, EventEmitter } from '@angular/core';
|
|
|
2
2
|
import { createApplication } from '@angular/platform-browser';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { firstValueFrom } from 'rxjs';
|
|
5
|
-
// declare const Zone;
|
|
6
|
-
// const zone = Zone ? new Zone(Zone.current, { name: "@dotglitch_menu", properties: {} }) : null;
|
|
7
5
|
/**
|
|
8
|
-
* Wrap an
|
|
6
|
+
* Wrap an Angular component inside of a React memo object.
|
|
9
7
|
* Will attempt to bind @Input and @Output properties if provided,
|
|
10
8
|
* and will bind the react arguments directly as @Input properties.
|
|
11
9
|
*
|
|
10
|
+
* Usage: An Angular top-level application with a ReactifyNgComponent react implementation
|
|
11
|
+
* that needs to embed Angular components as children of the react-wrapped component.
|
|
12
|
+
*
|
|
12
13
|
* @experimental
|
|
13
14
|
* @param componentClass Angular component
|
|
14
15
|
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
@@ -17,84 +18,160 @@ import { firstValueFrom } from 'rxjs';
|
|
|
17
18
|
* @param _outputs
|
|
18
19
|
* @returns
|
|
19
20
|
*/
|
|
20
|
-
export const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
21
|
+
export const ReactifyAngularComponent = ({ component, appRef, injector, ngZone, staticInputs = {}, staticOutputs = {}, preSiblings = [], postSiblings = [], additionalChildren = [], rootElementName = '', containerElementName = '' }) => React.memo((args) => {
|
|
22
|
+
return ngZone.runOutsideAngular(() => {
|
|
23
|
+
const id = Math.random().toString();
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
try {
|
|
26
|
+
const componentInstance = createComponent(component, {
|
|
27
|
+
environmentInjector: appRef.injector,
|
|
28
|
+
elementInjector: injector,
|
|
29
|
+
hostElement: document.getElementById(id)
|
|
30
|
+
});
|
|
31
|
+
appRef.attachView(componentInstance.hostView);
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
// component.hostView = hostView;
|
|
34
|
+
Object.assign(staticInputs, args);
|
|
35
|
+
const { inputs, outputs } = component['ɵcmp'];
|
|
36
|
+
// Returns a list of entries that need to be set
|
|
37
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
38
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
39
|
+
return componentInstance.instance[childKey] != staticInputs[parentKey];
|
|
40
|
+
});
|
|
41
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
42
|
+
if (staticInputs.hasOwnProperty(parentKey))
|
|
43
|
+
componentInstance.instance[childKey] = staticInputs[parentKey];
|
|
44
|
+
});
|
|
45
|
+
const outputSubscriptions = {};
|
|
46
|
+
// Get a list of unregistered outputs
|
|
47
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
48
|
+
return !outputSubscriptions[parentKey];
|
|
49
|
+
});
|
|
50
|
+
// Reverse bind via subscription
|
|
51
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
52
|
+
if (!staticOutputs.hasOwnProperty(parentKey))
|
|
53
|
+
return;
|
|
54
|
+
const target = componentInstance.instance[childKey];
|
|
55
|
+
const outputs = staticOutputs;
|
|
56
|
+
const sub = target.subscribe((...args) => {
|
|
57
|
+
// Run the callback in the provided zone
|
|
58
|
+
ngZone.run(() => {
|
|
59
|
+
outputs[parentKey](...args);
|
|
60
|
+
});
|
|
61
|
+
}); // Subscription
|
|
62
|
+
outputSubscriptions[parentKey] = sub;
|
|
63
|
+
});
|
|
64
|
+
// Wrap the destroy method to safely release the subscriptions
|
|
65
|
+
const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);
|
|
66
|
+
componentInstance.onDestroy = (cb) => {
|
|
67
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
68
|
+
originalDestroy?.(cb);
|
|
69
|
+
};
|
|
70
|
+
componentInstance.changeDetectorRef.detectChanges();
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
console.error(err);
|
|
74
|
+
}
|
|
75
|
+
}, []);
|
|
76
|
+
const elements = [
|
|
77
|
+
...(preSiblings || []),
|
|
78
|
+
React.createElement(containerElementName || "div", { id }),
|
|
79
|
+
...(postSiblings || []),
|
|
80
|
+
...(additionalChildren || [])
|
|
81
|
+
].filter(e => e);
|
|
82
|
+
return React.createElement(rootElementName || "div", {}, ...elements);
|
|
83
|
+
});
|
|
81
84
|
});
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
// TODO: Remove in major release.
|
|
86
|
+
export const ReactifyReactComponent = ReactifyAngularComponent;
|
|
87
|
+
/**
|
|
88
|
+
* Do not use this.
|
|
89
|
+
* @hidden
|
|
90
|
+
* @experimental
|
|
91
|
+
*/
|
|
92
|
+
export function ReactifyAngularComponent3(component, ngZone, appRef, injector, props = {}, containerTag = 'div') {
|
|
84
93
|
const ctx = this;
|
|
85
|
-
|
|
94
|
+
console.log("ReactifyAngularComponent3");
|
|
95
|
+
return ngZone.runOutsideAngular(() => {
|
|
86
96
|
// Is there a better way to do this?
|
|
87
97
|
let subscriptions;
|
|
88
98
|
let app;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
let componentInstance;
|
|
100
|
+
React.useEffect(() => {
|
|
101
|
+
return () => {
|
|
102
|
+
// Code to run when the component unmounts
|
|
103
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
104
|
+
// app?.destroy();
|
|
105
|
+
appRef.detachView(componentInstance.hostView);
|
|
106
|
+
};
|
|
107
|
+
}, []);
|
|
108
|
+
return React.createElement(containerTag, {
|
|
109
|
+
ref: async (node) => {
|
|
110
|
+
// Not sure if this ever actually happens, added as a preventative measure
|
|
111
|
+
// to memory leaks.
|
|
112
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
113
|
+
app?.destroy();
|
|
114
|
+
// ngZone.run(async () => {
|
|
115
|
+
// Init an Angular application root & bootstrap it to a DOM element.
|
|
116
|
+
componentInstance = createComponent(component, {
|
|
117
|
+
environmentInjector: appRef.injector,
|
|
118
|
+
elementInjector: injector,
|
|
119
|
+
hostElement: node
|
|
120
|
+
});
|
|
121
|
+
appRef.attachView(componentInstance.hostView);
|
|
122
|
+
// app = await createApplication({ providers });
|
|
123
|
+
// const base = app.bootstrap(component, node);
|
|
124
|
+
// const { instance } = base;
|
|
125
|
+
// Wait for the JS to finish rendering and initing.
|
|
126
|
+
// await firstValueFrom(app.isStable);
|
|
127
|
+
// Now that everything has settled, bind inputs and outputs.
|
|
128
|
+
subscriptions = [];
|
|
129
|
+
Object.entries(props).filter(([k, v]) => {
|
|
130
|
+
// @Outputs are always Event Emitters (I think)
|
|
131
|
+
if (v instanceof EventEmitter) {
|
|
132
|
+
subscriptions.push(componentInstance.instance[k]?.subscribe(evt => props[k].call(ctx, evt)));
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
componentInstance.instance[k] = props[k];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// })
|
|
139
|
+
// app.tick();
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Bootstrap an Angular component with `createApplication` and export it under a
|
|
146
|
+
* react Element.
|
|
147
|
+
* Usage: React top-level application embedding an Angular component.
|
|
148
|
+
*/
|
|
149
|
+
export function ReactifyStandaloneAngularComponent(component, props = {}, providers = [], containerTag = 'div') {
|
|
150
|
+
const ctx = this;
|
|
151
|
+
// Is there a better way to do this?
|
|
152
|
+
let subscriptions;
|
|
153
|
+
let app;
|
|
154
|
+
React.useEffect(() => {
|
|
155
|
+
return () => {
|
|
156
|
+
// Code to run when the component unmounts
|
|
157
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
158
|
+
app?.destroy();
|
|
159
|
+
};
|
|
160
|
+
}, []);
|
|
161
|
+
return React.createElement(containerTag, { ref: async (node) => {
|
|
162
|
+
// Not sure if this ever actually happens, added as a preventative measure
|
|
163
|
+
// to memory leaks.
|
|
164
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
165
|
+
app?.destroy();
|
|
166
|
+
// Init an Angular application root & bootstrap it to a DOM element.
|
|
167
|
+
app = await createApplication({ providers });
|
|
168
|
+
const base = app.bootstrap(component, node);
|
|
93
169
|
const { instance } = base;
|
|
170
|
+
// Wait for the JS to finish rendering and initing.
|
|
94
171
|
await firstValueFrom(app.isStable);
|
|
95
|
-
//
|
|
172
|
+
// Now that everything has settled, bind inputs and outputs.
|
|
96
173
|
subscriptions = [];
|
|
97
|
-
Object.entries(
|
|
174
|
+
Object.entries(props).filter(([k, v]) => {
|
|
98
175
|
// @Outputs are always Event Emitters (I think)
|
|
99
176
|
if (v instanceof EventEmitter) {
|
|
100
177
|
subscriptions.push(instance[k]?.subscribe(evt => props[k].call(ctx, evt)));
|
|
@@ -103,14 +180,7 @@ export const ReactifyAngularComponent2 = (component, props) => {
|
|
|
103
180
|
instance[k] = props[k];
|
|
104
181
|
}
|
|
105
182
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
subscriptions?.forEach(s => s?.unsubscribe());
|
|
110
|
-
app?.destroy();
|
|
111
|
-
};
|
|
112
|
-
}, []); // Empty dependency array ensures this effect runs only once on mount and cleanup on unmount
|
|
113
|
-
const obj = {};
|
|
114
|
-
return React.createElement("div");
|
|
115
|
-
};
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10by1yZWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL2FuZ3VsYXItdG8tcmVhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBR3BELHNCQUFzQjtBQUN0QixrR0FBa0c7QUFFbEc7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxFQUNuQyxTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLGFBQWEsRUFDYixXQUFXLEVBQ1gsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysb0JBQW9CLEVBYXZCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUV0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDakIsSUFBSSxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFO2dCQUNqRCxtQkFBbUIsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDcEMsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLFdBQVcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzthQUMzQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lB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QUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLElBQUksQ0FDZCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDekQsQ0FBQztnQkFDTixDQUFDO3FCQUNJLENBQUM7b0JBQ0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLE9BQU8sR0FBRyxFQUFFO1lBQ1IsMENBQTBDO1lBQzFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM5QyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNEZBQTRGO0lBRXBHLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUVmLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNyQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgY3JlYXRlQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZUFwcGxpY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cblxuLy8gZGVjbGFyZSBjb25zdCBab25lO1xuLy8gY29uc3Qgem9uZSA9IFpvbmUgPyBuZXcgWm9uZShab25lLmN1cnJlbnQsIHsgbmFtZTogXCJAZG90Z2xpdGNoX21lbnVcIiwgcHJvcGVydGllczoge30gfSkgOiBudWxsO1xuXG4vKipcbiAqIFdyYXAgYW4gYW5ndWxhciBjb21wb25lbnQgaW5zaWRlIG9mIGEgUmVhY3QgbWVtbyBvYmplY3QuXG4gKiBXaWxsIGF0dGVtcHQgdG8gYmluZCBASW5wdXQgYW5kIEBPdXRwdXQgcHJvcGVydGllcyBpZiBwcm92aWRlZCxcbiAqIGFuZCB3aWxsIGJpbmQgdGhlIHJlYWN0IGFyZ3VtZW50cyBkaXJlY3RseSBhcyBASW5wdXQgcHJvcGVydGllcy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcGFyYW0gY29tcG9uZW50Q2xhc3MgQW5ndWxhciBjb21wb25lbnRcbiAqIEBwYXJhbSBlbnZJbmplY3RvciAgICBBbiBgRW52aXJvbm1lbnRJbmplY3RvcmAgaW5zdGFuY2UgdG8gYmUgdXNlZCBmb3IgdGhlIGNvbXBvbmVudFxuICogQHBhcmFtIGluamVjdG9yICAgICAgIEFuIGBFbGVtZW50SW5qZWN0b3JgIGluc3RhbmNlXG4gKiBAcGFyYW0gX2lucHV0c1xuICogQHBhcmFtIF9vdXRwdXRzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgUmVhY3RpZnlSZWFjdENvbXBvbmVudCA9ICh7XG4gICAgY29tcG9uZW50LFxuICAgIGFwcFJlZixcbiAgICBpbmplY3RvcixcbiAgICBuZ1pvbmUsXG4gICAgc3RhdGljSW5wdXRzLFxuICAgIHN0YXRpY091dHB1dHMsXG4gICAgcHJlU2libGluZ3MsXG4gICAgcG9zdFNpYmxpbmdzLFxuICAgIGFkZGl0aW9uYWxDaGlsZHJlbixcbiAgICByb290RWxlbWVudE5hbWUsXG4gICAgY29udGFpbmVyRWxlbWVudE5hbWVcbn06IHtcbiAgICBjb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICBhcHBSZWY6IE9taXQ8QXBwbGljYXRpb25SZWYsICdfcnVubmluZ1RpY2snPixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICAgc3RhdGljSW5wdXRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sXG4gICAgc3RhdGljT3V0cHV0cz86IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb247IH0sXG4gICAgcHJlU2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBwb3N0U2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBhZGRpdGlvbmFsQ2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICByb290RWxlbWVudE5hbWU/OiBQYXJhbWV0ZXJzPHR5cGVvZiBSZWFjdC5jcmVhdGVFbGVtZW50PlswXSxcbiAgICBjb250YWluZXJFbGVtZW50TmFtZT86IHN0cmluZztcbn0pID0+IFJlYWN0Lm1lbW8oKGFyZ3MpID0+IHtcblxuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGFwcFJlZi5pbmplY3RvcixcbiAgICAgICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGluamVjdG9yLFxuICAgICAgICAgICAgICAgIGhvc3RFbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAvLyBjb21wb25lbnQuaG9zdFZpZXcgPSBob3N0VmlldztcblxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0aWNJbnB1dHMsIGFyZ3MpO1xuXG4gICAgICAgICAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gY29tcG9uZW50WyfJtWNtcCddO1xuXG4gICAgICAgICAgICAvLyBSZXR1cm5zIGEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgbmVlZCB0byBiZSBzZXRcbiAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCB1bm5lY2Vzc2FyeSBzZXR0ZXJzIGFyZSBub3QgaW52b2tlZC5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2NoaWxkS2V5XSAhPSBzdGF0aWNJbnB1dHNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB1cGRhdGVkLmZvckVhY2goKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0aWNJbnB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSlcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldID0gc3RhdGljSW5wdXRzW3BhcmVudEtleV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0U3Vic2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb247IH0gPSB7fTtcbiAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2YgdW5yZWdpc3RlcmVkIG91dHB1dHNcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dHMgPSBPYmplY3QuZW50cmllcyhvdXRwdXRzKS5maWx0ZXIoKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJldmVyc2UgYmluZCB2aWEgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICBuZXdPdXRwdXRzLmZvckVhY2goKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGljT3V0cHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQ6IEV2ZW50RW1pdHRlcjx1bmtub3duPiA9IGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2NoaWxkS2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRzID0gc3RhdGljT3V0cHV0cztcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRhcmdldC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSBjYWxsYmFjayBpbiB0aGUgcHJvdmlkZWQgem9uZVxuICAgICAgICAgICAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHNbcGFyZW50S2V5XSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7IC8vIFN1YnNjcmlwdGlvblxuXG4gICAgICAgICAgICAgICAgb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldID0gc3ViO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFdyYXAgdGhlIGRlc3Ryb3kgbWV0aG9kIHRvIHNhZmVseSByZWxlYXNlIHRoZSBzdWJzY3JpcHRpb25zXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2Uub25EZXN0cm95ID0gKGNiKSA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhvdXRwdXRTdWJzY3JpcHRpb25zKS5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbERlc3Ryb3k/LihjYik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSBbXG4gICAgICAgIC4uLihwcmVTaWJsaW5ncyB8fCBbXSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyRWxlbWVudE5hbWUgfHwgXCJkaXZcIiwgeyBpZCB9KSxcbiAgICAgICAgLi4uKHBvc3RTaWJsaW5ncyB8fCBbXSksXG4gICAgICAgIC4uLihhZGRpdGlvbmFsQ2hpbGRyZW4gfHwgW10pXG4gICAgXS5maWx0ZXIoZSA9PiBlKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJvb3RFbGVtZW50TmFtZSB8fCBcImRpdlwiLCB7fSwgLi4uZWxlbWVudHMpO1xufSk7XG5cblxuZXhwb3J0IGNvbnN0IFJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDIgPSAoXG4gICAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgcHJvcHM6IGFueVxuKSA9PiB7XG4gICAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzP1xuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG4gICAgICAgIGxldCBhcHA6IEFwcGxpY2F0aW9uUmVmO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ29kZSB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IG1vdW50c1xuICAgICAgICAgICAgYXBwID0gYXdhaXQgY3JlYXRlQXBwbGljYXRpb24oeyBwcm92aWRlcnM6IFtdIH0pO1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGFwcC5ib290c3RyYXAoY29tcG9uZW50LCBpbnB1dFJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IGJhc2U7XG5cbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKGFwcC5pc1N0YWJsZSk7XG5cbiAgICAgICAgICAgIC8vIEFwcCBoYXMgbm93IGJvb3RzdHJhcHBlZCBmdWxseS5cbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGluc3RhbmNlKS5maWx0ZXIoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEBPdXRwdXRzIGFyZSBhbHdheXMgRXZlbnQgRW1pdHRlcnMgKEkgdGhpbmspXG4gICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba10/LnN1YnNjcmliZShldnQgPT4gcHJvcHNba10uY2FsbChjdHgsIGV2dCkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrXSA9IHByb3BzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pKClcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ29kZSB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IHVubW91bnRzXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zPy5mb3JFYWNoKHMgPT4gcz8udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICBhcHA/LmRlc3Ryb3koKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7IC8vIEVtcHR5IGRlcGVuZGVuY3kgYXJyYXkgZW5zdXJlcyB0aGlzIGVmZmVjdCBydW5zIG9ubHkgb25jZSBvbiBtb3VudCBhbmQgY2xlYW51cCBvbiB1bm1vdW50XG5cbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG59XG4iXX0=
|
|
183
|
+
base.changeDetectorRef.detectChanges();
|
|
184
|
+
} });
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10by1yZWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL2FuZ3VsYXItdG8tcmVhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxlQUFlLEVBQUUsWUFBWSxFQUFnRCxNQUFNLGVBQWUsQ0FBQztBQUNwSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQ3JDLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEdBQUcsRUFBRSxFQUNqQixhQUFhLEdBQUcsRUFBRSxFQUNsQixXQUFXLEdBQUcsRUFBRSxFQUNoQixZQUFZLEdBQUcsRUFBRSxFQUNqQixrQkFBa0IsR0FBRyxFQUFFLEVBQ3ZCLGVBQWUsR0FBRyxFQUFFLEVBQ3BCLG9CQUFvQixHQUFHLEVBQUUsRUFhNUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO0lBRXRCLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDO2dCQUVELE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRTtvQkFDakQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3BDLGVBQWUsRUFBRSxRQUFRO29CQUN6QixXQUFXLEVBQUUsUUFB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RSxDQUFDLENBQUM7WUFDOUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBRWYsb0VBQW9FO1lBQ3BFLEdBQUcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBRzFCLG1EQUFtRDtZQUNuRCxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkMsNERBQTREO1lBQzVELGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwQywrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLFlBQVksRUFBRSxDQUFDO29CQUM1QixhQUFhLENBQUMsSUFBSSxDQUNkLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN6RCxDQUFDO2dCQUNOLENBQUM7cUJBQ0ksQ0FBQztvQkFDRixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgY3JlYXRlQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIFByb3ZpZGVyLCBFbnZpcm9ubWVudFByb3ZpZGVycywgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5cbi8qKlxuICogV3JhcCBhbiBBbmd1bGFyIGNvbXBvbmVudCBpbnNpZGUgb2YgYSBSZWFjdCBtZW1vIG9iamVjdC5cbiAqIFdpbGwgYXR0ZW1wdCB0byBiaW5kIEBJbnB1dCBhbmQgQE91dHB1dCBwcm9wZXJ0aWVzIGlmIHByb3ZpZGVkLFxuICogYW5kIHdpbGwgYmluZCB0aGUgcmVhY3QgYXJndW1lbnRzIGRpcmVjdGx5IGFzIEBJbnB1dCBwcm9wZXJ0aWVzLlxuICpcbiAqIFVzYWdlOiBBbiBBbmd1bGFyIHRvcC1sZXZlbCBhcHBsaWNhdGlvbiB3aXRoIGEgUmVhY3RpZnlOZ0NvbXBvbmVudCByZWFjdCBpbXBsZW1lbnRhdGlvblxuICogdGhhdCBuZWVkcyB0byBlbWJlZCBBbmd1bGFyIGNvbXBvbmVudHMgYXMgY2hpbGRyZW4gb2YgdGhlIHJlYWN0LXdyYXBwZWQgY29tcG9uZW50LlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSBjb21wb25lbnRDbGFzcyBBbmd1bGFyIGNvbXBvbmVudFxuICogQHBhcmFtIGVudkluamVjdG9yICAgIEFuIGBFbnZpcm9ubWVudEluamVjdG9yYCBpbnN0YW5jZSB0byBiZSB1c2VkIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcGFyYW0gaW5qZWN0b3IgICAgICAgQW4gYEVsZW1lbnRJbmplY3RvcmAgaW5zdGFuY2VcbiAqIEBwYXJhbSBfaW5wdXRzXG4gKiBAcGFyYW0gX291dHB1dHNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBSZWFjdGlmeUFuZ3VsYXJDb21wb25lbnQgPSAoe1xuICAgIGNvbXBvbmVudCxcbiAgICBhcHBSZWYsXG4gICAgaW5qZWN0b3IsXG4gICAgbmdab25lLFxuICAgIHN0YXRpY0lucHV0cyA9IHt9LFxuICAgIHN0YXRpY091dHB1dHMgPSB7fSxcbiAgICBwcmVTaWJsaW5ncyA9IFtdLFxuICAgIHBvc3RTaWJsaW5ncyA9IFtdLFxuICAgIGFkZGl0aW9uYWxDaGlsZHJlbiA9IFtdLFxuICAgIHJvb3RFbGVtZW50TmFtZSA9ICcnLFxuICAgIGNvbnRhaW5lckVsZW1lbnROYW1lID0gJydcbn06IHtcbiAgICBjb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICBhcHBSZWY6IE9taXQ8QXBwbGljYXRpb25SZWYsICdfcnVubmluZ1RpY2snPixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICAgc3RhdGljSW5wdXRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sXG4gICAgc3RhdGljT3V0cHV0cz86IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb247IH0sXG4gICAgcHJlU2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBwb3N0U2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBhZGRpdGlvbmFsQ2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICByb290RWxlbWVudE5hbWU/OiBQYXJhbWV0ZXJzPHR5cGVvZiBSZWFjdC5jcmVhdGVFbGVtZW50PlswXSxcbiAgICBjb250YWluZXJFbGVtZW50TmFtZT86IHN0cmluZztcbn0pID0+IFJlYWN0Lm1lbW8oKGFyZ3MpID0+IHtcblxuICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBob3N0RWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudC5ob3N0VmlldyA9IGhvc3RWaWV3O1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0aWNJbnB1dHMsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbnB1dHMsIG91dHB1dHMgfSA9IGNvbXBvbmVudFsnybVjbXAnXTtcblxuICAgICAgICAgICAgICAgIC8vIFJldHVybnMgYSBsaXN0IG9mIGVudHJpZXMgdGhhdCBuZWVkIHRvIGJlIHNldFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCB1bm5lY2Vzc2FyeSBzZXR0ZXJzIGFyZSBub3QgaW52b2tlZC5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gT2JqZWN0LmVudHJpZXMoaW5wdXRzKS5maWx0ZXIoKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldICE9IHN0YXRpY0lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlZC5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0lucHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldID0gc3RhdGljSW5wdXRzW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRTdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IFN1YnNjcmlwdGlvbjsgfSA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2YgdW5yZWdpc3RlcmVkIG91dHB1dHNcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPdXRwdXRzID0gT2JqZWN0LmVudHJpZXMob3V0cHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFvdXRwdXRTdWJzY3JpcHRpb25zW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIGJpbmQgdmlhIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIG5ld091dHB1dHMuZm9yRWFjaCgoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljT3V0cHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiBFdmVudEVtaXR0ZXI8dW5rbm93bj4gPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtjaGlsZEtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSBzdGF0aWNPdXRwdXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRhcmdldC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1biB0aGUgY2FsbGJhY2sgaW4gdGhlIHByb3ZpZGVkIHpvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHNbcGFyZW50S2V5XSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgLy8gU3Vic2NyaXB0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldID0gc3ViO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gV3JhcCB0aGUgZGVzdHJveSBtZXRob2QgdG8gc2FmZWx5IHJlbGVhc2UgdGhlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm9uRGVzdHJveSA9IChjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKG91dHB1dFN1YnNjcmlwdGlvbnMpLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc3Ryb3k/LihjYik7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgIC4uLihwcmVTaWJsaW5ncyB8fCBbXSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRhaW5lckVsZW1lbnROYW1lIHx8IFwiZGl2XCIsIHsgaWQgfSksXG4gICAgICAgICAgICAuLi4ocG9zdFNpYmxpbmdzIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLihhZGRpdGlvbmFsQ2hpbGRyZW4gfHwgW10pXG4gICAgICAgIF0uZmlsdGVyKGUgPT4gZSk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQocm9vdEVsZW1lbnROYW1lIHx8IFwiZGl2XCIsIHt9LCAuLi5lbGVtZW50cyk7XG4gICAgfSlcbn0pO1xuLy8gVE9ETzogUmVtb3ZlIGluIG1ham9yIHJlbGVhc2UuXG5leHBvcnQgY29uc3QgUmVhY3RpZnlSZWFjdENvbXBvbmVudCA9IFJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDtcblxuLyoqXG4gKiBEbyBub3QgdXNlIHRoaXMuXG4gKiBAaGlkZGVuXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWFjdGlmeUFuZ3VsYXJDb21wb25lbnQzKFxuICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIGFwcFJlZjogT21pdDxBcHBsaWNhdGlvblJlZiwgJ19ydW5uaW5nVGljayc+LFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm9wczogYW55ID0ge30sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcgPSAnZGl2J1xuKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcbiAgICBjb25zb2xlLmxvZyhcIlJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDNcIilcblxuICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAvLyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz9cbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xuICAgICAgICBsZXQgYXBwOiBBcHBsaWNhdGlvblJlZjtcbiAgICAgICAgbGV0IGNvbXBvbmVudEluc3RhbmNlOiBDb21wb25lbnRSZWY8YW55PjtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb2RlIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHNcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zPy5mb3JFYWNoKHMgPT4gcz8udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAgICAgLy8gYXBwPy5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICBhcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyVGFnLCB7XG4gICAgICAgICAgICByZWY6IGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTm90IHN1cmUgaWYgdGhpcyBldmVyIGFjdHVhbGx5IGhhcHBlbnMsIGFkZGVkIGFzIGEgcHJldmVudGF0aXZlIG1lYXN1cmVcbiAgICAgICAgICAgICAgICAvLyB0byBtZW1vcnkgbGVha3MuXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgIGFwcD8uZGVzdHJveSgpO1xuXG5cbiAgICAgICAgICAgICAgICAvLyBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJbml0IGFuIEFuZ3VsYXIgYXBwbGljYXRpb24gcm9vdCAmIGJvb3RzdHJhcCBpdCB0byBhIERPTSBlbGVtZW50LlxuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGFwcFJlZi5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IG5vZGVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudEluc3RhbmNlLmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAvLyBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7IHByb3ZpZGVycyB9KTtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBiYXNlID0gYXBwLmJvb3RzdHJhcChjb21wb25lbnQsIG5vZGUpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHsgaW5zdGFuY2UgfSA9IGJhc2U7XG5cblxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBKUyB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCBpbml0aW5nLlxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGZpcnN0VmFsdWVGcm9tKGFwcC5pc1N0YWJsZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzZXR0bGVkLCBiaW5kIGlucHV0cyBhbmQgb3V0cHV0cy5cbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcHMpLmZpbHRlcigoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEBPdXRwdXRzIGFyZSBhbHdheXMgRXZlbnQgRW1pdHRlcnMgKEkgdGhpbmspXG4gICAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2Vba10/LnN1YnNjcmliZShldnQgPT4gcHJvcHNba10uY2FsbChjdHgsIGV2dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2Vba10gPSBwcm9wc1trXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIH0pXG5cbiAgICAgICAgICAgICAgICAvLyBhcHAudGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIEJvb3RzdHJhcCBhbiBBbmd1bGFyIGNvbXBvbmVudCB3aXRoIGBjcmVhdGVBcHBsaWNhdGlvbmAgYW5kIGV4cG9ydCBpdCB1bmRlciBhXG4gKiByZWFjdCBFbGVtZW50LlxuICogVXNhZ2U6IFJlYWN0IHRvcC1sZXZlbCBhcHBsaWNhdGlvbiBlbWJlZGRpbmcgYW4gQW5ndWxhciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWFjdGlmeVN0YW5kYWxvbmVBbmd1bGFyQ29tcG9uZW50KFxuICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgIHByb3BzOiBhbnkgPSB7fSxcbiAgICBwcm92aWRlcnM6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdID0gW10sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcgPSAnZGl2J1xuKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzP1xuICAgIGxldCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgICBsZXQgYXBwOiBBcHBsaWNhdGlvblJlZjtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDb2RlIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHNcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM/LmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIGFwcD8uZGVzdHJveSgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRhaW5lclRhZywgeyByZWY6IGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgZXZlciBhY3R1YWxseSBoYXBwZW5zLCBhZGRlZCBhcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlXG4gICAgICAgIC8vIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICBhcHA/LmRlc3Ryb3koKTtcblxuICAgICAgICAvLyBJbml0IGFuIEFuZ3VsYXIgYXBwbGljYXRpb24gcm9vdCAmIGJvb3RzdHJhcCBpdCB0byBhIERPTSBlbGVtZW50LlxuICAgICAgICBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7IHByb3ZpZGVycyB9KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IGFwcC5ib290c3RyYXAoY29tcG9uZW50LCBub2RlKTtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gYmFzZTtcblxuXG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBKUyB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCBpbml0aW5nLlxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShhcHAuaXNTdGFibGUpO1xuXG4gICAgICAgIC8vIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHNldHRsZWQsIGJpbmQgaW5wdXRzIGFuZCBvdXRwdXRzLlxuICAgICAgICBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5maWx0ZXIoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgLy8gQE91dHB1dHMgYXJlIGFsd2F5cyBFdmVudCBFbWl0dGVycyAoSSB0aGluaylcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrXT8uc3Vic2NyaWJlKGV2dCA9PiBwcm9wc1trXS5jYWxsKGN0eCwgZXZ0KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba10gPSBwcm9wc1trXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmFzZS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSB9KTtcbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@ export class ReactifyNgComponent {
|
|
|
17
17
|
}
|
|
18
18
|
ngOnInit() {
|
|
19
19
|
if (!this.ngReactComponent) {
|
|
20
|
-
throw new Error("
|
|
20
|
+
throw new Error("ReactifyNgComponent cannot be inherited without a provided ngReactComponent!");
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
ngOnChanges(changes) {
|
|
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
72
72
|
standalone: true
|
|
73
73
|
}]
|
|
74
74
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.NgZone }] });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtdG8tYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL3JlYWN0LXRvLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWlFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHcEQ7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTyxtQkFBbUI7SUFVNUIsWUFDdUIsV0FBNkIsRUFDN0IsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRXJDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUNwRyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUF1QjtRQUMvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtZQUN4RCxPQUFNO1FBQ1YsQ0FBQztRQUFBLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRWxFLG9EQUFvRDtnQkFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFakUsdUNBQXVDO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELDRDQUE0QztnQkFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFckQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqQiwwQ0FBMEM7Z0JBQzFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTFDLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUN4QiwyQkFBMkI7b0JBQzNCLG9EQUFvRDtvQkFDcEQsc0NBQXNDO29CQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckUsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBWSxFQUFFLENBQUMsQ0FDdEUsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdEIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0F4RVEsbUJBQW1CO2tHQUFuQixtQkFBbUIsd0dBSGxCLEVBQUU7OzJGQUdILG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJvb3QsIFJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcblxuXG4vKipcbiAqIEV4dGVuZCB0aGlzIGNvbXBvbmVudCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlXG4gKiBiaW5kaW5ncyB0byBhIFJlYWN0IGNvbXBvbmVudC5cbiAqXG4gKiAhIFlvdSBfbXVzdF8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGBuZ1JlYWN0Q29tcG9uZW50YFxuICogRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBlcnJvcnNcbiAqIGBvdmVycmlkZSByZWFkb25seSBuZ1JlYWN0Q29tcG9uZW50ID0gUmVhY3RGbG93V3JhcHBhYmxlQ29tcG9uZW50O2BcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcmVhY3QtbWFnaWMtd3JhcHBlcicsXG4gICAgdGVtcGxhdGU6IGBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUmVhY3RpZnlOZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFjdCBjb21wb25lbnQgdG8gYmUgd3JhcHBlZC5cbiAgICAgKiAhIE11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgdGhpcyB3cmFwcGVyIHRvIHdvcmtcbiAgICAgKi9cbiAgICBuZ1JlYWN0Q29tcG9uZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxhbnk+IHwgUmVhY3QuQ29tcG9uZW50Q2xhc3M8YW55PjtcblxuICAgIHByaXZhdGUgX3Jvb3Q6IFJvb3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5nQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWN0aWZ5TmdDb21wb25lbnQgY2Fubm90IGJlIGluaGVyaXRlZCB3aXRob3V0IGEgcHJvdmlkZWQgbmdSZWFjdENvbXBvbmVudCFcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yb290Py51bm1vdW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW5kZXIgbm8gY29tcG9uZW50LiBNYXkgYmUgY29udGV4dCBpc3N1ZVwiKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290ID8/PSBjcmVhdGVSb290KHRoaXMubmdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIExpc3QgYWxsIGtleXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBgX2Agbm9yIGBuZ2BcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcykuZmlsdGVyKGsgPT4gIS9eKD86X3xuZykvLnRlc3QoaykpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBwcm9wZXJ0eSBrZXlzIGZyb20gdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcEtleXMgPSBrZXlzLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBldmVudCBoYW5kbGVyIGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBldnRLZXlzID0ga2V5cy5maWx0ZXIoayA9PiBrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFByb2plY3QgYWxsIGtleSBwcm9wZXJ0aWVzIG9udG8gYHByb3BzYFxuICAgICAgICAgICAgICAgIHByb3BLZXlzLmZvckVhY2goayA9PiBwcm9wc1trXSA9IHRoaXNba10pO1xuXG4gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBlbnN1cmUgbm8gem9uZSBpcyBsb3N0IGR1cmluZyB0aGUgZXZlbnQgZW1pdHRlciBmaXJlc1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bkd1YXJkZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBCaW5kIGFsbCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICAgICAgLy8gISBpbXBvcnRhbnQgQW5ndWxhciB1c2VzIEV2ZW50RW1pdHRlciwgUmVhY3QgdXNlc1xuICAgICAgICAgICAgICAgICAgICAvLyBhIGRpZmZlcmVudCBtZXRob2Qgb2YgZXZlbnQgYmluZGluZ1xuICAgICAgICAgICAgICAgICAgICBldnRLZXlzLmZvckVhY2goayA9PiBwcm9wc1trXSA9ICguLi5hcmdzKSA9PiB0aGlzW2tdLm5leHQoYXJncykpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yb290LnJlbmRlcihcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLm5nUmVhY3RDb21wb25lbnQsIHsgcHJvcHM6IHByb3BzIGFzIGFueSB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|
|
@@ -5,13 +5,14 @@ import * as React from 'react';
|
|
|
5
5
|
import { firstValueFrom } from 'rxjs';
|
|
6
6
|
import { createRoot } from 'react-dom/client';
|
|
7
7
|
|
|
8
|
-
// declare const Zone;
|
|
9
|
-
// const zone = Zone ? new Zone(Zone.current, { name: "@dotglitch_menu", properties: {} }) : null;
|
|
10
8
|
/**
|
|
11
|
-
* Wrap an
|
|
9
|
+
* Wrap an Angular component inside of a React memo object.
|
|
12
10
|
* Will attempt to bind @Input and @Output properties if provided,
|
|
13
11
|
* and will bind the react arguments directly as @Input properties.
|
|
14
12
|
*
|
|
13
|
+
* Usage: An Angular top-level application with a ReactifyNgComponent react implementation
|
|
14
|
+
* that needs to embed Angular components as children of the react-wrapped component.
|
|
15
|
+
*
|
|
15
16
|
* @experimental
|
|
16
17
|
* @param componentClass Angular component
|
|
17
18
|
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
@@ -20,84 +21,160 @@ import { createRoot } from 'react-dom/client';
|
|
|
20
21
|
* @param _outputs
|
|
21
22
|
* @returns
|
|
22
23
|
*/
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
24
|
+
const ReactifyAngularComponent = ({ component, appRef, injector, ngZone, staticInputs = {}, staticOutputs = {}, preSiblings = [], postSiblings = [], additionalChildren = [], rootElementName = '', containerElementName = '' }) => React.memo((args) => {
|
|
25
|
+
return ngZone.runOutsideAngular(() => {
|
|
26
|
+
const id = Math.random().toString();
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
try {
|
|
29
|
+
const componentInstance = createComponent(component, {
|
|
30
|
+
environmentInjector: appRef.injector,
|
|
31
|
+
elementInjector: injector,
|
|
32
|
+
hostElement: document.getElementById(id)
|
|
33
|
+
});
|
|
34
|
+
appRef.attachView(componentInstance.hostView);
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
// component.hostView = hostView;
|
|
37
|
+
Object.assign(staticInputs, args);
|
|
38
|
+
const { inputs, outputs } = component['ɵcmp'];
|
|
39
|
+
// Returns a list of entries that need to be set
|
|
40
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
41
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
42
|
+
return componentInstance.instance[childKey] != staticInputs[parentKey];
|
|
43
|
+
});
|
|
44
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
45
|
+
if (staticInputs.hasOwnProperty(parentKey))
|
|
46
|
+
componentInstance.instance[childKey] = staticInputs[parentKey];
|
|
47
|
+
});
|
|
48
|
+
const outputSubscriptions = {};
|
|
49
|
+
// Get a list of unregistered outputs
|
|
50
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
51
|
+
return !outputSubscriptions[parentKey];
|
|
52
|
+
});
|
|
53
|
+
// Reverse bind via subscription
|
|
54
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
55
|
+
if (!staticOutputs.hasOwnProperty(parentKey))
|
|
56
|
+
return;
|
|
57
|
+
const target = componentInstance.instance[childKey];
|
|
58
|
+
const outputs = staticOutputs;
|
|
59
|
+
const sub = target.subscribe((...args) => {
|
|
60
|
+
// Run the callback in the provided zone
|
|
61
|
+
ngZone.run(() => {
|
|
62
|
+
outputs[parentKey](...args);
|
|
63
|
+
});
|
|
64
|
+
}); // Subscription
|
|
65
|
+
outputSubscriptions[parentKey] = sub;
|
|
66
|
+
});
|
|
67
|
+
// Wrap the destroy method to safely release the subscriptions
|
|
68
|
+
const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);
|
|
69
|
+
componentInstance.onDestroy = (cb) => {
|
|
70
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
71
|
+
originalDestroy?.(cb);
|
|
72
|
+
};
|
|
73
|
+
componentInstance.changeDetectorRef.detectChanges();
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.error(err);
|
|
77
|
+
}
|
|
78
|
+
}, []);
|
|
79
|
+
const elements = [
|
|
80
|
+
...(preSiblings || []),
|
|
81
|
+
React.createElement(containerElementName || "div", { id }),
|
|
82
|
+
...(postSiblings || []),
|
|
83
|
+
...(additionalChildren || [])
|
|
84
|
+
].filter(e => e);
|
|
85
|
+
return React.createElement(rootElementName || "div", {}, ...elements);
|
|
86
|
+
});
|
|
84
87
|
});
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
// TODO: Remove in major release.
|
|
89
|
+
const ReactifyReactComponent = ReactifyAngularComponent;
|
|
90
|
+
/**
|
|
91
|
+
* Do not use this.
|
|
92
|
+
* @hidden
|
|
93
|
+
* @experimental
|
|
94
|
+
*/
|
|
95
|
+
function ReactifyAngularComponent3(component, ngZone, appRef, injector, props = {}, containerTag = 'div') {
|
|
87
96
|
const ctx = this;
|
|
88
|
-
|
|
97
|
+
console.log("ReactifyAngularComponent3");
|
|
98
|
+
return ngZone.runOutsideAngular(() => {
|
|
89
99
|
// Is there a better way to do this?
|
|
90
100
|
let subscriptions;
|
|
91
101
|
let app;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
let componentInstance;
|
|
103
|
+
React.useEffect(() => {
|
|
104
|
+
return () => {
|
|
105
|
+
// Code to run when the component unmounts
|
|
106
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
107
|
+
// app?.destroy();
|
|
108
|
+
appRef.detachView(componentInstance.hostView);
|
|
109
|
+
};
|
|
110
|
+
}, []);
|
|
111
|
+
return React.createElement(containerTag, {
|
|
112
|
+
ref: async (node) => {
|
|
113
|
+
// Not sure if this ever actually happens, added as a preventative measure
|
|
114
|
+
// to memory leaks.
|
|
115
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
116
|
+
app?.destroy();
|
|
117
|
+
// ngZone.run(async () => {
|
|
118
|
+
// Init an Angular application root & bootstrap it to a DOM element.
|
|
119
|
+
componentInstance = createComponent(component, {
|
|
120
|
+
environmentInjector: appRef.injector,
|
|
121
|
+
elementInjector: injector,
|
|
122
|
+
hostElement: node
|
|
123
|
+
});
|
|
124
|
+
appRef.attachView(componentInstance.hostView);
|
|
125
|
+
// app = await createApplication({ providers });
|
|
126
|
+
// const base = app.bootstrap(component, node);
|
|
127
|
+
// const { instance } = base;
|
|
128
|
+
// Wait for the JS to finish rendering and initing.
|
|
129
|
+
// await firstValueFrom(app.isStable);
|
|
130
|
+
// Now that everything has settled, bind inputs and outputs.
|
|
131
|
+
subscriptions = [];
|
|
132
|
+
Object.entries(props).filter(([k, v]) => {
|
|
133
|
+
// @Outputs are always Event Emitters (I think)
|
|
134
|
+
if (v instanceof EventEmitter) {
|
|
135
|
+
subscriptions.push(componentInstance.instance[k]?.subscribe(evt => props[k].call(ctx, evt)));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
componentInstance.instance[k] = props[k];
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// })
|
|
142
|
+
// app.tick();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Bootstrap an Angular component with `createApplication` and export it under a
|
|
149
|
+
* react Element.
|
|
150
|
+
* Usage: React top-level application embedding an Angular component.
|
|
151
|
+
*/
|
|
152
|
+
function ReactifyStandaloneAngularComponent(component, props = {}, providers = [], containerTag = 'div') {
|
|
153
|
+
const ctx = this;
|
|
154
|
+
// Is there a better way to do this?
|
|
155
|
+
let subscriptions;
|
|
156
|
+
let app;
|
|
157
|
+
React.useEffect(() => {
|
|
158
|
+
return () => {
|
|
159
|
+
// Code to run when the component unmounts
|
|
160
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
161
|
+
app?.destroy();
|
|
162
|
+
};
|
|
163
|
+
}, []);
|
|
164
|
+
return React.createElement(containerTag, { ref: async (node) => {
|
|
165
|
+
// Not sure if this ever actually happens, added as a preventative measure
|
|
166
|
+
// to memory leaks.
|
|
167
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
168
|
+
app?.destroy();
|
|
169
|
+
// Init an Angular application root & bootstrap it to a DOM element.
|
|
170
|
+
app = await createApplication({ providers });
|
|
171
|
+
const base = app.bootstrap(component, node);
|
|
96
172
|
const { instance } = base;
|
|
173
|
+
// Wait for the JS to finish rendering and initing.
|
|
97
174
|
await firstValueFrom(app.isStable);
|
|
98
|
-
//
|
|
175
|
+
// Now that everything has settled, bind inputs and outputs.
|
|
99
176
|
subscriptions = [];
|
|
100
|
-
Object.entries(
|
|
177
|
+
Object.entries(props).filter(([k, v]) => {
|
|
101
178
|
// @Outputs are always Event Emitters (I think)
|
|
102
179
|
if (v instanceof EventEmitter) {
|
|
103
180
|
subscriptions.push(instance[k]?.subscribe(evt => props[k].call(ctx, evt)));
|
|
@@ -106,16 +183,9 @@ const ReactifyAngularComponent2 = (component, props) => {
|
|
|
106
183
|
instance[k] = props[k];
|
|
107
184
|
}
|
|
108
185
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
subscriptions?.forEach(s => s?.unsubscribe());
|
|
113
|
-
app?.destroy();
|
|
114
|
-
};
|
|
115
|
-
}, []); // Empty dependency array ensures this effect runs only once on mount and cleanup on unmount
|
|
116
|
-
const obj = {};
|
|
117
|
-
return React.createElement("div");
|
|
118
|
-
};
|
|
186
|
+
base.changeDetectorRef.detectChanges();
|
|
187
|
+
} });
|
|
188
|
+
}
|
|
119
189
|
|
|
120
190
|
/**
|
|
121
191
|
* Extend this component to automatically generate
|
|
@@ -132,7 +202,7 @@ class ReactifyNgComponent {
|
|
|
132
202
|
}
|
|
133
203
|
ngOnInit() {
|
|
134
204
|
if (!this.ngReactComponent) {
|
|
135
|
-
throw new Error("
|
|
205
|
+
throw new Error("ReactifyNgComponent cannot be inherited without a provided ngReactComponent!");
|
|
136
206
|
}
|
|
137
207
|
}
|
|
138
208
|
ngOnChanges(changes) {
|
|
@@ -192,5 +262,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
192
262
|
* Generated bundle index. Do not edit.
|
|
193
263
|
*/
|
|
194
264
|
|
|
195
|
-
export {
|
|
265
|
+
export { ReactifyAngularComponent, ReactifyAngularComponent3, ReactifyNgComponent, ReactifyReactComponent, ReactifyStandaloneAngularComponent };
|
|
196
266
|
//# sourceMappingURL=ngx-reactify.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-reactify.mjs","sources":["../../../src/util/angular-to-react.ts","../../../src/util/react-to-angular.ts","../../../src/ngx-reactify.ts"],"sourcesContent":["import { Type, ApplicationRef, Injector, NgZone, createComponent, EventEmitter } from '@angular/core';\nimport { createApplication } from '@angular/platform-browser';\nimport * as React from 'react';\nimport { firstValueFrom, Subscription } from 'rxjs';\n\n\n// declare const Zone;\n// const zone = Zone ? new Zone(Zone.current, { name: \"@dotglitch_menu\", properties: {} }) : null;\n\n/**\n * Wrap an angular component inside of a React memo object.\n * Will attempt to bind @Input and @Output properties if provided,\n * and will bind the react arguments directly as @Input properties.\n *\n * @experimental\n * @param componentClass Angular component\n * @param envInjector An `EnvironmentInjector` instance to be used for the component\n * @param injector An `ElementInjector` instance\n * @param _inputs\n * @param _outputs\n * @returns\n */\nexport const ReactifyReactComponent = ({\n component,\n appRef,\n injector,\n ngZone,\n staticInputs,\n staticOutputs,\n preSiblings,\n postSiblings,\n additionalChildren,\n rootElementName,\n containerElementName\n}: {\n component: Type<any>,\n appRef: Omit<ApplicationRef, '_runningTick'>,\n injector: Injector,\n ngZone: NgZone,\n staticInputs?: { [key: string]: any; },\n staticOutputs?: { [key: string]: Function; },\n preSiblings?: React.ReactNode[],\n postSiblings?: React.ReactNode[],\n additionalChildren?: React.ReactNode[],\n rootElementName?: Parameters<typeof React.createElement>[0],\n containerElementName?: string;\n}) => React.memo((args) => {\n\n const id = Math.random().toString();\n React.useEffect(() => {\n try {\n\n const componentInstance = createComponent(component, {\n environmentInjector: appRef.injector,\n elementInjector: injector,\n hostElement: document.getElementById(id)\n });\n\n appRef.attachView(componentInstance.hostView);\n // @ts-ignore\n // component.hostView = hostView;\n\n Object.assign(staticInputs, args);\n\n const { inputs, outputs } = component['ɵcmp'];\n\n // Returns a list of entries that need to be set\n // This makes it so that unnecessary setters are not invoked.\n const updated = Object.entries(inputs).filter(([parentKey, childKey]: [string, string]) => {\n return componentInstance.instance[childKey] != staticInputs[parentKey];\n });\n\n updated.forEach(([parentKey, childKey]: [string, string]) => {\n if (staticInputs.hasOwnProperty(parentKey))\n componentInstance.instance[childKey] = staticInputs[parentKey];\n });\n\n const outputSubscriptions: { [key: string]: Subscription; } = {};\n // Get a list of unregistered outputs\n const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]: [string, string]) => {\n return !outputSubscriptions[parentKey];\n });\n\n // Reverse bind via subscription\n newOutputs.forEach(([parentKey, childKey]: [string, string]) => {\n if (!staticOutputs.hasOwnProperty(parentKey)) return;\n\n const target: EventEmitter<unknown> = componentInstance.instance[childKey];\n const outputs = staticOutputs;\n\n const sub = target.subscribe((...args) => {\n // Run the callback in the provided zone\n ngZone.run(() => {\n outputs[parentKey](...args);\n });\n }); // Subscription\n\n outputSubscriptions[parentKey] = sub;\n });\n\n // Wrap the destroy method to safely release the subscriptions\n const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);\n componentInstance.onDestroy = (cb) => {\n Object.values(outputSubscriptions).forEach(s => s.unsubscribe());\n originalDestroy?.(cb);\n };\n\n componentInstance.changeDetectorRef.detectChanges();\n }\n catch (err) {\n console.error(err);\n }\n }, []);\n\n const elements = [\n ...(preSiblings || []),\n React.createElement(containerElementName || \"div\", { id }),\n ...(postSiblings || []),\n ...(additionalChildren || [])\n ].filter(e => e);\n\n return React.createElement(rootElementName || \"div\", {}, ...elements);\n});\n\n\nexport const ReactifyAngularComponent2 = (\n component: Type<any>,\n props: any\n) => {\n const inputRef = React.useRef(null);\n const ctx = this;\n\n React.useEffect(() => {\n // Is there a better way to do this?\n let subscriptions: Subscription[];\n let app: ApplicationRef;\n (async () => {\n // Code to run when the component mounts\n app = await createApplication({ providers: [] });\n const base = app.bootstrap(component, inputRef.current);\n const { instance } = base;\n\n await firstValueFrom(app.isStable);\n\n // App has now bootstrapped fully.\n subscriptions = [];\n Object.entries(instance).filter(([k, v]) => {\n // @Outputs are always Event Emitters (I think)\n if (v instanceof EventEmitter) {\n subscriptions.push(\n instance[k]?.subscribe(evt => props[k].call(ctx, evt))\n );\n }\n else {\n instance[k] = props[k];\n }\n })\n })()\n\n return () => {\n // Code to run when the component unmounts\n subscriptions?.forEach(s => s?.unsubscribe());\n app?.destroy();\n };\n }, []); // Empty dependency array ensures this effect runs only once on mount and cleanup on unmount\n\n const obj = {};\n\n return React.createElement(\"div\")\n}\n","import { AfterViewInit, ApplicationRef, Component, ComponentFactoryResolver, EnvironmentInjector, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, SimpleChanges, Type, ViewContainerRef, ViewRef, createComponent } from '@angular/core';\nimport * as React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\n\n/**\n * Extend this component to automatically generate\n * bindings to a React component.\n *\n * ! You _must_ override the property `ngReactComponent`\n * Failure to do so will result in errors\n * `override readonly ngReactComponent = ReactFlowWrappableComponent;`\n */\n@Component({\n selector: 'app-react-magic-wrapper',\n template: ``,\n standalone: true\n})\nexport class ReactifyNgComponent implements OnChanges, OnDestroy, AfterViewInit {\n\n /**\n * The react component to be wrapped.\n * ! Must be overridden for this wrapper to work\n */\n ngReactComponent: React.FunctionComponent<any> | React.ComponentClass<any>;\n\n private _root: Root;\n\n constructor(\n private readonly ngContainer: ViewContainerRef,\n private readonly ngZone: NgZone\n ) {\n }\n\n ngOnInit() {\n if (!this.ngReactComponent) {\n throw new Error(\"ReactMagicWrapperComponent cannot start without a provided ngReactComponent!\");\n }\n }\n\n ngOnChanges(changes?: SimpleChanges): void {\n this._render();\n }\n\n ngAfterViewInit() {\n this._render();\n }\n\n ngOnDestroy() {\n this._root?.unmount();\n }\n\n private _render() {\n if (!this.ngReactComponent) {\n console.log(\"Render no component. May be context issue\")\n return\n };\n\n this.ngZone.runOutsideAngular(() => {\n try {\n this._root ??= createRoot(this.ngContainer.element.nativeElement);\n\n // List all keys that do not start with `_` nor `ng`\n const keys = Object.keys(this).filter(k => !/^(?:_|ng)/.test(k));\n\n // Get all property keys from the class\n const propKeys = keys.filter(k => !k.startsWith(\"on\"));\n // Get all event handler keys from the class\n const evtKeys = keys.filter(k => k.startsWith(\"on\"));\n\n const props = {};\n // Project all key properties onto `props`\n propKeys.forEach(k => props[k] = this[k]);\n\n // Attempt to ensure no zone is lost during the event emitter fires\n this.ngZone.runGuarded(() => {\n // Bind all event handlers.\n // ! important Angular uses EventEmitter, React uses\n // a different method of event binding\n evtKeys.forEach(k => props[k] = (...args) => this[k].next(args));\n })\n\n this._root.render(React.createElement(this.ngReactComponent, { props: props as any }));\n }\n catch(err) {\n console.error(err)\n }\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-reactify.mjs","sources":["../../../src/util/angular-to-react.ts","../../../src/util/react-to-angular.ts","../../../src/ngx-reactify.ts"],"sourcesContent":["import { Type, ApplicationRef, Injector, NgZone, createComponent, EventEmitter, Provider, EnvironmentProviders, ComponentRef } from '@angular/core';\nimport { createApplication } from '@angular/platform-browser';\nimport * as React from 'react';\nimport { firstValueFrom, Subscription } from 'rxjs';\n\n\n/**\n * Wrap an Angular component inside of a React memo object.\n * Will attempt to bind @Input and @Output properties if provided,\n * and will bind the react arguments directly as @Input properties.\n *\n * Usage: An Angular top-level application with a ReactifyNgComponent react implementation\n * that needs to embed Angular components as children of the react-wrapped component.\n *\n * @experimental\n * @param componentClass Angular component\n * @param envInjector An `EnvironmentInjector` instance to be used for the component\n * @param injector An `ElementInjector` instance\n * @param _inputs\n * @param _outputs\n * @returns\n */\nexport const ReactifyAngularComponent = ({\n component,\n appRef,\n injector,\n ngZone,\n staticInputs = {},\n staticOutputs = {},\n preSiblings = [],\n postSiblings = [],\n additionalChildren = [],\n rootElementName = '',\n containerElementName = ''\n}: {\n component: Type<any>,\n appRef: Omit<ApplicationRef, '_runningTick'>,\n injector: Injector,\n ngZone: NgZone,\n staticInputs?: { [key: string]: any; },\n staticOutputs?: { [key: string]: Function; },\n preSiblings?: React.ReactNode[],\n postSiblings?: React.ReactNode[],\n additionalChildren?: React.ReactNode[],\n rootElementName?: Parameters<typeof React.createElement>[0],\n containerElementName?: string;\n}) => React.memo((args) => {\n\n return ngZone.runOutsideAngular(() => {\n const id = Math.random().toString();\n React.useEffect(() => {\n try {\n\n const componentInstance = createComponent(component, {\n environmentInjector: appRef.injector,\n elementInjector: injector,\n hostElement: document.getElementById(id)\n });\n\n appRef.attachView(componentInstance.hostView);\n // @ts-ignore\n // component.hostView = hostView;\n\n Object.assign(staticInputs, args);\n\n const { inputs, outputs } = component['ɵcmp'];\n\n // Returns a list of entries that need to be set\n // This makes it so that unnecessary setters are not invoked.\n const updated = Object.entries(inputs).filter(([parentKey, childKey]: [string, string]) => {\n return componentInstance.instance[childKey] != staticInputs[parentKey];\n });\n\n updated.forEach(([parentKey, childKey]: [string, string]) => {\n if (staticInputs.hasOwnProperty(parentKey))\n componentInstance.instance[childKey] = staticInputs[parentKey];\n });\n\n const outputSubscriptions: { [key: string]: Subscription; } = {};\n // Get a list of unregistered outputs\n const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]: [string, string]) => {\n return !outputSubscriptions[parentKey];\n });\n\n // Reverse bind via subscription\n newOutputs.forEach(([parentKey, childKey]: [string, string]) => {\n if (!staticOutputs.hasOwnProperty(parentKey)) return;\n\n const target: EventEmitter<unknown> = componentInstance.instance[childKey];\n const outputs = staticOutputs;\n\n const sub = target.subscribe((...args) => {\n // Run the callback in the provided zone\n ngZone.run(() => {\n outputs[parentKey](...args);\n });\n }); // Subscription\n\n outputSubscriptions[parentKey] = sub;\n });\n\n // Wrap the destroy method to safely release the subscriptions\n const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);\n componentInstance.onDestroy = (cb) => {\n Object.values(outputSubscriptions).forEach(s => s.unsubscribe());\n originalDestroy?.(cb);\n };\n\n componentInstance.changeDetectorRef.detectChanges();\n }\n catch (err) {\n console.error(err);\n }\n }, []);\n\n const elements = [\n ...(preSiblings || []),\n React.createElement(containerElementName || \"div\", { id }),\n ...(postSiblings || []),\n ...(additionalChildren || [])\n ].filter(e => e);\n\n return React.createElement(rootElementName || \"div\", {}, ...elements);\n })\n});\n// TODO: Remove in major release.\nexport const ReactifyReactComponent = ReactifyAngularComponent;\n\n/**\n * Do not use this.\n * @hidden\n * @experimental\n */\nexport function ReactifyAngularComponent3(\n component: Type<any>,\n ngZone: NgZone,\n appRef: Omit<ApplicationRef, '_runningTick'>,\n injector: Injector,\n props: any = {},\n containerTag: string = 'div'\n) {\n const ctx = this;\n console.log(\"ReactifyAngularComponent3\")\n\n return ngZone.runOutsideAngular(() => {\n // Is there a better way to do this?\n let subscriptions: Subscription[];\n let app: ApplicationRef;\n let componentInstance: ComponentRef<any>;\n\n React.useEffect(() => {\n return () => {\n // Code to run when the component unmounts\n subscriptions?.forEach(s => s?.unsubscribe());\n // app?.destroy();\n\n appRef.detachView(componentInstance.hostView);\n };\n }, []);\n\n return React.createElement(containerTag, {\n ref: async (node) => {\n // Not sure if this ever actually happens, added as a preventative measure\n // to memory leaks.\n subscriptions?.forEach(s => s?.unsubscribe());\n app?.destroy();\n\n\n // ngZone.run(async () => {\n // Init an Angular application root & bootstrap it to a DOM element.\n\n componentInstance = createComponent(component, {\n environmentInjector: appRef.injector,\n elementInjector: injector,\n hostElement: node\n });\n\n appRef.attachView(componentInstance.hostView);\n // app = await createApplication({ providers });\n // const base = app.bootstrap(component, node);\n // const { instance } = base;\n\n\n // Wait for the JS to finish rendering and initing.\n // await firstValueFrom(app.isStable);\n\n // Now that everything has settled, bind inputs and outputs.\n subscriptions = [];\n Object.entries(props).filter(([k, v]) => {\n // @Outputs are always Event Emitters (I think)\n if (v instanceof EventEmitter) {\n subscriptions.push(\n componentInstance.instance[k]?.subscribe(evt => props[k].call(ctx, evt))\n );\n }\n else {\n componentInstance.instance[k] = props[k];\n }\n });\n // })\n\n // app.tick();\n }\n });\n });\n}\n\n\n/**\n * Bootstrap an Angular component with `createApplication` and export it under a\n * react Element.\n * Usage: React top-level application embedding an Angular component.\n */\nexport function ReactifyStandaloneAngularComponent(\n component: Type<any>,\n props: any = {},\n providers: (Provider | EnvironmentProviders)[] = [],\n containerTag: string = 'div'\n) {\n const ctx = this;\n\n // Is there a better way to do this?\n let subscriptions: Subscription[];\n let app: ApplicationRef;\n\n React.useEffect(() => {\n return () => {\n // Code to run when the component unmounts\n subscriptions?.forEach(s => s?.unsubscribe());\n app?.destroy();\n };\n }, []);\n\n return React.createElement(containerTag, { ref: async (node) => {\n // Not sure if this ever actually happens, added as a preventative measure\n // to memory leaks.\n subscriptions?.forEach(s => s?.unsubscribe());\n app?.destroy();\n\n // Init an Angular application root & bootstrap it to a DOM element.\n app = await createApplication({ providers });\n const base = app.bootstrap(component, node);\n const { instance } = base;\n\n\n // Wait for the JS to finish rendering and initing.\n await firstValueFrom(app.isStable);\n\n // Now that everything has settled, bind inputs and outputs.\n subscriptions = [];\n Object.entries(props).filter(([k, v]) => {\n // @Outputs are always Event Emitters (I think)\n if (v instanceof EventEmitter) {\n subscriptions.push(\n instance[k]?.subscribe(evt => props[k].call(ctx, evt))\n );\n }\n else {\n instance[k] = props[k];\n }\n });\n\n base.changeDetectorRef.detectChanges();\n } });\n}\n","import { AfterViewInit, Component, NgZone, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport * as React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\n\n/**\n * Extend this component to automatically generate\n * bindings to a React component.\n *\n * ! You _must_ override the property `ngReactComponent`\n * Failure to do so will result in errors\n * `override readonly ngReactComponent = ReactFlowWrappableComponent;`\n */\n@Component({\n selector: 'app-react-magic-wrapper',\n template: ``,\n standalone: true\n})\nexport class ReactifyNgComponent implements OnChanges, OnDestroy, AfterViewInit {\n\n /**\n * The react component to be wrapped.\n * ! Must be overridden for this wrapper to work\n */\n ngReactComponent: React.FunctionComponent<any> | React.ComponentClass<any>;\n\n private _root: Root;\n\n constructor(\n protected readonly ngContainer: ViewContainerRef,\n protected readonly ngZone: NgZone\n ) {\n }\n\n ngOnInit() {\n if (!this.ngReactComponent) {\n throw new Error(\"ReactifyNgComponent cannot be inherited without a provided ngReactComponent!\");\n }\n }\n\n ngOnChanges(changes?: SimpleChanges): void {\n this._render();\n }\n\n ngAfterViewInit() {\n this._render();\n }\n\n ngOnDestroy() {\n this._root?.unmount();\n }\n\n private _render() {\n if (!this.ngReactComponent) {\n console.log(\"Render no component. May be context issue\")\n return\n };\n\n this.ngZone.runOutsideAngular(() => {\n try {\n this._root ??= createRoot(this.ngContainer.element.nativeElement);\n\n // List all keys that do not start with `_` nor `ng`\n const keys = Object.keys(this).filter(k => !/^(?:_|ng)/.test(k));\n\n // Get all property keys from the class\n const propKeys = keys.filter(k => !k.startsWith(\"on\"));\n // Get all event handler keys from the class\n const evtKeys = keys.filter(k => k.startsWith(\"on\"));\n\n const props = {};\n // Project all key properties onto `props`\n propKeys.forEach(k => props[k] = this[k]);\n\n // Attempt to ensure no zone is lost during the event emitter fires\n this.ngZone.runGuarded(() => {\n // Bind all event handlers.\n // ! important Angular uses EventEmitter, React uses\n // a different method of event binding\n evtKeys.forEach(k => props[k] = (...args) => this[k].next(args));\n })\n\n this._root.render(\n React.createElement(this.ngReactComponent, { props: props as any })\n );\n }\n catch(err) {\n console.error(err)\n }\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { Type, ApplicationRef, Injector, NgZone } from '@angular/core';
|
|
1
|
+
import { Type, ApplicationRef, Injector, NgZone, Provider, EnvironmentProviders } from '@angular/core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
/**
|
|
4
|
-
* Wrap an
|
|
4
|
+
* Wrap an Angular component inside of a React memo object.
|
|
5
5
|
* Will attempt to bind @Input and @Output properties if provided,
|
|
6
6
|
* and will bind the react arguments directly as @Input properties.
|
|
7
7
|
*
|
|
8
|
+
* Usage: An Angular top-level application with a ReactifyNgComponent react implementation
|
|
9
|
+
* that needs to embed Angular components as children of the react-wrapped component.
|
|
10
|
+
*
|
|
8
11
|
* @experimental
|
|
9
12
|
* @param componentClass Angular component
|
|
10
13
|
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
@@ -13,6 +16,23 @@ import * as React from 'react';
|
|
|
13
16
|
* @param _outputs
|
|
14
17
|
* @returns
|
|
15
18
|
*/
|
|
19
|
+
export declare const ReactifyAngularComponent: ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, preSiblings, postSiblings, additionalChildren, rootElementName, containerElementName }: {
|
|
20
|
+
component: Type<any>;
|
|
21
|
+
appRef: Omit<ApplicationRef, '_runningTick'>;
|
|
22
|
+
injector: Injector;
|
|
23
|
+
ngZone: NgZone;
|
|
24
|
+
staticInputs?: {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
};
|
|
27
|
+
staticOutputs?: {
|
|
28
|
+
[key: string]: Function;
|
|
29
|
+
};
|
|
30
|
+
preSiblings?: React.ReactNode[];
|
|
31
|
+
postSiblings?: React.ReactNode[];
|
|
32
|
+
additionalChildren?: React.ReactNode[];
|
|
33
|
+
rootElementName?: Parameters<typeof React.createElement>[0];
|
|
34
|
+
containerElementName?: string;
|
|
35
|
+
}) => React.NamedExoticComponent<object>;
|
|
16
36
|
export declare const ReactifyReactComponent: ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, preSiblings, postSiblings, additionalChildren, rootElementName, containerElementName }: {
|
|
17
37
|
component: Type<any>;
|
|
18
38
|
appRef: Omit<ApplicationRef, '_runningTick'>;
|
|
@@ -30,5 +50,16 @@ export declare const ReactifyReactComponent: ({ component, appRef, injector, ngZ
|
|
|
30
50
|
rootElementName?: Parameters<typeof React.createElement>[0];
|
|
31
51
|
containerElementName?: string;
|
|
32
52
|
}) => React.NamedExoticComponent<object>;
|
|
33
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Do not use this.
|
|
55
|
+
* @hidden
|
|
56
|
+
* @experimental
|
|
57
|
+
*/
|
|
58
|
+
export declare function ReactifyAngularComponent3(component: Type<any>, ngZone: NgZone, appRef: Omit<ApplicationRef, '_runningTick'>, injector: Injector, props?: any, containerTag?: string): React.DOMElement<React.DOMAttributes<Element>, Element>;
|
|
59
|
+
/**
|
|
60
|
+
* Bootstrap an Angular component with `createApplication` and export it under a
|
|
61
|
+
* react Element.
|
|
62
|
+
* Usage: React top-level application embedding an Angular component.
|
|
63
|
+
*/
|
|
64
|
+
export declare function ReactifyStandaloneAngularComponent(component: Type<any>, props?: any, providers?: (Provider | EnvironmentProviders)[], containerTag?: string): React.DOMElement<React.DOMAttributes<Element>, Element>;
|
|
34
65
|
//# sourceMappingURL=angular-to-react.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-to-react.d.ts","sourceRoot":"","sources":["../../../src/util/angular-to-react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAiC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"angular-to-react.d.ts","sourceRoot":"","sources":["../../../src/util/angular-to-react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAiC,QAAQ,EAAE,oBAAoB,EAAgB,MAAM,eAAe,CAAC;AAEpJ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB;eAatB,KAAK,GAAG,CAAC;YACZ,KAAK,cAAc,EAAE,cAAc,CAAC;cAClC,QAAQ;YACV,MAAM;;;;;;;kBAGA,MAAM,SAAS,EAAE;mBAChB,MAAM,SAAS,EAAE;yBACX,MAAM,SAAS,EAAE;sBACpB,WAAW,OAAO,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;2BACpC,MAAM;wCA+E/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;eA3FpB,KAAK,GAAG,CAAC;YACZ,KAAK,cAAc,EAAE,cAAc,CAAC;cAClC,QAAQ;YACV,MAAM;;;;;;;kBAGA,MAAM,SAAS,EAAE;mBAChB,MAAM,SAAS,EAAE;yBACX,MAAM,SAAS,EAAE;sBACpB,WAAW,OAAO,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;2BACpC,MAAM;wCAiF6B,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAC5C,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,GAAQ,EACf,YAAY,GAAE,MAAc,2DAkE/B;AAGD;;;;GAIG;AACH,wBAAgB,kCAAkC,CAC9C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EACpB,KAAK,GAAE,GAAQ,EACf,SAAS,GAAE,CAAC,QAAQ,GAAG,oBAAoB,CAAC,EAAO,EACnD,YAAY,GAAE,MAAc,2DA+C/B"}
|
|
@@ -10,8 +10,8 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
* `override readonly ngReactComponent = ReactFlowWrappableComponent;`
|
|
11
11
|
*/
|
|
12
12
|
export declare class ReactifyNgComponent implements OnChanges, OnDestroy, AfterViewInit {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
protected readonly ngContainer: ViewContainerRef;
|
|
14
|
+
protected readonly ngZone: NgZone;
|
|
15
15
|
/**
|
|
16
16
|
* The react component to be wrapped.
|
|
17
17
|
* ! Must be overridden for this wrapper to work
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-to-angular.d.ts","sourceRoot":"","sources":["../../../src/util/react-to-angular.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"react-to-angular.d.ts","sourceRoot":"","sources":["../../../src/util/react-to-angular.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;;AAI/B;;;;;;;GAOG;AACH,qBAKa,mBAAoB,YAAW,SAAS,EAAE,SAAS,EAAE,aAAa;IAWvE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAVrC;;;OAGG;IACH,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAE3E,OAAO,CAAC,KAAK,CAAO;gBAGG,WAAW,EAAE,gBAAgB,EAC7B,MAAM,EAAE,MAAM;IAIrC,QAAQ;IAMR,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAI1C,eAAe;IAIf,WAAW;IAIX,OAAO,CAAC,OAAO;yCAlCN,mBAAmB;2CAAnB,mBAAmB;CAyE/B"}
|