@rolatech/angular-course 17.6.2 → 17.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,10 +20,10 @@ export class CourseActionComponent {
20
20
  this.checkout.emit(course);
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: CourseActionComponent, isStandalone: true, selector: "rolatech-course-action", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cart: "cart", wish: "wish", checkout: "checkout" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-orange-600 text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }] }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: CourseActionComponent, isStandalone: true, selector: "rolatech-course-action", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cart: "cart", wish: "wish", checkout: "checkout" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-[--rt-brand-color] text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }] }); }
24
24
  }
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseActionComponent, decorators: [{
26
26
  type: Component,
27
- args: [{ standalone: true, selector: 'rolatech-course-action', imports: [MatButtonModule], template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-orange-600 text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n" }]
27
+ args: [{ standalone: true, selector: 'rolatech-course-action', imports: [MatButtonModule], template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-[--rt-brand-color] text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n" }]
28
28
  }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2UtYWN0aW9uL2NvdXJzZS1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWFjdGlvbi9jb3Vyc2UtYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQVUzRCxNQUFNLE9BQU8scUJBQXFCO0lBUGxDO1FBUUUsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRW5DLFNBQUksR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUN4QixTQUFJLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFDeEIsYUFBUSxHQUFHLE1BQU0sRUFBVSxDQUFDO0tBVzdCO0lBVEMsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxVQUFVLENBQUMsTUFBYztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQWhCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw4WkNYbEMsNGVBT0EseURERVksZUFBZTs7MkZBRWQscUJBQXFCO2tCQVBqQyxTQUFTO2lDQUNJLElBQUksWUFDTix3QkFBd0IsV0FHekIsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBDb3Vyc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLWFjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWFjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlQWN0aW9uQ29tcG9uZW50IHtcbiAgY291cnNlID0gaW5wdXQucmVxdWlyZWQ8Q291cnNlPigpO1xuICBpbldpc2hMaXN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNhcnQgPSBvdXRwdXQ8Q291cnNlPigpO1xuICB3aXNoID0gb3V0cHV0PENvdXJzZT4oKTtcbiAgY2hlY2tvdXQgPSBvdXRwdXQ8Q291cnNlPigpO1xuXG4gIG9uQ2FydChjb3Vyc2U6IENvdXJzZSkge1xuICAgIHRoaXMuY2FydC5lbWl0KGNvdXJzZSk7XG4gIH1cbiAgb25XaXNoKGNvdXJzZTogQ291cnNlKSB7XG4gICAgdGhpcy53aXNoLmVtaXQoY291cnNlKTtcbiAgfVxuICBvbkNoZWNrb3V0KGNvdXJzZTogQ291cnNlKSB7XG4gICAgdGhpcy5jaGVja291dC5lbWl0KGNvdXJzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gIDwhLS0gPGEgY2xhc3M9XCJwLTMgYmctb3JhbmdlLTYwMCB0ZXh0LWNlbnRlciBtdC0zXCIgdGFyZ2V0PVwiX2JsYW5rXCIgKGNsaWNrKT1cIm9uQ2FydChjb3Vyc2UpXCI+5Yqg5YWl6LSt54mp6L2mPC9hPiAtLT5cbiAgPGEgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwibXQtMyBtaW4taC0xMVwiIHRhcmdldD1cIl9ibGFua1wiIChjbGljayk9XCJvbkNoZWNrb3V0KGNvdXJzZSgpKVwiPueri+WNs+i0reS5sDwvYT5cbiAgPGEgbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibXQtMyBtaW4taC0xMVwiIHRhcmdldD1cIl9ibGFua1wiIChjbGljayk9XCJvbldpc2goY291cnNlKCkpXCI+e3tcbiAgICBpbldpc2hMaXN0KCkgPyAn56e76Zmk5pS26JePJyA6ICfliqDlhaXmlLbol48nXG4gIH19PC9hPlxuPC9kaXY+XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2UtYWN0aW9uL2NvdXJzZS1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWFjdGlvbi9jb3Vyc2UtYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQVUzRCxNQUFNLE9BQU8scUJBQXFCO0lBUGxDO1FBUUUsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRW5DLFNBQUksR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUN4QixTQUFJLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFDeEIsYUFBUSxHQUFHLE1BQU0sRUFBVSxDQUFDO0tBVzdCO0lBVEMsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxVQUFVLENBQUMsTUFBYztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQWhCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw4WkNYbEMsb2ZBT0EseURERVksZUFBZTs7MkZBRWQscUJBQXFCO2tCQVBqQyxTQUFTO2lDQUNJLElBQUksWUFDTix3QkFBd0IsV0FHekIsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBDb3Vyc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLWFjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWFjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlQWN0aW9uQ29tcG9uZW50IHtcbiAgY291cnNlID0gaW5wdXQucmVxdWlyZWQ8Q291cnNlPigpO1xuICBpbldpc2hMaXN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNhcnQgPSBvdXRwdXQ8Q291cnNlPigpO1xuICB3aXNoID0gb3V0cHV0PENvdXJzZT4oKTtcbiAgY2hlY2tvdXQgPSBvdXRwdXQ8Q291cnNlPigpO1xuXG4gIG9uQ2FydChjb3Vyc2U6IENvdXJzZSkge1xuICAgIHRoaXMuY2FydC5lbWl0KGNvdXJzZSk7XG4gIH1cbiAgb25XaXNoKGNvdXJzZTogQ291cnNlKSB7XG4gICAgdGhpcy53aXNoLmVtaXQoY291cnNlKTtcbiAgfVxuICBvbkNoZWNrb3V0KGNvdXJzZTogQ291cnNlKSB7XG4gICAgdGhpcy5jaGVja291dC5lbWl0KGNvdXJzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gIDwhLS0gPGEgY2xhc3M9XCJwLTMgYmctWy0tcnQtYnJhbmQtY29sb3JdIHRleHQtY2VudGVyIG10LTNcIiB0YXJnZXQ9XCJfYmxhbmtcIiAoY2xpY2spPVwib25DYXJ0KGNvdXJzZSlcIj7liqDlhaXotK3nianovaY8L2E+IC0tPlxuICA8YSBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJtdC0zIG1pbi1oLTExXCIgdGFyZ2V0PVwiX2JsYW5rXCIgKGNsaWNrKT1cIm9uQ2hlY2tvdXQoY291cnNlKCkpXCI+56uL5Y2z6LSt5LmwPC9hPlxuICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJtdC0zIG1pbi1oLTExXCIgdGFyZ2V0PVwiX2JsYW5rXCIgKGNsaWNrKT1cIm9uV2lzaChjb3Vyc2UoKSlcIj57e1xuICAgIGluV2lzaExpc3QoKSA/ICfnp7vpmaTmlLbol48nIDogJ+WKoOWFpeaUtuiXjydcbiAgfX08L2E+XG48L2Rpdj5cbiJdfQ==
@@ -19,10 +19,10 @@ export class CourseDetailsComponent {
19
19
  this.viewportScroller.scrollToAnchor(id);
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseDetailsComponent, isStandalone: true, selector: "rolatech-course-details", inputs: { details: { classPropertyName: "details", publicName: "details", 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 class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-orange-500 inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }] }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseDetailsComponent, isStandalone: true, selector: "rolatech-course-details", inputs: { details: { classPropertyName: "details", publicName: "details", 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 class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }] }); }
23
23
  }
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseDetailsComponent, decorators: [{
25
25
  type: Component,
26
- args: [{ selector: 'rolatech-course-details', standalone: true, imports: [ThumbnailComponent], template: "<div class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-orange-500 inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n" }]
26
+ args: [{ selector: 'rolatech-course-details', standalone: true, imports: [ThumbnailComponent], template: "<div class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n" }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWRldGFpbHMvY291cnNlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWRldGFpbHMvY291cnNlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWxFLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFRRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBa0IsQ0FBQztRQUMzQyxlQUFVLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDN0IsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzNCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUlqQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGtCQUFhLEdBQUcsRUFBRSxDQUFDO0tBTXBCO0lBTEMsUUFBUSxLQUFVLENBQUM7SUFFbkIsZUFBZSxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQWxCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixvZUNabkMsNmpDQW1DQSwwRER6Qlksa0JBQWtCOzsyRkFFakIsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLHlCQUF5QixjQUd2QixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0U2Nyb2xsZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IENvdXJzZURldGFpbCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUaHVtYm5haWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGV0YWlscyA9IGlucHV0LnJlcXVpcmVkPENvdXJzZURldGFpbFtdPigpO1xuICBpbnN0cnVjdG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VybmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgdmlld3BvcnRTY3JvbGxlciA9IGluamVjdChWaWV3cG9ydFNjcm9sbGVyKTtcbiAgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgcGxheWVyOiBhbnk7XG5cbiAgc2hvdyA9IGZhbHNlO1xuICBtZWRpYUluZGV4ID0gMDtcbiAgZmluYWxTY2hlZHVsZSA9IFtdO1xuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgb25DbGlja1Njcm9sbGVyKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoaWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHktM1wiIGlkPVwiZGV0YWlsc1wiPlxuICA8ZGl2IGNsYXNzPVwidGV4dC14bCBmb250LW1lZGl1bSBweS0yXCI+6K+m5oOFPC9kaXY+XG4gIEBpZiAoZGV0YWlscygpKSB7XG4gICAgQGZvciAoZGV0YWlsIG9mIGRldGFpbHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8ZGl2PlxuICAgICAgICBAaWYgKGRldGFpbC50aXRsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImgtNCB3LTEgYmctb3JhbmdlLTUwMCBpbmxpbmUtYmxvY2tcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1tZWRpdW0gcHktMVwiPiB7eyBkZXRhaWwudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChkZXRhaWwuY29udGVudCkge1xuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICB7eyBkZXRhaWwuY29udGVudCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZGV0YWlsLm1lZGlhKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctODAlXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGRldGFpbC5tZWRpYTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktM1wiPlxuICAgICAgICAgICAgICAgIDxyb2xhdGVjaC10aHVtYm5haWxcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS51cmxcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIG1vZGU9XCJmdWxsXCJcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJpdGVtLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaXRlbS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgID48L3JvbGF0ZWNoLXRodW1ibmFpbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9kaXY+XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWRldGFpbHMvY291cnNlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWRldGFpbHMvY291cnNlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWxFLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFRRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBa0IsQ0FBQztRQUMzQyxlQUFVLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDN0IsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzNCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUlqQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGtCQUFhLEdBQUcsRUFBRSxDQUFDO0tBTXBCO0lBTEMsUUFBUSxLQUFVLENBQUM7SUFFbkIsZUFBZSxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQWxCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixvZUNabkMscWtDQW1DQSwwRER6Qlksa0JBQWtCOzsyRkFFakIsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLHlCQUF5QixjQUd2QixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0U2Nyb2xsZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IENvdXJzZURldGFpbCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUaHVtYm5haWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGV0YWlscyA9IGlucHV0LnJlcXVpcmVkPENvdXJzZURldGFpbFtdPigpO1xuICBpbnN0cnVjdG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VybmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgdmlld3BvcnRTY3JvbGxlciA9IGluamVjdChWaWV3cG9ydFNjcm9sbGVyKTtcbiAgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgcGxheWVyOiBhbnk7XG5cbiAgc2hvdyA9IGZhbHNlO1xuICBtZWRpYUluZGV4ID0gMDtcbiAgZmluYWxTY2hlZHVsZSA9IFtdO1xuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgb25DbGlja1Njcm9sbGVyKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoaWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHktM1wiIGlkPVwiZGV0YWlsc1wiPlxuICA8ZGl2IGNsYXNzPVwidGV4dC14bCBmb250LW1lZGl1bSBweS0yXCI+6K+m5oOFPC9kaXY+XG4gIEBpZiAoZGV0YWlscygpKSB7XG4gICAgQGZvciAoZGV0YWlsIG9mIGRldGFpbHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8ZGl2PlxuICAgICAgICBAaWYgKGRldGFpbC50aXRsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImgtNCB3LTEgYmctWy0tcnQtYnJhbmQtY29sb3JdIGlubGluZS1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZyBmb250LW1lZGl1bSBweS0xXCI+IHt7IGRldGFpbC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGRldGFpbC5jb250ZW50KSB7XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHt7IGRldGFpbC5jb250ZW50IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChkZXRhaWwubWVkaWEpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy04MCVcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGV0YWlsLm1lZGlhOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbFxuICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLnVybFwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgbW9kZT1cImZ1bGxcIlxuICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJpdGVtLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgPjwvcm9sYXRlY2gtdGh1bWJuYWlsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -14,10 +14,10 @@ export class CourseInfoComponent {
14
14
  });
15
15
  }
16
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-orange-600 text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{ instructor() }}</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"] }] }); }
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
18
  }
19
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseInfoComponent, decorators: [{
20
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-orange-600 text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{ instructor() }}</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"] }]
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
22
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBVXZELE1BQU0sT0FBTyxtQkFBbUI7SUFQaEM7UUFRRSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM3QixhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0tBQ0o7OEdBUFksbUJBQW1CO2tHQUFuQixtQkFBbUIsOGRDWmhDLHc0QkF3QkEsd0ZEZFksYUFBYSxtTEFBRSxZQUFZOzsyRkFFMUIsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLHNCQUFzQixjQUdwQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBTaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQ291cnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdXJzZS1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWluZm8uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZUluZm9Db21wb25lbnQge1xuICBjb3Vyc2UgPSBpbnB1dC5yZXF1aXJlZDxDb3Vyc2U+KCk7XG4gIGluc3RydWN0b3IgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHVzZXJuYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRhVG9EaXNwbGF5ID0gZWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb3Vyc2UoKTtcbiAgfSk7XG59XG4iLCI8ZGl2PlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LW1lZGl1bVwiPnt7IGNvdXJzZSgpLm5hbWUgfX08L2Rpdj5cbiAgICBAaWYgKGNvdXJzZSgpLnR5cGUgJiYgY291cnNlKCkudHlwZS50b1N0cmluZygpICE9PSAnT05MSU5FJykge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB0LTJcIj5cbiAgICAgICAgPG1hdC1pY29uPnBsYWNlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIG9wYWNpdHktNzVcIj57eyBjb3Vyc2UoKS5jbGFzc3Jvb20uYWRkcmVzcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwicHktMyBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+5Li76K6y5pWZ5biIOiA8L3NwYW4+XG4gICAgICAgICAgPGEgY2xhc3M9XCJtbC0yIHVuZGVybGluZSB0ZXh0LW9yYW5nZS02MDAgdGV4dC1bMC45cmVtXVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0AnICsgdXNlcm5hbWUoKV1cIj57eyBpbnN0cnVjdG9yKCkgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gb3BhY2l0eS03NVwiPuacgOWQjue8lui+kToge3sgY291cnNlKCkudXBkYXRlZEF0IH19IDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSDmj4/ov7AgLS0+XG4gIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAge3sgY291cnNlKCkuZGVzY3JpcHRpb24gfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWluZm8vY291cnNlLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBVXZELE1BQU0sT0FBTyxtQkFBbUI7SUFQaEM7UUFRRSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM3QixhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0tBQ0o7OEdBUFksbUJBQW1CO2tHQUFuQixtQkFBbUIsOGRDWmhDLHc2QkEwQkEsd0ZEaEJZLGFBQWEsbUxBQUUsWUFBWTs7MkZBRTFCLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxzQkFBc0IsY0FHcEIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IENvdXJzZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1pbmZvLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VJbmZvQ29tcG9uZW50IHtcbiAgY291cnNlID0gaW5wdXQucmVxdWlyZWQ8Q291cnNlPigpO1xuICBpbnN0cnVjdG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VybmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0YVRvRGlzcGxheSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY291cnNlKCk7XG4gIH0pO1xufVxuIiwiPGRpdj5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC0yeGwgZm9udC1tZWRpdW1cIj57eyBjb3Vyc2UoKS5uYW1lIH19PC9kaXY+XG4gICAgQGlmIChjb3Vyc2UoKS50eXBlICYmIGNvdXJzZSgpLnR5cGUudG9TdHJpbmcoKSAhPT0gJ09OTElORScpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwdC0yXCI+XG4gICAgICAgIDxtYXQtaWNvbj5wbGFjZTwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBvcGFjaXR5LTc1XCI+e3sgY291cnNlKCkuY2xhc3Nyb29tLmFkZHJlc3MgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInB5LTMgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bVwiPuS4u+iusuaVmeW4iDogPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwibWwtMiB1bmRlcmxpbmUgdGV4dC1bLS1ydC1icmFuZC1jb2xvcl0gdGV4dC1bMC45cmVtXVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0AnICsgdXNlcm5hbWUoKV1cIj57e1xuICAgICAgICAgICAgaW5zdHJ1Y3RvcigpXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gb3BhY2l0eS03NVwiPuacgOWQjue8lui+kToge3sgY291cnNlKCkudXBkYXRlZEF0IH19IDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSDmj4/ov7AgLS0+XG4gIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAge3sgY291cnNlKCkuZGVzY3JpcHRpb24gfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,10 +11,10 @@ export class CourseMediaOwnerRendererComponent {
11
11
  this.username = input();
12
12
  }
13
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-orange-600\"></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"] }] }); }
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
15
  }
16
16
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaOwnerRendererComponent, decorators: [{
17
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-orange-600\"></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"] }]
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
19
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci9jb3Vyc2UtbWVkaWEtb3duZXItcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFTdkQsTUFBTSxPQUFPLGlDQUFpQztJQVA5QztRQVFFLFNBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUN2QixXQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0tBQzVCOzhHQUpZLGlDQUFpQztrR0FBakMsaUNBQWlDLDZkQ1g5Qyw4bUJBaUJBLHdGRFZZLG1CQUFtQiwrUUFBRSxhQUFhOzsyRkFJakMsaUNBQWlDO2tCQVA3QyxTQUFTOytCQUNFLHNDQUFzQyxjQUNwQyxJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FuZ3VsYXJDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZU1lZGlhT3duZXJSZW5kZXJlckNvbXBvbmVudCB7XG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlcm5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggbXItMyBnYXAtMiBpdGVtcy1jZW50ZXJcIj5cbiAgICBAaWYgKGF2YXRhcigpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiYXZhdGFyKClcIiBjbGFzcz1cInctMTEgaC0xMSByb3VuZGVkLWZ1bGxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMSBoLTExIHJvdW5kZWQtZnVsbCBiZy1vcmFuZ2UtNjAwXCI+PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWxnIGZvbnQtYm9sZCBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvJywgJ0AnICsgdXNlcm5hbWUoKV1cIj5cbiAgICAgICAgPHNwYW4+e3sgbmFtZSgpIH19PC9zcGFuPlxuICAgICAgPC9hPlxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnZlcmlmaWVkPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci9jb3Vyc2UtbWVkaWEtb3duZXItcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFTdkQsTUFBTSxPQUFPLGlDQUFpQztJQVA5QztRQVFFLFNBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUN2QixXQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0tBQzVCOzhHQUpZLGlDQUFpQztrR0FBakMsaUNBQWlDLDZkQ1g5QyxzbkJBaUJBLHdGRFZZLG1CQUFtQiwrUUFBRSxhQUFhOzsyRkFJakMsaUNBQWlDO2tCQVA3QyxTQUFTOytCQUNFLHNDQUFzQyxjQUNwQyxJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FuZ3VsYXJDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLW1lZGlhLW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvdXJzZS1tZWRpYS1vd25lci1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZU1lZGlhT3duZXJSZW5kZXJlckNvbXBvbmVudCB7XG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlcm5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggbXItMyBnYXAtMiBpdGVtcy1jZW50ZXJcIj5cbiAgICBAaWYgKGF2YXRhcigpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiYXZhdGFyKClcIiBjbGFzcz1cInctMTEgaC0xMSByb3VuZGVkLWZ1bGxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMSBoLTExIHJvdW5kZWQtZnVsbCBiZy1bLS1ydC1icmFuZC1jb2xvcl1cIj48L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtbGcgZm9udC1ib2xkIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8c3Bhbj57eyBuYW1lKCkgfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+dmVyaWZpZWQ8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -11,10 +11,10 @@ export class CourseScheduleComponent {
11
11
  }
12
12
  formatSchedule() { }
13
13
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleComponent, isStandalone: true, selector: "rolatech-course-schedule", inputs: { schedule: { classPropertyName: "schedule", publicName: "schedule", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-gray-600 pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }] }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleComponent, isStandalone: true, selector: "rolatech-course-schedule", inputs: { schedule: { classPropertyName: "schedule", publicName: "schedule", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }] }); }
15
15
  }
16
16
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, decorators: [{
17
17
  type: Component,
18
- args: [{ selector: 'rolatech-course-schedule', standalone: true, imports: [MatIconModule, AccordionComponent, PanelComponent], template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-gray-600 pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
18
+ args: [{ selector: 'rolatech-course-schedule', standalone: true, imports: [MatIconModule, AccordionComponent, PanelComponent], template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
19
19
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zY2hlZHVsZS9jb3Vyc2Utc2NoZWR1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlL2NvdXJzZS1zY2hlZHVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVNsRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUUsYUFBUSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7S0FNeEM7SUFKQyxRQUFRO1FBQ04seUJBQXlCO0lBQzNCLENBQUM7SUFDRCxjQUFjLEtBQUksQ0FBQzs4R0FOUix1QkFBdUI7a0dBQXZCLHVCQUF1QixpT0NacEMsc25CQW1CQSx5RERUWSxhQUFhLCtCQUFFLGtCQUFrQiwrREFBRSxjQUFjOzsyRkFFaEQsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLDBCQUEwQixjQUd4QixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDb3Vyc2VTY2hlZHVsZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWNjb3JkaW9uQ29tcG9uZW50LCBQYW5lbENvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2NoZWR1bGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBBY2NvcmRpb25Db21wb25lbnQsIFBhbmVsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2NoZWR1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzY2hlZHVsZSA9IGlucHV0PENvdXJzZVNjaGVkdWxlW10+KFtdKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmZvcm1hdFNjaGVkdWxlKCk7XG4gIH1cbiAgZm9ybWF0U2NoZWR1bGUoKSB7fVxufVxuIiwiQGlmIChzY2hlZHVsZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJweS0zXCIgaWQ9XCJzY2hlZHVsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtbWVkaXVtIHB5LTJcIj7or77ooag8L2Rpdj5cbiAgICA8cm9sYXRlY2gtYWNjb3JkaW9uPlxuICAgICAgQGZvciAoaXRlbSBvZiBzY2hlZHVsZSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXBhbmVsIFt0aXRsZV09XCJpdGVtLnRpdGxlXCIgW2V4cGFuZGVkXT1cIiRpbmRleCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTYwMCBwdC0yIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5zdGFydEF0IH19IC0ge3sgaXRlbS5lbmRBdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBpdGVtLmNvbnRlbnQgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3JvbGF0ZWNoLXBhbmVsPlxuICAgICAgfVxuICAgIDwvcm9sYXRlY2gtYWNjb3JkaW9uPlxuICA8L2Rpdj5cbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zY2hlZHVsZS9jb3Vyc2Utc2NoZWR1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlL2NvdXJzZS1zY2hlZHVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVNsRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUUsYUFBUSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7S0FNeEM7SUFKQyxRQUFRO1FBQ04seUJBQXlCO0lBQzNCLENBQUM7SUFDRCxjQUFjLEtBQUksQ0FBQzs4R0FOUix1QkFBdUI7a0dBQXZCLHVCQUF1QixpT0NacEMsa29CQW1CQSx5RERUWSxhQUFhLCtCQUFFLGtCQUFrQiwrREFBRSxjQUFjOzsyRkFFaEQsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLDBCQUEwQixjQUd4QixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDb3Vyc2VTY2hlZHVsZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWNjb3JkaW9uQ29tcG9uZW50LCBQYW5lbENvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2NoZWR1bGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBBY2NvcmRpb25Db21wb25lbnQsIFBhbmVsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2NoZWR1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzY2hlZHVsZSA9IGlucHV0PENvdXJzZVNjaGVkdWxlW10+KFtdKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmZvcm1hdFNjaGVkdWxlKCk7XG4gIH1cbiAgZm9ybWF0U2NoZWR1bGUoKSB7fVxufVxuIiwiQGlmIChzY2hlZHVsZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJweS0zXCIgaWQ9XCJzY2hlZHVsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtbWVkaXVtIHB5LTJcIj7or77ooag8L2Rpdj5cbiAgICA8cm9sYXRlY2gtYWNjb3JkaW9uPlxuICAgICAgQGZvciAoaXRlbSBvZiBzY2hlZHVsZSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXBhbmVsIFt0aXRsZV09XCJpdGVtLnRpdGxlXCIgW2V4cGFuZGVkXT1cIiRpbmRleCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bLS1ydC10ZXh0LXNlY29uZGFyeV1wdC0yIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5zdGFydEF0IH19IC0ge3sgaXRlbS5lbmRBdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBpdGVtLmNvbnRlbnQgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3JvbGF0ZWNoLXBhbmVsPlxuICAgICAgfVxuICAgIDwvcm9sYXRlY2gtYWNjb3JkaW9uPlxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -19,10 +19,10 @@ export class CourseSectionsComponent {
19
19
  this.checkout.emit({ section, lecture });
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionsComponent, isStandalone: true, selector: "rolatech-course-sections", inputs: { purchased: { classPropertyName: "purchased", publicName: "purchased", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "section", checkout: "checkout" }, ngImport: i0, template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-gray-500 inline-block w-[60px] text-right\">{{ lecture.item.duration | duration }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: DurationPipe, name: "duration" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionsComponent, isStandalone: true, selector: "rolatech-course-sections", inputs: { purchased: { classPropertyName: "purchased", publicName: "purchased", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "section", checkout: "checkout" }, ngImport: i0, template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-[--rt-text-secondary] inline-block w-[60px] text-right\">{{\n lecture.item.duration | duration\n }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: DurationPipe, name: "duration" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
23
23
  }
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionsComponent, decorators: [{
25
25
  type: Component,
26
- args: [{ selector: 'rolatech-course-sections', encapsulation: ViewEncapsulation.None, standalone: true, imports: [MatIconModule, DurationPipe, MatCheckboxModule, AccordionComponent, PanelComponent], template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-gray-500 inline-block w-[60px] text-right\">{{ lecture.item.duration | duration }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
26
+ args: [{ selector: 'rolatech-course-sections', encapsulation: ViewEncapsulation.None, standalone: true, imports: [MatIconModule, DurationPipe, MatCheckboxModule, AccordionComponent, PanelComponent], template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-[--rt-text-secondary] inline-block w-[60px] text-right\">{{\n lecture.item.duration | duration\n }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zZWN0aW9ucy9jb3Vyc2Utc2VjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb25zL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVVsRixNQUFNLE9BQU8sdUJBQXVCO0lBUnBDO1FBU0UsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUN0QyxZQUFPLEdBQUcsTUFBTSxFQUE2RCxDQUFDO1FBQzlFLGFBQVEsR0FBRyxNQUFNLEVBQTZELENBQUM7S0FPaEY7SUFOQyxTQUFTLENBQUMsT0FBc0IsRUFBRSxPQUE2QjtRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxVQUFVLENBQUMsT0FBc0IsRUFBRSxPQUE2QjtRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBVlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsNFpDZnBDLGs2REE4Q0EseUREakNZLGFBQWEsK0tBQUUsWUFBWSxnREFBRSxpQkFBaUIsK0JBQUUsa0JBQWtCLCtEQUFFLGNBQWM7OzJGQUVqRix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UsMEJBQTBCLGlCQUdyQixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBEdXJhdGlvblBpcGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbiwgQ291cnNlU2VjdGlvbkxlY3R1cmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFjY29yZGlvbkNvbXBvbmVudCwgUGFuZWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNlY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgRHVyYXRpb25QaXBlLCBNYXRDaGVja2JveE1vZHVsZSwgQWNjb3JkaW9uQ29tcG9uZW50LCBQYW5lbENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVNlY3Rpb25zQ29tcG9uZW50IHtcbiAgcHVyY2hhc2VkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZWN0aW9ucyA9IGlucHV0PENvdXJzZVNlY3Rpb25bXT4oW10pO1xuICBzZWN0aW9uID0gb3V0cHV0PHsgc2VjdGlvbjogQ291cnNlU2VjdGlvbjsgbGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUgfT4oKTtcbiAgY2hlY2tvdXQgPSBvdXRwdXQ8eyBzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uOyBsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSB9PigpO1xuICBvblNlY3Rpb24oc2VjdGlvbjogQ291cnNlU2VjdGlvbiwgbGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUpIHtcbiAgICB0aGlzLnNlY3Rpb24uZW1pdCh7IHNlY3Rpb24sIGxlY3R1cmUgfSk7XG4gIH1cbiAgb25DaGVja291dChzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uLCBsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuY2hlY2tvdXQuZW1pdCh7IHNlY3Rpb24sIGxlY3R1cmUgfSk7XG4gIH1cbn1cbiIsIkBpZiAoc2VjdGlvbnMoKSkge1xuICA8ZGl2IGlkPVwic2VjdGlvbnMoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LW1lZGl1bSBweS0zIGxnOnB0LTBcIj7or77nqIvlhoXlrrk8L2Rpdj5cbiAgICA8cm9sYXRlY2gtYWNjb3JkaW9uPlxuICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXBhbmVsIFtleHBhbmRlZF09XCIkaW5kZXggPT09IDBcIiBbdGl0bGVdPVwiaXRlbS50aXRsZVwiPlxuICAgICAgICAgIEBmb3IgKGxlY3R1cmUgb2YgaXRlbS5sZWN0dXJlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTFcIj5cbiAgICAgICAgICAgICAgQGlmIChsZWN0dXJlLml0ZW0gJiYgbGVjdHVyZS50eXBlID09PSAnVklERU8nKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+bGl2ZV90djwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbWRcIj4ge3sgbGVjdHVyZS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChwdXJjaGFzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtci0xIHVuZGVybGluZSB1bmRlcmxpbmUtb2Zmc2V0LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWN0aW9uKGl0ZW0sIGxlY3R1cmUpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+5pKt5pS+PC9hXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGxlY3R1cmUuaXRlbS5jYW5CZVByZXZpZXdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gbXItMSB1bmRlcmxpbmUgdW5kZXJsaW5lLW9mZnNldC0yIGN1cnNvci1wb2ludGVyIHRleHQtb3JhbmdlLTYwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWN0aW9uKGl0ZW0sIGxlY3R1cmUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID7or5XnnIs8L2FcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gbXItMSB1bmRlcmxpbmUgdW5kZXJsaW5lLW9mZnNldC0yIGN1cnNvci1wb2ludGVyIHRleHQtb3JhbmdlLTYwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja291dChpdGVtLCBsZWN0dXJlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+6LSt5LmwPC9hXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBpbmxpbmUtYmxvY2sgdy1bNjBweF0gdGV4dC1yaWdodFwiPnt7IGxlY3R1cmUuaXRlbS5kdXJhdGlvbiB8IGR1cmF0aW9uIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvcm9sYXRlY2gtcGFuZWw+XG4gICAgICB9XG4gICAgPC9yb2xhdGVjaC1hY2NvcmRpb24+XG4gIDwvZGl2PlxufVxuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zZWN0aW9ucy9jb3Vyc2Utc2VjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb25zL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVVsRixNQUFNLE9BQU8sdUJBQXVCO0lBUnBDO1FBU0UsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUN0QyxZQUFPLEdBQUcsTUFBTSxFQUE2RCxDQUFDO1FBQzlFLGFBQVEsR0FBRyxNQUFNLEVBQTZELENBQUM7S0FPaEY7SUFOQyxTQUFTLENBQUMsT0FBc0IsRUFBRSxPQUE2QjtRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxVQUFVLENBQUMsT0FBc0IsRUFBRSxPQUE2QjtRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBVlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsNFpDZnBDLCsrREFnREEseUREbkNZLGFBQWEsK0tBQUUsWUFBWSxnREFBRSxpQkFBaUIsK0JBQUUsa0JBQWtCLCtEQUFFLGNBQWM7OzJGQUVqRix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UsMEJBQTBCLGlCQUdyQixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBEdXJhdGlvblBpcGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbiwgQ291cnNlU2VjdGlvbkxlY3R1cmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFjY29yZGlvbkNvbXBvbmVudCwgUGFuZWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNlY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1zZWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgRHVyYXRpb25QaXBlLCBNYXRDaGVja2JveE1vZHVsZSwgQWNjb3JkaW9uQ29tcG9uZW50LCBQYW5lbENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVNlY3Rpb25zQ29tcG9uZW50IHtcbiAgcHVyY2hhc2VkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZWN0aW9ucyA9IGlucHV0PENvdXJzZVNlY3Rpb25bXT4oW10pO1xuICBzZWN0aW9uID0gb3V0cHV0PHsgc2VjdGlvbjogQ291cnNlU2VjdGlvbjsgbGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUgfT4oKTtcbiAgY2hlY2tvdXQgPSBvdXRwdXQ8eyBzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uOyBsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSB9PigpO1xuICBvblNlY3Rpb24oc2VjdGlvbjogQ291cnNlU2VjdGlvbiwgbGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUpIHtcbiAgICB0aGlzLnNlY3Rpb24uZW1pdCh7IHNlY3Rpb24sIGxlY3R1cmUgfSk7XG4gIH1cbiAgb25DaGVja291dChzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uLCBsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuY2hlY2tvdXQuZW1pdCh7IHNlY3Rpb24sIGxlY3R1cmUgfSk7XG4gIH1cbn1cbiIsIkBpZiAoc2VjdGlvbnMoKSkge1xuICA8ZGl2IGlkPVwic2VjdGlvbnMoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LW1lZGl1bSBweS0zIGxnOnB0LTBcIj7or77nqIvlhoXlrrk8L2Rpdj5cbiAgICA8cm9sYXRlY2gtYWNjb3JkaW9uPlxuICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXBhbmVsIFtleHBhbmRlZF09XCIkaW5kZXggPT09IDBcIiBbdGl0bGVdPVwiaXRlbS50aXRsZVwiPlxuICAgICAgICAgIEBmb3IgKGxlY3R1cmUgb2YgaXRlbS5sZWN0dXJlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTFcIj5cbiAgICAgICAgICAgICAgQGlmIChsZWN0dXJlLml0ZW0gJiYgbGVjdHVyZS50eXBlID09PSAnVklERU8nKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+bGl2ZV90djwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbWRcIj4ge3sgbGVjdHVyZS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChwdXJjaGFzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtci0xIHVuZGVybGluZSB1bmRlcmxpbmUtb2Zmc2V0LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1bLS1ydC1icmFuZC1jb2xvcl1cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlY3Rpb24oaXRlbSwgbGVjdHVyZSlcIlxuICAgICAgICAgICAgICAgICAgICAgID7mkq3mlL48L2FcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobGVjdHVyZS5pdGVtLmNhbkJlUHJldmlld2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtci0xIHVuZGVybGluZSB1bmRlcmxpbmUtb2Zmc2V0LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1bLS1ydC1icmFuZC1jb2xvcl1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VjdGlvbihpdGVtLCBsZWN0dXJlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+6K+V55yLPC9hXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG1yLTEgdW5kZXJsaW5lIHVuZGVybGluZS1vZmZzZXQtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LVstLXJ0LWJyYW5kLWNvbG9yXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja291dChpdGVtLCBsZWN0dXJlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+6LSt5LmwPC9hXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1bLS1ydC10ZXh0LXNlY29uZGFyeV0gaW5saW5lLWJsb2NrIHctWzYwcHhdIHRleHQtcmlnaHRcIj57e1xuICAgICAgICAgICAgICAgICAgICBsZWN0dXJlLml0ZW0uZHVyYXRpb24gfCBkdXJhdGlvblxuICAgICAgICAgICAgICAgICAgfX08L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9yb2xhdGVjaC1wYW5lbD5cbiAgICAgIH1cbiAgICA8L3JvbGF0ZWNoLWFjY29yZGlvbj5cbiAgPC9kaXY+XG59XG4iXX0=
@@ -553,11 +553,11 @@ class CourseInfoComponent {
553
553
  });
554
554
  }
555
555
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
556
- 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-orange-600 text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{ instructor() }}</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: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
556
+ 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: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
557
557
  }
558
558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseInfoComponent, decorators: [{
559
559
  type: Component,
560
- 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-orange-600 text-[0.9rem]\" [routerLink]=\"['/@' + username()]\">{{ instructor() }}</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"] }]
560
+ 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"] }]
561
561
  }] });
562
562
 
563
563
  class CourseMediaComponent {
@@ -619,11 +619,11 @@ class CourseActionComponent {
619
619
  this.checkout.emit(course);
620
620
  }
621
621
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
622
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: CourseActionComponent, isStandalone: true, selector: "rolatech-course-action", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cart: "cart", wish: "wish", checkout: "checkout" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-orange-600 text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }] }); }
622
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: CourseActionComponent, isStandalone: true, selector: "rolatech-course-action", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cart: "cart", wish: "wish", checkout: "checkout" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-[--rt-brand-color] text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }] }); }
623
623
  }
624
624
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseActionComponent, decorators: [{
625
625
  type: Component,
626
- args: [{ standalone: true, selector: 'rolatech-course-action', imports: [MatButtonModule], template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-orange-600 text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n" }]
626
+ args: [{ standalone: true, selector: 'rolatech-course-action', imports: [MatButtonModule], template: "<div class=\"flex flex-col\">\n <!-- <a class=\"p-3 bg-[--rt-brand-color] text-center mt-3\" target=\"_blank\" (click)=\"onCart(course)\">\u52A0\u5165\u8D2D\u7269\u8F66</a> -->\n <a mat-flat-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onCheckout(course())\">\u7ACB\u5373\u8D2D\u4E70</a>\n <a mat-stroked-button class=\"mt-3 min-h-11\" target=\"_blank\" (click)=\"onWish(course())\">{{\n inWishList() ? '\u79FB\u9664\u6536\u85CF' : '\u52A0\u5165\u6536\u85CF'\n }}</a>\n</div>\n" }]
627
627
  }] });
628
628
 
629
629
  class CourseScheduleComponent {
@@ -635,11 +635,11 @@ class CourseScheduleComponent {
635
635
  }
636
636
  formatSchedule() { }
637
637
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
638
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleComponent, isStandalone: true, selector: "rolatech-course-schedule", inputs: { schedule: { classPropertyName: "schedule", publicName: "schedule", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-gray-600 pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }] }); }
638
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleComponent, isStandalone: true, selector: "rolatech-course-schedule", inputs: { schedule: { classPropertyName: "schedule", publicName: "schedule", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }] }); }
639
639
  }
640
640
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, decorators: [{
641
641
  type: Component,
642
- args: [{ selector: 'rolatech-course-schedule', standalone: true, imports: [MatIconModule, AccordionComponent, PanelComponent], template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-gray-600 pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
642
+ args: [{ selector: 'rolatech-course-schedule', standalone: true, imports: [MatIconModule, AccordionComponent, PanelComponent], template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
643
643
  }] });
644
644
 
645
645
  class CourseSectionsComponent {
@@ -656,11 +656,11 @@ class CourseSectionsComponent {
656
656
  this.checkout.emit({ section, lecture });
657
657
  }
658
658
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
659
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionsComponent, isStandalone: true, selector: "rolatech-course-sections", inputs: { purchased: { classPropertyName: "purchased", publicName: "purchased", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "section", checkout: "checkout" }, ngImport: i0, template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-gray-500 inline-block w-[60px] text-right\">{{ lecture.item.duration | duration }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: DurationPipe, name: "duration" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
659
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionsComponent, isStandalone: true, selector: "rolatech-course-sections", inputs: { purchased: { classPropertyName: "purchased", publicName: "purchased", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "section", checkout: "checkout" }, ngImport: i0, template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-[--rt-text-secondary] inline-block w-[60px] text-right\">{{\n lecture.item.duration | duration\n }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: DurationPipe, name: "duration" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
660
660
  }
661
661
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionsComponent, decorators: [{
662
662
  type: Component,
663
- args: [{ selector: 'rolatech-course-sections', encapsulation: ViewEncapsulation.None, standalone: true, imports: [MatIconModule, DurationPipe, MatCheckboxModule, AccordionComponent, PanelComponent], template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-orange-600\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-gray-500 inline-block w-[60px] text-right\">{{ lecture.item.duration | duration }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
663
+ args: [{ selector: 'rolatech-course-sections', encapsulation: ViewEncapsulation.None, standalone: true, imports: [MatIconModule, DurationPipe, MatCheckboxModule, AccordionComponent, PanelComponent], template: "@if (sections()) {\n <div id=\"sections()\">\n <div class=\"text-2xl font-medium py-3 lg:pt-0\">\u8BFE\u7A0B\u5185\u5BB9</div>\n <rolatech-accordion>\n @for (item of sections(); track $index) {\n <rolatech-panel [expanded]=\"$index === 0\" [title]=\"item.title\">\n @for (lecture of item.lectures; track $index) {\n <div class=\"flex items-center justify-between py-1\">\n @if (lecture.item && lecture.type === 'VIDEO') {\n <div class=\"flex items-center gap-3\">\n <mat-icon>live_tv</mat-icon>\n <span class=\"text-md\"> {{ lecture.title }}</span>\n </div>\n <div>\n @if (purchased()) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u64AD\u653E</a\n >\n } @else {\n @if (lecture.item.canBePreviewed) {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onSection(item, lecture)\"\n >\u8BD5\u770B</a\n >\n } @else {\n <a\n class=\"text-sm mr-1 underline underline-offset-2 cursor-pointer text-[--rt-brand-color]\"\n (click)=\"onCheckout(item, lecture)\"\n >\u8D2D\u4E70</a\n >\n }\n }\n\n <a class=\"text-[--rt-text-secondary] inline-block w-[60px] text-right\">{{\n lecture.item.duration | duration\n }}</a>\n </div>\n }\n </div>\n }\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
664
664
  }] });
665
665
 
666
666
  class CourseSectionItemComponent {
@@ -1520,11 +1520,11 @@ class CourseDetailsComponent {
1520
1520
  this.viewportScroller.scrollToAnchor(id);
1521
1521
  }
1522
1522
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1523
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseDetailsComponent, isStandalone: true, selector: "rolatech-course-details", inputs: { details: { classPropertyName: "details", publicName: "details", 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 class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-orange-500 inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }] }); }
1523
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseDetailsComponent, isStandalone: true, selector: "rolatech-course-details", inputs: { details: { classPropertyName: "details", publicName: "details", 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 class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }] }); }
1524
1524
  }
1525
1525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseDetailsComponent, decorators: [{
1526
1526
  type: Component,
1527
- args: [{ selector: 'rolatech-course-details', standalone: true, imports: [ThumbnailComponent], template: "<div class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-orange-500 inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n" }]
1527
+ args: [{ selector: 'rolatech-course-details', standalone: true, imports: [ThumbnailComponent], template: "<div class=\"py-3\" id=\"details\">\n <div class=\"text-xl font-medium py-2\">\u8BE6\u60C5</div>\n @if (details()) {\n @for (detail of details(); track $index) {\n <div>\n @if (detail.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ detail.title }}</span>\n </div>\n }\n @if (detail.content) {\n <div>\n {{ detail.content }}\n </div>\n }\n @if (detail.media) {\n <div class=\"w-80%\">\n @for (item of detail.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n" }]
1528
1528
  }] });
1529
1529
 
1530
1530
  class CourseMediaOwnerRendererComponent {
@@ -1534,11 +1534,11 @@ class CourseMediaOwnerRendererComponent {
1534
1534
  this.username = input();
1535
1535
  }
1536
1536
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaOwnerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1537
- 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-orange-600\"></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"] }] }); }
1537
+ 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"] }] }); }
1538
1538
  }
1539
1539
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseMediaOwnerRendererComponent, decorators: [{
1540
1540
  type: Component,
1541
- 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-orange-600\"></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"] }]
1541
+ 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"] }]
1542
1542
  }] });
1543
1543
 
1544
1544
  class CourseCategoryComponent extends BaseComponent {