@rolatech/angular-product 17.0.0 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/esm2022/index.mjs +5 -12
  2. package/esm2022/lib/components/index.mjs +12 -0
  3. package/esm2022/lib/components/product-action/product-action.component.mjs +25 -0
  4. package/esm2022/lib/components/product-info/product-info.component.mjs +17 -0
  5. package/esm2022/lib/components/product-item/product-item.component.mjs +17 -0
  6. package/esm2022/lib/components/product-manage-option-add/product-manage-option-add.component.mjs +68 -0
  7. package/esm2022/lib/components/product-manage-option-item/product-manage-option-item.component.mjs +49 -0
  8. package/esm2022/lib/components/product-manage-variant/product-manage-variant.component.mjs +115 -0
  9. package/esm2022/lib/components/product-mange-option-action/product-manage-option-action.component.mjs +22 -0
  10. package/esm2022/lib/components/product-mange-section-item/product-mange-section-item.component.mjs +89 -0
  11. package/esm2022/lib/components/product-media/product-media.component.mjs +34 -0
  12. package/esm2022/lib/components/product-option/product-option.component.mjs +23 -0
  13. package/esm2022/lib/components/product-owner-renderer/product-owner-renderer.component.mjs +20 -0
  14. package/esm2022/lib/components/product-pricing/product-pricing.component.mjs +31 -0
  15. package/esm2022/lib/components/product-section/product-section.component.mjs +26 -0
  16. package/esm2022/lib/interfaces/category.mjs +2 -0
  17. package/esm2022/lib/interfaces/index.mjs +2 -0
  18. package/esm2022/lib/interfaces/product.mjs +32 -0
  19. package/esm2022/lib/pages/product/product-category/product-category.component.mjs +70 -8
  20. package/esm2022/lib/pages/product/product-details/product-details.component.mjs +193 -0
  21. package/esm2022/lib/pages/product/product-details/selected.pipe.mjs +18 -0
  22. package/esm2022/lib/pages/product/product-index/product-index.component.mjs +39 -8
  23. package/esm2022/lib/pages/product/product-layout/product-layout.component.mjs +46 -8
  24. package/esm2022/lib/pages/product/product.routes.mjs +3 -3
  25. package/esm2022/lib/pages/product-manage/product-manage-content/product-manage-content.component.mjs +5 -5
  26. package/esm2022/lib/pages/product-manage/product-manage-create/product-manage-create.component.mjs +61 -0
  27. package/esm2022/lib/pages/product-manage/product-manage-index/product-manage-index.component.mjs +155 -0
  28. package/esm2022/lib/pages/product-manage/product-manage-info/product-manage-info.component.mjs +98 -8
  29. package/esm2022/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.mjs +14 -0
  30. package/esm2022/lib/pages/product-manage/product-manage-item/product-manage-item.component.mjs +27 -0
  31. package/esm2022/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.mjs +12 -0
  32. package/esm2022/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.mjs +51 -8
  33. package/esm2022/lib/pages/product-manage/product-manage-media/product-manage-media.component.mjs +133 -8
  34. package/esm2022/lib/pages/product-manage/product-manage-options/product-manage-options.component.mjs +102 -0
  35. package/esm2022/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.mjs +5 -5
  36. package/esm2022/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.mjs +14 -0
  37. package/esm2022/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.mjs +170 -0
  38. package/esm2022/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.mjs +133 -0
  39. package/esm2022/lib/pages/product-manage/product-manage.routes.mjs +34 -4
  40. package/esm2022/lib/services/index.mjs +4 -0
  41. package/esm2022/lib/services/product-category.service.mjs +38 -0
  42. package/esm2022/provider.mjs +13 -0
  43. package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs +70 -0
  44. package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs.map +1 -0
  45. package/fesm2022/rolatech-angular-product.mjs +1697 -76
  46. package/fesm2022/rolatech-angular-product.mjs.map +1 -1
  47. package/index.d.ts +4 -11
  48. package/lib/components/index.d.ts +11 -0
  49. package/lib/components/product-action/product-action.component.d.ts +11 -0
  50. package/lib/components/product-info/product-info.component.d.ts +7 -0
  51. package/lib/components/product-item/product-item.component.d.ts +7 -0
  52. package/lib/components/product-manage-option-add/product-manage-option-add.component.d.ts +20 -0
  53. package/lib/components/product-manage-option-item/product-manage-option-item.component.d.ts +14 -0
  54. package/lib/components/product-manage-variant/product-manage-variant.component.d.ts +18 -0
  55. package/lib/components/product-mange-option-action/product-manage-option-action.component.d.ts +10 -0
  56. package/lib/components/product-mange-section-item/product-mange-section-item.component.d.ts +33 -0
  57. package/lib/components/product-media/product-media.component.d.ts +12 -0
  58. package/lib/components/product-option/product-option.component.d.ts +14 -0
  59. package/lib/components/product-owner-renderer/product-owner-renderer.component.d.ts +8 -0
  60. package/lib/components/product-pricing/product-pricing.component.d.ts +12 -0
  61. package/lib/components/product-section/product-section.component.d.ts +16 -0
  62. package/lib/interfaces/category.d.ts +16 -0
  63. package/lib/interfaces/index.d.ts +2 -0
  64. package/lib/interfaces/product.d.ts +91 -0
  65. package/lib/pages/product/product-category/product-category.component.d.ts +19 -2
  66. package/lib/pages/product/product-details/product-details.component.d.ts +39 -0
  67. package/lib/pages/product/product-details/selected.pipe.d.ts +8 -0
  68. package/lib/pages/product/product-index/product-index.component.d.ts +12 -2
  69. package/lib/pages/product/product-layout/product-layout.component.d.ts +15 -2
  70. package/lib/pages/product-manage/product-manage-content/product-manage-content.component.d.ts +1 -1
  71. package/lib/pages/product-manage/product-manage-create/product-manage-create.component.d.ts +11 -0
  72. package/lib/pages/product-manage/product-manage-index/product-manage-index.component.d.ts +38 -0
  73. package/lib/pages/product-manage/product-manage-info/product-manage-info.component.d.ts +26 -2
  74. package/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.d.ts +5 -0
  75. package/lib/pages/product-manage/product-manage-item/product-manage-item.component.d.ts +12 -0
  76. package/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.d.ts +5 -0
  77. package/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.d.ts +22 -2
  78. package/lib/pages/product-manage/product-manage-media/product-manage-media.component.d.ts +26 -2
  79. package/lib/pages/product-manage/product-manage-options/product-manage-options.component.d.ts +17 -0
  80. package/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.d.ts +1 -1
  81. package/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.d.ts +5 -0
  82. package/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.d.ts +29 -0
  83. package/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.d.ts +27 -0
  84. package/lib/services/index.d.ts +3 -0
  85. package/lib/services/product-category.service.d.ts +12 -0
  86. package/package.json +1 -1
  87. package/provider.d.ts +2 -0
  88. package/themes/_default.scss +1 -1
  89. package/esm2022/lib/angular-product/angular-product.component.mjs +0 -12
  90. package/esm2022/lib/pages/product/product-detail/product-detail.component.mjs +0 -12
  91. package/esm2022/lib/pages/product-manage/product-manage-details/product-manage-details.component.mjs +0 -12
  92. package/lib/angular-product/angular-product.component.d.ts +0 -5
  93. package/lib/pages/product/product-detail/product-detail.component.d.ts +0 -5
  94. package/lib/pages/product-manage/product-manage-details/product-manage-details.component.d.ts +0 -5
@@ -0,0 +1,89 @@
1
+ import { Component, input, output } from '@angular/core';
2
+ import { NgClass } from '@angular/common';
3
+ import { TextFieldModule } from '@angular/cdk/text-field';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { MatDividerModule } from '@angular/material/divider';
7
+ import { MatFormFieldModule } from '@angular/material/form-field';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import { MatInputModule } from '@angular/material/input';
10
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
11
+ import { first } from 'lodash';
12
+ import { trigger, state, style, transition, animate } from '@angular/animations';
13
+ import { MatMenuModule } from '@angular/material/menu';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/material/form-field";
16
+ import * as i2 from "@angular/material/input";
17
+ import * as i3 from "@angular/cdk/text-field";
18
+ import * as i4 from "@angular/forms";
19
+ import * as i5 from "@angular/material/button";
20
+ import * as i6 from "@angular/material/icon";
21
+ import * as i7 from "@angular/material/menu";
22
+ import * as i8 from "@angular/material/progress-bar";
23
+ import * as i9 from "@angular/material/divider";
24
+ export class ProductManageSectionItemComponent {
25
+ constructor() {
26
+ this.isUploading = input();
27
+ this.section = input.required();
28
+ this.actions = input(false);
29
+ this.selectMedia = input();
30
+ this.upload = output();
31
+ this.delete = output();
32
+ this.save = output();
33
+ this.deleteMedia = output();
34
+ this.expanded = false;
35
+ }
36
+ ngOnInit() {
37
+ this.selectedImg = this.section().media ? this.section().media[0] : null;
38
+ }
39
+ onUpload(data) {
40
+ this.upload.emit({ section: this.section(), data });
41
+ }
42
+ onMediaItemClick(image) {
43
+ this.selectedImg = image;
44
+ }
45
+ select(item) {
46
+ this.selectedImg = item;
47
+ }
48
+ deleteImage() { }
49
+ onSave(section) {
50
+ this.save.emit(section);
51
+ }
52
+ onDelete(section) {
53
+ this.delete.emit(section);
54
+ }
55
+ onDeleteMedia(media) {
56
+ this.deleteMedia.emit({ section: this.section(), media });
57
+ this.selectedImg = this.section().media ? first(this.section().media) : null;
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageSectionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductManageSectionItemComponent, isStandalone: true, selector: "rolatech-product-manage-section-item", inputs: { isUploading: { classPropertyName: "isUploading", publicName: "isUploading", isSignal: true, isRequired: false, transformFunction: null }, section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, selectMedia: { classPropertyName: "selectMedia", publicName: "selectMedia", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { upload: "upload", delete: "delete", save: "save", deleteMedia: "deleteMedia" }, ngImport: i0, template: "<div class=\"px-3\">\n <div\n class=\"h-14 py-3 flex items-center justify-between cursor-pointer\"\n (click)=\"expanded = !expanded; $event.stopPropagation()\"\n >\n <div class=\"flex\">\n <div class=\"w-32 line-clamp-1\">{{ section().title }}</div>\n <div class=\"line-clamp-1\">{{ section().description }}</div>\n </div>\n <div>\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden\" [@detailExpand]=\"expanded ? 'expanded' : 'collapsed'\">\n <div class=\"flex flex-col lg:flex-row\">\n <div class=\"flex flex-col grow\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u6807\u9898\" [(ngModel)]=\"section().title\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" [hideRequiredMarker]=\"true\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n placeholder=\"\u63CF\u8FF0\"\n [(ngModel)]=\"section().description\"\n ></textarea>\n </mat-form-field>\n </div>\n <!-- media -->\n <div class=\"lg:basis-1/2 px-0 lg:px-3\">\n @if (selectedImg) {\n <div class=\"flex flex-row justify-center relative aspect-video\">\n <img class=\"object-contain w-full\" [src]=\"selectedImg.url\" [alt]=\"selectedImg.alt\" />\n <div class=\"absolute z-30 right-0\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"beforeMenu\"\n class=\"ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"onDeleteMedia(selectedImg)\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n }\n\n <!-- media -->\n <div>\n <div class=\"flex flex-row flex-wrap cursor-pointer relative box-border\" fxLayout=\"row\">\n <div class=\"progress-bar\">\n @if (section().isUploading) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n @for (media of section().media; track media) {\n <div class=\"media-list-item\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n </div>\n }\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n <div class=\"add-button\">\n <div (click)=\"fileInput.click()\" class=\"tile-media flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onDelete(section())\">\u5220\u9664</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n }\n </div>\n</div>\n\n<mat-divider></mat-divider>\n", styles: [".media-list{flex-wrap:wrap;box-sizing:border-box}.progress-bar{display:block;min-height:6px;width:100%}.media-list-item{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:64px;width:64px;object-fit:contain;cursor:pointer;border:1px solid grey;position:relative;box-sizing:border-box;border-radius:8px}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], animations: [
61
+ trigger('detailExpand', [
62
+ state('collapsed', style({ height: '0px' })),
63
+ state('expanded', style({ height: '*' })),
64
+ transition('expanded <=> collapsed', animate('400ms cubic-bezier(0.25, 0.1, 0.25, 1)')),
65
+ ]),
66
+ ] }); }
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageSectionItemComponent, decorators: [{
69
+ type: Component,
70
+ args: [{ selector: 'rolatech-product-manage-section-item', standalone: true, imports: [
71
+ NgClass,
72
+ MatFormFieldModule,
73
+ MatInputModule,
74
+ FormsModule,
75
+ TextFieldModule,
76
+ MatButtonModule,
77
+ MatIconModule,
78
+ MatMenuModule,
79
+ MatProgressBarModule,
80
+ MatDividerModule,
81
+ ], animations: [
82
+ trigger('detailExpand', [
83
+ state('collapsed', style({ height: '0px' })),
84
+ state('expanded', style({ height: '*' })),
85
+ transition('expanded <=> collapsed', animate('400ms cubic-bezier(0.25, 0.1, 0.25, 1)')),
86
+ ]),
87
+ ], template: "<div class=\"px-3\">\n <div\n class=\"h-14 py-3 flex items-center justify-between cursor-pointer\"\n (click)=\"expanded = !expanded; $event.stopPropagation()\"\n >\n <div class=\"flex\">\n <div class=\"w-32 line-clamp-1\">{{ section().title }}</div>\n <div class=\"line-clamp-1\">{{ section().description }}</div>\n </div>\n <div>\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden\" [@detailExpand]=\"expanded ? 'expanded' : 'collapsed'\">\n <div class=\"flex flex-col lg:flex-row\">\n <div class=\"flex flex-col grow\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u6807\u9898\" [(ngModel)]=\"section().title\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" [hideRequiredMarker]=\"true\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n placeholder=\"\u63CF\u8FF0\"\n [(ngModel)]=\"section().description\"\n ></textarea>\n </mat-form-field>\n </div>\n <!-- media -->\n <div class=\"lg:basis-1/2 px-0 lg:px-3\">\n @if (selectedImg) {\n <div class=\"flex flex-row justify-center relative aspect-video\">\n <img class=\"object-contain w-full\" [src]=\"selectedImg.url\" [alt]=\"selectedImg.alt\" />\n <div class=\"absolute z-30 right-0\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"beforeMenu\"\n class=\"ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"onDeleteMedia(selectedImg)\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n }\n\n <!-- media -->\n <div>\n <div class=\"flex flex-row flex-wrap cursor-pointer relative box-border\" fxLayout=\"row\">\n <div class=\"progress-bar\">\n @if (section().isUploading) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n @for (media of section().media; track media) {\n <div class=\"media-list-item\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n </div>\n }\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n <div class=\"add-button\">\n <div (click)=\"fileInput.click()\" class=\"tile-media flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onDelete(section())\">\u5220\u9664</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n }\n </div>\n</div>\n\n<mat-divider></mat-divider>\n", styles: [".media-list{flex-wrap:wrap;box-sizing:border-box}.progress-bar{display:block;min-height:6px;width:100%}.media-list-item{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:64px;width:64px;object-fit:contain;cursor:pointer;border:1px solid grey;position:relative;box-sizing:border-box;border-radius:8px}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}\n"] }]
88
+ }], ctorParameters: () => [] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5nZS1zZWN0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9jb21wb25lbnRzL3Byb2R1Y3QtbWFuZ2Utc2VjdGlvbi1pdGVtL3Byb2R1Y3QtbWFuZ2Utc2VjdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LW1hbmdlLXNlY3Rpb24taXRlbS9wcm9kdWN0LW1hbmFnZS1zZWN0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7O0FBMkJoRSxNQUFNLE9BQU8saUNBQWlDO0lBVzVDO1FBVkEsZ0JBQVcsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUMvQixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBa0IsQ0FBQztRQUMzQyxZQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsS0FBSyxFQUFPLENBQUM7UUFDM0IsV0FBTSxHQUFHLE1BQU0sRUFBc0QsQ0FBQztRQUN0RSxXQUFNLEdBQUcsTUFBTSxFQUFrQixDQUFDO1FBQ2xDLFNBQUksR0FBRyxNQUFNLEVBQWtCLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxNQUFNLEVBQTZDLENBQUM7UUFFbEUsYUFBUSxHQUFHLEtBQUssQ0FBQztJQUNGLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNFLENBQUM7SUFDRCxRQUFRLENBQUMsSUFBUztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBQ0QsV0FBVyxLQUFJLENBQUM7SUFDaEIsTUFBTSxDQUFDLE9BQXVCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxRQUFRLENBQUMsT0FBdUI7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFZO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9FLENBQUM7OEdBcENVLGlDQUFpQztrR0FBakMsaUNBQWlDLHN0QkN6QzlDLDA1SEE4RkEsMGREekVJLGtCQUFrQiwwU0FDbEIsY0FBYyx5a0JBQ2QsV0FBVyw4bUJBQ1gsZUFBZSw4QkFDZixlQUFlLHdVQUNmLGFBQWEsbUxBQ2IsYUFBYSw2dkJBQ2Isb0JBQW9CLHdOQUNwQixnQkFBZ0IscUhBSU47WUFDVixPQUFPLENBQUMsY0FBYyxFQUFFO2dCQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDeEYsQ0FBQztTQUNIOzsyRkFFVSxpQ0FBaUM7a0JBekI3QyxTQUFTOytCQUNFLHNDQUFzQyxjQUNwQyxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3FCQUNqQixjQUdXO3dCQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7NEJBQzVDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQzt5QkFDeEYsQ0FBQztxQkFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRleHRGaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNZWRpYSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBQcm9kdWN0U2VjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBNYXRNZW51LCBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLXNlY3Rpb24taXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUZXh0RmllbGRNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1tYW5hZ2Utc2VjdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb24taXRlbS5jb21wb25lbnQuc2NzcycsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjEsIDAuMjUsIDEpJykpLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TWFuYWdlU2VjdGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBpc1VwbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHNlY3Rpb24gPSBpbnB1dC5yZXF1aXJlZDxQcm9kdWN0U2VjdGlvbj4oKTtcbiAgYWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VsZWN0TWVkaWEgPSBpbnB1dDxhbnk+KCk7XG4gIHVwbG9hZCA9IG91dHB1dDx7IHNlY3Rpb246IFByb2R1Y3RTZWN0aW9uOyBkYXRhOiBGb3JtRGF0YSB8IG51bGwgfT4oKTtcbiAgZGVsZXRlID0gb3V0cHV0PFByb2R1Y3RTZWN0aW9uPigpO1xuICBzYXZlID0gb3V0cHV0PFByb2R1Y3RTZWN0aW9uPigpO1xuICBkZWxldGVNZWRpYSA9IG91dHB1dDx7IHNlY3Rpb246IFByb2R1Y3RTZWN0aW9uOyBtZWRpYTogTWVkaWEgfT4oKTtcbiAgc2VsZWN0ZWRJbWchOiBNZWRpYSB8IGFueTtcbiAgZXhwYW5kZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbWcgPSB0aGlzLnNlY3Rpb24oKS5tZWRpYSA/IHRoaXMuc2VjdGlvbigpLm1lZGlhWzBdIDogbnVsbDtcbiAgfVxuICBvblVwbG9hZChkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnVwbG9hZC5lbWl0KHsgc2VjdGlvbjogdGhpcy5zZWN0aW9uKCksIGRhdGEgfSk7XG4gIH1cbiAgb25NZWRpYUl0ZW1DbGljayhpbWFnZTogTWVkaWEpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1nID0gaW1hZ2U7XG4gIH1cblxuICBzZWxlY3QoaXRlbTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEltZyA9IGl0ZW07XG4gIH1cbiAgZGVsZXRlSW1hZ2UoKSB7fVxuICBvblNhdmUoc2VjdGlvbjogUHJvZHVjdFNlY3Rpb24pIHtcbiAgICB0aGlzLnNhdmUuZW1pdChzZWN0aW9uKTtcbiAgfVxuICBvbkRlbGV0ZShzZWN0aW9uOiBQcm9kdWN0U2VjdGlvbikge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQoc2VjdGlvbik7XG4gIH1cbiAgb25EZWxldGVNZWRpYShtZWRpYTogTWVkaWEpIHtcbiAgICB0aGlzLmRlbGV0ZU1lZGlhLmVtaXQoeyBzZWN0aW9uOiB0aGlzLnNlY3Rpb24oKSwgbWVkaWEgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEltZyA9IHRoaXMuc2VjdGlvbigpLm1lZGlhID8gZmlyc3QodGhpcy5zZWN0aW9uKCkubWVkaWEpIDogbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInB4LTNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaC0xNCBweS0zIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgKGNsaWNrKT1cImV4cGFuZGVkID0gIWV4cGFuZGVkOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTMyIGxpbmUtY2xhbXAtMVwiPnt7IHNlY3Rpb24oKS50aXRsZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpbmUtY2xhbXAtMVwiPnt7IHNlY3Rpb24oKS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiZXhwYW5kIHJvd1wiIChjbGljayk9XCJleHBhbmRlZCA9ICFleHBhbmRlZDsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIEBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTMgdy1mdWxsIG92ZXJmbG93LWhpZGRlblwiIFtAZGV0YWlsRXhwYW5kXT1cImV4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3dcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD7moIfpopg8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCLmoIfpophcIiBbKG5nTW9kZWwpXT1cInNlY3Rpb24oKS50aXRsZVwiIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+5o+P6L+wPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxuICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuaPj+i/sFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY3Rpb24oKS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gbWVkaWEgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibGc6YmFzaXMtMS8yIHB4LTAgbGc6cHgtM1wiPlxuICAgICAgICBAaWYgKHNlbGVjdGVkSW1nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jZW50ZXIgcmVsYXRpdmUgYXNwZWN0LXZpZGVvXCI+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwib2JqZWN0LWNvbnRhaW4gdy1mdWxsXCIgW3NyY109XCJzZWxlY3RlZEltZy51cmxcIiBbYWx0XT1cInNlbGVjdGVkSW1nLmFsdFwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgei0zMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYmVmb3JlTWVudVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIGZvY3VzOm91dGxpbmUtbm9uZSBob3ZlcjpiZy1bLS1ydC1iYXNlLWJhY2tncm91bmRdIHAtMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjYmVmb3JlTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uRGVsZXRlTWVkaWEoc2VsZWN0ZWRJbWcpXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj7liKDpmaQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gbWVkaWEgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGN1cnNvci1wb2ludGVyIHJlbGF0aXZlIGJveC1ib3JkZXJcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24oKS5pc1VwbG9hZGluZykge1xuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBmb3IgKG1lZGlhIG9mIHNlY3Rpb24oKS5tZWRpYTsgdHJhY2sgbWVkaWEpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ0aWxlLW1lZGlhXCIgKGNsaWNrKT1cIm9uTWVkaWFJdGVtQ2xpY2sobWVkaWEpXCIgW3NyY109XCJtZWRpYS51cmxcIiBbYWx0XT1cIm1lZGlhLmFsdFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIChjaGFuZ2UpPVwib25VcGxvYWQoJGV2ZW50KVwiICNmaWxlSW5wdXQgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJ0aWxlLW1lZGlhIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiNDhweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiNDhweFwiIGZpbGw9XCIjNWY2MzY4XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQ0NC00NDRIMjQwdi03MmgyMDR2LTIwNGg3MnYyMDRoMjA0djcySDUxNnYyMDRoLTcydi0yMDRaXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGFjdGlvbnMoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgcC0zIGdhcC0zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIm1heC1oLThcIiAoY2xpY2spPVwib25EZWxldGUoc2VjdGlvbigpKVwiPuWIoOmZpDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cIm1heC1oLThcIiAoY2xpY2spPVwib25TYXZlKHNlY3Rpb24oKSlcIj7kv53lrZg8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Component, inject, input, ViewEncapsulation } from '@angular/core';
2
+ import { NgClass } from '@angular/common';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { ImagePreviewDialogComponent, ThumbnailComponent } from '@rolatech/angular-components';
5
+ import * as i0 from "@angular/core";
6
+ export class ProductMediaComponent {
7
+ constructor() {
8
+ this.dialog = inject(MatDialog);
9
+ this.media = input([]);
10
+ this.min = input(false);
11
+ this.mediaIndex = 0;
12
+ }
13
+ onImageClick(i) {
14
+ const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {
15
+ maxWidth: '80vw',
16
+ maxHeight: '80vh',
17
+ height: '80%',
18
+ width: '80%',
19
+ panelClass: 'full-screen-modal',
20
+ data: {
21
+ media: this.media,
22
+ selected: i,
23
+ },
24
+ });
25
+ dialogRef.afterClosed().subscribe((result) => { });
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductMediaComponent, isStandalone: true, selector: "rolatech-product-media", inputs: { media: { classPropertyName: "media", publicName: "media", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (media()) {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-raised-background]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\" mode=\"full\"></rolatech-thumbnail>\n </div>\n @for (media of media(); track media; let index = $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer w-28 p-2 bg-[--rt-10-percent-layer]\"\n (click)=\"mediaIndex = index\"\n [ngClass]=\"mediaIndex === index ? 'border border-black' : 'opacity-70'\"\n >\n <rolatech-thumbnail [src]=\"media.url\" mode=\"full\"></rolatech-thumbnail>\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }], encapsulation: i0.ViewEncapsulation.None }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductMediaComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'rolatech-product-media', standalone: true, imports: [NgClass, ThumbnailComponent], encapsulation: ViewEncapsulation.None, template: "@if (media()) {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-raised-background]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\" mode=\"full\"></rolatech-thumbnail>\n </div>\n @for (media of media(); track media; let index = $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer w-28 p-2 bg-[--rt-10-percent-layer]\"\n (click)=\"mediaIndex = index\"\n [ngClass]=\"mediaIndex === index ? 'border border-black' : 'opacity-70'\"\n >\n <rolatech-thumbnail [src]=\"media.url\" mode=\"full\"></rolatech-thumbnail>\n </div>\n }\n </div>\n}\n" }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tZWRpYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL2NvbXBvbmVudHMvcHJvZHVjdC1tZWRpYS9wcm9kdWN0LW1lZGlhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LW1lZGlhL3Byb2R1Y3QtbWVkaWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVS9GLE1BQU0sT0FBTyxxQkFBcUI7SUFSbEM7UUFTRSxXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLFVBQUssR0FBRyxLQUFLLENBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0IsUUFBRyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1QixlQUFVLEdBQUcsQ0FBQyxDQUFDO0tBZWhCO0lBZEMsWUFBWSxDQUFDLENBQU07UUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDOUQsUUFBUSxFQUFFLE1BQU07WUFDaEIsU0FBUyxFQUFFLE1BQU07WUFDakIsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLENBQUM7YUFDWjtTQUNGLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7OEdBbEJVLHFCQUFxQjtrR0FBckIscUJBQXFCLHdVQ2RsQywrb0JBZ0JBLDBERFBZLE9BQU8sb0ZBQUUsa0JBQWtCOzsyRkFLMUIscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsaUJBR3ZCLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNZWRpYSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBJbWFnZVByZXZpZXdEaWFsb2dDb21wb25lbnQsIFRodW1ibmFpbENvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1wcm9kdWN0LW1lZGlhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIFRodW1ibmFpbENvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LW1lZGlhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWVkaWEuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TWVkaWFDb21wb25lbnQge1xuICBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgbWVkaWEgPSBpbnB1dDxNZWRpYVtdPihbXSk7XG4gIG1pbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbWVkaWFJbmRleCA9IDA7XG4gIG9uSW1hZ2VDbGljayhpOiBhbnkpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEltYWdlUHJldmlld0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgbWF4V2lkdGg6ICc4MHZ3JyxcbiAgICAgIG1heEhlaWdodDogJzgwdmgnLFxuICAgICAgaGVpZ2h0OiAnODAlJyxcbiAgICAgIHdpZHRoOiAnODAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdmdWxsLXNjcmVlbi1tb2RhbCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1lZGlhOiB0aGlzLm1lZGlhLFxuICAgICAgICBzZWxlY3RlZDogaSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHt9KTtcbiAgfVxufVxuIiwiQGlmIChtZWRpYSgpKSB7XG4gIDxkaXY+XG4gICAgPGRpdiBjbGFzcz1cIm9iamVjdC1jb3ZlciBhc3BlY3QtdmlkZW8gYmctWy0tcnQtcmFpc2VkLWJhY2tncm91bmRdXCI+XG4gICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsIFtzcmNdPVwibWVkaWEoKVttZWRpYUluZGV4XS51cmxcIiBzaXplPVwic21hbGxcIiBtb2RlPVwiZnVsbFwiPjwvcm9sYXRlY2gtdGh1bWJuYWlsPlxuICAgIDwvZGl2PlxuICAgIEBmb3IgKG1lZGlhIG9mIG1lZGlhKCk7IHRyYWNrIG1lZGlhOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBmbGV4LXJvdyBtdC0zIG1yLTMgY3Vyc29yLXBvaW50ZXIgdy0yOCBwLTIgYmctWy0tcnQtMTAtcGVyY2VudC1sYXllcl1cIlxuICAgICAgICAoY2xpY2spPVwibWVkaWFJbmRleCA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwibWVkaWFJbmRleCA9PT0gaW5kZXggPyAnYm9yZGVyIGJvcmRlci1ibGFjaycgOiAnb3BhY2l0eS03MCdcIlxuICAgICAgPlxuICAgICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsIFtzcmNdPVwibWVkaWEudXJsXCIgbW9kZT1cImZ1bGxcIj48L3JvbGF0ZWNoLXRodW1ibmFpbD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Component, input, model, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class ProductOptionComponent {
6
+ constructor() {
7
+ this.option = input.required();
8
+ this.change = output();
9
+ this.selected = model();
10
+ this.value = model();
11
+ }
12
+ onChange(value) {
13
+ this.value.set(value);
14
+ this.change.emit({ option: this.option(), value: value });
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductOptionComponent, isStandalone: true, selector: "rolatech-product-option", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change", selected: "selectedChange", value: "valueChange" }, ngImport: i0, template: "<div class=\"mb-3\">\n <div class=\"text-xl font-bold py-3\">{{ option().name }}</div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of option().values; track $index) {\n <div\n class=\"w-24 h-12 border border-[--rt-border-color] rounded flex justify-center items-center hover:text-[--rt-text-primary-inverse] hover:bg-[--rt-base-background-inverse] cursor-pointer\"\n (click)=\"onChange(item)\"\n [ngClass]=\"value()?.id === item.id ? 'bg-[--rt-base-background-inverse] text-[--rt-text-primary-inverse]' : ''\"\n >\n {{ item.name }}\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductOptionComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'rolatech-product-option', standalone: true, imports: [CommonModule], template: "<div class=\"mb-3\">\n <div class=\"text-xl font-bold py-3\">{{ option().name }}</div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of option().values; track $index) {\n <div\n class=\"w-24 h-12 border border-[--rt-border-color] rounded flex justify-center items-center hover:text-[--rt-text-primary-inverse] hover:bg-[--rt-base-background-inverse] cursor-pointer\"\n (click)=\"onChange(item)\"\n [ngClass]=\"value()?.id === item.id ? 'bg-[--rt-base-background-inverse] text-[--rt-text-primary-inverse]' : ''\"\n >\n {{ item.name }}\n </div>\n }\n </div>\n</div>\n" }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9jb21wb25lbnRzL3Byb2R1Y3Qtb3B0aW9uL3Byb2R1Y3Qtb3B0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbi9wcm9kdWN0LW9wdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBVS9DLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFRRSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUN6QyxXQUFNLEdBQUcsTUFBTSxFQUF3RCxDQUFDO1FBQ3hFLGFBQVEsR0FBRyxLQUFLLEVBQWlCLENBQUM7UUFDbEMsVUFBSyxHQUFHLEtBQUssRUFBc0IsQ0FBQztLQU1yQztJQUpDLFFBQVEsQ0FBQyxLQUF5QjtRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FUVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixtaUJDWG5DLGluQkFjQSx5RERQWSxZQUFZOzsyRkFJWCxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQcm9kdWN0T3B0aW9uLCBQcm9kdWN0T3B0aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtcHJvZHVjdC1vcHRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtb3B0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3Qtb3B0aW9uLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE9wdGlvbkNvbXBvbmVudCB7XG4gIG9wdGlvbiA9IGlucHV0LnJlcXVpcmVkPFByb2R1Y3RPcHRpb24+KCk7XG4gIGNoYW5nZSA9IG91dHB1dDx7IG9wdGlvbjogUHJvZHVjdE9wdGlvbjsgdmFsdWU6IFByb2R1Y3RPcHRpb25WYWx1ZSB9PigpO1xuICBzZWxlY3RlZCA9IG1vZGVsPFByb2R1Y3RPcHRpb24+KCk7XG4gIHZhbHVlID0gbW9kZWw8UHJvZHVjdE9wdGlvblZhbHVlPigpO1xuXG4gIG9uQ2hhbmdlKHZhbHVlOiBQcm9kdWN0T3B0aW9uVmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh7IG9wdGlvbjogdGhpcy5vcHRpb24oKSwgdmFsdWU6IHZhbHVlIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWItM1wiPlxuICA8ZGl2IGNsYXNzPVwidGV4dC14bCBmb250LWJvbGQgcHktM1wiPnt7IG9wdGlvbigpLm5hbWUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zXCI+XG4gICAgQGZvciAoaXRlbSBvZiBvcHRpb24oKS52YWx1ZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInctMjQgaC0xMiBib3JkZXIgYm9yZGVyLVstLXJ0LWJvcmRlci1jb2xvcl0gcm91bmRlZCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBob3Zlcjp0ZXh0LVstLXJ0LXRleHQtcHJpbWFyeS1pbnZlcnNlXSBob3ZlcjpiZy1bLS1ydC1iYXNlLWJhY2tncm91bmQtaW52ZXJzZV0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwib25DaGFuZ2UoaXRlbSlcIlxuICAgICAgICBbbmdDbGFzc109XCJ2YWx1ZSgpPy5pZCA9PT0gaXRlbS5pZCA/ICdiZy1bLS1ydC1iYXNlLWJhY2tncm91bmQtaW52ZXJzZV0gdGV4dC1bLS1ydC10ZXh0LXByaW1hcnktaW52ZXJzZV0nIDogJydcIlxuICAgICAgPlxuICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { MatIconModule } from '@angular/material/icon';
3
+ import { AngularCommonModule } from '@rolatech/angular-common';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "@angular/material/icon";
7
+ export class ProductOwnerRendererComponent {
8
+ constructor() {
9
+ this.name = input();
10
+ this.avatar = input();
11
+ this.username = input();
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductOwnerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductOwnerRendererComponent, isStandalone: true, selector: "rolatech-product-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 py-3\">\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"] }] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductOwnerRendererComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'rolatech-product-owner-renderer', standalone: true, imports: [AngularCommonModule, MatIconModule], template: "<div class=\"flex flex-row items-center py-3\">\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"] }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vd25lci1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL2NvbXBvbmVudHMvcHJvZHVjdC1vd25lci1yZW5kZXJlci9wcm9kdWN0LW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LW93bmVyLXJlbmRlcmVyL3Byb2R1Y3Qtb3duZXItcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBUy9ELE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRRSxTQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDdkIsV0FBTSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3pCLGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztLQUM1Qjs4R0FKWSw2QkFBNkI7a0dBQTdCLDZCQUE2Qix3ZENYMUMsbW5CQWlCQSx3RkRWWSxtQkFBbUIsK1FBQUUsYUFBYTs7MkZBSWpDLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDRSxpQ0FBaUMsY0FDL0IsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQW5ndWxhckNvbW1vbk1vZHVsZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLXByb2R1Y3Qtb3duZXItcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQW5ndWxhckNvbW1vbk1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LW93bmVyLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3Qtb3duZXItcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0T3duZXJSZW5kZXJlckNvbXBvbmVudCB7XG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlcm5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgcHktM1wiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBtci0zIGdhcC0yIGl0ZW1zLWNlbnRlclwiPlxuICAgIEBpZiAoYXZhdGFyKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtyb3V0ZXJMaW5rXT1cIlsnLycsICdAJyArIHVzZXJuYW1lKCldXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJhdmF0YXIoKVwiIGNsYXNzPVwidy0xMSBoLTExIHJvdW5kZWQtZnVsbFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTExIGgtMTEgcm91bmRlZC1mdWxsIGJnLW9yYW5nZS02MDBcIj48L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtbGcgZm9udC1ib2xkIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nLCAnQCcgKyB1c2VybmFtZSgpXVwiPlxuICAgICAgICA8c3Bhbj57eyBuYW1lKCkgfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+dmVyaWZpZWQ8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,31 @@
1
+ import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MatIcon } from '@angular/material/icon';
5
+ import { MatDivider } from '@angular/material/divider';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/button";
8
+ export class ProductPricingComponent {
9
+ constructor() {
10
+ this.product = input.required();
11
+ // price = computed(() => {
12
+ // return (this.product().price / 100).toFixed(2);
13
+ // });
14
+ this.price = input.required();
15
+ this.displayPrice = computed(() => {
16
+ return (this.price() / 100).toFixed(2);
17
+ });
18
+ this.wish = output();
19
+ this.inWishList = input(false);
20
+ }
21
+ onWish(product) {
22
+ this.wish.emit(product);
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductPricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductPricingComponent, isStandalone: true, selector: "rolatech-product-pricing", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { wish: "wish" }, ngImport: i0, template: "<div class=\"py-3\">\n <div class=\"flex justify-between items-center\">\n <div class=\"text-xl font-bold py-3\">\u00A5 {{ displayPrice() }}</div>\n <button mat-icon-button (click)=\"onWish(product())\">\n @if (inWishList()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m293-203.08 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08Z\"\n />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z\"\n />\n </svg>\n }\n </button>\n </div>\n <mat-divider></mat-divider>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], encapsulation: i0.ViewEncapsulation.None }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductPricingComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ selector: 'rolatech-product-pricing', standalone: true, imports: [CommonModule, MatButtonModule, MatIcon, MatDivider], encapsulation: ViewEncapsulation.None, template: "<div class=\"py-3\">\n <div class=\"flex justify-between items-center\">\n <div class=\"text-xl font-bold py-3\">\u00A5 {{ displayPrice() }}</div>\n <button mat-icon-button (click)=\"onWish(product())\">\n @if (inWishList()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m293-203.08 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08Z\"\n />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z\"\n />\n </svg>\n }\n </button>\n </div>\n <mat-divider></mat-divider>\n</div>\n" }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1wcmljaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LXByaWNpbmcvcHJvZHVjdC1wcmljaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LXByaWNpbmcvcHJvZHVjdC1wcmljaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFXdkQsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNFLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFDcEMsMkJBQTJCO1FBQzNCLG9EQUFvRDtRQUNwRCxNQUFNO1FBQ04sVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxTQUFJLEdBQUcsTUFBTSxFQUFXLENBQUM7UUFDekIsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztLQUlwQztJQUhDLE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDOzhHQWJVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHNmQ2ZwQyx1akNBcUJBLHlERFhZLFlBQVksOEJBQUUsZUFBZSw0SUFBVyxVQUFVOzsyRkFLakQsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsaUJBRzlDLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdERpdmlkZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtcHJvZHVjdC1wcmljaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uLCBNYXREaXZpZGVyXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtcHJpY2luZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9kdWN0LXByaWNpbmcuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0UHJpY2luZ0NvbXBvbmVudCB7XG4gIHByb2R1Y3QgPSBpbnB1dC5yZXF1aXJlZDxQcm9kdWN0PigpO1xuICAvLyBwcmljZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgLy8gICByZXR1cm4gKHRoaXMucHJvZHVjdCgpLnByaWNlIC8gMTAwKS50b0ZpeGVkKDIpO1xuICAvLyB9KTtcbiAgcHJpY2UgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGRpc3BsYXlQcmljZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKHRoaXMucHJpY2UoKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgfSk7XG4gIHdpc2ggPSBvdXRwdXQ8UHJvZHVjdD4oKTtcbiAgaW5XaXNoTGlzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgb25XaXNoKHByb2R1Y3Q6IFByb2R1Y3QpIHtcbiAgICB0aGlzLndpc2guZW1pdChwcm9kdWN0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtYm9sZCBweS0zXCI+wqUge3sgZGlzcGxheVByaWNlKCkgfX08L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25XaXNoKHByb2R1Y3QoKSlcIj5cbiAgICAgIEBpZiAoaW5XaXNoTGlzdCgpKSB7XG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiIzVmNjM2OFwiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwibTI5My0yMDMuMDggNDkuNjItMjEyLjU0LTE2NC45My0xNDIuODQgMjE3LjIzLTE4Ljg1TDQ4MC03NzcuNjlsODUuMDggMjAwLjM4IDIxNy4yMyAxOC44NS0xNjQuOTMgMTQyLjg0TDY2Ny0yMDMuMDggNDgwLTMxNS45MiAyOTMtMjAzLjA4WlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCIjNWY2MzY4XCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJtMzU0LTI4NyAxMjYtNzYgMTI2IDc3LTMzLTE0NCAxMTEtOTYtMTQ2LTEzLTU4LTEzNi01OCAxMzUtMTQ2IDEzIDExMSA5Ny0zMyAxNDNabS02MSA4My45MiA0OS42Mi0yMTIuNTQtMTY0LjkzLTE0Mi44NCAyMTcuMjMtMTguODVMNDgwLTc3Ny42OWw4NS4wOCAyMDAuMzggMjE3LjIzIDE4Ljg1LTE2NC45MyAxNDIuODRMNjY3LTIwMy4wOCA0ODAtMzE1LjkyIDI5My0yMDMuMDhaTTQ4MC00NzBaXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIH1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { booleanAttribute, Component, inject, input, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule, ViewportScroller } from '@angular/common';
3
+ import { ThumbnailComponent } from '@rolatech/angular-components';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class ProductSectionComponent {
7
+ constructor() {
8
+ this.section = input.required();
9
+ this.user = input();
10
+ this.username = input();
11
+ this.viewportScroller = inject(ViewportScroller);
12
+ this.row = input(false, { transform: booleanAttribute });
13
+ this.reverse = input(false, { transform: booleanAttribute });
14
+ }
15
+ ngOnInit() { }
16
+ onClickScroller(id) {
17
+ this.viewportScroller.scrollToAnchor(id);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductSectionComponent, isStandalone: true, selector: "rolatech-product-section", inputs: { section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: false, transformFunction: null }, reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (section(); as section) {\n @if (row()) {\n <div>\n @if (section.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\"> {{ section.title }}</span>\n </div>\n }\n @if (section.description) {\n <div>\n {{ section.description }}\n </div>\n }\n @if (section.media) {\n <div class=\"w-80%\">\n @for (item of section.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 } @else {\n <div class=\"flex w-full p-3 flex-col-reverse md:flex-row\" [ngClass]=\"reverse() ? 'md:flex-row-reverse' : 'md:flex-row'\">\n <div\n class=\"w-full md:w-1/2 py-3 flex flex-col justify-center items-center gap-3\"\n [ngClass]=\"reverse() ? ' md:ml-16' : 'md:mr-16'\"\n >\n <span class=\"text-3xl font-bold py-1\"> {{ section.title }}</span>\n <span>\n {{ section.description }}\n </span>\n </div>\n <div class=\"w-full md:w-1/2 py-11\">\n @for (item of section.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 <!-- @if (section.media) {} -->\n </div>\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }], encapsulation: i0.ViewEncapsulation.None }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductSectionComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'rolatech-product-section', standalone: true, imports: [CommonModule, ThumbnailComponent], encapsulation: ViewEncapsulation.None, template: "@if (section(); as section) {\n @if (row()) {\n <div>\n @if (section.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\"> {{ section.title }}</span>\n </div>\n }\n @if (section.description) {\n <div>\n {{ section.description }}\n </div>\n }\n @if (section.media) {\n <div class=\"w-80%\">\n @for (item of section.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 } @else {\n <div class=\"flex w-full p-3 flex-col-reverse md:flex-row\" [ngClass]=\"reverse() ? 'md:flex-row-reverse' : 'md:flex-row'\">\n <div\n class=\"w-full md:w-1/2 py-3 flex flex-col justify-center items-center gap-3\"\n [ngClass]=\"reverse() ? ' md:ml-16' : 'md:mr-16'\"\n >\n <span class=\"text-3xl font-bold py-1\"> {{ section.title }}</span>\n <span>\n {{ section.description }}\n </span>\n </div>\n <div class=\"w-full md:w-1/2 py-11\">\n @for (item of section.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 <!-- @if (section.media) {} -->\n </div>\n }\n}\n" }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LXNlY3Rpb24vcHJvZHVjdC1zZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0LXNlY3Rpb24vcHJvZHVjdC1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVVsRSxNQUFNLE9BQU8sdUJBQXVCO0lBUnBDO1FBU0UsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWtCLENBQUM7UUFDM0MsU0FBSSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUMzQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxRQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDcEQsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0tBT3pEO0lBTEMsUUFBUSxLQUFVLENBQUM7SUFFbkIsZUFBZSxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQVpVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLG1zQkNicEMsdXpEQTBEQSx5RERsRFksWUFBWSw2SEFBRSxrQkFBa0I7OzJGQUsvQix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxpQkFHNUIsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBWaWV3cG9ydFNjcm9sbGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFByb2R1Y3RTZWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtcHJvZHVjdC1zZWN0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVGh1bWJuYWlsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9kdWN0LXNlY3Rpb24uY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlY3Rpb24gPSBpbnB1dC5yZXF1aXJlZDxQcm9kdWN0U2VjdGlvbj4oKTtcbiAgdXNlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlcm5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHZpZXdwb3J0U2Nyb2xsZXIgPSBpbmplY3QoVmlld3BvcnRTY3JvbGxlcik7XG4gIHJvdyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmV2ZXJzZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgb25DbGlja1Njcm9sbGVyKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoaWQpO1xuICB9XG59XG4iLCJAaWYgKHNlY3Rpb24oKTsgYXMgc2VjdGlvbikge1xuICBAaWYgKHJvdygpKSB7XG4gICAgPGRpdj5cbiAgICAgIEBpZiAoc2VjdGlvbi50aXRsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaC00IHctMSBiZy1vcmFuZ2UtNTAwIGlubGluZS1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1tZWRpdW0gcHktMVwiPiB7eyBzZWN0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2VjdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHt7IHNlY3Rpb24uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHNlY3Rpb24ubWVkaWEpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInctODAlXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uLm1lZGlhOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktM1wiPlxuICAgICAgICAgICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsXG4gICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLnVybFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBtb2RlPVwiZnVsbFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaXRlbS5oZWlnaHRcIlxuICAgICAgICAgICAgICA+PC9yb2xhdGVjaC10aHVtYm5haWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgcC0zIGZsZXgtY29sLXJldmVyc2UgbWQ6ZmxleC1yb3dcIiBbbmdDbGFzc109XCJyZXZlcnNlKCkgPyAnbWQ6ZmxleC1yb3ctcmV2ZXJzZScgOiAnbWQ6ZmxleC1yb3cnXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidy1mdWxsIG1kOnctMS8yIHB5LTMgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTNcIlxuICAgICAgICBbbmdDbGFzc109XCJyZXZlcnNlKCkgPyAnIG1kOm1sLTE2JyA6ICdtZDptci0xNidcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBweS0xXCI+IHt7IHNlY3Rpb24udGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7IHNlY3Rpb24uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOnctMS8yIHB5LTExXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2VjdGlvbi5tZWRpYTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgICA8cm9sYXRlY2gtdGh1bWJuYWlsXG4gICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS51cmxcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBtb2RlPVwiZnVsbFwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCJpdGVtLndpZHRoXCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCJpdGVtLmhlaWdodFwiXG4gICAgICAgICAgICA+PC9yb2xhdGVjaC10aHVtYm5haWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBAaWYgKHNlY3Rpb24ubWVkaWEpIHt9IC0tPlxuICAgIDwvZGl2PlxuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL2ludGVyZmFjZXMvY2F0ZWdvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuL3Byb2R1Y3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RDYXRlZ29yeSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVkaWE6IFByb2R1Y3RDYXRlZ29yeU1lZGlhW107XG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBvcmlnaW5JZDogc3RyaW5nO1xuICBjaGlsZHJlbjogUHJvZHVjdENhdGVnb3J5O1xuICBwYXJlbnQ6IFByb2R1Y3RDYXRlZ29yeTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdENhdGVnb3J5TWVkaWEge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './product';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Byb2R1Y3QnO1xuZXhwb3J0IHsgUHJvZHVjdENhdGVnb3J5LCBQcm9kdWN0Q2F0ZWdvcnlNZWRpYSB9IGZyb20gJy4vY2F0ZWdvcnknO1xuIl19
@@ -0,0 +1,32 @@
1
+ export var ProductStatus;
2
+ (function (ProductStatus) {
3
+ ProductStatus[ProductStatus["DRAFT"] = '草稿'] = "DRAFT";
4
+ ProductStatus[ProductStatus["AWAITING"] = '审核中'] = "AWAITING";
5
+ ProductStatus[ProductStatus["PENDING"] = '审核中'] = "PENDING";
6
+ ProductStatus[ProductStatus["ACCEPTED"] = '已通过'] = "ACCEPTED";
7
+ ProductStatus[ProductStatus["ACTIVE"] = '已发布'] = "ACTIVE";
8
+ ProductStatus[ProductStatus["DELETED"] = '已删除'] = "DELETED";
9
+ ProductStatus[ProductStatus["ARCHIVED"] = '已下架'] = "ARCHIVED";
10
+ })(ProductStatus || (ProductStatus = {}));
11
+ export var ProductType;
12
+ (function (ProductType) {
13
+ // DIGITAL = <any>'虚拟商品',
14
+ // PHYSICAL = <any>'实体商品',
15
+ // OTHER = <any>'其他',
16
+ ProductType["DIGITAL"] = "\u865A\u62DF\u5546\u54C1";
17
+ ProductType["PHYSICAL"] = "\u5B9E\u4F53\u5546\u54C1";
18
+ ProductType["OTHER"] = "\u5176\u4ED6";
19
+ })(ProductType || (ProductType = {}));
20
+ export var ProductInventoryStatus;
21
+ (function (ProductInventoryStatus) {
22
+ ProductInventoryStatus["IN_STOCK"] = "\u6709\u8D27";
23
+ ProductInventoryStatus["LOW_STOCK"] = "\u5E93\u5B58\u4E0D\u8DB3";
24
+ ProductInventoryStatus["OUT_OF_STOCK"] = "\u552E\u7F44";
25
+ ProductInventoryStatus["DISCONTINUED"] = "\u5DF2\u505C\u4EA7";
26
+ })(ProductInventoryStatus || (ProductInventoryStatus = {}));
27
+ export var ProductScope;
28
+ (function (ProductScope) {
29
+ ProductScope[ProductScope["WEB"] = '网站'] = "WEB";
30
+ ProductScope[ProductScope["GLOBAL"] = '全域'] = "GLOBAL";
31
+ })(ProductScope || (ProductScope = {}));
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvaW50ZXJmYWNlcy9wcm9kdWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLENBQU4sSUFBWSxhQVFYO0FBUkQsV0FBWSxhQUFhO0lBQ3ZCLHVDQUFhLElBQUksV0FBQSxDQUFBO0lBQ2pCLDBDQUFnQixLQUFLLGNBQUEsQ0FBQTtJQUNyQix5Q0FBZSxLQUFLLGFBQUEsQ0FBQTtJQUNwQiwwQ0FBZ0IsS0FBSyxjQUFBLENBQUE7SUFDckIsd0NBQWMsS0FBSyxZQUFBLENBQUE7SUFDbkIseUNBQWUsS0FBSyxhQUFBLENBQUE7SUFDcEIsMENBQWdCLEtBQUssY0FBQSxDQUFBO0FBQ3ZCLENBQUMsRUFSVyxhQUFhLEtBQWIsYUFBYSxRQVF4QjtBQUNELE1BQU0sQ0FBTixJQUFZLFdBUVg7QUFSRCxXQUFZLFdBQVc7SUFDckIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQixxQkFBcUI7SUFFckIsbURBQWdCLENBQUE7SUFDaEIsb0RBQWlCLENBQUE7SUFDakIscUNBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxXQUFXLEtBQVgsV0FBVyxRQVF0QjtBQUNELE1BQU0sQ0FBTixJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDaEMsbURBQWUsQ0FBQTtJQUNmLGdFQUFrQixDQUFBO0lBQ2xCLHVEQUFtQixDQUFBO0lBQ25CLDZEQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBS2pDO0FBQ0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0QixtQ0FBVyxJQUFJLFNBQUEsQ0FBQTtJQUNmLHNDQUFjLElBQUksWUFBQSxDQUFBO0FBQ3BCLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3RDYXRlZ29yeSB9IGZyb20gJy4vY2F0ZWdvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1lZGlhOiBQcm9kdWN0TWVkaWFbXTtcbiAgc3RhdHVzOiBQcm9kdWN0U3RhdHVzIHwgc3RyaW5nO1xuICB0eXBlOiBQcm9kdWN0VHlwZSB8IHN0cmluZztcbiAgc2NvcGU6IFByb2R1Y3RTY29wZSB8IHN0cmluZztcbiAgY2F0ZWdvcmllczogUHJvZHVjdENhdGVnb3J5W107XG4gIHRhZ3M6IFByb2R1Y3RUYWdbXTtcbiAgc2VjdGlvbnM6IFByb2R1Y3RTZWN0aW9uW107XG4gIG9wdGlvbnM6IFByb2R1Y3RPcHRpb25bXTtcbiAgdmFyaWFudHM/OiBQcm9kdWN0VmFyaWFudFtdO1xuICBwcmljZTogbnVtYmVyO1xuICB1c2VySWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0U2VjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1lZGlhOiBQcm9kdWN0TWVkaWFbXTtcbiAgaXNVcGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RWYXJpYW50IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlcjtcbiAgc2t1OiBzdHJpbmc7XG4gIG9wdGlvbnM6IFByb2R1Y3RWYXJpYW50T3B0aW9uW107XG4gIG1lZGlhOiBQcm9kdWN0VmFyaWFudE1lZGlhW107XG4gIGlzVXBsb2FkaW5nPzogYm9vbGVhbjtcbiAgc3RhdHVzOiBQcm9kdWN0SW52ZW50b3J5U3RhdHVzIHwgc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0VmFyaWFudE1lZGlhIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0VmFyaWFudE9wdGlvbiB7XG4gIG9wdGlvbjogUHJvZHVjdE9wdGlvbjtcbiAgdmFsdWU6IFByb2R1Y3RPcHRpb25WYWx1ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFRhZyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBlbnVtIFByb2R1Y3RTdGF0dXMge1xuICBEUkFGVCA9IDxhbnk+J+iNieeovycsXG4gIEFXQUlUSU5HID0gPGFueT4n5a6h5qC45LitJyxcbiAgUEVORElORyA9IDxhbnk+J+WuoeaguOS4rScsXG4gIEFDQ0VQVEVEID0gPGFueT4n5bey6YCa6L+HJyxcbiAgQUNUSVZFID0gPGFueT4n5bey5Y+R5biDJyxcbiAgREVMRVRFRCA9IDxhbnk+J+W3suWIoOmZpCcsXG4gIEFSQ0hJVkVEID0gPGFueT4n5bey5LiL5p62Jyxcbn1cbmV4cG9ydCBlbnVtIFByb2R1Y3RUeXBlIHtcbiAgLy8gRElHSVRBTCA9IDxhbnk+J+iZmuaLn+WVhuWTgScsXG4gIC8vIFBIWVNJQ0FMID0gPGFueT4n5a6e5L2T5ZWG5ZOBJyxcbiAgLy8gT1RIRVIgPSA8YW55Piflhbbku5YnLFxuXG4gIERJR0lUQUwgPSAn6Jma5ouf5ZWG5ZOBJyxcbiAgUEhZU0lDQUwgPSAn5a6e5L2T5ZWG5ZOBJyxcbiAgT1RIRVIgPSAn5YW25LuWJyxcbn1cbmV4cG9ydCBlbnVtIFByb2R1Y3RJbnZlbnRvcnlTdGF0dXMge1xuICBJTl9TVE9DSyA9ICfmnInotKcnLFxuICBMT1dfU1RPQ0sgPSAn5bqT5a2Y5LiN6LazJyxcbiAgT1VUX09GX1NUT0NLID0gJ+WUrue9hCcsXG4gIERJU0NPTlRJTlVFRCA9ICflt7LlgZzkuqcnLFxufVxuZXhwb3J0IGVudW0gUHJvZHVjdFNjb3BlIHtcbiAgV0VCID0gPGFueT4n572R56uZJyxcbiAgR0xPQkFMID0gPGFueT4n5YWo5Z+fJyxcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdE1lZGlhIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdXVpZDogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0T3B0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZXM6IFByb2R1Y3RPcHRpb25WYWx1ZVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0T3B0aW9uVmFsdWUge1xuICBpZD86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuIl19
@@ -1,12 +1,74 @@
1
- import { Component } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { Component, inject } from '@angular/core';
2
+ import { ProductService } from '@rolatech/angular-services';
3
+ import { AngularComponentsModule, BaseComponent, RichItemComponent, RichViewComponent } from '@rolatech/angular-components';
4
+ import { AngularCommonModule } from '@rolatech/angular-common';
5
+ import { ProductCategoryService } from '../../../services';
3
6
  import * as i0 from "@angular/core";
4
- export class ProductCategoryComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ProductCategoryComponent, isStandalone: true, selector: "lib-product-category", ngImport: i0, template: "<p>product-category works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
7
+ import * as i1 from "@angular/router";
8
+ export class ProductCategoryComponent extends BaseComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.categoryService = inject(ProductCategoryService);
12
+ this.productService = inject(ProductService);
13
+ this.products = [];
14
+ this.categories = [];
15
+ this.loading = false;
16
+ }
17
+ ngOnInit() {
18
+ this.findAllCategories();
19
+ this.route.paramMap.subscribe((params) => {
20
+ const id = params.get('id');
21
+ this.findCategoryById(id);
22
+ this.findProductsByCategoryId(id);
23
+ });
24
+ }
25
+ findAllCategories() {
26
+ this.categoryService.find({}).subscribe({
27
+ next: (res) => {
28
+ this.categories = res.data;
29
+ },
30
+ });
31
+ }
32
+ findCategoryById(id) {
33
+ this.categoryService.get(id).subscribe({
34
+ next: (res) => {
35
+ this.category = res.data;
36
+ },
37
+ });
38
+ }
39
+ findAllProducts() {
40
+ this.productService.find({}).subscribe({
41
+ next: (res) => {
42
+ this.products = res.data;
43
+ },
44
+ });
45
+ }
46
+ findProductsByCategoryId(id) {
47
+ this.loading = true;
48
+ const options = {
49
+ filter: `categories:${id},published:true`,
50
+ };
51
+ this.productService.find(options).subscribe({
52
+ next: (res) => {
53
+ this.products = res.data;
54
+ this.loading = false;
55
+ },
56
+ error: (error) => {
57
+ this.loading = false;
58
+ },
59
+ });
60
+ }
61
+ loadProductsByCategory(item) {
62
+ // [routerLink] = "['../../', item.id]";
63
+ this.router.navigate([`../../${item.id}`], {
64
+ relativeTo: this.route,
65
+ });
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductCategoryComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
68
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductCategoryComponent, isStandalone: true, selector: "rolatech-product-category", usesInheritance: true, ngImport: i0, template: "<div>\n @if (category) {\n <div class=\"p-3 hidden md:block text-2xl font-medium\">{{ category.name }}</div>\n } @else {\n <div class=\"flex flex-row animate-pulse w-full\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n </div>\n }\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view list>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['../../', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: RichViewComponent, selector: "rolatech-rich-view", inputs: ["list", "wrap"] }], deferBlockDependencies: [() => [i1.RouterLink, RichItemComponent]] }); }
7
69
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductCategoryComponent, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductCategoryComponent, decorators: [{
9
71
  type: Component,
10
- args: [{ selector: 'lib-product-category', standalone: true, imports: [CommonModule], template: "<p>product-category works!</p>\n" }]
72
+ args: [{ selector: 'rolatech-product-category', standalone: true, imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent], template: "<div>\n @if (category) {\n <div class=\"p-3 hidden md:block text-2xl font-medium\">{{ category.name }}</div>\n } @else {\n <div class=\"flex flex-row animate-pulse w-full\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n </div>\n }\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view list>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['../../', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n" }]
11
73
  }] });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jYXRlZ29yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1jYXRlZ29yeS9wcm9kdWN0LWNhdGVnb3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWNhdGVnb3J5L3Byb2R1Y3QtY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBUy9DLE1BQU0sT0FBTyx3QkFBd0I7OEdBQXhCLHdCQUF3QjtrR0FBeEIsd0JBQXdCLGdGQ1ZyQyxrQ0FDQSx5RERLWSxZQUFZOzsyRkFJWCx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXByb2R1Y3QtY2F0ZWdvcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZHVjdC1jYXRlZ29yeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RDYXRlZ29yeUNvbXBvbmVudCB7fVxuIiwiPHA+cHJvZHVjdC1jYXRlZ29yeSB3b3JrcyE8L3A+XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jYXRlZ29yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1jYXRlZ29yeS9wcm9kdWN0LWNhdGVnb3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1wcm9kdWN0L3NyYy9saWIvcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWNhdGVnb3J5L3Byb2R1Y3QtY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc1SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBUzNELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxhQUFhO0lBUDNEOztRQVFFLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakQsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUN6QixlQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUNuQyxZQUFPLEdBQUcsS0FBSyxDQUFDO0tBcURqQjtJQW5EQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBZ0IsRUFBRSxFQUFFO1lBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdEMsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQVU7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3JDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDM0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3JDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDM0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxFQUFVO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUI7U0FDMUMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFTO1FBQzlCLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBMURVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDRHQ2ZyQyxtaERBd0NBLHlERDdCWSxtQkFBbUIsOEJBQUUsdUJBQXVCLCtCQUFFLGlCQUFpQiw4R0FBRSxpQkFBaUI7OzJGQUlqRix3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgQmFzZUNvbXBvbmVudCwgUmljaEl0ZW1Db21wb25lbnQsIFJpY2hWaWV3Q29tcG9uZW50IH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQcm9kdWN0LCBQcm9kdWN0Q2F0ZWdvcnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBhcmFtTWFwIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJDb21tb25Nb2R1bGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgUHJvZHVjdENhdGVnb3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtcHJvZHVjdC1jYXRlZ29yeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBbmd1bGFyQ29tbW9uTW9kdWxlLCBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgUmljaFZpZXdDb21wb25lbnQsIFJpY2hJdGVtQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZHVjdC1jYXRlZ29yeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RDYXRlZ29yeUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjYXRlZ29yeVNlcnZpY2UgPSBpbmplY3QoUHJvZHVjdENhdGVnb3J5U2VydmljZSk7XG4gIHByb2R1Y3RTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RTZXJ2aWNlKTtcbiAgY2F0ZWdvcnkhOiBQcm9kdWN0Q2F0ZWdvcnk7XG4gIHByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcbiAgY2F0ZWdvcmllczogUHJvZHVjdENhdGVnb3J5W10gPSBbXTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmluZEFsbENhdGVnb3JpZXMoKTtcbiAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbU1hcCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KCdpZCcpIGFzIHN0cmluZztcbiAgICAgIHRoaXMuZmluZENhdGVnb3J5QnlJZChpZCk7XG4gICAgICB0aGlzLmZpbmRQcm9kdWN0c0J5Q2F0ZWdvcnlJZChpZCk7XG4gICAgfSk7XG4gIH1cbiAgZmluZEFsbENhdGVnb3JpZXMoKSB7XG4gICAgdGhpcy5jYXRlZ29yeVNlcnZpY2UuZmluZCh7fSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSByZXMuZGF0YTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgZmluZENhdGVnb3J5QnlJZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jYXRlZ29yeVNlcnZpY2UuZ2V0KGlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSByZXMuZGF0YTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgZmluZEFsbFByb2R1Y3RzKCkge1xuICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZmluZCh7fSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2R1Y3RzID0gcmVzLmRhdGE7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGZpbmRQcm9kdWN0c0J5Q2F0ZWdvcnlJZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgZmlsdGVyOiBgY2F0ZWdvcmllczoke2lkfSxwdWJsaXNoZWQ6dHJ1ZWAsXG4gICAgfTtcbiAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmZpbmQob3B0aW9ucykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2R1Y3RzID0gcmVzLmRhdGE7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFByb2R1Y3RzQnlDYXRlZ29yeShpdGVtOiBhbnkpIHtcbiAgICAvLyAgW3JvdXRlckxpbmtdID0gXCJbJy4uLy4uLycsIGl0ZW0uaWRdXCI7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AuLi8uLi8ke2l0ZW0uaWR9YF0sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIEBpZiAoY2F0ZWdvcnkpIHtcbiAgICA8ZGl2IGNsYXNzPVwicC0zIGhpZGRlbiBtZDpibG9jayB0ZXh0LTJ4bCBmb250LW1lZGl1bVwiPnt7IGNhdGVnb3J5Lm5hbWUgfX08L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYW5pbWF0ZS1wdWxzZSB3LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoLTQgYmctWy0tcnQtYmFzZS1iYWNrZ3JvdW5kXSByb3VuZGVkIGNvbC1zcGFuLTJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKGxvYWRpbmcpIHtcbiAgICBAZm9yIChudW1iZXIgb2YgWzAsIDEsIDIsIDMsIDQsIDVdOyB0cmFjayBudW1iZXIpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFuaW1hdGUtcHVsc2UgbXQtMyBtci00IGN1cnNvci1wb2ludGVyIHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC1maXQgdy0yLzUgbWQ6dy0xLzQgYXNwZWN0LXZpZGVvIGJnLVstLXJ0LWJhc2UtYmFja2dyb3VuZF0gcm91bmRlZC1sZ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzUgbWQ6dy0zLzQgbWwtMyBweS0xIGZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNCBiZy1bLS1ydC1iYXNlLWJhY2tncm91bmRdIHJvdW5kZWQgY29sLXNwYW4tMlwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMiBiZy1bLS1ydC1iYXNlLWJhY2tncm91bmRdIHJvdW5kZWQgY29sLXNwYW4tMVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMiBiZy1bLS1ydC1iYXNlLWJhY2tncm91bmRdIHJvdW5kZWQgY29sLXNwYW4tMSBweS0xXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTIgYmctWy0tcnQtYmFzZS1iYWNrZ3JvdW5kXSByb3VuZGVkIGNvbC1zcGFuLTIgcHktMVwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgPHJvbGF0ZWNoLXJpY2gtdmlldyBsaXN0PlxuICAgICAgQGZvciAoaXRlbSBvZiBwcm9kdWN0czsgdHJhY2sgaXRlbSkge1xuICAgICAgICBAZGVmZXIge1xuICAgICAgICAgIDxyb2xhdGVjaC1yaWNoLWl0ZW1cbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi4vLi4vJywgaXRlbS5pZF1cIlxuICAgICAgICAgICAgW3RodW1ibmFpbF09XCJpdGVtLm1lZGlhWzBdLnVybCArICchdzQwMCdcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0ubmFtZVwiXG4gICAgICAgICAgICBbc3VidGl0bGVdPVwiaXRlbS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbcHJpY2VdPVwiaXRlbS5wcmljZSAvIDEwMFwiXG4gICAgICAgICAgPjwvcm9sYXRlY2gtcmljaC1pdGVtPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9yb2xhdGVjaC1yaWNoLXZpZXc+XG4gIH1cbjwvZGl2PlxuIl19