@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
125 lines • 17.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, NgZone, PLATFORM_ID, } from '@angular/core';
import { PieChartComponent } from '@swimlane/ngx-charts';
import { MonitoringAppGenComponent } from '../../metadata/decorators';
import { ChartDataModel, } from '../ChartDataModel';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@swimlane/ngx-charts";
import * as i3 from "@ionic/angular";
import * as i4 from "../../ui-directive/export-data.directive";
let TapVariablePieChartGridComponent = class TapVariablePieChartGridComponent extends PieChartComponent {
set label(indexOrArray) {
this.chartModel.initLabel(indexOrArray);
}
set variable(variableOrArray) {
this.input = this.chartModel.initVariable(variableOrArray);
}
set input(inputs) {
this.subscription = this.chartModel
.defineInputStreamSingle(inputs, false, 0)
.subscribe((result) => {
let index = 0;
for (const item of result) {
if (this.results[index] !== undefined) {
if (item.value !== this.results[index].value) {
this.results = result;
}
}
else {
this.results = result;
}
index++;
}
this.resizeComponent();
});
}
onResize(event) {
this.innerWidth = window.innerWidth;
this.resizeComponent();
}
constructor(myChartElement, zone, cd, platformId, cdr) {
super(myChartElement, zone, cd, platformId);
this.cdr = cdr;
this.results = [
{
name: '---',
value: 0,
extra: 0,
},
];
this.chartModel = new ChartDataModel();
this.colorScheme = {
domain: [
'#5DADE2',
'#9B59B6',
'#F39C12',
'#5AA454',
'#A10A28',
'#C7B42C',
'#AAAAAA',
],
};
this.showExportButton = false;
}
ngAfterContentInit() {
this.innerWidth = window.innerWidth;
this.resizeComponent();
this.cdr.detectChanges();
}
onSelect(event) {
/* Not implemented
this.chartModel.showDetail(event, this.modalController, TapVariableDataPopupComponent);
*/
}
resizeComponent() {
if (this.innerWidth <= 400) {
this.innerWidth = 400;
}
this.innerHeight = (150 * this.results.length) / (this.innerWidth / 300);
if (this.innerHeight <= 150) {
this.innerHeight = 150;
}
this.cdr.detectChanges();
}
ngOnDestroy() {
this.subscription?.unsubscribe();
this.chartModel.destroyCurrentSub();
}
};
/** @nocollapse */ TapVariablePieChartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TapVariablePieChartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariablePieChartGridComponent, selector: "tap-variable-pie-chart-grid", inputs: { colorScheme: "colorScheme", showExportButton: "showExportButton", exportedFileName: "exportedFileName", label: "label", variable: "variable", input: "input" }, host: { listeners: { "window:resize": "onResize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PieGridComponent, selector: "ngx-charts-pie-grid", inputs: ["designatedTotal", "tooltipDisabled", "tooltipText", "label", "minWidth", "activeEntries"], outputs: ["activate", "deactivate"] }, { kind: "component", type: i3.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }] });
TapVariablePieChartGridComponent = __decorate([
MonitoringAppGenComponent({
constraints: {
isNumber: 'YES',
},
}),
__metadata("design:paramtypes", [ElementRef,
NgZone,
ChangeDetectorRef, String, ChangeDetectorRef])
], TapVariablePieChartGridComponent);
export { TapVariablePieChartGridComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePieChartGridComponent, decorators: [{
type: Component,
args: [{ selector: 'tap-variable-pie-chart-grid', template: "<div #containerRef style=\"width: 100%; overflow: auto; position: relative\">\n <ngx-charts-pie-grid\n #charts\n [view]=\"[containerRef.offsetWidth, innerHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-pie-grid>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n *ngIf=\"showExportButton\"\n [exportedFileName]=\"exportedFileName\"\n [dataToExport]=\"results\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}#exportFabButton{position:absolute;top:10px;right:10px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { colorScheme: [{
type: Input
}], showExportButton: [{
type: Input
}], exportedFileName: [{
type: Input
}], label: [{
type: Input
}], variable: [{
type: Input
}], input: [{
type: Input
}], onResize: [{
type: HostListener,
args: ['window:resize', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsY0FBYyxHQUdmLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQWFwQixJQUFNLGdDQUFnQyxHQUF0QyxNQUFNLGdDQUNYLFNBQVEsaUJBQWlCO0lBcUN6QixJQUNJLEtBQUssQ0FBQyxZQUFzRDtRQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFDSSxRQUFRLENBQ1YsZUFBZ0U7UUFFaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FB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RFlhLGdDQUFnQztJQVY1Qyx5QkFBeUIsQ0FBQztRQUN6QixXQUFXLEVBQUU7WUFDWCxRQUFRLEVBQUUsS0FBSztTQUNoQjtLQUNGLENBQUM7cUNBbUZrQixVQUFVO1FBQ3BCLE1BQU07UUFDUixpQkFBaUIsVUFFUixpQkFBaUI7R0FqRnJCLGdDQUFnQyxDQWlINUM7U0FqSFksZ0NBQWdDOzRGQUFoQyxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsNkJBQTZCOzswQkFvRnBDLE1BQU07MkJBQUMsV0FBVzs0RUE1RHJCLFdBQVc7c0JBRFYsS0FBSztnQkFjTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBTUYsUUFBUTtzQkFEWCxLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFxQk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0VmFyaWFibGUgfSBmcm9tICdAaW90aXplL3RhcC9kYXRhJztcbmltcG9ydCB7IFBpZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnQHN3aW1sYW5lL25neC1jaGFydHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBDaGFydERhdGFNb2RlbCxcbiAgQ2hhcnRJbnB1dFNpbmdsZSxcbiAgQ2hhcnRJbnB1dFN0cmVhbVZhcixcbn0gZnJvbSAnLi4vQ2hhcnREYXRhTW9kZWwnO1xuaW1wb3J0IHsgT25DaGFydFNlbGVjdEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkLXR5cGVzJztcblxuQE1vbml0b3JpbmdBcHBHZW5Db21wb25lbnQoe1xuICBjb25zdHJhaW50czoge1xuICAgIGlzTnVtYmVyOiAnWUVTJyxcbiAgfSxcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtcGllLWNoYXJ0LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlUGllQ2hhcnRHcmlkQ29tcG9uZW50XG4gIGV4dGVuZHMgUGllQ2hhcnRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgcmVzdWx0czogQ2hhcnRJbnB1dFNpbmdsZVtdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICctLS0nLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBleHRyYTogMCxcbiAgICB9LFxuICBdO1xuXG4gIGlubmVyV2lkdGghOiBudW1iZXI7XG4gIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuXG4gIHByaXZhdGUgY2hhcnRNb2RlbDogQ2hhcnREYXRhTW9kZWwgPSBuZXcgQ2hhcnREYXRhTW9kZWwoKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKVxuICBjb2xvclNjaGVtZSA9IHtcbiAgICBkb21haW46IFtcbiAgICAgICcjNURBREUyJyxcbiAgICAgICcjOUI1OUI2JyxcbiAgICAgICcjRjM5QzEyJyxcbiAgICAgICcjNUFBNDU0JyxcbiAgICAgICcjQTEwQTI4JyxcbiAgICAgICcjQzdCNDJDJyxcbiAgICAgICcjQUFBQUFBJyxcbiAgICBdLFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBleHBvcnRlZEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChpbmRleE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuaW5pdExhYmVsKGluZGV4T3JBcnJheSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUoXG4gICAgdmFyaWFibGVPckFycmF5OiBBYnN0cmFjdFZhcmlhYmxlPG51bWJlciB8IG51bWJlcltdPiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLmlucHV0ID0gdGhpcy5jaGFydE1vZGVsLmluaXRWYXJpYWJsZSh2YXJpYWJsZU9yQXJyYXkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlucHV0KGlucHV0czogQ2hhcnRJbnB1dFN0cmVhbVZhcltdKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYXJ0TW9kZWxcbiAgICAgIC5kZWZpbmVJbnB1dFN0cmVhbVNpbmdsZShpbnB1dHMsIGZhbHNlLCAwKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDaGFydElucHV0U2luZ2xlW10pID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3VsdCBhcyBDaGFydElucHV0U2luZ2xlW10pIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXN1bHRzW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAhPT0gdGhpcy5yZXN1bHRzW2luZGV4XS52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHQgYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplQ29tcG9uZW50KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG15Q2hhcnRFbGVtZW50OiBFbGVtZW50UmVmPGFueT4sXG4gICAgem9uZTogTmdab25lLFxuICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKG15Q2hhcnRFbGVtZW50LCB6b25lLCBjZCwgcGxhdGZvcm1JZCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogT25DaGFydFNlbGVjdEV2ZW50KSB7XG4gICAgLyogTm90IGltcGxlbWVudGVkXG4gICAgdGhpcy5jaGFydE1vZGVsLnNob3dEZXRhaWwoZXZlbnQsIHRoaXMubW9kYWxDb250cm9sbGVyLCBUYXBWYXJpYWJsZURhdGFQb3B1cENvbXBvbmVudCk7XG4gICAgKi9cbiAgfVxuXG4gIHJlc2l6ZUNvbXBvbmVudCgpIHtcbiAgICBpZiAodGhpcy5pbm5lcldpZHRoIDw9IDQwMCkge1xuICAgICAgdGhpcy5pbm5lcldpZHRoID0gNDAwO1xuICAgIH1cbiAgICB0aGlzLmlubmVySGVpZ2h0ID0gKDE1MCAqIHRoaXMucmVzdWx0cy5sZW5ndGgpIC8gKHRoaXMuaW5uZXJXaWR0aCAvIDMwMCk7XG4gICAgaWYgKHRoaXMuaW5uZXJIZWlnaHQgPD0gMTUwKSB7XG4gICAgICB0aGlzLmlubmVySGVpZ2h0ID0gMTUwO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuZGVzdHJveUN1cnJlbnRTdWIoKTtcbiAgfVxufVxuIiwiPGRpdiAjY29udGFpbmVyUmVmIHN0eWxlPVwid2lkdGg6IDEwMCU7IG92ZXJmbG93OiBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgPG5neC1jaGFydHMtcGllLWdyaWRcbiAgICAjY2hhcnRzXG4gICAgW3ZpZXddPVwiW2NvbnRhaW5lclJlZi5vZmZzZXRXaWR0aCwgaW5uZXJIZWlnaHRdXCJcbiAgICBbc2NoZW1lXT1cImNvbG9yU2NoZW1lXCJcbiAgICBbYW5pbWF0aW9uc109XCJmYWxzZVwiXG4gICAgW3Jlc3VsdHNdPVwicmVzdWx0c1wiXG4gICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgPlxuICA8L25neC1jaGFydHMtcGllLWdyaWQ+XG4gIDxpb24tZmFiLWJ1dHRvblxuICAgIGlkPVwiZXhwb3J0RmFiQnV0dG9uXCJcbiAgICBzaXplPVwic21hbGxcIlxuICAgIHRhcEV4cG9ydERhdGFcbiAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgIFtleHBvcnRlZEZpbGVOYW1lXT1cImV4cG9ydGVkRmlsZU5hbWVcIlxuICAgIFtkYXRhVG9FeHBvcnRdPVwicmVzdWx0c1wiXG4gID5cbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvZGl2PlxuIl19