Socket
Socket
Sign inDemoInstall

@rohmer/ng-portal

Package Overview
Dependencies
7
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.0 to 1.0.1

5

bundles/rohmer-ng-portal.umd.js

@@ -361,2 +361,3 @@ (function (global, factory) {

PortalService.prototype.detach = function (slot) {
console.log('detach');
var slots = Object.entries(this.slots$.value)

@@ -457,2 +458,6 @@ .filter(function (_a) {

PortalSlotDirective.prototype.ngOnDestroy = function () {
var _this = this;
this.slot$
.pipe(operators.take(1), operators.takeUntil(this.destroyed$))
.subscribe(function (slot) { return slot && _this.portalService.detach(slot); });
this.destroyed$.next();

@@ -459,0 +464,0 @@ };

2

bundles/rohmer-ng-portal.umd.min.js

@@ -15,3 +15,3 @@ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/cdk/portal"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@rohmer/ng-portal",["exports","@angular/core","@angular/cdk/portal","rxjs","rxjs/operators"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).rohmer=t.rohmer||{},t.rohmer["ng-portal"]={}),t.ng.core,t.ng.cdk.portal,t.rxjs,t.rxjs.operators)}(this,(function(t,e,o,r,n){"use strict";

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])})(t,e)};function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}Object.create;function a(t,e){var o="function"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)s.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return s}Object.create;var p=function(){function t(t,e,o,n,i){this.hostRef=t,this.portalService=e,this.componentFactoryResolver=o,this.injector=n,this.appRef=i,this.destroyed$=new r.Subject,this.portalOutlet=null,this.slot$=new r.ReplaySubject,this.attached=!1}return t.prototype.afterViewInit=function(){var t=this;this.portalOutlet=new o.DomPortalOutlet(this.hostRef.nativeElement,this.componentFactoryResolver,this.appRef,this.injector),this.slot$.pipe(n.distinctUntilChanged(),n.tap((function(){return t.updateContentAttachment(null)})),n.switchMap((function(e){return t.portalService.getSlotListener(e)})),n.takeUntil(this.destroyed$)).subscribe((function(e){return t.updateContentAttachment(e)}),(function(){}),(function(){return t.updateContentAttachment(null)}))},t.prototype.onDestroy=function(){this.destroyed$.next()},t.prototype.updateContentAttachment=function(t){var e,o,r,n;(null===(e=this.portalOutlet)||void 0===e?void 0:e.hasAttached())&&this.portalOutlet.detach(),t&&(null===(o=this.portalOutlet)||void 0===o||o.attach(t)),this.attached=null!==(n=null===(r=this.portalOutlet)||void 0===r?void 0:r.hasAttached())&&void 0!==n&&n},t}(),c=function(){function t(){this.slots$=new r.BehaviorSubject({})}return t.prototype.attach=function(t,e){var o;this.slots$.next(Object.assign(Object.assign({},this.slots$.value),((o={})[t]=e,o)))},t.prototype.detach=function(t){var e=Object.entries(this.slots$.value).filter((function(e){return a(e,1)[0]!==t})).reduce((function(t,e){var o,r=a(e,2),n=r[0],i=r[1];return(o={})[n]=i,o}),{});this.slots$.next(e)},t.prototype.getSlotListener=function(t){return this.slots$.pipe(n.pluck(t))},t}();c.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new c},token:c,providedIn:"root"}),c.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}];var l=function(t){function e(e,o,r,n,i){return t.call(this,e,o,r,n,i)||this}return s(e,t),Object.defineProperty(e.prototype,"rpPortalHost",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.afterViewInit()},e.prototype.ngOnDestroy=function(){this.onDestroy()},e}(p);l.decorators=[{type:e.Directive,args:[{selector:"[rpPortalHost]",exportAs:"rpPortalHost"}]}],l.ctorParameters=function(){return[{type:e.ElementRef,decorators:[{type:e.Host}]},{type:c},{type:e.ComponentFactoryResolver},{type:e.Injector},{type:e.ApplicationRef}]},l.propDecorators={rpPortalHost:[{type:e.Input}]};var u=function(){function t(t,e,o){this.templateRef=t,this.portalService=e,this.viewContainerRef=o,this.destroyed$=new r.Subject,this.slot$=new r.ReplaySubject}return Object.defineProperty(t.prototype,"rpPortalSlot",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),t.prototype.ngAfterViewInit=function(){var t=this,e=new o.TemplatePortal(this.templateRef,this.viewContainerRef);this.slot$.pipe(n.takeUntil(this.destroyed$),n.startWith(void 0),n.distinctUntilChanged(),n.pairwise()).subscribe((function(o){var r=a(o,2),n=r[0],i=r[1];n&&t.portalService.detach(n),i&&t.portalService.attach(i,e)}))},t.prototype.ngOnDestroy=function(){this.destroyed$.next()},t}();u.decorators=[{type:e.Directive,args:[{selector:"ng-template[rpPortalSlot]",exportAs:"rpPortalSlot"}]}],u.ctorParameters=function(){return[{type:e.TemplateRef,decorators:[{type:e.Host}]},{type:c},{type:e.ViewContainerRef}]},u.propDecorators={rpPortalSlot:[{type:e.Input}]};var f=function(t){function e(e,o,r,n,i){return t.call(this,e,o,r,n,i)||this}return s(e,t),Object.defineProperty(e.prototype,"slot",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.afterViewInit()},e.prototype.ngOnDestroy=function(){this.onDestroy()},e}(p);f.decorators=[{type:e.Directive,args:[{selector:"rp-portal-host",providers:[{provide:l,useExisting:f}],exportAs:"rpPortalHost"}]}],f.ctorParameters=function(){return[{type:e.ElementRef,decorators:[{type:e.Host}]},{type:c},{type:e.ComponentFactoryResolver},{type:e.Injector},{type:e.ApplicationRef}]},f.propDecorators={slot:[{type:e.Input}]};var h=function(){};h.decorators=[{type:e.NgModule,args:[{declarations:[l,u,f],exports:[l,u,f]}]}],t.PortalHostComponentStyleDirective=f,t.PortalHostDirective=l,t.PortalModule=h,t.PortalSlotDirective=u,t.ɵa=p,t.ɵb=c,Object.defineProperty(t,"__esModule",{value:!0})}));
***************************************************************************** */var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])})(t,e)};function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}Object.create;function a(t,e){var o="function"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)s.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return s}Object.create;var p=function(){function t(t,e,o,n,i){this.hostRef=t,this.portalService=e,this.componentFactoryResolver=o,this.injector=n,this.appRef=i,this.destroyed$=new r.Subject,this.portalOutlet=null,this.slot$=new r.ReplaySubject,this.attached=!1}return t.prototype.afterViewInit=function(){var t=this;this.portalOutlet=new o.DomPortalOutlet(this.hostRef.nativeElement,this.componentFactoryResolver,this.appRef,this.injector),this.slot$.pipe(n.distinctUntilChanged(),n.tap((function(){return t.updateContentAttachment(null)})),n.switchMap((function(e){return t.portalService.getSlotListener(e)})),n.takeUntil(this.destroyed$)).subscribe((function(e){return t.updateContentAttachment(e)}),(function(){}),(function(){return t.updateContentAttachment(null)}))},t.prototype.onDestroy=function(){this.destroyed$.next()},t.prototype.updateContentAttachment=function(t){var e,o,r,n;(null===(e=this.portalOutlet)||void 0===e?void 0:e.hasAttached())&&this.portalOutlet.detach(),t&&(null===(o=this.portalOutlet)||void 0===o||o.attach(t)),this.attached=null!==(n=null===(r=this.portalOutlet)||void 0===r?void 0:r.hasAttached())&&void 0!==n&&n},t}(),c=function(){function t(){this.slots$=new r.BehaviorSubject({})}return t.prototype.attach=function(t,e){var o;this.slots$.next(Object.assign(Object.assign({},this.slots$.value),((o={})[t]=e,o)))},t.prototype.detach=function(t){console.log("detach");var e=Object.entries(this.slots$.value).filter((function(e){return a(e,1)[0]!==t})).reduce((function(t,e){var o,r=a(e,2),n=r[0],i=r[1];return(o={})[n]=i,o}),{});this.slots$.next(e)},t.prototype.getSlotListener=function(t){return this.slots$.pipe(n.pluck(t))},t}();c.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new c},token:c,providedIn:"root"}),c.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}];var l=function(t){function e(e,o,r,n,i){return t.call(this,e,o,r,n,i)||this}return s(e,t),Object.defineProperty(e.prototype,"rpPortalHost",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.afterViewInit()},e.prototype.ngOnDestroy=function(){this.onDestroy()},e}(p);l.decorators=[{type:e.Directive,args:[{selector:"[rpPortalHost]",exportAs:"rpPortalHost"}]}],l.ctorParameters=function(){return[{type:e.ElementRef,decorators:[{type:e.Host}]},{type:c},{type:e.ComponentFactoryResolver},{type:e.Injector},{type:e.ApplicationRef}]},l.propDecorators={rpPortalHost:[{type:e.Input}]};var u=function(){function t(t,e,o){this.templateRef=t,this.portalService=e,this.viewContainerRef=o,this.destroyed$=new r.Subject,this.slot$=new r.ReplaySubject}return Object.defineProperty(t.prototype,"rpPortalSlot",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),t.prototype.ngAfterViewInit=function(){var t=this,e=new o.TemplatePortal(this.templateRef,this.viewContainerRef);this.slot$.pipe(n.takeUntil(this.destroyed$),n.startWith(void 0),n.distinctUntilChanged(),n.pairwise()).subscribe((function(o){var r=a(o,2),n=r[0],i=r[1];n&&t.portalService.detach(n),i&&t.portalService.attach(i,e)}))},t.prototype.ngOnDestroy=function(){var t=this;this.slot$.pipe(n.take(1),n.takeUntil(this.destroyed$)).subscribe((function(e){return e&&t.portalService.detach(e)})),this.destroyed$.next()},t}();u.decorators=[{type:e.Directive,args:[{selector:"ng-template[rpPortalSlot]",exportAs:"rpPortalSlot"}]}],u.ctorParameters=function(){return[{type:e.TemplateRef,decorators:[{type:e.Host}]},{type:c},{type:e.ViewContainerRef}]},u.propDecorators={rpPortalSlot:[{type:e.Input}]};var f=function(t){function e(e,o,r,n,i){return t.call(this,e,o,r,n,i)||this}return s(e,t),Object.defineProperty(e.prototype,"slot",{set:function(t){this.slot$.next(t)},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.afterViewInit()},e.prototype.ngOnDestroy=function(){this.onDestroy()},e}(p);f.decorators=[{type:e.Directive,args:[{selector:"rp-portal-host",providers:[{provide:l,useExisting:f}],exportAs:"rpPortalHost"}]}],f.ctorParameters=function(){return[{type:e.ElementRef,decorators:[{type:e.Host}]},{type:c},{type:e.ComponentFactoryResolver},{type:e.Injector},{type:e.ApplicationRef}]},f.propDecorators={slot:[{type:e.Input}]};var h=function(){};h.decorators=[{type:e.NgModule,args:[{declarations:[l,u,f],exports:[l,u,f]}]}],t.PortalHostComponentStyleDirective=f,t.PortalHostDirective=l,t.PortalModule=h,t.PortalSlotDirective=u,t.ɵa=p,t.ɵb=c,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=rohmer-ng-portal.umd.min.js.map

@@ -5,3 +5,3 @@ import { Directive, Host, Input, TemplateRef, ViewContainerRef } from '@angular/core';

import { ReplaySubject, Subject } from 'rxjs';
import { distinctUntilChanged, pairwise, startWith, takeUntil } from 'rxjs/operators';
import { distinctUntilChanged, pairwise, startWith, take, takeUntil } from 'rxjs/operators';
export class PortalSlotDirective {

@@ -32,2 +32,5 @@ constructor(templateRef, portalService, viewContainerRef) {

ngOnDestroy() {
this.slot$
.pipe(take(1), takeUntil(this.destroyed$))
.subscribe(slot => slot && this.portalService.detach(slot));
this.destroyed$.next();

@@ -50,2 +53,2 @@ }

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLXNsb3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9obWVyL25nLXBvcnRhbC9zcmMvbGliL2RpcmVjdGl2ZXMvcG9ydGFsLXNsb3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWEsV0FBVyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFNcEYsTUFBTSxPQUFPLG1CQUFtQjtJQVM5QixZQUNrQixXQUE2QixFQUNyQyxhQUE0QixFQUM1QixnQkFBa0M7UUFGMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFYcEMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsVUFBSyxHQUFHLElBQUksYUFBYSxFQUFVLENBQUM7SUFZNUMsQ0FBQztJQVZELElBQ0ksWUFBWSxDQUFDLElBQVk7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQVNELGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUN0QixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUs7YUFDUCxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDMUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUNwQixvQkFBb0IsRUFBRSxFQUN0QixRQUFRLEVBQUUsQ0FDWDthQUNBLFNBQVMsQ0FDUixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDckIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEM7WUFDRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBR0YsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUFoREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLFFBQVEsRUFBRSxjQUFjO2FBQ3pCOzs7WUFUeUQsV0FBVyx1QkFvQmhFLElBQUk7WUFuQkQsYUFBYTtZQURrRCxnQkFBZ0I7OzsyQkFjcEYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBIb3N0LCBJbnB1dCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BvcnRhbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlJztcbmltcG9ydCB7VGVtcGxhdGVQb3J0YWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtSZXBsYXlTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtycFBvcnRhbFNsb3RdJyxcbiAgZXhwb3J0QXM6ICdycFBvcnRhbFNsb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQb3J0YWxTbG90RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBzbG90JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgcnBQb3J0YWxTbG90KHNsb3Q6IHN0cmluZykge1xuICAgIHRoaXMuc2xvdCQubmV4dChzbG90KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBIb3N0KCkgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHBvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG4gICAgICB0aGlzLnRlbXBsYXRlUmVmLFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmXG4gICAgKTtcbiAgICB0aGlzLnNsb3QkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBwYWlyd2lzZSgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKFtvbGRTbG90LCBuZXdTbG90XSkgPT4ge1xuICAgICAgICAgIGlmIChvbGRTbG90KSB7XG4gICAgICAgICAgICB0aGlzLnBvcnRhbFNlcnZpY2UuZGV0YWNoKG9sZFNsb3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmV3U2xvdCkge1xuICAgICAgICAgICAgdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaChuZXdTbG90LCBwb3J0YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gbm8gZXJyb3IgaGFuZGxpbmcgbmVlZGVkXG4gICAgICAgIC8vIHBhaXJ3aXNlID0+IG5vIGNvbXBsZXRlIGNsZWFudXAgbmVlZGVkXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLXNsb3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9obWVyL25nLXBvcnRhbC9zcmMvbGliL2RpcmVjdGl2ZXMvcG9ydGFsLXNsb3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWEsV0FBVyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFDLG9CQUFvQixFQUFRLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTWhHLE1BQU0sT0FBTyxtQkFBbUI7SUFTOUIsWUFDa0IsV0FBNkIsRUFDckMsYUFBNEIsRUFDNUIsZ0JBQWtDO1FBRjFCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWHBDLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBRyxJQUFJLGFBQWEsRUFBVSxDQUFDO0lBWTVDLENBQUM7SUFWRCxJQUNJLFlBQVksQ0FBQyxJQUFZO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFTRCxlQUFlO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLO2FBQ1AsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDcEIsb0JBQW9CLEVBQUUsRUFDdEIsUUFBUSxFQUFFLENBQ1g7YUFDQSxTQUFTLENBQ1IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3JCLElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BDO1lBQ0QsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzVDO1FBQ0gsQ0FBQyxDQUdGLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLO2FBQ1AsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUMzQjthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBdERGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxRQUFRLEVBQUUsY0FBYzthQUN6Qjs7O1lBVHlELFdBQVcsdUJBb0JoRSxJQUFJO1lBbkJELGFBQWE7WUFEa0QsZ0JBQWdCOzs7MkJBY3BGLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdCwgSW5wdXQsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQb3J0YWxTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3J0YWwuc2VydmljZSc7XG5pbXBvcnQge1RlbXBsYXRlUG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBsYXN0LCBwYWlyd2lzZSwgc3RhcnRXaXRoLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcnBQb3J0YWxTbG90XScsXG4gIGV4cG9ydEFzOiAncnBQb3J0YWxTbG90Jyxcbn0pXG5leHBvcnQgY2xhc3MgUG9ydGFsU2xvdERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgc2xvdCQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgQElucHV0KClcbiAgc2V0IHJwUG9ydGFsU2xvdChzbG90OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3QkLm5leHQoc2xvdCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASG9zdCgpIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSBwb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKFxuICAgICAgdGhpcy50ZW1wbGF0ZVJlZixcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZlxuICAgICk7XG4gICAgdGhpcy5zbG90JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChbb2xkU2xvdCwgbmV3U2xvdF0pID0+IHtcbiAgICAgICAgICBpZiAob2xkU2xvdCkge1xuICAgICAgICAgICAgdGhpcy5wb3J0YWxTZXJ2aWNlLmRldGFjaChvbGRTbG90KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5ld1Nsb3QpIHtcbiAgICAgICAgICAgIHRoaXMucG9ydGFsU2VydmljZS5hdHRhY2gobmV3U2xvdCwgcG9ydGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIG5vIGVycm9yIGhhbmRsaW5nIG5lZWRlZFxuICAgICAgICAvLyBjbGVhbnVwIGRvbmUgaW4gbmdPbkRlc3Ryb3lcbiAgICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNsb3QkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHNsb3QgPT4gc2xvdCAmJiB0aGlzLnBvcnRhbFNlcnZpY2UuZGV0YWNoKHNsb3QpKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG59XG4iXX0=

@@ -13,2 +13,3 @@ import { Injectable } from '@angular/core';

detach(slot) {
console.log('detach');
const slots = Object.entries(this.slots$.value)

@@ -32,2 +33,2 @@ .filter(([key]) => key !== slot)

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb2htZXIvbmctcG9ydGFsL3NyYy9saWIvc2VydmljZXMvcG9ydGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLckMsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFLVSxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO0tBMEJyRTtJQXhCQyxNQUFNLENBQUMsSUFBWSxFQUFFLE1BQWlCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxpQ0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQ2QsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBWTtRQUNqQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUM7YUFDL0IsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSztTQUNiLENBQUMsRUFDRixFQUFFLENBQ0gsQ0FBQztRQUVKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxlQUFlLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDWixDQUFDO0lBQ04sQ0FBQzs7OztZQTlCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Nka1BvcnRhbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge3BsdWNrfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgc2xvdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBDZGtQb3J0YWw+Pih7fSk7XG5cbiAgYXR0YWNoKHNsb3Q6IHN0cmluZywgcG9ydGFsOiBDZGtQb3J0YWwpOiB2b2lkIHtcbiAgICB0aGlzLnNsb3RzJC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc2xvdHMkLnZhbHVlLFxuICAgICAgW3Nsb3RdOiBwb3J0YWwsXG4gICAgfSk7XG4gIH1cbiAgZGV0YWNoKHNsb3Q6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3RzID0gT2JqZWN0LmVudHJpZXModGhpcy5zbG90cyQudmFsdWUpXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSBzbG90KVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHByZXYsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgIHRoaXMuc2xvdHMkLm5leHQoc2xvdHMpO1xuICB9XG4gIGdldFNsb3RMaXN0ZW5lcihzbG90OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENka1BvcnRhbD4ge1xuICAgIHJldHVybiB0aGlzLnNsb3RzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHBsdWNrKHNsb3QpLFxuICAgICAgKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb2htZXIvbmctcG9ydGFsL3NyYy9saWIvc2VydmljZXMvcG9ydGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLckMsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFLVSxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO0tBMkJyRTtJQXpCQyxNQUFNLENBQUMsSUFBWSxFQUFFLE1BQWlCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxpQ0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQ2QsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBWTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDNUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQzthQUMvQixNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO1NBQ2IsQ0FBQyxFQUNGLEVBQUUsQ0FDSCxDQUFDO1FBRUosSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixJQUFJLENBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNaLENBQUM7SUFDTixDQUFDOzs7O1lBL0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2RrUG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7cGx1Y2t9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUG9ydGFsU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBzbG90cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlY29yZDxzdHJpbmcsIENka1BvcnRhbD4+KHt9KTtcblxuICBhdHRhY2goc2xvdDogc3RyaW5nLCBwb3J0YWw6IENka1BvcnRhbCk6IHZvaWQge1xuICAgIHRoaXMuc2xvdHMkLm5leHQoe1xuICAgICAgLi4udGhpcy5zbG90cyQudmFsdWUsXG4gICAgICBbc2xvdF06IHBvcnRhbCxcbiAgICB9KTtcbiAgfVxuICBkZXRhY2goc2xvdDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2RldGFjaCcpO1xuICAgIGNvbnN0IHNsb3RzID0gT2JqZWN0LmVudHJpZXModGhpcy5zbG90cyQudmFsdWUpXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSBzbG90KVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHByZXYsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgIHRoaXMuc2xvdHMkLm5leHQoc2xvdHMpO1xuICB9XG4gIGdldFNsb3RMaXN0ZW5lcihzbG90OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENka1BvcnRhbD4ge1xuICAgIHJldHVybiB0aGlzLnNsb3RzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHBsdWNrKHNsb3QpLFxuICAgICAgKTtcbiAgfVxufVxuIl19
import { ɵɵdefineInjectable, Injectable, Directive, ElementRef, Host, ComponentFactoryResolver, Injector, ApplicationRef, Input, TemplateRef, ViewContainerRef, NgModule } from '@angular/core';
import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
import { Subject, ReplaySubject, BehaviorSubject } from 'rxjs';
import { distinctUntilChanged, tap, switchMap, takeUntil, pluck, startWith, pairwise } from 'rxjs/operators';
import { distinctUntilChanged, tap, switchMap, takeUntil, pluck, startWith, pairwise, take } from 'rxjs/operators';

@@ -48,2 +48,3 @@ class AbstractPortalHostDirective {

detach(slot) {
console.log('detach');
const slots = Object.entries(this.slots$.value)

@@ -124,2 +125,5 @@ .filter(([key]) => key !== slot)

ngOnDestroy() {
this.slot$
.pipe(take(1), takeUntil(this.destroyed$))
.subscribe(slot => slot && this.portalService.detach(slot));
this.destroyed$.next();

@@ -126,0 +130,0 @@ }

{
"name": "@rohmer/ng-portal",
"version": "1.0.0",
"version": "1.0.1",
"author": {

@@ -5,0 +5,0 @@ "name": "Matthias Rohmer",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc