@libs-ui/services-dynamic-component 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # dynamic-component
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,17 @@
1
+ import { ComponentRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class LibsUiDynamicComponentService {
4
+ private elementLayoutContent;
5
+ private elementBody;
6
+ private mapStylesToParentDocument;
7
+ private appRef;
8
+ resolveComponentFactory(component: any): ComponentRef<any>;
9
+ addToBody(componentRef: any, isAddParentDocument?: boolean): string;
10
+ addToElement(componentRef: any, elementAdd: any): any;
11
+ addToIdAttributeElement(componentRef: any, id: string): HTMLElement | undefined;
12
+ remove(componentRef: any, frameId?: string, ignoreDestroyComponent?: boolean): void;
13
+ private updateStyleToParentDocument;
14
+ private removeStyleToParentDocument;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiDynamicComponentService, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<LibsUiDynamicComponentService>;
17
+ }
@@ -0,0 +1,97 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { ApplicationRef, Injectable, createComponent, inject } from '@angular/core';
3
+ import { uuid } from '@libs-ui/utils';
4
+ import * as i0 from "@angular/core";
5
+ export class LibsUiDynamicComponentService {
6
+ elementLayoutContent;
7
+ elementBody;
8
+ mapStylesToParentDocument = new Map();
9
+ appRef = inject(ApplicationRef);
10
+ resolveComponentFactory(component) {
11
+ return createComponent(component, { environmentInjector: this.appRef.injector });
12
+ }
13
+ addToBody(componentRef, isAddParentDocument) {
14
+ if (!componentRef || !componentRef.hostView) {
15
+ return '';
16
+ }
17
+ this.appRef.attachView(componentRef.hostView);
18
+ const domElem = componentRef.hostView.rootNodes[0];
19
+ if (isAddParentDocument) {
20
+ window.parent.document.body.appendChild(domElem);
21
+ return this.updateStyleToParentDocument();
22
+ }
23
+ if (!this.elementBody) {
24
+ this.elementBody = document.body;
25
+ }
26
+ this.elementBody.appendChild(domElem);
27
+ return '';
28
+ }
29
+ addToElement(componentRef, elementAdd) {
30
+ if (!componentRef || !componentRef.hostView || !elementAdd) {
31
+ return;
32
+ }
33
+ this.appRef.attachView(componentRef.hostView);
34
+ const domElem = componentRef.hostView.rootNodes[0];
35
+ return elementAdd.appendChild(domElem);
36
+ }
37
+ addToIdAttributeElement(componentRef, id) {
38
+ if (!this.elementLayoutContent) {
39
+ this.elementLayoutContent = document.getElementById(id);
40
+ }
41
+ if (!componentRef || !componentRef.hostView) {
42
+ return;
43
+ }
44
+ this.appRef.attachView(componentRef.hostView);
45
+ const domElem = componentRef.hostView.rootNodes[0];
46
+ return this.elementLayoutContent?.appendChild(domElem);
47
+ }
48
+ remove(componentRef, frameId = '', ignoreDestroyComponent) {
49
+ if (!componentRef) {
50
+ return;
51
+ }
52
+ this.removeStyleToParentDocument(frameId);
53
+ if (componentRef.hostView) {
54
+ this.appRef.detachView(componentRef.hostView);
55
+ }
56
+ if (!ignoreDestroyComponent && componentRef.destroy) {
57
+ componentRef.destroy();
58
+ }
59
+ }
60
+ updateStyleToParentDocument() {
61
+ const frameId = uuid();
62
+ const documentParent = window.parent.document;
63
+ if (documentParent && !this.mapStylesToParentDocument.has(frameId)) {
64
+ const styleTags = new Array();
65
+ Array.from(document.head.querySelectorAll("style")).forEach(styleTag => {
66
+ const cloneStyleTag = styleTag.cloneNode(true);
67
+ styleTags.push(cloneStyleTag);
68
+ documentParent?.head.appendChild(cloneStyleTag);
69
+ });
70
+ this.mapStylesToParentDocument.set(frameId, styleTags);
71
+ }
72
+ return frameId;
73
+ }
74
+ removeStyleToParentDocument(frameId) {
75
+ if (!frameId) {
76
+ return;
77
+ }
78
+ const styleTagsPopup = this.mapStylesToParentDocument.get(frameId);
79
+ const documentParent = window.parent.document;
80
+ if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {
81
+ return;
82
+ }
83
+ styleTagsPopup.forEach(styleTag => {
84
+ documentParent?.head.removeChild(styleTag);
85
+ });
86
+ this.mapStylesToParentDocument.delete(frameId);
87
+ }
88
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
89
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, providedIn: 'root' });
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, decorators: [{
92
+ type: Injectable,
93
+ args: [{
94
+ providedIn: 'root'
95
+ }]
96
+ }] });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZHluYW1pYy1jb21wb25lbnQvc3JjL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQWlDLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLdEMsTUFBTSxPQUFPLDZCQUE2QjtJQUNoQyxvQkFBb0IsQ0FBc0I7SUFDMUMsV0FBVyxDQUFzQjtJQUNqQyx5QkFBeUIsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoRSxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWpDLHVCQUF1QixDQUFDLFNBQWM7UUFDM0MsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTSxTQUFTLENBQUMsWUFBaUIsRUFBRSxtQkFBNkI7UUFDL0QsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUksWUFBWSxDQUFDLFFBQWlDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUU1RixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdB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YSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE9BQWU7UUFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRTlDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakUsT0FBTztRQUNULENBQUM7UUFDRCxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO3dHQXBHVSw2QkFBNkI7NEdBQTdCLDZCQUE2QixjQUg1QixNQUFNOzs0RkFHUCw2QkFBNkI7a0JBSnpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZWYsIENvbXBvbmVudFJlZiwgRW1iZWRkZWRWaWV3UmVmLCBJbmplY3RhYmxlLCBjcmVhdGVDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2Uge1xuICBwcml2YXRlIGVsZW1lbnRMYXlvdXRDb250ZW50ITogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcml2YXRlIGVsZW1lbnRCb2R5ITogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcml2YXRlIG1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQ6IE1hcDxzdHJpbmcsIEFycmF5PE5vZGU+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuXG4gIHB1YmxpYyByZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQ6IGFueSk6IENvbXBvbmVudFJlZjxhbnk+IHtcbiAgICByZXR1cm4gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcFJlZi5pbmplY3RvciB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0JvZHkoY29tcG9uZW50UmVmOiBhbnksIGlzQWRkUGFyZW50RG9jdW1lbnQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbXBvbmVudFJlZiB8fCAhY29tcG9uZW50UmVmLmhvc3RWaWV3KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoaXNBZGRQYXJlbnREb2N1bWVudCkge1xuICAgICAgd2luZG93LnBhcmVudC5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTdHlsZVRvUGFyZW50RG9jdW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRCb2R5KSB7XG4gICAgICB0aGlzLmVsZW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50Qm9keS5hcHBlbmRDaGlsZChkb21FbGVtKTtcblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0VsZW1lbnQoY29tcG9uZW50UmVmOiBhbnksIGVsZW1lbnRBZGQ6IGFueSkge1xuICAgIGlmICghY29tcG9uZW50UmVmIHx8ICFjb21wb25lbnRSZWYuaG9zdFZpZXcgfHwgIWVsZW1lbnRBZGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICByZXR1cm4gZWxlbWVudEFkZC5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0lkQXR0cmlidXRlRWxlbWVudChjb21wb25lbnRSZWY6IGFueSwgaWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5lbGVtZW50TGF5b3V0Q29udGVudCkge1xuICAgICAgdGhpcy5lbGVtZW50TGF5b3V0Q29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICB9XG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIWNvbXBvbmVudFJlZi5ob3N0Vmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRMYXlvdXRDb250ZW50Py5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmUoY29tcG9uZW50UmVmOiBhbnksIGZyYW1lSWQgPSAnJywgaWdub3JlRGVzdHJveUNvbXBvbmVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIWNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN0eWxlVG9QYXJlbnREb2N1bWVudChmcmFtZUlkKTtcbiAgICBpZiAoY29tcG9uZW50UmVmLmhvc3RWaWV3KSB7XG4gICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgfVxuICAgIGlmICghaWdub3JlRGVzdHJveUNvbXBvbmVudCAmJiBjb21wb25lbnRSZWYuZGVzdHJveSkge1xuICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0eWxlVG9QYXJlbnREb2N1bWVudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZyYW1lSWQgPSB1dWlkKCk7XG4gICAgY29uc3QgZG9jdW1lbnRQYXJlbnQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50O1xuXG4gICAgaWYgKGRvY3VtZW50UGFyZW50ICYmICF0aGlzLm1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQuaGFzKGZyYW1lSWQpKSB7XG4gICAgICBjb25zdCBzdHlsZVRhZ3MgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVwiKSkuZm9yRWFjaChzdHlsZVRhZyA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lU3R5bGVUYWcgPSBzdHlsZVRhZy5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgICAgc3R5bGVUYWdzLnB1c2goY2xvbmVTdHlsZVRhZyk7XG4gICAgICAgIGRvY3VtZW50UGFyZW50Py5oZWFkLmFwcGVuZENoaWxkKGNsb25lU3R5bGVUYWcpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQuc2V0KGZyYW1lSWQsIHN0eWxlVGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lSWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVN0eWxlVG9QYXJlbnREb2N1bWVudChmcmFtZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZyYW1lSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVUYWdzUG9wdXAgPSB0aGlzLm1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQuZ2V0KGZyYW1lSWQpO1xuICAgIGNvbnN0IGRvY3VtZW50UGFyZW50ID0gd2luZG93LnBhcmVudC5kb2N1bWVudDtcblxuICAgIGlmICghc3R5bGVUYWdzUG9wdXAgfHwgIXN0eWxlVGFnc1BvcHVwLmxlbmd0aCB8fCAhZG9jdW1lbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3R5bGVUYWdzUG9wdXAuZm9yRWFjaChzdHlsZVRhZyA9PiB7XG4gICAgICBkb2N1bWVudFBhcmVudD8uaGVhZC5yZW1vdmVDaGlsZChzdHlsZVRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXBTdHlsZXNUb1BhcmVudERvY3VtZW50LmRlbGV0ZShmcmFtZUlkKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './dynamic-component.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2R5bmFtaWMtY29tcG9uZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJzsiXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZHluYW1pYy1jb21wb25lbnQvc3JjL2xpYnMtdWktc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,104 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ApplicationRef, createComponent, Injectable } from '@angular/core';
3
+ import { uuid } from '@libs-ui/utils';
4
+
5
+ /* eslint-disable @typescript-eslint/no-explicit-any */
6
+ class LibsUiDynamicComponentService {
7
+ elementLayoutContent;
8
+ elementBody;
9
+ mapStylesToParentDocument = new Map();
10
+ appRef = inject(ApplicationRef);
11
+ resolveComponentFactory(component) {
12
+ return createComponent(component, { environmentInjector: this.appRef.injector });
13
+ }
14
+ addToBody(componentRef, isAddParentDocument) {
15
+ if (!componentRef || !componentRef.hostView) {
16
+ return '';
17
+ }
18
+ this.appRef.attachView(componentRef.hostView);
19
+ const domElem = componentRef.hostView.rootNodes[0];
20
+ if (isAddParentDocument) {
21
+ window.parent.document.body.appendChild(domElem);
22
+ return this.updateStyleToParentDocument();
23
+ }
24
+ if (!this.elementBody) {
25
+ this.elementBody = document.body;
26
+ }
27
+ this.elementBody.appendChild(domElem);
28
+ return '';
29
+ }
30
+ addToElement(componentRef, elementAdd) {
31
+ if (!componentRef || !componentRef.hostView || !elementAdd) {
32
+ return;
33
+ }
34
+ this.appRef.attachView(componentRef.hostView);
35
+ const domElem = componentRef.hostView.rootNodes[0];
36
+ return elementAdd.appendChild(domElem);
37
+ }
38
+ addToIdAttributeElement(componentRef, id) {
39
+ if (!this.elementLayoutContent) {
40
+ this.elementLayoutContent = document.getElementById(id);
41
+ }
42
+ if (!componentRef || !componentRef.hostView) {
43
+ return;
44
+ }
45
+ this.appRef.attachView(componentRef.hostView);
46
+ const domElem = componentRef.hostView.rootNodes[0];
47
+ return this.elementLayoutContent?.appendChild(domElem);
48
+ }
49
+ remove(componentRef, frameId = '', ignoreDestroyComponent) {
50
+ if (!componentRef) {
51
+ return;
52
+ }
53
+ this.removeStyleToParentDocument(frameId);
54
+ if (componentRef.hostView) {
55
+ this.appRef.detachView(componentRef.hostView);
56
+ }
57
+ if (!ignoreDestroyComponent && componentRef.destroy) {
58
+ componentRef.destroy();
59
+ }
60
+ }
61
+ updateStyleToParentDocument() {
62
+ const frameId = uuid();
63
+ const documentParent = window.parent.document;
64
+ if (documentParent && !this.mapStylesToParentDocument.has(frameId)) {
65
+ const styleTags = new Array();
66
+ Array.from(document.head.querySelectorAll("style")).forEach(styleTag => {
67
+ const cloneStyleTag = styleTag.cloneNode(true);
68
+ styleTags.push(cloneStyleTag);
69
+ documentParent?.head.appendChild(cloneStyleTag);
70
+ });
71
+ this.mapStylesToParentDocument.set(frameId, styleTags);
72
+ }
73
+ return frameId;
74
+ }
75
+ removeStyleToParentDocument(frameId) {
76
+ if (!frameId) {
77
+ return;
78
+ }
79
+ const styleTagsPopup = this.mapStylesToParentDocument.get(frameId);
80
+ const documentParent = window.parent.document;
81
+ if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {
82
+ return;
83
+ }
84
+ styleTagsPopup.forEach(styleTag => {
85
+ documentParent?.head.removeChild(styleTag);
86
+ });
87
+ this.mapStylesToParentDocument.delete(frameId);
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
90
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, providedIn: 'root' });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDynamicComponentService, decorators: [{
93
+ type: Injectable,
94
+ args: [{
95
+ providedIn: 'root'
96
+ }]
97
+ }] });
98
+
99
+ /**
100
+ * Generated bundle index. Do not edit.
101
+ */
102
+
103
+ export { LibsUiDynamicComponentService };
104
+ //# sourceMappingURL=libs-ui-services-dynamic-component.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-services-dynamic-component.mjs","sources":["../../../../../libs-ui/services/dynamic-component/src/dynamic-component.service.ts","../../../../../libs-ui/services/dynamic-component/src/libs-ui-services-dynamic-component.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApplicationRef, ComponentRef, EmbeddedViewRef, Injectable, createComponent, inject } from '@angular/core';\nimport { uuid } from '@libs-ui/utils';\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LibsUiDynamicComponentService {\n private elementLayoutContent!: HTMLElement | null;\n private elementBody!: HTMLElement | null;\n private mapStylesToParentDocument: Map<string, Array<Node>> = new Map();\n private appRef = inject(ApplicationRef);\n\n public resolveComponentFactory(component: any): ComponentRef<any> {\n return createComponent(component, { environmentInjector: this.appRef.injector });\n }\n\n public addToBody(componentRef: any, isAddParentDocument?: boolean): string {\n if (!componentRef || !componentRef.hostView) {\n return '';\n }\n\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n if (isAddParentDocument) {\n window.parent.document.body.appendChild(domElem);\n\n return this.updateStyleToParentDocument();\n }\n if (!this.elementBody) {\n this.elementBody = document.body;\n }\n this.elementBody.appendChild(domElem);\n\n return '';\n }\n\n public addToElement(componentRef: any, elementAdd: any) {\n if (!componentRef || !componentRef.hostView || !elementAdd) {\n return;\n }\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n return elementAdd.appendChild(domElem);\n }\n\n public addToIdAttributeElement(componentRef: any, id: string) {\n if (!this.elementLayoutContent) {\n this.elementLayoutContent = document.getElementById(id);\n }\n if (!componentRef || !componentRef.hostView) {\n return;\n }\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n return this.elementLayoutContent?.appendChild(domElem);\n }\n\n public remove(componentRef: any, frameId = '', ignoreDestroyComponent?: boolean) {\n if (!componentRef) {\n return;\n }\n this.removeStyleToParentDocument(frameId);\n if (componentRef.hostView) {\n this.appRef.detachView(componentRef.hostView);\n }\n if (!ignoreDestroyComponent && componentRef.destroy) {\n componentRef.destroy();\n }\n }\n\n private updateStyleToParentDocument(): string {\n const frameId = uuid();\n const documentParent = window.parent.document;\n\n if (documentParent && !this.mapStylesToParentDocument.has(frameId)) {\n const styleTags = new Array<Node>();\n\n Array.from(document.head.querySelectorAll(\"style\")).forEach(styleTag => {\n const cloneStyleTag = styleTag.cloneNode(true);\n\n styleTags.push(cloneStyleTag);\n documentParent?.head.appendChild(cloneStyleTag);\n });\n this.mapStylesToParentDocument.set(frameId, styleTags);\n }\n\n return frameId;\n }\n\n private removeStyleToParentDocument(frameId: string) {\n if (!frameId) {\n return;\n }\n const styleTagsPopup = this.mapStylesToParentDocument.get(frameId);\n const documentParent = window.parent.document;\n\n if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {\n return;\n }\n styleTagsPopup.forEach(styleTag => {\n documentParent?.head.removeChild(styleTag);\n });\n this.mapStylesToParentDocument.delete(frameId);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './dynamic-component.service';
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@libs-ui/services-dynamic-component",
3
+ "version": "0.2.5",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-services-dynamic-component.mjs",
10
+ "typings": "index.d.ts",
11
+ "exports": {
12
+ "./package.json": {
13
+ "default": "./package.json"
14
+ },
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "esm2022": "./esm2022/libs-ui-services-dynamic-component.mjs",
18
+ "esm": "./esm2022/libs-ui-services-dynamic-component.mjs",
19
+ "default": "./fesm2022/libs-ui-services-dynamic-component.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }