@rolatech/angular-course 17.6.3 → 19.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rolatech-angular-course-course-index.component-Ba8BsDP1.mjs +55 -0
- package/fesm2022/rolatech-angular-course-course-index.component-Ba8BsDP1.mjs.map +1 -0
- package/fesm2022/rolatech-angular-course.mjs +276 -301
- package/fesm2022/rolatech-angular-course.mjs.map +1 -1
- package/lib/components/index.d.ts +0 -1
- package/package.json +8 -6
- package/themes/_default.scss +1 -1
- package/esm2022/index.mjs +0 -7
- package/esm2022/lib/components/course-action/course-action.component.mjs +0 -29
- package/esm2022/lib/components/course-details/course-details.component.mjs +0 -28
- package/esm2022/lib/components/course-details-dialog/course-details-dialog.component.mjs +0 -92
- package/esm2022/lib/components/course-edit-dialog/course-edit-dialog.component.mjs +0 -233
- package/esm2022/lib/components/course-info/course-info.component.mjs +0 -23
- package/esm2022/lib/components/course-item/course-item.component.mjs +0 -18
- package/esm2022/lib/components/course-media/course-media.component.mjs +0 -34
- package/esm2022/lib/components/course-media-owner-renderer/course-media-owner-renderer.component.mjs +0 -20
- package/esm2022/lib/components/course-preview/course-preview.component.mjs +0 -11
- package/esm2022/lib/components/course-pricing/course-pricing.component.mjs +0 -14
- package/esm2022/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.mjs +0 -25
- package/esm2022/lib/components/course-pricing-dialog/course-pricing-dialog.component.mjs +0 -59
- package/esm2022/lib/components/course-schedule/course-schedule.component.mjs +0 -20
- package/esm2022/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.mjs +0 -26
- package/esm2022/lib/components/course-schedule-dialog/course-schedule-dialog.component.mjs +0 -56
- package/esm2022/lib/components/course-section-item/course-section-item.component.mjs +0 -52
- package/esm2022/lib/components/course-section-lecture-item/course-section-lecture-item.component.mjs +0 -112
- package/esm2022/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.mjs +0 -111
- package/esm2022/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.mjs +0 -11
- package/esm2022/lib/components/course-sections/course-sections.component.mjs +0 -28
- package/esm2022/lib/components/detail-item/detail-item.component.mjs +0 -72
- package/esm2022/lib/components/index.mjs +0 -24
- package/esm2022/lib/components/pricing-item/pricing-item.component.mjs +0 -44
- package/esm2022/lib/components/schedule-item/schedule-item.component.mjs +0 -127
- package/esm2022/lib/interfaces/category.mjs +0 -2
- package/esm2022/lib/interfaces/course.mjs +0 -146
- package/esm2022/lib/interfaces/index.mjs +0 -2
- package/esm2022/lib/interfaces/media.mjs +0 -2
- package/esm2022/lib/pages/course/course-category/course-category.component.mjs +0 -74
- package/esm2022/lib/pages/course/course-detail/course-detail.component.mjs +0 -148
- package/esm2022/lib/pages/course/course-index/course-index.component.mjs +0 -53
- package/esm2022/lib/pages/course/course-layout/course-layout.component.mjs +0 -49
- package/esm2022/lib/pages/course/course-section-content/course-section-content.component.mjs +0 -133
- package/esm2022/lib/pages/course/course.routes.mjs +0 -33
- package/esm2022/lib/pages/course-manage/course-manage-content/course-manage-content.component.mjs +0 -12
- package/esm2022/lib/pages/course-manage/course-manage-details/course-manage-details.component.mjs +0 -159
- package/esm2022/lib/pages/course-manage/course-manage-info/course-manage-info.component.mjs +0 -139
- package/esm2022/lib/pages/course-manage/course-manage-layout/course-manage-layout.component.mjs +0 -68
- package/esm2022/lib/pages/course-manage/course-manage-media/course-manage-media.component.mjs +0 -137
- package/esm2022/lib/pages/course-manage/course-manage-pricing/course-manage-pricing.component.mjs +0 -127
- package/esm2022/lib/pages/course-manage/course-manage-schedule/course-manage-schedule.component.mjs +0 -131
- package/esm2022/lib/pages/course-manage/course-manage-section/course-manage-section.component.mjs +0 -341
- package/esm2022/lib/pages/course-manage/course-manage.routes.mjs +0 -40
- package/esm2022/lib/services/booking.service.mjs +0 -24
- package/esm2022/lib/services/category.service.mjs +0 -38
- package/esm2022/lib/services/course-section.service.mjs +0 -26
- package/esm2022/lib/services/course.service.mjs +0 -280
- package/esm2022/lib/services/index.mjs +0 -6
- package/esm2022/lib/services/instructor.service.mjs +0 -24
- package/esm2022/provider.mjs +0 -13
- package/esm2022/rolatech-angular-course.mjs +0 -5
- package/fesm2022/rolatech-angular-course-course-index.component-Cy7RMzDZ.mjs +0 -78
- package/fesm2022/rolatech-angular-course-course-index.component-Cy7RMzDZ.mjs.map +0 -1
- package/lib/components/course-item/course-item.component.d.ts +0 -9
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, viewChild } from '@angular/core';
|
|
2
|
-
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
|
|
3
|
-
import { MatStepper, MatStepperModule } from '@angular/material/stepper';
|
|
4
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
5
|
-
import { findLastIndex, remove } from 'lodash';
|
|
6
|
-
import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
|
|
7
|
-
import { PricingItemComponent } from '../pricing-item/pricing-item.component';
|
|
8
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
9
|
-
import { DetailItemComponent } from '../detail-item/detail-item.component';
|
|
10
|
-
import { MatOptionModule } from '@angular/material/core';
|
|
11
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
12
|
-
import { TextFieldModule } from '@angular/cdk/text-field';
|
|
13
|
-
import { MatInputModule } from '@angular/material/input';
|
|
14
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
15
|
-
import { FormsModule } from '@angular/forms';
|
|
16
|
-
import { MatDividerModule } from '@angular/material/divider';
|
|
17
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
18
|
-
import { ImagePreviewDialogComponent, MediaListComponent, MediaListItemComponent } from '@rolatech/angular-components';
|
|
19
|
-
import { ScheduleDate } from '../../interfaces';
|
|
20
|
-
import { CategoryService, CourseService } from '../../services';
|
|
21
|
-
import * as i0 from "@angular/core";
|
|
22
|
-
import * as i1 from "@angular/material/dialog";
|
|
23
|
-
import * as i2 from "../../services";
|
|
24
|
-
import * as i3 from "@angular/material/snack-bar";
|
|
25
|
-
import * as i4 from "@angular/material/icon";
|
|
26
|
-
import * as i5 from "@angular/material/divider";
|
|
27
|
-
import * as i6 from "@angular/material/stepper";
|
|
28
|
-
import * as i7 from "@angular/forms";
|
|
29
|
-
import * as i8 from "@angular/material/form-field";
|
|
30
|
-
import * as i9 from "@angular/material/input";
|
|
31
|
-
import * as i10 from "@angular/cdk/text-field";
|
|
32
|
-
import * as i11 from "@angular/material/select";
|
|
33
|
-
import * as i12 from "@angular/material/core";
|
|
34
|
-
import * as i13 from "@angular/material/button";
|
|
35
|
-
export class CourseEditDialogComponent {
|
|
36
|
-
constructor(dialogRef, data, categoryService, courseService, snackBar, dialog) {
|
|
37
|
-
this.dialogRef = dialogRef;
|
|
38
|
-
this.data = data;
|
|
39
|
-
this.categoryService = categoryService;
|
|
40
|
-
this.courseService = courseService;
|
|
41
|
-
this.snackBar = snackBar;
|
|
42
|
-
this.dialog = dialog;
|
|
43
|
-
this.isUploading = false;
|
|
44
|
-
this.courseType = [
|
|
45
|
-
{
|
|
46
|
-
key: 'ONLINE',
|
|
47
|
-
value: '线上',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
key: 'OFFLINE',
|
|
51
|
-
value: '线下',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
key: 'MIXED',
|
|
55
|
-
value: '混合',
|
|
56
|
-
},
|
|
57
|
-
];
|
|
58
|
-
this.date = ScheduleDate;
|
|
59
|
-
this.lastStepper = false;
|
|
60
|
-
this.firstStepper = true;
|
|
61
|
-
this.stepper = viewChild.required(MatStepper);
|
|
62
|
-
this.course = data.course;
|
|
63
|
-
this.classrooms = data.classrooms;
|
|
64
|
-
}
|
|
65
|
-
ngOnInit() {
|
|
66
|
-
this.categoryService.find({}).subscribe({
|
|
67
|
-
next: (res) => {
|
|
68
|
-
this.categories = res.data;
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
close() {
|
|
73
|
-
this.dialogRef.close();
|
|
74
|
-
}
|
|
75
|
-
compareFn(o1, o2) {
|
|
76
|
-
return o1.id === o2.id;
|
|
77
|
-
}
|
|
78
|
-
addDetail() {
|
|
79
|
-
if (!this.course.details) {
|
|
80
|
-
this.course.details = [];
|
|
81
|
-
}
|
|
82
|
-
this.courseService
|
|
83
|
-
.addDetail(this.course.id, {
|
|
84
|
-
title: '',
|
|
85
|
-
description: '',
|
|
86
|
-
content: '',
|
|
87
|
-
media: [],
|
|
88
|
-
})
|
|
89
|
-
.subscribe({
|
|
90
|
-
next: (res) => {
|
|
91
|
-
const detail = res.data;
|
|
92
|
-
this.course.details.push({
|
|
93
|
-
id: detail.id,
|
|
94
|
-
title: '',
|
|
95
|
-
description: '',
|
|
96
|
-
content: '',
|
|
97
|
-
media: [],
|
|
98
|
-
});
|
|
99
|
-
},
|
|
100
|
-
error: (e) => {
|
|
101
|
-
this.snackBar.open(e.message);
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
addSchedule() {
|
|
106
|
-
if (!this.course.schedule) {
|
|
107
|
-
this.course.schedule = [];
|
|
108
|
-
}
|
|
109
|
-
this.course.schedule.push({
|
|
110
|
-
title: '',
|
|
111
|
-
content: '',
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
addPricing() {
|
|
115
|
-
if (!this.course.pricing) {
|
|
116
|
-
this.course.pricing = [];
|
|
117
|
-
}
|
|
118
|
-
this.course.pricing.push({
|
|
119
|
-
min: 0,
|
|
120
|
-
max: 0,
|
|
121
|
-
total: 0,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
onSelectionChange(event) {
|
|
125
|
-
this.selectedCategoyIds = event.value;
|
|
126
|
-
}
|
|
127
|
-
onStepperChange(event) {
|
|
128
|
-
this.lastStepper = event.selectedIndex === 3;
|
|
129
|
-
this.firstStepper = event.selectedIndex === 0;
|
|
130
|
-
}
|
|
131
|
-
previous() {
|
|
132
|
-
this.stepper().previous();
|
|
133
|
-
}
|
|
134
|
-
next() {
|
|
135
|
-
this.stepper().next();
|
|
136
|
-
}
|
|
137
|
-
onDetailMediaUpload(event) { }
|
|
138
|
-
onDetailMediaDelete(event) { }
|
|
139
|
-
onDetailSave(event) { }
|
|
140
|
-
onDetailDelete(detail) {
|
|
141
|
-
this.courseService.deleteDetail(this.course.id, detail.id).subscribe({
|
|
142
|
-
next: (res) => {
|
|
143
|
-
this.snackBar.open(res.message);
|
|
144
|
-
remove(this.details, {
|
|
145
|
-
id: detail.id,
|
|
146
|
-
});
|
|
147
|
-
},
|
|
148
|
-
error: (e) => {
|
|
149
|
-
this.snackBar.open(e.message);
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
onImageClick(i) {
|
|
154
|
-
const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {
|
|
155
|
-
maxWidth: '80vw',
|
|
156
|
-
maxHeight: '80vh',
|
|
157
|
-
height: '80%',
|
|
158
|
-
width: '80%',
|
|
159
|
-
panelClass: 'full-screen-modal',
|
|
160
|
-
data: {
|
|
161
|
-
media: this.course.media,
|
|
162
|
-
selected: i,
|
|
163
|
-
},
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
onUpload(event) {
|
|
167
|
-
const file = event.target.files[0];
|
|
168
|
-
if (file) {
|
|
169
|
-
const reader = new FileReader();
|
|
170
|
-
reader.readAsDataURL(file);
|
|
171
|
-
reader.onload = () => {
|
|
172
|
-
if (this.course.media) {
|
|
173
|
-
this.course.media.push({
|
|
174
|
-
url: reader.result,
|
|
175
|
-
alt: 'upload image',
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
this.course.media = [];
|
|
180
|
-
this.course.media.push({
|
|
181
|
-
url: reader.result,
|
|
182
|
-
alt: 'upload image',
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
this.isUploading = true;
|
|
186
|
-
const formData = new FormData();
|
|
187
|
-
formData.append('file', file);
|
|
188
|
-
this.courseService.upload(formData).subscribe({
|
|
189
|
-
next: (res) => {
|
|
190
|
-
this.isUploading = false;
|
|
191
|
-
const index = findLastIndex(this.course.media);
|
|
192
|
-
// Replace item at index using native splice
|
|
193
|
-
this.course.media.splice(index, 1, res.data);
|
|
194
|
-
},
|
|
195
|
-
error: (e) => {
|
|
196
|
-
this.isUploading = false;
|
|
197
|
-
this.snackBar.open('上传失败: ' + e.message);
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
};
|
|
201
|
-
reader.onerror = (error) => {
|
|
202
|
-
this.isUploading = false;
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseEditDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CategoryService }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
207
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseEditDialogComponent, isStandalone: true, selector: "rolatech-course-edit-dialog", viewQueries: [{ propertyName: "stepper", first: true, predicate: MatStepper, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <mat-stepper #stepper (selectionChange)=\"onStepperChange($event)\">\n <mat-step [editable]=\"true\">\n <form #infoForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u57FA\u672C\u4FE1\u606F</ng-template>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"course.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"course.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" ngModelGroup=\"categories\">\n <mat-label>\u5206\u7C7B</mat-label>\n <mat-select\n multiple\n name=\"id\"\n [compareWith]=\"compareFn\"\n [(ngModel)]=\"course.categories\"\n #select=\"matSelect\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @for (item of categories; track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7C7B\u578B</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"course.type\">\n @for (item of courseType; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (course.type.toString() !== 'ONLINE') {\n <mat-form-field appearance=\"fill\" ngModelGroup=\"classroom\">\n <mat-label>\u6559\u5BA4</mat-label>\n <mat-select [(ngModel)]=\"course.classroom\" name=\"id\">\n @for (classroom of classrooms; track classroom) {\n <mat-option [value]=\"classroom.id\">\n <div class=\"flex gap-3\">\n <span>{{ classroom.name }}</span>\n <span> {{ classroom.address }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n <div>\n <div class=\"py-3\">\n <h2>\u56FE\u7247\u4FE1\u606F</h2>\n </div>\n <rolatech-media-list (upload)=\"onUpload($event)\" [isUploading]=\"isUploading\">\n @for (item of course.media; track item; let i = $index) {\n <rolatech-media-list-item [media]=\"item\" (mediaItemClick)=\"onImageClick(i)\"></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #detailForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of course.details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #pricingForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u4EF7\u683C</ng-template>\n <div>\n @for (item of course.pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n <mat-step>\n <form #scheduleForm=\"ngForm\">\n <ng-template matStepLabel>\u8BFE\u8868</ng-template>\n <div class=\"flex flex-col\">\n @for (item of course.schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n </mat-stepper>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n @if (!firstStepper) {\n <button mat-button mat-button (click)=\"previous()\">\u4E0A\u4E00\u6B65</button>\n }\n @if (!lastStepper) {\n <button mat-button (click)=\"next()\">\u4E0B\u4E00\u6B65</button>\n }\n @if (lastStepper) {\n <button mat-button [mat-dialog-close]=\"course\" cdkFocusInitial>\u4FDD\u5B58</button>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "component", type: i6.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i6.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i6.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: MediaListComponent, selector: "rolatech-media-list", inputs: ["isUploading", "media", "showAdd"], outputs: ["mediaItemClick", "upload"] }, { kind: "component", type: MediaListItemComponent, selector: "rolatech-media-list-item", inputs: ["media", "uploadProgress"], outputs: ["mediaItemClick", "deleteMedia"] }, { kind: "component", type: DetailItemComponent, selector: "rolatech-detail-item", inputs: ["isUploading", "detail", "actions", "selectMedia"], outputs: ["upload", "delete", "save", "deleteMedia"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions"], outputs: ["delete", "save"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
|
|
208
|
-
}
|
|
209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseEditDialogComponent, decorators: [{
|
|
210
|
-
type: Component,
|
|
211
|
-
args: [{ selector: 'rolatech-course-edit-dialog', standalone: true, imports: [
|
|
212
|
-
MatIconModule,
|
|
213
|
-
MatDividerModule,
|
|
214
|
-
MatStepperModule,
|
|
215
|
-
FormsModule,
|
|
216
|
-
MatFormFieldModule,
|
|
217
|
-
MatInputModule,
|
|
218
|
-
TextFieldModule,
|
|
219
|
-
MatSelectModule,
|
|
220
|
-
MatOptionModule,
|
|
221
|
-
MediaListComponent,
|
|
222
|
-
MediaListItemComponent,
|
|
223
|
-
DetailItemComponent,
|
|
224
|
-
MatButtonModule,
|
|
225
|
-
PricingItemComponent,
|
|
226
|
-
ScheduleItemComponent,
|
|
227
|
-
MatDialogClose,
|
|
228
|
-
], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <mat-stepper #stepper (selectionChange)=\"onStepperChange($event)\">\n <mat-step [editable]=\"true\">\n <form #infoForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u57FA\u672C\u4FE1\u606F</ng-template>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"course.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"course.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" ngModelGroup=\"categories\">\n <mat-label>\u5206\u7C7B</mat-label>\n <mat-select\n multiple\n name=\"id\"\n [compareWith]=\"compareFn\"\n [(ngModel)]=\"course.categories\"\n #select=\"matSelect\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @for (item of categories; track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7C7B\u578B</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"course.type\">\n @for (item of courseType; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (course.type.toString() !== 'ONLINE') {\n <mat-form-field appearance=\"fill\" ngModelGroup=\"classroom\">\n <mat-label>\u6559\u5BA4</mat-label>\n <mat-select [(ngModel)]=\"course.classroom\" name=\"id\">\n @for (classroom of classrooms; track classroom) {\n <mat-option [value]=\"classroom.id\">\n <div class=\"flex gap-3\">\n <span>{{ classroom.name }}</span>\n <span> {{ classroom.address }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n <div>\n <div class=\"py-3\">\n <h2>\u56FE\u7247\u4FE1\u606F</h2>\n </div>\n <rolatech-media-list (upload)=\"onUpload($event)\" [isUploading]=\"isUploading\">\n @for (item of course.media; track item; let i = $index) {\n <rolatech-media-list-item [media]=\"item\" (mediaItemClick)=\"onImageClick(i)\"></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #detailForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of course.details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #pricingForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u4EF7\u683C</ng-template>\n <div>\n @for (item of course.pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n <mat-step>\n <form #scheduleForm=\"ngForm\">\n <ng-template matStepLabel>\u8BFE\u8868</ng-template>\n <div class=\"flex flex-col\">\n @for (item of course.schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n </mat-stepper>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n @if (!firstStepper) {\n <button mat-button mat-button (click)=\"previous()\">\u4E0A\u4E00\u6B65</button>\n }\n @if (!lastStepper) {\n <button mat-button (click)=\"next()\">\u4E0B\u4E00\u6B65</button>\n }\n @if (lastStepper) {\n <button mat-button [mat-dialog-close]=\"course\" cdkFocusInitial>\u4FDD\u5B58</button>\n }\n </div>\n</div>\n" }]
|
|
229
|
-
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
230
|
-
type: Inject,
|
|
231
|
-
args: [MAT_DIALOG_DATA]
|
|
232
|
-
}] }, { type: i2.CategoryService }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1lZGl0LWRpYWxvZy9jb3Vyc2UtZWRpdC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWVkaXQtZGlhbG9nL2NvdXJzZS1lZGl0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUs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Q25CLGVBQWUsNk5BQ2Ysb0JBQW9CLGdKQUNwQixxQkFBcUIsOEhBQ3JCLGNBQWM7OzJGQUdMLHlCQUF5QjtrQkF4QnJDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRzNCLElBQUksV0FDUDt3QkFDUCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixjQUFjO3FCQUNmOzswQkFpQ0UsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyLCBNYXRTdGVwcGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBmaW5kTGFzdEluZGV4LCByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2NoZWR1bGVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2NoZWR1bGUtaXRlbS9zY2hlZHVsZS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcmljaW5nSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3ByaWNpbmctaXRlbS9wcmljaW5nLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBEZXRhaWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV0YWlsLWl0ZW0vZGV0YWlsLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFRleHRGaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuaW1wb3J0IHsgSW1hZ2VQcmV2aWV3RGlhbG9nQ29tcG9uZW50LCBNZWRpYUxpc3RDb21wb25lbnQsIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IFNjaGVkdWxlRGF0ZSwgQ291cnNlRGV0YWlsLCBDb3Vyc2VDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ2F0ZWdvcnlTZXJ2aWNlLCBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtZWRpdC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0U3RlcHBlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgVGV4dEZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWVkaWFMaXN0Q29tcG9uZW50LFxuICAgIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgRGV0YWlsSXRlbUNvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgUHJpY2luZ0l0ZW1Db21wb25lbnQsXG4gICAgU2NoZWR1bGVJdGVtQ29tcG9uZW50LFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VFZGl0RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY291cnNlOiBhbnk7XG4gIGlzVXBsb2FkaW5nID0gZmFsc2U7XG4gIGRldGFpbHM6IGFueTtcbiAgcHJpY2luZzogYW55O1xuICBzY2hlZHVsZTogYW55O1xuICBjb3Vyc2VUeXBlID0gW1xuICAgIHtcbiAgICAgIGtleTogJ09OTElORScsXG4gICAgICB2YWx1ZTogJ+e6v+S4iicsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdPRkZMSU5FJyxcbiAgICAgIHZhbHVlOiAn57q/5LiLJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ01JWEVEJyxcbiAgICAgIHZhbHVlOiAn5re35ZCIJyxcbiAgICB9LFxuICBdO1xuICBzZWxlY3RlZENhdGVnb3lJZHMhOiBzdHJpbmdbXTtcbiAgY2F0ZWdvcmllcyE6IENvdXJzZUNhdGVnb3J5W107XG4gIHNlbGVjdGVkQ2F0ZWdvcnkhOiBDb3Vyc2VDYXRlZ29yeTtcbiAgY2xhc3Nyb29tczogYW55O1xuICBkYXRlID0gU2NoZWR1bGVEYXRlO1xuICBsYXN0U3RlcHBlciA9IGZhbHNlO1xuICBmaXJzdFN0ZXBwZXIgPSB0cnVlO1xuICBzdGVwcGVyID0gdmlld0NoaWxkLnJlcXVpcmVkKE1hdFN0ZXBwZXIpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q291cnNlRWRpdERpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2U6IENhdGVnb3J5U2VydmljZSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5jb3Vyc2UgPSBkYXRhLmNvdXJzZTtcbiAgICB0aGlzLmNsYXNzcm9vbXMgPSBkYXRhLmNsYXNzcm9vbXM7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3J5U2VydmljZS5maW5kKHt9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG4gIGNvbXBhcmVGbihvMTogYW55LCBvMjogYW55KSB7XG4gICAgcmV0dXJuIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuICBhZGREZXRhaWwoKSB7XG4gICAgaWYgKCF0aGlzLmNvdXJzZS5kZXRhaWxzKSB7XG4gICAgICB0aGlzLmNvdXJzZS5kZXRhaWxzID0gW107XG4gICAgfVxuICAgIHRoaXMuY291cnNlU2VydmljZVxuICAgICAgLmFkZERldGFpbCh0aGlzLmNvdXJzZS5pZCwge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgY29udGVudDogJycsXG4gICAgICAgIG1lZGlhOiBbXSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGV0YWlsID0gcmVzLmRhdGE7XG4gICAgICAgICAgdGhpcy5jb3Vyc2UuZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBkZXRhaWwuaWQsXG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIG1lZGlhOiBbXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGUubWVzc2FnZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuICBhZGRTY2hlZHVsZSgpIHtcbiAgICBpZiAoIXRoaXMuY291cnNlLnNjaGVkdWxlKSB7XG4gICAgICB0aGlzLmNvdXJzZS5zY2hlZHVsZSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNvdXJzZS5zY2hlZHVsZS5wdXNoKHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgIH0pO1xuICB9XG4gIGFkZFByaWNpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmNvdXJzZS5wcmljaW5nKSB7XG4gICAgICB0aGlzLmNvdXJzZS5wcmljaW5nID0gW107XG4gICAgfVxuICAgIHRoaXMuY291cnNlLnByaWNpbmcucHVzaCh7XG4gICAgICBtaW46IDAsXG4gICAgICBtYXg6IDAsXG4gICAgICB0b3RhbDogMCxcbiAgICB9KTtcbiAgfVxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3lJZHMgPSBldmVudC52YWx1ZTtcbiAgfVxuICBvblN0ZXBwZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubGFzdFN0ZXBwZXIgPSBldmVudC5zZWxlY3RlZEluZGV4ID09PSAzO1xuICAgIHRoaXMuZmlyc3RTdGVwcGVyID0gZXZlbnQuc2VsZWN0ZWRJbmRleCA9PT0gMDtcbiAgfVxuICBwcmV2aW91cygpIHtcbiAgICB0aGlzLnN0ZXBwZXIoKS5wcmV2aW91cygpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5zdGVwcGVyKCkubmV4dCgpO1xuICB9XG4gIG9uRGV0YWlsTWVkaWFVcGxvYWQoZXZlbnQ6IGFueSkge31cbiAgb25EZXRhaWxNZWRpYURlbGV0ZShldmVudDogYW55KSB7fVxuICBvbkRldGFpbFNhdmUoZXZlbnQ6IGFueSkge31cbiAgb25EZXRhaWxEZWxldGUoZGV0YWlsOiBDb3Vyc2VEZXRhaWwpIHtcbiAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZGVsZXRlRGV0YWlsKHRoaXMuY291cnNlLmlkLCBkZXRhaWwuaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgcmVtb3ZlKHRoaXMuZGV0YWlscywge1xuICAgICAgICAgIGlkOiBkZXRhaWwuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZS5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgb25JbWFnZUNsaWNrKGk6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oSW1hZ2VQcmV2aWV3RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgd2lkdGg6ICc4MCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2Z1bGwtc2NyZWVuLW1vZGFsJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWVkaWE6IHRoaXMuY291cnNlLm1lZGlhLFxuICAgICAgICBzZWxlY3RlZDogaSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgb25VcGxvYWQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvdXJzZS5tZWRpYSkge1xuICAgICAgICAgICh0aGlzLmNvdXJzZS5tZWRpYSBhcyBhbnkpLnB1c2goe1xuICAgICAgICAgICAgdXJsOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgYWx0OiAndXBsb2FkIGltYWdlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvdXJzZS5tZWRpYSA9IFtdO1xuICAgICAgICAgICh0aGlzLmNvdXJzZS5tZWRpYSBhcyBhbnkpLnB1c2goe1xuICAgICAgICAgICAgdXJsOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgYWx0OiAndXBsb2FkIGltYWdlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kTGFzdEluZGV4KHRoaXMuY291cnNlLm1lZGlhKTtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgaXRlbSBhdCBpbmRleCB1c2luZyBuYXRpdmUgc3BsaWNlXG4gICAgICAgICAgICB0aGlzLmNvdXJzZS5tZWRpYS5zcGxpY2UoaW5kZXgsIDEsIHJlcy5kYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+S4iuS8oOWksei0pTogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cImgtMTYgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB4LTVcIj5cbiAgICBAaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtbWVkaXVtXCI+e3sgZGF0YS50aXRsZSB9fTwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIG10LTMgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPG1hdC1zdGVwcGVyICNzdGVwcGVyIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdGVwcGVyQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDxtYXQtc3RlcCBbZWRpdGFibGVdPVwidHJ1ZVwiPlxuICAgICAgICA8Zm9ybSAjaW5mb0Zvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPuWfuuacrOS/oeaBrzwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPiDor77nqIvlkI3np7AgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY291cnNlLm5hbWVcIiBuYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+IOivvueoi+aPj+i/sCA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb3Vyc2UuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICBjZGtUZXh0YXJlYUF1dG9zaXplXG4gICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiM1wiXG4gICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIG5nTW9kZWxHcm91cD1cImNhdGVnb3JpZXNcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7liIbnsbs8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVGblwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb3Vyc2UuY2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAgICAgI3NlbGVjdD1cIm1hdFNlbGVjdFwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY2F0ZWdvcmllczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+57G75Z6LPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9XCJ0eXBlXCIgWyhuZ01vZGVsKV09XCJjb3Vyc2UudHlwZVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY291cnNlVHlwZTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0ua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICBAaWYgKGNvdXJzZS50eXBlLnRvU3RyaW5nKCkgIT09ICdPTkxJTkUnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIG5nTW9kZWxHcm91cD1cImNsYXNzcm9vbVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+5pWZ5a6kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJjb3Vyc2UuY2xhc3Nyb29tXCIgbmFtZT1cImlkXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChjbGFzc3Jvb20gb2YgY2xhc3Nyb29tczsgdHJhY2sgY2xhc3Nyb29tKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjbGFzc3Jvb20uaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2xhc3Nyb29tLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY2xhc3Nyb29tLmFkZHJlc3MgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgICAgIDxoMj7lm77niYfkv6Hmga88L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cm9sYXRlY2gtbWVkaWEtbGlzdCAodXBsb2FkKT1cIm9uVXBsb2FkKCRldmVudClcIiBbaXNVcGxvYWRpbmddPVwiaXNVcGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb3Vyc2UubWVkaWE7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHJvbGF0ZWNoLW1lZGlhLWxpc3QtaXRlbSBbbWVkaWFdPVwiaXRlbVwiIChtZWRpYUl0ZW1DbGljayk9XCJvbkltYWdlQ2xpY2soaSlcIj48L3JvbGF0ZWNoLW1lZGlhLWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9yb2xhdGVjaC1tZWRpYS1saXN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L21hdC1zdGVwPlxuICAgICAgPG1hdC1zdGVwIFtlZGl0YWJsZV09XCJ0cnVlXCI+XG4gICAgICAgIDxmb3JtICNkZXRhaWxGb3JtPVwibmdGb3JtXCIgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7or6bmg4U8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY291cnNlLmRldGFpbHM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgIDxyb2xhdGVjaC1kZXRhaWwtaXRlbVxuICAgICAgICAgICAgICBbZGV0YWlsXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAodXBsb2FkKT1cIm9uRGV0YWlsTWVkaWFVcGxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChkZWxldGVNZWRpYSk9XCJvbkRldGFpbE1lZGlhRGVsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2F2ZSk9XCJvbkRldGFpbFNhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChkZWxldGUpPVwib25EZXRhaWxEZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9yb2xhdGVjaC1kZXRhaWwtaXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkRGV0YWlsKClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPuWinuWKoOivpuaDhTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L21hdC1zdGVwPlxuICAgICAgPG1hdC1zdGVwIFtlZGl0YWJsZV09XCJ0cnVlXCI+XG4gICAgICAgIDxmb3JtICNwcmljaW5nRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicHktM1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+5Lu35qC8PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb3Vyc2UucHJpY2luZzsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICA8cm9sYXRlY2gtcHJpY2luZy1pdGVtIFtwcmljaW5nXT1cIml0ZW1cIj4gPC9yb2xhdGVjaC1wcmljaW5nLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImFkZFByaWNpbmcoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPuWinuWKoOS7t+agvDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9tYXQtc3RlcD5cbiAgICAgIDxtYXQtc3RlcD5cbiAgICAgICAgPGZvcm0gI3NjaGVkdWxlRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+6K++6KGoPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb3Vyc2Uuc2NoZWR1bGU7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgPHJvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0gW3ZhbHVlXT1cIml0ZW1cIj48L3JvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImFkZFNjaGVkdWxlKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj7lop7liqDor77ooag8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvbWF0LXN0ZXA+XG4gICAgPC9tYXQtc3RlcHBlcj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgQGlmICghZmlyc3RTdGVwcGVyKSB7XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwicHJldmlvdXMoKVwiPuS4iuS4gOatpTwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKCFsYXN0U3RlcHBlcikge1xuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJuZXh0KClcIj7kuIvkuIDmraU8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChsYXN0U3RlcHBlcikge1xuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImNvdXJzZVwiIGNka0ZvY3VzSW5pdGlhbD7kv53lrZg8L2J1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Component, effect, input } from '@angular/core';
|
|
2
|
-
import { RouterModule } from '@angular/router';
|
|
3
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/material/icon";
|
|
6
|
-
import * as i2 from "@angular/router";
|
|
7
|
-
export class CourseInfoComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.course = input.required();
|
|
10
|
-
this.instructor = input();
|
|
11
|
-
this.username = input();
|
|
12
|
-
this.dataToDisplay = effect(() => {
|
|
13
|
-
return this.course();
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseInfoComponent, isStandalone: true, selector: "rolatech-course-info", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, instructor: { classPropertyName: "instructor", publicName: "instructor", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div>\n <div>\n <div class=\"text-2xl font-medium\">{{ course().name }}</div>\n @if (course().type && course().type.toString() !== 'ONLINE') {\n <div class=\"flex items-center pt-2\">\n <mat-icon>place</mat-icon>\n <span class=\"text-sm opacity-75\">{{ course().classroom.address }}</span>\n </div>\n }\n <div class=\"py-3 flex justify-between\">\n <div>\n <div class=\"mb-1 flex items-center\">\n <span class=\"font-medium\">\u4E3B\u8BB2\u6559\u5E08: </span>\n <a class=\"ml-2 underline text-[--rt-brand-color] text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{\n instructor()\n }}</a>\n </div>\n <span class=\"text-sm opacity-75\">\u6700\u540E\u7F16\u8F91: {{ course().updatedAt }} </span>\n </div>\n </div>\n </div>\n <!-- \u63CF\u8FF0 -->\n <div class=\"mb-3\">\n {{ course().description }}\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseInfoComponent, decorators: [{
|
|
20
|
-
type: Component,
|
|
21
|
-
args: [{ selector: 'rolatech-course-info', standalone: true, imports: [MatIconModule, RouterModule], template: "<div>\n <div>\n <div class=\"text-2xl font-medium\">{{ course().name }}</div>\n @if (course().type && course().type.toString() !== 'ONLINE') {\n <div class=\"flex items-center pt-2\">\n <mat-icon>place</mat-icon>\n <span class=\"text-sm opacity-75\">{{ course().classroom.address }}</span>\n </div>\n }\n <div class=\"py-3 flex justify-between\">\n <div>\n <div class=\"mb-1 flex items-center\">\n <span class=\"font-medium\">\u4E3B\u8BB2\u6559\u5E08: </span>\n <a class=\"ml-2 underline text-[--rt-brand-color] text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{\n instructor()\n }}</a>\n </div>\n <span class=\"text-sm opacity-75\">\u6700\u540E\u7F16\u8F91: {{ course().updatedAt }} </span>\n </div>\n </div>\n </div>\n <!-- \u63CF\u8FF0 -->\n <div class=\"mb-3\">\n {{ course().description }}\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"] }]
|
|
22
|
-
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBVXZELE1BQU0sT0FBTyxtQkFBbUI7SUFQaEM7UUFRRSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM3QixhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0tBQ0o7OEdBUFksbUJBQW1CO2tHQUFuQixtQkFBbUIsOGRDWmhDLHc2QkEwQkEsd0ZEaEJZLGFBQWEsbUxBQUUsWUFBWTs7MkZBRTFCLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxzQkFBc0IsY0FHcEIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IENvdXJzZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1pbmZvLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VJbmZvQ29tcG9uZW50IHtcbiAgY291cnNlID0gaW5wdXQucmVxdWlyZWQ8Q291cnNlPigpO1xuICBpbnN0cnVjdG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VybmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0YVRvRGlzcGxheSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY291cnNlKCk7XG4gIH0pO1xufVxuIiwiPGRpdj5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC0yeGwgZm9udC1tZWRpdW1cIj57eyBjb3Vyc2UoKS5uYW1lIH19PC9kaXY+XG4gICAgQGlmIChjb3Vyc2UoKS50eXBlICYmIGNvdXJzZSgpLnR5cGUudG9TdHJpbmcoKSAhPT0gJ09OTElORScpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwdC0yXCI+XG4gICAgICAgIDxtYXQtaWNvbj5wbGFjZTwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBvcGFjaXR5LTc1XCI+e3sgY291cnNlKCkuY2xhc3Nyb29tLmFkZHJlc3MgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInB5LTMgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bVwiPuS4u+iusuaVmeW4iDogPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwibWwtMiB1bmRlcmxpbmUgdGV4dC1bLS1ydC1icmFuZC1jb2xvcl0gdGV4dC1bMC45cmVtXVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0AnICsgdXNlcm5hbWUoKV1cIj57e1xuICAgICAgICAgICAgaW5zdHJ1Y3RvcigpXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gb3BhY2l0eS03NVwiPuacgOWQjue8lui+kToge3sgY291cnNlKCkudXBkYXRlZEF0IH19IDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSDmj4/ov7AgLS0+XG4gIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAge3sgY291cnNlKCkuZGVzY3JpcHRpb24gfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, booleanAttribute, input } from '@angular/core';
|
|
3
|
-
import { ImageComponent, ThumbnailComponent } from '@rolatech/angular-components';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class CourseItemComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.course = input.required();
|
|
8
|
-
this.row = input(true);
|
|
9
|
-
this.inset = input(false, { transform: booleanAttribute });
|
|
10
|
-
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseItemComponent, isStandalone: true, selector: "rolatech-course-item", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (row()) {\n <div class=\"flex w-full flex-row\" [style]=\"inset() ? 'padding: 0 16px' : ''\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-10-percent-layer] rounded-lg\">\n @if (course().media) {\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n }\n </div>\n <div class=\"w-3/5 md:w-3/4 ml-3 flex flex-col justify-between\">\n <div>\n <div class=\"md:text-xl font-medium break-words line-clamp-1 md:line-clamp-2 whitespace-normal\">\n {{ course().name }}\n </div>\n <div class=\"invisible h-0 md:h-auto md:visible break-words line-clamp-1 whitespace-normal\">\n {{ course().description }}\n </div>\n </div>\n @if (course().pricing) {\n <div class=\"md:text-lg font-medium py-1\">\u00A5{{ (course().pricing[0].total / 100).toFixed(2) }}</div>\n }\n </div>\n </div>\n} @else {\n <div>\n <div>\n @if (course().media; as media) {\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] w-full h-full object-cover aspect-video rounded-lg\"></div>\n }\n }\n </div>\n <div class=\"mt-2\">\n <div class=\"text-md md:text-xl font-medium break-words line-clamp-2\">{{ course().name }}</div>\n @if (course().pricing) {\n <div class=\"text-md md:text-lg font-medium py-1\">\u00A5{{ (course().pricing[0].total / 100).toFixed(2) }}</div>\n }\n </div>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], deferBlockDependencies: [() => [ThumbnailComponent], () => [ThumbnailComponent]] }); }
|
|
13
|
-
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseItemComponent, decorators: [{
|
|
15
|
-
type: Component,
|
|
16
|
-
args: [{ selector: 'rolatech-course-item', standalone: true, imports: [CommonModule, ImageComponent, ThumbnailComponent], template: "@if (row()) {\n <div class=\"flex w-full flex-row\" [style]=\"inset() ? 'padding: 0 16px' : ''\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-10-percent-layer] rounded-lg\">\n @if (course().media) {\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n }\n </div>\n <div class=\"w-3/5 md:w-3/4 ml-3 flex flex-col justify-between\">\n <div>\n <div class=\"md:text-xl font-medium break-words line-clamp-1 md:line-clamp-2 whitespace-normal\">\n {{ course().name }}\n </div>\n <div class=\"invisible h-0 md:h-auto md:visible break-words line-clamp-1 whitespace-normal\">\n {{ course().description }}\n </div>\n </div>\n @if (course().pricing) {\n <div class=\"md:text-lg font-medium py-1\">\u00A5{{ (course().pricing[0].total / 100).toFixed(2) }}</div>\n }\n </div>\n </div>\n} @else {\n <div>\n <div>\n @if (course().media; as media) {\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] w-full h-full object-cover aspect-video rounded-lg\"></div>\n }\n }\n </div>\n <div class=\"mt-2\">\n <div class=\"text-md md:text-xl font-medium break-words line-clamp-2\">{{ course().name }}</div>\n @if (course().pricing) {\n <div class=\"text-md md:text-lg font-medium py-1\">\u00A5{{ (course().pricing[0].total / 100).toFixed(2) }}</div>\n }\n </div>\n </div>\n}\n" }]
|
|
17
|
-
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWl0ZW0vY291cnNlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWl0ZW0vY291cnNlLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFVbEYsTUFBTSxPQUFPLG1CQUFtQjtJQVBoQztRQVFFLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDbEMsUUFBRyxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUMzQixVQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7S0FDdkQ7OEdBSlksbUJBQW1CO2tHQUFuQixtQkFBbUIsZ2NDWmhDLHN5REE0Q0EseUREbENZLFlBQVkscUNBQWtCLGtCQUFrQixVQUFsQixrQkFBa0I7OzJGQUUvQyxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBib29sZWFuQXR0cmlidXRlLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VDb21wb25lbnQsIFRodW1ibmFpbENvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ291cnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdXJzZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW1hZ2VDb21wb25lbnQsIFRodW1ibmFpbENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZUl0ZW1Db21wb25lbnQge1xuICBjb3Vyc2UgPSBpbnB1dC5yZXF1aXJlZDxDb3Vyc2U+KCk7XG4gIHJvdyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBpbnNldCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbn1cbiIsIkBpZiAocm93KCkpIHtcbiAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtcm93XCIgW3N0eWxlXT1cImluc2V0KCkgPyAncGFkZGluZzogMCAxNnB4JyA6ICcnXCI+XG4gICAgPGRpdiBjbGFzcz1cImgtZml0IHctMi81IG1kOnctMS80IGFzcGVjdC12aWRlbyBiZy1bLS1ydC0xMC1wZXJjZW50LWxheWVyXSByb3VuZGVkLWxnXCI+XG4gICAgICBAaWYgKGNvdXJzZSgpLm1lZGlhKSB7XG4gICAgICAgIEBkZWZlciAob24gdmlld3BvcnQoKSkge1xuICAgICAgICAgIDxyb2xhdGVjaC10aHVtYm5haWwgW3NyY109XCJjb3Vyc2UoKS5tZWRpYVswXS51cmwgKyAnIXc0MDAnXCIgc2l6ZT1cIm1lZGl1bVwiPjwvcm9sYXRlY2gtdGh1bWJuYWlsPlxuICAgICAgICB9IEBwbGFjZWhvbGRlciB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJnLVstLXJ0LTEwLXBlcmNlbnQtbGF5ZXJdIGgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyIGFzcGVjdC12aWRlbyByb3VuZGVkLWxnXCI+PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidy0zLzUgbWQ6dy0zLzQgbWwtMyBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1kOnRleHQteGwgZm9udC1tZWRpdW0gYnJlYWstd29yZHMgbGluZS1jbGFtcC0xIG1kOmxpbmUtY2xhbXAtMiB3aGl0ZXNwYWNlLW5vcm1hbFwiPlxuICAgICAgICAgIHt7IGNvdXJzZSgpLm5hbWUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpc2libGUgaC0wIG1kOmgtYXV0byBtZDp2aXNpYmxlIGJyZWFrLXdvcmRzIGxpbmUtY2xhbXAtMSB3aGl0ZXNwYWNlLW5vcm1hbFwiPlxuICAgICAgICAgIHt7IGNvdXJzZSgpLmRlc2NyaXB0aW9uIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGNvdXJzZSgpLnByaWNpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1kOnRleHQtbGcgZm9udC1tZWRpdW0gcHktMVwiPsKle3sgKGNvdXJzZSgpLnByaWNpbmdbMF0udG90YWwgLyAxMDApLnRvRml4ZWQoMikgfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPGRpdj5cbiAgICA8ZGl2PlxuICAgICAgQGlmIChjb3Vyc2UoKS5tZWRpYTsgYXMgbWVkaWEpIHtcbiAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydCgpKSB7XG4gICAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbCBbc3JjXT1cImNvdXJzZSgpLm1lZGlhWzBdLnVybCArICchdzQwMCdcIiBzaXplPVwibWVkaXVtXCI+PC9yb2xhdGVjaC10aHVtYm5haWw+XG4gICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWy0tcnQtMTAtcGVyY2VudC1sYXllcl0gdy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgYXNwZWN0LXZpZGVvIHJvdW5kZWQtbGdcIj48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtZDp0ZXh0LXhsIGZvbnQtbWVkaXVtIGJyZWFrLXdvcmRzIGxpbmUtY2xhbXAtMlwiPnt7IGNvdXJzZSgpLm5hbWUgfX08L2Rpdj5cbiAgICAgIEBpZiAoY291cnNlKCkucHJpY2luZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtZDp0ZXh0LWxnIGZvbnQtbWVkaXVtIHB5LTFcIj7CpXt7IChjb3Vyc2UoKS5wcmljaW5nWzBdLnRvdGFsIC8gMTAwKS50b0ZpeGVkKDIpIH19PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Component, inject, input } from '@angular/core';
|
|
2
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { NgClass } from '@angular/common';
|
|
4
|
-
import { ImagePreviewDialogComponent, ThumbnailComponent } from '@rolatech/angular-components';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class CourseMediaComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.dialog = inject(MatDialog);
|
|
9
|
-
this.media = input([]);
|
|
10
|
-
this.min = input(false);
|
|
11
|
-
this.mediaIndex = 0;
|
|
12
|
-
}
|
|
13
|
-
onImageClick(i) {
|
|
14
|
-
const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {
|
|
15
|
-
maxWidth: '80vw',
|
|
16
|
-
maxHeight: '80vh',
|
|
17
|
-
height: '80%',
|
|
18
|
-
width: '80%',
|
|
19
|
-
panelClass: 'full-screen-modal',
|
|
20
|
-
data: {
|
|
21
|
-
media: this.media,
|
|
22
|
-
selected: i,
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
dialogRef.afterClosed().subscribe((result) => { });
|
|
26
|
-
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseMediaComponent, isStandalone: true, selector: "rolatech-course-media", inputs: { media: { classPropertyName: "media", publicName: "media", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (media()) {\n @if (min()) {\n <div class=\"md:w-80 object-cover aspect-video bg-[--rt-10-percent-layer] rounded-lg\">\n @if (media()) {\n <rolatech-thumbnail [src]=\"media()[0].url\" size=\"small\"></rolatech-thumbnail>\n }\n </div>\n } @else {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-10-percent-layer]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\"></rolatech-thumbnail>\n </div>\n @for (item of media(); track $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer rounded-md\"\n (click)=\"mediaIndex = $index\"\n [ngClass]=\"mediaIndex === $index ? '' : 'opacity-30'\"\n >\n <rolatech-thumbnail [src]=\"item.url\" size=\"small\"></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }] }); }
|
|
29
|
-
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaComponent, decorators: [{
|
|
31
|
-
type: Component,
|
|
32
|
-
args: [{ selector: 'rolatech-course-media', standalone: true, imports: [NgClass, ThumbnailComponent], template: "@if (media()) {\n @if (min()) {\n <div class=\"md:w-80 object-cover aspect-video bg-[--rt-10-percent-layer] rounded-lg\">\n @if (media()) {\n <rolatech-thumbnail [src]=\"media()[0].url\" size=\"small\"></rolatech-thumbnail>\n }\n </div>\n } @else {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-10-percent-layer]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\"></rolatech-thumbnail>\n </div>\n @for (item of media(); track $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer rounded-md\"\n (click)=\"mediaIndex = $index\"\n [ngClass]=\"mediaIndex === $index ? '' : 'opacity-30'\"\n >\n <rolatech-thumbnail [src]=\"item.url\" size=\"small\"></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n}\n" }]
|
|
33
|
-
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLW1lZGlhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1tZWRpYS9jb3Vyc2UtbWVkaWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLW1lZGlhL2NvdXJzZS1tZWRpYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFVL0YsTUFBTSxPQUFPLG9CQUFvQjtJQVBqQztRQVFFLFdBQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsVUFBSyxHQUFHLEtBQUssQ0FBVSxFQUFFLENBQUMsQ0FBQztRQUMzQixRQUFHLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBRyxDQUFDLENBQUM7S0FlaEI7SUFkQyxZQUFZLENBQUMsQ0FBTTtRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUM5RCxRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxLQUFLO1lBQ1osVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixRQUFRLEVBQUUsQ0FBQzthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQzs4R0FsQlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsdVVDYmpDLHEyQkF3QkEsMEREYlksT0FBTyxvRkFBRSxrQkFBa0I7OzJGQUUxQixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW1hZ2VQcmV2aWV3RGlhbG9nQ29tcG9uZW50LCBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IE1lZGlhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1tZWRpYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtbWVkaWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2UtbWVkaWEuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIFRodW1ibmFpbENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZU1lZGlhQ29tcG9uZW50IHtcbiAgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIG1lZGlhID0gaW5wdXQ8TWVkaWFbXT4oW10pO1xuICBtaW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIG1lZGlhSW5kZXggPSAwO1xuICBvbkltYWdlQ2xpY2soaTogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbWFnZVByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZnVsbC1zY3JlZW4tbW9kYWwnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZWRpYTogdGhpcy5tZWRpYSxcbiAgICAgICAgc2VsZWN0ZWQ6IGksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7fSk7XG4gIH1cbn1cbiIsIkBpZiAobWVkaWEoKSkge1xuICBAaWYgKG1pbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1kOnctODAgb2JqZWN0LWNvdmVyIGFzcGVjdC12aWRlbyBiZy1bLS1ydC0xMC1wZXJjZW50LWxheWVyXSByb3VuZGVkLWxnXCI+XG4gICAgICBAaWYgKG1lZGlhKCkpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbCBbc3JjXT1cIm1lZGlhKClbMF0udXJsXCIgc2l6ZT1cInNtYWxsXCI+PC9yb2xhdGVjaC10aHVtYm5haWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LWNvdmVyIGFzcGVjdC12aWRlbyBiZy1bLS1ydC0xMC1wZXJjZW50LWxheWVyXVwiPlxuICAgICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsIFtzcmNdPVwibWVkaWEoKVttZWRpYUluZGV4XS51cmxcIiBzaXplPVwic21hbGxcIj48L3JvbGF0ZWNoLXRodW1ibmFpbD5cbiAgICAgIDwvZGl2PlxuICAgICAgQGZvciAoaXRlbSBvZiBtZWRpYSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggZmxleC1yb3cgbXQtMyBtci0zIGN1cnNvci1wb2ludGVyIHJvdW5kZWQtbWRcIlxuICAgICAgICAgIChjbGljayk9XCJtZWRpYUluZGV4ID0gJGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJtZWRpYUluZGV4ID09PSAkaW5kZXggPyAnJyA6ICdvcGFjaXR5LTMwJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsIFtzcmNdPVwiaXRlbS51cmxcIiBzaXplPVwic21hbGxcIj48L3JvbGF0ZWNoLXRodW1ibmFpbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbn1cbiJdfQ==
|
package/esm2022/lib/components/course-media-owner-renderer/course-media-owner-renderer.component.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Component, input } from '@angular/core';
|
|
2
|
-
import { AngularCommonModule } from '@rolatech/angular-common';
|
|
3
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/router";
|
|
6
|
-
import * as i2 from "@angular/material/icon";
|
|
7
|
-
export class CourseMediaOwnerRendererComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.name = input();
|
|
10
|
-
this.avatar = input();
|
|
11
|
-
this.username = input();
|
|
12
|
-
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaOwnerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseMediaOwnerRendererComponent, isStandalone: true, selector: "rolatech-course-media-owner-renderer", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-11 h-11 rounded-full\" />\n </div>\n } @else {\n <div class=\"w-11 h-11 rounded-full bg-[--rt-brand-color]\"></div>\n }\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon color=\"primary\">verified</mat-icon>\n </div>\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
15
|
-
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaOwnerRendererComponent, decorators: [{
|
|
17
|
-
type: Component,
|
|
18
|
-
args: [{ selector: 'rolatech-course-media-owner-renderer', standalone: true, imports: [AngularCommonModule, MatIconModule], template: "<div class=\"flex flex-row items-center\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-11 h-11 rounded-full\" />\n </div>\n } @else {\n <div class=\"w-11 h-11 rounded-full bg-[--rt-brand-color]\"></div>\n }\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon color=\"primary\">verified</mat-icon>\n </div>\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"] }]
|
|
19
|
-
}] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci9jb3Vyc2UtbWVkaWEtb3duZXItcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFTdkQsTUFBTSxPQUFPLGlDQUFpQztJQVA5QztRQVFFLFNBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUN2QixXQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0tBQzVCOzhHQUpZLGlDQUFpQztrR0FBakMsaUNBQWlDLDZkQ1g5QyxzbkJBaUJBLHdGRFZZLG1CQUFtQiwrUUFBRSxhQUFhOzsyRkFJakMsaUNBQWlDO2tCQVA3QyxTQUFTOytCQUNFLHNDQUFzQyxjQUNwQyxJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FuZ3VsYXJDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZU1lZGlhT3duZXJSZW5kZXJlckNvbXBvbmVudCB7XG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlcm5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggbXItMyBnYXAtMiBpdGVtcy1jZW50ZXJcIj5cbiAgICBAaWYgKGF2YXRhcigpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiYXZhdGFyKClcIiBjbGFzcz1cInctMTEgaC0xMSByb3VuZGVkLWZ1bGxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMSBoLTExIHJvdW5kZWQtZnVsbCBiZy1bLS1ydC1icmFuZC1jb2xvcl1cIj48L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtbGcgZm9udC1ib2xkIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8c3Bhbj57eyBuYW1lKCkgfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+dmVyaWZpZWQ8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class CoursePreviewComponent {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: CoursePreviewComponent, isStandalone: true, selector: "rolatech-course-preview", ngImport: i0, template: "<p>course-preview works!</p>\n", styles: [""] }); }
|
|
6
|
-
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePreviewComponent, decorators: [{
|
|
8
|
-
type: Component,
|
|
9
|
-
args: [{ selector: 'rolatech-course-preview', standalone: true, imports: [], template: "<p>course-preview works!</p>\n" }]
|
|
10
|
-
}] });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByZXZpZXcvY291cnNlLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByZXZpZXcvY291cnNlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTMUMsTUFBTSxPQUFPLHNCQUFzQjs4R0FBdEIsc0JBQXNCO2tHQUF0QixzQkFBc0IsbUZDVG5DLGdDQUNBOzsyRkRRYSxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmV2aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVByZXZpZXdDb21wb25lbnQge31cbiIsIjxwPmNvdXJzZS1wcmV2aWV3IHdvcmtzITwvcD5cbiJdfQ==
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Component, input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class CoursePricingComponent {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.pricing = input([]);
|
|
6
|
-
}
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CoursePricingComponent, isStandalone: true, selector: "rolatech-course-pricing", inputs: { pricing: { classPropertyName: "pricing", publicName: "pricing", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (pricing()) {\n <div class=\"py-3\">\n <div class=\"text-lg font-medium py-2\">\u4EF7\u683C</div>\n @for (item of pricing(); track $index) {\n <div>\n <span>{{ item.min }} \u81F3 {{ item.max }}\u4EBA</span>\n <span class=\"ml-3\">{{ (item.total / 100).toFixed(2) }}\u5143</span>\n </div>\n }\n </div>\n}\n", styles: [""] }); }
|
|
9
|
-
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingComponent, decorators: [{
|
|
11
|
-
type: Component,
|
|
12
|
-
args: [{ selector: 'rolatech-course-pricing', standalone: true, template: "@if (pricing()) {\n <div class=\"py-3\">\n <div class=\"text-lg font-medium py-2\">\u4EF7\u683C</div>\n @for (item of pricing(); track $index) {\n <div>\n <span>{{ item.min }} \u81F3 {{ item.max }}\u4EBA</span>\n <span class=\"ml-3\">{{ (item.total / 100).toFixed(2) }}\u5143</span>\n </div>\n }\n </div>\n}\n" }]
|
|
13
|
-
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmcvY291cnNlLXByaWNpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmcvY291cnNlLXByaWNpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBU2pELE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPRSxZQUFPLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztLQUN0Qzs4R0FGWSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw2TkNUbkMsMFZBV0E7OzJGREZhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FHdkIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvdXJzZVByaWNpbmcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXByaWNpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXByaWNpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2UtcHJpY2luZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VQcmljaW5nQ29tcG9uZW50IHtcbiAgcHJpY2luZyA9IGlucHV0PENvdXJzZVByaWNpbmdbXT4oW10pO1xufVxuIiwiQGlmIChwcmljaW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBmb250LW1lZGl1bSBweS0yXCI+5Lu35qC8PC9kaXY+XG4gICAgQGZvciAoaXRlbSBvZiBwcmljaW5nKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPHNwYW4+e3sgaXRlbS5taW4gfX0g6IezIHt7IGl0ZW0ubWF4IH195Lq6PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTNcIj57eyAoaXRlbS50b3RhbCAvIDEwMCkudG9GaXhlZCgyKSB9feWFgzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
package/esm2022/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Component, output } from '@angular/core';
|
|
2
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
3
|
-
import { PricingItemComponent } from '../pricing-item/pricing-item.component';
|
|
4
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class CoursePricingAddDialogComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.output = output();
|
|
9
|
-
this.pricing = {
|
|
10
|
-
min: 0,
|
|
11
|
-
max: 0,
|
|
12
|
-
total: 0,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
ngDoCheck() {
|
|
16
|
-
this.output.emit(this.pricing);
|
|
17
|
-
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingAddDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: CoursePricingAddDialogComponent, isStandalone: true, selector: "rolatech-course-pricing-add-dialog", outputs: { output: "output" }, ngImport: i0, template: "<rolatech-pricing-item [pricing]=\"pricing\"></rolatech-pricing-item>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }] }); }
|
|
20
|
-
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingAddDialogComponent, decorators: [{
|
|
22
|
-
type: Component,
|
|
23
|
-
args: [{ selector: 'rolatech-course-pricing-add-dialog', standalone: true, imports: [MatIconModule, PricingItemComponent, MatButtonModule], template: "<rolatech-pricing-item [pricing]=\"pricing\"></rolatech-pricing-item>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
24
|
-
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2UtcHJpY2luZy1hZGQtZGlhbG9nL2NvdXJzZS1wcmljaW5nLWFkZC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy9jb3Vyc2UtcHJpY2luZy1hZGQtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVcsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBVXZELE1BQU0sT0FBTywrQkFBK0I7SUFQNUM7UUFRRSxXQUFNLEdBQUcsTUFBTSxFQUFPLENBQUM7UUFDdkIsWUFBTyxHQUFZO1lBQ2pCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7S0FJSDtJQUhDLFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzs4R0FUVSwrQkFBK0I7a0dBQS9CLCtCQUErQiw2SENiNUMseUVBQ0EscUZEVVksYUFBYSwrQkFBRSxvQkFBb0IsK0lBQUUsZUFBZTs7MkZBRW5ELCtCQUErQjtrQkFQM0MsU0FBUzsrQkFDRSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRG9DaGVjaywgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgUHJpY2luZ0l0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9wcmljaW5nLWl0ZW0vcHJpY2luZy1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBQcmljaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmljaW5nLWFkZC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1wcmljaW5nLWFkZC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIFByaWNpbmdJdGVtQ29tcG9uZW50LCBNYXRCdXR0b25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VQcmljaW5nQWRkRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG4gIG91dHB1dCA9IG91dHB1dDxhbnk+KCk7XG4gIHByaWNpbmc6IFByaWNpbmcgPSB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMCxcbiAgICB0b3RhbDogMCxcbiAgfTtcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0LmVtaXQodGhpcy5wcmljaW5nKTtcbiAgfVxufVxuIiwiPHJvbGF0ZWNoLXByaWNpbmctaXRlbSBbcHJpY2luZ109XCJwcmljaW5nXCI+PC9yb2xhdGVjaC1wcmljaW5nLWl0ZW0+XG4iXX0=
|